Libreria SDK PHP per la generazione veloce di una Fattura elettronica italiana in XML (formato FatturaPA)
require_once('/path/to/fatturapa.php');
$fatturapa = new FatturaPA('FPR12'); // Formato - https://git.io/fhm9g (default: FPR12 = Privati)
formato
(opzionale da passare al costruttore)
$fatturapa->set_trasmittente([
'paese' => "IT",
'codice' => "CODFSC12A34H567U", // https://forum.italia.it/t/dati-trasmittente-p-iva-o-cf/6883/14
]);
// Imposta mittente (fornitore)
$fatturapa->set_mittente([
// Dati azienda emittente fattura
'ragsoc' => "La Mia Ditta Srl",
'indirizzo' => "Via Italia 12",
'cap' => "00100",
'comune' => "Roma",
'prov' => "RM",
'paese' => "IT",
'piva' => "01234567890",
//'codfisc' => "CODFSC23A45H671U",
// Regime fiscale - https://git.io/fhmMd (default: RF01 = ordinario)
'regimefisc' => "RF19",
]);
$fatturapa->set_destinatario([
// Dati cliente destinatario fattura
'ragsoc' => "Il Mio Cliente Spa",
'indirizzo' => "Via Roma 24",
'cap' => "20121",
'comune' => "Milano",
'prov' => "MI",
'paese' => "IT",
'piva' => "12345678901",
//'codfisc' => "CODFSC23A45H671U",
// Dati SdI (Sistema di Interscambio) del destinatario/cliente
'sdi_codice' => "1234567", // Codice destinatario - da impostare in alternativa alla PEC
'sdi_pec' => "pec@test.com", // PEC destinatario - da impostare in alternativa al Codice
]);
// Imposta dati intestazione fattura
$fatturapa->set_intestazione([
// Tipo documento - https://git.io/fhmMb (default = TD01 = fattura)
'tipodoc' => "TD01",
// Valuta (default = EUR)
'valuta' => "EUR",
// Data e numero fattura
'data' => "2019-01-07",
'numero' => "2019/01",
]);
$imp[1] = 1200;
$imp[2] = 300;
$impTot = 0;
foreach ($imp as $n => $impX)
{
$fatturapa->add_riga([
// Numero progressivo riga dettaglio
'num' => $n,
// Descrizione prodotto/servizio
'descrizione' => "Realizzazione sito internet $n",
// Prezzo unitario del prodotto/servizio
'prezzo' => FatturaPA::dec($impX),
// Quantità
'qta' => FatturaPA::dec(1),
// Prezzo totale (prezzo x qta)
'importo' => FatturaPA::dec($impX), // imponibile riga
// % aliquota IVA
'perciva' => FatturaPA::dec(22),
// (Natura IVA non indicata - https://goo.gl/93RW7v)
//'natura_iva0' => 'N2',
]);
$impTot += $impX;
}
$iva = $impTot/100*22;
$fatturapa->set_totali([
'importo' => FatturaPA::dec($impTot), // imponibile totale
'perciva' => FatturaPA::dec(22),
'iva' => FatturaPA::dec($iva), // calcolo iva
'esigiva' => 'I', // Esigibilità IVA - https://git.io/fhmDq
//'natura_iva0' => 'N2', // (Natura IVA non indicata - https://goo.gl/93RW7v)
]);
In caso di più aliquote IVA, è necessario impostare più totali raggruppando per aliquota: passare un array multiplo alla set_totali
o utilizzare la add_totali
.
In alternativa alla set_totali
, possiamo automaticamente generare i totali in base alle righe aggiunte in fattura.
Tramite la set_auto_totali
è anche possibile applicare automaticamente l'eventuale marca da bollo virtuale.
$totale = $fatturapa->set_auto_totali([ // Merge dati aggiuntivi
'esigiva' => 'I', // esigibilità IVA - https://git.io/fhmDq
], [ // Opzioni
'autobollo' => TRUE // applica bollo virtuale con IVA 0 e importo > 77,47
]);
// Imposta dati pagamento (opzionale) - Una per ogni modalità di pagamento diversa
$fatturapa->add_pagamento([
// Condizioni pagamento - https://git.io/fhmD8 (default: TP02 = completo)
'condizioni' => "TP02"
], [ // Dettaglio pagamento (in caso di più rate, è possibile passare un array di dettagli con scadenze diverse)
// Modalità di pagamento - https://git.io/fhmDu
'modalita' => "MP05", // bonifico
'totale' => FatturaPA::dec($impTot+$iva), // totale iva inclusa
'scadenza' => "2019-02-07",
'iban' => 'IT88A0123456789012345678901'
]);
È possibile impostare/aggiungere ulteriori nodi nell'XML, rispettando le specifiche del formato FatturaPA.
// Impostazione libera nodo singolo
$fatturapa->set_node('FatturaElettronicaHeader/CedentePrestatore/Contatti/Telefono', '+39123456789');
// Aggiunta libera a un elenco (più nodi con lo stesso nome)
$fatturapa->add_node('FatturaElettronicaBody/DatiGenerali/DatiDDT', ['NumeroDDT' => '1', 'DataDDT' => '2019-01-07']);
$fatturapa->add_node('FatturaElettronicaBody/DatiGenerali/DatiDDT', ['NumeroDDT' => '2', 'DataDDT' => '2019-01-10']);
@mkdir('Risultato');
$filename = $fatturapa->filename('00001'); // progressivo da applicare al nome file (univoco, alfanumerico, max 5 caratteri)
$xml = $fatturapa->get_xml();
$file = fopen('Risultato/'.$filename, 'w');
fwrite($file, $xml);
fclose($file);