Skip to content

Commit

Permalink
Recepite specifiche tecniche v1.1 del 22 Giugno 2018
Browse files Browse the repository at this point in the history
Closes #52
  • Loading branch information
nicolaiarocci committed Jun 26, 2018
1 parent 2cf322a commit 5c138ea
Show file tree
Hide file tree
Showing 5 changed files with 45 additions and 59 deletions.
43 changes: 23 additions & 20 deletions CHANGES
Expand Up @@ -6,6 +6,9 @@ v0.8

Non rilasciata.

- Recepite specifiche tecniche Allegato A del 22.6.2018. Closes #52.
- New: rimossi controlli su campo PECDestinatario. Addresses #52.
- New: supporto per TipoDocumento TD020 autofattura. Addresses #52
- Passata la test suite da NET461 a NETCore. Closes #57.

v0.7
Expand All @@ -30,21 +33,21 @@ v0.6.2

Rilasciata il 23.5.2017.

- Fix: Falso errore di convalida 00423 quando PrezzoTotale � valorizzato con piu di due decimali. Closes #45.
- Fix: Falso errore di convalida 00423 quando PrezzoTotale � valorizzato con piu di due decimali. Closes #45.

v0.6.1
======

Rilasciata il 5.5.2017.

- Fix: Falso errore di convalida 00415 quando DatiCassaPrevidenziale � valorizzato ma non ha Ritenuta="SI". Closes #44.
- Fix: Falso errore di convalida 00415 quando DatiCassaPrevidenziale � valorizzato ma non ha Ritenuta="SI". Closes #44.

v0.6.0
======

Rilasciata il 27.4.2017.

- Assembly non pi� strong-named. Closes #41.
- Assembly non pi� strong-named. Closes #41.
- README: aggiunti esempi di introspezione e modifica degli elementi FatturaElettronicaBody. Closes #38.

v0.5.1
Expand All @@ -61,16 +64,16 @@ Rilasciata il 30.3.2017.

Questa versione recepisce le modifiche introdotte con la v1.2.1 delle specifiche tecniche PA.

- Regime Fiscale RF03 � abrogato. Viene restituito errore 00459 se utilizzato.
- Regime Fiscale RF03 � abrogato. Viene restituito errore 00459 se utilizzato.
- Natura N5: descrizione aggiornata a "regime del margine / IVA non esposta in fattura".
- Le propriet� Codice e Nome della classe astratta Tabella non sono pi� protette in scrittura.
- Le propriet� Codice e Nome della classe astratta Tabella non sono pi� protette in scrittura.

v0.4.3
======

Rilasciata il 23.3.2017.

- Fix: Validazione conformit� ai gruppi IsBasicLatin e IsLatin-1Supplement. Closes #29.
- Fix: Validazione conformit� ai gruppi IsBasicLatin e IsLatin-1Supplement. Closes #29.
- Fix: Non includere il folder Artwork nel package NuGet. Closes #37.

v0.4.2
Expand Down Expand Up @@ -98,8 +101,8 @@ Rilasciata il 9.3.2017.
- Rinominata classe FatturaElettronica in Fattura.
- Rinominata classe FatturaElettronicaHeader in Header.
- Rinominata classe FatturaElettronicaBody in Body.
- Rinominata propriet� Fattura.FatturaElettronicaHeader in Fattura.Header.
- Rinominata propriet� Fattura.FatturaElettronicaBody in Fattura.Body.
- Rinominata propriet� Fattura.FatturaElettronicaHeader in Fattura.Header.
- Rinominata propriet� Fattura.FatturaElettronicaBody in Fattura.Body.
- Alcune classi spostate da FatturaElettronica.Common a FatturaElettronica.Tabelle
- Classe BusinessObjects.BusinessObjectBase rinominata FatturaElettronica.BaseClass.
- Classe BusinessObjects.BusinessObject rinominata FatturaElettronica.BaseClassSerializable.
Expand All @@ -108,8 +111,8 @@ Rilasciata il 9.3.2017.
- Acquisita dipendenza dal package FluentValidation.
- Aggiunto namespace FatturaElettronica.Validators.
- Aggiunta serie di classi dedicate alla convalida (FatturaValidator; HeaderValidator; ecc.)
- Rimosso metodo IsValid(). Al suo posto usare propriet� ValidationResult.IsValid.
- Rimossa propriet� Error. Al suo posto usare ValidationFailure.Errors.
- Rimosso metodo IsValid(). Al suo posto usare propriet� ValidationResult.IsValid.
- Rimossa propriet� Error. Al suo posto usare ValidationFailure.Errors.
- Nuovo extension method Fattura.Validate(). Equivalente a FatturaValidator.Validate() (shortcut).
- Consultare il README per esempi di codice aggiornati.

Expand Down Expand Up @@ -166,15 +169,15 @@ Rilasciata il 17.1.2017.

- Fix: Convalida errore 00415. Se almeno un DatiCassaPrevidenziale ha Ritenuta = "SI", allora DatiRitenuta deve essere valorizzato. Closes #22.
- Fix: Convalida errore 00411. Se almeno un DettaglioLinee ha Ritenuta = "SI", allora DatiRitenuta deve essere valorizzato. Closes #22.
- Fix: Convalida errore 00423 nel caso di campo Quantit� a null. Closes #20.
- Fix: Convalida errore 00423 nel caso di campo Quantit� a null. Closes #20.

v0.3.1
======

Rilasciata il 16.1.2017.

- New: aggiunte propriet� Sigla e Sigle[] alla classe FormatoTrasmissione
- New: aggiunta propriet� Descrizione alla classe FormatoTrasmissione
- New: aggiunte propriet� Sigla e Sigle[] alla classe FormatoTrasmissione
- New: aggiunta propriet� Descrizione alla classe FormatoTrasmissione

v0.3
=====
Expand All @@ -184,16 +187,16 @@ Rilasciata il 13.1.2017
BREAKING CHANGES
----------------
Questa release introduce una serie di cambianti importanti che rompono la
compatibilit� con l'API precedente.
compatibilit� con l'API precedente.

- Il package NuGet cambia nome. Ora si chiama FatturaElettronica (era FatturaElettronicaPA).
- Il namespace diventa FatturaElettronica (era FatturaElettronicaPA)
- Il package FatturaElettronicaPA verr� marcato come obsoleto su NuGet.
- Il costruttore della classe FatturaElettronica � ora protetto.
- Il package FatturaElettronicaPA verr� marcato come obsoleto su NuGet.
- Il costruttore della classe FatturaElettronica � ora protetto.
- Usare il factory method CreateInstance() per ottenere una istanza della classe.
- CreateInstance() consente di scegliere se ottenere una fattura tra soggetti privati o per la Pubblica Amministrazione.
- La fattura restituita da CreateInstance() ha gi� il campo FormatoTrasmissione correttamente impostato a FPA12 o FPR12.
- Nel caso di fattura tra privati, per default la fattura ha il CodiceDestinatario impostato a "0000000" (sar� cura del utente impostare in seguito il nuovo campo PECDestinatario o aggiornare il CodiceDestinatario col codice canale del destinatario)
- La fattura restituita da CreateInstance() ha gi� il campo FormatoTrasmissione correttamente impostato a FPA12 o FPR12.
- Nel caso di fattura tra privati, per default la fattura ha il CodiceDestinatario impostato a "0000000" (sar� cura del utente impostare in seguito il nuovo campo PECDestinatario o aggiornare il CodiceDestinatario col codice canale del destinatario)

Altre modifiche
---------------
Expand All @@ -215,7 +218,7 @@ v0.2.6

Rilasciata il 13.1.2017

- Questa release serve solo a segnalare su NuGet che FatturaElettronicaPA � obsoleto.
- Questa release serve solo a segnalare su NuGet che FatturaElettronicaPA � obsoleto.
- Scaricare e installare il package FatturaElettronica v0.3 e successivi da ora in poi.

v0.2.5
Expand Down Expand Up @@ -301,7 +304,7 @@ Rilasciata il 31.7.2015
- Fix: 2.1.9.13 DataOraConsegna serializza a MinValue quando non valorizzato. Closes #10.
- Fix: 2.2.1.16.4 RiferimentoData serializza a MinValue quando non valorizzato.
- Fix: 2.4.2.5 DataScadenzaPagamento serializza a MinValue quando non valorizzato. Closes #10.
- Fix: 2.4.2.18 DataLimitePagamentoAnticipato � di tipo errato (decimal? invece di DateTime?).
- Fix: 2.4.2.18 DataLimitePagamentoAnticipato � di tipo errato (decimal? invece di DateTime?).

v0.1.5
======
Expand Down
33 changes: 20 additions & 13 deletions README.md
@@ -1,11 +1,14 @@
# Fattura Elettronica per piattaforme .NET [![Build status](https://ci.appveyor.com/api/projects/status/gft4hjbct0xgwogq?svg=true)](https://ci.appveyor.com/project/nicolaiarocci/fatturaelettronica-net)

## Caratteristiche
- Lettura e scrittura nel [formato standard v1.2.1][pa] (XML).

- Lettura e scrittura nel formato aderente alle specifiche tecniche ([Allegato A, v1.1 del 22 Giugno 2018][pa]).
- Supporta sia fatture elettroniche tra privati che con la Pubblica Amministrazione.
- Convalida in osservanza delle specifiche tecniche ufficiali.
- Supporto per la serializzazione in formato JSON

## Utilizzo

```cs
using FatturaElettronica;
using FatturaElettronica.Validators;
Expand All @@ -26,9 +29,8 @@ namespace DemoApp
// Usare il factory method CreateInstance() per ottenere una istanza di Fattura.
var fattura = Fattura.CreateInstance(Instance.PubblicaAmministrazione);

// Lettura da file XML compatibile con formato SDI 1.2.1.
// (scaricato da http://www.fatturapa.gov.it/export/fatturazione/it/normativa/f-2.htm)
using (var r = XmlReader.Create("IT01234567890_FPA01.xml", new XmlReaderSettings { IgnoreWhitespace = true, IgnoreComments = true }))
// Lettura da file XML
using (var r = XmlReader.Create("IT01234567890_FPA01.xml", new XmlReaderSettings { IgnoreWhitespace = true, IgnoreComments = true }))
{
fattura.ReadXml(r);
}
Expand Down Expand Up @@ -62,7 +64,7 @@ namespace DemoApp
// Per brevità è possibile usare un extension method.
result = fattura.Validate();
Console.WriteLine(result.IsValid);

// Sono disponibili validatori per ogni classe esposta da FatturaElettronica.
var anagrafica = new DatiAnagraficiCedentePrestatore();
var anagraficaValidator = new DatiAnagraficiCedentePrestatoreValidator();
Expand All @@ -75,7 +77,7 @@ namespace DemoApp
// Modifica proprietà Body
fattura.Body[0].DatiGenerali.DatiGeneraliDocumento.Numero = "12345";

// Serializzazione XML in osservanza allo standard SDI 1.2.1.
// Serializzazione XML
using (var w = XmlWriter.Create("IT01234567890_FPA01.xml", new XmlWriterSettings { Indent = true }))
{
fattura.WriteXml(w);
Expand All @@ -88,28 +90,33 @@ namespace DemoApp
}
}
```

### Limitazioni
In convalida non sono supportati gli errori di tipo `3xx` in quanto risultato dei riscontri fatti da PA sui propri server.

In convalida non sono supportati gli errori di tipo `3xx` in quanto risultato dei riscontri fatti da PA sui propri server.

## Portabilità
FatturaElettronica supporta .NET Standard v1.1, cosa che le permette di supportare un [ampio numero di piattaforme][netstandard].

FatturaElettronica supporta .NET Standard v1.1, cosa che le permette di supportare un [ampio numero di piattaforme][netstandard].

## Installazione

FatturaElettronica è su [NuGet][nuget] quindi tutto quel che serve è eseguire:

```powershell
PM> Install-Package FatturaElettronica
```
PM> Install-Package FatturaElettronica
```

dalla Package Console, oppure usare il comando equivalente in Visual Studio.

## Licenza

FatturaElettronica è un progetto open source di [Nicola Iarocci][ni] e [Gestionale Amica][ga] rilasciato sotto licenza [BSD][bsd].

[pa]: http://www.fatturapa.gov.it/export/fatturazione/sdi/Specifiche_tecniche_del_formato_FatturaPA_v1.2.1.pdf
[bo]: http://github.com/FatturaElettronica/BusinessObjects
[pa]: https://www.agenziaentrate.gov.it/wps/file/Nsilib/Nsi/Schede/Comunicazioni/Fatture+e+corrispettivi/Fatture+e+corrispettivi+ST/ST+invio+di+fatturazione+elettronica/ST+Fatturazione+elettronica+-+Allegato+A/Allegato+A+-+Specifiche+tecniche+vers+1.1_22062018.pdf
[bo]: http://github.com/FatturaElettronica/BusinessObjects
[bsd]: http://github.com/FatturaElettronica/FatturaElettronica.NET/blob/master/LICENSE
[ga]: http://gestionaleamica.com
[ni]: https://nicolaiarocci.com
[nuget]: https://www.nuget.org/packages/FatturaElettronica/
[netstandard]: https://github.com/dotnet/standard/blob/master/docs/versions/netstandard1.1.md
[netstandard]: https://github.com/dotnet/standard/blob/master/docs/versions/netstandard1.1.md
3 changes: 2 additions & 1 deletion Tabelle/TipoDocumento.cs
Expand Up @@ -13,7 +13,8 @@ public override Tabella[] List
new TipoDocumento { Codice = "TD03", Nome = "acconto/anticipo su parcella" },
new TipoDocumento { Codice = "TD04", Nome = "nota di credito" },
new TipoDocumento { Codice = "TD05", Nome = "nota di debito" },
new TipoDocumento { Codice = "TD06", Nome = "parcella" }
new TipoDocumento { Codice = "TD06", Nome = "parcella" },
new TipoDocumento { Codice = "TD20", Nome = "autofattura" }
};

}
Expand Down
15 changes: 0 additions & 15 deletions Test/DatiTrasmissioneValidator.cs
Expand Up @@ -69,20 +69,5 @@ public void PECDestinatarioMinMaxLength()
challenge.CodiceDestinatario = new string('0', 7);
AssertMinMaxLength(x => x.PECDestinatario, 7, 256);
}
[TestMethod]
public void PECDestinatarioIsRequiredWhenCodiceDestinatarioIs0000000()
{
challenge.CodiceDestinatario = new string('0', 7);

AssertRequired(x => x.PECDestinatario, expectedErrorCode:"00426");
}
[TestMethod]
public void PECDestinatarioIsEmptyWhenCodiceDestinatarioIsNot0000000()
{
challenge.CodiceDestinatario = "1234567";

challenge.PECDestinatario = "x";
validator.ShouldHaveValidationErrorFor(x => x.PECDestinatario, challenge).WithErrorCode("00426");
}
}
}
10 changes: 0 additions & 10 deletions Validators/DatiTrasmissioneValidator.cs
Expand Up @@ -31,18 +31,8 @@ public DatiTrasmissioneValidator()
RuleFor(dt => dt.ContattiTrasmittente)
.SetValidator(new ContattiTrasmittenteValidator())
.When(x=>!x.ContattiTrasmittente.IsEmpty());
RuleFor(dt => dt.PECDestinatario)
.NotEmpty()
.When(dt => dt.CodiceDestinatario == "0000000")
.WithMessage("{PropertyName} non valorizzato a fronte di Codice Destinatario con valore 0000000")
.WithErrorCode("00426");
RuleFor(dt => dt.PECDestinatario)
.Length(7, 256);
RuleFor(dt => dt.PECDestinatario)
.Empty()
.When(dt => dt.CodiceDestinatario != "0000000")
.WithMessage("{PropertyName} valorizzato a fronte di Codice Destinatario con valore diverso da 0000000")
.WithErrorCode("00426");
}
}
}

0 comments on commit 5c138ea

Please sign in to comment.