IVA.TXT
=======

AZIONE       DATA                  CHI         COMMENTO
=======================================================================================================
creato       1996/07/19            angelo      descrizione dei file usati nei programmi di liquidazione
aggiornato   1996/10/22            angelo      descrizione generica del funzionamento del programma di liquidazione
aggiornato   1996/11/13            angelo      modifiche per trasferimento ad IVA 11'96
aggiornato   1996/11/20            angelo      modifiche per aggiungere codice A36 in stampa riepilogo progressivi
aggiornato   1996/12/01            angelo      modifiche per trasferimento IVA11. Corretto il trasferimento di piu' attivita'
aggiornato   1997/10/20            angelo      modifiche per implementazione progressivi (PIM) sulla 13a liquidazione
aggiornato   1997/10/31            angelo      modifiche per nuovo prospetto agricolo
aggiornato   1997/12/01            angelo      modifiche per IVA11'97
aggiornato   1997/12/05            angelo      modifiche per PRORATA dal 1998


PROPOSITO
=========

Il seguente file non e' niente di ufficiale e pertanto da ritenersi valido cosi com'e'.
La documentazione che segue sono varie note sul funzionamento dei programmi IVA, descrizione
delle tabelle utilizzate ecc. di modo che' chicchessia possa subentrare senza troppi
problemi in questo sconfinato mondo di imposte sul valore aggiunto.
Sarebbe cosa buona e giusta che eventuali importanti modifiche ai programmi siano qui
dettagliatamente spiegate, onde evitare avere sempre un documento a portata di mano che
tutti possano consultare, senza dover scorrere disperatamente 10000 linee di C++


19 Luglio 1996

TABELLE PROGRESSIVI
-------------------

Ecco qui, tanto per cominciare un elenco riassuntivo delle tabelle utilizzate dai programmi
di calcolo liquidazione, visualizzazione e stampe varie.

%DEL: tabella comune per memorizzare i versamenti effettuati (deleghe IVA)
  CODTAB  = CODDITTA(Z)[0-4]+ANNO[5-8]+MESE(Z)[9-10]+TIPO[11,11]
  S6      = Codice tributo
  S7      = Codice ABI banca
  S8      = Codice CAB banca
  S9      = Codice concessione
  D0      = Data delega
  R0      = Importo versamento (esclusi interessi)
  R1      = Interessi da pagare
  R2      = Importo del versamento inclusi interessi
  B0      = Stampato

  Nota: l'ultimo carattere di CODTAB (TIPO) si riferisce al tipo di versamento:
               1 = normale
               2 = annuale
               3 = art.74
               4 = cessazione attivita'
               5 = integrativa
               7 = acconti IVA
               Il campo R2 in realta' non e' la somma di R0 + R1, poiche' R0 = ROUND(R2 - R1).
               Pertanto e' utile tenere l'importo lordo non arrotondato in un campo separato
               visto che in alcuni casi la liquidazione richiede di stampare proprio questo valore.

%LIA: tabella comune per memorizzare i risultati della Liquidazione IVA Annuale
  CODTAB  = DITTA[0-4](Z)+ANNO[5-8]
  S1      = Credito precedente  e acquisti intracomunitari separati da !
  S7      = Frequenza versamenti per anno liquidazione (M,T)
  S8      = Tipo acconto ("S"aldo oppure "A"cconto)
  R0      = Credito anno precedente
  R1      = Volume di affari lordo
  R2      = Volume di affari attivita' 1
  R3      = Volume di affari attivita' 2
  R4      = Acconto dicembre
  R5      = Credito di costo agenzie di viaggio
  R6      = Credito utilizzato
  R7      = Iva sulle vendite annotate fino al 20/12
  R8      = Iva sugli acquisti annotati fino al 20/12
  R9      = Rettifica
  R10     = Iva chiesta a rimborso
  R11     = Ulteriori detrazioni
  R12     = Pro-rata indetraibile
  R13     = Iva su operaz. fino al 20 dic., ma non fatturate
  R14     = Iva su operaz. fino al 20 dic., ma non annotate
  B1      = Liquidazione differita
  B2      = Regime agricoltore minimo

LAM: tabella di ditta per memorizzare i risultati Liquidazione Attivita' Mensile
  CODTAB  = ANNO[0-3]+MESE(Z)[4-5] 
  R0      = Totale IVA vendite in regime IVA su tutte le attivita'
  R1      = Totale IVA acquisti in regime IVA su tutte le attivita'
  R2      = Credito precedente o inizio anno
  R3      = Debito precedente da liquidazione a debito < 50.000

LIM: tabella di ditta per memorizzare i risultati della Liquidazione Iva Mensile
  CODTAB  = ANNO[0-3]+MESE(Z)[4-5] 
  S0      = Descrizione rettifica (1) 
  S1      = Descrizione rettifica (2)
  S4      = Codice ABI presso cui e' effettuato il versamento
  S5      = Codice CAB presso cui e' effettuato il versamento
  S6      = Codice concessione a cui e' intestato il versamento
  S7      = D = rettifica a debito; C = rettifica a credito 
  R0      = Risultato mese ( < 0 = credito): comprende tutto
  R1      = Rimborso richiesto (immesso da visualizzazione)
  R2      = Credito di costo agenzie di viaggio
  R3      = Debito mensile agenzie di viaggio
  R4      = Percentuale di ripartizione agenzie di viaggio
  R5      = Importo rettifica ( < 0 = a credito)
  R6      = Totale ulteriori detrazioni
  R7      = Totale conguaglio prorata (solo in annuale)
  R8      = Totale versamenti effettuati 
  R9      = Totale versamenti integrativi effettuati 
  R10     = Tasso di interesse applicato 
  R11     = Acconto versato a dicembre (solo per dicembre!)
  R12     = Risultato totale a credito (segno +) 
  R13     = Risultato totale a debito 
  R14     = Interesse versato
  D0      = Data versamento
  B0      = Mese calcolato (invalidato da primanota) 
  B1      = Stampato su registro bollato 
  B2      = Diritto al rimborso infraannuale per il mese 

PIM: Tabella di ditta per memorizzare i progressivi IVA
  CODTAB  = ANNO[0-3]+ATT(Z)[4-8]+TIPATT[9,9]+REG[10,12]+MESE(Z)[13,14]+
            TIPOCR[15,15]+CODIVA[16,19]+TIPODET[20,20]
  S0      = Imponibile/IVA importi relativi art40 c.5/6/8 a.i.(separati da "!")
  S1      = Imponibile/IVA fatture in ritardo (separati da "!")
  S2      = Imponibile/IVA corrispettivi registrati al netto dell'IVA (separati da "!")
  S4      = Codice IVA a cui ventilare (corrispettivi)
  S5      = Tipo IVA (da tabella IVA)
  I0      = Tipo importi (1 = netto, 2 = lordo)
  I1      = Tipo movimento (1 = vendita, 2 = acquisto)
  R0      = Imponibile totale
  R1      = IVA totale
  R2      = Lordo corrispettivi
  R5      = Imponibile fatture con scontrino (<= R0)
  R6      = IVA fatture con scontrino (<= R1)
  R7      = Imponibile autofatture non resid. art. 17 (<= R0)
  R8      = IVA autofatture non resid. art. 17 (<= R1)
  R9      = Imponibile bolle doganali relative (compreso in R0)
  R10     = IVA bolle doganali relative (compreso in R1)
  R11     = Totale imponibile fatture sospensione imposta (indipendente da R0)
  R12     = Totale IVA fatture sospensione imposta (indipendente da R1)
  R13     = Totale imponibili falsi corrispettivi (reg corr ma doc come FS)
  R14     = Totale IVA falsi corrispettivi (reg corr ma doc come FS)
  B1      = Codice IVA corrispettivi da ventilare
  B2      = Valido per calcolo volume di affari
  B3      = Validi per calcolo rimb. infraanuuale
  B4      = Riporta il flag RicAcq dei parametri ditta

  Dove: ANNO    e' l'anno di riferimento
        ATT     e' il codice attivita'(zerofilled)
        TIPOATT e' il tipo di attivita' (1 default, 2 se ci sono anche altre attivita')
        REG     e' il registro (ACQ, VEN, COR)
        MESE    e' il mese di riferimento
        TIPOCR  e' il tipo di costo/ricavo (0,1,2,3,4,5,6,7,8,9: vedi piano dei conti)
        CODIVA  e' il codice IVA relativo
        TIPODET e' il tipo di detrazione (" " = regime normale, "1" = IVA ind. su acquisti riferiti
                a ricavi esenti, "3" = IVA indicata per passaggi interni al solo fine di calcolo
                ventilazione, "9" IVA non detrabile per articolo 19)
        
PUM: Tabella di ditta per memorizzare i progressivi IVA
  CODTAB  = ANNO[0-3]+CODATT[4,8]+TIPOATT[9,9]+MESE[10,11]
  R0      = Totale cessioni beni ammortizzabili
  R1      = Totale IVA su cessioni ammortizzabili
  R2      = Tot. acquisti ammortizzabili detraz. 6%
  R3      = IVA su beni ammortizz. detr. 6%
  R4      = Totale vendite esenti IVA riga B1
  R5      = Totale vendite esenti IVA riga B2
  R6      = Totale vendite esenti IVA riga B3
  R7      = Totale acquisti esenti IVA riga B14
  R8      = Totale imponibile passaggi interni
  R9      = Totale IVA passaggi interni
  R10     = Totale imponibile reg. agricolo tipo 1
  R11     = Totale imponibile reg. agricolo tipo 2
  R12     = Totale imponibile vendite esenti IVA

PAM: Tabella di ditta per memorizzare i progressivi IVA
  CODTAB  = ANNO[0-3]+CODATT[4,8]+TIPOATT[9,9]+MESE(Z)[10,11] 
  R0      = Totale acquisti in regime IVA
  R1      = Totale vendite in regime IVA 
  R2      = Totale lordo acquisti beni per rivendita da inizio anno 
  R3      = Totale corrispettivi da ventilare 
  R4      = Totale imponibile bolle doganali (acquisti)
  R5      = Totale IVA bolle doganali (acquisti) 
  R6      = Totale imponibile acquisti in sosp. imposta 
  R7      = Totale IVA acquisti in sosp. imposta 
  R8      = Totale imponibile vendite in sosp. imposta 
  R9      = Totale IVA vendite in sosp. imposta 
  R10     = Totale imponibile spese generali 
  R11     = Totale IVA spese generali 


POM: Tabella di ditta per memorizzare i progressivi IVA
  CODTAB  = ANNO[0-3]+CODATT[4,8]+TIPOATT[9,9]+MESE[10,11]
  R0      = Totale IVA acquisti intracomunitari (flag INTRA su rmoviva)
  R1      = Totale imponibile acquisti non detraibili art. 19
  R2      = Totale IVA acquisti non detraibili art. 19
  R3      = Totale imponibile acquisti beni ammortizzabili detraibili
  R4      = Totale IVA acquisti beni ammortizzabili detraibili
  R5      = Totale imponibile acquisti beni per rivendita (non sono tutti base per ventilazione)
  R6      = Totale IVA acquisti beni per rivendita
  R7      = Totale imponibile beni acquisiti in leasing
  R8      = Totale IVA beni acquisiti in leasing
  R9      = Totale imponibile acquisti indetraibili su ricavi esenti
  R10     = Totale IVA acquisti indetraibili su ricavi esenti
  R11     = Totale imponibile acq. beni ammortizz. non detraibili
  R12     = Totale IVA acq. beni ammortizz. non detraibili
  R13     = IVA a debito agenzie viaggio

PLM: Tabella di ditta per memorizzare i Progressivi Liquidazione Mensili
  CODTAB  = ANNO[0-3]+CODATT[4,8]+TIPOATT[9,9]+MESE[10,11] 
  R0      = IVA vendite
  R1      = IVA acquisti
  R2      = Pro-rata indetraibile totale (acq. rif. anno attuale + acq. rif. anno precedente)
  R3      = Ulteriori detrazioni (6%)
  R4      = % pro-rata precedente
  R5      = se AG.VIAGGIO: Corrispettivi CEE; se AGRICOLO: tipo agr. == 1
  R6      = se AG.VIAGGIO: Corrispettivi extra CEE; se AGRICOLO: tipo agr. == 2
  R7      = se AG.VIAGGIO: Acquisti CEE; se AGRICOLO: tipo agr. == 3
  R8      = se AG.VIAGGIO: Acquisti fuori CEE; se AGRICOLO: tipo agr. == 4 
  R9      = se AG.VIAGGIO: Corrispettivi misti CEE; se AGRICOLO: tipo agr. == 5
  R10     = se AG.VIAGGIO: Acquisti misti CEE; se AGRICOLO: tipo agr. == 6 
  R11     = se AG.VIAGGIO: Acquisti misti fuori CEE;
  R12     = % pro-rata corrente
  R13     = se AGRICOLO: totale iva in detrazione Ia parte tabella A
  R14     = Pro-rata indetraibile acq. rif. anno precedente
  B0      = Attivita' calcolata
  B1      = TRUE se vi sono documenti con riferimento anno prec. ma manca la tabella (solo dal 1998)

PPA: Tabella di ditta per memorizzare i Progressivi Plafond Attivita mensili
  CODTAB  = ANNO[0-3]+CODATT(Z)[4-8]+TIPOATT[9,9](sempre = 1)+MESE(Z)[10,11]TIPOESENZIONE[12,12] 
  R0      = Totale acquisti Italia
  R1      = Totale acquisti estero (bolle doganali)
  R2      = Rimanenza plafond mese precedente (non conteggia il mese in corso)

%PLA: Tabella comune per memorizzare i dati annuali per i PLAfond
  CODTAB  = DITTA[0-4]+ANNO[5-8]+CODATT(Z)[9-13]+TIPOATT(sempre = 1)[14,14] 
  S1      = (real)Volume di affari attivita' 2 
  S2      = (Non utilizzati)
  S3      = (Non utilizzati)
  S3      = (Non utilizzati)
  S7      = Tipo attivita' ("S"ervizio, "M", "E")
  R0      = Totale vendite in regime IVA (valido per calcolo prorata)
  R1      = Totale acquisti esenti riga B1
  R2      = Totale acquisti esenti riga B2
  R3      = Totale acquisti esenti riga B3 
  R4      = Totale cessioni beni ammortizzabili
  R5      = Ammontare iniziale plafond art. 8
  R6      = Ammontare iniziale plafond art. bis
  R7      = Ammontare iniziale plafond art. 9
  R8      = % pro-rata 
  R9      = conguaglio pro-rata 
  R10     = % pro-rata ricalcolato (vale per l'anno successivo) 
  R11     = Totale IVA acquisti attivita' (senza pro-rata pagato nell'anno)
  R12     = Totale pro-rata pagato nell'anno 
  R13     = Totale lordo vendite attivita' 
  R14     = Volume affari attivita' 1 

%IVA: Tabella comune per memorizzare i dati relativi ai codici iva
  CODTAB  = Codice
  S0      = Descrizione
  S1      = Tipo codice ("" = Regime normale, "VE" = ricavi da ventilare, "ES" = operazioni esenti"
            "NI" = operazioni non imponibili, "NS" = Non soggetti
  S3      = Tipo di gestione plafond ("" = gestione normale, "1" Op. art. 8, "2" op. art. 8bis,
            "3" op. art. 9)
  S4      = Tipo di gestione regime agricolo ("" = regime normale, "1" vendite regime agr.,
            "2" = vendite accessorie/acquisti non agr., "3" = acquisti ad uso promiscuo)
  S5      = Tipo di gestione per ag. viaggio ("" = regime normale, "1" = op. interno CEE,
            "2" = op. fuori CEE, "3" = vendite miste CEE, "4" = acquisti misti parte CEE,
            "5" acquisti misti parte fuori CEE)           
  S6      = Codice IVA a cui ventilare
  S7      = Numero della colonna allegato clienti ("" = non in allegato, "1" = imponibili,
            "3" = non imponibili)
  S8      = Numero della colonna allegato fornitori ("" = non in allegato "1" = imponibili,
            "3" = senza app. imp., "4" = Non imponibili)  
  R0      = Aliquota
  I0      = Percentuale IVA teorica
  S2      = N.ro di riga vendite IVA11 per op. esenti e non imponibili
            ""    Nessuno
            "20"  Operazioni non imponibili (comma 1, artt.8, 8bis e 9)
            "21"  Operazioni non imponibili a seguito di dich. d'intento
            "22"  Altre operazioni non imponibili
            "24"  Operazioni non soggette (art. 74 comma 7)
            "25"  Op. non sogg. effettuate nei confronti di terremotati
            "B1"  Ammontare op. es. escluse da nr. 1 a 9 e 11 art. 10
            "B2"  Ammontare op. es. di cui al nr. 11 art. 10
            "B3"  Ammontare op. es. di cui ai nr. 1 a 9 art. 10
            "G7A" Cessioni intracomunitarie non imponibili
            "G7B" Prestazioni di servizi non soggette all'imposta
  S9      = N.ro di riga acquisti IVA11 per op. esenti e non imponibili
              ""    Nessuno
              "10"  Acquisti non imponibili (comma 2, artt8, 8bis e 9)
              "11"  Altri acquisti non imponibili
              "12"  Acquisti esenti
              "13"  Acquisti non soggetti (art. 74 comma 7)
              "14"  Acquisti non soggetti all'imposta effettuati dai terremotati
  B0      = TRUE se il codice deve comparire nel modello 101
  B1      = TRUE se il codice deve comparire nel modello 102
  B2      = Codice IVA sospeso (TRUE se vero)
  B3      = Codice escluso dal calcolo rimborso infrannuale (TRUE se vero)
  B4      = Codice escluso dal calcolo rimborso per aliquota media (TRUE se escluso)

ESC: tabella di ditta per memorizzare gli esercizi contabili
  CODTAB  = Codice esercizio
  D0      = Data inizio esercizio
  D1      = Data fine esercizio
  D2      = Data di scarico

RMB: tabella di ditta per memorizzare i rimborsi (obsolete?)
  CODTAB  = ANNO[0-3]+MESE(Z)[4-5]+CODIVA(Z)[6-9]+TIPOREG[10,10] 
  R0      = Imponibile per rimborso
  R1      = IVA per rimborso
  R2      = Percentuale IVA relativa

%VER: tabella comune per memorizzare i parametri relativi agli interessi ed ai versamenti.
  CODTAB  = ANNO[0,3]+MESE[4,5]
  R0      = Percentuale interesse primo trimestre
  R1      = Percentuale interesse secondo trimestre
  R2      = Percentuale interesse terzo trimestre
  R3      = Percentuale interesse quarto trimestre
  R4      = Percentuale interesse annuale
  R5      = Importo minimo versamento periodico
  R6      = Importo minimo versamento annuale
  R7      = Importo minimo versamento acconto
  R8      = Importo minimo versamento integrativo
  R9      = Importo minimo versamento cessazione
  R10     = Importo minimo versamento Art. 74
  R11     = Percentuale per calcolo acconti su liquidazione normale
  R12     = Percentuale per calcolo acconti su liquidazione differita

PIA: Tabella di ditta per memorizzare i Progressivi IVA compensazione Agricoli
  CODTAB  = ANNO[0-3]+CODATT[4,8]+TIPOATT[9,9]+MESE[10,11]+IVAORD[12,15]+IVACOM[16,19]
  R0      = Totale imponibile
  R1      = Totale IVA secondo codice IVA di compensazione



22 Ottobre 1996

SEQUENZA DELLE CHIAMATE A FUNZIONE (FLUSSO GENERICO DEL PROGRAMMA)
==================================================================

Parte I: elaborazioni e calcoli:
-------------------------------

schema generico di flusso:


- set_print() :
  * selezione input/ditte
  - recalc_all()
    * ciclo per ditte selezionate
      * setta ditta corrente
      * reperisce dati dalla ditta
      * controlla sulle lim(B0) dei mesi preceddenti se devono essere ricalcolate
      * ciclo da 1 al mese selezionato in input (_month)
        - update_firm() per ogni mese del ciclo
          * carica alcuni dati della ditta
          * ciclo per ogni attivita' della ditta
            * ciclo per tipo di attivita' (1 o 2)
              * reperisce dati per l'attivita' corrente,
                inizializzando tabelle per memorizzare progressivi e calcoli
              * scorre i registri per settare flag per ventilazione (_isvent)
              * se e' necessario il calcolo chiama:
              - update_att()
              * se sta calcolando la 13a chiama:
              - recalc_annual()
              * se e' richiesto il riepilogo liq ed e' l'ultimo mese
                in elaborazione chiama:
              - describe_att()
            ** fine ciclo
            * se attivita' mista stampa il riepilogo:
            - describe_att()
          ** fine ciclo
          * se quater stampa il riepilogo:
          - describe_att()
          * se mese compatibile con il regime frequenza IVA:
          - write_liq()
          * se e' l'ultimo mese in elaborazione del ciclo:
          - recalc_rimborso()
          * se e' l'ultimo mese in elaborazione del ciclo e deve stampare la liquidazione:
          - describe_firm()
          - describe_liq()
          * se e' stampa registri ed e' stato calcolato l'acconto
          - describe_liq_acc();
      * fine ciclo per mese
    * fine ciclo per ditte


dettagli di funzioni:

- update_att() // aggiorna i progressivi per la ditta/mese/attivita' corrente
  - zero_att() // scorre i pim/pum/pam/plm... e azzera quelli del mese/attivita' corrente
  - recalc_att()
  - recalc_ventilation()
  - recalc_corripettivi()

- recalc_annual() // ricalcola progressivi annuali liq.
  * legge dalla PLA alcuni dati
  * scorre i PIM dell'anno corrente
    * esegue la sommatoria di PIM->R0  per calcolare i volumi d'affari
  * scorre i PLM della corrente attivita'
    * esegue la sommatoria di alcuni campi di PLM/PUM/PAM
  * scrive in PLA i dati calcolati


- describe_att()
  // setta i vari DescrItem, che aggiunge a _descr_arr per la stampa successiva
  - describe_name()
  - describe_plafond()
  - describe_ventilation()
  - describe_agricolo()
  - describe_viaggio()
  - describe_pims()
  - describe_consistence()

- write_liq()    // Calcolo liq. mensili e  liq. annuali. Scrive le lim
  * posiziona tabella %VER
  * calcola mese di rif. per liq. differita
  * azzera variabili per totali vari
  * ciclo sulle attivita' passate come parametro
    * se differita e primo mese setta l'anno precedente
    * ciclo su tutti i mesi (1..13)
      * posiziona PLM
      * totalizza vari importi
    * fine ciclo sui mesi
    * se agenzia di viaggio e non liq. diff.
      * calcola credito costo, debito mensile, perc. ripart.
  * fine ciclo su attivita'
  * rettifica il risultato con credito prec. in base al mese corrente.
  * se e' 13a liq.
    * ciclo sulle attivita'
      * totalizza volumi d'affari e calcola nuovo prorata, riscrivi PLA e LIA
        solo se tipo di attivita' e' 1
    * fine ciclo
    * riscrive i volumi d'affari in LIA (R1,R2,R3)
  * azzera record corrente di LIM, tranne R1, R5, S1, S0, S7
  * rettifica il risultato con versamenti, acconto di dicembre...
  * schiaffa dentro LIM/LAM vari risultati di calcoli
  * mette il flag di ricalcolato sul record LIM del mese corrente(B1)
  * se 13a liq. arrotonda alle 1000 lire sup. diversi importi e li rischiaffa in LIM/LAM
  * riscrive LIM/LAM
  
- recalc_rimborso()   // calcola condizioni per il diritto al rimborso infrannuale
                      // chiamata soltanto per i trimestri anche se annuale
                      // aggiornata a normative per anno liq. > 1994
  * ciclo sulle attivita'
    * totalizza volume d'affari ed es. non impon. (varia se usare 3 mesi oppure no)

  // Prima condizione per il rimborso
  * se rapporto tra esenti e vol. d'affari e > minima parte esente (0.25)
    crea il _DescrItem del RIMBORSO

  // Seconda condizione per il rimborso
  * scorre i PIM per totalizzare imponibile/imposta acquisti/vendite
  * se (iva acquisti/totale acquisti) > (iva vendite/ totale vendite),
    ovvero se l'aliquota medit adegli acquisti e' > dell'aliquota media
    delle vendite, allora...
    * se l'aliquota acquisti eccede la soglia minima (10%) allora si ha diritto al rimborso.
    * genera un _DescrItem con totale acquisti/vendite, rispettivi totali
      imposte ed aliquota media.
  * se sono state riscontrate le condizioni per il rimborso riscrive LIM.
  * ritorna il _DescrItem generato.

- describe_firm()
  * genera un _DescrItem con i dati della ditta:
    rag. soc., freq. iva, mese corrente.
  * aggiunge il _DescrItem generato all'array _descr_arr

- describe_liq()
  * genera un _DescrItem con i dati finali della liquidazione
    con eventuale satellite per il rimborso e prospettino
    per i versamenti
  * aggiunge il _DescrItem all'array _descr_arr

- describe_liq_acc()
  * genera un _DescrItem con i dati per la liquidazione dell'acconto
  * aggiunge il _DescrItem a _descr_arr

dettagli di update_att()
************************
// funzioni chiave per il calcolo

- recalc_att()
  * azzera variabili contenenti i progressivi
  * ciclo per gli elementi del cursore impostato.
    Il cursore e' cosi' fatto:
    LF_MOV
      |------->LF_RMOVIVA
      |------->LF_CAUSALI
    Quindi il ciclo sara' sui movimenti,
    controlla se il  registro e' presente, la relativa
    riga di rmoviva e' presente e se la data deve essere considerata.

    * ciclo per ogni riga IVA del movimento corrente
      * qui totalizza nei vari casi, sottocasi, casi particolari,
        tutte le imposte/imponibili, memorizzandoli nei progressivi IVA.
    * fine ciclo per righe IVA
  * fine ciclo per movimenti
  * calcolati tutti i movimenti e aggiornati i pim
    se necessario risistema le imposte acquisti beni
    per rivendita (scorre i PIM dal primo all'ultimo ricalcolando l'iva e riscrivendoli)  
  * calcola il prorata solo se liq. periodica, e lo memorizza in PLM->R2
  * se e' agenzia di viaggio memorizza i relativi progressivi
  * se e' agricolo memorizza i relativi progressivi
  * memorizza sempre e comunque altri progressivi comuni
  * riscrive i record delle tabelle mensili(PLM,PAM,PUM,POM)

- recalc_ventilation()  // ricalcolo della ventilazione
  * ricalcola i pim dei mesi dal primo al corrente se necessario:
    esegue un ciclo da 1 al mese corrente e chiama ogni volta update_att()
    (sembra una storia ricorsiva, in realta' lo e' poco)
  * ciclo da 1 al mese corrente
    // aggiunge gli acquisti del mese m operando sui pim
    * ciclo per tutti i PIM relativi. Per i codici != da NS, NI ed ES
      aggiunge all'array _vent_arr i progressivi.
  * calcola totale acquisti su tutte le aliquote (scorre tutti gli elementi di _vent_arr,
    sommando l'elemento _totale.
  * calcola totale vendite (solo se mese 13 e si sta calcolando la 13a)
  * ricalcola (solo per il mese in corso!) operando sull'array _vend_arr, ove sono
    memorizzate le vendite.
    * scorre gli elementi di _vend_arr
      * calcola la percentuale di ripartizione:
        se siamo in annuale si deve ripartire il totale vendite annuale tra i vari mesi,
        altrimenti il totale del mese.
        L'importo cosi' preparato viene affettato a seconda degli elementi di
        _vent_arr, le percentuali di ripartizione sono ottenute dal rapporto
        tra il totale acquisti del mese e il totale acquisti
      * scorre ancora gli elementi di _vent_arr e calcola l'imposta/imponibile
        da ventilar. Corregge l'iva vendite nei PLM->R0 ed il volume
        d'affari nei PAM->R1 ed aggiorna i PIM->(R0,R1)
      * se siamo in annuale, dopo aver ripartito una prima volta, esce dal ciclo
        (in pratica viene eseguito una sola volta)
    * fine ciclo
  * memorizza i totali per il prospettino di ventilazione
  * riscrive il tot. acq e vendite in PAM
  
- recalc_corrispettivi() // ricalcolo dei corrispettivi
  * viene eseguita solo se ci sono elementi in _corr_arr (modificato
    tramite add_corrisp() in recalc_att())
  * scorre tutti gli elementi di _corr_arr
    * per ogni _CorrItem estrae imponibile, imposta
    * aggiusta l'IVA vendite in PLM->R0
    * aggiusta il volume d'affari in PAM->R1
    * aggiorna i PIM->(R0,R1)
    * riscrive i records modificati
    
  

Parte II: stampa:
-------------------------------

schema generico di flusso.

* La stampa, avviene dopo aver creato tutti gli opportuni
  _DescrItem e memorizzati in _descr_arr.
  Per far cio' si utilizza il meccanismo della TPrint_application
  pur non utilizzando nessun cursore o relazione di stampa,
  basta ridefinire preprocess_page(), postprocess_page() e la
  set_page(). Si utilizza quest'ultima come fulcro centrale della stampa
  sfruttando il parametro cnt che viene passato alla stessa, visto
  che in casi come questi esso e' sempre incrementale.
  Per farla in breve, sappiamo tutti che una TPrint_applicatione e' cosi'
  fatta:

  * ciclo fintantoche' set_print() [vedi sopra] ritorna TRUE
    * ciclo fintantoche' si vuol ripetere la stampa.
      * ciclo per il numero di copie della stampa
        * ciclo (almeno una volta) fino a quando postprocess_print() ritorna la ripetizione
          * se preprocess_print() ritorna TRUE allora
            * ciclo (almeno una volta) fino a quando postprocess_page() ritorna la ripetizione
              * se preprocess_page() ritorna TRUE allora
                * set_page()
                * print_one()
            * fine ciclo
        * fine ciclo
      * fine ciclo
    * fine ciclo
  * fine ciclo

  Nel nostro caso la preprocess_page() ritorna TRUE se il numero di elementi di
  _descr_arr e' != da 0.
  La postprocess_page() ritorna NEXT_PAGE solo se non ci sono elementi in
  _descr_arr o se l'elemento che tiene il conteggio (cnt) e' arrivato alla fine (_descr_arr.items()-1)

  Ecco quindi che la set_page() assume una importanza fondamentale per settare le righe di
  stampa:
- set_page()
  * reperisce il _DescrItem corrente grazie a cnt da _descr_arr.
  * resetta tutte le righe di stampa
  * setta il salto foglio automatico a FALSE
  * esegue una selezione multipla in base al membro _flags di
    _DescrItem:

    CHG_PARMS
    SET_FIRM
    PIM_ROW
    PIM_HEAD
    MISC_LIQ
    TOT_ROW
    PLAFOND
    VENTILA
    REGAGR
    REGVIA
    THE_END
    LIQACC
    ACCONTO
    ACCHEAD
    DELDEB
    DELCRED

    in base ad ognuno di questi flags viene chiamata una diversa funzione di
    set delle righe di stampa.


13 Novembre 1996

TRASFERIMENTO IVA11
===================


Nuova feature aggiunta in occasione delle modifiche per il trasferimento IVA11:

- cache di lettura per i codici IVA e tabella registri.

  Vengono semplicemente mantenuti 2 assoc array (1 per i codici iva ed uno
  per i registri) dove ogni volta che viene letto un record nuovo (quindi
  non presente nell'array) viene memorizzato. Quando viene richiesta la lettura
  di un record viene prima controllato che esso non sia gia' presente in cache.
  Le modifiche sono state effettuate nelle funzioni look_iva() e look_reg().
  

Per il trasferimento IVA 11 sono state implementate 3 nuove funzioni:
iva11_set_arr(), iva11_set_arr_pim(), iva11_write() ed aggiunto un assoc array: _iva11_arr.
Il procedimento e relativamente semplice:
viene utilizzato un assoc array dove memorizzare i valori da trasferire sui
files tab1100a e tab1100b. La chiave per memorizzare i valori viene posta uguale
al nome campo relativo, facilitando cosi' l'accesso e senza troppi sprechi di memoria
essendo al massimo 125 campi.
Il filling dei campi viene effettuato in 2 procedure (iva11_set_arr e iva11_set_arr_pim).
La prima viene chiamata quando vengono scorse le righe di movimento IVA (recalc_att());
la seconda viene chiamata alla fine del calcolo dell'attivita', prima dello spostamento della
relazione sulla prossima (update_firm()).
La scrittura dei campi avviene in iva11_write(), chiamata subito dopo la iva11_set_arr_pim().

Particolarita':

iva11_set_arr_pim():
  esegue un ciclo per tutti i PIM della ditta, scartando quelli che non servono
  e raggruppando quelli che rispondono alle condizioni di trasferimento.

iva11_write():
  esegue un ciclo per tutti i campi settati in _iva11_arr, facendo la put() per ognuno
  sul rispettivo campo nel file opportuno (LF_TAB1100A o LF_TAB1100B).
  Siccome i campi da trasferire sono piu' di 100 e per ora tale limite non puo' essere
  superato il trasferimento viene effettuato su 2 files, collegati tramite relazione.
  
In realta' _iva11_arr e' un _BolgArray, derivato da TAssoc_array,
dove sono definiti i metodi add() e sub(), per aggiungere o sottrarre
importi all'elemento indicato. Gli elementi stessi di _iva11_arr in realta'
non sono solamente real, ma classi derivate da TObject, che contengono un real ed un
int identificante il numero logico del file al quale appartiene il campo.


20 Novembre 1996

AGGIUNTA STAMPA A36 NEI PROGRESSIVI
===================================

Per stampare cio' si e' seguito l'esempio della stampa di AF (ex A35).
Da rilevare, percio', la condizione di raggruppamento di tali progressivi
e la memorizzazione in PIM, nel campo S0. Naturalmente, siccome S0 e' una stringa e
siccome vanno memorizzati sia imponibile che imposta, il campo sara' una TToken_string
i cui elementi (2 real) sono separati da un "!", e non da un "|" per non creare
situazione spiacevoli in caso di scarico/carico da un file testo.


01 Dicembre 1996

CORRETTO TRASFERIMENTO DI PIU' ATTIVITA' SUL FILE TAB1100
=========================================================

La correzione riguarda lo spostamento della funzione iva11_write():

- iva11_write() viene ora chiamata dalla describe_liq(), per aver maggior
  controllo sull'azzeramento dei campi R1 ed R2

Ma la modifica principale riguarda la struttura dati utilizzata per memorizzare i dati
trasferire.
Ora si utilizza un assoc_array principale (_iva11_arr) la cui chiave e'
il codice attivita' della ditta. Ogni elemento di _iva11_arr e' a sua
volta un assoc_array, la cui chiave e' come nella versione precedente e' il
nome del campo da trasferire. Per cui le modifiche fatte in iva11_set_arr(),
iva11_set_arr_pim() e iva11_write() riguardano la diversa gestione per
memorizzare e scorrere gli elementi dell'assoc_array _iva11_arr.


20 Ottobre 1997

IMPLEMENTAZIONE PIM13
=========================================================

Implementato il PIM 13, in modo tale da poter eliminare i precedenti
errori relativi al calcolo ventilazione annuale/corrispettivi.
Prima andava a sommare i risultati dei singoli mesi/trimestri: in
realta' per la liquidazione annuale, i mesi vanno considerati
come un tutt'uno. Le modifiche operate sono quindi relative al
ciclo di scansione ed elaborazione del cursore sui movimenti IVA.
Ora non scorre piu' un cursore prima sul mese 1 poi 2, 3, ecc.
ma uno unico da 1 a 13, schiaffando i risultati nel relativo PIM del
mese 13. Nella fase dei calcoli per ventilazione/scorporo scorrispettivi,
non si dovranno piu' fare ripartizioni di importo sui vari mesi precedenti.
Inoltre da ora in avanti per calcolare la liquidazione annuale non sara'
piu' necessario ricalcolare anche i periodi precedenti.
Tutto cio' velocizza un poco il calcolo liquidazione ed il trasferimento ad IVA11.


31 Ottobre 1997

NUOVO PROSPETTO REGIME AGRICOLO
===============================
Queste modifiche valgono dal 1998 in poi.
Aggiunto nuovo FLAG sulla tabella LIA (campo B2), per indicare se
trattasi di agricoltore con volume d'affari minimo: sono stati
quindi modificati programmi di impostazione parametri liquidazione,
apertura anno IVA, oltre a calcolo/stampa.
Il nuovo flag di agricoltore minimo serve per selezionare le ditte
in calcolo liquidazione: se l'anno e' 1998 o successivi E la liquidazione
da calcolare non e' annuale E tale flag e' settato, una determinata ditta
non puo' essere inclusa nella lista dei calcoli da effettuare.
Viene aggiunta una nuova tabella di progressivi (tabella PIA: Progressivi Iva compensazione
Agricoli), il cui tracciato e' il seguente (riportato anche all'inizio)

PIA: Tabella di ditta per memorizzare i Progressivi IVA compensazione Agricoli
  CODTAB  = ANNO[0-3]+CODATT[4,8]+TIPOATT[9,9]+MESE[10,11]+IVAORD[12,15]+IVACOM[16,19]
  R0      = Totale imponibile
  R1      = Totale IVA secondo codice IVA di compensazione

Memorizzazione dei progressivi:

tutte le vendite in regime agricolo con "segnalino" a 1 (che termine di merda che usano su
sistema..), vanno sommate distintamente per codice IVA principale + codice IVA compensato.
L'imposta  (PIA->R1) va calcolata sul totale imponibile (PIA->R0) per ogni record della tabella,
una volta finita la sommatoria.
Il codice IVA di compensazione, (udite udite!), viene memorizzato sul
PIANO DEI CONTI (nel campo IVACOMP) per ogni SOTTOCONTO di RICAVO(campo INDBIL).
Attenzione: per effettiva congruenza il campo INDBIL e' significativo solo sul
relativo CONTO, indi si procedera' ad una ulteriore rottura/mazzata sui coglioni, in quanto
per ogni movimento IVA si dovranno fare 2 accessi al file del PIANO DEI CONTI:
 uno per leggere il codice IVA di compensazione (campo IVACOMP)
 uno per leggere se il conto e' di ricavo (campo INDBIL).

Una volta completata la tabella (fatta in recalc_att()), si procedera'
alla descrizione di tali progressivi (describe_agricolo()). Il nuovo prospetto
viene messo poco prima del prospetto agricolo, ma comunque nella stessa pagina.
Nel prospetto agricolo viene aggiunta una riga in piu':

IVA ammessa in detrazione I parte tabella A, il cui importo riguarda il totale
dell'iva vendite compensata. Tale importo (PLM->R13) viene sommato al vecchio totale IVA ammessa
in detrazione, per avere l'importo corretto.
Attenzione, il nuovo calcolo viene applicato solo dal 1998 in poi!!


01 Dicembre 1997

IVA11 '97
=========
 - cambiato A13 in VA7
 - aggiunte aliquote 7,5% e 20%

 Variazioni ai campi di trasferimento
    rimossi : EC206, FBC* e FC117
    aggiunti FC115  FC116   FC209 FC210
             SBI07  SBI08   SBF12 SBF13
             XC101...XC111  XC201...XC208  (al posto di FBC*)
             AGVE05 AGVE06  ABVE05 ABVE06
             AGME05 AGME06  ABME05 ABME06
    AGME*, AGVE*, ABME* ABVE* sono stati spostati su TAB1100B
    L2, L2BIS sono stati spostati su TAB1100B


05 Dicembre 1997

PRORATA dal 1998
================
Dal 1998 sara' possibile registrare fatture in ritardo con anno data documento
precedente all'anno di registrazione stesso.
In questo caso ll'importo PRORATA del PERIODO (non annuale) deve essere calcolato
applicando la percentuale corrispondente all'anno del documento.
Tutti gli acquisti soggetti a pro-rata devono essere distinti in base all'anno della
data documento e di conseguenza la detraibilita' deve essere evidenziata e
calcolata con due possibili percentuali: una dell'anno attuale e una dell'anno
precedente. Se in fase di liquidazione la tabella dell'anno precedente non esiste
ma esistono acquisti con anno documento relativo all'anno precedente si calcola il
pro-rata con la percentuale corrente, segnalando tuttavia la mancata presenza
di tale tabella per l'anno precedente.
Per far questo e' stato implementato un oggettino: _ProrataItem, cui vengono
settate la percentuale attuale e la percentuale precedente. E' stato implementato
anche un metodo calc_prorata() cui si passa il valore degli acquisti ed un flag
per calcolare con percentuale attuale o precedente. Nella tabella PLM
e' stato recuperato R4 per memorizzare la percentuale pro-rata precedente, inoltre
viene memorizzato in R14 il prorata relativo agli acquisti con riferimento anno
precedente. In B1, infine, viene settato il flag a TRUE se in stampa
esistono documenti dell'anno precedente man non esiste la percentuale
pro-rata ad essa relativi.
Casistiche: (vedi _ProrataItem::set())
 - il calcolo vale solo a partire dal 1998
 - se le % sono uguali oppure non siamo ancora nel 1998 considera
   tutto sull'anno corrente
 - se non ha trovato la percentuale anno prec usa quella corrente,
   segnalando pero' l'errore.


Ecco quindi svelati i piu' reconditi misteri del programma di liquidazione.
Auguro a chiunque buon divertimento.


