odoo-addon-l10n-it-edi-extension 18.0.1.0.0.30__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (51) hide show
  1. odoo/addons/l10n_it_edi_extension/README.rst +493 -0
  2. odoo/addons/l10n_it_edi_extension/__init__.py +951 -0
  3. odoo/addons/l10n_it_edi_extension/__manifest__.py +37 -0
  4. odoo/addons/l10n_it_edi_extension/controllers/__init__.py +1 -0
  5. odoo/addons/l10n_it_edi_extension/controllers/portal.py +27 -0
  6. odoo/addons/l10n_it_edi_extension/data/FoglioStileAssoSoftware.xsl +3150 -0
  7. odoo/addons/l10n_it_edi_extension/data/invoice_it_template.xml +50 -0
  8. odoo/addons/l10n_it_edi_extension/data/res.city.it.code.csv +13898 -0
  9. odoo/addons/l10n_it_edi_extension/i18n/l10n_it_edi_extension.pot +1167 -0
  10. odoo/addons/l10n_it_edi_extension/i18n/l10n_it_edi_fatturapa.pot +44 -0
  11. odoo/addons/l10n_it_edi_extension/models/__init__.py +15 -0
  12. odoo/addons/l10n_it_edi_extension/models/account_journal.py +152 -0
  13. odoo/addons/l10n_it_edi_extension/models/account_move.py +765 -0
  14. odoo/addons/l10n_it_edi_extension/models/account_move_line.py +10 -0
  15. odoo/addons/l10n_it_edi_extension/models/ir_attachment.py +37 -0
  16. odoo/addons/l10n_it_edi_extension/models/l10n_it_edi_activity_progress.py +14 -0
  17. odoo/addons/l10n_it_edi_extension/models/l10n_it_edi_article_code.py +15 -0
  18. odoo/addons/l10n_it_edi_extension/models/l10n_it_edi_discount_rise_price.py +25 -0
  19. odoo/addons/l10n_it_edi_extension/models/l10n_it_edi_line.py +48 -0
  20. odoo/addons/l10n_it_edi_extension/models/l10n_it_edi_line_other_data.py +17 -0
  21. odoo/addons/l10n_it_edi_extension/models/l10n_it_edi_summary_data.py +77 -0
  22. odoo/addons/l10n_it_edi_extension/models/res_city_it_code.py +83 -0
  23. odoo/addons/l10n_it_edi_extension/models/res_company.py +62 -0
  24. odoo/addons/l10n_it_edi_extension/models/res_partner.py +64 -0
  25. odoo/addons/l10n_it_edi_extension/readme/CONFIGURE.md +45 -0
  26. odoo/addons/l10n_it_edi_extension/readme/CONTRIBUTORS.md +5 -0
  27. odoo/addons/l10n_it_edi_extension/readme/DESCRIPTION.md +160 -0
  28. odoo/addons/l10n_it_edi_extension/security/ir.model.access.csv +14 -0
  29. odoo/addons/l10n_it_edi_extension/static/description/icon.png +0 -0
  30. odoo/addons/l10n_it_edi_extension/static/description/index.html +832 -0
  31. odoo/addons/l10n_it_edi_extension/tests/__init__.py +2 -0
  32. odoo/addons/l10n_it_edi_extension/tests/import_xmls/IT01234567890_FPR03.xml +166 -0
  33. odoo/addons/l10n_it_edi_extension/tests/import_xmls/IT02780790107_11004.xml +216 -0
  34. odoo/addons/l10n_it_edi_extension/tests/import_xmls/IT02780790107_11005.xml +224 -0
  35. odoo/addons/l10n_it_edi_extension/tests/import_xmls/IT05979361218_003.xml +107 -0
  36. odoo/addons/l10n_it_edi_extension/tests/import_xmls/test.png +0 -0
  37. odoo/addons/l10n_it_edi_extension/tests/import_xmls/xml_import.zip +0 -0
  38. odoo/addons/l10n_it_edi_extension/tests/test_fiscalcode.py +126 -0
  39. odoo/addons/l10n_it_edi_extension/tests/test_import_edi_extension_xml.py +350 -0
  40. odoo/addons/l10n_it_edi_extension/views/company_view.xml +41 -0
  41. odoo/addons/l10n_it_edi_extension/views/l10n_it_view.xml +164 -0
  42. odoo/addons/l10n_it_edi_extension/views/res_partner_view.xml +19 -0
  43. odoo/addons/l10n_it_edi_extension/wizards/__init__.py +2 -0
  44. odoo/addons/l10n_it_edi_extension/wizards/compute_fc.py +176 -0
  45. odoo/addons/l10n_it_edi_extension/wizards/compute_fc_view.xml +65 -0
  46. odoo/addons/l10n_it_edi_extension/wizards/l10n_it_edi_import_file_wizard.py +98 -0
  47. odoo/addons/l10n_it_edi_extension/wizards/l10n_it_edi_import_file_wizard.xml +46 -0
  48. odoo_addon_l10n_it_edi_extension-18.0.1.0.0.30.dist-info/METADATA +513 -0
  49. odoo_addon_l10n_it_edi_extension-18.0.1.0.0.30.dist-info/RECORD +51 -0
  50. odoo_addon_l10n_it_edi_extension-18.0.1.0.0.30.dist-info/WHEEL +5 -0
  51. odoo_addon_l10n_it_edi_extension-18.0.1.0.0.30.dist-info/top_level.txt +1 -0
@@ -0,0 +1,224 @@
1
+ <?xml version="1.0" encoding="UTF-8" ?>
2
+ <p:FatturaElettronica
3
+ versione="FPA12"
4
+ xmlns:ds="http://www.w3.org/2000/09/xmldsig#"
5
+ xmlns:p="http://ivaservizi.agenziaentrate.gov.it/docs/xsd/fatture/v1.2"
6
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
7
+ xsi:schemaLocation="http://ivaservizi.agenziaentrate.gov.it/docs/xsd/fatture/v1.2 http://www.fatturapa.gov.it/export/fatturazione/sdi/fatturapa/v1.2/Schema_del_file_xml_FatturaPA_versione_1.2.xsd"
8
+ >
9
+ <FatturaElettronicaHeader>
10
+ <DatiTrasmissione>
11
+ <IdTrasmittente>
12
+ <IdPaese>IT</IdPaese>
13
+ <IdCodice>02780790107</IdCodice>
14
+ </IdTrasmittente>
15
+ <ProgressivoInvio>11005</ProgressivoInvio>
16
+ <FormatoTrasmissione>FPA12</FormatoTrasmissione>
17
+ <CodiceDestinatario>UFPQ1O</CodiceDestinatario>
18
+ <ContattiTrasmittente />
19
+ </DatiTrasmissione>
20
+ <CedentePrestatore>
21
+ <DatiAnagrafici>
22
+ <IdFiscaleIVA>
23
+ <IdPaese>IT</IdPaese>
24
+ <IdCodice>02780790107</IdCodice>
25
+ </IdFiscaleIVA>
26
+ <Anagrafica>
27
+ <Denominazione>Societa' Alpha SRL</Denominazione>
28
+ </Anagrafica>
29
+ <RegimeFiscale>RF01</RegimeFiscale>
30
+ </DatiAnagrafici>
31
+ <Sede>
32
+ <Indirizzo>VIALE ROMA 543</Indirizzo>
33
+ <CAP>07100</CAP>
34
+ <Comune>SASSARI</Comune>
35
+ <Provincia>SS</Provincia>
36
+ <Nazione>IT</Nazione>
37
+ </Sede>
38
+ </CedentePrestatore>
39
+ <RappresentanteFiscale>
40
+ <DatiAnagrafici>
41
+ <IdFiscaleIVA>
42
+ <IdPaese>IT</IdPaese>
43
+ <IdCodice>03339130126</IdCodice>
44
+ </IdFiscaleIVA>
45
+ <CodiceFiscale>03339130126</CodiceFiscale>
46
+ <Anagrafica>
47
+ <Denominazione>Rappresentante fiscale</Denominazione>
48
+ <CodEORI>1234567890123</CodEORI>
49
+ </Anagrafica>
50
+ </DatiAnagrafici>
51
+ </RappresentanteFiscale>
52
+ <CessionarioCommittente>
53
+ <DatiAnagrafici>
54
+ <CodiceFiscale>01234560157</CodiceFiscale>
55
+ <Anagrafica>
56
+ <Denominazione>AMMINISTRAZIONE BETA</Denominazione>
57
+ </Anagrafica>
58
+ </DatiAnagrafici>
59
+ <Sede>
60
+ <Indirizzo>VIA TORINO 38-B</Indirizzo>
61
+ <CAP>00145</CAP>
62
+ <Comune>ROMA</Comune>
63
+ <Provincia>RM</Provincia>
64
+ <Nazione>IT</Nazione>
65
+ </Sede>
66
+ </CessionarioCommittente>
67
+ <TerzoIntermediarioOSoggettoEmittente>
68
+ <DatiAnagrafici>
69
+ <IdFiscaleIVA>
70
+ <IdPaese>IT</IdPaese>
71
+ <IdCodice>03339130126</IdCodice>
72
+ </IdFiscaleIVA>
73
+ <CodiceFiscale>03339130126</CodiceFiscale>
74
+ <Anagrafica>
75
+ <Denominazione>Rappresentante fiscale</Denominazione>
76
+ <CodEORI>1234567890123</CodEORI>
77
+ </Anagrafica>
78
+ </DatiAnagrafici>
79
+ </TerzoIntermediarioOSoggettoEmittente>
80
+ </FatturaElettronicaHeader>
81
+ <FatturaElettronicaBody>
82
+ <DatiGenerali>
83
+ <DatiGeneraliDocumento>
84
+ <TipoDocumento>TD01</TipoDocumento>
85
+ <Divisa>EUR</Divisa>
86
+ <Data>2014-12-18</Data>
87
+ <Numero>124</Numero>
88
+ <DatiCassaPrevidenziale>
89
+ <TipoCassa>TC01</TipoCassa>
90
+ <AlCassa>4.00</AlCassa>
91
+ <ImportoContributoCassa>1.00</ImportoContributoCassa>
92
+ <ImponibileCassa>25.00</ImponibileCassa>
93
+ <AliquotaIVA>22.00</AliquotaIVA>
94
+ <RiferimentoAmministrazione>rif. amm</RiferimentoAmministrazione>
95
+ </DatiCassaPrevidenziale>
96
+ <Causale
97
+ >LA FATTURA FA RIFERIMENTO AD UNA OPERAZIONE AAAA BBBBBBBBBBBBBBBBBB CCC DDDDDDDDDDDDDDD E FFFFFFFFFFFFFFFFFFFF GGGGGGGGGG HHHHHHH II LLLLLLLLLLLLLLLLL MMM NNNNN OO PPPPPPPPPPP QQQQ</Causale>
98
+ <Causale
99
+ >SEGUE DESCRIZIONE CAUSALE NEL CASO IN CUI NON SIANO STATI SUFFICIENTI 200 CARATTERI AAAAAAAAAAA BBBBBBBBBBBBBBBBB</Causale>
100
+ </DatiGeneraliDocumento>
101
+ <DatiOrdineAcquisto>
102
+ <RiferimentoNumeroLinea>1</RiferimentoNumeroLinea>
103
+ <IdDocumento>66685</IdDocumento>
104
+ <NumItem>1</NumItem>
105
+ <CodiceCUP>123abc</CodiceCUP>
106
+ <CodiceCIG>456def</CodiceCIG>
107
+ </DatiOrdineAcquisto>
108
+ <DatiContratto>
109
+ <RiferimentoNumeroLinea>1</RiferimentoNumeroLinea>
110
+ <IdDocumento>123</IdDocumento>
111
+ <Data>2012-09-01</Data>
112
+ <NumItem>5</NumItem>
113
+ <CodiceCUP>123abc</CodiceCUP>
114
+ <CodiceCIG>456def</CodiceCIG>
115
+ </DatiContratto>
116
+ <DatiConvenzione>
117
+ <RiferimentoNumeroLinea>1</RiferimentoNumeroLinea>
118
+ <IdDocumento>123</IdDocumento>
119
+ <NumItem>5</NumItem>
120
+ <CodiceCUP>123abc</CodiceCUP>
121
+ <CodiceCIG>456def</CodiceCIG>
122
+ </DatiConvenzione>
123
+ <DatiRicezione>
124
+ <RiferimentoNumeroLinea>1</RiferimentoNumeroLinea>
125
+ <IdDocumento>123</IdDocumento>
126
+ <NumItem>5</NumItem>
127
+ <CodiceCUP>123abc</CodiceCUP>
128
+ <CodiceCIG>456def</CodiceCIG>
129
+ </DatiRicezione>
130
+ <DatiTrasporto>
131
+ <DatiAnagraficiVettore>
132
+ <IdFiscaleIVA>
133
+ <IdPaese>IT</IdPaese>
134
+ <IdCodice>05714511002</IdCodice>
135
+ </IdFiscaleIVA>
136
+ <Anagrafica>
137
+ <Denominazione>Trasporto spa</Denominazione>
138
+ </Anagrafica>
139
+ </DatiAnagraficiVettore>
140
+ <IndirizzoResa>
141
+ <Indirizzo>strada dei test</Indirizzo>
142
+ <NumeroCivico>150/B</NumeroCivico>
143
+ <CAP>12042</CAP>
144
+ <Comune>Bra</Comune>
145
+ <Provincia>CN</Provincia>
146
+ <Nazione>IT</Nazione>
147
+ </IndirizzoResa>
148
+ <DataOraConsegna>2012-10-22T16:46:12.000+02:00</DataOraConsegna>
149
+ </DatiTrasporto>
150
+ </DatiGenerali>
151
+ <DatiBeniServizi>
152
+ <DettaglioLinee>
153
+ <NumeroLinea>1</NumeroLinea>
154
+ <CodiceArticolo>
155
+ <CodiceTipo>EAN</CodiceTipo>
156
+ <CodiceValore>12345</CodiceValore>
157
+ </CodiceArticolo>
158
+ <Descrizione
159
+ >LA DESCRIZIONE DELLA FORNITURA PUO' SUPERARE I CENTO CARATTERI CHE RAPPRESENTAVANO IL PRECEDENTE LIMITE DIMENSIONALE. TALE LIMITE NELLA NUOVA VERSIONE E' STATO PORTATO A MILLE CARATTERI</Descrizione>
160
+ <Quantita>5.00</Quantita>
161
+ <PrezzoUnitario>1.00</PrezzoUnitario>
162
+ <PrezzoTotale>5.00</PrezzoTotale>
163
+ <AliquotaIVA>22.00</AliquotaIVA>
164
+ </DettaglioLinee>
165
+ <DettaglioLinee>
166
+ <NumeroLinea>2</NumeroLinea>
167
+ <Descrizione>FORNITURE VARIE PER UFFICIO</Descrizione>
168
+ <Quantita>10.00</Quantita>
169
+ <PrezzoUnitario>2.00</PrezzoUnitario>
170
+ <PrezzoTotale>20.00</PrezzoTotale>
171
+ <AliquotaIVA>22.00</AliquotaIVA>
172
+ </DettaglioLinee>
173
+ <DatiRiepilogo>
174
+ <AliquotaIVA>22.00</AliquotaIVA>
175
+ <ImponibileImporto>26.00</ImponibileImporto>
176
+ <Imposta>5.72</Imposta>
177
+ <EsigibilitaIVA>D</EsigibilitaIVA>
178
+ </DatiRiepilogo>
179
+ </DatiBeniServizi>
180
+ <DatiPagamento>
181
+ <CondizioniPagamento>TP01</CondizioniPagamento>
182
+ <DettaglioPagamento>
183
+ <ModalitaPagamento>MP05</ModalitaPagamento>
184
+ <DataScadenzaPagamento>2015-04-30</DataScadenzaPagamento>
185
+ <ImportoPagamento>20.00</ImportoPagamento>
186
+ <IstitutoFinanziario>Bank Test</IstitutoFinanziario>
187
+ <IBAN>IT28V0100003245232200001200</IBAN>
188
+ <BIC>GEBABEBB</BIC>
189
+ <PenalitaPagamentiRitardati>2.00</PenalitaPagamentiRitardati>
190
+ <DataDecorrenzaPenale>2015-05-01</DataDecorrenzaPenale>
191
+ </DettaglioPagamento>
192
+ <DettaglioPagamento>
193
+ <ModalitaPagamento>MP05</ModalitaPagamento>
194
+ <DataScadenzaPagamento>2015-05-30</DataScadenzaPagamento>
195
+ <ImportoPagamento>9.00</ImportoPagamento>
196
+ <IstitutoFinanziario>Bank Test</IstitutoFinanziario>
197
+ <IBAN>IT28V0100003245232200001200</IBAN>
198
+ <BIC>GEBABEBB</BIC>
199
+ <PenalitaPagamentiRitardati>1.00</PenalitaPagamentiRitardati>
200
+ <DataDecorrenzaPenale>2015-05-31</DataDecorrenzaPenale>
201
+ </DettaglioPagamento>
202
+ </DatiPagamento>
203
+ <DatiPagamento>
204
+ <CondizioniPagamento>TP02</CondizioniPagamento>
205
+ <DettaglioPagamento>
206
+ <ModalitaPagamento>MP05</ModalitaPagamento>
207
+ <DataScadenzaPagamento>2015-06-30</DataScadenzaPagamento>
208
+ <ImportoPagamento>1.50</ImportoPagamento>
209
+ <IstitutoFinanziario>Bank Test</IstitutoFinanziario>
210
+ <IBAN>IT28V0100003245232200001200</IBAN>
211
+ <BIC>GEBABEBB</BIC>
212
+ <PenalitaPagamentiRitardati>0.15</PenalitaPagamentiRitardati>
213
+ <DataDecorrenzaPenale>2015-07-01</DataDecorrenzaPenale>
214
+ </DettaglioPagamento>
215
+ </DatiPagamento>
216
+ <Allegati>
217
+ <NomeAttachment>test.png</NomeAttachment>
218
+ <FormatoAttachment>png</FormatoAttachment>
219
+ <DescrizioneAttachment>descrizione test</DescrizioneAttachment>
220
+ <Attachment
221
+ >iVBORw0KGgoAAAANSUhEUgAAALQAAABMCAYAAADEDJ1GAAA0DklEQVR4nO19eZwVxbX/t6p6ufudBRDUiJo8jTFm471EE/KMEVlUYNgX2UHEl8UIhpiIPrMYX0yiZlFxQWQbGBiYUdTRUaMgJvH3jMmLMRo0IBgEnfVufe/t7qrz+6NvD8PMnQWYIb7fj++H+2Fud9+qOl2nTp06dc4p4CRO4iRO4iRO4iRO4iRO4iRO4iT+vwX7ZzegCAQAXvi4AORR/A5H8fxJ/D+IDwtD6/AYON/NMwKHmRbwGPck855Ev0MAMOExqVH4iG6eLYbzAUwBUFr43tXA86U5APwbgPIenj+Jkzgq8B7udcXAnwewFUAOAHX4+GAAfgVgE4CvFSnDf94fBN215SROotcwAKwAUAtgPYCFHe53ZOwMOjOxAmAV/j6z8FzHZwjADwv3bi9831P4f2i7uk7iJI4ZN6A44xGAmnbP+SrBS4V7LgAbnk6sOvzunXZ/5wrPOe2urS78v6hQ5luF7x/rUNdJnESv4DNMe2a2O3zaM+i0dr/tivkJRzJtx+sKHvMXU00A4PnCtfMK37tSdU7iJI6AzygfwWHG6shoxRh0K4Cydt9deExajFFHFeq4t4ty04X/v9qhbU8Vrn+278g9if9f8EccZsyOurCDzlK62w8HJw6+FUALgNvgWUx8/KyL3zUVadczhXsj+o7U4wYnIt/O/r9Vx+dE1J6O/yfgS+cYjpS0Njx7ckdd2P+8BuAWeBJ1mM75Fp1rJDj376fgWTI+WSj/XMG0uvOipw8GA+hI7aIc3qKzo9rRfgD8pXDvC0Xu9RuIiFuWpdfV1Rn19fXGrl27iqo9RMRra2vN+vp6o7a29kOnGtXW1or6+nqjrq7OsCxLJ6JiaxJGRPr27dsNItLr6uo+dHT0Bmbh/8XoXuLuB/BzFBhUcA6dA8Af/HLOaV/owsuv9f9cAoYh7W7d6P9Bv99WrD3f7PC9/UslAI92aHd/gO3YscNsaGjQunrg6aeewhOPP44tW7bgrjvv7HSfiFBZWWnW19f/05iivr5erFq1yiTquDTx8HRdHTa+9BKqNm7EurVriz5TU1PDamtrzS4GQL/heCoT8PTdUwDswGF14x8AdsIz273RQxm3fDR+xndfnF5543upQ2OlUudmZf50ANCEwIztS/GDL1/fMuFjlz62uP4/J2ze/cS7/5j7yidPX/OvbQWM/NSo8LI/L82MalO1jwCHN1N8BkADgAPtrvUZ6urqBOdcjBo1yvavbdq0CXo4PAS2PQbApcT5MCudPjuTyeiZTAaMMUSjUYQikf1Bw/g/UsonMpnMpgMHDuRWrFgBAKiursakSZN0xpjTl+3tCkSkb9261Zk8ebL/HQ/cfz/Khwy5VLnuKA5cZGUyn7AsqyydyYBzjlAkgnAolAqGQn9lSu0kou2apr1YUVHRVm5lZaVeWlqqxowZ0+87u/0+en562d3GMwOesus3PgUA+NNVNWU5sm+Siha/1fpO5PTIYAgukMinIElBKQnJCCV6FO9bjTC4jkGhcuhcQ4vdCl0Y4Iz/qdQM31SWPOXJf9l+CR7Bemz8VHXo6T/XZtHZ4tFvICK2f/9+PnToUAkAW7Zsga5pF6cymRXpZHKEJEIoFAIRQUoJJSWkUlBKgXMOxhiEENB1HUopWJYF0zDy4XD4p9Fo9Jbx48cTACxZsgQTJ04UI0eO7BeGsCxL37Bhg3P11VcDALZt2xZ8v7Hx5qxlfS2bycQGDRoEoWlwXRdSyjZ6AIAXaOC6Do1zOI4DIkIwHH4zEo3emkulqq6aNQsAkEmnRTgS8VXRfkFfMLS/UeJLPQEAHx91Af9eWTw3Z+MuPDXsBUQ/tm9kRrprbFcOFpwjK3PgilFG5sghKRlApKBxMCKuOBHBFCagIPOwCYqExnXGOWNhPQQGBlvloev8psHRyI+/8Mg8vHP9Qgwdc7lgIyd17Pg+d1zas2ePVl1d7S5fvhzr16+HIrrdsqwbhRBgjCGbzSKfz4MxZhMRIyLGOeeMMVJKcc65IiKmvC9+B+uhUAimacKVEgHT/EO0vHzihMsv3w8AyWSSx2KxYmbKY0JlZaXYtm2brK6uxp/+9Cf85S9/uVASbXBs+2zOOex8HtlcDq7ruu3ayOAtChkAdKBDKaU0wzB4KBQC5xyObSMUjf5cKy29Yebll2PdunXYtWuXdv/997t9QUNH9IuEPrDiIDv1R4OJgeG5aWu/1Jpv3WEKQ7iOQquTBgCbK2jEiHPmLZJZW0sKfxCgoMDA4P1jICIoKCIFSSAe0k0e1SPISwfSwaIBp16y6iurzsP7yzPslDvC/SIFiIjv3btXnX322Vi/fj1SmcwdgvNva7oOK5NBNptVnHOXiHSPf3v3in19lYh806VeEo9DaBo4538wNO2L02fMsA8dOoSdO3eKqVOnHtfg3LdvnzjjjDMkYwyVlZUXNDY3v2QaRhScI51MAt7iXmPM6yDGWFsbu6OJiKCUIgCSiLhpmjwSicB1HEjXvfFTn/rUT740fDhyuRwCgQBDH0vrvmZotnFyFc2onoYXJt2DfyD959P4kAua8gmk8xkwcJdzpnnv43DVxRYfrP39As0+c/u/IUApkAowQ4sZAVgq3xQSwTMvr1mc/vXkKnytehpjffjCVq5cyTOZjFq2bBkeWb360pxtP2sEAkgnk3DyeQdCCAbw9h3e1cKqNyAiG4ARKykBB5DN57+fTaVu/fby5chkMjwcDh/LWoBVV1fT5MmT8Ytf/AKO4+wcPGTIl1OpFDLpNMCYyznvclHbY+GdaVdEpHRd1yLRKLKWReFQ6Mx58+btX7lyJa655hrGGOuzPuozhiYQ37d8vzrzjqGom7hqvEuylhihOdMCBuFyDs0jlnAcfXwE/OFNIKUAFjcjzOAaNPC5o7YtWvvK8n0YdscZnIEd9yLQZ6Da2locOHDgibLy8submpqQy2ZdLoTHAIyhz4hrB6WUFEKIsrIy5LLZQ7quD1mwYAGqqqrYtGnTel0hEbH777+flixZgrVr1w7P2faLmqahpbkZRORyzjWfIY9nIHZBAwCocDjMA4EAOGPfmzt37u133303wuGwuPrqq/tEHewThiYQ+9FzS+nmS+9CXcWD94X04JL3rAbkXFtqnIu+ZuSO8BlbKSU1rouPxAYjY6fXjKlZPO/rz9yAX132U8Zw7FKgqqqKT5s2TT344INQSuUN0zSam5vBGFMoSOS+ZgAf7cuWUlK8pIRpQoAz9q/z5s37QyaTQTgc7rEcIuKvvvqqGjZsGFavXfsDXYibm5ubYdt2vzKyT4NftlJKCSH4aaedhpampmfLy8svmzxlCmpra3lFRcVxC57jZmgCcQaoO664GR9XQ35TGi+/5J3EfigQODh66uwO2seRCkL7m9RpU+XIchgDgaBIgYPhzPjpaExkno+cs+qrI37xOwA4JkmdSCRYPB6nVQ89NIjr+vt2Po9kKqUE573eISumghytWuK/R6WUMgyDx+NxkFKz582bt766uhq+qa0YiIj/5Cc/UTfeeCPWPPJIVTAanXrg3Xd9fb3nAdleZ+7wXEd9utu+blcPEaG0tBSuUrtTra3nLlu2DJWVlWLmzJnHJamPd9uSr8HdCmD4t3Dpi2YocMmexDsgMHCItoVcMTDGvJfBGCSBXElKEtkOKcf/SCLblUpJkkSgHhcjjLx6CQx7WvbDDOiXNP1jxm8YGO7E3epo6U0mkzwej9PatWvLuaa9n7UspArM3F1bfNraSSbluq6rpHSUUo5SypFSOq7rugWm6pGjiTz6Oefctm3V3NwMxvm6qk2bzpw8eTK624iZMmWKuvHGG7Fhw4YtoUhk6r69e/1+4X7Z3dIBAFISKaWIyPZpaEeLK6UkIjqS+YvQ0L7spqYmpXF+Tryk5O2VK1di5syZsrCdfsw4ZuUfAFL/mVHR74fx3FVrqzSpDd+f2E+Mi8IrKC5PfUlKRJBKuQCYoQkR0ENMF5oh2olrCYIjXeRkHrbrSM6ZZGC6bzro2BFti0fGAC7QkDuEs+NnXPL8zLVrLqmcM9dvb29QV1cnYrGYvO+++yCVarQsy7dgdCvR2klSYow5RGSYpsnD0aj3ZhgDOAcK9mjHcZDNZgHP50X4VoVi8JlaCMGllLbtuoZhmpsAXJjJZIrOPgVrAjZu3vwLwdjkd955B75psTsa/PpUoY+EECIUDDJN04z2NPg26VwuB9dxJBiTjHXdR+3rEELwpqYmNXDgwI+Gw+HnAVyybt2641I7jlnlWFNRzefWTlbPTVz1dV0P/GpP8gAEWJcLI99CQURQpFzBhBY1IxAAbOkiooeaQmboD4ywR4FZHBQihrMzrvU5K58d4M3wDIl80lvAMK51vwbzBxXhjNhpyOezi0bVLlq1uaJaTK2d3NO0xgGolffdB900G6SUA5LJpOSF9UBRq8zh66SUIsMweDQaRTabBecc4XD4zWAw+BoDDgKQBJSlUqlzM5b1+Xwux0tLS5HP52FZFhhjLjyTWXd1EWOMRSIRDBowgI2vqEBdXZ1ovxtXXV0tJk+eLB9et25SUNer33vvvTap24sB6TLGtEgkAk3TYLsuwsFgIhSJvMKUelsxluFEAQmclc9mP5NOp4dwziGEQCKRABFJznm32/d+XVJKGjp0KLPz+f+aNWvWdxOJBOLxeA9d1EWZx/IjeulZwb40Qj47ae1H8pTf35RtAYFIQLBictlnvIINmZUG49DAkWDaH8PB4LctM/rcjNVXdlnf9sm/AekffCWRt+4oV+6/SRCasgkI3v2ijIFBQhKHYAOCcQQikYGXrJ3R+NzLz4lLv3Bpl0ztOA50XUdlVdXDdi43v6GhQQohemRmpZTUNU1EYzHYto1AKHRvJBj8UWNj48ElS5YUrWv37t346+uvI2lZV2dSqZ8LIaJSSmS8rWXyiu9cL2MMUkoVjUb5R0477UuXX3HFb13X1TVNcwDPqaiiokJWbtgQzObzViqVguu6JIRgPejspJRi0WgUhmEARG/F4/GloVDo8dGjR3f5o7vuuguRcPjClGX9OBqLXcKJ0JpI9Lhw9q8TEcrLywGiz82bN++Phw4d0gYPHnzUmy/HwtAcgHr0c9+CcdanmizHKkvnM64QQiu2cDvc2SBD09kpoTK4yv1zSC//0vBN49OEw1aK5G2kx/76FAMXgJJIfmI0xW5ijn+fAdg+q0ZPWi3PnyLEl5qsVuRkjjjjxTu9MCtIKWUsEBERI3Dwl1vqTt2O6i6JU0ppnHN37Zo1nwXnrzY0NPQo1Qq/QzQahaZpaG5tvbW8pOT7CxYsaLtf0HHbJJaUEpdddhn5DAgAd955J2Kx2L/KfP75YCAQaclk4DhOJzWnnWRDSSSCU8888+NXjB79NyJq8/vw1ZPNW7a8mUgkzk0kEl3OMO2uKS4EP2XQIOTz+XdKS0ouGj9+/KH2zxKR/tRTTzEhBKSUuPjiiykYDDp+GYwxrFu7Fu83NT0xsLz88lQqhVwu16OqBkCZpskDgQB0TWNz5swBEfHCgOg1jlqHTt2WYdGbwoieM2xZzrHLUo6lRMEQ3xUzu0ohYgZYWAsiR/b4y7cuegwA3v7udWz9wXH6qkdMyTBc4qbiTjgE4g/Me1x/eciz9udvn+AwYPhjE1d9KawHd+lCY4l8mjTemakJBAYGzrlI2BmKBIJDbpw55T+2V1bfm/pRRouuCHeUAJxz7n5n+XJIxl7MZTIgIsU5590xMxEhHo/DcZx3A6Z5xreXLgURobW1Vb/++uvBGJMFP4xiswLftWsXa2xsFMlk0p4zZ84rI155JTr5pZe+EYvHf5nNZrllWW3Td7vZwI7FYkbINPM37d37t8I9CQD79u3TGGPuw6tWzXClPLe1tRVdzTDtdf5AIMAj0Shcx1kwb+7c1YDnIBWLxcxQKOQOHz5cduUoRUR8zZo1+ogRI5xZs2crxtgVq9ev/4RpGK8bus6TqVSb/0oX75JbliWDwaAwDONnAG5obGzs8p13haOS0J6JjqlXxj6MQ8KlpJ2BQ3ZRVaNNzSCFqBGBwQ0Q4+GxNQstmvoEch/fpQd/cPtRe5H945bv6gPf+KJjbhmLzZPvQVhqWYdkoCWbKsrUHpGe6qEznUWNEEKmwS6tWtBGTxt9RBpjzK3csmWRbVkPNjQ0dLmAaj9VnnbaaUgmElUXXXTR9AsuuAB33nmndv3118tj2QGzWlr0TCbjDDz9dDyyenW5I2WjEAItLS2At3CEUkqPxWIwDAM60UdnzZ+/5/n6enHJyJHSl2rr162D7TiUsSw4jqMYY50GZXtmDoVCLBgMQrru6YsWLTqwefNmTJky5Zg8/TZv3iySyaRatGgR3VtZCTOXO6iUGpxIJLpkan9dAIDF4nFEQiE+ffp02r59uxg7dmyvTXlHZSJ5cN4qDQASQe37nDPY5LgcvNOg8Mx1gCKokBZAgOtgWp6NrVlovTrido1tvgLHwswAcPoPbnfMLWNB02q1qdVfg8ojKJiw4maEKVJEREdsmx8mlDObXFcwAYOZNwPAQ/NXtZ+hOGPM/fWvfoVcMvlgKpWCEEJ1x8xSSpx22mmQrrtm8eLF02+55RY0NjZqS5cudY91OzdUWuoMPP10VlNTw+fNn98UDYdZc2vrX0pKShCPx/V4PK6HQiE4UiqN84/Mmj9/T01NDS4peOJls1kBALphXAPGYNu2hOdMVLQ+pRSZpskCpgnBWGTRokUH3njjDTF16lQcq9vq1KlT5aJFi2hrdbX2HzNnormhYQjXtAPReBzKM/11+k3hGiMih3vm3LUAcMkllxxV3b2W0L40e37hJqQbWimjsrClqzjAOzaPMQZJkjQmWIkRA2nGgCur5zXRjFrBNlb0mcfbxumPaTM2jXOfGHcPiOuUcjKwlU2CdV74+FLaFAYLa0GYPMZGbpvZRpevfz6+ffv4g++/X9va2kqea0Zn2vwNjpKSEh4Jh1+ePn36hVVVVZBSHvfGQHtMmzZNbNq0STLGsG3bthIQjVBCGImmpt8PGDBgz/jx4/HYY49h3Lhx/k84APXrX/8aoXA4n81mjVwup4qZAn2JSESspKQEpGnnLZoz583XX39dO//88/vME86yLC0UCrn33nMPAqEQWZYF27aLzhgFeFI6FkN5WRmbMGFCJ+tNd+i1Dp36oS1wM1Qsp41JMiDn5JXgoigzExFIgZ0aHwQuMefi6jlNr138N41tPLdPXQZnbBrnvv7VH+nnP/Y154Vp675iCu2Fg+lGRpyKTmscnOWcvAprIT4obE4AUNO0vEngjrbYRyTT6Z8qpcA8e6pW7KX7ZjlvNsCFAGCapqio6LvBCgBVVVVy0qRJ4qGHHpITJ05sBQ6vZokI8+fP18eNG+e0uyYYY2rIkCGfbWhsNHK5HLqyaxcGJSsvL0cwHL5x+pQpb+7bt08MHTq0T/soFAq5W7du1SZNmuRu2LLlPABvZLNZ3o0tnBGRwxjTua4vA/DzaDSqoZeuv71m6LS9mAAgYWdWeGKLdTnKlFJuPBDVwPjfLt46a92m5zbjgkv7lpl9nP+bFU5ieRbxO4I7Xpi2/tnSYGxEcy7hCiaOoK3dTqNSpHhLLnszgJrtn3/cve/h+wRjTG7cuJEnU6l/sSwLXdlQC3qzxwjR6LiJY8fi6aef1keNGtUvUSW+m6hvJfEtCwV14Ig6bdsLmMnkct/TNA3wXECNToV6CxwVDoc5ETW/+MILPwGAoUOH9mkkj49Jkya5NTU1bMKECW9uqqpap5Sa3dra2p2dWti2jUwqdROAnw8fPry7nIdHoFc6NIH4qT9c4/73rCqkHOuLGTcLxjvnumCFjRPipJlCR8CkCgAY9+KV/RqYuvOKFwUAaIhMKhhutcLGQ6dnGRci7VhIOcnP/nZGDeZPnkdfGf4VHQBCweAszYseceBJig70MRCgwpEIOOeHJo4dux0A+ouZ22PkyJFy5MiR9pgxY+xQKFSsPm6aprP7b39DNpudnMvlgK4EFhFISi6EQDQcnnjPPfeAiHT0YyRJIBDgABAMBOZIKSGEEACK9xFjzLIspDOZ0rodO0IA0FWQcUf0iqGTt3kLDY30c2zlwHEd4uCsGPlSkRs3YwhwY+9Fa2e/SSCEbi3aAX2GsRePlK03LGHDqyqSESOyM25GoZTqPEURQQDMkY4kAgR3/h0ABr31EQYAyUxmjvK2pFnHF91Od4YhBGKRyDVekXRCosh7wq5duxgAvPHGG/FMKuVHy3SlbqhAKARwnmlsatoB4JgXgL3FmDFjZCKR4OPHj0coHN4cjXbRRx4YAIczBrulZTIApFKpXmkTvWLo2F+eYwDgKowNiQAUh8M6pxQAAeAcpHOBqBa+FQAenfVof0ZZt4HHf6EBQEQL3qygQPD8RY8MFIA3jXAuBddBik0EAHbF9fk//P01WOn0pbZtg3fhSaeUItMwuFIKHwCPFS5/KFL6WpYlAICEGB2LxQBP3egKbjAYRDAQuO3aa69FfX19Z7WkHxCLxQQAlMZiN+fzeQAoukZpD8X5JAAYPXp0r9ShXjG0+8krCQAk5FclFBi1Cx3xUXCd4OB6k9UCqfJrAWDANwb0i+7cEdGbDQkAQqOdJAmmpgtFkoracZTiklxkc9mvAEAZHlR/fe2vSGcysD3JVnR7mIhkMBhEMBh8cf6VV6Lhgw/E0e5k9Rf8oFVIOaIwm3SaZdrBSCaTCJrmgwBgWdYJGZT+xk9paeluzjkCgQAAqGKzIQDmOA7SyeSXCtd6xUe9YuinbnpGAUDSzn1KKgUiVdz2rIiCuomIEVT6gC8CAIZ/YfgJicJmYIpAGLZ2MiJmeH9AD4BUcenJwbmjXKSdzCenL50LAIiScappmpBSoitO4JwrIQSCsdhmAPj9yy9/aBKqjB492vOMIvpMITK7qMkR3hYzAoEANE1rBAA/uvwEQN1www3al4YPRzga/b1hGJBSFhUIRCRc10U6nS5/4oknAC9CpEd+7Q1D87EYKd9YOgVpO326JAmOLqZkKKVxHVE99Mqwe88C7axrHw3e76ie76k3UT34e50JdLW5QZyYIolsLieuD033rgFn6boOIioqCQoSW7PzeYCxlwDgyiuvPFGM0CN86UdKnSmlRFfxB1JKpes6QsHg/oqKCl+Sn7A+GjNmDAeAUDD424Lprst3SETIZrPw1o/Arkcf7XHfpEeG9mtz3dlI5TOQigDeRSMYI8EEwnp4NwDgXnFCJdhkN+RJKbC/MjBPk+6oOhS+SkXICRvJ91sAAI6DwUII38OtKBhjzHYcwLbfAoCnnnrqQ6FuFKAAIJPNDvCd94upTZxzEkIgHIu9DQDZbPa4fOKPFr5qRJy/7l/rop1+HCLSqRQAwAqFeiy/FxLaq4y/HQTXJBhTICjeycJB/hKRwMGbAZygLHKdQUQt3d1nheRJnDiijrceEkIFGD/sn1GsWBT0OjCW9n7zodE4OACsW7cOlmV1+VB72kjKVgDYsWPHPyt/dmtXN/w2Fja4oGlarzmp174cu9nbkL2cYFUxY/4JBetW6hSGKIgRRMC75uWSKGwZdWEbBTzJIQpR3h8ihm5Ddx3qu8EC//w+4lKW9vCIHzYDp4gLQpfl9vSAb/YaNeATiOphMHAwcNXJesC8OwABDKcAwJMndDIDthfMmhw4rQdjEBgIJBVywvuNIJ6Q0i26mGr7lbflDaVUGQA8/fTTH5ZUsgoAZs+eDSMUshn3k/d0JkUpxchLRTYIOLyY/Cfg0/4f3Vhjjhq96RAFAKE1FyNqhHOMMUAV73QixRwlkbGtTwNAy+rGE2Ky8zH2E17nZFj2MwoEzlhnsx0DGDgJLhAzIhAf9U6uIGH8Q3mLqS7fLhFJwzBARJ8GgFGjRv2zputO8INLo8HgQc4YlK+AdgDnnEulkE2lzgf6f0OlSDslAFjZ7IVdWWOOB72SMLte9rYdw1p4n841KBR/WYILbksbGSd/9gtLqjALMxXh+KJ4jwKc3cScO3Evsk76y7a0wRS0ItZkKEVKMIFoINLwxaXDAAC27e4p7K4JP/KiUwUFsx3TtJEAYJrmh4ahfbdRxdie7ha3RMTy+Twy2Wz4xRdf9K+dsD4aNWqUrNm2DRnL+jfbtiGE6NO6e1WYdZe3CyUY+71gAihiavFX1lmZg6tshFLsTADI3vaNE6Jo7nrZ2/q9bOEgM2XndcvJgvHicxnjIE3oCJvB//avDTqzPGWaAQgh/NxsR8CnL5/PI5/NzgCAo3Ga6W8895y3mys07bfdhTpxzpnrugQAjcnk5wEglUqdkD669dZbvd1M4HTbcZDzot27jQY6WvSOof2HOX8O/lTeRVAqA7dDegipXPbbALDl9S/3WWO7Q7ow6BqS1nUxEQMBNmPo7G9CDAQQBwOR5lnsJzylX3rRvyMSjSYMw+jSNsoYE5aXm+O0HTt2BIDeO830N3ybOFfqN/5U3pFR/JmHiKSmacgmEt8FAMuyToj58eMf/zgAIGvbyyOhEBjndl/qz0AvGXr89SEJAIx4XcJOA4DRTYSdnnTSSLvZ//jd4nWYWznNIfR7Fnc2etNIe9cVK5G0rR9bThZMFfE0a/M/ISNtW4hofCsAuN/kOgCEI5EndV0HvOTtnX/uwdZ1He++995PAaChoeFDoXbs3LlTAUA4EvmNUgqa5z/aVTeJdDqNVCZTsXHjRgwePPi4E7z0BCJi06dPd3a88AKsVOob6XS6Xxy7ekUEK2xfn6ZEY1gEERAmCEX2vwEIcJZzbKVxDifBlwMApm3sVyn21Px6DQBkKDJdMAjLyRITrHPwAQBSUCERQEAzIMo+eB8ANjV6i1cCVpPnbad1pUcrpfRkMolsJvP1mpoaTJgwwT1Bx0fw2tpaUZgROvXbxRdfLAFgxIgRiMViyUAg4MfodS7IUzukrmlgjN0NAOvWrevXgVlZWSkA4N1Dh77LhYBt26q7BfixorejUuVuIe3UTeNQEoytCekBKMDtmPaJQJ75joO15lNI5FM/eXrqOrCqme7a5/un0+tRL0avHunsmLEWSSe9MeNmwVjB3Ng5GAKKkxvSA4jr0Qc+8ctrcPdFq4xZk2c4AJDPZJ4BY9B1nRfTo4HDzMAYQ9a2awAglUr1p3MPr6ysNIhIVVRUyOHDh0sAasOGDUZHqbpr1y4TAMLh8D2maQJFZhp/oHLOeSKRQMqyrlu7dm1szpw58s033+wXQ2t9fb246qqr3G1btyJvWT9OeTt/RQOajxe9JsDUb2EAcIo54Ec5Jz8XShnEWedESeSFOrnSlQoQhmJ/ADAsZWckFWIA+rD9LDk7JbEOIMkeY4wh680OXcXQAVAGERAqMVYAwHUrIBljdOjQITF48GC5uarqccbYla2trRId3k87ZhCJRAKBQKBiw/r1YyZNmlT3xhtvaOedd16fmimJiK9atUrNnDnT3rt3Lx64/34MGjQIBGDChAn2/v37fV8MAgDLsrz6lfqJlPK7KGyedErvUAhIlVIq5brcZewvt9566xnnnnuu2768PgLLZDISAHK2/UcpJVzX7TGr0rGi9xk0b/6hAwDnrR39dpDrH0TNCJQi1dGN1A914pyL5mwrmGCfe37iul98bdQEZCqq6Bfom6PLCGA7vvpXmrxuEn4zde1SAsY2Wi3QukloopRyS8wYonr0L194aFoDgcCuWCgBIBQKcQBwNW2ppmkgoqJqR7uFFTU1NSFn208+/PDDg8477zz39ddf7zMJd//994u77rpLLVq0CBs2bFg0YMAAyuRy9Pe9e+nQ++/Tygcf/HUsGoXn6eqtUUaOHCmrq6sxvqIiEY1GX4vGYn5uuk7wpXTSy9b/kfLy8k2MMbz66qt077339k0fEbGVK1fShAkTULlhw92c888UUhl0mYXqeHFUCwG6w1PiSwKxawLcAME7C6Wjqul3usYF3ml9F9DwzbpJj3w/UjsNly1bJ//xna6PPesN3lx+rf7qsla6+DefwLNTH7xakvz5u6mDELyHHBpgWkgEEAnp8wAge0e2bVESi8UcIsLMSZPeCgYCb8e6YQbAUz0cx1HZbBaM8/cfeeSRkvPPP9999dVX+bZt246LIaq3bNGvueYaedmIEbjv3nufNAOBB5UXkAs/Y1E4GPyaoeupO9ev95maA8Dll1/u0UR0ddDTo7sdmEIINDU1YeCgQdNWr127ctiwYZBSyoMHDx5XH+3evVt77bXXaMmSJVizfv0KJsR17777bo+JIo8XR8XQbLnnovhs04FaYirlSeni7qFtL4wLvJt6HwEhbqkZd9/G3++ZgdN/MtD923easfeHyaNa5e794RT9b985xD5+x31OPnUVqq+4525G5gPvp5tAIOoufa9Syi0NxqBp5v/865opf9iMaoSWHxkals16DK6Fw1ODgYAfm9glbZxznsvlKONlWGp56KGHvvi5z31ONTQ0yA0bNuhHuVhkO3bsMDOZDCZPmeI8VF2Nl3772zc1wxizd+9eWJblKqVIKUX5fF4dOnTINkOhyKm6/hQAVFZWEgCEQiGHiDB9+vSXhRB/725gtmfqAwcOIGia19y/cuUzQ4YMwZAhQ9zm5mYkk0fZR3v36rt378Y555zj7t27F7+85541hqb98NChQ/3OzMAx5LazbiI9dBtz6sevuYgZ9NsDyQ8guGeB7i4hOYFQHohBKpU1BT9n1LYl//C98zB9o/EkBkC/HtL6goXxGE+P4lEWejkE5y6Iy4PvAqsX2F6DGZ4cty6eg/U3g2untOZb/LMBWLE2tOWfALHSQAlKA+FBwzde1VD3uzox5qLOuR785OGVGze+aFnW8EQi4TAvPWy3abRM02TxeBxpy1oXC4fnzCocZVZTU8MCgYA+evRo2rZtm5o4cSIBwOOPP85efPFFPmLECDZixAjFOW9juocfeWSMct0niQiJZLJTtqH2WZtisRgGlJcfkb/i2muv1e+77z5n49atH80lk283NjX1ipn88gCAdP38xXPn/tW/vn79euOUU04BAGlZFsaPH0+PPvooM00To0eP5g888ABfvHhx3m/f6tWrB+UcZ7ehafHW1tZj9tdgAE7/6EfNKePG2fX19T0ebXds2Ud3rgX79znYMXXdk2knN6Yh1ywFetaLXKUoaoZZVAuiCdhpB+1p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</Attachment>
222
+ </Allegati>
223
+ </FatturaElettronicaBody>
224
+ </p:FatturaElettronica>
@@ -0,0 +1,107 @@
1
+ <?xml version="1.0" encoding="UTF-8" ?>
2
+ <p:FatturaElettronica
3
+ versione="FPA12"
4
+ xmlns:ds="http://www.w3.org/2000/09/xmldsig#"
5
+ xmlns:p="http://ivaservizi.agenziaentrate.gov.it/docs/xsd/fatture/v1.2"
6
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
7
+ xsi:schemaLocation="http://ivaservizi.agenziaentrate.gov.it/docs/xsd/fatture/v1.2 http://www.fatturapa.gov.it/export/fatturazione/sdi/fatturapa/v1.2/Schema_del_file_xml_FatturaPA_versione_1.2.xsd"
8
+ >
9
+ <FatturaElettronicaHeader>
10
+ <DatiTrasmissione>
11
+ <IdTrasmittente>
12
+ <IdPaese>IT</IdPaese>
13
+ <IdCodice>05979361218</IdCodice>
14
+ </IdTrasmittente>
15
+ <ProgressivoInvio>003</ProgressivoInvio>
16
+ <FormatoTrasmissione>FPA12</FormatoTrasmissione>
17
+ <CodiceDestinatario>UFPQ1O</CodiceDestinatario>
18
+ </DatiTrasmissione>
19
+ <CedentePrestatore>
20
+ <DatiAnagrafici>
21
+ <IdFiscaleIVA>
22
+ <IdPaese>IT</IdPaese>
23
+ <IdCodice>05979361218</IdCodice>
24
+ </IdFiscaleIVA>
25
+ <Anagrafica>
26
+ <Denominazione>SOCIETA' ALPHA BETA SRL</Denominazione>
27
+ </Anagrafica>
28
+ <RegimeFiscale>RF02</RegimeFiscale>
29
+ </DatiAnagrafici>
30
+ <Sede>
31
+ <Indirizzo>VIALE ROMA 543B</Indirizzo>
32
+ <CAP>07100</CAP>
33
+ <Comune>SASSARI</Comune>
34
+ <Provincia>SS</Provincia>
35
+ <Nazione>IT</Nazione>
36
+ </Sede>
37
+ </CedentePrestatore>
38
+ <CessionarioCommittente>
39
+ <DatiAnagrafici>
40
+ <CodiceFiscale>01234560157</CodiceFiscale>
41
+ <Anagrafica>
42
+ <Denominazione>AMMINISTRAZIONE BETA</Denominazione>
43
+ </Anagrafica>
44
+ </DatiAnagrafici>
45
+ <Sede>
46
+ <Indirizzo>VIA TORINO 38-B</Indirizzo>
47
+ <CAP>00145</CAP>
48
+ <Comune>ROMA</Comune>
49
+ <Provincia>RM</Provincia>
50
+ <Nazione>IT</Nazione>
51
+ </Sede>
52
+ </CessionarioCommittente>
53
+ <TerzoIntermediarioOSoggettoEmittente>
54
+ <DatiAnagrafici>
55
+ <IdFiscaleIVA>
56
+ <IdPaese>IT</IdPaese>
57
+ <IdCodice>03533590174</IdCodice>
58
+ </IdFiscaleIVA>
59
+ <CodiceFiscale>MRORSS90E25B111K</CodiceFiscale>
60
+ <Anagrafica>
61
+ <Nome>MARIO</Nome>
62
+ <Cognome>ROSSI</Cognome>
63
+ </Anagrafica>
64
+ </DatiAnagrafici>
65
+ </TerzoIntermediarioOSoggettoEmittente>
66
+ <SoggettoEmittente>TZ</SoggettoEmittente>
67
+ </FatturaElettronicaHeader>
68
+ <FatturaElettronicaBody>
69
+ <DatiGenerali>
70
+ <DatiGeneraliDocumento>
71
+ <TipoDocumento>TD01</TipoDocumento>
72
+ <Divisa>EUR</Divisa>
73
+ <Data>2015-02-16</Data>
74
+ <Numero>FT/2015/0008</Numero>
75
+ <DatiBollo>
76
+ <BolloVirtuale>SI</BolloVirtuale>
77
+ <ImportoBollo>6.00</ImportoBollo>
78
+ </DatiBollo>
79
+ <Causale
80
+ >Rif ordine MAPA: --- Nr. Identificativo Ordine 1234567</Causale>
81
+ </DatiGeneraliDocumento>
82
+ </DatiGenerali>
83
+ <DatiBeniServizi>
84
+ <DettaglioLinee>
85
+ <NumeroLinea>1</NumeroLinea>
86
+ <Descrizione>Prodotto di test al giorno</Descrizione>
87
+ <Quantita>1.00</Quantita>
88
+ <PrezzoUnitario>10.00</PrezzoUnitario>
89
+ <ScontoMaggiorazione>
90
+ <Tipo>SC</Tipo>
91
+ <Percentuale>10.00</Percentuale>
92
+ </ScontoMaggiorazione>
93
+ <PrezzoTotale>9.00</PrezzoTotale>
94
+ <AliquotaIVA>0.00</AliquotaIVA>
95
+ <Natura>N4</Natura>
96
+ </DettaglioLinee>
97
+ <DatiRiepilogo>
98
+ <AliquotaIVA>0.00</AliquotaIVA>
99
+ <Natura>N4</Natura>
100
+ <ImponibileImporto>9.00</ImponibileImporto>
101
+ <Imposta>0.00</Imposta>
102
+ <RiferimentoNormativo
103
+ >Operazioni senza addebito imposta regime contribuenti minimi art.27 c.1-2 DL.98/11</RiferimentoNormativo>
104
+ </DatiRiepilogo>
105
+ </DatiBeniServizi>
106
+ </FatturaElettronicaBody>
107
+ </p:FatturaElettronica>
@@ -0,0 +1,126 @@
1
+ # Copyright 2024 Simone Rubino - Aion Tech
2
+ # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
3
+
4
+ from codicefiscale import isvalid
5
+
6
+ from odoo.exceptions import UserError, ValidationError
7
+ from odoo.tests import TransactionCase
8
+
9
+
10
+ class TestFiscalCode(TransactionCase):
11
+ def setUp(self):
12
+ super().setUp()
13
+
14
+ self.partner = self.env.ref("base.res_partner_2")
15
+ self.rome_province = self.env.ref("base.state_it_rm")
16
+
17
+ def test_fiscalcode_compute(self):
18
+ wizard = (
19
+ self.env["wizard.compute.fc"]
20
+ .with_context(active_id=self.partner.id)
21
+ .create(
22
+ {
23
+ "fiscalcode_surname": "ROSSI",
24
+ "fiscalcode_firstname": "MARIO",
25
+ "birth_date": "1984-06-04",
26
+ "sex": "M",
27
+ "birth_city": 10048,
28
+ "birth_province": self.rome_province.id,
29
+ }
30
+ )
31
+ )
32
+ # ---- Compute FiscalCode
33
+ wizard.compute_fc()
34
+ self.assertEqual(self.partner.l10n_it_codice_fiscale, "RSSMRA84H04H501X")
35
+
36
+ def test_fiscalcode_check(self):
37
+ # Wrong FC length
38
+ with self.assertRaises(ValidationError):
39
+ self.env["res.partner"].create(
40
+ {
41
+ "name": "Person",
42
+ "is_company": False,
43
+ "l10n_it_codice_fiscale": "12345670546",
44
+ }
45
+ )
46
+ # Correct FC
47
+ self.env["res.partner"].create(
48
+ {
49
+ "name": "Person",
50
+ "is_company": False,
51
+ "l10n_it_codice_fiscale": "RSSMRA84H04H501X",
52
+ }
53
+ )
54
+ # Empty FC
55
+ self.env["res.partner"].create(
56
+ {
57
+ "name": "Person",
58
+ }
59
+ )
60
+ # FC is VAT number
61
+ self.env["res.partner"].create(
62
+ {
63
+ "name": "Company",
64
+ "is_company": True,
65
+ "l10n_it_codice_fiscale": "06363391001",
66
+ }
67
+ )
68
+ # Invalid FC
69
+ with self.assertRaises(UserError):
70
+ self.env["res.partner"].create(
71
+ {
72
+ "name": "Person",
73
+ "is_company": False,
74
+ "l10n_it_codice_fiscale": "AAAMRA00H04H5010",
75
+ }
76
+ )
77
+
78
+ def test_fiscal_code_check_change_to_person(self):
79
+ """
80
+ When a partner changes type from company to person,
81
+ the fiscal code is checked.
82
+ """
83
+ # Arrange
84
+ wrong_person_fiscalcode = "AAAMRA00H04H5010"
85
+ partner = self.env["res.partner"].create(
86
+ {
87
+ "name": "Test partner",
88
+ "company_type": "company",
89
+ }
90
+ )
91
+ # pre-condition
92
+ self.assertFalse(isvalid(wrong_person_fiscalcode))
93
+
94
+ with self.assertRaises(UserError) as ue:
95
+ partner.l10n_it_codice_fiscale = wrong_person_fiscalcode
96
+ exc_message = ue.exception.args[0]
97
+
98
+ # Assert
99
+ self.assertIn("Invalid Codice Fiscale", exc_message)
100
+
101
+ def test_fiscal_code_check_company_VAT_change_to_person(self):
102
+ """
103
+ When a partner changes type from company to person
104
+ and has a company VAT as fiscalcode,
105
+ the fiscal code is checked.
106
+ """
107
+ # Arrange
108
+ company_vat = "06363391001"
109
+ partner = self.env["res.partner"].create(
110
+ {
111
+ "name": "Test partner",
112
+ "company_type": "company",
113
+ }
114
+ )
115
+ partner.l10n_it_codice_fiscale = company_vat
116
+ # pre-condition
117
+ self.assertFalse(isvalid(partner.l10n_it_codice_fiscale))
118
+
119
+ # Act
120
+ with self.assertRaises(ValidationError) as ve:
121
+ partner.company_type = "person"
122
+ exc_message = ve.exception.args[0]
123
+
124
+ # Assert
125
+ self.assertIn("fiscal code", exc_message)
126
+ self.assertIn("16 characters", exc_message)