Skip to main content

Flusso CSV (WIP)

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 transmitterIdsenderId 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(TODO)CSV

 

DCyD9BZ85T9uAD67-Drawing-Amedeo-Zitti-1585925593.pngV8Ure6E8bXKoc7mX-Drawing-Amedeo-Zitti-1585928148.png

ssss 

Rappresentazione degli stati del RecordGroupCsv

(TODO grafico)

 

DCyD9BZ85T9uAD67-Drawing-Amedeo-Zitti-1585925593.pngP0lgWKZxew7brAa1-Drawing-Amedeo-Zitti-1585928243.png

Esempio 

Il caricamento del seguente file CSV:

​​

1,10,46546747471,46546747471,46546747471,46546747471,TEAMSYSTEM,0,MRCRRT72B14A145A,MERCANDELLIROBERTO,02/01/2019,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>02/01/2019</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>

 

Dettagli per gli sviluppatori TsDigital

é possibilie risottomette un messaggio dalla deadletter in caso il processamento del csv si interrompa per exception impreviste

Facade Register

  • si occupa di impostare lo stato del csv a CARICATO

Facade Split

Splitta i recordgroup e per ognuno salva una entity su db con packageId (id del recordGroup), batchId (hubId del file CSV) in stato REGISTRATO

Successivamente per ogni recordGroup invia il messaggio su SB.

Facade Upload

  • Genera XML
  • Carica il file su b2bApi secondo il flusso selezionato (TransmitterId: TransmitterId del file csv, SenderId e RecipientId presi dall'apposito header all'interno di ogni recordGroup)
  • Impostata lo stato del RecordGroup a CARICATO e ESEGUIT​

 

 

 

 

 

 

 

 

 

s​

​​