UNPKG

@openade/fe

Version:

Fatturazione Elettronica - Electronic Invoicing for Sistema di Interscambio (SDI)

279 lines (215 loc) 6.49 kB
# @openade/fe Libreria per Fatturazione Elettronica per SDI (Sistema di Interscambio) italiano. ## Funzionalità - 📄 Generazione XML FatturaPA (formati FPR12/FPA12) - 🧾 Costruttore fatture con calcolo IVA automatico - 📤 Trasmissione SDI via SDICOOP/SDIFTP - 📨 Gestore ricevute (RC, NS, MC, NE, MT, DT) - 🏢 Supporto fatture B2B e B2C - 📋 Tipi documento multipli (TD01-TD28) - ✅ Conforme alle specifiche FatturaPA v1.9 ## Installazione ```bash npm install @openade/fe @openade/common ``` ## Guida Rapida ### 1. Crea Costruttore Fatture ```typescript import { InvoiceBuilder } from '@openade/fe'; const builder = new InvoiceBuilder({ supplierVatNumber: '12345678901', supplierBusinessName: 'My Company S.r.l.', supplierAddress: { indirizzo: 'Via Roma 123', cap: '00100', comune: 'Roma', provincia: 'RM', nazione: 'IT', }, taxRegime: 'RF01', }); ``` ### 2. Costruisci Fattura ```typescript const invoice = builder.build({ customer: { vatNumber: '98765432109', businessName: 'Client S.r.l.', address: { indirizzo: 'Via Milano 1', cap: '20100', comune: 'Milano', nazione: 'IT', }, sdiCode: '0000000', pec: 'client@pec.it', }, invoiceNumber: '2024/001', invoiceDate: '2024-01-15', lines: [ { description: 'Servizio professionale', quantity: 1, unitPrice: 1000.0, vatRate: 22, }, ], paymentMethod: 'MP05', // Bonifico bancario }); ``` ### 3. Genera XML ```typescript import { buildInvoiceXML } from '@openade/fe'; const xml = buildInvoiceXML(invoice); const filename = builder.generateFilename(); // IT12345678901_00001.xml ``` ### 4. Trasmetti a SDI #### SDICOOP (Web Service) - Consigliato ```typescript import { SDIClient } from '@openade/fe'; const sdiClient = new SDIClient({ endpoint: 'https://testservizi.fatturapa.it/services/ricezioneFatture', certPath: './certs/client.crt', keyPath: './certs/client.key', }); const result = await sdiClient.sendInvoice(filename, xml, 'SDICOOP'); if (result.success) { console.log('IdentificativoSdI:', result.identifcativoSdI); } ``` #### SDIFTP (SFTP) - Per Volumi Elevati ```typescript const sdiClient = new SDIClient({ endpoint: 'https://testservizi.fatturapa.it/services/ricezioneFatture', sftp: { host: 'sdi.gov.it', port: 22, username: 'your-username', privateKey: 'your-private-key', // oppure password: 'your-password' uploadDir: '/in', downloadDir: '/out', }, }); const result = await sdiClient.sendInvoice(filename, xml, 'SDIFTP'); if (result.success) { console.log('Fattura caricata con successo!'); // Controlla ricevute in seguito const receipts = await sdiClient.listReceipts(); const allReceipts = await sdiClient.downloadAllReceipts(); } ``` ### 5. Gestisci Ricevute ```typescript import { ReceiptHandler } from '@openade/fe'; const receiptHandler = new ReceiptHandler(); const receipt = receiptHandler.parseReceipt(receiptXml); if (receiptHandler.isSuccessReceipt(receipt)) { console.log('Fattura consegnata!'); } else { const errors = receiptHandler.getErrors(receipt); console.error('Errori:', errors); } ``` ## Tipi Fattura (TipoDocumento) - **TD01**: Fattura standard - **TD04**: Nota di credito - **TD05**: Nota di debito - **TD06**: Parcella - **TD16-TD28**: Vari tipi documento speciali ## Canali di Trasmissione - **SDICOOP**: Web service (SOAP) - consigliato per la maggior parte dei casi - Comunicazione in tempo reale con risposta immediata - Ideale per volumi moderati (fino a ~1000 fatture/giorno) - Risposta immediata `IdentificativoSdI` - Gestione errori più semplice - **SDIFTP**: Trasmissione SFTP - per scenari ad alto volume - Elaborazione batch asincrona - Ideale per volumi elevati (1000+ fatture/giorno) - Richiede configurazione server SFTP - Ricevute scaricate separatamente ## Tipi Ricevuta - **RC**: Ricevuta di Consegna - **NS**: Notifica di Scarto - **MC**: Notifica di Mancata Consegna - **NE**: Notifica Esito (EC01/EC02) - **MT**: Metadati Fattura - **DT**: Attestazione trasmissione con mancata consegna ## Interfaccia Storage Implementa `IFEStorage` per storage personalizzato: ```typescript import { IFEStorage } from '@openade/fe'; class MyStorage implements IFEStorage { async saveInvoice(filename: string, xml: string): Promise<void> { // Salva XML fattura } async loadInvoice(filename: string): Promise<string | null> { // Carica XML fattura } async saveReceipt(filename: string, xml: string): Promise<void> { // Salva XML ricevuta } async loadReceipt(filename: string): Promise<string | null> { // Carica XML ricevuta } async listInvoices(): Promise<string[]> { // Elenca tutte le fatture } async listReceipts(): Promise<string[]> { // Elenca tutte le ricevute } } ``` ## Metodi di Pagamento (ModalitaPagamento) - **MP01**: Contanti - **MP02**: Assegno - **MP03**: Assegno circolare - **MP04**: Contanti presso Tesoreria - **MP05**: Bonifico bancario - **MP08**: Carta di pagamento - **MP12**: RIBA - ... e altri ## Riferimento API ### InvoiceBuilder ```typescript class InvoiceBuilder { constructor(config: InvoiceBuilderConfig); build(data: InvoiceData): FatturaElettronica; generateFilename(): string; resetCounter(): void; getCurrentProgressive(): number; } ``` ### SDIClient ```typescript class SDIClient { constructor(config: SDIClientConfig); sendInvoice( filename: string, xml: string, channel: TransmissionChannel ): Promise<InvoiceTransmissionResult>; queryInvoiceStatus(identifcativoSdI: string): Promise<{ status: string; details?: string }>; downloadReceipt(identifcativoSdI: string): Promise<string | null>; listReceipts(): Promise<string[]>; // Solo SFTP downloadAllReceipts(): Promise<Array<{ filename: string; content: string }>>; // Solo SFTP } ``` ### ReceiptHandler ```typescript class ReceiptHandler { parseReceipt(xml: string, type?: ReceiptType): RicevutaConsegna | NotificaScarto | ... | null; isSuccessReceipt(receipt: any): boolean; getErrors(receipt: any): string[]; } ``` ## Esempi Vedi `examples/fe/` per esempi completi funzionanti. ## Specifiche Basato su: - Specifiche FatturaPA v1.9 - Documentazione Sistema di Interscambio (SDI) - Regolamenti fiscali italiani (DPR 633/72) ## Licenza MIT ## Disclaimer Questa libreria non è affiliata con l'Agenzia delle Entrate. Utilizzare a proprio rischio.