Créez un builder, ajoutez l'entête, les parties, le paiement, la TVA, les totaux et les lignes, et le builder écrit le XML pour vous.
Avec validateFirst: true, vous savez avant l'envoi s'il manque quelque chose.
use Darvis\UblPeppol\UblNlBis3Service;
$ubl = new UblNlBis3Service();
$ubl->createDocument();
$ubl->addInvoiceHeader('INV-2026-001', '2026-01-15', '2026-02-14');
$ubl->addBuyerReference('CLIENT-001');
$ubl->addAccountingSupplierParty(/* votre entreprise */);
$ubl->addAccountingCustomerParty(/* votre client */);
$ubl->addPaymentMeans('30', 'Credit transfer', 'INV-2026-001', 'NL91ABNA0417164300');
$ubl->addTaxTotal([/* TVA par catégorie */]);
$ubl->addLegalMonetaryTotal([/* totaux */], 'EUR');
$ubl->addInvoiceLine([/* ligne de facture */]);
// Throws an InvalidArgumentException when validate() finds an error.
$xml = $ubl->generateXml(validateFirst: true);