Cosa fa questo modulo
Modulo «Fatturazione PDF + invio mail»: motore di emissione documenti commerciali (fatture, ricevute fiscali, note di credito, proforma, ricevute non fiscali, scontrini cortesia) in formato PDF brandizzato con invio automatico al cliente via email e archiviazione persistente. Si attiva su evento (pagamento Stripe #8324 confermato, prenotazione confermata, ordine chiuso, scadenza abbonamento, intervento erogato, importo dovuto registrato manualmente da operatore) e produce in un colpo solo (1) il documento PDF firmato/numerato, (2) la mail al cliente con PDF in allegato + corpo template, (3) la registrazione contabile interna nel registro emessi con dati per export commercialista. Modello dati: tabella `fatture` (id, numero_progressivo intero+anno per riavvio annuale es. `1/2026`, prefisso opzionale es. `FT-2026-0001` per separare numerazioni multiple per sezionale, tipo `fattura`/`ricevuta`/`nota_credito`/`proforma`/`ricevuta_cortesia`, stato `bozza`/`emessa`/`inviata`/`pagata`/`stornata`/`annullata`, cliente_id FK, data_emissione, data_scadenza, valuta default `EUR`, importo_imponibile, importo_iva, importo_totale, modalita_pagamento `stripe`/`bonifico`/`contanti`/`pos`/`assegno`/`carta_su_terminale`, riferimento_pagamento es. payment_intent Stripe o IBAN, oggetto/causale, note_libere, lingua_documento `it`/`en`/`es`/`de`/`fr`, brand_id per multi-azienda, pdf_path su storage, pdf_hash sha256 per integrità, parent_fattura_id per note credito che stornano fattura originale, fatture_origine JSON per fatture riepilogative che aggregano più consegne, metadata JSON per integrazioni custom), tabella `fattura_righe` (fattura_id, ordine_riga, descrizione, quantita decimale, unita_misura `pezzi`/`ore`/`giorni`/`notti`/`km`/`mq`, prezzo_unitario, aliquota_iva_percent `0`/`4`/`5`/`10`/`22` (Italia) o configurabile per paese, importo_sconto valore o percentuale, importo_imponibile_riga, importo_iva_riga, importo_totale_riga, categoria_merceologica/codice_articolo opzionale, riferimento_origine es. `booking_id`/`order_item_id` per tracciabilità), tabella `clienti_fatturazione` (denominazione/ragione_sociale, nome+cognome se persona fisica, codice_fiscale 16 char it o documento estero, partita_iva opzionale, indirizzo, cap, citta, provincia, paese ISO, email_fatturazione separata da email contatto generale, pec, codice_destinatario SDI 7 char it o `0000000` se PEC, tipo `privato`/`azienda`/`liberoprofessionista`/`pa`, note_interne), tabella `aliquote_iva` (codice, descrizione, percentuale, natura ai sensi DM 17/06/2014 N1-N7 per esenti/non imponibili/escluse, attiva bool, default bool), tabella `sezionali` (codice prefisso, descrizione, contatore, anno_corrente per reset, attivo bool) per gestire più serie numerazione (vendite, note credito, fatture estero, autofatture reverse charge). Eventi di emissione: listener Laravel su `PaymentIntentSucceeded` (#8324 caparra → emette ricevuta acconto + a fine servizio fattura saldo collegata via `parent_booking_id`), `BookingCompleted` (servizio erogato → fattura totale), `SubscriptionRenewed` (abbonamento → fattura periodica ricorrente), `OrderShipped`, comando admin manuale «Emetti fattura» da pannello, comando artisan batch `php artisan fatture:emetti --tipo=fattura --da=ID --a=ID` per emissione massiva da ordini in attesa. Generazione PDF: rendering server-side via `barryvdh/laravel-dompdf` (DOMPDF stabile per template HTML+CSS limitato ma adeguato a fattura standard) oppure `spatie/browsershot` (Puppeteer headless Chromium per layout complessi con tabelle dinamiche, font custom, grafici, watermark, sfondi PDF/A) o `wkhtmltopdf` su server con binario installato; template blade dedicato `resources/views/fatture/template-default.blade.php` con layout A4 portrait standard italiano (header con logo+ragione sociale+sede legale+P.IVA+CF+REA+capitale sociale+telefono+email+sito; sezione cliente destra con denominazione+indirizzo+CF/P.IVA+codice destinatario/PEC; numero fattura+data+pagina x di n; tabella righe con descrizione/qta/UM/prezzo/sconto/imponibile/IVA%/totale; riepilogo IVA per aliquota con base imponibile+IVA+totale per aliquota; totale imponibile+totale IVA+totale documento+arrotondamento; modalità pagamento+IBAN+causale+scadenza; note libere; firma digitale opzionale immagine; footer numerazione progressiva+disclaimer fiscale); supporto template multipli (default minimal, premium con cover, multilingua, specifico per tipo cliente PA con riferimenti CIG/CUP, custom per cliente con logo+colori brand caricabili da UI), preview live in admin con dati mock o reali, watermark «PROFORMA»/«BOZZA»/«COPIA»/«ANNULLATA» se stato non `emessa`, archiviazione PDF su storage configurabile (`local`/`s3`/`backblaze`) con path strutturato `fatture/{anno}/{mese}/{numero}.pdf`, hash sha256 salvato in DB per verifica integrità nel tempo, retention configurabile (default illimitata per requisiti fiscali italiani 10 anni). Numerazione progressiva: vincolo univocità (`numero_progressivo`, `anno`, `sezionale_id`) a livello DB con constraint unique, reset automatico a 1 ogni 1 gennaio, lock pessimistico `SELECT ... FOR UPDATE` su tabella sezionali durante insert per evitare buchi/duplicati in concorrenza, supporto «buchi numerazione» con audit log motivazione (es. fattura annullata per errore battitura prima di invio SDI) con flag `annullata_non_emessa`, validazione no-skip senza giustificazione, possibilità import numerazione esistente da gestionale precedente con offset configurabile. Calcolo IVA e arrotondamenti: motore di calcolo robusto per importi (uso `Decimal`/`BCMath` invece di float per evitare errori 0.1+0.2!=0.3), IVA per riga `prezzo*qta*(1-sconto%)*aliquota%`, totale documento = somma righe + somma IVA per aliquota, arrotondamento al centesimo configurabile (HALF_UP standard italiano, HALF_EVEN banker rounding per finanza), gestione importi netti vs lordi configurabile (alcuni gestionali inseriscono prezzo lordo IVA inclusa e scorporano), supporto regime forfettario (IVA esente con dicitura obbligatoria «Operazione effettuata ai sensi dell'articolo 1, commi da 54 a 89, della Legge 190/2014»), supporto reverse charge B2B intracomunitario (cessione UE senza IVA con dicitura «Inversione contabile art. 17 c.5 DPR 633/72» o «VAT reverse charge»), supporto split payment PA (IVA non incassata, dicitura «scissione dei pagamenti art. 17-ter»), bollo virtuale €2 su importi >€77,47 per regimi senza IVA con addebito al cliente opzionale. Invio email cliente: integrazione con #8331 mail transazionali con template dedicato `fattura_inviata` (oggetto «Fattura n. {{ numero }} del {{ data }} - {{ ragione_sociale_emittente }}», body con saluto personalizzato, dettaglio fattura riassuntivo (numero, data, oggetto, totale, scadenza), CTA per visualizzare/scaricare PDF tramite link firmato Laravel `URL::temporarySignedRoute` con scadenza 30gg, istruzioni pagamento se non già pagata (IBAN+causale o link Stripe payment_links se caparra non versata), allegato PDF (anche con dimensione check max 5MB warning), firma azienda con dati legali, link area cliente #8326 per archivio storico, opzione «Aggiungi alla rubrica per ricevere fatture future a questo indirizzo»), invio sincrono con feedback immediato in admin o asincrono via queue (default) con riconciliazione stato `inviata` su webhook delivery #8331, gestione bounce/spam con suppression e alert admin per riemissione manuale, log tracciamento (sent_at, delivered_at, opened_at, clicked_at) per evidenza legale di consegna. Doppio invio: opzione di copia anche al commercialista/contabile aziendale (campo `email_cc_commercialista` o `email_bcc_archivio_amministrativo` configurabile per brand emittente), copia BCC su email azienda per archivio interno automatico, opzione invio PEC separato se cliente ha PEC (utile per fatture B2B con valore legale). Fatturazione elettronica italiana SDI: modulo opzionale di interoperabilità con Sistema di Interscambio per fatture B2B/B2G obbligatorie via FatturaPA XML (formato `FPA12` per PA, `FPR12` per privati), generazione XML dal record interno (mappatura cliente→CessionarioCommittente, righe→DettaglioLinee, IVA→DatiRiepilogo, codice destinatario SDI 7 caratteri o `0000000` con PEC), firma digitale del file XML via dispositivo CADES/PADES (smartcard, HSM, certificato cloud Aruba/InfoCert/Namirial) integrazione SDK esterno o servizio cloud, trasmissione SDI via canale (SdICoop web service SOAP per integrazione diretta con accreditamento, oppure delega trasmissione a hub commerciali come FattureInCloud/Aruba/Fatture24/TeamSystem/Zucchetti via API che gestiscono accreditamento+firma+trasmissione+conservazione sostitutiva 10 anni a norma DPCM 3/12/2013), gestione esiti SDI (`MC` mancata consegna, `MT` mancato recapito definitivo, `RC` ricevuta consegna, `NS` notifica scarto con codice errore numerico es. `00400` natura non compilata, `EC01/EC02` notifica esito accettazione/rifiuto cliente PA), workflow correzione e ritrasmissione se scarto entro 5 giorni, alert admin per scarti con istruzioni risolutive, log delle ricevute SDI come allegati alla fattura. Conservazione sostitutiva: integrazione con conservatore accreditato AgID per pacchetto di archiviazione decennale norma legge italiana, hash documento + marca temporale rilasciata da TSA, manuale conservazione versionato, possesso o delega responsabile conservazione, esposizione pacchetto di distribuzione per export ad altro conservatore (no lock-in). Documenti collegati: nota di credito che stornare totalmente/parzialmente fattura emessa con `parent_fattura_id` (riferimento obbligatorio, importi negativi righe stornate, motivazione obbligatoria es. «Storno per errore quantità», emissione automatica al rimborso Stripe #8324 con ricalcolo IVA), fattura riepilogativa mensile che aggrega più DDT/consegne in unico documento ai sensi art. 21 c.4 DPR 633/72 (lettera b - art. 21-bis), ricevuta non fiscale per privati senza P.IVA che non richiedono fattura (es. cliente privato HSD che richiede solo ricevuta cortesia), proforma per preventivi accettati prima di emissione fattura definitiva (utile per anticipi senza valore fiscale finché non incassati). Cliente e anagrafica: form smart con auto-completamento da P.IVA via web service VIES (verifica P.IVA UE) o Registro Imprese InfoCamere (anagrafica italiana completa con denominazione+sede+CF+iscrizione REA+stato), validazione codice fiscale 16 char italiano con algoritmo controllo, validazione codice destinatario SDI 7 char (o PEC obbligatoria se 0000000), gestione clienti privati senza P.IVA (CF obbligatorio per fattura b2c), import clienti da CSV/Excel batch con preview e validazione, integrazione con modulo CRUD anagrafiche #8327 per usare stessa fonte clienti del CRM. Pannello admin: lista fatture con filtri avanzati (anno, mese, cliente, stato, tipo, importo range, scadute non pagate, da inviare SDI, da rispedire), datatable Livewire con sort+paginazione+ricerca, riga con badge stato colorato (giallo bozza, blu emessa, verde pagata, rosso scaduta, grigio annullata), bulk action (invia mail, stampa, export PDF zip, marca pagate, esporta XML SDI), dettaglio fattura con timeline eventi (created, emessa, inviata, aperta dal cliente, pagata, scaduta), edit righe se stato bozza, lock se emessa con possibilità solo storno via nota credito, allegati documenti correlati (contratto, DDT, certificato), note interne operatore non visibili al cliente, log invii mail con stato delivery, log trasmissioni SDI con ricevute, audit trail #8330 con `before`/`after` per ogni modifica admin. Scadenzario e solleciti: vista «scadenzario» con fatture non pagate ordinate per data scadenza, alert giorni residui (verde >30gg, giallo 15-30gg, arancione 0-15gg, rosso scadute), invio automatico solleciti via #8331 (template `sollecito_pagamento_garbato` -7gg dalla scadenza, `sollecito_pagamento_fermo` +7gg post scadenza, `sollecito_pagamento_finale` +30gg con preavviso azioni legali), tracking incassi con marcatura manuale o automatica da webhook bonifico bancario (integrazione futura) o Stripe (#8324) o POS (campo `pagato_il`, `metodo_pagamento`, `riferimento_incasso`), gestione pagamenti parziali con tabella `incassi` (fattura_id, importo, data, metodo, riferimento) e calcolo residuo, export saldi clienti per agente recupero crediti. Multi-brand e multi-tenant: supporto multi-azienda emittente (un'app SaaS serve più clienti finali, ognuno emette fatture proprie con propria P.IVA, propri sezionali, proprio logo e template, proprio canale SDI), tabella `brands_fatturazione` (denominazione, P.IVA, CF, indirizzo, REA, capitale sociale, logo, colore primario template, IBAN, regime fiscale, sezionale_default, conservatore_accreditato), policy Laravel su accesso fatture per brand (operatore brand A non vede fatture brand B). Dashboard KPI: fatturato totale per anno/mese con confronto YoY, fatturato per cliente (top 10), fatturato per categoria/prodotto, IVA da versare per liquidazione periodica (mensile o trimestrale), distribuzione metodi pagamento, % crediti incassati vs scaduti, DSO (Days Sales Outstanding) medio, grafico storico emissione documenti, export per commercialista (formati: Excel registro IVA acquisti+vendite, XML pacchetto SDI riepilogativo, CSV clienti+righe per import in gestionale commercialista come Profis/B-Point/TeamSystem). Export e integrazioni: export Excel via #8328 con tutte le fatture del periodo per registro IVA vendite formato standard commercialista (data, numero, cliente, P.IVA/CF, imponibile, IVA, totale, conto contabile), export PDF zip massivo per archivio mensile/annuale, export XML cartella SDI completa, API REST autenticate con Sanctum per integrazioni terze (es. gestionale interno cliente che query fatture per riconciliazione contabile), webhook su evento fattura (`fattura.emessa`, `fattura.pagata`, `fattura.scaduta`, `fattura.stornata`) consumabili da sistemi esterni. Sicurezza e compliance: GDPR (dati cliente come dati personali, registro trattamenti, base giuridica obbligo legale fatturazione, retention 10 anni norma fiscale, anonimizzazione cliente con `right to be forgotten` post 10 anni mantenendo aggregati anonimizzati), accesso fatture controllato via policy Laravel (admin tutto, contabile read+invia+marca pagamento, operatore visualizza, cliente solo proprie via area #8326), download PDF via URL firmato non indicizzabile da search engine, validazione integrità PDF (hash) prima di mostrare a cliente (alert se manomesso), audit log #8330 immutabile per ogni operazione su fattura. Comandi artisan: `php artisan fatture:emetti-da-evento {id}` (rigenera fattura da evento sorgente), `php artisan fatture:invia-pendenti` (cron orario, invia fatture in stato `emessa` non ancora `inviata` per ritentativi failure), `php artisan fatture:invia-solleciti` (cron giornaliero, scansione scadenzario), `php artisan fatture:rigenera-pdf {id?}` (rigenera PDF mantenendo numero e dati originali se template aggiornato), `php artisan fatture:export-xml-sdi --da=AAAA-MM --a=AAAA-MM` (esporta pacchetto XML per trasmissione SDI batch), `php artisan fatture:verifica-integrita` (controllo hash PDF storage vs DB, alert mismatch). Casi d'uso: noleggi HSD (caparra → ricevuta acconto, saldo + cauzione al ritiro → fattura definitiva con righe noleggio+km+assicurazione+cauzione restituita post-rientro), studi medici/professionali (prestazione erogata → fattura con IVA al 22% o regime forfettario senza IVA, marca da bollo se >€77,47 esente IVA, eventuale invio SDI se cliente azienda), e-commerce (ordine pagato → fattura automatica con righe prodotti+spedizione+sconti, invio mail+SDI se richiesto in checkout), corsi/eventi/abbonamenti (iscrizione pagata → ricevuta o fattura per partita IVA, ricorrente per abbonamenti mensili/annuali), B&B/hotel (prenotazione completata → fattura/ricevuta con righe notti+tassa soggiorno+extra+sconti), ristorazione (scontrino fiscale cortesia con righe tavolo+coperti+IVA per aziende che richiedono giustificativo). Differenza da gestionali completi (TeamSystem, Zucchetti, Sage, Fatture24, FattureInCloud full): qui motore integrato all'app che evita esportazioni manuali e doppia immissione dati, focus emissione automatica da evento applicativo, integrazione UX-first con flusso prodotto (cliente prenota → conferma + fattura in stessa sessione), no doppia anagrafica. Differenza da semplice generazione PDF senza tracking (es. tool standalone DOMPDF in script): qui ciclo completo emissione+invio+archivio+pagamento+sollecito+SDI+conservazione. Differenza da bottoncino «scarica PDF» in checkout (statico, no numerazione, no archivio): qui documento ha valenza fiscale, numerazione progressiva univoca, traccia legale di emissione e consegna. Integrazione tipica: #8324 prenotazione con caparra Stripe (emette ricevuta acconto + fattura saldo collegate), #8327 anagrafica clienti (fonte unica clienti CRM+fatturazione), #8328 export Excel/PDF (export massivo per commercialista), #8330 audit log (tracciamento mutazioni), #8331 mail transazionali (template invio+sollecito), #8326 area cliente (storico fatture self-service download). Estensioni future: AI per OCR fatture passive ricevute via mail per riconciliazione automatica acquisti (#8338 OCR), AI per suggerimento prezzo dinamico per cliente storico (analisi marginalità), integrazione fatturazione cross-border B2B UE con OSS/IOSS per servizi digitali, gestione split payment automatico per PA con verifica codice IPA, integrazione CBE/CSE Cassa Edile per settore edile, integrazione canone RAI/Enasarco/INPS gestione separata per professionisti, integrazione bonus fiscali (es. Sismabonus, Ecobonus) con sezione dedicata fattura. Costo: 3-4 giorni modello dati + migration + seeder aliquote IVA + sezionali, 3-4 giorni motore emissione + numerazione progressiva con lock + calcolo IVA + arrotondamenti + storico, 3-4 giorni rendering PDF DOMPDF/Browsershot + template default+premium + multilingua + watermark + brand customization, 2-3 giorni listener eventi + email transazionale + invio + tracking delivery + log, 3-5 giorni fatturazione elettronica SDI XML FatturaPA + firma digitale + trasmissione (in-house o hub) + gestione esiti + scarto/correzione, 2-3 giorni admin panel datatable + scadenzario + solleciti + dashboard KPI, 2 giorni export commercialista (Excel registri IVA + XML pacchetto SDI + CSV clienti), 1-2 giorni conservazione sostitutiva integrazione (se richiesta in-house) o setup conservatore esterno (hub gestisce), 1-2 giorni testing flussi (emissione, invio, scarto SDI, nota credito, storno, ricarico, anno nuovo reset numerazione). Dipendenze: account email transazionale via #8331, opzionale account SDI o hub commerciale (FattureInCloud/Aruba/Fatture24 da €5-30/mese per emissioni illimitate), opzionale certificato firma digitale (€30-80/anno smartcard, €70-150/anno HSM cloud), opzionale conservatore accreditato AgID (€3-10/mese per progetto medio), modulo #8327 anagrafiche clienti consigliato per evitare doppia immissione, #8328 export Excel per registri IVA, #8330 audit log per immutabilità log.
Esempi d'uso
Disponibile nei pacchetti