### Install Fattura Elettronica Package Source: https://github.com/fatturaelettronicaphp/fatturaelettronica/blob/master/README.md Install the package using Composer. Requires PHP 7.3+ or 8.0+. ```bash composer require fatturaelettronicaphp/fattura-elettronica ``` -------------------------------- ### Payment Information Source: https://context7.com/fatturaelettronicaphp/fatturaelettronica/llms.txt This section covers the management of payment data (`DatiPagamento`) using `PaymentInfo` for general conditions and `PaymentDetails` for individual due dates, supporting multiple installments and payment methods. ```APIDOC ## Pagamenti — `PaymentInfo` e `PaymentDetails` Gestione dei dati di pagamento (`DatiPagamento`) con supporto a più rate e modalità di pagamento, mappati tramite `PaymentInfo` (condizioni generali) e `PaymentDetails` (dettaglio di ogni scadenza). ```php use FatturaElettronicaPhp\FatturaElettronica\DigitalDocument; use FatturaElettronicaPhp\FatturaElettronica\PaymentInfo; use FatturaElettronicaPhp\FatturaElettronica\PaymentDetails; $eDocument = DigitalDocument::parseFrom('/path/to/fattura.xml'); $instance = $eDocument->getDocumentInstances()[0]; // Lettura pagamenti foreach ($instance->getPaymentInformations() as $paymentInfo) { echo $paymentInfo->getPaymentTerms(); // "TP02" (pagamento completo) foreach ($paymentInfo->getPaymentDetails() as $detail) { echo $detail->getPaymentMethod(); // "MP05" (bonifico) echo $detail->getPaymentAmount(); // 1220.00 echo $detail->getDueDate()->format('Y-m-d'); // "2024-04-15" echo $detail->getIban(); // "IT60X0542811101000000123456" } } // Aggiunta pagamento a una nuova fattura $paymentInfo = new PaymentInfo(); $paymentInfo->setPaymentTerms('TP02'); $detail = new PaymentDetails(); $detail->setPaymentMethod('MP05') ->setPaymentAmount(1220.00) ->setDueDate(new \DateTime('2024-04-15')) ->setIban('IT60X0542811101000000123456'); $paymentInfo->addPaymentDetails($detail); $instance->addPaymentInformations($paymentInfo); ``` ``` -------------------------------- ### Get Customer Information Source: https://github.com/fatturaelettronicaphp/fatturaelettronica/blob/master/docs/manipulating/header.md Retrieves the customer object from the DigitalDocument. This object contains the customer's details. ```php /** @var atturaelettronicaphp atturaelettronica ecipient $customer **/ $customer = $edocument->getcustomer(); ``` -------------------------------- ### Get Customer's Anagrafici Data Source: https://github.com/fatturaelettronicaphp/fatturaelettronica/blob/master/docs/manipulating/header.md Extracts the organization name and VAT number from the customer object. These fields are essential for identifying the customer. ```php /** @var string $nomeOrganizzazione **/ $nomeOrganizzazione = $customer->getorganization(); /** @var string $partitaIva **/ $partitaIva = $customer->getvatnumber(); ``` -------------------------------- ### Extract Document Instance Data Source: https://github.com/fatturaelettronicaphp/fatturaelettronica/blob/master/docs/manipulating/README.md Iterate through document instances to get the document date and number. This is useful for processing multiple invoices or related documents within a single XML file. ```php $xml = '/path/to/file.xml'; $eDocument = \Weble\FatturaElettronica\DigitalDocument::parseFrom($xml); $documents = $eDocument->getDocumentInstances(); /** @var \Weble\FatturaElettronica\DigitalDocumentInstance $document **/ foreach ($documents as $document) { $document->getDocumentDate(); $document->getDocumentNumber(); } ``` -------------------------------- ### Scrivere un File XML di Fattura Elettronica Source: https://github.com/fatturaelettronicaphp/fatturaelettronica/blob/master/docs/writing/README.md Utilizza il metodo `write` per salvare un oggetto `DigitalDocument` su file. Specifica un percorso completo per un nome file specifico o una directory per generare il nome file automaticamente secondo le convenzioni SDI. ```php $eDocument = new DigitalDocument(); $eDocument->setTransmissionFormat('FPR12'); $eDocument->write($filePath); ``` -------------------------------- ### Generare e Leggere Fattura Elettronica Semplificata (FSM10) Source: https://context7.com/fatturaelettronicaphp/fatturaelettronica/llms.txt Crea una Fattura Elettronica Semplificata impostando il formato 'FSM10' e utilizzando oggetti 'SimplifiedLine'. Mostra anche come leggere queste righe da un file XML esistente. ```php use FatturaElettronicaPhp\FatturaElettronica\DigitalDocument; use FatturaElettronicaPhp\FatturaElettronica\DigitalDocumentInstance; use FatturaElettronicaPhp\FatturaElettronica\SimplifiedLine; $eDocument = new DigitalDocument(); $eDocument->setTransmissionFormat('FSM10'); // Formato semplificato // isSimplified() restituisce true var_dump($eDocument->isSimplified()); // bool(true) $instance = new DigitalDocumentInstance(); $instance->setDocumentType('TD07') // Fattura semplificata ->setDocumentNumber('2024/S001') ->setDocumentDate(new \DateTime('2024-03-15')) ->setCurrency('EUR'); // Aggiunta di righe semplificate (supporta più righe dalla v2.3.0) $line1 = new SimplifiedLine(); $line1->setNumber(1) ->setDescription('Servizio A') ->setTaxRate(22.0) ->setNature(null) ->setTaxableAmount(100.00) ->setTaxAmount(22.00); $instance->addSimplifiedLine($line1); $line2 = new SimplifiedLine(); $line2->setNumber(2) ->setDescription('Servizio B') ->setTaxRate(10.0) ->setTaxableAmount(200.00) ->setTaxAmount(20.00); $instance->addSimplifiedLine($line2); $eDocument->addDigitalDocumentInstance($instance); // Lettura delle righe semplificate da file esistente $parsed = DigitalDocument::parseFrom('/path/to/fattura_semplificata.xml'); $parsedInstance = $parsed->getDocumentInstances()[0]; foreach ($parsedInstance->getSimplifiedLines() as $sl) { echo $sl->getDescription(); // "Servizio A" echo $sl->getTaxableAmount(); // 100.00 echo $sl->getTaxAmount(); // 22.00 } ``` -------------------------------- ### Run Package Tests Source: https://github.com/fatturaelettronicaphp/fatturaelettronica/blob/master/README.md Execute the package's test suite using Composer. ```bash composer test ``` -------------------------------- ### Leggere Detrazioni, Sconti e Casse Previdenziali da Fattura XML Source: https://context7.com/fatturaelettronicaphp/fatturaelettronica/llms.txt Estrae informazioni su ritenute, sconti, maggiorazioni e contributi previdenziali da un documento Fattura Elettronica XML esistente. Assicura che il documento sia stato precedentemente parsato. ```php use FatturaElettronicaPhp\FatturaElettronica\DigitalDocument; use FatturaElettronicaPhp\FatturaElettronica\Deduction; use FatturaElettronicaPhp\FatturaElettronica\Discount; use FatturaElettronicaPhp\FatturaElettronica\Fund; $eDocument = DigitalDocument::parseFrom('/path/to/fattura.xml'); $instance = $eDocument->getDocumentInstances()[0]; // Lettura ritenuta singola echo $instance->getDeductionType(); // DeductionType("RT01") echo $instance->getDeductionPercentage(); // 20.0 echo $instance->getDeductionAmount(); // 200.00 // Lettura ritenute multiple if ($instance->hasMultipleDeductions()) { foreach ($instance->getDeductions() as $deduction) { echo $deduction->getType(); // DeductionType echo $deduction->getAmount(); // float echo $deduction->getPercentage(); // float } } // Lettura sconti a livello di documento foreach ($instance->getDiscounts() as $discount) { echo $discount->getType(); // "SC" (sconto) o "MG" (maggiorazione) echo $discount->getPercentage(); // 5.0 echo $discount->getAmount(); // 50.00 } // Lettura cassa previdenziale foreach ($instance->getFunds() as $fund) { echo $fund->getType(); // "TC01" (Cassa Nazionale Previdenza) echo $fund->getPercentage(); // 4.0 echo $fund->getAmount(); // 40.00 echo $fund->getTaxRate(); // 22.0 } ``` -------------------------------- ### Serializzare un Oggetto DigitalDocument in SimpleXMLElement Source: https://github.com/fatturaelettronicaphp/fatturaelettronica/blob/master/docs/writing/README.md Converte un'istanza di `DigitalDocument` (che implementa `DigitalDocumentInterface`) in un oggetto `SimpleXMLElement` utilizzando il metodo `serialize`. Questo è utile per ispezionare o manipolare ulteriormente la struttura XML prima della scrittura. ```php $eDocument = new DigitalDocument(); $eDocument->setTransmissionFormat('FPR12'); /** @var \SimpleXMLElement $xml **/ $xml = $eDocument->serialize(); ``` -------------------------------- ### Controllare la validità del documento XML Source: https://github.com/fatturaelettronicaphp/fatturaelettronica/blob/master/docs/validating/README.md Utilizza questo snippet per verificare se un documento XML di fattura elettronica è valido secondo lo schema ufficiale. Restituisce un valore booleano. ```php $xml = '/path/to/file.xml'; $eDocument = \Weble\FatturaElettronica\DigitalDocument::parseFrom($xml); // true / False $eDocument->isValid(); ``` -------------------------------- ### Manage Payment Information in Fattura Elettronica PHP Source: https://context7.com/fatturaelettronicaphp/fatturaelettronica/llms.txt Shows how to read payment details (terms, method, amount, due date, IBAN) from an existing invoice and how to add new payment information to a new invoice. ```php use FatturaElettronicaPhp\FatturaElettronica\DigitalDocument; use FatturaElettronicaPhp\FatturaElettronica\PaymentInfo; use FatturaElettronicaPhp\FatturaElettronica\PaymentDetails; $eDocument = DigitalDocument::parseFrom('/path/to/fattura.xml'); $instance = $eDocument->getDocumentInstances()[0]; // Lettura pagamenti foreach ($instance->getPaymentInformations() as $paymentInfo) { echo $paymentInfo->getPaymentTerms(); // "TP02" (pagamento completo) foreach ($paymentInfo->getPaymentDetails() as $detail) { echo $detail->getPaymentMethod(); // "MP05" (bonifico) echo $detail->getPaymentAmount(); // 1220.00 echo $detail->getDueDate()->format('Y-m-d'); // "2024-04-15" echo $detail->getIban(); // "IT60X0542811101000000123456" } } // Aggiunta pagamento a una nuova fattura $paymentInfo = new PaymentInfo(); $paymentInfo->setPaymentTerms('TP02'); $detail = new PaymentDetails(); $detail->setPaymentMethod('MP05') ->setPaymentAmount(1220.00) ->setDueDate(new \DateTime('2024-04-15')) ->setIban('IT60X0542811101000000123456'); $paymentInfo->addPaymentDetails($detail); $instance->addPaymentInformations($paymentInfo); ``` -------------------------------- ### Use Enum Classes for Fattura Elettronica Codes Source: https://context7.com/fatturaelettronicaphp/fatturaelettronica/llms.txt Illustrates how to use strongly-typed enum classes to represent official codes from the Agenzia delle Entrate, avoiding magic strings for document types, tax regimes, transmission formats, VAT natures, payment methods, deduction types, and recipient codes. ```php use FatturaElettronicaPhp\FatturaElettronica\Enums\DocumentType; use FatturaElettronicaPhp\FatturaElettronica\Enums\TaxRegime; use FatturaElettronicaPhp\FatturaElettronica\Enums\TransmissionFormat; use FatturaElettronicaPhp\FatturaElettronica\Enums\VatNature; use FatturaElettronicaPhp\FatturaElettronica\Enums\PaymentMethod; use FatturaElettronicaPhp\FatturaElettronica\Enums\DeductionType; use FatturaElettronicaPhp\FatturaElettronica\Enums\RecipientCode; // Tipo documento $tipo = new DocumentType('TD01'); // Fattura $tipo = new DocumentType('TD04'); // Nota di credito $tipo = new DocumentType('TD24'); // Fattura differita art. 21 // Regime fiscale $regime = new TaxRegime('RF01'); // Regime ordinario $regime = new TaxRegime('RF19'); // Regime forfettario // Formato trasmissione $formato = new TransmissionFormat('FPR12'); // Fattura tra privati B2B $formato = new TransmissionFormat('FPA12'); // Fattura Pubblica Amministrazione $formato = new TransmissionFormat('FSM10'); // Fattura Semplificata // Natura IVA (per operazioni esenti/escluse) $natura = new VatNature('N1'); // Escluse ex art. 15 $natura = new VatNature('N2.1'); // Non soggette ad IVA $natura = new VatNature('N4'); // Esenti // Metodo di pagamento $pagamento = new PaymentMethod('MP01'); // Contanti $pagamento = new PaymentMethod('MP05'); // Bonifico $pagamento = new PaymentMethod('MP08'); // Carta di pagamento // Tipo ritenuta $ritenuta = new DeductionType('RT01'); // Ritenuta persone fisiche $ritenuta = new DeductionType('RT02'); // Ritenuta persone giuridiche // Codice destinatario di default echo RecipientCode::EMPTY; // "0000000" (cliente privato B2C senza codice) echo RecipientCode::FOREIGN; // "XXXXXXX" (cliente estero) ``` -------------------------------- ### Manage Attachments in Fattura Elettronica PHP Source: https://context7.com/fatturaelettronicaphp/fatturaelettronica/llms.txt Demonstrates how to read, decode, and save attachments from an existing electronic invoice, and how to add new attachments to a new invoice. ```php use FatturaElettronicaPhp\FatturaElettronica\DigitalDocument; use FatturaElettronicaPhp\FatturaElettronica\Attachment; // Lettura allegati da una fattura esistente $eDocument = DigitalDocument::parseFrom('/path/to/fattura.xml'); $instances = $eDocument->getDocumentInstances(); foreach ($instances[0]->getAttachments() as $attachment) { echo $attachment->getName(); // "documento_contratto.pdf" echo $attachment->getFormat(); // "PDF" echo $attachment->getDescription(); // "Contratto di riferimento" // Decodifica e salvataggio su disco $savedPath = $attachment->writeFileToFolder('/path/to/output/'); echo "Allegato salvato in: {$savedPath}"; // Accesso ai dati binari decodificati $binaryData = $attachment->getFileData(); file_put_contents('/path/to/output/' . $attachment->getName(), $binaryData); } // Aggiunta di un allegato a una nuova fattura $newAttachment = new Attachment(); $newAttachment->setName('contratto.pdf') ->setFormat('PDF') ->setDescription('Contratto allegato') ->setAttachment(base64_encode(file_get_contents('/path/to/contratto.pdf'))); $instance = $eDocument->getDocumentInstances()[0]; $instance->addAttachment($newAttachment); ``` -------------------------------- ### Controllare eventuali errori di validazione del documento XML Source: https://github.com/fatturaelettronicaphp/fatturaelettronica/blob/master/docs/validating/README.md Questo snippet recupera un elenco dettagliato degli errori di validazione per un documento XML di fattura elettronica. Gli errori sono mappati ai percorsi XML corrispondenti. ```php $xml = '/path/to/file.xml'; $eDocument = \Weble\FatturaElettronica\DigitalDocument::parseFrom($xml); $errors = $eDocument->validate()->errors(); // [ // '/path/to/xml/wrong/field' => [ // 'First Error', // 'Second Error' // ] // ] ``` -------------------------------- ### Parse Fattura Elettronica XML Source: https://github.com/fatturaelettronicaphp/fatturaelettronica/blob/master/docs/manipulating/README.md Use DigitalDocument::parseFrom() to load an XML file. Access customer, supplier, and document instances from the parsed object. ```php $xml = '/path/to/file.xml'; $eDocument = \Weble\FatturaElettronica\DigitalDocument::parseFrom($xml); /** @var \Weble\FatturaElettronica\Customer $customer **/ $customer = $eDocument->getCustomer(); /** @var \Weble\FatturaElettronica\Supplier $supplier **/ $supplier = $eDocument->getSupplier(); /** @var \Weble\FatturaElettronica\DigitalDocument[] $documents **/ $documents = $eDocument->getDocumentInstances(); $customer->getOrganization(); $customer->getVatNumber(); ``` -------------------------------- ### Read Fattura Elettronica Body Details Source: https://context7.com/fatturaelettronicaphp/fatturaelettronica/llms.txt Iterate through `DigitalDocumentInstance` objects obtained from `DigitalDocument::getDocumentInstances()` to access details of each invoice body, including general data, lines, totals, and attachments. ```php use FatturaElettronicaPhp\FatturaElettronica\DigitalDocument; $eDocument = DigitalDocument::parseFrom('/path/to/fattura.xml'); /** @var \FatturaElettronicaPhp\FatturaElettronica\DigitalDocumentInstance[] $instances */ $instances = $eDocument->getDocumentInstances(); foreach ($instances as $instance) { echo $instance->getDocumentNumber(); // "2024/001" echo $instance->getDocumentDate()->format('Y-m-d'); // "2024-03-15" echo $instance->getDocumentType(); // "TD01" (fattura) echo $instance->getCurrency(); // "EUR" echo $instance->getDocumentTotal(); // 1220.00 // Lettura delle righe del corpo fattura foreach ($instance->getLines() as $line) { echo $line->getNumber(); // 1 echo $line->getDescription(); // "Servizi di consulenza" echo $line->getQuantity(); // 10.0 echo $line->getUnitPrice(); // 100.0 echo $line->getTotal(); // 1000.0 echo $line->getTaxPercentage(); // 22.0 } // Lettura dei totali IVA foreach ($instance->getTotals() as $total) { echo $total->getTaxableAmount(); // 1000.00 echo $total->getTaxRate(); // 22.0 echo $total->getTaxAmount(); // 220.00 echo $total->getTotal(); // 1220.00 } // Calcolo del totale IVA echo $instance->calculateDocumentTotalTaxAmount(); // 220.00 } ``` -------------------------------- ### Parse Electronic Invoice from P7M File Source: https://github.com/fatturaelettronicaphp/fatturaelettronica/blob/master/docs/parsing/README.md Load invoice data from a .p7m file by passing its path to DigitalDocument::parseFrom(). ```php $p7m = '/path/to/file.xml.p7m'; $eDocument = DigitalDocument::parseFrom($p7m); ``` -------------------------------- ### Attachment Management Source: https://context7.com/fatturaelettronicaphp/fatturaelettronica/llms.txt This section details how to manage attachments within the Fattura Elettronica library, including reading, decoding, and writing attachments to disk, as well as adding new attachments to a digital document. ```APIDOC ## `Attachment` — Gestione degli allegati La classe `Attachment` rappresenta il nodo `` della fattura elettronica. Supporta la lettura del contenuto base64, la decodifica e la scrittura del file allegato su disco. ```php use FatturaElettronicaPhp\FatturaElettronica\DigitalDocument; use FatturaElettronicaPhp\FatturaElettronica\Attachment; // Lettura allegati da una fattura esistente $eDocument = DigitalDocument::parseFrom('/path/to/fattura.xml'); $instances = $eDocument->getDocumentInstances(); foreach ($instances[0]->getAttachments() as $attachment) { echo $attachment->getName(); // "documento_contratto.pdf" echo $attachment->getFormat(); // "PDF" echo $attachment->getDescription(); // "Contratto di riferimento" // Decodifica e salvataggio su disco $savedPath = $attachment->writeFileToFolder('/path/to/output/'); echo "Allegato salvato in: {$savedPath}"; // Accesso ai dati binari decodificati $binaryData = $attachment->getFileData(); file_put_contents('/path/to/output/' . $attachment->getName(), $binaryData); } // Aggiunta di un allegato a una nuova fattura $newAttachment = new Attachment(); $newAttachment->setName('contratto.pdf') ->setFormat('PDF') ->setDescription('Contratto allegato') ->setAttachment(base64_encode(file_get_contents('/path/to/contratto.pdf'))); $instance = $eDocument->getDocumentInstances()[0]; $instance->addAttachment($newAttachment); ``` ``` -------------------------------- ### `DigitalDocumentInstance` - Reading the invoice body Source: https://context7.com/fatturaelettronicaphp/fatturaelettronica/llms.txt Each electronic invoice file can contain multiple invoice bodies. Each `DigitalDocumentInstance` represents one body and provides access to general data, line items, totals, payments, and attachments. ```APIDOC ## `DigitalDocumentInstance` - Reading the invoice body Each XML file can contain multiple invoices (`FatturaElettronicaBody`). Each `DigitalDocumentInstance` represents a body and contains general data, lines, totals, payments, and attachments. ### Method Access via `$eDocument->getDocumentInstances()` after parsing with `DigitalDocument::parseFrom()`. ### Parameters This section describes how to access data from a `DigitalDocumentInstance` object. ### Response Example (Accessing Body Data) ```php use FatturaElettronicaPhp\FatturaElettronica\DigitalDocument; $eDocument = DigitalDocument::parseFrom('/path/to/fattura.xml'); /** @var \FatturaElettronicaPhp\FatturaElettronica\DigitalDocumentInstance[] $instances */ $instances = $eDocument->getDocumentInstances(); foreach ($instances as $instance) { echo $instance->getDocumentNumber(); // "2024/001" echo $instance->getDocumentDate()->format('Y-m-d'); // "2024-03-15" echo $instance->getDocumentType(); // "TD01" (invoice) echo $instance->getCurrency(); // "EUR" echo $instance->getDocumentTotal(); // 1220.00 // Reading invoice body lines foreach ($instance->getLines() as $line) { echo $line->getNumber(); // 1 echo $line->getDescription(); // "Consulting services" echo $line->getQuantity(); // 10.0 echo $line->getUnitPrice(); // 100.0 echo $line->getTotal(); // 1000.0 echo $line->getTaxPercentage(); // 22.0 } // Reading VAT totals foreach ($instance->getTotals() as $total) { echo $total->getTaxableAmount(); // 1000.00 echo $total->getTaxRate(); // 22.0 echo $total->getTaxAmount(); // 220.00 echo $total->getTotal(); // 1220.00 } // Calculating the total VAT amount echo $instance->calculateDocumentTotalTaxAmount(); // 220.00 } ``` ``` -------------------------------- ### Parse Electronic Invoice from XML File Source: https://github.com/fatturaelettronicaphp/fatturaelettronica/blob/master/docs/parsing/README.md Use DigitalDocument::parseFrom() with an XML file path to load invoice data. Access customer, supplier, and document instances after parsing. ```php $xml = '/path/to/file.xml'; $eDocument = DigitalDocument::parseFrom($xml); /** @var \FatturaElettronicaPhp\FatturaElettronica\Customer $customer **/ $customer = $digitalDocument->getCustomer(); /** @var \FatturaElettronicaPhp\FatturaElettronica\Supplier $supplier **/ $supplier = $digitalDocument->getSupplier(); /** @var \FatturaElettronicaPhp\FatturaElettronica\DigitalDocument[] $documents **/ $documents = $digitalDocument->getDocumentInstances(); $customer->getOrganization(); // Alpha Srl $customer->getVatNumber(); // 03412317712 /** @var \FatturaElettronicaPhp\FatturaElettronica\DigitalDocument $document **/ foreach ($documents as $document) { $document->getDocumentDate(); // \DateTime $document->getDocumentNumber(); // 123 } ``` -------------------------------- ### Extract Customer Data Source: https://github.com/fatturaelettronicaphp/fatturaelettronica/blob/master/docs/manipulating/README.md Retrieve customer information such as name, VAT number, and address details after parsing the XML. Ensure the customer object is correctly obtained from the eDocument. ```php $xml = '/path/to/file.xml'; $eDocument = \Weble\FatturaElettronica\DigitalDocument::parseFrom($xml); /** @var \Weble\FatturaElettronica\Customer $customer **/ $customer = $eDocument->getCustomer(); $customer->getName(); $customer->getVatNumber(); $customer->getSurname(); $customer->getOrganization(); $customer->getCountryCode(); $customer->getFiscalCode (); $customer->getTitle(); $customer->getEori(); $customer->getRepresentative(); ``` -------------------------------- ### DigitalDocument::write() Source: https://context7.com/fatturaelettronicaphp/fatturaelettronica/llms.txt Generates and writes the electronic invoice XML file to a specified path or directory. Supports automatic file naming and pretty-print formatting. ```APIDOC ## `DigitalDocument::write()` — Scrittura di una fattura elettronica su file Genera e scrive il file XML della fattura elettronica nel percorso specificato. Se viene passata una directory, il file viene nominato automaticamente secondo il formato SDI (es. `IT01234567890_00001.xml`). Supporta la formattazione "pretty print" con il secondo parametro opzionale. ```php use FatturaElettronicaPhp\FatturaElettronica\DigitalDocument; use FatturaElettronicaPhp\FatturaElettronica\DigitalDocumentInstance; use FatturaElettronicaPhp\FatturaElettronica\Customer; use FatturaElettronicaPhp\FatturaElettronica\Supplier; use FatturaElettronicaPhp\FatturaElettronica\Line; use FatturaElettronicaPhp\FatturaElettronica\Total; use FatturaElettronicaPhp\FatturaElettronica\Address; $eDocument = new DigitalDocument(); $eDocument->setTransmissionFormat('FPR12') ->setCountryCode('IT') ->setSenderVatId('01234567890') ->setSendingId('00001') ->setCustomerSdiCode('ABCDEFG'); $supplier = new Supplier(); $supplier->setOrganization('Beta Forniture Srl') ->setVatNumber('01234567890') ->setTaxRegime('RF01'); $address = new Address(); $address->setStreet('Via Roma, 1') ->setZip('00100') ->setCity('Roma') ->setProvince('RM') ->setCountryCode('IT'); $supplier->setAddress($address); $eDocument->setSupplier($supplier); $customer = new Customer(); $customer->setOrganization('Alpha Srl') ->setVatNumber('03412317712'); $eDocument->setCustomer($customer); $instance = new DigitalDocumentInstance(); $instance->setDocumentType('TD01') ->setDocumentNumber('2024/001') ->setDocumentDate(new \DateTime('2024-03-15')) ->setCurrency('EUR'); $line = new Line(); $line->setNumber(1) ->setDescription('Servizi di consulenza') ->setQuantity(10.0) ->setUnitPrice(100.0) ->setTotal(1000.0) ->setTaxPercentage(22.0); $instance->addLine($line); $total = new Total(); $total->setTaxableAmount(1000.00) ->setTaxRate(22.0) ->setTaxAmount(220.00); $instance->addTotal($total); $instance->setDocumentTotal(1220.00); $eDocument->addDigitalDocumentInstance($instance); // Scrittura su file specifico $eDocument->write('/path/to/output/fattura.xml'); // Scrittura in directory (nome file generato automaticamente da SDI) $eDocument->write('/path/to/output/directory/'); // Scrittura con pretty print XML $eDocument->write('/path/to/output/fattura.xml', true); // Nome file generato automaticamente echo $eDocument->generatedFilename(); // "IT01234567890_00001.xml" ``` ``` -------------------------------- ### Write Electronic Invoice to File Source: https://context7.com/fatturaelettronicaphp/fatturaelettronica/llms.txt Generates and writes the electronic invoice XML file to a specified path. If a directory is provided, the filename is automatically generated. Supports pretty print formatting. ```php use FatturaElettronicaPhp\FatturaElettronica\DigitalDocument; use FatturaElettronicaPhp\FatturaElettronica\DigitalDocumentInstance; use FatturaElettronicaPhp\FatturaElettronica\Customer; use FatturaElettronicaPhp\FatturaElettronica\Supplier; use FatturaElettronicaPhp\FatturaElettronica\Line; use FatturaElettronicaPhp\FatturaElettronica\Total; use FatturaElettronicaPhp\FatturaElettronica\Address; $eDocument = new DigitalDocument(); $eDocument->setTransmissionFormat('FPR12') ->setCountryCode('IT') ->setSenderVatId('01234567890') ->setSendingId('00001') ->setCustomerSdiCode('ABCDEFG'); $supplier = new Supplier(); $supplier->setOrganization('Beta Forniture Srl') ->setVatNumber('01234567890') ->setTaxRegime('RF01'); $address = new Address(); $address->setStreet('Via Roma, 1') ->setZip('00100') ->setCity('Roma') ->setProvince('RM') ->setCountryCode('IT'); $supplier->setAddress($address); $eDocument->setSupplier($supplier); $customer = new Customer(); $customer->setOrganization('Alpha Srl') ->setVatNumber('03412317712'); $eDocument->setCustomer($customer); $instance = new DigitalDocumentInstance(); $instance->setDocumentType('TD01') ->setDocumentNumber('2024/001') ->setDocumentDate(new \DateTime('2024-03-15')) ->setCurrency('EUR'); $line = new Line(); $line->setNumber(1) ->setDescription('Servizi di consulenza') ->setQuantity(10.0) ->setUnitPrice(100.0) ->setTotal(1000.0) ->setTaxPercentage(22.0); $instance->addLine($line); $total = new Total(); $total->setTaxableAmount(1000.00) ->setTaxRate(22.0) ->setTaxAmount(220.00); $instance->addTotal($total); $instance->setDocumentTotal(1220.00); $eDocument->addDigitalDocumentInstance($instance); // Scrittura su file specifico $eDocument->write('/path/to/output/fattura.xml'); // Scrittura in directory (nome file generato automaticamente da SDI) $eDocument->write('/path/to/output/directory/'); // Scrittura con pretty print XML $eDocument->write('/path/to/output/fattura.xml', true); // Nome file generato automaticamente echo $eDocument->generatedFilename(); // "IT01234567890_00001.xml" ``` -------------------------------- ### Write Electronic Invoice XML Source: https://github.com/fatturaelettronicaphp/fatturaelettronica/blob/master/docs/README.md Create a new DigitalDocument instance, set the transmission format, and then serialize it to an XML SimpleXMLElement or write it directly to a file path. ```php // Deve essere un'istanza di \\FatturaElettronicaPhp\\FatturaElettronica\\Contracts\\DigitalDocumentInterface $eDocument = new DigitalDocument(); $eDocument->setTransmissionFormat('FPR12'); .... // Oggetto \\SimpleXmlElement $xml = $eDocument->serialize(); // Scrive direttamente il file XML $eDocument->write($filePath); ``` -------------------------------- ### Extract Supplier Data Source: https://github.com/fatturaelettronicaphp/fatturaelettronica/blob/master/docs/manipulating/README.md Access supplier details like organization name and VAT number. This snippet assumes the supplier information is available within the parsed Fattura Elettronica document. ```php $xml = '/path/to/file.xml'; $eDocument = \Weble\FatturaElettronica\DigitalDocument::parseFrom($xml); /** @var \Weble\FatturaElettronica\Supplier $customer **/ $supplier = $eDocument->getSupplier(); $supplier->getOrganization(); $supplier->getVatNumber(); ``` -------------------------------- ### `DigitalDocument::parseFrom()` - Reading an electronic invoice Source: https://context7.com/fatturaelettronicaphp/fatturaelettronica/llms.txt This static method parses an XML or P7M file, or a SimpleXMLElement object, and returns a populated DigitalDocument instance. It allows access to both the header and body of the electronic invoice. ```APIDOC ## `DigitalDocument::parseFrom()` - Reading an electronic invoice This static method parses an XML or P7M file, or a SimpleXMLElement object, and returns a populated `DigitalDocumentInterface` instance with all header and body data. ### Method `DigitalDocument::parseFrom(string | SimpleXMLElement $source)` ### Parameters #### Path Parameters - **source** (string | SimpleXMLElement) - Required - The path to the XML/P7M file or a `SimpleXMLElement` object. ### Request Example ```php use FatturaElettronicaPhp\FatturaElettronica\DigitalDocument; // From XML file $eDocument = DigitalDocument::parseFrom('/path/to/fattura.xml'); // From P7M file (CMS digital signature) $eDocument = DigitalDocument::parseFrom('/path/to/fattura.xml.p7m'); // From XML string already loaded as SimpleXMLElement $xml = simplexml_load_string(file_get_contents('/path/to/fattura.xml')); $eDocument = DigitalDocument::parseFrom($xml); ``` ### Response #### Success Response (DigitalDocumentInterface) An instance of `DigitalDocumentInterface` containing the parsed invoice data. #### Response Example (Accessing Header Data) ```php // Reading header data /** @var \FatturaElettronicaPhp\FatturaElettronica\Customer $customer */ $customer = $eDocument->getCustomer(); echo $customer->getOrganization(); // "Alpha Srl" echo $customer->getVatNumber(); // "03412317712" echo $customer->getFiscalCode(); // "RSSDNI80A01H501U" /** @var \FatturaElettronicaPhp\FatturaElettronica\Supplier $supplier */ $supplier = $eDocument->getSupplier(); echo $supplier->getOrganization(); // "Beta Forniture Srl" echo $supplier->getVatNumber(); // "01234567890" // Reading transmission format echo $eDocument->getTransmissionFormat(); // "FPR12" echo $eDocument->getCountryCode(); // "IT" echo $eDocument->getSenderVatId(); // "01234567890" ``` ``` -------------------------------- ### Enum Classes Source: https://context7.com/fatturaelettronicaphp/fatturaelettronica/llms.txt This section describes the Enum classes within the FatturaElettronicaPhp\FatturaElettronica\Enums namespace, which map official codes from the Agenzia delle Entrate to strongly typed PHP objects, avoiding the use of magic strings. ```APIDOC ## Classi Enum — Valori enumerabili della fattura elettronica Le enumerazioni nel namespace `FatturaElettronicaPhp\FatturaElettronica\Enums` mappano i codici ufficiali dell'Agenzia delle Entrate in oggetti PHP fortemente tipizzati, evitando l'uso di stringhe magiche. ```php use FatturaElettronicaPhp\FatturaElettronica\Enums\DocumentType; use FatturaElettronicaPhp\FatturaElettronica\Enums\TaxRegime; use FatturaElettronicaPhp\FatturaElettronica\Enums\TransmissionFormat; use FatturaElettronicaPhp\FatturaElettronica\Enums\VatNature; use FatturaElettronicaPhp\FatturaElettronica\Enums\PaymentMethod; use FatturaElettronicaPhp\FatturaElettronica\Enums\DeductionType; use FatturaElettronicaPhp\FatturaElettronica\Enums\RecipientCode; // Tipo documento $tipo = new DocumentType('TD01'); // Fattura $tipo = new DocumentType('TD04'); // Nota di credito $tipo = new DocumentType('TD24'); // Fattura differita art. 21 // Regime fiscale $regime = new TaxRegime('RF01'); // Regime ordinario $regime = new TaxRegime('RF19'); // Regime forfettario // Formato trasmissione $formato = new TransmissionFormat('FPR12'); // Fattura tra privati B2B $formato = new TransmissionFormat('FPA12'); // Fattura Pubblica Amministrazione $formato = new TransmissionFormat('FSM10'); // Fattura Semplificata // Natura IVA (per operazioni esenti/escluse) $natura = new VatNature('N1'); // Escluse ex art. 15 $natura = new VatNature('N2.1'); // Non soggette ad IVA $natura = new VatNature('N4'); // Esenti // Metodo di pagamento $pagamento = new PaymentMethod('MP01'); // Contanti $pagamento = new PaymentMethod('MP05'); // Bonifico $pagamento = new PaymentMethod('MP08'); // Carta di pagamento // Tipo ritenuta $ritenuta = new DeductionType('RT01'); // Ritenuta persone fisiche $ritenuta = new DeductionType('RT02'); // Ritenuta persone giuridiche // Codice destinatario di default echo RecipientCode::EMPTY; // "0000000" (cliente privato B2C senza codice) echo RecipientCode::FOREIGN; // "XXXXXXX" (cliente estero) ``` ``` -------------------------------- ### Serialize Electronic Invoice to SimpleXMLElement Source: https://context7.com/fatturaelettronicaphp/fatturaelettronica/llms.txt Generates the invoice XML as a SimpleXMLElement object without writing to disk. This is useful for direct manipulation or sending to SDI. The XML can also be converted to a string or processed with DOMDocument. ```php use FatturaElettronicaPhp\FatturaElettronica\DigitalDocument; $eDocument = new DigitalDocument(); $eDocument->setTransmissionFormat('FPR12'); // ... configurazione fornitore, cliente, istanze ... /** @var \SimpleXMLElement $xml */ $xml = $eDocument->serialize(); // Accesso diretto all'XML come stringa $xmlString = $xml->saveXML(); // Utilizzo con DOMDocument per ulteriori elaborazioni $dom = new \DOMDocument('1.0', 'UTF-8'); $dom->loadXML($xmlString); $dom->formatOutput = true; echo $dom->saveXML(); // Fattura semplificata (FSM10) $eDocumentSemplificata = new DigitalDocument(); $eDocumentSemplificata->setTransmissionFormat('FSM10'); $xmlSemplificato = $eDocumentSemplificata->serialize(); ``` -------------------------------- ### Parse Electronic Invoice from File or XML Source: https://context7.com/fatturaelettronicaphp/fatturaelettronica/llms.txt Use `DigitalDocument::parseFrom()` to read electronic invoices from XML or P7M files, or from a `SimpleXMLElement` object. This method returns a `DigitalDocumentInterface` instance. ```php use FatturaElettronicaPhp\FatturaElettronica\DigitalDocument; // Da file XML $eDocument = DigitalDocument::parseFrom('/path/to/fattura.xml'); // Da file P7M (firma digitale CMS) $eDocument = DigitalDocument::parseFrom('/path/to/fattura.xml.p7m'); // Da stringa XML già caricata come SimpleXMLElement $xml = simplexml_load_string(file_get_contents('/path/to/fattura.xml')); $eDocument = DigitalDocument::parseFrom($xml); // Lettura dei dati dell'intestazione /** @var \FatturaElettronicaPhp\FatturaElettronica\Customer $customer */ $customer = $eDocument->getCustomer(); echo $customer->getOrganization(); // "Alpha Srl" echo $customer->getVatNumber(); // "03412317712" echo $customer->getFiscalCode(); // "RSSDNI80A01H501U" /** @var \FatturaElettronicaPhp\FatturaElettronica\Supplier $supplier */ $supplier = $eDocument->getSupplier(); echo $supplier->getOrganization(); // "Beta Forniture Srl" echo $supplier->getVatNumber(); // "01234567890" // Lettura del formato di trasmissione echo $eDocument->getTransmissionFormat(); // "FPR12" echo $eDocument->getCountryCode(); // "IT" echo $eDocument->getSenderVatId(); // "01234567890" ``` -------------------------------- ### DigitalDocument::serialize() Source: https://context7.com/fatturaelettronicaphp/fatturaelettronica/llms.txt Serializes the electronic invoice into a `SimpleXMLElement` object without writing it to disk, suitable for further manipulation or direct transmission to SDI. ```APIDOC ## `DigitalDocument::serialize()` — Serializzazione in SimpleXMLElement Genera l'XML della fattura e lo restituisce come oggetto `SimpleXMLElement` senza scriverlo su disco, utile per manipolazioni successive o invio diretto allo SDI. ```php use FatturaElettronicaPhp\FatturaElettronica\DigitalDocument; $eDocument = new DigitalDocument(); $eDocument->setTransmissionFormat('FPR12'); // ... configurazione fornitore, cliente, istanze ... /** @var \SimpleXMLElement $xml */ $xml = $eDocument->serialize(); // Accesso diretto all'XML come stringa $xmlString = $xml->saveXML(); // Utilizzo con DOMDocument per ulteriori elaborazioni $dom = new \DOMDocument('1.0', 'UTF-8'); $dom->loadXML($xmlString); $dom->formatOutput = true; echo $dom->saveXML(); // Fattura semplificata (FSM10) $eDocumentSemplificata = new DigitalDocument(); $eDocumentSemplificata->setTransmissionFormat('FSM10'); $xmlSemplificato = $eDocumentSemplificata->serialize(); ``` ``` -------------------------------- ### Parse XML Fattura Elettronica Source: https://github.com/fatturaelettronicaphp/fatturaelettronica/blob/master/docs/structure/README.md Use this method to parse an XML string into a DigitalDocument object. Ensure the XML is valid according to the FatturaPA schema. ```php $eDocument = \FatturaElettronicaPhp\FatturaElettronica\DigitalDocument::parseFrom( $xml ); ```