Vai al contenuto

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, k02
  • asncnfat.k02 (data)
  • cogracco.k02
  • bogtesbo.k04 (custom start direttamente nel sorgente per tesb-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-clientetm-cfg-mag-cli: se valorizzato sovrascrive w-cfg-mag

Logica di estrazione (carica-file / tratta-chia1)

  1. st-asncnfat-notmin-chia2 con acnf-data = tm-contratto-da
  2. Scorre ASNCNFAT finche' acnf-data > tm-contratto-a
  3. Per ogni rata, scrivi-cogtrans filtra:
  4. acnf-pertinenza = 'C', acnf-stato != "E" (non gia' fatturata)
  5. tm-id-contratto != 0 → match esatto
  6. acnt-fl-chiuso != 'C'
  7. Disdetta (fl-chiuso = 'D' + acn2-data-scadenza): se rata oltre scadenza → scrive "C.Disdetto Rata Non Fatturata" su acnf-descr-agg e salta
  8. acnt-fl-fatturare != "N"
  9. acnt-conferma-rinnovo = "S" e acnt-accetta-rinnovo != "S" e acnt-id-origine != 0 → salta (rinnovo non confermato)
  10. Filtro per tm-acnp-cod, tm-acnm-cod, tm-ana-cod-cf
  11. Scrive cogtrans con chiave alternativa cli-fat+data (ordinamento C) o data+cli-fat (F)
  12. Se in modalita' called con w-asn052-in-contratto != 0: auto-select se acnf-doc-num = zero

Calcolo importi rata (calcola-importi)

Per ogni record di cogtrans:

  1. Somma importi gia' fatturati: scorre ASNCNFAT per id-contratto, somma acnf-importo per rate con stato E, salva ultimo progressivo
  2. Legge ASNCNCND per acnd-importo (totale contratto)
  3. Se trs-perc != 0: trs-importo = acnd-importo * trs-perc / 100 (arrotondato via COGU10W)
  4. 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)

  1. leggi-rnewconf per il cliente fatturazione (magazzino specifico) e calcolo w-cfg-mag
  2. Testata DDT (ins-cogtesbo):
    • COGS25 per numero bolla
    • COGTESBO con cliente fatturazione (nonno), cliente assistito (padre), causale, data (tm-data-bol se T, acnf-data se R), pagamento da rata, agente da ana (eventualmente sovrascritto da cliente di consegna)
    • COGTESAP con tipo-fat, data-comp-da/a, sconto-fin (da COGSA7)
    • COGDESOR con flag IVA agevolata, ritenuta acconto, reverse charge (anc-fl-rev-ch)
  3. Calcolo tipo righe (300920):
    • Scorre ASNCNTAR per identificare presenza di tariffe S / D / F
    • Se almeno una "F" (dettaglio fattura) → percorso x35-dettaglio-fattura
    • Altrimenti → percorso standard
  4. Percorso standard: una sola riga COGMOMAG con acnp-prestazione, qta=1, prezzo=trs-importo, IVA da merce (con override agevolata/reverse)
  5. 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-perc o calcolato da trs-valore-rata / acnd-importo * 100)
    • PBUG-1298 (160522): se solo righe F, no S/D, e trs-perc = 0, e acnd-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 primo F altrimenti
  6. Descrizioni aggiuntive (x3-parte-finale):
    • Note acnp-note con sostituzione <RIF-CONTRATTO> / <DATA-INI> / <DATA-FIN> (per disdetta usa acn2-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 tipo C del 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
  7. Update rata: acnf-stato = "E", acnf-documento = tes-chia3, acnf-importo = trs-importo
  8. PBUG-289 (120419): se acnt-commessa != spacesCOGU18 crea-legame per legame movimento magazzino → commessa
  9. Reverse charge (160316): override mag-alf = "NI" (o tm-cfg-reverse-ali); COGMOAGG con moa-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-da obbligatorio (m-asn052-16-1)
  • tm-contratto-a >= tm-contratto-da (m-asn052-17-1/18-1); auto-proposta fine-mese via GESDATE se 0
  • tm-data-bol obbligatorio se visibile (m-asn052-19-1)
  • tm-ana-cod-cf deve esistere in COGGEANA (m-asn052-20-1)
  • tm-acnp-cod/tm-acnm-cod: lookup ASNCNTIP/ASNCNMOD
  • tm-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 COGTESAP per 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 (paragrafo x35-dettaglio-fattura)
  • 301020: ricalcolo qta/prezzo/valore per riga F per 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 F e 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-rata come alternativa a trs-perc

Note implementative

  • File transito cogtrans chiave alternativa custom per ordinamento C/F
  • Griglia paginata via fscrol2.cpy/dtab.cpy/utilpggr.cpy: spaginamento navigato con pg-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-gestione permette di tornare alla griglia mantenendo la posizione dopo rientro da ASN050 (F6)
  • Cancel di COGS25, COGSA6, COGSA601, COGU18 in z-chiudi per evitare leak di memoria sub