Vai al contenuto

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" e asn051-caller not = spacesw-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-finw-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):

  1. apre il log gesdebug (gesdebug-loadconf / gesdebug-apri-principale);
  2. imposta il file coda cogtrans su un nome temporaneo univoco costruito da directory temp + #$trsasn051_ + ora/operatore, e lo apre in output;
  3. carica-file — carica i contratti in scadenza nel periodo tm-contratto-da / tm-contratto-a (valorizzati da w-dc-data-ini / w-dc-data-fin);
  4. x5-sel-tutto — seleziona tutti i contratti caricati;
  5. x3-rinnovo — esegue il rinnovo vero e proprio;
  6. 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: dettaglioClickUp 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) alla procedure division (using stringhe util-asn051) e attivata la copy "utilasn051.cpy" in working/linkage.
  • In main, mappatura dei parametri di lancio in w-dati-called (ristrutturata: w-dc-caller, nuovo w-dc-ope, w-dc-automatico, w-dc-data-ini, w-dc-data-fin). Se asn051-ope = "RINNOVO-AUTOMATICO" si imposta w-dc-automatico = "S".
  • Tutta la costruzione di maschera/griglia e i box messaggio interattivi sono condizionati a w-dc-automatico not = "S" (rami headless in main, a4, x3-30).
  • Nuovo paragrafo rinnovo-automatico (richiamato da a30-carica-mod): apre il log gesdebug, crea un cogtrans temporaneo univoco, esegue carica-file sul periodo passato, x5-sel-tutto e x3-rinnovo.
  • In scrivi-cogtrans, in modalita' automatica la scrittura in coda e' limitata ai contratti di tipo annuale (lettura ASNCNTIP, filtro acnp-contratto-annuale = "S").
  • In chiusura programma aggiunta delete file cogtrans per rimuovere il file temporaneo.
  • Allargato w-trs-name da pic x(70) a pic x(90) per contenere il nome file temporaneo; aggiunto campo di comodo orasis (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-prog si usa ora il progressivo salvato: move tm-g1-acnr-prog (w-i) to acnr-prog, cosi' la rd-asncntar/rwr-asncntar agisce 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.