Imaginsystems


Tecniche di Programmazione - Codici Sorgenti - News Informatiche
Archivio Posts
Anno 2014

Anno 2013

Anno 2012
Statistiche
  • Views Home Page: 53.528
  • Views Posts: 404.594
  • Views Gallerie: 0
  • n° Posts: 210
  • n° Commenti: 222

C# - Come creare la Fattura Elettronica per la Pubblica Amministrazione (FatturaPA)

C# - Come creare la Fattura Elettronica per la Pubblica Amministrazione (FatturaPA)

 



Vediamo un po prima che cosa è e come è formata e poi passiamo alla creazione degli oggetti e del file XML della FatturaPA .

Cos'è la FatturaPA

La FatturaPA è una fattura elettronica ai sensi dell'articolo 21, comma 1, del DPR 633/72 ed è la sola tipologia di fattura accettata dalle Amministrazioni che, secondo le disposizioni di legge, sono tenute ad avvalersi del  Sistema di Interscambio.

La FatturaPA ha le seguenti caratteristiche:

  • il contenuto è rappresentato, in un file XML (eXtensible Markup Language), secondo il formato della FatturaPA. Questo formato è l' unico accettato dal Sistema di Interscambio.
  • l' autenticità dell' origine e l' integrità del contenuto sono garantite tramite l' apposizione della firma elettronica qualificata di chi emette la fattura,
  • la trasmissione è vincolata alla presenza del codice identificativo univoco dell'ufficio destinatario della fattura riportato nell' Indice delle Pubbliche Amministrazioni.

Per la firma del file FatturaPA consultare la sezione Firmare la FatturaPA.

Il formato della FatturaPA

Il contenuto informativo della FatturaPA prevede le informazioni da riportare obbligatoriamente in fattura in quanto rilevanti ai fini fiscali secondo la normativa vigente; in aggiunta a queste il formato prevede l’indicazione obbligatoria delle informazioni indispensabili ai fini di una corretta trasmissione della fattura al soggetto destinatario attraverso il Sistema di Interscambio.  
Per favorire l’automazione informatica del processo di fatturazione, a integrazione delle informazioni obbligatorie, il formato prevede anche la possibilità di inserire nella fattura ulteriori dati:

  • informazioni utili per la completa dematerializzazione del processo di ciclo passivo attraverso l’ integrazione del documento fattura con i sistemi gestionali e/o con i sistemi di pagamento;
  • informazioni che possono risultare di interesse per esigenze informative concordate tra Operatori economici e Amministrazioni pubbliche oppure specifiche dell’ emittente, con riferimento a particolari tipologie di beni e servizi, o di utilità per il colloquio tra le parti.

Per approfondire

File, fatture e messaggi

Il Sistema di Interscambio distingue tre tipi di file:

  • file FatturaPA: file XML firmato digitalmente conforme alle specifiche del formato della FatturaPA. Può contenere:
    • una fattura singola (un solo corpo fattura)
    • un lotto di fatture (più corpi fattura con la stessa intestazione).

    Per la firma del file FatturaPA consultare la sezione Firmare la FatturaPA.

  • file archivio: file compresso (esclusivamente nel formato zip) contenente uno o più file FatturaPA.

    Il sistema elabora l’archivio controllando e inoltrando al destinatario i singoli file FatturaPA contenuti al suo interno. Di fatto i file FatturaPA vengono trattati come se venissero trasmessi singolarmente.

    Si precisa che il file archivio non deve essere firmato ma devono essere firmati, invece,tutti i file FatturaPA al suo interno.

  • file messaggio: file XML conforme a uno schema (xml schema) descritto dal file: MessaggiTypes_v1.0.xsd scaricabile nella sezioneDocumentazione Sistema di Interscambio di questo sito.

    Un file messaggio può essere:

    • una notifica di scarto: messaggio che SdI invia al trasmittente nel caso in cui il file trasmesso (file FatturaPA o file archivio) non abbia superato i controlli previsti;
    • un file dei metadati: file che SdI invia al destinatario, insieme al file FatturaPA;
    • una ricevuta di consegna: messaggio che SdI invia al trasmittente per certificare l’avvenuta consegna al destinatario del file FatturaPA;
    • una notifica di mancata consegna: messaggio che il SdI invia al trasmittente per segnalare la temporanea impossibilità di recapitare al destinatario il file FatturaPA;
    • una notifica di esito committente: messaggio facoltativo che il destinatario può inviare al SdI per segnalare l’accettazione o il rifiuto della fattura ricevuta; la segnalazione può pervenire al SdI entro il termine di 15 giorni;
    • una notifica di esito: messaggio con il quale il SdI inoltra al trasmittente la notifica di esito committente eventualmente ricevuta dal destinatario della fattura;
    • uno scarto esito committente: messaggio che il SdI invia al destinatario per segnalare un’eventuale situazione di non ammissibilità o non conformità della notifica di esito committente;
    • una notifica di decorrenza termini: messaggio che il SdI invia sia al trasmittente sia al destinatario nel caso in cui non abbia ricevuto notifica di esito committente entro il termine di 15 giorni dalla data della ricevuta di consegna o dalla data della notifica di mancata consegna ma solo se questa sia seguita da una ricevuta di consegna. Con questa notifica il SdI comunica al destinatario l’impossibilità di inviare, da quel momento in poi, notifica di esito committente e al trasmittente l’impossibilità di ricevere notifica di esito;
    • una attestazione di avvenuta trasmissione della fattura con impossibilità di recapito: messaggio che il SdI invia al trasmittente nei casi di impossibilità di recapito del file all’amministrazione destinataria per cause non imputabili al trasmittente (amministrazione non individuabile all’interno dell’Indice delle Pubbliche Amministrazioni  oppure problemi di natura tecnica sul canale di trasmissione);
  • Il Sistema di Interscambio attribuisce a ogni tipologia di file messaggio una nomenclatura differente. Per maggiori approfondimenti sulla nomenclatura dei file messaggio consultare l'Allegato B-1 del documento Specifiche tecniche relative al Sistema di Interscambio disponibile nella sezione Documentazione Sistema di Interscambio di questo sito.

    Tutti i messaggi prodotti ed inviati dal Sistema di Interscambio, a eccezione del file dei metadati, vengono firmati elettronicamente mediante una firma elettronica avanzata di tipo XAdES-Bes.  

    La notifica di esito committente, unica notifica inviata dal destinatario al SdI, prevede la possibilità di essere firmata elettronicamente, sempre in modalità XAdES-Bes, in via facoltativa. Per maggiori approfondimenti sulla notifica di esito committente consultare la sezione Esplicitare l'esito per la FatturaPA.

    Di seguito una rappresentazione del flusso dei messaggi:

    flusso messaggi

Flusso semplificato

Esiste un flusso semplificato che può essere adottato da coloro che interagiscono con il Sistema di interscambio in veste sia di trasmittente che di ricevente tramite il medesimo canale trasmissivo; in questo caso il flusso dei messaggi subisce delle variazioni per consentire una maggiore efficienza nel processo di trasmissione delle fatture elettroniche e delle relative notifiche.

In particolare:

  • il file FatturaPA,
  • la notifica di esito al trasmittente

non vengono recapitati poiché sono già a disposizione di colui che li trasmette.

L'iter del processo prosegue con le tradizionali fasi del flusso come se i file fossero stati correttamente trasmessi.

L'opzione di “Flusso semplificato” è associata al canale accreditato per la trasmissione/ricezione dei file; pertanto gli Intermediari che intendono aderire al flusso semplificato, possono dichiararlo all'atto dell'accreditamento del canale nella sezione Accreditare il canale di questo sito.

NB: l'opzione “Flusso semplificato” è disponibile per i canali trasmissivi Web-service, Porta di Dominio e FTP ma non per i canali PEC e invio web in quanto quest'ultimi due non necessitano di un accreditamento preventivo presso il Sistema di Interscambio.

Di seguito una rappresentazione del "Flusso semplificato":

flusso messaggi
[Fonte http://www.fatturapa.gov.it/]

Esempio FatturaPA nel formato XML

Disequito troviamo un esempio preso sempre dal sito http://www.fatturapa.gov.it/  :

<?xml version="1.0" encoding="UTF-8"?>
<p:FatturaElettronica xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xmlns:p="http://www.fatturapa.gov.it/sdi/fatturapa/v1.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" versione="1.0">
<FatturaElettronicaHeader>
<DatiTrasmissione>
<IdTrasmittente>
<IdPaese>IT</IdPaese>
<IdCodice>01234567890</IdCodice>
</IdTrasmittente>
<ProgressivoInvio>00001</ProgressivoInvio>
<FormatoTrasmissione>SDI10</FormatoTrasmissione>
<CodiceDestinatario>AAAAAA</CodiceDestinatario>
<ContattiTrasmittente>
<Telefono>060601</Telefono>
<Email>prova@mail.it</Email>
</ContattiTrasmittente>
</DatiTrasmissione>
<CedentePrestatore>
<DatiAnagrafici>
<IdFiscaleIVA>
<IdPaese>IT</IdPaese>
<IdCodice>01234567890</IdCodice>
</IdFiscaleIVA>
<Anagrafica>
<Denominazione>Societa' alpha S.r.l.</Denominazione>
</Anagrafica>
<RegimeFiscale>RF01</RegimeFiscale>
</DatiAnagrafici>
<Sede>
<Indirizzo>Via Roma</Indirizzo>
<CAP>00166</CAP>
<Comune>Roma</Comune>
<Provincia>RM</Provincia>
<Nazione>IT</Nazione>
</Sede>
<StabileOrganizzazione>
<Indirizzo>Piazza Garibaldi</Indirizzo>
<CAP>00100</CAP>
<Comune>Roma</Comune>
<Provincia>RM</Provincia>
<Nazione>IT</Nazione>
</StabileOrganizzazione>
</CedentePrestatore>
<CessionarioCommittente>
<DatiAnagrafici>
<CodiceFiscale>09876543210</CodiceFiscale>
<Anagrafica>
<Denominazione>Societa beta' S.r.l.</Denominazione>
</Anagrafica>
</DatiAnagrafici>
<Sede>
<Indirizzo>Via Milano</Indirizzo>
<CAP>00100</CAP>
<Comune>Roma</Comune>
<Provincia>RM</Provincia>
<Nazione>IT</Nazione>
</Sede>
</CessionarioCommittente>
<SoggettoEmittente>CC</SoggettoEmittente>
</FatturaElettronicaHeader>
<FatturaElettronicaBody>
<DatiGenerali>
<DatiGeneraliDocumento>
<TipoDocumento>TD01</TipoDocumento>
<Divisa>EUR</Divisa>
<Data>2012-11-27</Data>
<Numero>00001</Numero>
<Art73>SI</Art73>
</DatiGeneraliDocumento>
<DatiOrdineAcquisto>
<RiferimentoNumeroLinea>1</RiferimentoNumeroLinea>
<IdDocumento>123</IdDocumento>
<CodiceCUP>123abc</CodiceCUP>
<CodiceCIG>456def</CodiceCIG>
</DatiOrdineAcquisto>
<DatiContratto>
<RiferimentoNumeroLinea>1</RiferimentoNumeroLinea>
<IdDocumento>123</IdDocumento>
<Data>2012-09-01</Data>
<NumItem>5</NumItem>
<CodiceCUP>123abc</CodiceCUP>
<CodiceCIG>456def</CodiceCIG>
</DatiContratto>
<DatiConvenzione>
<RiferimentoNumeroLinea>1</RiferimentoNumeroLinea>
<IdDocumento>123</IdDocumento>
<Data>2012-09-01</Data>
<NumItem>5</NumItem>
<CodiceCUP>123abc</CodiceCUP>
<CodiceCIG>456def</CodiceCIG>
</DatiConvenzione>
<DatiRicezione>
<RiferimentoNumeroLinea>1</RiferimentoNumeroLinea>
<IdDocumento>123</IdDocumento>
<Data>2012-09-01</Data>
<NumItem>5</NumItem>
<CodiceCUP>123abc</CodiceCUP>
<CodiceCIG>456def</CodiceCIG>
</DatiRicezione>
<DatiTrasporto>
<DatiAnagraficiVettore>
<IdFiscaleIVA>
<IdPaese>IT</IdPaese>
<IdCodice>24681012141</IdCodice>
</IdFiscaleIVA>
<Anagrafica>
<Denominazione>Trasporto spa</Denominazione>
</Anagrafica>
</DatiAnagraficiVettore>
<DataOraConsegna>2012-10-22T16:46:12.000+02:00</DataOraConsegna>
</DatiTrasporto>
</DatiGenerali>
<DatiBeniServizi>
<DettaglioLinee>
<NumeroLinea>1</NumeroLinea>
<Descrizione>BADGES MAGNETICI - PVC laminato bianco</Descrizione>
<PrezzoUnitario>3.00000000</PrezzoUnitario>
<PrezzoTotale>3.00</PrezzoTotale>
<AliquotaIVA>21.00</AliquotaIVA>
</DettaglioLinee>
<DatiRiepilogo>
<AliquotaIVA>21.00</AliquotaIVA>
<ImponibileImporto>3.00</ImponibileImporto>
<Imposta>0.63</Imposta>
</DatiRiepilogo>
</DatiBeniServizi>
<DatiPagamento>
<CondizioniPagamento>TP01</CondizioniPagamento>
<DettaglioPagamento>
<ModalitaPagamento>MP01</ModalitaPagamento>
<DataScadenzaPagamento>2012-12-31</DataScadenzaPagamento>
<ImportoPagamento>3.63</ImportoPagamento>
</DettaglioPagamento>
</DatiPagamento>
</FatturaElettronicaBody>
</p:FatturaElettronica>

Per la verifica della correttezza della FatturaPA ...

Per verificare la correttezza della fattura , utilizzeremo uno strumento messo a disposizione dallo stato e lo troviamo al seguente indirizzo https://sdi.fatturapa.gov.it/SdI2FatturaPAWeb/ControllaFatturaAction.do

Studiato il file XML passiamo alla creazione degli oggetti che ci serviranno ...


FatturaElettronica
 - FatturaElettronicaHeader
 - FatturaElettronicaBody

Per creare i file XML ci sono tante maniere io ho deciso per comodità di utilizzare la serializzazione.

Condivido uno stralcio della classe WriteXML() dove potete vedere che operazioni faccio per compilare soltanto la prima parte del FatturaPA e quindi solo l'oggetto FatturaEllettronicaHeader

CODICE VISUAL STUDIO 2013 - C#

   using System.Xml;

   using System.Xml.Serialization;

   public static void WriteXML()

        {

            FatturaElettronica nodoPrincipale = new FatturaElettronica();


            FatturaElettronicaHeader overview = new FatturaElettronicaHeader();

            DatiTrasmissione datiTrasmissione = new DatiTrasmissione();

            IdTrasmittente idTrasmittente = new IdTrasmittente();

            idTrasmittente.IdCodice = "IT";

            idTrasmittente.IdPaese = "01234567890";

            datiTrasmissione.IdTrasmittente = idTrasmittente;

            datiTrasmissione.ProgressivoInvio = "00001";

            datiTrasmissione.FormatoTrasmissione = "SDI10";

            datiTrasmissione.CodiceDestinatario = "AAAAAA";

            ContattiTrasmittente contattiTrasmittente = new ContattiTrasmittente();

            contattiTrasmittente.Telefono = "060601";

            contattiTrasmittente.Email = "prova@mail.it";

            datiTrasmissione.ContattiTrasmittente = contattiTrasmittente;



            /*Scrivi XML*/

            overview.DatiTrasmissione = datiTrasmissione;



            CedentePrestatore cedentePrestatore = new CedentePrestatore();

            DatiAnagrafici datiAnagrafici = new DatiAnagrafici();

            IdFiscaleIVA idFiscaleIVA = new IdFiscaleIVA();

            idFiscaleIVA.IdPaese = "IT";

            idFiscaleIVA.IdCodice = "01234567890";

            datiAnagrafici.IdFiscaleIVA = idFiscaleIVA;

            Anagrafica anagrafica = new Anagrafica();

            anagrafica.Denominazione = "Societa' alpha S.r.l.";

            datiAnagrafici.Anagrafica = anagrafica;

            datiAnagrafici.RegimeFiscale = "RF01";

            cedentePrestatore.DatiAnagrafici = datiAnagrafici;

            Sede sede = new Sede();

            sede.Indirizzo = "Via Roma";

            sede.CAP = "00166";

            sede.Comune = "Roma";

            sede.Provincia = "RM";

            sede.Nazione = "IT";

            cedentePrestatore.Sede = sede;

            StabileOrganizzazione stabileOrganizzazione = new StabileOrganizzazione();

            stabileOrganizzazione.Indirizzo = "Piazza Garibaldi";

            stabileOrganizzazione.CAP = "00100";

            stabileOrganizzazione.Comune = "Roma";

            stabileOrganizzazione.Provincia = "RM";

            stabileOrganizzazione.Nazione = "IT";

            cedentePrestatore.StabileOrganizzazione = stabileOrganizzazione;


            /*Scrivi XML*/

            overview.CedentePrestatore = cedentePrestatore;


            CessionarioCommittente cessionarioCommittente = new CessionarioCommittente();

            DatiAnagrafici datiAnagraficiCommittente = new DatiAnagrafici();

            datiAnagraficiCommittente.CodiceFiscale = "09876543210";

            Anagrafica anagraficaCommittente = new Anagrafica();

            anagraficaCommittente.Denominazione = "Societa beta' S.r.l.";

            datiAnagraficiCommittente.Anagrafica = anagraficaCommittente;


            cessionarioCommittente.DatiAnagrafici = datiAnagraficiCommittente;


            Sede sedeCommittente = new Sede();

            sedeCommittente.Indirizzo = "Via Milano";

            sedeCommittente.CAP = "00100";

            sedeCommittente.Comune = "Roma";

            sedeCommittente.Provincia = "RM";

            sedeCommittente.Nazione = "IT";


            cessionarioCommittente.Sede = sedeCommittente;


            /*Scrivi XML*/

            overview.CessionarioCommittente = cessionarioCommittente;


            /*Scrivi XML*/

            overview.SoggettoEmittente = "CC";


            /*Scrivi XML nodo FatturaElettronicaHeader */

            nodoPrincipale.FatturaElettronicaHeader = overview;


            XmlAttributeOverrides overrides = new XmlAttributeOverrides();

            overrides.Add(typeof(FatturaElettronica), new XmlAttributes { XmlRoot = new XmlRootAttribute { Namespace = "http://www.fatturapa.gov.it/sdi/fatturapa/v1.0" } });

            // in case you want to remove prefix from members

            XmlAttributes emptyNsAttribute = new XmlAttributes();

            emptyNsAttribute.XmlElements.Add(new XmlElementAttribute { Namespace = "" });

            overrides.Add(typeof(FatturaElettronica), "FatturaElettronicaHeader", emptyNsAttribute);

            // if you actual library type contains more members, then you have to list all of them

            XmlSerializer ser = new XmlSerializer(nodoPrincipale.GetType(), overrides);

            XmlSerializerNamespaces ns = new XmlSerializerNamespaces();

            ns.Add("ds", "http://www.w3.org/2000/09/xmldsig#");

            ns.Add("p", "http://www.fatturapa.gov.it/sdi/fatturapa/v1.0");

            ns.Add("xis", "http://www.w3.org/2001/XMLSchema-instance");

            var path = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) + "//DemoFatturaPA.xml";

            System.IO.FileStream file = System.IO.File.Create(path);

            ser.Serialize(file, nodoPrincipale, ns);

            file.Close();

            System.IO.File.Copy(path, "DemoFatturaPA.xml");

        }



Tutte le classi che vi servono per creare il file XML FatturaPA ...


Il progetto è mantenuto e aggiornato al seguente link http://fatturaelettronica.imaginsystems.it/ 


By ImaginSystems & Queen Gin   
Categoria: C#
giovedì, 22 mag 2014 Ore. 14.38

Messaggi collegati


Ora e Data
Mappa
Blogs Amici
    Copyright © 2002-2007 - Blogs 2.0
    dotNetHell.it | Home Page Blogs
    ASP.NET 2.0 Windows 2003