/fatturapa

Libreria SDK PHP per la generazione veloce di una Fattura elettronica italiana in XML (formato FatturaPA)

Primary LanguagePHP

FatturaPA

Libreria SDK PHP per la generazione veloce di una Fattura elettronica italiana in XML (formato FatturaPA)

Esempio utilizzo

Include e inizializza classe

require_once('/path/to/fatturapa.php');
$fatturapa = new FatturaPA('FPR12');	// Formato - https://git.io/fhm9g (default: FPR12 = Privati)

Costanti

  • formato (opzionale da passare al costruttore)

Imposta trasmittente (opzionale, altrimenti vengono presi i dati dal mittente)

$fatturapa->set_trasmittente([
  'paese' => "IT",
  'codice' => "CODFSC12A34H567U", // https://forum.italia.it/t/dati-trasmittente-p-iva-o-cf/6883/14
]);

Imposta mittente (fornitore)

// 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",
]);

Costanti

Imposta destinatario (cliente)

$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 altri dati intestazione fattura

// 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",
]);

Costanti

Composizione righe dettaglio

$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;
}

Impostazione totali

$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)
]);

Nota

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.

Costanti

Impostazione automatica 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)

// 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'
]);

Costanti

Aggiunta libera di altri nodi nell'XML FatturaPA

È 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']);

Genera e salva l'XML

@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);