Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/nicogis/fatturazioneelettronica
Fatturazione Elettronica verso la Pubblica Amministrazione e privati
https://github.com/nicogis/fatturazioneelettronica
c-sharp csharp fattura fattura-elettronica fatturazione-elettronica fatture fatture-elettroniche
Last synced: 22 days ago
JSON representation
Fatturazione Elettronica verso la Pubblica Amministrazione e privati
- Host: GitHub
- URL: https://github.com/nicogis/fatturazioneelettronica
- Owner: nicogis
- License: lgpl-3.0
- Created: 2016-03-01T10:40:18.000Z (almost 9 years ago)
- Default Branch: master
- Last Pushed: 2024-01-25T18:21:24.000Z (12 months ago)
- Last Synced: 2024-12-06T17:34:25.498Z (29 days ago)
- Topics: c-sharp, csharp, fattura, fattura-elettronica, fatturazione-elettronica, fatture, fatture-elettroniche
- Language: C#
- Homepage: https://nicogis.github.io/FatturazioneElettronica
- Size: 255 KB
- Stars: 3
- Watchers: 2
- Forks: 3
- Open Issues: 0
-
Metadata Files:
- Readme: Readme.md
- License: LICENSE
Awesome Lists containing this project
README
## Fatturazione elettronica verso la Pubblica Amministrazione e privati
### Descrizione
La libreria è stata sviluppata in c# in base alla documentazione fornita al seguente link [Documentazione Fattura PA](https://www.fatturapa.gov.it/it/norme-e-regole/documentazione-fattura-elettronica/formato-fatturapa/)La libreria è completa di tutti i type per creare una fattura completa con le specifiche [v. 1.3.2](https://www.fatturapa.gov.it/export/documenti/Specifiche_tecniche_del_formato_FatturaPA_V1.3.2.pdf) in base alle proprie esigenze
Possono essere create fatture con schema 1.0, 1.1, 1.2, 1.2.1, 1.2.2
La documentazione della versione 1.2.2 è valida dal 1 ottobre 2022 mentre la documentazione 1.2.1 è valida fino al 1 ottobre 2022
La libreria non ha un metodo per la convalida della fattura
Sono presenti i seguenti metodi:
- *TryValidateXML* per validare la fattura con lo schema xsd
- *CreateHTML* per generare il file HTML con stile di default o personalizzato
- *CreateXML* per generare il file XML
- *CreateInvoice* per generare l'oggetto fattura da file XML o stream
- *GetProgressivoFile*
```csharp
// codifica in base36 per 5 caratteri (range 1..60466176 (ProgressivoFile.GetNumeroProgressivo("ZZZZZ")))
ProgressivoFile progressivoFile = new ProgressivoFile(1);
if (progressivoFile.IsValid())
{
string nomeFile = $"IT01234567890_{progressivoFile.GetProgressivoFile()}";
}
```- *GetVersion* per restituire l'attributo versione dell'xml da file o stream
### Librerie facoltative di supporto
- *Fatturazione elettronica semplificata* al [seguente link](https://github.com/nicogis/FatturazioneElettronicaSemplificata)
- *Utilities per la fatturazione elettronica* al [seguente link](https://github.com/nicogis/FatturazioneElettronica-Extensions)
- *Client per web services Indice delle Pubbliche Amministrazioni* al [seguente link](https://github.com/nicogis/FatturazioneElettronica-IPA)### Requisiti
E' richiesto il framework Microsoft .NET 4.6.2
### Esempio di creazione fattura
![References](images/References.PNG)
```csharp
#define v122
#define allegati//-----------------------------------------------------------------------
//
// Copyright (c) Studio A&T s.r.l. All rights reserved.
//
// Nicogis
//-----------------------------------------------------------------------#if v10
using FatturazioneElettronica.Type.V_1_0;
#elif v11
using FatturazioneElettronica.Type.V_1_1;
#elif v12
using FatturazioneElettronica.Type.V_1_2;
#elif v121
using FatturazioneElettronica.Type.V_1_2_1;
#elif v122
using FatturazioneElettronica.Type.V_1_2_2;
#endifusing System;
using System.Collections.Generic;public class Program
{
public static void Main(string[] args)
{FatturaElettronicaType fatturaElettronica = new FatturaElettronicaType();
#if v10
fatturaElettronica.versione = VersioneSchemaType.Item10;
#elif v11
fatturaElettronica.versione = VersioneSchemaType.Item11;
#elif v12 || v121 || v122
fatturaElettronica.versione = FormatoTrasmissioneType.FPR12;
#endifFatturaElettronicaHeaderType fatturaElettronicaHeaderType = new FatturaElettronicaHeaderType();
DatiTrasmissioneType datiTrasmissioneType = new DatiTrasmissioneType();
IdFiscaleType idFiscaleTypeTrasmissione = new IdFiscaleType();
idFiscaleTypeTrasmissione.IdCodice = "01234567890";
idFiscaleTypeTrasmissione.IdPaese = "IT";datiTrasmissioneType.IdTrasmittente = idFiscaleTypeTrasmissione;
datiTrasmissioneType.ProgressivoInvio = "00001";#if v10
datiTrasmissioneType.FormatoTrasmissione = FormatoTrasmissioneType.SDI10;
#elif v11
datiTrasmissioneType.FormatoTrasmissione = FormatoTrasmissioneType.SDI11;
#elif v12 || v121 || v122
datiTrasmissioneType.FormatoTrasmissione = FormatoTrasmissioneType.FPR12;
#endifdatiTrasmissioneType.CodiceDestinatario = "AAAAAA";
fatturaElettronicaHeaderType.DatiTrasmissione = datiTrasmissioneType;
CedentePrestatoreType cedentePrestatoreType = new CedentePrestatoreType();
DatiAnagraficiCedenteType datiAnagraficiCedenteType = new DatiAnagraficiCedenteType();
IdFiscaleType idFiscaleTypeCedente = new IdFiscaleType();
idFiscaleTypeCedente.IdPaese = "IT";
idFiscaleTypeCedente.IdCodice = "01234567890";datiAnagraficiCedenteType.IdFiscaleIVA = idFiscaleTypeCedente;
AnagraficaType anagraficaType = new AnagraficaType();
anagraficaType.Items = new string[] { "ALPHA SRL" };
#if v122
anagraficaType.ItemsElementName = new ItemsChoiceType3[] { ItemsChoiceType3.Denominazione };
#else
anagraficaType.ItemsElementName = new ItemsChoiceType[] { ItemsChoiceType.Denominazione };
#endif
datiAnagraficiCedenteType.Anagrafica = anagraficaType;cedentePrestatoreType.DatiAnagrafici = datiAnagraficiCedenteType;
#if v10
datiAnagraficiCedenteType.RegimeFiscale = RegimeFiscaleType.RF18;
#else
datiAnagraficiCedenteType.RegimeFiscale = RegimeFiscaleType.RF19;
#endifIndirizzoType indirizzoType = new IndirizzoType();
indirizzoType.Indirizzo = "VIALE ROMA";
indirizzoType.NumeroCivico = "543";
indirizzoType.CAP = "07100";
indirizzoType.Comune = "SASSARI";
indirizzoType.Provincia = "SS";
indirizzoType.Nazione = "IT";
cedentePrestatoreType.Sede = indirizzoType;fatturaElettronicaHeaderType.CedentePrestatore = cedentePrestatoreType;
CessionarioCommittenteType cessionarioCommittenteType = new CessionarioCommittenteType();
DatiAnagraficiCessionarioType datiAnagraficiCessionarioType = new DatiAnagraficiCessionarioType();
AnagraficaType anagraficaTypeCommittente = new AnagraficaType();
anagraficaTypeCommittente.Items = new string[] { "AMMINISTRAZIONE BETA" };
anagraficaTypeCommittente.ItemsElementName = new ItemsChoiceType[] { ItemsChoiceType.Denominazione };datiAnagraficiCessionarioType.Anagrafica = anagraficaTypeCommittente;
datiAnagraficiCessionarioType.CodiceFiscale = "09876543210";
cessionarioCommittenteType.DatiAnagrafici = datiAnagraficiCessionarioType;IndirizzoType indirizzoTypeCommittente = new IndirizzoType();
indirizzoTypeCommittente.Indirizzo = "VIA TORINO 38-B";
indirizzoTypeCommittente.CAP = "00145";
indirizzoTypeCommittente.Comune = "ROMA";
indirizzoTypeCommittente.Provincia = "RM";
indirizzoTypeCommittente.Nazione = "IT";cessionarioCommittenteType.Sede = indirizzoTypeCommittente;
fatturaElettronicaHeaderType.CessionarioCommittente = cessionarioCommittenteType;
fatturaElettronica.FatturaElettronicaHeader = fatturaElettronicaHeaderType;FatturaElettronicaBodyType fatturaElettronicaBodyType = new FatturaElettronicaBodyType();
DatiGeneraliType datiGeneraliType = new DatiGeneraliType();
DatiGeneraliDocumentoType datiGeneraliDocumentoType = new DatiGeneraliDocumentoType();datiGeneraliDocumentoType.TipoDocumento = TipoDocumentoType.TD01;
datiGeneraliDocumentoType.Divisa = "EUR";
datiGeneraliDocumentoType.Data = new DateTime(2017,1,18);
datiGeneraliDocumentoType.Numero = "123";#if v10
datiGeneraliDocumentoType.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";
#else
datiGeneraliDocumentoType.Causale = new string[] {
"LA FATTURA FA RIFERIMENTO AD UNA OPERAZIONE AAAA BBBBBBBBBBBBBBBBBB CCC DDDDDDDDDDDDDDD E FFFFFFFFFFFFFFFFFFFF GGGGGGGGGG HHHHHHH II LLLLLLLLLLLLLLLLL MMM NNNNN OO PPPPPPPPPPP QQQQ RRRR SSSSSSSSSSSSSS",
"SEGUE DESCRIZIONE CAUSALE NEL CASO IN CUI NON SIANO STATI SUFFICIENTI 200 CARATTERI AAAAAAAAAAA BBBBBBBBBBBBBBBBB"
};
#endifdatiGeneraliType.DatiGeneraliDocumento = datiGeneraliDocumentoType;
fatturaElettronicaBodyType.DatiGenerali = datiGeneraliType;
DatiDocumentiCorrelatiType datiOrdineAcquistoType = new DatiDocumentiCorrelatiType();
datiOrdineAcquistoType.RiferimentoNumeroLinea = new string[] { "1" };
datiOrdineAcquistoType.IdDocumento = "66685";
datiOrdineAcquistoType.NumItem = "1";
datiOrdineAcquistoType.CodiceCUP = "123abc";
datiOrdineAcquistoType.CodiceCIG = "456def";
datiGeneraliType.DatiOrdineAcquisto = new DatiDocumentiCorrelatiType[] { datiOrdineAcquistoType };DatiDocumentiCorrelatiType datiContrattoType = new DatiDocumentiCorrelatiType();
datiContrattoType.RiferimentoNumeroLinea = new string[] { "1" };
datiContrattoType.IdDocumento = "123";
datiContrattoType.NumItem = "5";
datiContrattoType.CodiceCUP = "123abc";
datiContrattoType.CodiceCIG = "456def";
datiGeneraliType.DatiContratto = new DatiDocumentiCorrelatiType[] { datiContrattoType };DatiDocumentiCorrelatiType datiConvenzioneType = new DatiDocumentiCorrelatiType();
datiConvenzioneType.RiferimentoNumeroLinea = new string[] { "1" };
datiConvenzioneType.IdDocumento = "456";
datiConvenzioneType.NumItem = "5";
datiConvenzioneType.CodiceCUP = "123abc";
datiConvenzioneType.CodiceCIG = "456def";
datiGeneraliType.DatiConvenzione = new DatiDocumentiCorrelatiType[] { datiConvenzioneType };DatiDocumentiCorrelatiType datiRicezioneType = new DatiDocumentiCorrelatiType();
datiRicezioneType.RiferimentoNumeroLinea = new string[] { "1" };
datiRicezioneType.IdDocumento = "789";
datiRicezioneType.NumItem = "5";
datiRicezioneType.CodiceCUP = "123abc";
datiRicezioneType.CodiceCIG = "456def";
datiGeneraliType.DatiRicezione = new DatiDocumentiCorrelatiType[] { datiRicezioneType };DatiTrasportoType datiTrasportoType = new DatiTrasportoType();
DatiAnagraficiVettoreType datiAnagraficiVettore = new DatiAnagraficiVettoreType();
IdFiscaleType idFiscaleType = new IdFiscaleType();
idFiscaleType.IdPaese = "IT";
idFiscaleType.IdCodice = "4681012141";
datiAnagraficiVettore.IdFiscaleIVA = idFiscaleType;
AnagraficaType anagraficaTypeDT = new AnagraficaType();
anagraficaTypeDT.Items = new string[] { "Trasporto spa" };
#if v122
anagraficaTypeDT.ItemsElementName = new ItemsChoiceType3[] { ItemsChoiceType3.Denominazione };
#else
anagraficaTypeDT.ItemsElementName = new ItemsChoiceType[] { ItemsChoiceType.Denominazione};
#endif
datiAnagraficiVettore.Anagrafica = anagraficaTypeDT;
datiTrasportoType.DatiAnagraficiVettore = datiAnagraficiVettore;
datiTrasportoType.DataOraConsegnaSpecified = true;
datiTrasportoType.DataOraConsegna = new DateTime(2017, 01, 16, 16, 46, 12);
datiGeneraliType.DatiTrasporto = datiTrasportoType;DatiBeniServiziType datiBeniServiziType = new DatiBeniServiziType();
DettaglioLineeType dettaglioLineeType = new DettaglioLineeType();
dettaglioLineeType.NumeroLinea = "1";
dettaglioLineeType.Descrizione = "DESCRIZIONE DELLA FORNITURA";
dettaglioLineeType.Quantita = 5.00M;
dettaglioLineeType.PrezzoUnitario = 1.00M;
dettaglioLineeType.PrezzoTotale = 5.00M;
dettaglioLineeType.AliquotaIVA = 22.00M;
datiBeniServiziType.DettaglioLinee = new DettaglioLineeType[] { dettaglioLineeType };DatiRiepilogoType datiRiepilogoType = new DatiRiepilogoType();
datiRiepilogoType.AliquotaIVA = 22.00M;
datiRiepilogoType.ImponibileImporto = 5.00M;
datiRiepilogoType.Imposta = 1.10M;
datiRiepilogoType.EsigibilitaIVASpecified = true;
datiRiepilogoType.EsigibilitaIVA = EsigibilitaIVAType.I;datiBeniServiziType.DatiRiepilogo = new DatiRiepilogoType[] { datiRiepilogoType };
fatturaElettronicaBodyType.DatiBeniServizi = datiBeniServiziType;DatiPagamentoType datiPagamentoType = new DatiPagamentoType();
datiPagamentoType.CondizioniPagamento = CondizioniPagamentoType.TP01;
DettaglioPagamentoType dettaglioPagamentoType = new DettaglioPagamentoType();
dettaglioPagamentoType.ModalitaPagamento = ModalitaPagamentoType.MP01;
dettaglioPagamentoType.DataScadenzaPagamentoSpecified = true;
dettaglioPagamentoType.DataScadenzaPagamento = new DateTime(2017, 2, 18);
dettaglioPagamentoType.ImportoPagamento = 6.10M;
datiPagamentoType.DettaglioPagamento = new DettaglioPagamentoType[] { dettaglioPagamentoType };fatturaElettronicaBodyType.DatiPagamento = new DatiPagamentoType[] { datiPagamentoType };
#if allegati
string filePathAttachment = @"c:\temp\scratch\prova.pdf";
if(File.Exists(filePathAttachment))
{
List allegatiTypes = new List();
AllegatiType allegatiType = new AllegatiType();
allegatiType.NomeAttachment = Path.ChangeExtension(Path.GetFileName(filePathAttachment), "zip");
allegatiType.AlgoritmoCompressione = "zip".ToUpperInvariant();
allegatiType.FormatoAttachment = Path.GetExtension(filePathAttachment).TrimStart('.').ToUpperInvariant();byte[] fileBytes = File.ReadAllBytes(filePathAttachment);
byte[] compressedBytes = null;//creo lo zip in memoria
using (var outStream = new MemoryStream())
{
using (var archive = new ZipArchive(outStream, ZipArchiveMode.Create, true))
{
var fileInArchive = archive.CreateEntry(filePathAttachment, CompressionLevel.Optimal);
using (var entryStream = fileInArchive.Open())
using (var fileToCompressStream = new MemoryStream(fileBytes))
{
fileToCompressStream.CopyTo(entryStream);
}
}compressedBytes = outStream.ToArray();
}allegatiType.Attachment = compressedBytes;
allegatiTypes.Add(allegatiType);fatturaElettronicaBodyType.Allegati = allegatiTypes.ToArray();
}
#endiffatturaElettronica.FatturaElettronicaBody = new FatturaElettronicaBodyType[] { fatturaElettronicaBodyType };
try
{
if (!fatturaElettronica.TryValidateXML(out List messages))
{
Console.WriteLine("Fattura non valida!");
messages.ForEach(f => Console.WriteLine(f));
}
else
{
Console.WriteLine("Fattura valida!");// crea XML fattura
fatturaElettronica.CreateXML(@"c:\temp\IT01234567890_FPA01.xml");// crea XML fattura temporanea per visualizzarla con lo stile di default
fatturaElettronica.CreateXML(@"c:\temp\preview.xml", true);
System.Diagnostics.Process.Start(@"c:\temp\preview.xml");// crea HTML fattura temporanea per visualizzarla con lo stile di default
fatturaElettronica.CreateHTML(@"c:\temp\IT01234567890_FPA01.html");
fatturaElettronica.CreateHTML(@"c:\temp\IT01234567890_FPA01.html", @"c:\temp\stilePersonalizzato.xls");
}
// crea fattura da file XML
// n.b. La versione dello schema viene automaticamente rilevata dal file.
// Se la versione è ambigua viene utilizzata la versione più recente dello schema
// Per forzare una versione ambigua utilizzare il parametro forceVersion;
// sono validi solo i valori '1.2' e '1.2.1' visto che la 1.2.2 è retrocompatibile
#if v12
if (FatturaElettronica.CreateInvoice(@"c:\temp\IT01234567890_FPA01.xml", out IFatturaElettronicaType fa, Versioni.Versione1_2))
{
FatturaElettronicaType fe = fa as FatturaElettronicaType;
string n = fe.FatturaElettronicaBody[0].DatiGenerali.DatiGeneraliDocumento.Numero;
DateTime d = fe.FatturaElettronicaBody[0].DatiGenerali.DatiGeneraliDocumento.Data;
Console.WriteLine($"Numero fattura: {n} - Data fattura: {d.ToLongDateString()}");
}
#elif v121
if (FatturaElettronica.CreateInvoice(@"c:\temp\IT01234567890_FPA01.xml", out IFatturaElettronicaType fa, Versioni.Versione1_2_1))
{
FatturaElettronicaType fe = fa as FatturaElettronicaType;
string n = fe.FatturaElettronicaBody[0].DatiGenerali.DatiGeneraliDocumento.Numero;
DateTime d = fe.FatturaElettronicaBody[0].DatiGenerali.DatiGeneraliDocumento.Data;
Console.WriteLine($"Numero fattura: {n} - Data fattura: {d.ToLongDateString()}");
}
#else
// carica da file
if (FatturaElettronica.CreateInvoice(@"c:\temp\IT01234567890_FPA01.xml", out IFatturaElettronicaType fa))
{
FatturaElettronicaType fe = fa as FatturaElettronicaType;
string n = fe.FatturaElettronicaBody[0].DatiGenerali.DatiGeneraliDocumento.Numero;
DateTime d = fe.FatturaElettronicaBody[0].DatiGenerali.DatiGeneraliDocumento.Data;
Console.WriteLine($"Numero fattura: {n} - Data fattura: {d.ToLongDateString()}");
}// carica da stream
using (FileStream f = File.OpenRead(@"c:\temp\6006173547.xml"))
{
string versione = FatturaElettronica.GetVersion(f); //attributo versione xml
f.Position = 0;
if (FatturaElettronica.CreateInvoice(f, out IFatturaElettronicaType fa))
{
FatturaElettronicaType fe = fa as FatturaElettronicaType;string n = fe.FatturaElettronicaBody[0].DatiGenerali.DatiGeneraliDocumento.Numero;
DateTime d = fe.FatturaElettronicaBody[0].DatiGenerali.DatiGeneraliDocumento.Data;
Console.WriteLine($"Numero fattura: {n} - Data fattura: {d.ToLongDateString()}");
}
}
#endif// generazione di numero univoco progressivo file
// codifica in base36 per 5 caratteri (range 1..60466176 (ProgressivoFile.GetNumeroProgressivo("ZZZZZ")))
ProgressivoFile progressivoFile = new ProgressivoFile(1);
if (progressivoFile.IsValid())
{
string nomeFile = $"IT01234567890_{progressivoFile.GetProgressivoFile()}";
}Console.ReadKey();
}
catch(Exception ex)
{
Console.WriteLine($"Errore: {ex.Message}!");
}
}
}
```
### Installazione```
PM> Install-Package StudioAT.FatturazioneElettronica -Version 1.3.2.1
```
dalla Console di Gestione Pacchetti di Visual Studio### License
Il progetto è rilasciato sotto licenza GNU Library General Public License (LGPL).