Vai al contenuto

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 cliente
  • t-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)