====== std.edi ======
EDI/EDIFACT-Bibliothek für den elektronischen Datenaustausch im Handel, Logistik, Seefrachtverkehr und Finanzwesen. Die Bibliothek deckt den vollständigen B2B-Nachrichtenfluss ab — von der Preisanfrage bis zur Zollanmeldung. Alle 14 Units basieren auf ''std.edi.core'' und setzen Zero-External-Dependencies um: kein EDIFACT-Framework, kein externer Parser.
**UN/EDIFACT** (United Nations / Electronic Data Interchange for Administration, Commerce and Transport) ist der internationale Standard für den elektronischen Datenaustausch zwischen Unternehmen. Eine EDIFACT-Nachricht besteht aus Segmenten (3-Buchstaben-Codes wie UNB, LIN, MOA), die durch Trennzeichen abgegrenzt werden. Die Lyx-Bibliothek implementiert den UNOA-Zeichensatz als Standard.
Standard-Trennzeichen (UNOA):
| Komponente | Trennzeichen ''':'', Code 58 |
| Datenelement | Trennzeichen '''+''', Code 43 |
| Dezimalzeichen | ''.'' (Punkt), Code 46 |
| Escape-Zeichen | ''?'', Code 63 |
| Segment-Ende | ''''''(Apostroph), Code 39 |
^ Unit ^ BGM / Funktion ^ Beschreibung ^
| [[lyx_-_programmiersprache:units:edi:core|std.edi.core]] | — | EDIFACT-Kern: Parsing, UNA/UNB/UNZ, Segment-/Element-Iteration, Duplikatserkennung |
| [[lyx_-_programmiersprache:units:edi:messages|std.edi.messages]] | CONTRL, APERAK, GENRAL | Infrastruktur-Nachrichten: Quittung, Fehlermeldung, allgemeine Nachricht |
| [[lyx_-_programmiersprache:units:edi:catalog|std.edi.catalog]] | PRICAT, PARTIN, PROACT | Stammdaten: Preiskatalog, Partnerinfo, Aktionen |
| [[lyx_-_programmiersprache:units:edi:partner|std.edi.partner]] | AS2/SFTP-Profile | Partner-Registry: AS2/SFTP-Verbindungsparameter, Nachrichtentypen-Bitmask |
| [[lyx_-_programmiersprache:units:edi:rfq|std.edi.rfq]] | REQOTE (311), QUOTES (315) | Anfrage-/Angebotsprozess: Preisanfrage und Angebotsrückmeldung |
| [[lyx_-_programmiersprache:units:edi:orders|std.edi.orders]] | ORDERS (220), ORDRSP (231), ORDCHG (230) | Bestellprozess: Bestellung, Auftragsbestätigung, Bestelländerung |
| [[lyx_-_programmiersprache:units:edi:invoice|std.edi.invoice]] | INVOIC (380/381/383/386), INVCON (44), COMDIS (34), COACSU (36) | Rechnungsstellung, Disputmeldung, Saldenabstimmung |
| [[lyx_-_programmiersprache:units:edi:shipping|std.edi.shipping]] | DESADV (351), RECADV (632) | Lieferschein mit SSCC-Hierarchie, Wareneingangsbestätigung |
| [[lyx_-_programmiersprache:units:edi:payment|std.edi.payment]] | REMADV, PAYMUL, PAYORD, DIRDEB u. a. (13 Typen) | Zahlungsverkehr: Avis, Sammelaufträge, Lastschrift, Akkreditiv |
| [[lyx_-_programmiersprache:units:edi:inventory|std.edi.inventory]] | INVRPT (35), SLSRPT (843), SLSFCT (844) | Lagermeldung, Absatzbericht, Absatzprognose |
| [[lyx_-_programmiersprache:units:edi:delfor|std.edi.delfor]] | DELFOR (241), DELJIT (251) | Lieferabruf (bis 52 Wochen), JIT-Abruf (minutengenau) |
| [[lyx_-_programmiersprache:units:edi:customs|std.edi.customs]] | CUSCAR (85), CUSDEC (960), CUSEXP (962), CUSRSP (961) | Zollmeldungen: Frachtanmeldung, Zollanmeldung, Behördenantwort |
| [[lyx_-_programmiersprache:units:edi:seafreight|std.edi.seafreight]] | BAPLIE, MOVINS, COPARN, CODECO, COARRI, COPINO, COPRAR, VERMAS, HANMOV (9 Typen) | Seefracht: Stauplan, Containermeldungen, VGM-Gewicht (SOLAS) |
| [[lyx_-_programmiersprache:units:edi:transport|std.edi.transport]] | IFTMIN (310), IFTMBC, IFTMCS, IFTMAN, IFCSUM, IFTSTA (214), IFTDGN (350), IFTFCC (8 Typen) | Multimodaler Transport: Auftrag, Status, Gefahrgutmeldung |
----
===== Designprinzipien =====
* **Zero-Copy-Parsing** — alle Read-Funktionen setzen Zeiger in den Originalpuffer; kein Kopieren von Strings
* **Caller-allocates** — jede Struct-Größe ist als ''EDI_*_SIZE''-Konstante exportiert; der Aufrufer allokiert, die Bibliothek schreibt
* **Festkomma-Geldbeträge** — alle Beträge werden als ''int64 × 100'' gespeichert (1999 = 19,99 €)
* **GS1-Validierung integriert** — GTIN (Mod-10, 8/12/13/14-stellig), GLN (Mod-10, 13-stellig), SSCC-18, IBAN (MOD-97), BIC (8/11 Zeichen), ISO-6346-Container, UN-Nummer (4-stellig exakt)
* **Keine Netzwerkschicht** — EDI-Nachrichten werden als Puffer übergeben; Transport (AS2, SFTP) erfolgt über separate Units
----
===== Schnellstart — Eingehende EDIFACT-Nachricht parsen =====
import std.edi.core;
// 1. Kontext initialisieren
var ctx: int64 := alloc(EDI_CTX_SIZE);
var seg: int64 := alloc(EDI_SEGCTX_SIZE);
var una: int64 := alloc(EDI_UNA_SIZE);
EdiCtxInit(ctx);
// 2. UNA lesen (setzt Trennzeichen im Kontext)
var rc: int64 := EdiUnaRead(una, inBuf, inBufLen, ctx);
// 3. Segmente iterieren
EdiSegCtxInit(seg, inBuf, inBufLen, ctx);
var s: int64 := alloc(EDI_SEG_SIZE);
while (EdiSegmentNext(seg, s) == 1) {
// Segmentname via EdiElementSplit / EdiComponentSplit auslesen
var elem: int64 := alloc(EDI_ELEM_SIZE);
EdiElementSplit(s, 0, elem);
// elem zeigt jetzt auf den Segmentnamen im Originalpuffer
free(elem, EDI_ELEM_SIZE);
}
free(s, EDI_SEG_SIZE);
free(seg, EDI_SEGCTX_SIZE);
free(una, EDI_UNA_SIZE);
free(ctx, EDI_CTX_SIZE);
----
===== Typische Nachrichtenflüsse =====
**Bestellprozess (Beschaffung)**
Lieferant Käufer
← REQOTE (RFQ)
QUOTES →
← ORDERS
ORDRSP →
← (ORDCHG bei Änderungen)
DESADV →
← RECADV
INVOIC →
← REMADV (Zahlungsavis)
**Seefrachtcontainer**
Terminal/Carrier Reefer/Verlader
COPARN → (Anmeldung Einlauf)
← CODECO (Gate-In)
← BAPLIE (Stauplan)
← VERMAS (VGM-Gewicht, SOLAS)
← COARRI (Ankunft)
← COPINO (Pick-up-Freigabe)
----
===== Quelldateien =====
Alle Units liegen in ''std/edi/'':
^ Unit ^ Datei ^
| ''std.edi.core'' | ''std/edi/core.lyx'' |
| ''std.edi.messages'' | ''std/edi/messages.lyx'' |
| ''std.edi.catalog'' | ''std/edi/catalog.lyx'' |
| ''std.edi.partner'' | ''std/edi/partner.lyx'' |
| ''std.edi.rfq'' | ''std/edi/rfq.lyx'' |
| ''std.edi.orders'' | ''std/edi/orders.lyx'' |
| ''std.edi.invoice'' | ''std/edi/invoice.lyx'' |
| ''std.edi.shipping'' | ''std/edi/shipping.lyx'' |
| ''std.edi.payment'' | ''std/edi/payment.lyx'' |
| ''std.edi.inventory'' | ''std/edi/inventory.lyx'' |
| ''std.edi.delfor'' | ''std/edi/delfor.lyx'' |
| ''std.edi.customs'' | ''std/edi/customs.lyx'' |
| ''std.edi.seafreight'' | ''std/edi/seafreight.lyx'' |
| ''std.edi.transport'' | ''std/edi/transport.lyx'' |
Letzte Aktualisierung: 2026-06-16