std.edi.customs

Zoll-Nachrichten per EDIFACT für den grenzüberschreitenden Warenverkehr. Alle vier Nachrichtentypen teilen denselben Header (EDI_CUS_HDR) mit Absender, Empfänger, Herkunfts-/Zielort, Zollbehörde-Referenz und Zollwert.

  • CUSCAR (BGM 85) — Customs Cargo Report: Carrier meldet Ladung bei Zollbehörde
  • CUSDEC (BGM 960) — Customs Declaration: Anmeldung durch Zollanmelder
  • CUSEXP (BGM 962) — Customs Express: Express-Sendungsmanifest (Kurier)
  • CUSRSP (BGM 961) — Customs Response: Antwort der Zollbehörde

CUSRSP-Statuscodes:

Konstante Wert Bedeutung
EDI_CUSRSP_ACCEPTED 1 Anmeldung akzeptiert
EDI_CUSRSP_REJECTED 2 Anmeldung abgelehnt
EDI_CUSRSP_QUERIED 3 Rückfrage / weitere Informationen benötigt
EDI_CUSRSP_RELEASED 4 Waren freigegeben

import std.edi.customs;

// Zollanmeldung (CUSDEC)
var hdr:   int64 := alloc(EDI_CUS_HDR_SIZE);
var items: int64 := alloc(10 * EDI_CUS_ITEM_SIZE);

poke64(hdr + EDI_CUS_HDR_BGMQUAL,   EDI_CUS_BGM_CUSDEC);
poke64(hdr + EDI_CUS_HDR_REF,       "DECL-2026-001" as int64);
poke64(hdr + EDI_CUS_HDR_REFLEN,    13);
poke64(hdr + EDI_CUS_HDR_DATE,      "20261201" as int64);
poke64(hdr + EDI_CUS_HDR_ORIGIN,    "CN" as int64);   // China
poke64(hdr + EDI_CUS_HDR_ORIGLEN,   2);
poke64(hdr + EDI_CUS_HDR_DEST,      "DE" as int64);   // Deutschland
poke64(hdr + EDI_CUS_HDR_DESTLEN,   2);
poke64(hdr + EDI_CUS_HDR_CUSTVALUE, 450000);   // 4500,00 EUR Zollwert
poke64(hdr + EDI_CUS_HDR_CURRENCY,  "EUR" as int64);
poke64(hdr + EDI_CUS_HDR_CURLEN,    3);
poke64(hdr + EDI_CUS_HDR_DECLREF,   "ADE-2026-777" as int64);
poke64(hdr + EDI_CUS_HDR_DECLREFLEN,12);

// Position 1
poke64(items + EDI_CUS_ITEM_DESC,    "Elektronikbauteile" as int64);
poke64(items + EDI_CUS_ITEM_DESCLEN, 18);
poke64(items + EDI_CUS_ITEM_QTY,     500);
poke64(items + EDI_CUS_ITEM_VALUE,   450000);
poke64(items + EDI_CUS_ITEM_HSCODE,  "85423190" as int64);
poke64(items + EDI_CUS_ITEM_HSCODELEN,8);

var out: int64 := alloc(8192);
var n: int64 := EdiCusdecWrite(hdr, items, 1, out, 8192);

free(items, 10 * EDI_CUS_ITEM_SIZE);
free(hdr, EDI_CUS_HDR_SIZE);
free(out, 8192);


Imports

  • std.edi.core
  • std.alloc

Structs

EdiCusHdr (EDI_CUS_HDR_SIZE = 160 Bytes)

Offset-Konstante Inhalt
EDI_CUS_HDR_BGMQUAL BGM-Qualifier (EDI_CUS_BGM_*)
EDI_CUS_HDR_REF / EDI_CUS_HDR_REFLEN Referenz/Dokumentnummer
EDI_CUS_HDR_DATE / EDI_CUS_HDR_DATELEN Datum
EDI_CUS_HDR_ORIGIN / EDI_CUS_HDR_ORIGLEN Herkunftsland (LOC+87, z. B. „CN“)
EDI_CUS_HDR_DEST / EDI_CUS_HDR_DESTLEN Bestimmungsland (LOC+88, z. B. „DE“)
EDI_CUS_HDR_DECLARANT / EDI_CUS_HDR_DECLLEN Zollanmelder (NAD+DT)
EDI_CUS_HDR_CARRIER / EDI_CUS_HDR_CARRLEN Beförderer (NAD+CA)
EDI_CUS_HDR_CUSTVALUE Zollwert × 100 (MOA+126)
EDI_CUS_HDR_CURRENCY / EDI_CUS_HDR_CURLEN Währungscode
EDI_CUS_HDR_DECLREF / EDI_CUS_HDR_DECLREFLEN Zollanmeldungsnummer (RFF+ADE)
EDI_CUS_HDR_RSPCODE CUSRSP-Statuscode (1–4)
EDI_CUS_HDR_PROCCODE Zollverfahrenscode

EdiCusItem (EDI_CUS_ITEM_SIZE = 48 Bytes)

Offset-Konstante Inhalt
EDI_CUS_ITEM_DESC / EDI_CUS_ITEM_DESCLEN Warenbeschreibung (LIN)
EDI_CUS_ITEM_QTY Menge
EDI_CUS_ITEM_VALUE Positionswert × 100 (MOA+66)
EDI_CUS_ITEM_HSCODE / EDI_CUS_ITEM_HSCODELEN HS-Zolltarifnummer (RFF+HS)

Funktionen

Write-Funktion Read-Funktion Beschreibung
EdiCuscarWrite(hdr, items, itemCount, out, outMax) EdiCuscarRead(buf, bufLen, hdr, items, maxItems) Cargo Report
EdiCusdecWrite(hdr, items, itemCount, out, outMax) EdiCusdecRead(buf, bufLen, hdr, items, maxItems) Zollanmeldung
EdiCusexpWrite(hdr, items, itemCount, out, outMax) EdiCusexpRead(buf, bufLen, hdr, items, maxItems) Express-Manifest
EdiCusrspWrite(hdr, out, outMax) EdiCusrspRead(buf, bufLen, hdr) Zollantwort (kein Item-Array)

Alle Write-Funktionen setzen automatisch den BGM-Qualifier. Read-Funktionen geben die Anzahl der Items zurück (für CUSRSP: 1=ok, 0=Fehler).


Codebeispiel — Zollantwort auswerten

import std.edi.customs;

var hdr: int64 := alloc(EDI_CUS_HDR_SIZE);
EdiCusrspRead(inBuf, inBufLen, hdr);

var code: int64 := peek64(hdr + EDI_CUS_HDR_RSPCODE);
if (code == EDI_CUSRSP_RELEASED) {
    PrintLn("Ware freigegeben.");
} else if (code == EDI_CUSRSP_REJECTED) {
    PrintLn("Anmeldung abgelehnt.");
} else if (code == EDI_CUSRSP_QUERIED) {
    PrintLn("Rückfrage der Zollbehörde.");
}

free(hdr, EDI_CUS_HDR_SIZE);


Hinweise

  • HS-Code (RFF+HS): Die 6- bis 10-stellige HS-Zolltarifnummer identifiziert die Warengruppe international. Korrekte HS-Codes sind Voraussetzung für den automatisierten Zollabschluss.
  • Zollwert (MOA+126): Muss in der Währung aus CUX angegeben werden. Festkomma × 100.
  • CUSRSP ohne Items: EdiCusrspWrite/Read hat kein Item-Array — die Antwort bezieht sich immer auf die gesamte Anmeldung.

Quelldatei

Unit Datei
std.edi.customs std/edi/customs.lyx

Letzte Aktualisierung: 2026-06-16