std.edi.payment

Zahlungs- und Bankdaten per EDIFACT. Alle 13 Nachrichtentypen teilen dieselbe Header-Struktur (EDI_PAY_HDR). Spezifische Validierungen schützen vor häufigen Fehlern: fehlendes Rechnungsreferenz in REMADV (Warnung), fehlendes Mandat in DIRDEB (Fehler), fehlendes Transaktionskennzeichen in FINCAN (Fehler). Alle Beträge werden als int64 × 100 gespeichert (Festkomma).

IBAN-Validierung (MOD-97) und BIC-Format-Prüfung (8 oder 11 Zeichen) sind direkt in dieser Unit enthalten.

REMADV (481) Zahlungsavis — Zuordnung von Zahlung zu Rechnungen
PAYMUL (452) Multizahlungsauftrag — Sammelmuster mehrerer Einzelzahlungen
PAYORD (450) Einzelzahlungsauftrag
PAYEXT (455) Erweiterter Zahlungsauftrag
DEBADV (479) Belastungsavis
CREEXT (462) Erweiterter Gutschriftauftrag
CREMUL (454) Sammelmuster Gutschriften
DEBMUL (453) Sammelmuster Belastungen
BANSTA (391) Kontoauszug
DIRDEB (431) Lastschrifteinzug (Mandat-Referenz Pflicht)
FINCAN (456) Finanz-Stornierung (Transaktionskennzeichen Pflicht)
DOCAPP (760) Akkreditiv-Eröffnungsantrag
DOCINF (763) Akkreditiv-Information

import std.edi.payment;

// IBAN und BIC validieren
var iban: pchar := "DE89370400440532013000";
var bic:  pchar := "COBADEFFXXX";
if (EdiIbanCheck(iban as int64, 22) == 1) { PrintLn("IBAN ok"); }
if (EdiBicCheck(bic  as int64, 11) == 1) { PrintLn("BIC ok"); }

// Einfachen PAYORD aufbauen
var hdr: int64 := alloc(EDI_PAY_HDR_SIZE);
poke64(hdr + EDI_PAY_HDR_REF,      "PAY-2026-001" as int64);
poke64(hdr + EDI_PAY_HDR_REFLEN,   12);
poke64(hdr + EDI_PAY_HDR_DATE,     "20261201" as int64);
poke64(hdr + EDI_PAY_HDR_AMOUNT,   250000);  // 2500,00 EUR
poke64(hdr + EDI_PAY_HDR_CURRENCY, "EUR" as int64);
poke64(hdr + EDI_PAY_HDR_CURLEN,   3);
poke64(hdr + EDI_PAY_HDR_CREDIBAN, iban as int64);
poke64(hdr + EDI_PAY_HDR_CREDILEN, 22);
poke64(hdr + EDI_PAY_HDR_BIC,      bic as int64);
poke64(hdr + EDI_PAY_HDR_BICLEN,   11);

var out: int64 := alloc(4096);
var n: int64 := EdiPayordWrite(hdr, out, 4096);

free(hdr, EDI_PAY_HDR_SIZE);
free(out, 4096);


Imports

  • std.edi.core
  • std.alloc

Structs

EdiPayHdr (EDI_PAY_HDR_SIZE = 160 Bytes)

Gemeinsamer Header für alle 13 Nachrichtentypen.

Offset-Konstante Inhalt
EDI_PAY_HDR_BGMQUAL BGM-Qualifier (automatisch gesetzt durch Write-Funktionen)
EDI_PAY_HDR_REF / EDI_PAY_HDR_REFLEN Zahlungs-/Auftragsreferenz
EDI_PAY_HDR_DATE / EDI_PAY_HDR_DATELEN Buchungsdatum „YYYYMMDD“
EDI_PAY_HDR_AMOUNT Betrag × 100 (MOA+9)
EDI_PAY_HDR_CURRENCY / EDI_PAY_HDR_CURLEN Währungscode
EDI_PAY_HDR_CREDIBAN / EDI_PAY_HDR_CREDILEN IBAN Empfänger (FII+CR)
EDI_PAY_HDR_DEBTIBAN / EDI_PAY_HDR_DEBTILEN IBAN Auftraggeber (FII+DB)
EDI_PAY_HDR_BIC / EDI_PAY_HDR_BICLEN BIC Empfängerbank
EDI_PAY_HDR_MANDATEREF / EDI_PAY_HDR_MANDATELEN DIRDEB: Mandatsreferenz (RFF+MR)
EDI_PAY_HDR_INVOICEREF / EDI_PAY_HDR_INVOICELEN REMADV: Rechnungsreferenz (RFF+IV)
EDI_PAY_HDR_TXNREF / EDI_PAY_HDR_TXNREFLEN FINCAN: Transaktionskennzeichen (RFF+TN)

EdiPaymulItem (EDI_PAYMUL_ITEM_SIZE = 56 Bytes)

Eine Einzelzahlung innerhalb eines PAYMUL/CREMUL/DEBMUL.

Offset-Konstante Inhalt
EDI_PAYMUL_ITEM_AMOUNT Betrag × 100 (MOA+203)
EDI_PAYMUL_ITEM_REF / EDI_PAYMUL_ITEM_REFLEN Referenz dieser Zahlung (RFF+CN)
EDI_PAYMUL_ITEM_DEBTIBAN / EDI_PAYMUL_ITEM_DEBTILEN IBAN Auftraggeber dieser Position
EDI_PAYMUL_ITEM_CREDIBAN / EDI_PAYMUL_ITEM_CREDILEN IBAN Empfänger dieser Position

EdiDocappHdr (EDI_DOCAPP_HDR_SIZE = 88 Bytes)

Akkreditiv-Kopf (DOCAPP/DOCINF).

Offset-Konstante Inhalt
EDI_DOCAPP_HDR_CREDITNUM / EDI_DOCAPP_HDR_CREDITNUMLEN Akkreditivnummer
EDI_DOCAPP_HDR_BENEFICIARY / EDI_DOCAPP_HDR_BENEFLEN Begünstigter (NAD+BF)
EDI_DOCAPP_HDR_BANKBIC / EDI_DOCAPP_HDR_BANKBICLEN BIC der akkreditivstellenden Bank
EDI_DOCAPP_HDR_AMOUNT Akkreditivbetrag × 100
EDI_DOCAPP_HDR_CURRENCY / EDI_DOCAPP_HDR_CURLEN Währung
EDI_DOCAPP_HDR_VALIDUNTIL / EDI_DOCAPP_HDR_VALIDUNTILLEN Gültig bis „YYYYMMDD“ (DTM+36)

EdiDocappDoc (EDI_DOCAPP_DOC_SIZE = 24 Bytes)

Ein Akkreditiv-Dokument (z. B. Konnossement, Packzettel).

Offset-Konstante Inhalt
EDI_DOCAPP_DOC_CODE / EDI_DOCAPP_DOC_CODELEN Dokumentencode
EDI_DOCAPP_DOC_COPIES Anzahl Kopien

Validierungsfunktionen

Signatur Beschreibung
EdiIbanCheck(ptr: int64, len: int64): int64 IBAN MOD-97-Prüfung. Gibt 1=gültig, 0=ungültig. Erste 4 Zeichen werden ans Ende verschoben, Buchstaben in zweistellige Zahlen umgewandelt.
EdiBicCheck(ptr: int64, len: int64): int64 BIC-Format: 8 oder 11 Zeichen; erste 4 = Bankcode (A-Z), Zeichen 5-6 = ISO-Ländercode (A-Z). Gibt 1=gültig, 0=ungültig.
EdiRemadvCheck(hdr: int64): int64 Gibt 1 (Warnung) wenn keine Rechnungsreferenz (RFF+IV) vorhanden.
EdiDirdebCheck(hdr: int64): int64 Gibt 2 (Fehler) wenn keine Mandatsreferenz (RFF+MR) vorhanden.
EdiFincanCheck(hdr: int64): int64 Gibt 2 (Fehler) wenn kein Transaktionskennzeichen (RFF+TN) vorhanden.
EdiPaymulValidate(hdr: int64, items: int64, itemCount: int64): int64 Prüft ob Summe der Einzelbeträge dem Gesamtbetrag im Header entspricht. Abweichung > 1 Cent → gibt 2.

Funktionen

Einfache Zahlungsnachrichten

Write-Funktion Read-Funktion Beschreibung
EdiRemadvWrite(hdr, out, outMax) EdiRemadvRead(buf, bufLen, hdr) Zahlungsavis
EdiPayordWrite(hdr, out, outMax) EdiPayordRead(buf, bufLen, hdr) Einzelzahlungsauftrag
EdiPayextWrite(hdr, out, outMax) EdiPayextRead(buf, bufLen, hdr) Erweiterter Zahlungsauftrag
EdiDebadvWrite(hdr, out, outMax) EdiDebadvRead(buf, bufLen, hdr) Belastungsavis
EdiCreextWrite(hdr, out, outMax) EdiCreextRead(buf, bufLen, hdr) Erweiterter Gutschriftauftrag
EdiBanstaWrite(hdr, out, outMax) EdiBanstaRead(buf, bufLen, hdr) Kontoauszug
EdiDirdebWrite(hdr, out, outMax) EdiDirdebRead(buf, bufLen, hdr) Lastschrifteinzug
EdiFincanWrite(hdr, out, outMax) EdiFincanRead(buf, bufLen, hdr) Finanz-Stornierung

Alle einfachen Write-Funktionen setzen automatisch den BGM-Qualifier und schreiben die spezifischen Pflicht-Referenzen (REMADV: RFF+IV, DIRDEB: RFF+MR, FINCAN: RFF+TN).

Sammel-Zahlungsnachrichten

Write-Funktion Read-Funktion Beschreibung
EdiPaymulWrite(hdr, items, itemCount, out, outMax) EdiPaymulRead(buf, bufLen, hdr, items, maxItems) Sammelmuster Zahlungen
EdiCremulWrite(hdr, items, itemCount, out, outMax) EdiCremulRead(buf, bufLen, hdr, items, maxItems) Sammelmuster Gutschriften
EdiDebmulWrite(hdr, items, itemCount, out, outMax) EdiDebmulRead(buf, bufLen, hdr, items, maxItems) Sammelmuster Belastungen

Akkreditiv

Signatur Beschreibung
EdiDocappWrite(hdr: int64, docs: int64, docCount: int64, out: int64, outMax: int64): int64 Schreibt DOCAPP
EdiDocappRead(buf: int64, bufLen: int64, hdr: int64, docs: int64, maxDocs: int64): int64 Parst DOCAPP; gibt Dokumentenanzahl zurück
EdiDocinfrWrite(hdr: int64, docs: int64, docCount: int64, out: int64, outMax: int64): int64 Schreibt DOCINF
EdiDocinfrRead(buf: int64, bufLen: int64, hdr: int64, docs: int64, maxDocs: int64): int64 Parst DOCINF

Codebeispiel — REMADV mit Rechnungsreferenz

import std.edi.payment;

var hdr: int64 := alloc(EDI_PAY_HDR_SIZE);
poke64(hdr + EDI_PAY_HDR_REF,        "REMADV-001" as int64);
poke64(hdr + EDI_PAY_HDR_REFLEN,     10);
poke64(hdr + EDI_PAY_HDR_DATE,       "20261201" as int64);
poke64(hdr + EDI_PAY_HDR_AMOUNT,     119000);  // 1190,00 EUR
poke64(hdr + EDI_PAY_HDR_INVOICEREF, "RE-2026-042" as int64);
poke64(hdr + EDI_PAY_HDR_INVOICELEN, 11);

// Validierung vor dem Senden
var rc: int64 := EdiRemadvCheck(hdr);
if (rc == 1) { PrintLn("Warnung: keine Rechnungsreferenz"); }

var out: int64 := alloc(4096);
var n: int64 := EdiRemadvWrite(hdr, out, 4096);

free(hdr, EDI_PAY_HDR_SIZE);
free(out, 4096);


Hinweise

  • IBAN im FII-Segment: Der Wire-Format ist IBAN:BIC:25 — die Zahl 25 ist der EDIFACT-Code für IBAN.
  • BGM-Qualifier automatisch: Alle Write-Funktionen überschreiben EDI_PAY_HDR_BGMQUAL mit dem richtigen Wert — nicht manuell setzen.
  • PAYMUL Gesamtbetrag: EdiPaymulWrite schreibt den Wert aus EDI_PAY_HDR_AMOUNT als MOA+9. EdiPaymulValidate vergleicht diesen Wert mit der Summe der Item-Beträge.

Quelldatei

Unit Datei
std.edi.payment std/edi/payment.lyx

Letzte Aktualisierung: 2026-06-16