Skip to content

Library for reading and creating European-compliant electronic invoices (EN 16931)

License

Notifications You must be signed in to change notification settings

josemmo/einvoicing

Folders and files

NameName
Last commit message
Last commit date

Latest commit

251ea54 · Feb 24, 2025
Feb 24, 2025
Aug 4, 2021
Sep 14, 2024
Feb 24, 2025
Sep 22, 2024
Sep 22, 2024
Nov 19, 2020
Jul 3, 2020
Mar 15, 2022
Sep 14, 2024
Jul 9, 2020
May 20, 2022
Feb 24, 2025
Aug 7, 2021
Oct 4, 2020

Repository files navigation

Build Status Latest Version Supported PHP Versions License Documentation

About

eInvoicing is a PHP library for creating and reading electronic invoices according to the eInvoicing Directive and European standard.

It aims to be 100% compliant with EN 16931 as well as with the most popular CIUS and extensions, such as PEPPOL BIS.

Installation

First of all, make sure your environment meets the following requirements:

Then, you should be able to install this library using Composer:

composer require josemmo/einvoicing

Usage

For a proper quick start guide, visit the documentation website at https://josemmo.github.io/einvoicing/.

Importing invoice documents

use Einvoicing\Exceptions\ValidationException;
use Einvoicing\Readers\UblReader;

$reader = new UblReader();
$document = file_get_contents(__DIR__ . "/example.xml");
$inv = $reader->import($document);
try {
    $inv->validate();
} catch (ValidationException $e) {
    // Invoice is not EN 16931 complaint 
}

Exporting invoice documents

use Einvoicing\Identifier;
use Einvoicing\Invoice;
use Einvoicing\InvoiceLine;
use Einvoicing\Party;
use Einvoicing\Presets;
use Einvoicing\Writers\UblWriter;

// Create PEPPOL invoice instance
$inv = new Invoice(Presets\Peppol::class);
$inv->setNumber('F-202000012')
    ->setIssueDate(new DateTime('2020-11-01'))
    ->setDueDate(new DateTime('2020-11-30'));

// Set seller
$seller = new Party();
$seller->setElectronicAddress(new Identifier('9482348239847239874', '0088'))
    ->setCompanyId(new Identifier('AH88726', '0183'))
    ->setName('Seller Name Ltd.')
    ->setTradingName('Seller Name')
    ->setVatNumber('ESA00000000')
    ->setAddress(['Fake Street 123', 'Apartment Block 2B'])
    ->setCity('Springfield')
    ->setCountry('DE');
$inv->setSeller($seller);

// Set buyer
$buyer = new Party();
$buyer->setElectronicAddress(new Identifier('ES12345', '0002'))
    ->setName('Buyer Name Ltd.')
    ->setCountry('FR');
$inv->setBuyer($buyer);

// Add a product line
$line = new InvoiceLine();
$line->setName('Product Name')
    ->setPrice(100)
    ->setVatRate(16)
    ->setQuantity(1);
$inv->addLine($line);

// Export invoice to a UBL document
header('Content-Type: text/xml');
$writer = new UblWriter();
echo $writer->export($inv);

Roadmap

These are the expected features for the library and how's it going so far:

  • Representation of invoices, parties and invoice lines as objects
  • Compatibility with the most used CIUS and extensions
  • Export invoices to UBL documents
  • Import invoices from UBL documents
  • Export invoices to CII documents
  • Import invoices from CII documents
  • Proper documentation