Zum Inhalt

DiWaSS-Codelisten

Diese Seite ist die Nachschlagereferenz für alle kontrollierten Wertemengen, die eine DiWaSS-Übermittlung akzeptiert: Abfallcodelisten, Verpackungsarten, R-/D-Codes, Anhang-Klassifikationen, Transportmittel, Event-Codes. Für jede Liste steht hier, welche Werte zulässig sind, in welcher Schreibweise, in welchem Feld sie stehen und wie ein falscher Wert sich äußert.

Quelle der Wertemengen ist die EU-Spezifikation „DiWaSS API specifications - for 3rd parties”, Mappe [Repositories] (Arbeitsmappen DIWASS - lists waste codes.xlsx, Disposal and recovery codes (box 11).xlsx, Packaging type codes (box 7).xlsx, Physical characteristics codes (box 13).xlsx, Means of transport codes.xlsx, Event codes for sync.xlsx, Attachment types.docx), gegengeprüft gegen die DiWaSS-XSDs (codelists.xsd, basetypes.xsd) und gegen die ZEDAL-Protos.

Zwei Prüfstufen — davon hängt das Fehlerbild ab

DiWaSS prüft Codelisten auf zwei völlig verschiedenen Ebenen. Wer das nicht trennt, sucht den Fehler an der falschen Stelle.

Prüfstufe Wo definiert Betroffen Symptom bei ungültigem Wert
XML-Schema <xs:enumeration> bzw. <xs:pattern> in den DiWaSS-XSDs Verpackungsart, physikalische Beschaffenheit, Transportmittel, R-/D-Codes, Anhang-typeID, Ländercode, alle kleinen Wertemengen SOAP Fault, HTTP 500, Meldung des Schema-Validators (cvc-…). Die Fachlogik wird nie erreicht
Repository (serverseitig) gepflegte Codeliste in DiWaSS, nicht im Schema Abfallcodes und ihr listID Fachlicher Fehler WASTE-CLASSIFICATION-INVALID-CODE / waste.error.classification.code

Beispiel Ländercode: ein CountryID mit 56 statt 056 erzeugt cvc-pattern-valid: Value '56' is not facet-valid with respect to pattern '\d\d\d' for type 'CountryCodeType' als SOAP Fault (HTTP 500) — der Wert erreicht die DiWaSS-Fachlogik nicht.

Fehlercodes kommen mit Bindestrich zurück, die Spezifikation schreibt sie mit Unterstrich

Die EU-Liste Validations-messages.xlsx führt die Codes als WASTE_CLASSIFICATION_INVALID_CODE. DiWaSS meldet sie im Response als WASTE-CLASSIFICATION-INVALID-CODE. Ein Textabgleich zwischen Laufzeitfehler und Spezifikation scheitert schon an der Schreibweise. Details zu den Fehlercodes siehe Fehlercodes.

Schreibweise-Fallen

Die folgenden sechs Punkte verursachen in der Praxis die meisten Ablehnungen.

Abfallschlüssel brauchen Gruppen-Leerzeichen

DiWaSS erwartet EU-Abfallschlüssel als 01 03 06, nicht als 010306. Die deutsche AVV-Schreibweise ohne Leerzeichen ist in der DiWaSS-Codeliste nicht enthalten und fällt als WASTE-CLASSIFICATION-INVALID-CODE.

Im Repository-Sheet trägt jeder der 890 Codes Leerzeichen zwischen den Zweiergruppen; 010306 kommt dort in keiner Form vor.

Gefährliche Abfälle tragen den Stern im Wert

01 04 07* — der Stern ist Teil des Codes, nicht eine Anzeige-Konvention. 442 der 890 LoW-Einträge tragen ihn.

Ländercode: dreistellig numerisch im Dokument, alpha-2 im Verzeichnis

Kontext Format Beispiel Belgien
CountryID in jedem Dokument (model:CountryCodeType, Pattern \d\d\d) ISO 3166-1 numerisch, dreistellig mit führender Null 056
Verzeichnissuche FindActivities ISO 3166-1 alpha-2 BE

Der numerische Code im Verzeichnis-Lookup liefert 0 Treffer — ohne Fehler und ohne Exception. Beispiel: FindActivities("BE", code: "BE01") liefert einen Treffer, FindActivities("056", …) und FindActivities("56", …) jeweils keinen. Wer numerisch sucht, schließt fälschlich auf „Behörde existiert nicht”.

Umgekehrt kommt ein zweistelliger Wert im Dokument gar nicht bis zur Fachlogik — er scheitert am XSD-Pattern (siehe oben).

HP-Codes gehören in die eigene Liste, ohne EU-Suffix

Feld 14 (viii) des Notifizierungsdokuments (listID = h-code) trägt ausschließlich Basel-H-Codes. Die EU-Gefährlichkeitseigenschaften HP1–HP15 gehören in die eigene, validierte Liste hp_codes — in der DiWaSS-Oberfläche unter „Other Waste Identification” — und dort ohne den Zusatz EU.

Das weicht bewusst vom Verordnungstext ab: die WSR-Ausfüllanleitung (Anhang IC, Punkt (g) zu Subheading (viii)) sieht vor, den HP-Code in Feld (viii) einzutragen und EU dahinterzusetzen (Beispiel im Verordnungstext: HP14 EU). DiWaSS implementiert getrennte Listen ohne Suffix. Ein HP11 EU oder ein HP-Code unter h-code wird als Klassifikations-Codefehler abgelehnt.

Praktisch nützlich: die beiden Wertemengen überschneiden sich nicht — kein Code steht in beiden Listen. Eine Listenverwechslung kann deshalb nie stumm auf den falschen Eintrag mappen.

Verpackungsart: „Sonstiges” ist die 10, nicht die 9

Die DiWaSS-Verpackungsliste hat gegenüber der klassischen Notifizierungsliste eine zusätzliche Art: 9 = Bale (Ballen). „Other” rutscht damit auf die 10. Prüf- oder UI-Logik, die „Sonstiges” per Zahlenvergleich erkennt, ist beim Wechsel zwischen klassischem Dokument und DiWaSS-Dokument die erste Stelle, die man anfassen muss.

Groß-/Kleinschreibung des listID

Das Spezifikations-Sheet und die von DiWaSS akzeptierten Werte weichen bei vier Listen voneinander ab. Diese Schreibweisen nimmt DiWaSS an:

Sheet-Spalte „Name in API” akzeptiert
Basel_A basel_a
Basel_B basel_b
OECD oecd
Other other
LoW LoW

Auch listID="low" (klein) nimmt DiWaSS an. Ob DiWaSS Groß- und Kleinschreibung generell ignoriert, regelt die Spezifikation nicht. Wähle eine Schreibweise und bleib dabei; im Zweifel die aus der Tabelle.

Abfall-Codelisten (listID am WasteTypeCode)

Alle Abfallcodes stehen in derselben Struktur: ein Element WasteTypeCode mit dem Code als Wert und dem Attribut listID, das die Liste benennt. Das Paar (code, listID) identifiziert den Eintrag. WasteClassification ist maxOccurs="unbounded" — derselbe Abfall kann gleichzeitig über Basel, LoW und einen nationalen Schlüssel beschrieben werden.

Im Proto: WasteClassificationType.waste_type_code[] mit code und list_id (WasteCodeType). Verwendet in SubmissionType.WasteClassification (Notifizierung, Block 14), in den Annex-VII-Dokumenten, im Empfangs- und Abschlusszertifikat sowie in der Artikel-15-Bescheinigung.

listID ist kein XSD-Enum mehr

WasteClassificationSchemeIdentifierType ist im aktuellen Schema eine leere Restriction auf xs:token — das Schema lässt jeden Token durch. Geprüft wird erst serverseitig gegen das Repository. Die alte XSD-Enumeration (BASEL, EWL, YCODE, NATEXP, UNNUM, ANNEX3A, …) ist hinfällig; mitgelieferte XML-Samples mit listID="BASEL" sind kein Beleg für den heute gültigen Wert. Ein veralteter Listenname schlägt als waste.error.classification.code auf — also mit derselben Meldung wie ein ungültiger Code.

Der Feldtyp ist genau genommen eine Union: WasteClassificationSchemeOrCountryIdentifierType vereinigt den losen Token mit CountryCodeType (\d\d\d). Für nationale Abfalllisten ist laut Schema-Annotation auch ein numerischer ISO-3166-1-Code als listID vorgesehen (Beispiel der Annotation: 233 für Estland). Ob DiWaSS das serverseitig annimmt, beschreibt die Spezifikation nicht; für nationale Schlüssel gibt es die Listen nat_exp und nat_imp.

Der Code selbst ist vom Typ Token64OrEmpty: ein xs:token mit maximal 64 Zeichen. xs:token heißt, dass führende und abschließende Leerzeichen entfallen und interne Folgen von zwei oder mehr Leerzeichen unzulässig sind — die einzelnen Gruppen-Leerzeichen eines Abfallschlüssels sind davon nicht betroffen. Der Typ lässt ausdrücklich auch einen leeren Wert zu; die Schema-Annotation nennt als Zweck Abfallcodes, die in keinem Pflichtkatalog stehen.

Übersicht

„validiert” = DiWaSS prüft den Code gegen ein gepflegtes Repository und lehnt Unbekanntes ab. „nicht validiert” = Freitext, es zählt nur das Format.

Liste listID (akzeptiert) Sheet-Schreibweise validiert Einträge im Sheet
Basel-Liste A basel_a Basel_A ja 67
Basel-Liste B basel_b Basel_B ja 62
OECD oecd OECD ja 36
EU-Abfallverzeichnis (LoW) LoW LoW ja 890
Y-Codes y-code y-code ja 45
H-Codes h-code h-code ja 14
HP-Codes hp_codes hp_codes ja 15
UN-Klasse un_class un_class ja 11 distinkte
WSR Anhang III wsr_a3 wsr_a3 ja 1
WSR Anhang IIIA wsr_a3a wsr_a3a ja 15
WSR Anhang IIIB wsr_a3b wsr_a3b ja 2
WSR Anhang IV wsr_a4 wsr_a4 ja 1
Zollcodes (HS) customs_codes customs_codes ja Sheet leer
Nationaler Code Export nat_exp nat_exp nein —
Nationaler Code Import nat_imp nat_imp nein —
UN-Nummer un_no un_no nein —
UN-Versandbezeichnung un_shipping un_shipping nein —
Sonstiges other Other nein —
Nicht gelistet unlisted unlisted nein —

Geltungsbereich: In der Notifizierung nimmt DiWaSS alle Listen mit den Beispielcodes aus der Spezifikation an, außer customs_codes (siehe dort). Auf die Annex-VII-Ankündigung überträgt sich das nicht automatisch, weil die listID-Prüfung serverseitig und nicht im Schema stattfindet.

Im .NET-SDK sind die Listennamen als WasteCodeListId typisiert (Namespace Zedal.Sdk.Apis.Diwass.Enums). ToWire() liefert den Wire-String, TryFromWire() / FromWireOrUnknown() lesen zurück (case-insensitiv). Unbekannte Werte mappen auf Unknown statt zu werfen.

Basel-Liste A — gefährliche Abfälle

listID = basel_a, validiert. Sheet (Basel)A_codes, 67 Einträge — 63 A-Codes plus vier Y-Einträge, die das Sheet in derselben Spalte führt.

A1010  A1020  A1030  A1040  A1050  A1060  A1070  A1080  A1090  A1100
A1110  A1120  A1130  A1140  A1150  A1160  A1170  A1180  A1181  A1190
A2010  A2020  A2030  A2040  A2050  A2060
A3010  A3020  A3030  A3040  A3050  A3060  A3070  A3080  A3090  A3100
A3110  A3120  A3130  A3140  A3150  A3160  A3170  A3180  A3190  A3200
A3210
A4010  A4020  A4030  A4040  A4050  A4060  A4070  A4080  A4090  A4100
A4110  A4120  A4130  A4140  A4150  A4160
Y46    Y47    Y48    Y49

Beachte die Ausreißer aus dem Zehnerraster: A1181, A3210. Y46–Y49 stehen im Sheet der A-Codes, nicht im Sheet der Y-Codes (das endet bei Y45).

Basel-Liste B — nicht gefährliche Abfälle

listID = basel_b, validiert. Sheet (Basel)B_codes, 62 Einträge.

B1010  B1020  B1030  B1031  B1040  B1050  B1060  B1070  B1080  B1090
B1100  B1110  B1115  B1120  B1130  B1140  B1150  B1160  B1170  B1180
B1190  B1200  B1210  B1220  B1230  B1240  B1250
B2010  B2020  B2030  B2040  B2050  B2060  B2070  B2080  B2090  B2100
B2110  B2120  B2130
B3010  B3011  B3020  B3026  B3027  B3030  B3035  B3040  B3050  B3060
B3065  B3070  B3080  B3090  B3100  B3110  B3120  B3130  B3140
B4010  B4020  B4030

Ausreißer: B1031, B1115, B3011, B3026, B3027, B3035, B3065.

OECD-Liste

listID = oecd, validiert. Sheet OECD, 36 Einträge.

GB040  GC010  GC020  GC030  GC050  GE020  GF010  GG030  GG040  GH013
GN010  GN020  GN030
AA010  AA060  AA190
AB030  AB070  AB120  AB130  AB150
AC060  AC070  AC080  AC150  AC160  AC170  AC250  AC260  AC270  AC300
AD090  AD100  AD120  AD150
RB020

Das Sheet trägt für die AA-/AB-/AC-/AD-/RB-Einträge eine zusätzliche Spalte mit einer Gefährlichkeitsangabe (EU/National HZ, Maybe EU/National HZ, EU/National NHZ). Diese Spalte ist eine Erläuterung des Sheets und hat kein Feld in der API.

EU-Abfallverzeichnis (LoW)

listID = LoW, validiert. Sheet (EU list of waste)LoW, 890 Einträge. Zu viele, um sie hier abzudrucken — und eine gekürzte Auswahl wäre irreführend. Maßgeblich ist das Sheet.

Schreibweise des listID: LoW oder low?

Die EU-Codelistenübersicht führt den API-Namen als LoW. DiWaSS nimmt außerdem die Kleinschreibung low an. Ob der Server die Schreibweise generell ignoriert, regelt die Spezifikation nicht.

Für dich heißt das: Wenn du das .NET SDK verwendest, nimm den Wert aus WasteCodeListId.Low.ToWire() und setz keine eigene Konstante — dann trifft dich eine Änderung der Schreibweise nicht. Beim direkten Aufruf über REST oder gRPC gilt der Sheet-Name LoW.

Struktur und Schreibweise:

  • Sechs Ziffern in drei Zweiergruppen, getrennt durch je ein normales Leerzeichen (U+0020) — Form NN NN NN.
  • Die erste Zweiergruppe läuft von 01 bis 20.
  • Gefährliche Abfälle tragen einen angehängten Stern: 01 04 07*. 442 der 890 Einträge.
  • Beispiele aus dem Sheet: 01 01 01, 01 03 04*, 01 03 06, 20 03 01, 20 03 99.

Zwei Artefakte im Sheet, die ein Parser abfangen muss

Geltungszeitraum in eckigen Klammern. 58 Zeilen tragen im Code-Feld einen redaktionellen Zusatz — 20 01 44 [from 09.11.2026], 16 06 04 [until 08.12.2026]. Der Code ist der Teil davor; der Klammerzusatz beschreibt, ab bzw. bis wann der Eintrag gilt. Fünf Codes kommen dadurch doppelt vor (09 01 11*, 16 06 01*, 16 06 02*, 16 06 03*, 16 06 06*) — einmal je Zeitfenster. In einer Zeile steht ein Tippfehler im Datum ([until 08.112.2026]).

Geschützte Leerzeichen. 48 Zeilen benutzen U+00A0 statt U+0020 als Trenner. Sie treten ausschließlich innerhalb der 58 Zeilen mit Klammerzusatz auf, keine einzige in den übrigen 832. Auf U+0020 normalisieren — DiWaSS-Antworten führen die Codes mit normalem Leerzeichen.

Die Spezifikation regelt nicht, ob DiWaSS Codes innerhalb eines Übergangsfensters mit oder ohne Klammerzusatz erwartet; nimm im Zweifel den Code ohne Klammerzusatz.

Y-Codes — Abfallkategorien Basel Anhang I

listID = y-code, validiert. Sheet (Y codes)Y_codes, 45 Einträge: Y1 bis Y45, lückenlos.

Y46–Y49 gehören nicht in diese Liste — sie stehen im Sheet der Basel-A-Codes.

H-Codes — Gefährlichkeitsmerkmale Basel Anhang III

listID = h-code, validiert. Sheet H codes, 14 Werte — mit Punktnotation und mit Lücken. Es gibt kein H2, H7, H9, H14, H15.

Code Merkmal Code Merkmal
H1 Explosive H6.1 Poisonous (acute)
H3 Flammable liquids H6.2 Infectious substances
H4.1 Flammable solids H8 Corrosives
H4.2 Liable to spontaneous combustion H10 Liberation of toxic gases in contact with air or water
H4.3 Emits flammable gases in contact with water H11 Toxic (delayed or chronic)
H5.1 Oxidizing H12 Ecotoxic
H5.2 Organic peroxides H13 Capable of yielding another material after disposal

Im SDK typisiert als HCode (die Punkte werden in den C#-Namen zu Unterstrichen: H4_1).

HP-Codes — EU-Gefährlichkeitseigenschaften

listID = hp_codes, validiert. Sheet HP codes, 15 Werte, HP1 bis HP15, lückenlos — anders als bei den H-Codes. Rechtsgrundlage ist Anhang III der Richtlinie 2008/98/EG in der Fassung der Verordnung (EU) 1357/2014.

Code Eigenschaft Code Eigenschaft
HP1 Explosive HP9 Infectious
HP2 Oxidising HP10 Toxic for reproduction
HP3 Flammable HP11 Mutagenic
HP4 Irritant — skin irritation and eye damage HP12 Release of an acute toxic gas
HP5 Specific Target Organ Toxicity (STOT) / Aspiration Toxicity HP13 Sensitising
HP6 Acute Toxicity HP14 Ecotoxic
HP7 Carcinogenic HP15 Waste capable of exhibiting a hazardous property listed above not directly displayed by the original waste
HP8 Corrosive

Ohne EU-Suffix und nicht ins H-Code-Feld — siehe Schreibweise-Fallen. Im SDK typisiert als HpCode.

UN-Klasse

listID = un_class, validiert. Sheet UN class codes — 14 Zeilen, aber nur 11 distinkte Codes: die Klasse 9 steht viermal, für vier verschiedene Merkmale.

Code Merkmal
1 Explosive
3 Flammable liquids
4.1 Flammable solids
4.2 Substances or wastes liable to spontaneous combustion
4.3 Substances or wastes which, in contact with water, emit flammable gases
5.1 Oxidizing
5.2 Organic peroxides
6.1 Poisonous (acute)
6.2 Infectious substances
8 Corrosives
9 Sammelklasse — im Sheet für „liberation of toxic gases”, „toxic (delayed or chronic)”, „ecotoxic” und „capable of yielding another material after disposal”

Die Punktnotation ist dieselbe wie bei den H-Codes, aber ohne Buchstabenpräfix. Das ist keine Kurzform der H-Codes, auch wenn die Beschreibungstexte im Sheet identisch sind — die Zuordnung 9 deckt vier H-Codes gleichzeitig ab.

WSR-Anhänge III, IIIA, IIIB, IV

Alle vier validiert. Rechtsgrundlage ist die Verordnung (EU) 2024/1157.

listID Anhang Codes im Sheet
wsr_a3 Anhang III (grün gelistete Abfälle) EU3011
wsr_a3a Anhang IIIA (Gemische grüner Abfälle) IIIA.2.a IIIA.2.b IIIA.2.c IIIA.2.d IIIA.2.e IIIA.3.a IIIA.3.b IIIA.3.c IIIA.3.d IIIA.3.e IIIA.3.f IIIA.3.g IIIA.4.a IIIA.4.b IIIA.4.c
wsr_a3b Anhang IIIB (zusätzliche grüne Abfälle) BEU04 BEU05
wsr_a4 Anhang IV (notifizierungspflichtige Abfälle) EU48

wsr_a3 und wsr_a4 führen im Sheet jeweils genau einen Code. Die weiteren Zeilen des Sheets (WSR Annex III)A3 sind Fortsetzungszeilen der Beschreibung von EU3011 (Aufzählung der zulässigen Polymere) und keine eigenen Codes.

Zollcodes (HS)

listID = customs_codes. Das Sheet Lists of codes führt die Liste als validiert, das Detail-Sheet Customs code(s) (HS) ist jedoch leer — es enthält nur die Kopfzeile.

Zulässige Werte sind aus der Spezifikation nicht zu beantworten

Die reine vierstellige HS-Position (etwa 3915, Kunststoffabfälle) lehnt DiWaSS mit WASTE-CLASSIFICATION-INVALID-CODE ab. DiWaSS prüft customs_codes also gegen ein Repository, das die vierstellige HS-Position nicht enthält. Welche Codes es annimmt, beschreibt die Spezifikation nicht. Frag den DiWaSS-Betreiber, statt zu raten.

Zollcodes haben außerdem ein eigenes Feld und müssen nicht über WasteTypeCode laufen:

  • Notifizierung: SubmissionType.CustomsCodes_HS (Proto customs_codes_hs, Typ CustomsCodesType mit commodity_codes[]), optional.
  • Annex VII: Annex7TransportAnnouncementType.commodityCode (Proto commodity_code), optional.

Nicht validierte Listen — Freitext

Sechs Listen prüft DiWaSS nicht gegen ein Repository. Der Wert muss nur das Format erfüllen (Token64OrEmpty, also ein xs:token bis 64 Zeichen).

listID Bedeutung Beispielwert
nat_exp Nationaler Abfallschlüssel des Versandstaates 010304
nat_imp Nationaler Abfallschlüssel des Empfangsstaates 010304
un_no UN-Nummer nach UN-Modellregelwerk 3082
un_shipping UN proper shipping name ENVIRONMENTALLY HAZARDOUS SUBSTANCE, LIQUID, N.O.S.
other Sonstiger Code ohne vordefiniertes Vokabular custom-code-1
unlisted Nicht gelisteter Abfall not-listed-1

Beachte: ein Schlüssel ohne Leerzeichen — etwa der deutsche AVV-Schlüssel 010304 — wird hier angenommen, weil die Liste nicht validiert wird. Derselbe Wert unter LoW ist ungültig; dort gelten die Gruppen-Leerzeichen.

Codelisten aus dem Schema

Diese Wertemengen stehen als <xs:enumeration> in codelists.xsd. Ein Wert außerhalb der Menge scheitert an der Schemaprüfung, nicht an der Fachlogik — die Ablehnung kommt als SOAP Fault, nicht als Validierungs-Fehlercode.

Beseitigungs- und Verwertungsverfahren (R-/D-Codes)

XSD-Typ RecoveryDisposalCodeType — R1–R13 und D1–D15, zusammen 28 Werte.

Verwertung Beschreibung
R1 Use as a fuel (other than in direct incineration) or other means to generate energy (Basel/OECD) — use principally as a fuel or other means to generate energy (EU)
R2 Solvent reclamation/regeneration
R3 Recycling/reclamation of organic substances which are not used as solvents
R4 Recycling/reclamation of metals and metal compounds
R5 Recycling/reclamation of other inorganic materials
R6 Regeneration of acids or bases
R7 Recovery of components used for pollution abatement
R8 Recovery of components from catalysts
R9 Used oil re-refining or other reuses of previously used oil
R10 Land treatment resulting in benefit to agriculture or ecological improvement
R11 Uses of residual materials obtained from any of the operations numbered R1–R10
R12 Exchange of wastes for submission to any of the operations numbered R1–R11
R13 Accumulation of material intended for any operation in this list
Beseitigung Beschreibung
D1 Deposit into or on land (e.g. landfill)
D2 Land treatment (e.g. biodegradation of liquid or sludgy discards in soils)
D3 Deep injection (e.g. injection of pumpable discards into wells, salt domes or naturally occurring repositories)
D4 Surface impoundment (e.g. placement of liquid or sludge discards into pits, ponds or lagoons)
D5 Specially engineered landfill (placement into lined discrete cells which are capped and isolated from one another and the environment)
D6 Release into water body except seas/oceans
D7 Release into seas/oceans including sea-bed insertion
D8 Biological treatment not specified elsewhere in this list which results in final compounds or mixtures which are discarded by means of any of the operations in this list
D9 Physico-chemical treatment not specified elsewhere in this list which results in final compounds or mixtures which are discarded by means of any of the operations in this list (e.g. evaporation, drying, calcination)
D10 Incineration on land
D11 Incineration at sea
D12 Permanent storage (e.g. emplacement of containers in a mine)
D13 Blending or mixing prior to submission to any of the operations in this list
D14 Repackaging prior to submission to any of the operations in this list
D15 Storage pending any of the operations numbered in this list

Es gibt kein D16 und kein R14.

L1 gibt es nur an einer Stelle. Der XSD-Typ LaboratoryCodeType kennt genau den Wert L1; er wird über die Union RecoveryDisposalLaboratoryCodeType (= RecoveryDisposalCodeType + L1) ausschließlich in RecoveryDisposalLaboratoryFacilityType.RecoveryDisposalLaboratoryTypeCode zugelassen. In allen anderen R-/D-Feldern ist L1 ungültig.

Verwendung:

Feld Wertemenge
SubmissionType.DisposalRecoveryOperations.RecoveryDisposalTypeCode (Block 11) R1–R13, D1–D15
CertificateOfWasteReceiptType.RecoveryDisposalTypeCode R1–R13, D1–D15
Annex7TransportAnnouncementType.recoveryDisposalTypeCode R1–R13, D1–D15
QuantityArticle15Type.recoveryDisposalTypeCode (Artikel-15-Bescheinigung) R1–R13, D1–D15
RecoveryDisposalLaboratoryFacilityType.RecoveryDisposalLaboratoryTypeCode R1–R13, D1–D15, L1

Im SDK: RecoveryDisposalCode bzw. RecoveryDisposalLaboratoryCode.

Verpackungsart (Block 7)

XSD-Typ PackageCodeType — Werte 1 bis 10.

Code Bedeutung Code Bedeutung
1 Drum 6 Composite packaging
2 Wooden barrel 7 Pressure receptacle
3 Jerrican 8 Bulk
4 Box 9 Bale
5 Bag 10 Other

Verwendet in SubmissionType.Packaging.PackageTypeCode (Notifizierung, Typ PackagingType) und in MovementPackagingType (Transportankündigung, Basis PackagingTypeBase, dort zusätzlich mit PackageQuantity als Pflichtfeld). Beide Strukturen tragen PackageTypeCode als Pflichtfeld mit maxOccurs="unbounded" und ein optionales PackageDescription (Freitext). Der Boolean SpecialHandlingRequirementIndicator ist in PackagingType Pflicht, in PackagingTypeBase optional — das ist der einzige Unterschied zwischen den beiden Typen.

Zur Verwechslungsgefahr mit der klassischen Liste siehe Schreibweise-Fallen. Im SDK: PackageTypeCode.

Physikalische Beschaffenheit (Block 13)

XSD-Typ PhysicalCharacteristicCodeType — Werte 1 bis 6.

Code Bedeutung
1 Powdery / powder
2 Solid
3 Viscous / paste
4 Sludgy
5 Liquid
6 Gaseous

Das Spezifikations-Sheet nennt eine 7, das Schema kennt sie nicht

Physical characteristics codes (box 13).xlsx führt zusätzlich 7 = Other (specify). PhysicalCharacteristicCodeType in codelists.xsd enumeriert nur 1–6. Eine 7 scheitert an der Schemaprüfung.

SubmissionType.PhysicalCharacteristicTypeCode ist Pflicht und maxOccurs="unbounded". Das begleitende PhysicalCharacteristicDescription ist im Schema optional — die DiWaSS-Validierungsliste führt aber einen Code PHYSICAL_CHARACTERISTICS_DESCRIPTION_REQUIRED. Das Muster „im Schema optional, von DiWaSS trotzdem verlangt” tritt an mehreren Stellen auf; verlass dich nicht auf minOccurs="0".

Im SDK: PhysicalCharacteristicCode.

Transportmittel

XSD-Typ MeansOfTransportCodeType — fünf Buchstaben.

Code Bedeutung
R Road
T Train / Rail
S Sea
A Air
W Inland waterways

Verwendet in CarrierType.meansOfTransportCode (Attribut) und TransportType.MeansOfTransportCode. Beide sind Pflicht. Im SDK: MeansOfTransportCode.

Anhang-Klassifikation (typeID)

XSD-Typ BinaryAttachmentClassificationCodeType, Attribut typeID an model:AttachmentBinaryObject, Pflicht. 27 Werte.

typeID Bezeichnung in der Oberfläche
AuditReport Audit report
BrokerRegistration Broker / Dealer Registration
CarrierRegistration Carrier Registration
ContractNotifierProducer Contract (between waste producer and notifier)
StandardContract Contract (standard)
Decision Decision
DeclarationOfNotifier Declaration of notifier
InformationOnMeetingConditions Information on meeting conditions of Art. 11(1)(a) WSR
InformationOnIllegalActivities Information concerning illegal activities related to this file or operator
FacilityPermit Facility Permit
FinancialGuarantee Financial Guarantee
HandlingRequirements Handling Requirements
IntendedRoute Intended Route and Alternative Route
InterimFacilitiesInfo Interim treatment facilities – additional information
LiabilityInsurance Liability Insurance (notifier)
OtherAnnex Other Annex
PowerOfAttorney Power of attorney
PreConsent Pre-consent decision
TakebackInformation Take-back information
TechnologyEmployed Technology Employed
TreatmentCertificate Treatment certificate
TreatmentCertificateInfo Treatment certificate – additional information
TreatmentProcess Treatment Process
WasteAnalysis Waste Analysis
WasteComposition Waste Composition
WasteProductionProcess Waste Production Process
WasteTreatmentInformation Waste Treatment Information

Das Dokument Attachment types.docx listet zwei weitere Oberflächen-Bezeichnungen — Carrier Insurance und Financial Guarantee Calculation — ohne API-Code; die Spalte „API code” ist dort leer. Beide haben in BinaryAttachmentClassificationCodeType keine Entsprechung und sind über die API nicht adressierbar.

Im SDK: AttachmentTypeId.

mimeCode ist kein kontrolliertes Feld

Neben typeID trägt AttachmentBinaryObject das Attribut mimeCode — Typ Token64, also ein freier String mit maximal 64 Zeichen, required, ohne Enumeration und ohne Pattern. Es gibt keine MIME-Allowlist, weder im Schema noch in ZEDAL. Das image/png in der Schema-Dokumentation ist ein Beispiel, keine Beschränkung. Die kontrollierte Liste im Anhang-Kontext ist typeID — das ist die fachliche Klassifikation, kein Dateiformat.

Weitere Pflichtattribute: filename (NameType, max. 256 Zeichen) und containsPersonalData (Boolean).

Anlagentyp

Zwei verschiedene Wertemengen, die sich leicht verwechseln lassen.

XSD-Typ Werte Verwendung
FacilityTypeCode R (Recovery), D (Disposal) SubmissionType.DestinedForRecoveryDisposal, RecoveryDisposalFacilityType.facilityTypeCode, CertificateOfWasteReceiptType.FacilityTypeCode, CertificateOfCompletionType.FacilityTypeCode
Annex7FacilityTypeCode R (Recovery), L (Laboratory) RecoveryLaboratoryFacilityType.facilityLaboratoryTypeCode, Annex7CertificateOfWasteReceiptType.FacilityTypeCode, Annex7CertificateOfCompletionType.facilityTypeCode

In der Notifizierungswelt ist D zulässig und L nicht; in der Annex-VII-Welt umgekehrt. Im SDK: FacilityTypeCode und Annex7FacilityTypeCode.

Behördenbereich

Feld userCompetentAuthorityDomainID (Typ notification:AuthorityDomainBodyIdentifier).

Code Bedeutung
WSRDISP Behörde am Versandort (dispatch)
WSRTRAN Durchfuhrbehörde (transit)
WSRDEST Behörde am Bestimmungsort (destination)

Pflicht in MovementTakeBackDocumentType und WasteAnnex7TakeBackType, optional in MovementSignalDocumentType und WasteAnnex7DocumentType. Im SDK: CompetentAuthorityDomain (WsrDispatch, WsrTransit, WsrDestination).

Verwandt, aber eine andere Liste: AuthorityDomainDocumentType.AccessRights mit R / RW.

Identifikations-Schemas für Beteiligte

XSD-Typ Werte
PartyIdentificationSchemeIdentifierType VAT, NTR, GLN
TracesPartyIdentificationSchemeIdentifierType EORI
SiteIdentificationSchemeIdentifierType GLN

PartyIdentificationSchemeOrCountryIdentifierType ist die Union aus beiden Party-Typen und CountryCodeType — ein numerischer Ländercode ist als Schema-Kennung also ebenfalls vorgesehen.

Im Attribut @type der Operator-Suche ist der Typ ein freier xs:token ohne Restriction. In den Spezifikations-Samples sind die Werte durchgängig kleingeschrieben (eori, vat). Das SDK-Enum OperatorIdentifierType schreibt eori/vat/ntr/gln und liest case-insensitiv zurück.

Ländercode

XSD-Typ CountryCodeType: <xs:pattern value="\d\d\d"/> — ISO 3166-1 numerisch, genau drei Ziffern, führende Null zwingend. Keine Enumeration; die gültigen Werte kommen aus der ISO-Codeliste, das Schema prüft nur die Form.

Verwendet in AddressType.CountryID, ConcernedCountryType.CountryID, Annex7ConcernedCountryType.countryID, OnBehalfCAType.CountryID und weiteren.

Ein formal gültiger, aber unbekannter Code wird erst von der Fachlogik abgelehnt — dann mit DISPATCH_COUNTRY_NOT_FOUND, TRANSIT_COUNTRY_NOT_FOUND, DESTINATION_COUNTRY_NOT_FOUND, COUNTRY_NOT_FOUND oder CA_CODE_COUNTRY_NOT_FOUND, je nach Fundstelle.

Zur Formatdifferenz gegenüber dem Verzeichnis-Lookup siehe Schreibweise-Fallen.

Weitere kleine Wertemengen

XSD-Typ Werte Bedeutung
CountryRoleIDType E, I, T Rolle des Landes: export/dispatch, import/destination, transit
RejectionIndicatorType A, R A = vollständig angenommen, R = vollständig zurückgewiesen
DecisionTypeEnum CONSENT, OBJECTED, WITHDRAWN Behördenentscheidung
MessageCategoryCodeType inform, request inform = nur zur Kenntnis, request = Reaktion erwartet
StatementTypeCodeType RequestForNotificationInformation, PreConsentInformation Typ einer Statement-Nachricht
PriorityCodeType 1, 2, 3 1 = Immediate, 2 = Urgent, 3 = Normal (UN/CEFACT-Codeliste 4037)
GenderCodeType 1, 2 ISO 5218: 1 = male, 2 = female
AuthorityStatusType VALID, DELETED Status einer Behörde im Verzeichnis
AuthorityActivityStatusType VALID, SUSPENDED, DELETED Status einer Behördenaktivität
OperatorActivityStatusBaseType NEW, VALID, SUSPENDED, DELETED Status einer Operator-Aktivität
OperatorNameQueryMatchModeBaseType / AuthorityNameQueryMatchModeType PHRASE, FULL_TEXT Suchmodus im Verzeichnis, Default PHRASE
OperatorAuthorityActivityQueryCodeBaseType ACTIVITY_CODE, UNLOCODE Art des Codes in der Aktivitätssuche, Default ACTIVITY_CODE
OperatorSortingPredicateBaseType UPDATE, CREATE, NAME Sortierung der Trefferliste

SDK-Enums existieren für DecisionType, PriorityCode und SignalStatementType. Die Wertemenge von SignalStatementType: ProperlyCarriedOut, ProperlyCompleted, NotificationInvalid, NotificationRevalidated, NotificationCancelled, NotificationCompleted, NoPreConsentedFacilityTimeline, RejectPreConsentedFacility, MovementCancelled, Annex7Cancelled, NotificationWithdrawn.

Event-Codes

XSD-Typ waste:ModificationEventCode, 52 Werte. Verwendet in WasteEventType.code (Ereignisliste eines Dokuments) und SyncNotificationEventType.code (Detail eines Sync-Events).

Notifizierung

SUBMIT_NOTIFICATION              UPDATE_NOTIFICATION
NEW_ACKNOWLEDGE                  NEW_DECISION                 UPDATE_DECISION
NEW_REQUEST_INFORMATION          UPDATE_REQUEST_INFORMATION
NEW_REPLY_TO_REQUEST_INFORMATION
NEW_REQUEST_CHANGE               NEW_REPLY_TO_REQUEST_CHANGE
NEW_ARTICLE15                    UPDATE_ARTICLE15

Movement

ANNOUNCE_MOVEMENT                     UPDATE_MOVEMENT
NEW_MOVEMENT_CARRIER_TRANSPORT        UPDATE_MOVEMENT_CARRIER_TRANSPORT
NEW_MOVEMENT_CONSIGNEE_RECEIPT        UPDATE_MOVEMENT_CONSIGNEE_RECEIPT
NEW_MOVEMENT_FACILITY_RECEIPT         UPDATE_MOVEMENT_FACILITY_RECEIPT
NEW_MOVEMENT_FACILITY_COMPLETION      UPDATE_MOVEMENT_FACILITY_COMPLETION
NEW_MOVEMENT_TAKEBACK                 UPDATE_MOVEMENT_TAKEBACK

Signale

SIGNAL_PROPERLY_CARRIED_OUT           SIGNAL_PROPERLY_COMPLETED
SIGNAL_COMPLETE_NOTIFICATION          SIGNAL_CANCEL_NOTIFICATION
SIGNAL_NOTIFICATION_INVALID           SIGNAL_NOTIFICATION_REVALIDATED
SIGNAL_CANCEL_MOVEMENT
SIGNAL_REJECT_PRE_CONSENTED_FACILITY  SIGNAL_NO_PRE_CONSENTED_FACILITY_TIMELINE

Annex VII (Präfix GLW_ für green-listed waste)

GLW_ANNOUNCE                GLW_UPDATE                  GLW_CANCEL
GLW_NEW_CARRIER_TRANSPORT   GLW_UPDATE_CARRIER_TRANSPORT
GLW_NEW_CONSIGNEE_RECEIPT   GLW_UPDATE_CONSIGNEE_RECEIPT
GLW_NEW_FACILITY_RECEIPT    GLW_UPDATE_FACILITY_RECEIPT
GLW_NEW_FACILITY_COMPLETION GLW_UPDATE_FACILITY_COMPLETION
GLW_NEW_CA_TAKE_BACK        GLW_UPDATE_CA_TAKE_BACK

Statuswechsel, Pre-Consent, Vertraulichkeit

UPDATE_NOTIFICATION_STATUS  UPDATE_MOVEMENT_STATUS  UPDATE_GLW_STATUS
NEW_PRE_CONSENT_FACILITY    UPDATE_PRE_CONSENT_FACILITY
UPDATE_FACILITY_CONFIDENTIALITY

Das Sheet nennt den Statuswechsel für Annex VII falsch

Event codes for sync.xlsx führt UPDATE_ANNEX7_STATUS. Im Schema heißt der Wert UPDATE_GLW_STATUS — passend zum GLW_-Präfix der übrigen Annex-VII-Events. Ein Abgleich gegen den Sheet-Wert findet nie einen Treffer. Alle übrigen 51 Werte stimmen zwischen Sheet und Schema überein.

Das Sheet trägt für 19 Events zusätzlich einen Kurzcode (NEWSUB, UPDSUB, NEWACK, NEWREQ, NEWDEC, …) vor dem Langnamen. Im Feld code steht ausschließlich der Langname — ModificationEventCode enumeriert nur diese. Einer der Kurzcodes ist im Sheet außerdem verschrieben (NEWMOVEMENT_CONIGNEE_RECEIPT).

Die sechs Werte aus dem Block „Statuswechsel, Pre-Consent, Vertraulichkeit” sind in den ZEDAL-Protos nur auf SyncNotificationEventType.code annotiert, nicht auf WasteEventType.code — dort stehen die übrigen 46. Der XSD-Typ ist für beide Felder derselbe.

Fehlerbild je Liste

Auslöser Fehler
Unbekannter Code in einer validierten Abfallcodeliste WASTE-CLASSIFICATION-INVALID-CODE / waste.error.classification.code
Veralteter oder falsch geschriebener listID dieselbe Meldung — der Fehler unterscheidet nicht zwischen „Code falsch” und „Liste falsch”
Abfallschlüssel ohne Gruppen-Leerzeichen dieselbe Meldung
HP-Code unter h-code, oder HP-Code mit EU-Suffix dieselbe Meldung
WasteClassification fehlt ganz WASTE_CLASSIFICATION_REQUIRED / waste.notification.waste.classification.required
Wert außerhalb einer XSD-Enumeration (Verpackung, Beschaffenheit, Transport, R-/D, typeID) SOAP Fault, HTTP 500, cvc-…-Meldung des Schema-Validators
Ländercode nicht dreistellig SOAP Fault, HTTP 500, cvc-pattern-valid … pattern '\d\d\d' for type 'CountryCodeType'
Ländercode formal gültig, Land unbekannt DISPATCH_COUNTRY_NOT_FOUND / TRANSIT_COUNTRY_NOT_FOUND / DESTINATION_COUNTRY_NOT_FOUND / COUNTRY_NOT_FOUND
Verpackungscodes fehlen PACKAGING_TYPE_CODES_REQUIRED
Physikalische Beschaffenheit fehlt PHYSICAL_CHARACTERISTICS_CODES_REQUIRED
Anhang ohne typeID ATTACHMENT_TYPE_EMPTY / waste.error.invalid.attachment.type

Die vollständige Fehlercode-Referenz steht unter Fehlercodes.

Die EU-Fehlercodeliste ist nicht abschließend

Validations-messages.xlsx führt 188 Codes, deckt die real auftretenden aber nicht vollständig ab — real zurückgemeldete Codes wie REJECTED-QUANTITY-EMPTY und REJECTION-DESCRIPTION-EMPTY stehen dort in keiner Schreibweise. Behandle unbekannte Fehlercodes zur Laufzeit als erwartbar und protokolliere sie, statt gegen eine feste Liste zu matchen.

Bekannte Lücken

Diese Punkte lassen sich aus der Spezifikation nicht beantworten:

  • customs_codes: die Spezifikation nennt keinen gültigen Beispielcode. Das Detail-Sheet ist leer, die vierstellige HS-Position lehnt DiWaSS ab.
  • Groß-/Kleinschreibung des listID: ob DiWaSS case-insensitiv prüft. Bleib bei einer Schreibweise.
  • LoW-Codes in einem Übergangsfenster: ob DiWaSS die 58 Codes mit [from …] / [until …] mit oder ohne Klammerzusatz erwartet.
  • Numerischer listID für nationale Listen: laut Schema-Annotation zulässig (WasteClassificationSchemeOrCountryIdentifierType); ob DiWaSS ihn serverseitig annimmt, sagt die Spezifikation nicht.
  • Codelisten auf dem Annex-VII-Pfad: die akzeptierten listID-Werte gelten für die Notifizierung. Die listID-Prüfung läuft serverseitig, nicht im Schema — das gilt deshalb nicht automatisch für die Annex-VII-Ankündigung.

Weiterführend