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
This package is auto-updated.
Last update: 2026-07-21 20:01:53 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 obalová jednotka = jedna faktura = jeden DESADV + jeden INVOIC + jedno SSCC. Posílají-li se 3 palety, vzniknou 3 sady dokladů.
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: $sscc, parties: [$buyer, $deliveryParty, $invoicee], // SU se doplní z konfigurace articles: [ new DesadvArticle( gtin: '6424002005780', name: 'Fiskars FF Silikonová mašlovačka', quantity: 1, supplierArticleId: '1023614', orderNumber: 'OB26127268', supplierOrderNumber: '825602536', ), ], orderNumber: 'OB26127268', )); file_put_contents($dir . $file->filename, $file->content);
- 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.
$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, ));
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. EdiDocumentService::generateForInvoice()se volá vDispatchModel::finishDispatchhned po vzniku faktury — SSCC (série =invoice.id), SSCC etiketa a DESADV + INVOIC XML tedy existují dřív, než ApiPrint uvidí zásilku. Soubory se ukládají doStorage::DirEdi, cesty na fakturu (sscc,sscc_label_file,desadv_file,invoic_file).- Čí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