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);
std.edi.corestd.allocGemeinsamer 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) |
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 |
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) |
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 |
| 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. |
| 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).
| 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 |
| 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 |
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);
IBAN:BIC:25 — die Zahl 25 ist der EDIFACT-Code für IBAN.EDI_PAY_HDR_BGMQUAL mit dem richtigen Wert — nicht manuell setzen.EdiPaymulWrite schreibt den Wert aus EDI_PAY_HDR_AMOUNT als MOA+9. EdiPaymulValidate vergleicht diesen Wert mit der Summe der Item-Beträge.| Unit | Datei |
|---|---|
std.edi.payment | std/edi/payment.lyx |
Letzte Aktualisierung: 2026-06-16