ASN052 - Fatturazione contratti¶
Sorgente: cbl/asn052.cbl (4.205 righe) | Tipo: Programma interattivo con griglia paginata, file di transito e generazione documenti
Menu: Assist 2.0 > Archivi > Contratti > Fatturazione contratti
Scopo¶
Estrae le rate (ASNCNFAT) dei contratti attivi nel periodo, le mostra in griglia paginata per selezione, e per ciascuna rata selezionata genera un DDT di vendita (COGTESBO + COGMOMAG + righe descrittive su COGDESAG + dati aggiuntivi COGTESAP/COGDESOR), aggiornando lo stato della rata stessa.
Supporta:
- Modalita' standalone (uso da menu) e called (invocato con
asn052-in-contratto != 0, fattura automaticamente tutte le rate aperte del contratto) - Tariffe particolari di tipo
S/D/F(servizio/dettaglio/dettaglio fattura) con logiche di generazione righe differenziate - IVA agevolata via condizione "IA" del cliente
- Reverse charge
- Sostituzione descrizioni variabili (cogsa6/cogsa601, modo
A)
Interfaccia chiamato (linkage)¶
util-asn052:
| Campo | Tipo | Uso |
|---|---|---|
asn052-called / asn052-caller |
x(08) | Identificativi chiamante/chiamato |
asn052-in-contratto |
9(12) | Id contratto: se !=0, modalita' auto-fatturazione |
asn052-tm-da-mag/anno/tipob/bolla3 |
Estremo "da" dei documenti generati (output) | |
asn052-a-mag/anno/tipob/bolla3 |
Estremo "a" dei documenti generati (output) |
In modalita' called, tm-contratto-da/a = 0/99999999, tm-id-contratto = asn052-in-contratto, ordinamento C. Si verifica acnt-fl-proposta != "S" e acnt-fl-fatturare != "N" prima di procedere. Va direttamente a a-grid-dopo-gestione e quindi x3-fattura, saltando l'interazione.
File acceduti¶
Input/lettura¶
| File | Copybook | Uso |
|---|---|---|
| ASNCNFAT | acnf-rec |
Piano fatturazione contratti (rate). Chiave k02 acnf-data per estrazione periodo |
| ASNCNTES | acnt-rec |
Testata contratto |
| ASNCNTE2 | acn2-rec |
Estensione: acn2-data-scadenza per TASK-2499 disdetta anticipata |
| ASNCNCND | acnd-rec |
Condizioni contratto: acnd-tip-fatt, acnd-importo, acnd-durata-mesi |
| ASNCNTIP | acnp-rec |
Tipo contratto: acnp-prestazione, acnp-note |
| ASNCNMOD | acnm-rec |
Modello contratto: acnm-des |
| ASNCNTAR | acnr-rec |
Tariffe particolari del contratto: acnr-fl-servizio in {S,D,F}, acnr-qta, acnr-prezzo, acnr-merce |
| ASNCNMTR | acnc-rec |
Matricole gestite dal contratto (per descrizioni aggiuntive matricole) |
| ASNMATRI/ASNMODEL/ASNMTRTP | Dati matricole, modelli, tipi (descrizioni) | |
| BSNCNFAT | bcnf-rec |
Backup piano fatturazione (per conteggio nr. rate, PBUG-1298) |
| BOGTESBO | tesb-rec |
Testate bolle backoffice: ricerca raggruppamenti gia' usati (chiave k04 tipocf+nonno) |
| COGGEANA | ana-rec |
Cliente |
| COGCNDCF | cnd-rec |
Condizioni cliente: cond "IA" per IVA agevolata |
| COGANCAP | anc-rec |
Reverse charge cliente (anc-fl-rev-ch, anc-art-ese-rev-ch) |
| COGTABEL | euta-rec |
Tabella iva agevolata (tipo "D1"), causali |
| COGRACCO | rac-rec |
Raccolta contabile (chiave k02 per controllo se gia' fatturato) |
| COGMERCI | mer-rec |
Anagrafica merci/prestazioni |
| PRNTOPER | ptop-rec |
Profilo operatore: ptop-fl-amm abilita F7 cambio data |
Output/scrittura¶
| File | Copybook | Scrittura |
|---|---|---|
| COGTESBO | tes-rec |
Testata DDT |
| COGMOMAG | mag-rec* |
Righe movimento magazzino |
| COGMOAGG | moa-rec |
Movimento aggiuntivo (art. esenzione reverse charge) |
| COGTESAP | tsa-rec |
Dati aggiuntivi testata documento: tsa-tipo-fat, tsa-data-comp-da/a, tsa-sconto-fin |
| COGDESOR | dor-rec |
Dati orig. fattura: iva agevolata, ritenuta acconto, reverse charge |
| COGDESAG | dag-rec |
Descrizioni aggiuntive righe DDT |
| ASNCNFAT | acnf-rec |
Update acnf-stato = "E", acnf-documento, acnf-importo |
Transito¶
| File | Scopo |
|---|---|
cogtrans (trsasn052.{oper}) |
Buffer rate estratte (trs-id, trs-prog, trs-sel, trs-data, trs-perc, trs-importo, trs-valore-rata, trs-comp-da/a). Chiave 2: ordinamento per cli-fat+data (C) o data+cli-fat (F) |
Chiavi secondarie¶
cogtrans.k01,k02asncnfat.k02(data)cogracco.k02bogtesbo.k04(customstartdirettamente nel sorgente pertesb-chia4)
Programmi chiamati¶
| Programma | Operazione | Scopo |
|---|---|---|
| COGS25 | (utility) | Assegnazione numero bolla per magazzino/tipo/anno (s25-i-cod=6) |
| COGU10W | Arrotonda / Edita |
Arrotondamenti su divisa e formattazione importi |
| COGU18 | crea-legame |
Memorizza legame movimento magazzino → commessa contratto (PBUG-289) |
| GESSTR | SCOMPONI-NOTE |
Spezzatura note acnp-note o testi variabili in righe da 40 char |
| COGSA7 | CERCA-SCONTO |
Sconto finanziario su pagamento per tsa-sconto-fin |
| COGSA601 | (init) | Init testo variabile per tm-tes-fat |
| COGSA6 | ESTRAI-TESTO classe "01" |
Estrae testo variabile da inserire come descrizione aggiuntiva |
| GESDATE | CERCA-FINE-MESE |
Auto-proposta tm-contratto-a (TASK-2499) |
| RNEWCONF | Lettura configurazioni iniziali (e modifica con F1) | |
| ASN043 | (lookup tipo contratto) | F8 su tm-acnp-cod |
| ASN044 | (lookup modello contratto) | F8 su tm-acnm-cod |
| ASN050 | (gestione piano fatturazione) | F6 sulla riga grid: gestione scadenza del contratto |
| ASN220 | ASN220-CALLED |
F9 su tm-id-contratto: ricerca contratto |
| COGS65W | Lookup cliente per tm-ana-cod-cf |
|
| DIALOGS | Dialogo conferma su selezione rate gia' a documento | |
| GRIDADMN | Personalizzazione griglia (Prepara, Add-Record, Modify-Record, S-F4) |
Configurazioni RNEWCONF (x99-confi)¶
| Idx | Gruppo | Parametro | Variabile | Effetto |
|---|---|---|---|---|
| 01 | assist |
magaz-vendita |
tm-cfg-mag-ven |
Magazzino di default per i DDT |
| 02 | assist |
cau-vendita |
tm-cfg-cau-ven (default) |
Causale di vendita di default |
| 03 | PROGCOGV51 |
IVA-AGEVOLATA-DATA-DESCR |
tm-cfg-iva-agev-data-descr |
Testo descrizione data IVA agevolata |
| 04 | assist |
data-bolle-contratti |
tm-cfg-data-bolle-contratti |
R = data rata, T = data digitata, altro = richiesta |
| 05 | reverse-ch |
reverse-charge-aliquota |
tm-cfg-reverse-ali |
Aliquota da usare per reverse charge (default "NI") |
| 06 | ass-contr |
info-matricole-su-ddt-fatturazione |
tm-cfg-info-matricole |
"S" → invoca x31-info-matricole |
| 07 | ass-contr |
cau-ddt-fat-contratti |
tm-cfg-cau-ven (override) |
Causale specifica DDT contratti; se 0 o non-numerico, fallback al 02 |
| 08 | ass-contr |
modo-des-variabili |
tm-cfg-modo-des-variabili |
"A" → invoca x32-des-variabili (cogsa6) |
Inoltre, dentro leggi-rnewconf per cliente fatturazione:
- C/<cli-fat>/assist/magaz-cliente → tm-cfg-mag-cli: se valorizzato sovrascrive w-cfg-mag
Logica di estrazione (carica-file / tratta-chia1)¶
st-asncnfat-notmin-chia2conacnf-data = tm-contratto-da- Scorre
ASNCNFATfinche'acnf-data > tm-contratto-a - Per ogni rata,
scrivi-cogtransfiltra: acnf-pertinenza = 'C',acnf-stato != "E"(non gia' fatturata)tm-id-contratto != 0→ match esattoacnt-fl-chiuso != 'C'- Disdetta (
fl-chiuso = 'D'+acn2-data-scadenza): se rata oltre scadenza → scrive "C.Disdetto Rata Non Fatturata" suacnf-descr-agge salta acnt-fl-fatturare != "N"acnt-conferma-rinnovo = "S"eacnt-accetta-rinnovo != "S"eacnt-id-origine != 0→ salta (rinnovo non confermato)- Filtro per
tm-acnp-cod,tm-acnm-cod,tm-ana-cod-cf - Scrive
cogtranscon chiave alternativacli-fat+data(ordinamentoC) odata+cli-fat(F) - Se in modalita' called con
w-asn052-in-contratto != 0: auto-select seacnf-doc-num = zero
Calcolo importi rata (calcola-importi)¶
Per ogni record di cogtrans:
- Somma importi gia' fatturati: scorre
ASNCNFATper id-contratto, sommaacnf-importoper rate con statoE, salva ultimo progressivo - Legge
ASNCNCNDperacnd-importo(totale contratto) - Se
trs-perc != 0:trs-importo = acnd-importo * trs-perc / 100(arrotondato via COGU10W) - Altrimenti:
trs-importo = trs-valore-rata
Generazione DDT (x3-fattura)¶
Pre-check (paragrafo x3-01-loop)¶
Verifica che per ogni rata selezionata, la merce acnp-prestazione esista. Se anche una mancante → blocco con m-asn052-14-1.
Per ogni rata selezionata (x3-10-loop)¶
leggi-rnewconfper il cliente fatturazione (magazzino specifico) e calcolow-cfg-mag- Testata DDT (
ins-cogtesbo):COGS25per numero bollaCOGTESBOcon cliente fatturazione (nonno), cliente assistito (padre), causale, data (tm-data-bolseT,acnf-dataseR), pagamento da rata, agente daana(eventualmente sovrascritto da cliente di consegna)COGTESAPcontipo-fat,data-comp-da/a,sconto-fin(da COGSA7)COGDESORcon flag IVA agevolata, ritenuta acconto, reverse charge (anc-fl-rev-ch)
- Calcolo tipo righe (300920):
- Scorre
ASNCNTARper identificare presenza di tariffeS/D/F - Se almeno una
"F"(dettaglio fattura) → percorsox35-dettaglio-fattura - Altrimenti → percorso standard
- Scorre
- Percorso standard: una sola riga
COGMOMAGconacnp-prestazione, qta=1, prezzo=trs-importo, IVA da merce (con override agevolata/reverse) - Percorso
x35-dettaglio-fattura:- Se anche tariffe
S/D: riserva prog 1 per la riga aggregata, parte da prog 2 - Per ogni tariffa
F: una riga con qta=acnr-qta, prezzo=acnr-prezzo * w-perc / 100(w-perc=trs-perco calcolato datrs-valore-rata / acnd-importo * 100) - PBUG-1298 (160522): se solo righe
F, noS/D, etrs-perc = 0, eacnd-durata-mesi = w-nr-rate: prezzo =acnr-prezzo / acnd-durata-mesi / acnr-qta - Residuo arrotondamenti aggregato sulla riga prog 1 con
acnp-prestazione(se presenti S/D), o aggiunto al primoFaltrimenti
- Se anche tariffe
- Descrizioni aggiuntive (
x3-parte-finale):- Note
acnp-notecon sostituzione<RIF-CONTRATTO>/<DATA-INI>/<DATA-FIN>(per disdetta usaacn2-data-scadenza) acnf-descr-agg(descrizione aggiuntiva specifica rata)- Per tariffe
D: descrizione merce + "(qta)" - Se
tm-cfg-info-matricole = "S"→x31-info-matricole: per ogni matricola tipoCdel contratto, descrizioni con tipo, "MOD. ...", "MATR. ..." (serial number), "Fatturazione Rata del gg/mm/aaaa" - Se
tm-cfg-modo-des-variabili = "A"→x32-des-variabili: COGSA601 + COGSA6 classe"01"con lingua corrente - Se IVA agevolata →
c-ins-note-iva-agv: note dalla descrizione tabella (cogdescr) + riferimento normativo + data
- Note
- Update rata:
acnf-stato = "E",acnf-documento = tes-chia3,acnf-importo = trs-importo - PBUG-289 (120419): se
acnt-commessa != spaces→COGU18 crea-legameper legame movimento magazzino → commessa - Reverse charge (160316): override
mag-alf = "NI"(otm-cfg-reverse-ali);COGMOAGGconmoa-art-ese = w-art-rev-ch
Tracking documenti generati¶
tm-da-bol (primo doc) e tm-a-bol (ultimo doc) accumulati per messaggio finale m-asn052-13-1/15-1 o ritorno tramite linkage (se called).
Raggruppamento DDT (assegna-raggrup)¶
Paragrafo assegna-raggrup (291019, attualmente disabilitato nel codice attivo): scorre BOGTESBO per cliente nonno, raggruppa DDT con stesso aa+mm, esclude triangolazioni/causali omaggio/raccolte. Assegna primo numero raggruppamento libero (1-99).
Modifica data fatturazione (F7)¶
Solo ptop-fl-amm = 'S'. Paragrafo x-modifica-data:
- Disabilita grid, abilita campo tm-data-fatturazione
- Su conferma: aggiorna trs-data su cogtrans e acnf-data su ASNCNFAT
- Modify-Record sulla grid
Validazioni testata¶
tm-contratto-daobbligatorio (m-asn052-16-1)tm-contratto-a>=tm-contratto-da(m-asn052-17-1/18-1); auto-proposta fine-mese via GESDATE se 0tm-data-bolobbligatorio se visibile (m-asn052-19-1)tm-ana-cod-cfdeve esistere inCOGGEANA(m-asn052-20-1)tm-acnp-cod/tm-acnm-cod: lookupASNCNTIP/ASNCNMODtm-id-contratto: deve esistere, non in proposta (m-asn052-23-1/24-1)
Messaggi principali¶
| ID | Contesto |
|---|---|
m-asn052-2-1/3-1 |
Magazzino/causale di vendita non configurati |
m-asn052-4-1 |
Titolo maschera |
m-asn052-5-1/6-1 |
Errori chiamata: contratto non trovato / in proposta |
m-asn052-7-1 |
Conferma estrazione |
m-asn052-8-1 |
Errore apertura cogtrans |
m-asn052-9-1 |
Nessuna rata trovata |
m-asn052-10-1/11-1 |
Fine/inizio paginazione griglia |
m-asn052-12-1 |
Conferma creazione documenti |
m-asn052-13-1/15-1 |
"Documenti creati da/a" |
m-asn052-14-1 |
Prestazione tipo contratto non in anagrafica (blocco) |
m-asn052-16-1 ... 26-1 |
Validazioni campi testata |
m-asn052-27-1/28-1/29 |
Etichette pulsanti custom (F3 Crea / F6 Gestione / F7 Cambia data) |
m-scadenza-contratto / m-w-scadenza-contratto |
Dialogo "Rata gia' collegata a documento" |
Storico modifiche significative (dal sorgente)¶
- 221015: blocco gestione contratti in stato Proposta
- 241016: invocazione "called" con
asn052-in-contratto; estremi DDT in output - 140214: gestione
conferma-rinnovo/accetta-rinnovo - 150515: IVA agevolata: override aliquota su merci "agevolabili"
- 270116: reverse charge integrato su righe e art. esenzione
- 140316: introdotta
COGTESAPper dati aggiuntivi DDT - 240317: TASK info matricole su DDT (
x31-info-matricole) - 291019: tentativo raggruppamento DDT (sospeso)
- 300920: PCASE-1598 tariffe particolari
S/D/F(paragrafox35-dettaglio-fattura) - 301020: ricalcolo qta/prezzo/valore per riga
Fper evitare arrotondamenti scorretti - 271120: percentuale a 4 decimali (era 2), conteggio senza rounded
- 120419: PBUG-289 legame commessa via COGU18
- 160522: PBUG-1298 prezzo per durata-mesi se solo
Fe perc=0 - 160622: divisione per qta nel prezzo da durata-mesi
- 020222: contratto primo rinnovo non rinnovato → considera comunque
- 141125: TASK-2499 disdetta anticipata (
fl-chiuso = 'D'+acn2-data-scadenza); GESDATE auto fine-mese - 060223:
modo-des-variabili = "A"attiva COGSA6/COGSA601 (descrizioni variabili 01);dag-a-capo = "S"su descrizioni aggiuntive - 260115: introdotto
trs-valore-ratacome alternativa atrs-perc
Note implementative¶
- File transito
cogtranschiave alternativa custom per ordinamento C/F - Griglia paginata via
fscrol2.cpy/dtab.cpy/utilpggr.cpy: spaginamento navigato conpg-up/pg-dwn, restart su chia2 - I 3 pulsanti custom (F3 Crea documenti, F6 Gestione, F7 Cambia data) sono creati esplicitamente con
x-display-push-button-custom - Il
w-fl-start-dopo-gestionepermette di tornare alla griglia mantenendo la posizione dopo rientro da ASN050 (F6) - Cancel di
COGS25,COGSA6,COGSA601,COGU18inz-chiudiper evitare leak di memoria sub