Skip to content

Commit 3b7c7b8

Browse files
committed
First support for v. 1.2 spec
1 parent 26cd8ed commit 3b7c7b8

12 files changed

+3127
-1496
lines changed

PyFePA/fepa.py

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -27,11 +27,11 @@
2727
TD = map(lambda td: 'TD{:0=2d}'.format(td), range(1, 6))
2828
TR = ['RT01','RT01']
2929
TC = map(lambda tc: 'TC{:0=2d}'.format(tc), range(1,22))
30-
NT = map(lambda nt: 'NT{:0=2d}'.format(nt), range(1,6))
30+
NT = map(lambda nt: 'NT{:0=2d}'.format(nt), range(1,7))
3131
TCP = ('SC', 'PR', 'AB', 'AC')
3232
SM = ('SC', 'MG')
3333
TP = ('TP01', 'TP02', 'TP03')
34-
MP = map(lambda mp: 'MP{:0=2d}'.format(mp), range(1,21))
34+
MP = map(lambda mp: 'MP{:0=2d}'.format(mp), range(1,22))
3535
EI = ('I','D','S')
3636

3737

@@ -103,21 +103,19 @@ class FatturaElettronicaHeader(GenFePA):
103103
CedentePrestatore = FieldObject(required=True,object_class='CedentePrestatore', code=2)
104104
RappresentanteFiscale = FieldObject(object_class='RappresentanteFiscale', code=3)
105105
CessionarioCommittente = FieldObject(required=True,object_class='CessionarioCommittente', code=4)
106-
TerzoIntermediarioOSoggettoEmittente = FieldObject(object_class='TerzoIntermediarioOSoggettoEmittente', code=5, depend= [6])
106+
TerzoIntermediarioOSoggettoEmittente = FieldObject(object_class='TerzoIntermediarioOSoggettoEmittente',
107+
code=5, depend= [6])
107108
SoggettoEmittente = FieldCostant(cvalue=['CC','TZ'],code=6)
108109

109110

110111
class DatiTrasmissione(GenFePA):
111112

112113
IdTrasmittente = FieldObject(required=True,object_class='IdTrasmittente', code=1)
113114
ProgressivoInvio = FieldString(minlen=1,maxlen=10,required=True,code=2)
114-
FormatoTrasmissione = FieldCostant(cvalue=['SDI11'],required=True,code=3)
115-
CodiceDestinatario = FieldString(minlen=1,maxlen=6,required=True,code=4)
115+
FormatoTrasmissione = FieldCostant(cvalue=['FPA12','FPR12'],required=True,code=3)
116+
CodiceDestinatario = FieldString(minlen=6,maxlen=7,required=True,code=4)
116117
ContattiTrasmittente = FieldObject(object_class='ContattiTrasmittente', code=5)
117-
118-
def __init__(self):
119-
self.FormatoTrasmissione = 'SDI11'
120-
super(GenFePA,self).__init__()
118+
PECDestinatario = FieldString(minlen=7,maxlen=256,code=6)
121119

122120

123121
class IdTrasmittente(GenFePA):
@@ -491,7 +489,7 @@ class DettaglioPagamento(GenFePA):
491489
CFQuietanzante = FieldString(minlen=1, maxlen=16, code=10)
492490
TitoloQuietanzante = FieldString(minlen=2, maxlen=10, code=11)
493491
IstitutoFinanziario = FieldString(minlen=1, maxlen=80, code=12)
494-
IBAN = FieldString(minlen=27, maxlen=34, code=13)
492+
IBAN = FieldString(minlen=15, maxlen=34, code=13)
495493
ABI = FieldString(minlen=5, maxlen=5, code=14)
496494
CAB = FieldString(minlen=5, maxlen=5, code=15)
497495
BIC = FieldString(minlen=8, maxlen=11, code=16)

PyFePA/serializer.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -156,7 +156,7 @@ def serializer(obj,toformat,**kwargs):
156156
globalvalidation(obj)
157157
ser = serializexml(obj,'FatturaElettronica')
158158
if lxml:
159-
with open(DPATH+'/xsd/fatturapa_v1.1.xsd', 'rt') as f:
159+
with open(DPATH+'/xsd/fatturapa_v1.2.xsd', 'rt') as f:
160160
xmlschema_doc = ElementTree.parse(f)
161161
xmlschema = ElementTree.XMLSchema(xmlschema_doc)
162162
if not xmlschema.validate(ser):

PyFePA/siamm.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,7 @@ def _siam_serialize(value):
120120

121121
intercettazioni = etree.Element('INTERCETTAZIONI')
122122
(etree.SubElement(intercettazioni, 'ID')).text = str(value['id']).upper() if 'id' in value else '1'
123-
(etree.SubElement(intercettazioni, 'BENEFICIARIO')).text = unicode(value['beneficiario'].strip('IT')).upper()
123+
(etree.SubElement(intercettazioni, 'BENEFICIARIO')).text = unicode(value['beneficiario'])
124124
(etree.SubElement(intercettazioni, 'TIPOPAGAMENTO')).text = value['tipopagamento'].upper()
125125
(etree.SubElement(intercettazioni, 'ENTEPAGANTE')).text = value['entepagante'].upper()
126126
(etree.SubElement(intercettazioni, 'DATAINIZIOPRESTAZIONE')).text = \

PyFePA/test/IT01234567890_11004.xml renamed to PyFePA/test/IT01234567890_FPA01.xml

Lines changed: 37 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,17 @@
11
<?xml version="1.0" encoding="UTF-8"?>
2-
<?xml-stylesheet type="text/xsl" href="fatturapa_v1.1.xsl"?>
3-
<p:FatturaElettronica versione="1.1" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xmlns:p="http://www.fatturapa.gov.it/sdi/fatturapa/v1.1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
2+
<p:FatturaElettronica versione="FPA12" xmlns:ds="http://www.w3.org/2000/09/xmldsig#"
3+
xmlns:p="http://ivaservizi.agenziaentrate.gov.it/docs/xsd/fatture/v1.2"
4+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
5+
xsi:schemaLocation="http://ivaservizi.agenziaentrate.gov.it/docs/xsd/fatture/v1.2 fatturaordinaria_v1.2.xsd ">
46
<FatturaElettronicaHeader>
57
<DatiTrasmissione>
68
<IdTrasmittente>
79
<IdPaese>IT</IdPaese>
8-
<IdCodice>00000000000</IdCodice>
10+
<IdCodice>12345670017</IdCodice>
911
</IdTrasmittente>
1012
<ProgressivoInvio>00001</ProgressivoInvio>
11-
<FormatoTrasmissione>SDI11</FormatoTrasmissione>
13+
<FormatoTrasmissione>FPA12</FormatoTrasmissione>
1214
<CodiceDestinatario>AAAAAA</CodiceDestinatario>
13-
<ContattiTrasmittente/>
1415
</DatiTrasmissione>
1516
<CedentePrestatore>
1617
<DatiAnagrafici>
@@ -19,9 +20,9 @@
1920
<IdCodice>01234567890</IdCodice>
2021
</IdFiscaleIVA>
2122
<Anagrafica>
22-
<Denominazione>SOCIETA' ALPHA SRL</Denominazione>
23+
<Denominazione>ALPHA SRL</Denominazione>
2324
</Anagrafica>
24-
<RegimeFiscale>RF01</RegimeFiscale>
25+
<RegimeFiscale>RF19</RegimeFiscale>
2526
</DatiAnagrafici>
2627
<Sede>
2728
<Indirizzo>VIALE ROMA 543</Indirizzo>
@@ -52,7 +53,7 @@
5253
<DatiGeneraliDocumento>
5354
<TipoDocumento>TD01</TipoDocumento>
5455
<Divisa>EUR</Divisa>
55-
<Data>2014-12-18</Data>
56+
<Data>2017-01-13</Data>
5657
<Numero>123</Numero>
5758
<Causale>LA FATTURA FA RIFERIMENTO AD UNA OPERAZIONE AAAA BBBBBBBBBBBBBBBBBB CCC DDDDDDDDDDDDDDD E FFFFFFFFFFFFFFFFFFFF GGGGGGGGGG HHHHHHH II LLLLLLLLLLLLLLLLL MMM NNNNN OO PPPPPPPPPPP QQQQ RRRR SSSSSSSSSSSSSS</Causale>
5859
<Causale>SEGUE DESCRIZIONE CAUSALE NEL CASO IN CUI NON SIANO STATI SUFFICIENTI 200 CARATTERI AAAAAAAAAAA BBBBBBBBBBBBBBBBB</Causale>
@@ -62,47 +63,47 @@
6263
<IdDocumento>66685</IdDocumento>
6364
<NumItem>1</NumItem>
6465
<CodiceCUP>123abc</CodiceCUP>
65-
<CodiceCIG>456def</CodiceCIG>
66+
<CodiceCIG>456def</CodiceCIG>
6667
</DatiOrdineAcquisto>
6768
<DatiContratto>
68-
<RiferimentoNumeroLinea>1</RiferimentoNumeroLinea>
69-
<IdDocumento>123</IdDocumento>
70-
<Data>2012-09-01</Data>
71-
<NumItem>5</NumItem>
72-
<CodiceCUP>123abc</CodiceCUP>
73-
<CodiceCIG>456def</CodiceCIG>
69+
<RiferimentoNumeroLinea>1</RiferimentoNumeroLinea>
70+
<IdDocumento>123</IdDocumento>
71+
<Data>2016-09-01</Data>
72+
<NumItem>5</NumItem>
73+
<CodiceCUP>123abc</CodiceCUP>
74+
<CodiceCIG>456def</CodiceCIG>
7475
</DatiContratto>
7576
<DatiConvenzione>
76-
<RiferimentoNumeroLinea>1</RiferimentoNumeroLinea>
77-
<IdDocumento>123</IdDocumento>
78-
<NumItem>5</NumItem>
79-
<CodiceCUP>123abc</CodiceCUP>
80-
<CodiceCIG>456def</CodiceCIG>
77+
<RiferimentoNumeroLinea>1</RiferimentoNumeroLinea>
78+
<IdDocumento>456</IdDocumento>
79+
<NumItem>5</NumItem>
80+
<CodiceCUP>123abc</CodiceCUP>
81+
<CodiceCIG>456def</CodiceCIG>
8182
</DatiConvenzione>
8283
<DatiRicezione>
83-
<RiferimentoNumeroLinea>1</RiferimentoNumeroLinea>
84-
<IdDocumento>123</IdDocumento>
85-
<NumItem>5</NumItem>
86-
<CodiceCUP>123abc</CodiceCUP>
87-
<CodiceCIG>456def</CodiceCIG>
84+
<RiferimentoNumeroLinea>1</RiferimentoNumeroLinea>
85+
<IdDocumento>789</IdDocumento>
86+
<NumItem>5</NumItem>
87+
<CodiceCUP>123abc</CodiceCUP>
88+
<CodiceCIG>456def</CodiceCIG>
8889
</DatiRicezione>
8990
<DatiTrasporto>
90-
<DatiAnagraficiVettore>
91-
<IdFiscaleIVA>
92-
<IdPaese>IT</IdPaese>
93-
<IdCodice>00000000000</IdCodice>
94-
</IdFiscaleIVA>
91+
<DatiAnagraficiVettore>
92+
<IdFiscaleIVA>
93+
<IdPaese>IT</IdPaese>
94+
<IdCodice>24681012141</IdCodice>
95+
</IdFiscaleIVA>
9596
<Anagrafica>
96-
<Denominazione>Trasporto spa</Denominazione>
97-
</Anagrafica>
98-
</DatiAnagraficiVettore>
99-
<DataOraConsegna>2012-10-22T16:46:12.000+02:00</DataOraConsegna>
97+
<Denominazione>Trasporto spa</Denominazione>
98+
</Anagrafica>
99+
</DatiAnagraficiVettore>
100+
<DataOraConsegna>2017-01-10T16:46:12.000+02:00</DataOraConsegna>
100101
</DatiTrasporto>
101102
</DatiGenerali>
102103
<DatiBeniServizi>
103104
<DettaglioLinee>
104105
<NumeroLinea>1</NumeroLinea>
105-
<Descrizione>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>
106+
<Descrizione>DESCRIZIONE DELLA FORNITURA</Descrizione>
106107
<Quantita>5.00</Quantita>
107108
<PrezzoUnitario>1.00</PrezzoUnitario>
108109
<PrezzoTotale>5.00</PrezzoTotale>
@@ -119,7 +120,7 @@
119120
<CondizioniPagamento>TP01</CondizioniPagamento>
120121
<DettaglioPagamento>
121122
<ModalitaPagamento>MP01</ModalitaPagamento>
122-
<DataScadenzaPagamento>2015-01-30</DataScadenzaPagamento>
123+
<DataScadenzaPagamento>2017-02-18</DataScadenzaPagamento>
123124
<ImportoPagamento>6.10</ImportoPagamento>
124125
</DettaglioPagamento>
125126
</DatiPagamento>

PyFePA/test/IT01234567890_FPA02.xml

Lines changed: 136 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,136 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<p:FatturaElettronica versione="FPA12" xmlns:ds="http://www.w3.org/2000/09/xmldsig#"
3+
xmlns:p="http://ivaservizi.agenziaentrate.gov.it/docs/xsd/fatture/v1.2"
4+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
5+
xsi:schemaLocation="http://ivaservizi.agenziaentrate.gov.it/docs/xsd/fatture/v1.2 fatturaordinaria_v1.2.xsd ">
6+
<FatturaElettronicaHeader>
7+
<DatiTrasmissione>
8+
<IdTrasmittente>
9+
<IdPaese>IT</IdPaese>
10+
<IdCodice>12345670017</IdCodice>
11+
</IdTrasmittente>
12+
<ProgressivoInvio>00001</ProgressivoInvio>
13+
<FormatoTrasmissione>FPA12</FormatoTrasmissione>
14+
<CodiceDestinatario>AAAAAA</CodiceDestinatario>
15+
</DatiTrasmissione>
16+
<CedentePrestatore>
17+
<DatiAnagrafici>
18+
<IdFiscaleIVA>
19+
<IdPaese>IT</IdPaese>
20+
<IdCodice>01234567890</IdCodice>
21+
</IdFiscaleIVA>
22+
<Anagrafica>
23+
<Denominazione>ALPHA SRL</Denominazione>
24+
</Anagrafica>
25+
<RegimeFiscale>RF01</RegimeFiscale>
26+
</DatiAnagrafici>
27+
<Sede>
28+
<Indirizzo>VIALE ROMA 543</Indirizzo>
29+
<CAP>07100</CAP>
30+
<Comune>SASSARI</Comune>
31+
<Provincia>SS</Provincia>
32+
<Nazione>IT</Nazione>
33+
</Sede>
34+
</CedentePrestatore>
35+
<CessionarioCommittente>
36+
<DatiAnagrafici>
37+
<CodiceFiscale>09876543210</CodiceFiscale>
38+
<Anagrafica>
39+
<Denominazione>AMMINISTRAZIONE BETA</Denominazione>
40+
</Anagrafica>
41+
</DatiAnagrafici>
42+
<Sede>
43+
<Indirizzo>VIA TORINO 38-B</Indirizzo>
44+
<CAP>00145</CAP>
45+
<Comune>ROMA</Comune>
46+
<Provincia>RM</Provincia>
47+
<Nazione>IT</Nazione>
48+
</Sede>
49+
</CessionarioCommittente>
50+
</FatturaElettronicaHeader>
51+
<FatturaElettronicaBody>
52+
<DatiGenerali>
53+
<DatiGeneraliDocumento>
54+
<TipoDocumento>TD01</TipoDocumento>
55+
<Divisa>EUR</Divisa>
56+
<Data>2017-01-13</Data>
57+
<Numero>123</Numero>
58+
<Causale>LA FATTURA FA RIFERIMENTO AD UNA OPERAZIONE AAAA BBBBBBBBBBBBBBBBBB CCC DDDDDDDDDDDDDDD E FFFFFFFFFFFFFFFFFFFF GGGGGGGGGG HHHHHHH II LLLLLLLLLLLLLLLLL MMM NNNNN OO PPPPPPPPPPP QQQQ RRRR SSSSSSSSSSSSSS</Causale>
59+
<Causale>SEGUE DESCRIZIONE CAUSALE NEL CASO IN CUI NON SIANO STATI SUFFICIENTI 200 CARATTERI AAAAAAAAAAA BBBBBBBBBBBBBBBBB</Causale>
60+
</DatiGeneraliDocumento>
61+
<DatiOrdineAcquisto>
62+
<RiferimentoNumeroLinea>1</RiferimentoNumeroLinea>
63+
<IdDocumento>66685</IdDocumento>
64+
<NumItem>1</NumItem>
65+
<CodiceCUP>123abc</CodiceCUP>
66+
<CodiceCIG>456def</CodiceCIG>
67+
</DatiOrdineAcquisto>
68+
<DatiContratto>
69+
<RiferimentoNumeroLinea>1</RiferimentoNumeroLinea>
70+
<IdDocumento>123</IdDocumento>
71+
<Data>2016-09-01</Data>
72+
<NumItem>5</NumItem>
73+
<CodiceCUP>123abc</CodiceCUP>
74+
<CodiceCIG>456def</CodiceCIG>
75+
</DatiContratto>
76+
<DatiConvenzione>
77+
<RiferimentoNumeroLinea>1</RiferimentoNumeroLinea>
78+
<IdDocumento>456</IdDocumento>
79+
<NumItem>5</NumItem>
80+
<CodiceCUP>123abc</CodiceCUP>
81+
<CodiceCIG>456def</CodiceCIG>
82+
</DatiConvenzione>
83+
<DatiRicezione>
84+
<RiferimentoNumeroLinea>1</RiferimentoNumeroLinea>
85+
<IdDocumento>789</IdDocumento>
86+
<NumItem>5</NumItem>
87+
<CodiceCUP>123abc</CodiceCUP>
88+
<CodiceCIG>456def</CodiceCIG>
89+
</DatiRicezione>
90+
<DatiTrasporto>
91+
<DatiAnagraficiVettore>
92+
<IdFiscaleIVA>
93+
<IdPaese>IT</IdPaese>
94+
<IdCodice>24681012141</IdCodice>
95+
</IdFiscaleIVA>
96+
<Anagrafica>
97+
<Denominazione>Trasporto spa</Denominazione>
98+
</Anagrafica>
99+
</DatiAnagraficiVettore>
100+
<DataOraConsegna>2017-01-10T16:46:12.000+02:00</DataOraConsegna>
101+
</DatiTrasporto>
102+
</DatiGenerali>
103+
<DatiBeniServizi>
104+
<DettaglioLinee>
105+
<NumeroLinea>1</NumeroLinea>
106+
<Descrizione>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>
107+
<Quantita>5.00</Quantita>
108+
<PrezzoUnitario>1.00</PrezzoUnitario>
109+
<PrezzoTotale>5.00</PrezzoTotale>
110+
<AliquotaIVA>22.00</AliquotaIVA>
111+
</DettaglioLinee>
112+
<DettaglioLinee>
113+
<NumeroLinea>2</NumeroLinea>
114+
<Descrizione>FORNITURE VARIE PER UFFICIO</Descrizione>
115+
<Quantita>10.00</Quantita>
116+
<PrezzoUnitario>2.00</PrezzoUnitario>
117+
<PrezzoTotale>20.00</PrezzoTotale>
118+
<AliquotaIVA>22.00</AliquotaIVA>
119+
</DettaglioLinee>
120+
<DatiRiepilogo>
121+
<AliquotaIVA>22.00</AliquotaIVA>
122+
<ImponibileImporto>25.00</ImponibileImporto>
123+
<Imposta>5.50</Imposta>
124+
<EsigibilitaIVA>D</EsigibilitaIVA>
125+
</DatiRiepilogo>
126+
</DatiBeniServizi>
127+
<DatiPagamento>
128+
<CondizioniPagamento>TP01</CondizioniPagamento>
129+
<DettaglioPagamento>
130+
<ModalitaPagamento>MP01</ModalitaPagamento>
131+
<DataScadenzaPagamento>2017-02-30</DataScadenzaPagamento>
132+
<ImportoPagamento>30.50</ImportoPagamento>
133+
</DettaglioPagamento>
134+
</DatiPagamento>
135+
</FatturaElettronicaBody>
136+
</p:FatturaElettronica>

0 commit comments

Comments
 (0)