ASN051 — Rinnovo contratti¶
Sorgente: cbl/asn051.cbl | Tipo: Programma interattivo a griglia | Program-ID: ASN051
Menu: Assist 2.0 > Archivi > Contratti > Rinnovo contratti
Scopo¶
Propone in griglia i contratti di assistenza in scadenza in un periodo e, per quelli selezionati, esegue il rinnovo creando un nuovo contratto con le caratteristiche del precedente. In fase di rinnovo puo' applicare un aumento ISTAT alle righe tariffa del contratto (ASNCNTAR) e gestisce la modalita' "contratto annuale" (allungamento data fine + creazione rate, senza chiudere il vecchio contratto).
Oltre alla modalita' interattiva, ASN051 puo' essere eseguito in modalita' automatica (RINNOVO-AUTOMATICO) da un processo schedulato: in questo caso rinnova senza interazione operatore i contratti in scadenza. L'innesco automatico e' fatto da ASN051AG, a sua volta orchestrato da AGLANCIO.
Per i dettagli operativi lato utente vedere docs/user — ASN051.
File e tabelle principali¶
| File/Tabella | Copybook | Uso |
|---|---|---|
| ASNCNTES | asncntes |
Testata contratti |
| ASNCNTAR | asncntar |
Righe tariffa contratto/modello (prezzi prestazioni) |
| ASNCNTIP | asncntip |
Tipo contratto; flag acnp-contratto-annuale (usato dal filtro modalita' automatica) |
| ASNCNADB | asncnadb |
Addebiti/condizioni aggiuntive contratto |
| COGTRANS | cogtrans |
File coda transiti; in modalita' automatica usa un nome temporaneo univoco, cancellato in chiusura |
Tabella di lavoro tm-tm-tab1-dati |
(interna) | Righe tariffa in memoria per il calcolo aumento ISTAT |
util-asn051 (linkage) |
utilasn051.cpy |
Area di dialogo con il chiamante (attivazione modalita' automatica, periodo) |
La chiave primaria di ASNCNTAR (acnr-chia1) e' composta da acnr-pertinenza + acnr-tip + acnr-cod + acnr-id-contratto + acnr-prog (progressivo di tariffa). Per i contratti di pertinenza "C" (contratto specifico) il progressivo acnr-prog non e' necessariamente sequenziale.
Logica di calcolo aumento ISTAT¶
Le righe tariffa del contratto vengono caricate nella tabella di lavoro tm-tm-tab1-dati; per le righe "Servizio"/"Dettaglio"/"Dettaglio fattura" (acnr-fl-servizio = S/D/F) viene calcolato l'aumento in base alla percentuale ISTAT impostata (tm-perc-istat). La differenza generata dall'aumento (w-acnd-importo-diff) viene sommata alla prima riga significativa.
Dopo il calcolo, le righe ricalcolate vengono riscritte su ASNCNTAR (rwr-asncntar).
Modalita' automatica (RINNOVO-AUTOMATICO)¶
ASN051 puo' girare senza interfaccia utente quando viene chiamato con parametri di linkage aggiuntivi. Il dialogo passa dall'area util-asn051 (utilasn051.cpy) aggiunta alla procedure division:
procedure division using stringhe util-asn051.
All'avvio (main) i parametri vengono trasferiti in w-dati-called:
- se
asn051-called = "ASN051"easn051-caller not = spaces→w-dc-called = "S",w-dc-caller,w-dc-ope; - se
asn051-ope = "RINNOVO-AUTOMATICO"→w-dc-automatico = "S"(flag che pilota tutta la modalita' headless); asn051-data-ini/asn051-data-fin→w-dc-data-ini/w-dc-data-fin(periodo di scadenza).
Quando w-dc-automatico = "S", il programma salta la costruzione della maschera e della griglia (rd-msk-pop, z-costruisci-controlli, z-prepara-tm-grid, z-carica-controlli, z-costruisci-grid, ecc. sono tutti condizionati a w-dc-automatico not = "S") e non mostra box messaggio interattivi (x3-30).
Il ramo automatico e' concentrato nel paragrafo rinnovo-automatico (richiamato da a30-carica-mod con go to fine a valle):
- apre il log
gesdebug(gesdebug-loadconf/gesdebug-apri-principale); - imposta il file coda
cogtranssu un nome temporaneo univoco costruito da directory temp +#$trsasn051_+ ora/operatore, e lo apre in output; carica-file— carica i contratti in scadenza nel periodotm-contratto-da/tm-contratto-a(valorizzati daw-dc-data-ini/w-dc-data-fin);x5-sel-tutto— seleziona tutti i contratti caricati;x3-rinnovo— esegue il rinnovo vero e proprio;- chiude il log e reinizializza
util-asn051.
Ogni contratto rinnovato viene tracciato nel log ("Rinnovo Automatico Contratto:" ...) in x3-rinnovo.
Filtro sui contratti annuali in scrittura coda¶
In scrivi-cogtrans, quando w-dc-automatico = "S", la scrittura in coda (ok-scrivi-cogtrans) e' limitata ai soli contratti di tipo annuale: viene letto ASNCNTIP (acnp-cod = acnt-tip) e, se acnp-contratto-annuale not = "S", si salta la scrittura (go to ex-scrivi-cogtrans). La modalita' automatica e' quindi pensata per i contratti annuali.
Chiusura file coda¶
In chiusura del programma, oltre a close cogtrans viene eseguita anche delete file cogtrans per rimuovere il file temporaneo creato in modalita' automatica.
L'unico chiamante noto di questa modalita' e' ASN051AG.
Casistica problemi noti¶
Rinnovo contratti OSK: tariffe riscritte su righe errate¶
- Sintomo: Dopo il rinnovo di contratti OSK, le righe tariffa (
ASNCNTAR) non risultavano piu' allineate con gli importi originali. - Causa: La rilettura della riga tariffa da aggiornare usava il contatore sequenziale di ciclo come
acnr-prog; sui contratti OSK i progressivi non sono sequenziali, quindi la riscrittura sovrascriveva gli importi su righe errate. La riscrittura avveniva inoltre anche senza aumento ISTAT richiesto. - Correzione: Salvato il progressivo originale della riga tariffa per pilotare rilettura e riscrittura su
ASNCNTAR; riscrittura condizionata a indice ISTAT diverso da zero. Bonifica dei contratti gia' corrotti con il tool OSK004. - Riferimento: dettaglio — ClickUp 869dn6b7j
Storico modifiche¶
2026-07 — Modalita' automatica RINNOVO-AUTOMATICO (innesco da ASN051AG)¶
Aggiunta la possibilita' di eseguire ASN051 senza operatore, per il rinnovo automatico schedulato dei contratti in scadenza.
Modifiche.
- Aggiunta l'area di linkage
util-asn051(utilasn051.cpy) allaprocedure division(using stringhe util-asn051) e attivata lacopy "utilasn051.cpy"in working/linkage. - In
main, mappatura dei parametri di lancio inw-dati-called(ristrutturata:w-dc-caller, nuovow-dc-ope,w-dc-automatico,w-dc-data-ini,w-dc-data-fin). Seasn051-ope = "RINNOVO-AUTOMATICO"si impostaw-dc-automatico = "S". - Tutta la costruzione di maschera/griglia e i box messaggio interattivi sono condizionati a
w-dc-automatico not = "S"(rami headless inmain,a4,x3-30). - Nuovo paragrafo
rinnovo-automatico(richiamato daa30-carica-mod): apre il loggesdebug, crea uncogtranstemporaneo univoco, eseguecarica-filesul periodo passato,x5-sel-tuttoex3-rinnovo. - In
scrivi-cogtrans, in modalita' automatica la scrittura in coda e' limitata ai contratti di tipo annuale (letturaASNCNTIP, filtroacnp-contratto-annuale = "S"). - In chiusura programma aggiunta
delete file cogtransper rimuovere il file temporaneo. - Allargato
w-trs-namedapic x(70)apic x(90)per contenere il nome file temporaneo; aggiunto campo di comodoorasis(ora di sistema) per rendere univoco il nome.
L'innesco avviene da ASN051AG, orchestrato da AGLANCIO.
2026 — TASK-5330: rewrite tariffe su progressivo originale e solo con ISTAT¶
Correzione di un aggiornamento errato delle righe tariffa in fase di rinnovo, che si manifestava sui contratti OSK (progressivi acnr-prog non sequenziali).
Problema. Il loop di riscrittura delle tariffe ricalcolate usava il contatore sequenziale di ciclo w-i come acnr-prog per rileggere la riga da aggiornare (move w-i to acnr-prog prima della rd-asncntar + rwr-asncntar). Quando i progressivi reali non coincidevano con la sequenza 1..N, la lettura recuperava una riga diversa da quella prevista e la successiva riscrittura sovrascriveva l'importo su righe errate.
Correzione.
- Aggiunto il campo
tm-g1-acnr-prog pic 9(04)nella riga della tabella di lavoro; nei due punti di caricamento delle righe tariffa viene salvato il progressivo originale (move acnr-prog to tm-g1-acnr-prog (i1)). - Nel loop di riscrittura, al posto di
move w-i to acnr-progsi usa ora il progressivo salvato:move tm-g1-acnr-prog (w-i) to acnr-prog, cosi' lard-asncntar/rwr-asncntaragisce sulla riga corretta. - L'intero blocco di riscrittura e' stato condizionato a
tm-perc-istat not = zero: la riscrittura delle tariffe avviene solo se gli importi sono stati effettivamente ricalcolati per l'indice ISTAT, evitando aggiornamenti inutili o errati quando non e' richiesto alcun aumento.
I contratti gia' corrotti da rinnovi errati precedenti possono essere verificati/riallineati con il tool OSK004.