====== 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