Skip to content

Library for reading and creating Malaysian-compliant electronic invoices (MY-PINT)

License

Notifications You must be signed in to change notification settings

billyljren/einvoicing

 
 

Repository files navigation

Build Status Latest Version Supported PHP Versions License Documentation

About

This is a direct fork from https://josemmo.github.io/einvoicing/ with modifications to cater for Malaysia's MYPINT

eInvoicing is a PHP library for creating and reading electronic invoices according to the Malaysia LHDN eInvoicing Initiative and MDEC - Malaysia Peppol Authority.

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

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 billyljren/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
  • Proper documentation
  • MYPINT Validation
  • Import from LHDN BIS XML
  • Export to LHDN BIS XML

About

Library for reading and creating Malaysian-compliant electronic invoices (MY-PINT)

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • PHP 100.0%