Libreria SDK PHP per la generazione veloce di una Fattura elettronica italiana in XML (formato FatturaPA)
Branch: master
Clone or download
Latest commit 5214c83 Feb 1, 2019
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
schema Generala lo schema.xml pulito dall'.xsd ufficiale solo la prima volta… Jan 4, 2019
test fix Jan 23, 2019
.gitignore Generala lo schema.xml pulito dall'.xsd ufficiale solo la prima volta… Jan 4, 2019
README.md
fatturapa.php 0.1.3 Feb 1, 2019

README.md

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.

$totale = $fatturapa->set_auto_totali([
  'esigiva' => 'I',	// Esigibilità IVA - https://git.io/fhmDq
]);

Imposta dati pagamento (opzionale)

// Imposta dati pagamento (opzionale)
$fatturapa->set_pagamento([
  // Condizioni pagamento - https://git.io/fhmD8 (default: TP02 = completo)
  'condizioni' => "TP02"
],
[ // Modalità (possibile più di una) https://git.io/fhmDu
  [
    'modalita' => "MP05",	// bonifico
    'totale' => FatturaPA::dec($impTot+$iva),	// totale iva inclusa
    'scadenza' => "2019-02-07",
    'iban' => 'IT88A0123456789012345678901'
  ],
  [
    'modalita' => "MP08",	// carta di pagamento
    'totale' => FatturaPA::dec($impTot+$iva),
    'scadenza' => "2019-02-07",
  ],
]
);

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