ages / edi-documents
EDI document generator (ORION XML DESADV + INVOIC) with SSCC code and label generator
Requires
- php: >=8.4
- ext-dom: *
- ext-mbstring: *
- mpdf/mpdf: ^8.3
Requires (Dev)
- phpstan/phpstan: ^2.0
Suggests
None
Provides
None
Conflicts
None
Replaces
None
This package is auto-updated.
Last update: 2026-10-20 09:31:52 UTC
README
PHP knihovna pro generování EDI dokladů ve formátu ORION XML (GRiT) — dodací list DESADV a faktura INVOIC — včetně generátoru SSCC kódů (GS1) a SSCC etikety (PDF 100×150 mm).
Model odpovídá provozu: jedna dodávka = jedna faktura = jeden DESADV + jeden INVOIC. Zboží může být rozdělené do více obalových jednotek (palet) – každá má vlastní SSCC, vlastní <item> v DESADV s obsahem a vlastní stránku SSCC etikety („Paleta 2 / 3“).
Dokumentace formátu
Specifikace GRiT ORION je v lokální složce doc/ (není součástí repozitáře — dokumentace je určena pouze pro potřeby zákazníka GRiT):
| Zpráva | Dokument |
|---|---|
| DESADV | DESADV ORION XML CZE ENG 3.1.8.xlsx |
| INVOIC | Dokumentace INVOIC CZE ENG 3.1.2.xlsx |
| Ukázkové výstupy | desadv_*.xml, invoice_*.xml |
Requirements
- PHP 8.4+
- ext-dom, ext-mbstring
- mPDF
^8.3
Installation
Path repository pro lokální vývoj:
{
"repositories": [
{ "type": "path", "url": "../edi-documents" }
],
"require": {
"ages/edi-documents": "*"
}
}
Configuration (Nette / neon)
Konfigurace je záměrně minimální — stačí GLN dodavatele a SSCC prefix. Plná data dodavatele (adresa, IČO, DIČ) a bankovní spojení se předávají per doklad: SU strana v parties, banka přes InvoicDocument::$bankAccount (typicky z dat faktury). Config hodnoty slouží jen jako fallback, když v dokladu chybí.
services: ediSupplier: Ages\EdiDocuments\Document\Party( qualifier: Ages\EdiDocuments\Document\PartyQualifier::Supplier gln: '8594000000009' ) ediConfig: Ages\EdiDocuments\Config\EdiConfig( supplier: @ediSupplier ssccCompanyPrefix: '859400000' # testFlag: true # testovací zprávy # logoPath: %wwwDir%/img/logo.png # logo na SSCC etiketě ) - Ages\EdiDocuments\Generator\DesadvXmlGenerator - Ages\EdiDocuments\Generator\InvoicXmlGenerator - Ages\EdiDocuments\Sscc\SsccGenerator - Ages\EdiDocuments\Sscc\SsccLabelGenerator
Usage
SSCC kód
Generátor je bezstavový — pořadové číslo dodává aplikace (sekvence v DB, uloží se k zásilce). Kód se skládá z extension digit (0) + company prefixu + doplněného pořadového čísla + GS1 kontrolní číslice, celkem 18 číslic.
$sscc = $ssccGenerator->generate(759); // '085940000000007593' SsccGenerator::isValid($sscc); // true
Pro 9místný prefix zbývá 7 číslic série, tedy kapacita 0–9 999 999.
DESADV + INVOIC
Generátory vrací EdiDocumentFile (filename + content, UTF-8). Názvy souborů odpovídají konvenci protistrany: desadv_{docNumber}.xml, invoice_{docNumber}.xml.
$file = $desadvGenerator->generate(new DesadvDocument( docNumber: '826400154', issueDate: new DateTimeImmutable(), ssccCode: null, parties: [$buyer, $deliveryParty, $invoicee], // SU se doplní z konfigurace orderNumber: 'OB26127268', packages: [ new DesadvPackage(number: 1, ssccCode: $sscc1, articles: [ new DesadvArticle( gtin: '6424002005780', name: 'Fiskars FF Silikonová mašlovačka', quantity: 1, supplierArticleId: '1023614', orderNumber: 'OB26127268', supplierOrderNumber: '825602536', ), ]), new DesadvPackage(number: 2, ssccCode: $sscc2, articles: [/* … */]), ], )); file_put_contents($dir . $file->filename, $file->content);
- Každá
DesadvPackage= jeden<item>vline_items(package_number,package_referencedefault1E,sscc_code,articles).item_numberartiklů běží souvisle přes všechny jednotky,summary/number_of_items= počet všech artiklů. - Zpětně kompatibilně lze místo
packagespředat jedinou jednotku přesssccCode+articles. - Adresát zprávy (
receiver) se bere zreceiverGln, jinak z GLN stranyBY. - Strana
SU(dodavatel): předej ji vpartiess plnými daty (typicky z faktury); pokud chybí, doplní se zEdiConfig. U INVOIC se k SU připojí bankovní spojení (InvoicDocument::$bankAccount, fallbackEdiConfig::$bankAccount) a variabilní symbol (default = číslo dokladu). - INVOIC summary (součty, DPH skupiny 0/12/21 %) se počítá z položek.
- SSCC etiketa: odesílatele lze předat přes
SsccLabelData::$sender(fallbackEdiConfig::$supplier).
SSCC etiketa
PDF 100×150 mm, GS1-128 čárový kód s AI (00). Jedna strana na obalovou jednotku – generateLabels([...]) vrátí jedno PDF se všemi stranami. Na etiketě je označení jednotky {unitLabel} {parcelNumber} / {totalParcels} (default „Paleta 1 / 1“).
$pdf = $ssccLabelGenerator->generateLabel(new SsccLabelData( sscc: $sscc, recipientName: 'Odběratel a.s.', recipientStreet: 'Skladová 1', recipientCity: 'Bratislava', recipientZip: '90027', recipientCountry: 'SK', reference: '8261500157', // číslo dokladu orderNumber: 'OB26127268', weightKg: 245.5, parcelNumber: 2, totalParcels: 3, ));
Integrace do projektu gen
- EDI se generuje pro zákazníky se zapnutým příznakem
customer.edi(checkbox „Generovat EDI doklady" ve formuláři zákazníka). GLN strany: BY =customer.ean, DP =address.eanodběrného místa, IV =customer.ean_sku SK dodávek (jinak BY), SU = GLN z konfigurace + data dodavatele z faktury. - Skladník ve čtečce (GapiFlow) skládá zboží už při vychystávání do očíslovaných obalových jednotek (
order_dispatch_package+order_dispatch_package_item), typy jednotek se propíšou do obalů pro dopravce. EdiDocumentService::generateForInvoice()se volá vDispatchModel::finishDispatchhned po vzniku faktury — každá jednotka dostane SSCC (série = id jednotky, řada začíná nadMAX(invoice.id)), vznikne SSCC etiketa (strana na jednotku) a DESADV + INVOIC XML dřív, než ApiPrint uvidí zásilku. Soubory se ukládají doStorage::DirEdi, cesty na fakturu (sscc_label_file,desadv_file,invoic_file). Starší faktury mají jediné SSCC vinvoice.sscc(série =invoice.id).- Číslo DESADV = kód výdeje (
orderDispatch->code), číslo INVOIC = kód faktury. ApiPrint(ConsignmentModel::findLabels) vrací navícssccLabelUrl(tiskne se s ostatními dokumenty) adesadvXmlUrl+invoicXmlUrl(desktopová aplikace ApiPrint je ukládá do konfigurovatelné složky).
Vývoj
composer install
composer phpstan # level max