Flussi
Descrizione dei flussi di fatturazione
Flusso SDIPR
Flusso Attivo
Descrizione
l nome file viene generato dal backend di Agyo per le fatture NON firmate (il parametro in ingresso viene quindi ignorato), viene invece preso il nome file così com'è in caso di fatture già firmate, con l'unico vincolo che non contenga la piva di TS altrimenti creerebbe conflitti con la generazione dei progressivi.
Si accettano file firmati XAdES(.xml) e CAdES (.p7m)
Per poter effettuare l'invio il sender deve esistere su ts-digital e deve corrispondere a quello indicato in fattura come cedente. Il sender può inviare anche se non in stato "Certificato". Il sender deve essere VALIDATO.
In questo flusso è possibile anche caricare fatture semplifiche FSM10
Servizi
Per quanto riguarda il flusso attivo per poter inviare una fattura a SDI è necessario possedere il servizio SDI.
é possibile ottenere il servizio per estensione mediante una connessione.
Verrà sempre utilizzato prima un eventuale pacchetto del sender e se non presente quello del transmitter
In caso il transmitter differisca dal sender viene verificata che ci sia una connessione se il pacchetto utilizzato è quello del transmitter.
Se il pacchetto utilizzato è quello del transmitter ed è necessario apporre firma TeamSystem viene verificato che la connessione sia Validata.
Motivi di scarto:
-
Mittente non dichiarato
-
Mittente non trovato in anagrafica
-
Mittente non attivo
-
Mittente non validato
-
Owner dell'ufficio non trovato
-
Owner dell'ufficio non attivo
-
Owner dell'ufficio non validato
-
Servizio SDI non attivo
- La fattura supera la dimensione massima di 5 MB
- [Lista di errori di validazione xml]
- Xml della fattura non conforme
- Errore nella gestione degli allegati
-
La fattura non è formalmente corretta
- Estensione file non valida. Estensioni ammesse: .xml, .xml.p7m
- File con transmitter X e progressivo Y già inviato a SdI
- Nome file non valido
- Il sender non corrisponde al CedentePrestatore indicato in fattura
- Il flusso specifico X non coincide con il formato della fattura Y
- Impossibile determinare l'encoding della fattura
- Impossibile inviare una fattura firmata con encoding diverso da UTF-8
Rappresentazione degli stati
Flusso Passivo
Descrizione
Il flusso passivo rappresenta la ricezione di una fattura SDIPR da parte di SDI.
Una volta processata la fattura viene verrà assegnata di default all'ufficio principale (-000). in sua mancanza all'azienda. In caso si utilizzino i gov code all'ufficio configurato.
Servizi
Per poter ricevere è necessario avere il servizio ERICEVI arrivo. In caso di esaurimento del pacchetto le fatture verranno mantenute per 120 giorni ma non saranno assegnate alle aziende.
Sarà possibile riassegnare le fatture solo dopo aver rinnovato il pacchetto.
Al momento la riassegnazione deve esser richiesta all'assistenza. è in sviluppo uno strumento per automatizzare questo processo
Rappresentazione degli stati
Flusso SDIPA
Flusso Attivo
Descrizione
l nome file viene generato dal backend di Agyo per le fatture NON firmate (il parametro in ingresso viene quindi ignorato), viene invece preso il nome file così com'è in caso di fatture già firmate, con l'unico vincolo che non contenga la piva di TS altrimenti creerebbe conflitti con la generazione dei progressivi.
Si accettano file firmati XAdES(.xml) e CAdES (.p7m)
Per poter effettuare l'invio il sender deve esistere su ts-digital e deve corrispondere a quello indicato in fattura come cedente. Il sender può inviare anche se non in stato "Certificato". Il sender deve essere VALIDATO
Servizi
Per quanto riguarda il flusso arrivo poter inviare una fattura a SDI è necessario possedere il servizio SDI.
Per quanto riguarda il flusso arrivo poter inviare una fattura a SDI è necessario possedere il servizio SDI.
é possibile ottenere il servizio per estensione mediante una connessione.
Verra sempre utilizzato prima un eventuale pacchetto del sender e se non presente quello del transmitter
In caso il transmitter differisca dal sender viene verificata che ci sia una connessione se il pachetto utilizzato è quello del transmitter. in caso contrario non viene verificata la connessione.
Motivi di scarto
-
Mittente non dichiarato
-
Mittente non trovato in anagrafica
-
Mittente non attivo
-
Mittente non validato
-
Owner dell'ufficio non trovato
-
Owner dell'ufficio non attivo
-
Owner dell'ufficio non validato
-
Servizio SDI non attivo
-
Il destinatario deve essere codice IPA o destinatario SDI valido
- Destinatario non trovato nell'elenco dei codici IPA
- La fattura supera la dimensione massima di 5 MB
- [Lista di errori di validazione xml]
- Xml della fattura non conforme
- Errore nella gestione degli allegati
-
La fattura non è formalmente corretta
- Estensione file non valida. Estensioni ammesse: .xml, .xml.p7m
- File con transmitter X e progressivo Y già inviato a SdI
- Nome file non valido
- Il sender non corrisponde al CedentePrestatore indicato in fattura
- Il flusso specifico X non coincide con il formato della fattura Y
- Impossibile determinare l'encoding della fattura
- Impossibile inviare una fattura firmata con encoding diverso da UTF-8
Rappresentazione degli stati
Flusso Passivo
Descrizione
Il flusso passivo rappresenta la ricezione di una fattura SDIPR da parte di SDI.
Una volta processata la fattura viene verrà assegnata di default all'ufficio principale (-000). in sua mancanza all'azienda. In caso si utilizzino i gov code all'ufficio configurato.
Servizi
Per poter ricevere non è necessario avere il servizio ERICEVI ma per poter accedere ai dettagli e scaricarla è obbligatorio.
Questo comportamento sta per variare con l'introduzione del flag di readonly sui pacchetti
Rappresentazione degli stati
Flusso SELFINV
Descrizione
l nome file viene generato dai nostri sistemi
Non è possibile inviare fatture già firmate
Servizi
Per quanto riguarda il flusso arrivo poter inviare una fattura a SDI è necessario possedere il servizio SDI.
Motivi di scarto:
-
Mittente non dichiarato
-
Mittente non trovato in anagrafica
-
Mittente non attivo
-
Mittente non validato
-
Owner dell'ufficio non trovato
-
Owner dell'ufficio non attivo
-
Owner dell'ufficio non validato
-
Servizio SDI non attivo
- La fattura supera la dimensione massima di 5 MB
- [Lista di errori di validazione xml]
- Xml della fattura non conforme
- Errore nella gestione degli allegati
-
La fattura non è formalmente corretta
- Estensione file non valida. Estensioni ammesse: .xml, .xml.p7m
- File con transmitter X e progressivo Y già inviato a SdI
- Nome file non valido
- Il sender non corrisponde al CedentePrestatore indicato in fattura
- Il flusso specifico X non coincide con il formato della fattura Y
- Impossibile determinare l'encoding della fattura
- Impossibile inviare una fattura firmata con encoding diverso da UTF-8
Rappresentazione degli stati
Flusso SELFSEND
Dettagli
Per poter eseguire le logiche di SELFSEND relative alla fattura occorre specificare un campo in extradata : 'aziendaDiRiferimento'. Questo campo deve contenere il riferimento anagrafico ItemId dell'azienda di riferimento e può essere un ufficio.
Nel caso si operi come studio essa sarà necessaria per capire a quale azienda gestita dallo studio fa riferimento la fattura che si sta caricando. In questo caso verrà verificato che vi sia una connessione di tipo VALIDATO fra l'azienda di riferimento il transmitterId per appurare che il transmitter abbia i diritti ad operare su tale azienda.
L'azienda di riferimento coinciderà con il transmitterId nel caso si operi come azienda.
In particolare se l'azienda di riferimento coincide con il cedente prestatore la fattura risulterà come attiva. In caso coincidesse con il cessionario risulterà passiva. Questa comparazione viene effettuata prendendo in considerazione sia la piva che il cf. in questo modo viene gestito anche il caso particolare dei gruppi IVA (piva presente in fattura ma non esistente su Agyo)
Se l'azienda di riferimento non viene specificata oppure se non coincide ne con il cedente ne con il cessionario la fattura verrà scartata.
I parametri transmitterId, senderId e recipientId devono essere impostati con l'identificativo dell'azienda, o dello studio, che sta tendando l'invio. In caso uno dei parametri differisca si riceve un errore in fase di caricamento.
SenderId e recipientId verranno poi sovrascritti prendendoli dalla fattura, in particolare in caso di fattura passiva il senderId viene impostato come facciamo per le fatture passive ricevute da SDI (se c'è CF, altrimenti Piva). E' fondamentale che il sender(per le attive) o il recipient (per le passive) siano su Agyo.
In caso di scarto, SenderId e recipientId, e ownerId (Sender e recipient non sarebbero più necessari) non vengono modificati e rimangono uguali al transmitterId (per questioni di visibilità) viene inoltre messo il flag di active: false (per permetterne la visibilità al transmitter su console [scelta LV 08/02/2019]).
In caso di assegnazione l'ownerId viene ri-assegnato con l'itemId dell'azienda di riferimento. in questo modo la visibilità passa all'azienda di riferimento. Fintanto che vi sarà connessione fra i due, potrà vederla ancora anche il transmitter (quindi lo studio che l'ha inviata).
Il metering assegnerà il consumo consapevole del fatto che la fattura è di tipo SELFSEND
Eventuali allegati non vengono mergiati nella fattura. (ci aspettiamo siano già allegati in quanto già in inviati a SDI)
Check duplicati
In caso venga trovato un duplicato la fattura verrà scartata[09].
Il check duplicato avviene verificando:
- DataDocumento
- NumeroDocumento
- OwnerId (viene cercata corrispondenza fra l'ownerId salvato su db con l'azienda di riferimento, l'ownerId se ufficio viene ANCHE valutato come se fosse solo azienda: ovvero senza -xxx)
- TipoDocumento
- ImportoTotaleDocumento se presente in entrambe le fatture che si stanno paragonando, in mancanza di uno o più di tale valore si verifica sul campo ImportoPagamento. Se non è presente alcun importo in nessuna delle due la fatture, oppure è presente solo uno dei due valori di riferimento, l'importo non parteciperà alla determinazione del duplicato.
- Cedente (check prima su IdFiscale iva e poi su CF)
- Cessionario (check prima su IdFiscale iva e poi su CF)
In particolare prima estraiamo da db per i primi 4 valori (OwnerId, data documento, numero documento, tipo documento) e successivamente valutiamo gli altri parametri
Il check viene fatto filtrando (non considerando) le fatture in stato SCARTATO, CARICATO o RIFIUTATO.
Caso particolare di Passaggio Interno
Si verifica nel caso in cui l'autofattura (cedente e cessionario sono lo stesso soggetto) e va registrata sia tra le fatture attive che tra quelle passive. Per gestire questo caso. nel momento in cui si genera un duplicato verrà verificata la coincidenza fra cedente e cessionario, se coincidono e la fattura duplicata è solo una verrà inserita una fattura passiva (la prima va automaticamente in attiva perchè viene prima fatto il check sul cedente). se le fatture duplicate sono invece 2 avverrà uno scarto per fattura duplicata[10].
ATTENZIONE: Il check viene usando l'azienda di riferimento come parametro di ricerca perchè sarà quello che diventerà ownerId del documento al termine della procedura
Questo check si applica anche al suo sotto-flusso IMPEXP e OCR
Servizi
Il transmitter necessità del pacchetto ERICEVI (ottenibile tramite connessione o estenzione)
Rappresentazione degli stati
Flusso IMPEXP
Descrizione
Il flusso IMPEXP è al momento veicolabile solo attraverso il flusso CSV.
Ogni flusso IMPEXP può essere rappresentato nel flusso CSV da 2 diversi record group
Necessita del campo in extradata: aziendaDiRiferimento
Fare attenzione all'ordine dei campi
Record Group 1
id
senderId
recipientId
pivaCedente
cfCedente
ragSocialeCedente
pivaCessionario
cfCessionario
ragSocialeCessionario
dataDoc //formato ISO 8601:2004 -> 2020-01-25
numDoc
tipoDocumento
totale
Record Group 2
ImponibileImporto
aliquotaIva
imposta
esigibilitaIva
natura
Gli stati che può assumere sono
CARICATO
REGISTRATO
CONTROLLATO
AUTO_INVIATO
in caso di problemi lo stato sarà SCARTATO con relativa motivazione.
Flusso CSV
Descrizione
Il servizio permette di caricare un file CSV, trasformare ognuna delle sue righe o gruppo di righe (RecordGroup) in un xml e di sottomettere quest'ultimo ad un flusso pre-esistente. (al momento solo IMPEXP)
Per ogni flusso dovrà essere concordata la struttura del file CSV in modo da poter creare il corretto mapping fra RecordGroup e xml.
Una volta generato l'xml, ogni RecordGroup seguirà le regole per il flusso che è stato specificato in Extradata.
Al momento non è prevista la risottomissione.
Flussi attualmente veicolabili
Al momento è veicolabile solo il flusso IMPEXP.
Regole di struttura del file
L'unità base del csv è una riga chiamata anche Record. Ogni riga deve contenere un header obbligatorio alla prima colonna (indice 0): il recordType
è possibile raggruppare più record, il gruppo assumerà il nome di RecordGroup
Un RecordGroup permette di raggruppare più linee del CSV al fine di utilizzarle per generare uno stesso xml. Sono utili nel caso si voglia generare un xml con campi ripetuti.(vedi esempio)
Headers obbligatori del record group:
- id : riferimento univoco per riga all'interno del file (può essere anche un progressivo)
- senderId: id anagrafico di Agyo del mittente per la riga CSV (compilare con valore specifico del flusso utilizzato)
- recipientId: id anagrafico di Agyo del destinatario per la riga CSV (compilare con valore specifico del flusso utilizzato)
Questi campi obbligatori non hanno una posizione obbligatoria all'interno del file ma devono essere esplicitati in fase di condivisione del nuovo flusso che si sta definendo.
Come transmitter verrà utilizzato quello specificato per l'intero CSV.
Il file deve essere costruito secondo le regole definite dalla RFC4180 (https://tools.ietf.org/html/rfc4180) senza specificare il nome degli headers.
Il carattere di separazione è rappresentato dalla virgola : ,
le informazioni inserite nei campi extradata della richiesta webService saranno utilizzate per ogni documento estratto dal csv. Bisognerà creare quindi il file tenendo in considerazione questa cosa.
Dati Invio
FlowType : CSV
I parametri transmitterId, senderId e recipientId devono essere impostati con l'identificativo dell'azienda, o dello studio, che sta tendando l'invio. In caso uno dei parametri differisca si riceve un errore in fase di caricamento.
Valori obbligatori in extraData:
- flowType: flusso da utilizzare per ogni recordGroup all'interno del CSV. ogni recordGroup del CSV è sottoposta allo stesso tipo di flusso.
Non è possibile avere CSV con all'interno tipi di flusso differenti.
Servizi
Il pacchetto necessario per l'invio dipende dal flusso dichiarato nell'extraData 'flowtype'
Lettura stato di elaborazione del CSV
Verrà fornita un api di lettura dedicata che mediante l'id fornito in fase di caricamento fornirà informazioni relative al processamento del file stesso, se il documento ha terminato l'esecuzione verrà restituito per ogni riga presente:
- IdRecordGroup
- StatoRecordGroup
- descrizione
- hubId (potrà essere utilizzato per verificare lo stato del documento sulle api attuali di lettura di fatturazione)
Motivi di scarto del CSV
- Non hai specificagto il flowtype in extradata (c'è il controllo ma in verità viene già bloccato un fase di upload)
- Flotype in extradata non supportato per il parsing del csv.
- Dimensione massima superata.
- Errore nel parsing del csv, csv malformato.
- Id duplicato all'interno del csv
Rappresentazione degli stati del flusso CSV
Rappresentazione degli stati del RecordGroupCsv
Esempio
Il caricamento del seguente file CSV:
1,10,46546747471,46546747471,46546747471,46546747471,TEAMSYSTEM,0,MRCRRT72B14A145A,MERCANDELLIROBERTO,2019-01-01,1,TD01,162
2,160,N1,0,
2,2,N2,0,
Produce il seguente XML:
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="FatturaPrivati_v1.2.xsl"?>
<p:FatturaElettronica xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xmlns:p="http://ivaservizi.agenziaentrate.gov.it/docs/xsd/fatture/v1.2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" versione="FPR12">
<FatturaElettronicaHeader>
<DatiTrasmissione>
<IdTrasmittente>
<IdPaese>IT</IdPaese>
<IdCodice>01641790702</IdCodice>
</IdTrasmittente>
<ProgressivoInvio>0</ProgressivoInvio>
<FormatoTrasmissione>FPR12</FormatoTrasmissione>
</DatiTrasmissione>
<CedentePrestatore>
<DatiAnagrafici>
<IdFiscaleIVA>
<IdPaese>IT</IdPaese>
<IdCodice>46546747471</IdCodice>
</IdFiscaleIVA>
<CodiceFiscale>46546747471</CodiceFiscale>
<Anagrafica>
<Denominazione>TEAMSYSTEM</Denominazione>
</Anagrafica>
<RegimeFiscale>RF01</RegimeFiscale>
</DatiAnagrafici>
</CedentePrestatore>
<CessionarioCommittente>
<DatiAnagrafici>
<IdFiscaleIVA>
<IdPaese>IT</IdPaese>
<IdCodice>0</IdCodice>
</IdFiscaleIVA>
<CodiceFiscale>MRCRRT72B14A145A</CodiceFiscale>
<Anagrafica>
<Denominazione>MERCANDELLIROBERTO</Denominazione>
</Anagrafica>
</DatiAnagrafici>
</CessionarioCommittente>
</FatturaElettronicaHeader>
<FatturaElettronicaBody>
<DatiGenerali>
<DatiGeneraliDocumento>
<TipoDocumento>TD01</TipoDocumento>
<Divisa>EUR</Divisa>
<Data>2019-01-01</Data>
<Numero>1</Numero>
<ImportoTotaleDocumento>162</ImportoTotaleDocumento>
</DatiGeneraliDocumento>
</DatiGenerali>
<DatiBeniServizi>
<DatiRiepilogo>
<Natura>N1</Natura>
<ImponibileImporto>160</ImponibileImporto>
</DatiRiepilogo>
<DatiRiepilogo>
<Natura>N2</Natura>
<ImponibileImporto>2</ImponibileImporto>
</DatiRiepilogo>
</DatiBeniServizi>
</FatturaElettronicaBody>
</p:FatturaElettronica>