ASN115 — Importazione chiamate¶
Sorgente: cbl/asn115.cbl (3.761 righe) | Tipo: Programma interattivo a griglia (scheletro "MODO A")
Menu: Assist 2.0 > Operativo > Gestione Interventi a Richiesta > Importazione chiamate
Programmi chiamati¶
| Programma | Operazione | Scopo |
|---|---|---|
| COGPA9 | (import Excel) | Acquisizione file Excel tramite modello di import-export I-CHIAMATE |
| ASNS20 | "INSERISCI" |
Creazione della chiamata nel sistema. Flag asns20-fl-skip-online = "S" (salta elaborazione online) |
| ASNS22 | "CERCA-MODELLO" |
Ricerca modello prestazioni per determinare giorni garanzia e priorita' |
| CRMS06 | "CERCA-SCHEDA" |
Ricerca prospect per codice account |
| CRMS06 | "LEGGI" |
Lettura informazione specifica del prospect |
| CRMS06 | "Scrivi" |
Scrittura/aggiornamento informazione prospect (centrale, edificio, account, cognome, nome, telefono, email, zona) |
| CRMS07 | "SCRIVI" |
Creazione nuovo prospect (nome, indirizzo, localita', provincia, CAP) |
| CRMS07 | "AGGIORNA" |
Aggiornamento prospect esistente |
| COGMAH | (lookup) | Ricerca brand (da tasto F8) |
| GRIDADMN | (gestione) | Amministrazione colonne griglia (da tasto F4) |
| RNEWCONF | (lettura config) | Caricamento parametri di configurazione |
| GESLPRC | (log) | Scrittura log di elaborazione |
Tabelle e file utilizzati¶
File ISAM consultati¶
| File | Copybook | Uso |
|---|---|---|
| COGGEANA | coggeana |
Anagrafica clienti/fornitori — lookup cliente fatturazione e cliente assistito (tipo "C") |
| ASNMATRI | asnmatri |
Anagrafica matricole — lookup per ID o serial number |
| ASNCHTES | asnchtes |
Testata chiamate — lettura chiamata originale per garanzia |
| ASNINTE2 | asninte2 |
Dettaglio interventi — aggiornamento post-creazione |
| ASNMPDLK | asnmpdlk |
Modelli prestazioni — lettura giorni garanzia e priorita' |
| ASNTPATT | asntpatt |
Tipi attivita' — validazione codice |
| ASNPRIOR | asnprior |
Priorita' — validazione codice |
| ASNSTCHM | asnstchm |
Stati chiamata — validazione codice |
| ASNAREAT | asnareat |
Aree tecniche — validazione codice |
| ASNRESPO | asnrespo |
Responsabili — validazione codice |
| COGBRAND | cogbrand |
Brand — validazione codice |
| COGTABEL | cogtabel |
Tabelle generiche — validazione zone |
| GRPAZIEN | grpazien |
Aziende del gruppo — validazione codice azienda |
File di transito¶
| File | Scopo |
|---|---|
| t-chiamate-cli | Indice chiamate degli ultimi 60 giorni per matching garanzia. Chiave primaria: t-chc-id-chiamata. Chiave alternativa: t-chc-chiamata-cli + t-chc-data + t-chc-id-chiamata |
| t-grid-det | Dati importati dal file Excel, con risultati validazione. Una riga per ogni riga Excel |
Parametri di configurazione (RNEWCONF)¶
| Gruppo | Parametro | Variabile interna | Tipo | Effetto |
|---|---|---|---|---|
assist |
gestione-gruppo-aziende |
tm-cfg-gruppo-aziende |
x(01) | "S" = azienda obbligatoria |
ass-chiam |
info-crm-centrale |
tm-cfg-info-centrale |
9(04) | Codice lookup per informazione "Centrale" |
ass-chiam |
info-crm-edificio |
tm-cfg-info-edificio |
9(04) | Codice lookup per informazione "Edificio" |
ass-chiam |
clienti-assistiti-crm |
tm-cfg-cli-ass-nom |
x(01) | "S" = abilita prospect come clienti assistiti e creazione nuovi |
ass-chiam |
info-crm-zona |
tm-cfg-info-zona |
9(04) | Codice lookup per zona prospect |
crm-camp |
inf-ref-imp-cognome |
tm-cfg-info-cognome |
9(04) | Codice lookup per cognome |
crm-camp |
inf-ref-imp-nome |
tm-cfg-info-nome |
9(04) | Codice lookup per nome |
crm-camp |
inf-telefono |
(caricato) | 9(04) | Codice lookup per telefono |
crm-camp |
inf-email |
tm-cfg-info-email |
9(04) | Codice lookup per email |
clipot |
tipo-nominativo-anagr-cliente |
tm-cfg-tcl-cli |
x(03) | Tipo nominativo per creazione prospect |
azienda |
gestione-brand-marchio |
tm-cfg-gestione-brand |
x(01) | Abilita colonna Brand |
Colonne del file Excel¶
Costanti definite come k-ie-i-chiamate-*. Il profilo di importazione COGPA9 mappa le colonne Excel a queste costanti.
| Costante | Nome colonna profilo | Tipo | Trasformazione |
|---|---|---|---|
k-ie-i-chiamate-az-cod |
AZ-COD |
x(04) | — |
k-ie-i-chiamate-az-des |
AZ-DES |
x(60) | — |
k-ie-i-chiamate-cli-fat-cod |
CLI-FAT-COD |
9(05) | Numerico |
k-ie-i-chiamate-cli-fat-des |
CLI-FAT-DES |
x(40) | Match case-sensitive |
k-ie-i-chiamate-chiamata-cli |
CHIAMATA-CLI |
x(30) | — |
k-ie-i-chiamate-tpat-cod |
TPAT-COD |
x(02) | — |
k-ie-i-chiamate-tpat-des |
TPAT-DES |
x(60) | Match in tabella |
k-ie-i-chiamate-stc-cod |
STC-COD |
x(02) | — |
k-ie-i-chiamate-stc-des |
STC-DES |
x(40) | Match in tabella |
k-ie-i-chiamate-cli-ass-cod |
CLI-ASS-COD |
9(08) | Numerico |
k-ie-i-chiamate-cli-ass-ragsoc |
CLI-ASS-RAGSOC |
x(40) | Match esatto 40 car. maiuscolo |
k-ie-i-chiamate-cli-ass-cognome |
CLI-ASS-COGNOME |
x(40) | UPPER-CASE |
k-ie-i-chiamate-cli-ass-nome |
CLI-ASS-NOME |
x(40) | UPPER-CASE |
k-ie-i-chiamate-cli-ass-ind |
CLI-ASS-IND |
x(40) | Piu' colonne concatenate con spazi; match su 35 car. |
k-ie-i-chiamate-cli-ass-loca |
CLI-ASS-LOCA |
x(40) | UPPER-CASE |
k-ie-i-chiamate-cli-ass-prov |
CLI-ASS-PROV |
x(02) | UPPER-CASE |
k-ie-i-chiamate-cli-ass-cap |
CLI-ASS-CAP |
x(10) | UPPER-CASE |
k-ie-i-chiamate-cli-ass-tel-1 |
CLI-ASS-TEL-1 |
x(40) | UPPER-CASE |
k-ie-i-chiamate-cli-ass-tel-2 |
CLI-ASS-TEL-2 |
x(40) | UPPER-CASE; aggiunto a note con prefisso "Telefono 2: " |
k-ie-i-chiamate-cli-ass-tel-3 |
CLI-ASS-TEL-3 |
x(40) | UPPER-CASE; aggiunto a note con prefisso "Telefono 3: " |
k-ie-i-chiamate-cli-ass-email |
CLI-ASS-EMAIL |
x(80) | LOWER-CASE |
k-ie-i-chiamate-cli-ass-zon-c |
CLI-ASS-ZON-C |
x(03) | UPPER-CASE |
k-ie-i-chiamate-cli-ass-zon-d |
CLI-ASS-ZON-D |
x(40) | UPPER-CASE |
k-ie-i-chiamate-age-cod |
AGE-COD |
9(05) | Numerico |
k-ie-i-chiamate-age-des |
AGE-DES |
x(40) | Match |
k-ie-i-chiamate-centrale |
CENTRALE |
x(20) | Scritto come info CRM del prospect |
k-ie-i-chiamate-edificio |
EDIFICIO |
x(40) | Scritto come info CRM del prospect |
k-ie-i-chiamate-account |
CLI-ACCOUNT |
x(20) | Ricerca prospect via CRMS06 |
k-ie-i-chiamate-resp-cod |
RESP-COD |
x(03) | — |
k-ie-i-chiamate-pri-cod |
PRI-COD |
x(03) | Auto-fill da modello se vuoto |
k-ie-i-chiamate-pri-des |
PRI-DES |
x(40) | Match in tabella |
k-ie-i-chiamate-chi-data |
CHI-DATA |
9(08) | Default: data di sistema se 0 |
k-ie-i-chiamate-chi-ora |
CHI-ORA |
9(04) | — |
k-ie-i-chiamate-app-data |
APP-DATA |
9(08) | — |
k-ie-i-chiamate-app-ora |
APP-ORA |
9(04) | — |
k-ie-i-chiamate-scad-data |
SCAD-DATA |
9(08) | — |
k-ie-i-chiamate-scad-ora |
SCAD-ORA |
9(04) | — |
k-ie-i-chiamate-mtr-id |
MTR-ID |
9(12) | Numerico |
k-ie-i-chiamate-mtr-sn |
MTR-SN |
x(30) | — |
k-ie-i-chiamate-dst-id |
DST-ID |
x(20) | — |
k-ie-i-chiamate-area-cod |
AREA-COD |
x(03) | — |
k-ie-i-chiamate-brand-cod |
BRAND-COD |
x(03) | — |
k-ie-i-chiamate-oggetto |
OGGETTO |
x(80) | — |
k-ie-i-chiamate-descr |
DESCR |
x(2000) | Piu' colonne concatenate con a-capo |
k-ie-i-chiamate-garanzia |
GARANZIA |
x(01) | Accetta "S", "Y", "X", "SI" → normalizzato a "S" |
k-ie-i-chiamate-gg-garanzia |
GG-GARANZIA |
9(04) | — |
k-ie-i-chiamate-id-garanzia |
ID-GARANZIA |
9(12) | — |
Algoritmo di garanzia¶
Fase 1: Flag esplicito¶
Il campo GARANZIA viene riconosciuto se contiene "S", "Y", "X" o "SI". Normalizzato a "S" nel campo tm-die-fl-gar.
Fase 2: Ricerca modello prestazioni¶
Se GG-GARANZIA = 0 (non indicato nel file), viene chiamato ASNS22 con operazione "CERCA-MODELLO":
Input:
asns22-tip-att ← tipo attivita'
asns22-cli-fat ← cliente di fatturazione
asns22-brand ← brand
asns22-grp-az ← codice azienda
asns22-id-matr ← 0 (non usato)
asns22-tip-mtr ← " " (non usato)
Output:
asns22-esito = "S" → modello trovato
asns22-o-ampl-id → ID record in ASNMPDLK
Se trovato, dal record ASNMPDLK si estraggono:
- ampl-gg-garanzia → giorni garanzia
- ampl-priorita → priorita' (solo se non gia' indicata nel file)
Fase 3: Matching chiamata originale¶
Ricerca nel file di transito t-chiamate-cli (ultime chiamate caricate, finestra 60 giorni) per chiave alternativa:
t-chc-chiamata-cli= riferimento chiamata clientet-chc-data= data
Se trovata con data diversa → proposta come Id originale. Se trovata con stessa data → riga marcata come duplicata (non valida).
Fase 4: Validazione Id originale esplicito¶
Se ID-GARANZIA e' indicato nel file:
- Lettura ASNCHTES con l'ID
- Verifica che il cliente assistito della chiamata originale corrisponda
Flusso di creazione (Fase 2 dell'elaborazione)¶
Per ogni riga valida (t-gor-r-valida = "S"):
1. Gestione prospect¶
- Se il cliente e' da creare (
da-imp = "S"): - CRMS07
"SCRIVI"→ crea prospect con nome, indirizzo, localita', provincia, CAP - Il codice prospect ritorna in
crms07-nom - Se il cliente esiste gia' come prospect:
- CRMS07
"AGGIORNA"→ aggiorna dati anagrafici
2. Scrittura informazioni CRM¶
Per ogni informazione presente (centrale, edificio, account, cognome, nome, telefono, email, zona):
- CRMS06 "Scrivi" con il codice informazione dalla configurazione
3. Creazione chiamata¶
ASNS20 "INSERISCI" con mapping:
t-gor-r-cht-data → asns20-data
t-gor-r-cht-ora → asns20-ora
t-gor-r-cli-fat-cod → asns20-cli-fat
t-gor-r-cli-ass-cod/nom → asns20-cli-ass / asns20-cli-ass-nom
t-gor-r-cli-ass-tip → asns20-cli-ass-tip ("P" o "C")
t-gor-r-tpa-cod → asns20-tip-att
t-gor-r-scd-data → asns20-scad-data
t-gor-r-scd-ora → asns20-scad-ora
t-gor-r-app-data → asns20-ass-data
t-gor-r-app-ora → asns20-ass-ora
t-gor-r-cht-cli → asns20-chiamata-cli
t-gor-r-dst-idx → asns20-dst-idx
t-gor-r-oggetto → asns20-oggetto
t-gor-r-note → asns20-note
t-gor-r-pri-cod → asns20-priorita
t-gor-r-stc-cod → asns20-stato
t-gor-r-mtr-id → asns20-matr-1
t-gor-r-arte-cod → asns20-area-tecnica
t-gor-r-bra-cod → asns20-brand
t-gor-r-grp-az-cod → asns20-grp-az-cod
t-gor-r-age-cod → asns20-agente
asns20-fl-skip-online ← "S"
Esito: asns20-o-chiamata = numero chiamata creata.
4. Aggiornamento post-creazione¶
ASNS20 non gestisce i dati di garanzia. Dopo la creazione, il programma aggiorna direttamente ASNCHTES:
acht-fl-garanzia ← t-gor-r-fl-gar (se "S")
acht-id-garanzia ← t-gor-r-id-gar
acht-gg-garanzia ← t-gor-r-gg-gar
Se il responsabile e' specificato nell'importazione, viene sovrascritto anche quello.
Limiti tecnici¶
| Elemento | Limite | Costante |
|---|---|---|
| Tabella aziende in memoria | 200 | k-max-ta-pnt |
| Tabella tipi attivita' | 200 | k-max-tpa-pnt |
| Tabella stati chiamata | 200 | k-max-tsc-pnt |
| Tabella priorita' | 200 | k-max-tpr-pnt |
| Tabella zone | 200 | k-max-tzo-pnt |
| Lunghezza note | 2000 caratteri | k-len-note |
| Lunghezza indirizzo | 40 caratteri | k-len-cli-ass-ind |
| Finestra ricerca garanzia | 60 giorni | m-gg-max-garanzia |
Messaggi di errore¶
Validazione riga¶
| Messaggio | Contesto |
|---|---|
| "L'azienda non e' presente sulla riga." | Azienda mancante (obbligatoria con gestione-gruppo-aziende) |
| "Codice azienda: XXX non esistente" | Codice non trovato in GRPAZIEN |
| "Azienda: XXX non esistente" | Descrizione non corrispondente |
| "Cliente di fatturazione non presente sulla riga." | Nessun dato |
| "Codice cliente di fatturazione: XXX non esistente" | Codice non trovato in COGGEANA |
| "Cliente di fatturazione: XXX non esistente" | Descrizione non trovata |
| "Cliente di fatturazione: XXX ambiguo: corrisponde a piu' clienti" | Piu' clienti con stessa descrizione |
| "Codice tipo attivita': XXX non esistente" | Codice non trovato in ASNTPATT |
| "Tipo attivita': XXX non esistente" | Descrizione non trovata |
| "Cliente assistito non presente sulla riga." | Nessun dato identificativo |
| "Codice cliente assistito: XXX non esistente" | Codice non trovato in COGGEANA |
| "Cliente assistito: XXX ambiguo: corrisponde a piu' clienti" | Piu' corrispondenze |
| "Cliente assistito: XXX non esistente" | Non trovato (warning se crea prospect) |
| "Il codice account trovato corrisponde ad un prospect, non ad un cliente effettivo." | clienti-assistiti-crm non attiva |
| "Il codice account non corrisponde ad un cliente in anagrafica." | Account non trovato |
| "Cliente assistito 'prospect'; matricola ignorata." | Warning: prospect non ha matricole |
| "Matricola con ID = XXX non esistente" | Non trovata in ASNMATRI |
| "Matricola con serial number = XXX non esistente" | S/N non trovato |
| "Matricola XXX con serial number = XXX appartenente a cliente diverso." | Matricola di altro cliente |
| "Cliente assistito 'prospect'; destinazione ignorata." | Warning |
| "Destinazione con ID: XXX non esistente" | Non trovata |
| "Codice area tecnica: XXX non esistente" | Non trovata in ASNAREAT |
| "Brand non esistente!!" | Non trovato in COGBRAND |
| "Codice responsabile: XXX non esistente" | Non trovato in ASNRESPO |
| "Codice priorita': XXX non esistente" | Non trovata in ASNPRIOR |
| "Priorita' chiamata: XXX non esistente" | Descrizione non trovata |
| "Codice stato chiamata: XXX non esistente" | Non trovato in ASNSTCHM |
| "Stato chiamata: XXX non esistente" | Descrizione non trovata |
| "Codice zona: XXX non esistente" | Non trovata in COGTABEL |
| "Zona: XXX non esistente" | Descrizione non trovata |
| "Le note chiamata sono obbligatorie" | Tutte le colonne descrizione vuote |
| "La chiamata originale indicata non esiste" | ID garanzia non trovato in ASNCHTES |
| "Il cliente assistito della chiamata originale non corrisponde" | Cliente diverso |
Messaggi di overflow¶
| Messaggio | Causa |
|---|---|
| "Raggiunta dimensione massima TAB-AZIENDE" | Piu' di 200 aziende |
| "Raggiunta dimensione massima TAB-TIPI-ATT" | Piu' di 200 tipi attivita' |
| "Raggiunta dimensione massima TAB-STATI-CHIAMATA" | Piu' di 200 stati chiamata |
| "Raggiunta dimensione massima TAB-PRIORITA" | Piu' di 200 priorita' |
| "Raggiunta dimensione massima TAB-ZONE" | Piu' di 200 zone |
Messaggi interfaccia¶
| Messaggio | Contesto |
|---|---|
| "Preparazione ricerca garanzia..." | Avvio programma |
| "Reimportiamo la fonte dati Excel." | Conferma re-importazione (F1) |
| "Sono presenti segnalazioni." | Warning/errori trovati durante import |
| "Elaborazione completata. Premi F7 per vedere il risultato." | Fine importazione |
Note di implementazione¶
- Il match su ragione sociale e' esatto su 40 caratteri maiuscolo (cambiato il 25/11/2022)
- Il match su indirizzo e' su 35 caratteri (non 40)
- ASNS20 viene chiamato con
fl-skip-online = "S"per saltare l'elaborazione online - I dati di garanzia vengono aggiornati dopo la creazione tramite ASNS20 (ASNS20 non li gestisce)
- L'email viene convertita in minuscolo; tutti gli altri campi testuali in maiuscolo
- Flag stato riga:
t-gor-r-valida="S"(valida) o"N"(non valida) - Contatori:
tm-n-cht-l(caricate),tm-n-cht-v(valide),tm-n-cht-i(importate)