UNPKG

@palmabit/json2fatturapaxml

Version:

Crea una fattura elettronica partendo da un JSON

612 lines (606 loc) 18 kB
'use strict' const json2fatturapaxml = require('../index') const fs = require('fs') describe('json2fatturapaxml', () => { test('should generate minimal xml for FPR12', () => { const invoice = { FatturaElettronicaHeader: { DatiTrasmissione: { IdTrasmittente: { IdPaese: 'IT', IdCodice: '03469550986' }, ProgressivoInvio: '001', FormatoTrasmissione: 'FPR12', CodiceDestinatario: '0000000', PECDestinatario: 'palmabit@pec.it' }, CedentePrestatore: { DatiAnagrafici: { IdFiscaleIVA: { IdPaese: 'IT', IdCodice: '03469550986' }, Anagrafica: { Denominazione: 'dfa' }, RegimeFiscale: 'RF19' }, Sede: { Indirizzo: 'Indirizzo', CAP: '00000', Comune: 'Comune', Provincia: 'MN', Nazione: 'IT' } }, CessionarioCommittente: { DatiAnagrafici: { IdFiscaleIVA: { IdPaese: 'IT', IdCodice: '03469550986' }, Anagrafica: { Denominazione: 'Denominazione' } }, Sede: { Indirizzo: 'Indirizzo', CAP: '00000', Comune: 'Comune', Provincia: 'MN', Nazione: 'IT' } } }, FatturaElettronicaBody: { DatiGenerali: { DatiGeneraliDocumento: { TipoDocumento: 'TD01', Divisa: 'EUR', Data: '2018-11-19', Numero: '1' } }, DatiBeniServizi: { DettaglioLinee: { NumeroLinea: 1, Descrizione: 'Descrizione', PrezzoUnitario: '0.00', PrezzoTotale: '0.00', AliquotaIVA: '22.00' }, DatiRiepilogo: { AliquotaIVA: '22.00', ImponibileImporto: '0.00', Imposta: '0.00' } } } } const expected = fs.readFileSync('tests/xml/IT03469550986_PR001.xml', { encoding: 'UTF-8' }) const result = json2fatturapaxml(invoice) expect(result.error).toBeUndefined() expect(result).toEqual(expected) }) test('should generate minimal xml for FPA12', () => { const invoice = { FatturaElettronicaHeader: { DatiTrasmissione: { IdTrasmittente: { IdPaese: 'IT', IdCodice: '03469550986' }, ProgressivoInvio: '001', FormatoTrasmissione: 'FPA12', CodiceDestinatario: 'GIQELA' }, CedentePrestatore: { DatiAnagrafici: { IdFiscaleIVA: { IdPaese: 'IT', IdCodice: '03469550986' }, Anagrafica: { Denominazione: 'dfa' }, RegimeFiscale: 'RF19' }, Sede: { Indirizzo: 'Indirizzo', CAP: '00000', Comune: 'Comune', Provincia: 'BS', Nazione: 'IT' } }, CessionarioCommittente: { DatiAnagrafici: { IdFiscaleIVA: { IdPaese: 'IT', IdCodice: '03469550986' }, Anagrafica: { Denominazione: 'Denominazione' } }, Sede: { Indirizzo: 'Indirizzo', CAP: '00000', Comune: 'Comune', Provincia: 'CR', Nazione: 'IT' } } }, FatturaElettronicaBody: { DatiGenerali: { DatiGeneraliDocumento: { TipoDocumento: 'TD01', Divisa: 'EUR', Data: '2018-11-19', Numero: '1' } }, DatiBeniServizi: { DettaglioLinee: { NumeroLinea: 1, Descrizione: 'Descrizione', PrezzoUnitario: '0.00', PrezzoTotale: '0.00', AliquotaIVA: '22.00' }, DatiRiepilogo: { AliquotaIVA: '22.00', ImponibileImporto: '0.00', Imposta: '0.00' } } } } const expected = fs.readFileSync('tests/xml/IT03469550986_PA001.xml', { encoding: 'UTF-8' }) const result = json2fatturapaxml(invoice) expect(result.error).toBeUndefined() expect(result).toEqual(expected) }) test('should generate a full xml', () => { const invoice = { FatturaElettronicaHeader: { DatiTrasmissione: { IdTrasmittente: { IdPaese: 'IT', IdCodice: '03469550986' }, ProgressivoInvio: '002', FormatoTrasmissione: 'FPR12', CodiceDestinatario: '0000000', ContattiTrasmittente: { Telefono: '12345', Email: 'hello@palmabit.com' }, PECDestinatario: 'palmabit@pec.it' }, CedentePrestatore: { DatiAnagrafici: { IdFiscaleIVA: { IdPaese: 'IT', IdCodice: '03469550986' }, CodiceFiscale: '03469550986', Anagrafica: { Denominazione: 'dfa', Nome: 'Giuseppe', Cognome: 'Aremare', Titolo: 'On', CodEORI: 'Codice 012345' }, AlboProfessionale: 'AlboProfessionale', ProvinciaAlbo: 'BS', NumeroIscrizioneAlbo: 'NumeroIscrizioneAlbo', DataIscrizioneAlbo: '2018-11-20', RegimeFiscale: 'RF19' }, Sede: { Indirizzo: 'Indirizzo', NumeroCivico: '5b', CAP: '00000', Comune: 'Comune', Provincia: 'BS', Nazione: 'IT' }, StabileOrganizzazione: { Indirizzo: 'Indirizzo', NumeroCivico: '5b', CAP: '00000', Comune: 'Comune', Provincia: 'BS', Nazione: 'IT' }, IscrizioneREA: { Ufficio: 'BS', NumeroREA: '1', CapitaleSociale: '100.00', SocioUnico: 'SU', StatoLiquidazione: 'LS' }, Contatti: { Telefono: '03030', Fax: '03030', Email: 'hello@palmabit.com' }, RiferimentoAmministrazione: '1' }, RappresentanteFiscale: { DatiAnagrafici: { IdFiscaleIVA: { IdPaese: 'IT', IdCodice: 'cod' }, CodiceFiscale: '03469550986', Anagrafica: { Denominazione: 'Denominazione', Nome: 'Nome', Cognome: 'Cognome', Titolo: 'Titolo', CodEORI: 'CodEORICodEORI' } } }, CessionarioCommittente: { DatiAnagrafici: { IdFiscaleIVA: { IdPaese: 'IT', IdCodice: '03469550986' }, CodiceFiscale: 'CodiceFiscale', Anagrafica: { Denominazione: 'Denominazione', Nome: 'Nome', Cognome: 'Cognome', Titolo: 'Titolo', CodEORI: 'CodEORICodEORI' } }, Sede: { Indirizzo: 'Indirizzo', NumeroCivico: '5', CAP: '00000', Comune: 'Comune', Provincia: 'BS', Nazione: 'IT' }, StabileOrganizzazione: { Indirizzo: 'Indirizzo', NumeroCivico: '5', CAP: '00000', Comune: 'Comune', Provincia: 'BS', Nazione: 'IT' }, RappresentanteFiscale: { IdFiscaleIVA: { IdPaese: 'IT', IdCodice: 'cod' }, Denominazione: 'Denominazione', Nome: 'Nome', Cognome: 'Cognome' } }, TerzoIntermediarioOSoggettoEmittente: { DatiAnagrafici: { IdFiscaleIVA: { IdPaese: 'IT', IdCodice: 'cod' }, CodiceFiscale: 'CodiceFiscale', Anagrafica: { Denominazione: 'Denominazione', Nome: 'Nome', Cognome: 'Cognome', Titolo: 'Titolo', CodEORI: 'CodEORICodEORI' } } }, SoggettoEmittente: 'TZ' }, FatturaElettronicaBody: { DatiGenerali: { DatiGeneraliDocumento: { TipoDocumento: 'TD01', Divisa: 'EUR', Data: '2018-11-19', Numero: '1', DatiRitenuta: [{ TipoRitenuta: 'RT01', ImportoRitenuta: '0.00', AliquotaRitenuta: '22.00', CausalePagamento: 'CP' }], DatiBollo: { BolloVirtuale: 'SI', ImportoBollo: '0.00' }, DatiCassaPrevidenziale: { TipoCassa: 'TC01', AlCassa: '22.00', ImportoContributoCassa: '0.00', ImponibileCassa: '0.00', AliquotaIVA: '22.00', Ritenuta: 'SI', Natura: 'N1', RiferimentoAmministrazione: 'rif.' }, ScontoMaggiorazione: { Tipo: 'SC', Percentuale: '0.00', Importo: '0.00' }, ImportoTotaleDocumento: '0.00', Arrotondamento: '0.00', Causale: 'Causale1', Art73: 'SI' }, DatiOrdineAcquisto: { RiferimentoNumeroLinea: 1, IdDocumento: 'id', Data: '2018-11-20', NumItem: 'NumItem', CodiceCommessaConvenzione: 'CodiceCommessaConvenzione', CodiceCUP: 'CodiceCUP', CodiceCIG: 'CodiceCIG' }, DatiContratto: { RiferimentoNumeroLinea: 1, IdDocumento: 'id', Data: '2018-11-20', NumItem: 'NumItem', CodiceCommessaConvenzione: 'CodiceCommessaConvenzione', CodiceCUP: 'CodiceCUP', CodiceCIG: 'CodiceCIG' }, DatiConvenzione: { RiferimentoNumeroLinea: 1, IdDocumento: 'id', Data: '2018-11-20', NumItem: 'NumItem', CodiceCommessaConvenzione: 'CodiceCommessaConvenzione', CodiceCUP: 'CodiceCUP', CodiceCIG: 'CodiceCIG' }, DatiRicezione: { RiferimentoNumeroLinea: 1, IdDocumento: 'id', Data: '2018-11-20', NumItem: 'NumItem', CodiceCommessaConvenzione: 'CodiceCommessaConvenzione', CodiceCUP: 'CodiceCUP', CodiceCIG: 'CodiceCIG' }, DatiFattureCollegate: { RiferimentoNumeroLinea: 1, IdDocumento: 'id', Data: '2018-11-20', NumItem: 'NumItem', CodiceCommessaConvenzione: 'CodiceCommessaConvenzione', CodiceCUP: 'CodiceCUP', CodiceCIG: 'CodiceCIG' }, DatiSAL: { RiferimentoFase: 1 }, DatiDDT: { NumeroDDT: '1', DataDDT: '2018-11-20', RiferimentoNumeroLinea: 1 }, DatiTrasporto: { DatiAnagraficiVettore: { IdFiscaleIVA: { IdPaese: 'IT', IdCodice: 'IdCodice' }, CodiceFiscale: 'CodiceFiscale', Anagrafica: { Denominazione: 'dfa', Nome: 'Giuseppe', Cognome: 'Aremare', Titolo: 'On', CodEORI: 'Codice 012345' }, NumeroLicenzaGuida: 'NumeroLicenzaGuida' }, MezzoTrasporto: 'MezzoTrasporto', CausaleTrasporto: 'CausaleTrasporto', NumeroColli: 2, Descrizione: 'Descrizione', UnitaMisuraPeso: 'KG', PesoLordo: '0.00', PesoNetto: '0.00', DataOraRitiro: '2018-11-20T15:19:00', DataInizioTrasporto: '2018-11-20T15:19:00', TipoResa: 'EXW', IndirizzoResa: { Indirizzo: 'Indirizzo', NumeroCivico: '5a', CAP: '00000', Comune: 'Brescia', Provincia: 'BS', Nazione: 'IT' }, DataOraConsegna: '2018-11-20T15:19:00' }, FatturaPrincipale: { NumeroFatturaPrincipale: 'dfa', DataFatturaPrincipale: '2018-11-20' } }, DatiBeniServizi: { DettaglioLinee: { NumeroLinea: 1, TipoCessionePrestazione: 'SC', CodiceArticolo: { CodiceTipo: 'CodiceTipo', CodiceValore: 'CodiceValore' }, Descrizione: 'Descrizione', Quantita: '1.00', UnitaMisura: 'kg', DataInizioPeriodo: '2018-11-20', DataFinePeriodo: '2018-11-20', PrezzoUnitario: '0.00', ScontoMaggiorazione: { Tipo: 'SC', Percentuale: '22.00', Importo: '0.00' }, PrezzoTotale: '0.00', AliquotaIVA: '22.00', Ritenuta: 'SI', Natura: 'N1', RiferimentoAmministrazione: 'rif', AltriDatiGestionali: { TipoDato: 'TipoDato', RiferimentoTesto: 'RiferimentoTesto', RiferimentoNumero: '0.00', RiferimentoData: '2018-11-20' } }, DatiRiepilogo: { AliquotaIVA: '22.00', Natura: 'N1', SpeseAccessorie: '0.00', Arrotondamento: '0.00', ImponibileImporto: '0.00', Imposta: '0.00', EsigibilitaIVA: 'I', RiferimentoNormativo: 'RiferimentoNormativo' } }, DatiVeicoli: { Data: '2018-11-20', TotalePercorso: 'TotalePercorso' }, DatiPagamento: { CondizioniPagamento: 'TP01', DettaglioPagamento: { Beneficiario: 'Beneficiario', ModalitaPagamento: 'MP01', DataRiferimentoTerminiPagamento: '2018-11-20', GiorniTerminiPagamento: 1, DataScadenzaPagamento: '2018-11-20', ImportoPagamento: '0.00', CodUfficioPostale: 'CodUfficioPostale', CognomeQuietanzante: 'CognomeQuietanzante', NomeQuietanzante: 'NomeQuietanzante', CFQuietanzante: 'CFQuietanzante__', TitoloQuietanzante: 'TitoloQuie', IstitutoFinanziario: 'IstitutoFinanziario', IBAN: 'IBANIBANIBANIBAN', ABI: 'ABI__', CAB: 'CAB__', BIC: 'BICBICBIC', ScontoPagamentoAnticipato: '0.00', DataLimitePagamentoAnticipato: '2018-11-20', PenalitaPagamentiRitardati: '0.00', DataDecorrenzaPenale: '2018-11-20', CodicePagamento: 'CodicePagamento' } }, Allegati: { NomeAttachment: 'NomeAttachment', AlgoritmoCompressione: 'ZIP', FormatoAttachment: 'PDF', DescrizioneAttachment: 'DescrizioneAttachment', Attachment: 'BASE64Binary' } } } const result = json2fatturapaxml(invoice) const expected = fs.readFileSync('tests/xml/IT03469550986_PR002.xml', { encoding: 'UTF-8' }) expect(result.error).toBeUndefined() expect(result).toEqual(expected) }) test('should generate xml for private customer (not company)', () => { const invoice = { FatturaElettronicaHeader: { DatiTrasmissione: { IdTrasmittente: { IdPaese: 'IT', IdCodice: '03469550986' }, ProgressivoInvio: '001', FormatoTrasmissione: 'FPR12', CodiceDestinatario: '0000000' }, CedentePrestatore: { DatiAnagrafici: { IdFiscaleIVA: { IdPaese: 'IT', IdCodice: '03469550986' }, Anagrafica: { Denominazione: 'dfa' }, RegimeFiscale: 'RF19' }, Sede: { Indirizzo: 'Indirizzo', CAP: '00000', Comune: 'Comune', Provincia: 'MN', Nazione: 'IT' } }, CessionarioCommittente: { DatiAnagrafici: { CodiceFiscale: 'AAABBB80A01A000A', Anagrafica: { Denominazione: 'Denominazione' } }, Sede: { Indirizzo: 'Indirizzo', CAP: '00000', Comune: 'Comune', Provincia: 'MN', Nazione: 'IT' } } }, FatturaElettronicaBody: { DatiGenerali: { DatiGeneraliDocumento: { TipoDocumento: 'TD01', Divisa: 'EUR', Data: '2018-11-19', Numero: '1' } }, DatiBeniServizi: { DettaglioLinee: { NumeroLinea: 1, Descrizione: 'Descrizione', PrezzoUnitario: '0.00', PrezzoTotale: '0.00', AliquotaIVA: '22.00' }, DatiRiepilogo: { AliquotaIVA: '22.00', ImponibileImporto: '0.00', Imposta: '0.00' } } } } const result = json2fatturapaxml(invoice) expect(result.error).toBeUndefined() }) })