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.corestd.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/Readhat 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
