OCA / l10n-italy

Odoo Italian localization
https://www.odoo-italia.org
GNU Affero General Public License v3.0
154 stars 305 forks source link

[16.0] account.move: termini e condizioni usati in maniera inappropriata #3883

Open odooNextev opened 9 months ago

odooNextev commented 9 months ago

Attualmente il campo narration ("termini e condizioni" sotto le righe) delle fatture viene usato da alcuni moduli della localizzazione in maniera, secondo noi, inappropriata. Nella maggior parte dei casi questo si ripercuote sulla fatturazione elettronica, ma nel caso dell'inversione contabile può si dovrebbe aggiungere un campo che può servire anche senza FE.

l10n_it_fatturapa_out

Esportando la fattura elettronica, i termini e condizioni vengono inseriti come causale nell'xml:

image image

Non è previsto un campo specifico per la causale e questo è un problema per noi e per altri clienti che usano "per il suo scopo nativo" il campo narration/termini e condizioni. Oltre al problema concettuale (sono termini e condizioni non causale), la lunghezza dei termini solitamente è notevole e si otterrebbe un risultato del genere:

image

l10n_it_fatturapa_in

Attualmente il modulo che fa il parse della fattura XML passiva si comporta in maniera speculare a l10n_it_fatturapa_out ed associa il campo <Causale> del XML al campo narration di account.move. Anche questo, secondo noi, non è un comportamento corretto perché se è una causale non sono termini e condizioni

l10n_it_reverse_charge

Nell'autofattura emessa per il fornitore estero deve essere indicato nella causale del XML un messaggio come questo:

Documento [Nr. FATTURA FORNITORE] del [DATA] Ns.Protocollo [RIF: INTERNO] del [DATA]

Funzionalmente non pensiamo sia corretto metterlo nei termini e condizioni e serve un campo ad hoc. A questo punto bisogna capire se serve tenere traccia di questa dicitura anche senza che si usi in Odoo la fatturazione elettronica o è fine solamente alla FE e quindi il campo aggiuntivo deve essere incluso nei moduli appositi a questo scopo o serve crearne uno standalone.

Soluzione proposta

  1. Nel caso sia necessario tenere traccia della causale dell'autofattura anche senza moduli FE installati, la soluzione proposta è questa:
image

Bisognerebbe quindi creare un modulo ad hoc l10n_it_causale da cui l10n_it_fatturapa e l10n_it_reverse_charge dovrebbero dipendere ed erediterebbero il campo.

  1. Nel caso in cui si ritenesse opportuno aggiungere il campo solo se viene usata la fatturazione elettronica, il campo causale può essere aggiunto a l10n_it_fatturapa ed a quel punto l10n_it_fatturapa_in, l10n_it_fatturapa_out e l10n_it_fatturapa_out_rc non hanno necessità di ulteriori dipendenze, ma solamente di ereditare il campo.
Screenshot 2024-02-15 alle 10 08 58

In entrambi i casi bisognerebbe discutere se includere il nuovo campo causale nei report siccome le informazioni che verrebbero riportate qui, attualmente, sono in termini e condizioni e vengono stampate nei PDF. Qui si ripresenterebbe il quesito: se è necessario avere la causale dell'autovettura nella stampa e non solo nel XML, significa che la causale deve essere disponibile anche nel modulo base dell'inversione contabile e non solo quello legato alla FE.

l10n_it_declaration_of_intent

Attualmente la dicitura "Vostra dichiarazione d'intento nr %s del %s, nostro protocollo nr %s del %s, protocollo telematico nr %s" viene riportata nel campo narration della fattura collegata alla dichiarazione. Non sappiamo precisamente perchè viene fatto questo nel modulo base (l10n_it_declaration_of_intent), forse per avere quei dati nella fattura senza aprire la dichiarazione o forse per essere poi copiati in fattura nel campo causale. Questa cosa è errata perchè non è giusto usare il campo causale a questo scopo ed inoltre il modulo l10n_it_fatturapa_out_di si occupa già di inserire i dati al posto giusto, ovvero per ogni riga nella sezione <AltriDatiGestionali>.

Soluzione proposta

Rimuovere la compilazione del campo narration con i dati della dichiarazione (sono visibili già dalla dichiarazione stessa senza "sporcare" un campo adibito ad altro) e correggere il modulo l10n_it_fatturapa_out_di perchè attualmente non prevede tutti i campi previsti dalla normativa. FAQ n. 49 pubblicata il 21 dicembre 2018 e aggiornata il 22 dicembre 2022: Per ogni riga ci dovrebbe essere questo:

<AltriDatiGestionali>
<TipoDato>Intento</TipoDato>
‹RiferimentoTesto>telematic_protocol / partner_document_number </RiferimentoTesto>
<RiferimentoData>partner_document_date</RiferimentoData>
odooNextev commented 9 months ago

Volevamo proporre un modulo aggiuntivo "l10n_it_causale", che aggiunge il campo "causale" alla fattura. Questo modulo sarebbe poi tra le dipendenze di "l10n_it_reverse_charge" e "l10n_it_fatturapa" per sfruttarlo ed evitare che i test falliscano. Qui uno schema su come abbiamo pensato di modificare alcuni moduli, anche per adattarci il più possibile alla versione ufficiale: https://www.agenziaentrate.gov.it/portale/documents/20143/296471/Provvedimento+21+dicembre+2018_ALLEGATO-B-DATI-FISCALI-FATTURA-XML-21.12.18-def.pdf/c774d5a9-3459-ae1b-f671-7be363acea87 che prevede di inserire i protocolli e la data della dichiarazione di intento nelle righe.

l10n_it_causale

Al momento il modulo l10n_it_edi importa il campo Causale nei termini e condizioni, mentre i termini e condizioni non vengono esportati come Causale.

francesco-ooops commented 9 months ago

@odooNextev volete parlarne in call domani e scegliere una soluzione condivisa?

odooNextev commented 9 months ago

@odooNextev volete parlarne in call domani e scegliere una soluzione condivisa?

Purtroppo stamattina non c'è stato il tempo però chi vuole commentare la struttura del refactoring postata sopra può farlo comunque qui 👍

SirAionTech commented 9 months ago

Volevamo proporre un modulo aggiuntivo "l10n_it_causale", che aggiunge il campo "causale" alla fattura. Questo modulo sarebbe poi tra le dipendenze di "l10n_it_reverse_charge" e "l10n_it_fatturapa" per sfruttarlo ed evitare che i test falliscano. Qui uno schema su come abbiamo pensato di modificare alcuni moduli, anche per adattarci il più possibile alla versione ufficiale: https://www.agenziaentrate.gov.it/portale/documents/20143/296471/Provvedimento+21+dicembre+2018_ALLEGATO-B-DATI-FISCALI-FATTURA-XML-21.12.18-def.pdf/c774d5a9-3459-ae1b-f671-7be363acea87 che prevede di inserire i protocolli e la data della dichiarazione di intento nelle righe.

l10n_it_causale

Al momento il modulo l10n_it_edi importa il campo Causale nei termini e condizioni, mentre i termini e condizioni non vengono esportati come Causale.

Se stiamo parlando di importazione/esportazione di fatture elettroniche, come mai c'è lì in mezzo anche l10n_it_reverse_charge? Potrei capire i moduli _in_rc e out_rc ma non capisco come mai il modulo base.

Nel documento che hai linkato non ho trovato il nodo Causale, nell'ultima versione delle specifiche https://www.fatturapa.gov.it/export/documenti/fatturapa/v1.2.2/RappresentazioneTabellareFattOrdinariav123.pdf dice solo

Descrizione della causale del documento

dove hai trovato riferimenti alla dichiarazione d'intento? Io ne ho trovati solo in https://www.fatturapa.gov.it/export/documenti/Elenco-Controlli-versione-v1.9.pdf image e non si parla del nodo Causale.

Se non esiste già un campo in fattura che ha lo stesso scopo di Causale nella fattura elettronica, per me va bene un campo dedicato. Lo aggiungerei però in l10n_it_fatturapa in modo che sia gestibile nei moduli _in e _out in modo simmetrico:

  1. creo una fattura con quel campo valorizzato,
  2. la esporto
  3. la importo
  4. viene creata una fattura con quel campo valorizzato.

Il nome del campo dovrebbe essere univoco per evitare conflitti con altri moduli, ad esempio l10n_it_fatturapa_Causale; normalmente eviterei il codice in italiano ma in questo caso manterrei Causale perché è il nome del nodo XML cui è collegato.

odooNextev commented 9 months ago

Nel modulo del reverse_charge andranno modificati i test, che nella pr attuale falliscono. Per questo motivo avevamo pensato di creare un piccolo modulo solamente per l'aggiunta del campo, per evitare che il reverse_charge dipenda da fatturapa, stessa cosa per la dichiarazione d'intento I riferimenti alla dichiarazione d'intento li ho trovati qui, https://www.fiscoetasse.com/domande-e-risposte/12325-come-indicare-il-n-della-dichiarazione-dintento-nella-fattura-elettronica.html anche se non è un documento ufficiale l'ho ritenuto comunque valido.

SirAionTech commented 9 months ago

Nel modulo del reverse_charge andranno modificati i test, che nella pr attuale falliscono. Per questo motivo avevamo pensato di creare un piccolo modulo solamente per l'aggiunta del campo, per evitare che il reverse_charge dipenda da fatturapa, stessa cosa per la dichiarazione d'intento I riferimenti alla dichiarazione d'intento li ho trovati qui, https://www.fiscoetasse.com/domande-e-risposte/12325-come-indicare-il-n-della-dichiarazione-dintento-nella-fattura-elettronica.html anche se non è un documento ufficiale l'ho ritenuto comunque valido.

Nella PR attuale i test di l10n_it_reverse_charge falliscono perché è stato modificato, senza quelle modifiche dubito che falliscano. Attualmente il modulo scrive in narration e non mi pare si sia parlato di modificare questo comportamento, se è da modificare lo farei in una issue a parte. Se quanto scritto dal modulo deve finire anche nel nuovo campo che popolerà Causale nella fattura elettronica, penso che iniettarcelo sarà compito di _out_rc.

La definizione di un campo che serve solo alla fatturazione elettronica penso debba essere in l10n_it_fatturapa.

primes2h commented 9 months ago

La definizione di un campo che serve solo alla fatturazione elettronica penso debba essere in l10n_it_fatturapa.

Concordo.

Per quanto riguarda il nome, se il campo fosse necessario manterrei comunque le convenzioni attuali. In Odoo "Causale" è già il termine utilizzato per "Reason":

https://github.com/odoo/odoo/blob/27440dea0d83b84b3f241a75d52199027cb012b6/addons/account/i18n/it.po#L11695

In l10n_it_fatturapa esiste già transport_reason per il nodo 2.1.9.3 :

https://github.com/OCA/l10n-italy/blob/6f8f988bc0599f9300d0d32525a8ca76fc16a0ba/l10n_it_fatturapa/models/account.py#L343-L346

Allo stesso modo, se necessario, userei reason per il nodo 2.1.1.11 .

primes2h commented 9 months ago

immagine

@odooNextev intendi dire che "Causale" ripetuto nell'XML è un problema?

Mi pare un comportamento normale, Che il nodo possa essere utilizzato più volte è previsto dalle specifiche. Viene indicato con <0.N>

stenext commented 9 months ago

@SirAionTech @primes2h Mi intrometto nella discussione per cercare di chiarire meglio quanto proposto dai miei colleghi. Ho rivisitato la descrizione ed il titolo della issue per attenerci di più al punto focale: il campo termini e condizioni (narration) è usato in maniera inappropriata (secondo noi) da alcuni moduli che riguardano soprattutto la FE. La discussione era cominciata qui: https://discord.com/channels/753902328494424064/753902328494424070/1199655452368195617

Capisco quanto segnalato da @SirAionTech, ovvero inserire il campo causale, reason o come si preferisce chiamare solo nei moduli di l10n_it_fatturapa invece che creare un modulo ad hoc solo per questo campo, ma bisogna essere certi che non sia necessario memorizzare la causale dell'autofattura (RC) anche per l'account.move fine a se stessa (per esempio va stampata nel PDF?) o serve solo per l'invio di questa autofattura in XML.

Un altro punto: ho deciso di tenere tutti gli argomenti (fatturapa, rc, dichiarazione) in una sola issue perchè l'argomento di partenza (campo narration) è comune a tutti, poi le risoluzioni saranno sviluppate separatamente e si possono anche creare delle issue figlie di questa per separare gli argomenti stessi.

TheMule71 commented 8 months ago

Vi ricordo che: https://github.com/odoo/odoo/blob/b9f0f3676a9409a991ff8bd3d06ba4ace8d567e8/addons/l10n_it_edi/models/account_move.py#L831

La mappatura Causale -> narration è parte di Odoo standard, anche se solo in ingresso.

Visto che il desiderio è quello di uniformarci a loro, non introdurrei un campo "nostro" che in futuro magari dovremo tornare a mappare su narration.

Piuttosto, bisognerebbe proporre PR a loro e convincerli che Causale nella fattura italiana e narration sono due cose abbastanza diverse.

odooNextev commented 4 months ago

Vi ricordo che: https://github.com/odoo/odoo/blob/b9f0f3676a9409a991ff8bd3d06ba4ace8d567e8/addons/l10n_it_edi/models/account_move.py#L831

La mappatura Causale -> narration è parte di Odoo standard, anche se solo in ingresso.

Visto che il desiderio è quello di uniformarci a loro, non introdurrei un campo "nostro" che in futuro magari dovremo tornare a mappare su narration.

Piuttosto, bisognerebbe proporre PR a loro e convincerli che Causale nella fattura italiana e narration sono due cose abbastanza diverse.

@TheMule71 pensi che non devo portare avanti questa PR allora? https://github.com/OCA/l10n-italy/pull/3887 Per ora Odoo standard fa la mappatura solo per l'ingresso e non considera ancora la causale nella generazione della fattura XML. Potrei poi creare una issue e fare una PR simile anche in odoo/odoo

Marianna-Marasco commented 2 months ago

Ma come mai viene riportata in automatico la causale sull'autofattura? Non sono riuscita a trovare nulla che dica che è da compilare...

odooNextev commented 2 months ago

Ma come mai viene riportata in automatico la causale sull'autofattura? Non sono riuscita a trovare nulla che dica che è da compilare...

Ciao Marianna, Queste sono indicazioni date dal nostro commercialista.

Nell'autofattura emessa per il fornitore estero deve essere indicato nella causale del XML un messaggio come questo: Documento [Nr. FATTURA FORNITORE] del [DATA] Ns.Protocollo [RIF: INTERNO] del [DATA]

Il riferimento normativo lo trovi all'articolo 46 del D.L. n. 331/93 (Fatturazione delle operazioni intracomunitarie), dove si dice che deve essere emessa una fattura a norma dell'articolo 21 del D.L. n. 633/72 (Fatturazione delle operazioni), dove sono indicate tutte le voci da indicare nell'autofattura. Nell'articolo non c'è un riferimento al fatto che debbano essere inserite nella causale, inserendole nel campo narration in odoo vengono automaticamente inserite nella causale della FE.

Spero di averti risposto. So che è difficile muoversi tra le varie norme e ognuno fa riferimento a quello che indica il proprio commercialista rendendo complicato trovare un punto comune.

Marianna-Marasco commented 2 months ago

Ma come mai viene riportata in automatico la causale sull'autofattura? Non sono riuscita a trovare nulla che dica che è da compilare...

Ciao Marianna, Queste sono indicazioni date dal nostro commercialista.

Nell'autofattura emessa per il fornitore estero deve essere indicato nella causale del XML un messaggio come questo: Documento [Nr. FATTURA FORNITORE] del [DATA] Ns.Protocollo [RIF: INTERNO] del [DATA]

Il riferimento normativo lo trovi all'articolo 46 del D.L. n. 331/93 (Fatturazione delle operazioni intracomunitarie), dove si dice che deve essere emessa una fattura a norma dell'articolo 21 del D.L. n. 633/72 (Fatturazione delle operazioni), dove sono indicate tutte le voci da indicare nell'autofattura. Nell'articolo non c'è un riferimento al fatto che debbano essere inserite nella causale, inserendole nel campo narration in odoo vengono automaticamente inserite nella causale della FE.

Spero di averti risposto. So che è difficile muoversi tra le varie norme e ognuno fa riferimento a quello che indica il proprio commercialista rendendo complicato trovare un punto comune.

Ciao e grazie del chiarimento!! :-)