AI translation
This page was translated from German with AI. If in doubt, the German original applies.
DIWASS code lists¶
This page is the lookup reference for all controlled value sets that a DIWASS transmission accepts: waste code lists, packaging types, R/D codes, attachment classifications, means of transport, event codes. For each list, it states which values are permitted, in which notation, in which field they go, and how an incorrect value manifests itself.
The source of the value sets is the EU specification “DiWaSS API specifications - for 3rd parties”,
folder [Repositories] (workbooks 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), cross-checked against the DIWASS XSDs
(codelists.xsd, basetypes.xsd) and against the ZEDAL protos.
Two validation levels — the error pattern depends on them¶
DIWASS checks code lists at two completely different levels. If you don’t keep them apart, you look for the error in the wrong place.
| Validation level | Where defined | Affected | Symptom for an invalid value |
|---|---|---|---|
| XML schema | <xs:enumeration> or <xs:pattern> in the DIWASS XSDs |
Packaging type, physical characteristics, means of transport, R/D codes, attachment typeID, country code, all small value sets |
SOAP fault, HTTP 500, message from the schema validator (cvc-…). The business logic is never reached |
| Repository (server-side) | maintained code list in DIWASS, not in the schema | Waste codes and their listID |
Business error WASTE-CLASSIFICATION-INVALID-CODE / waste.error.classification.code |
Verified with the country code: a CountryID with 56 instead of 056 produces
cvc-pattern-valid: Value '56' is not facet-valid with respect to pattern '\d\d\d' for type
'CountryCodeType' as a SOAP fault (HTTP 500) — the value does not reach the DIWASS business logic.
Error codes come back with hyphens, the specification writes them with underscores
The EU list Validations-messages.xlsx lists the codes as WASTE_CLASSIFICATION_INVALID_CODE.
DIWASS reports them in the response as WASTE-CLASSIFICATION-INVALID-CODE. A text match between
runtime error and specification fails on the notation alone. For details on the error codes,
see Error codes.
Notation pitfalls¶
The following six points cause the most rejections in practice. All of them are verified.
Waste codes need group spaces¶
DIWASS expects EU waste codes as 01 03 06, not as 010306. The German notation without
spaces used under the Waste Catalogue Ordinance (Abfallverzeichnis-Verordnung, AVV) is not contained in the DIWASS code list and fails as
WASTE-CLASSIFICATION-INVALID-CODE.
Verified by a contrasting pair: a push with 010306 and 010408 was reported back by DIWASS as
01 03 06 and 01 04 08; in the repository sheet, each of the 890 codes has
spaces between the groups of two digits, and 010306 does not occur there in any form.
Hazardous waste carries the asterisk in the value¶
01 04 07* — the asterisk is part of the code, not a display convention. 442 of the 890
LoW entries carry it.
Country code: three-digit numeric in the document, alpha-2 in the directory¶
| Context | Format | Example Belgium |
|---|---|---|
CountryID in every document (model:CountryCodeType, pattern \d\d\d) |
ISO 3166-1 numeric, three digits with leading zero | 056 |
Directory search FindActivities |
ISO 3166-1 alpha-2 | BE |
The numeric code in the directory lookup returns 0 hits — without error and without exception.
Verified: FindActivities("BE", code: "BE01") returns one hit (OVAM, Afdeling
Afvalstoffenbeheer, status VALID), FindActivities("056", …) and FindActivities("56", …)
none. If you search numerically, you wrongly conclude “authority does not exist”.
Conversely, a two-digit value in the document never even reaches the business logic — it fails at the XSD pattern (see above).
HP codes belong in their own list, without EU suffix¶
Field 14 (viii) of the notification document (listID = h-code) carries Basel H codes
exclusively. The EU hazardous properties HP1–HP15 belong in their own validated
list hp_codes — in the DIWASS user interface under “Other Waste Identification” — and there without
the EU suffix.
This deliberately deviates from the text of the Regulation: the WSR instructions for completing the forms (Annex IC, point (g) on
subheading (viii)) provide for entering the HP code in field (viii) and appending EU
(example in the text of the Regulation: HP14 EU). DIWASS implements separate lists without the suffix.
An HP11 EU or an HP code under h-code is rejected as a classification code error.
Useful in practice: the two value sets do not overlap — no code is in both lists. A list mix-up can therefore never silently map to the wrong entry.
Packaging type: “Other” is 10, not 9¶
Compared with the classic notification list, the DIWASS packaging list has an additional
type: 9 = Bale. “Other” thus moves to 10. Validation or UI logic that
detects “Other” by numeric comparison is the first place you have to touch when switching between the classic document and the
DIWASS document.
Upper/lower case of the listID¶
The specification sheet and the values actually accepted differ for four lists. Verified (push against DIWASS, 2026-08-03) are the values in the “verified” column:
| Sheet column “Name in API” | verified as accepted |
|---|---|
Basel_A |
basel_a |
Basel_B |
basel_b |
OECD |
oecd |
Other |
other |
LoW |
LoW |
Additionally observed: a document pair with listID="low" (lowercase) went through and came back
that way. So both notations are individually confirmed — but never measured against each other. Whether
DIWASS compares case-insensitively is not verified. Pick one notation and stick
with it; when in doubt, the verified one.
Waste code lists (listID on WasteTypeCode)¶
All waste codes use the same structure: a WasteTypeCode element with the code as its value
and the listID attribute naming the list. The pair (code, listID) identifies the
entry. WasteClassification is maxOccurs="unbounded" — the same waste can be described simultaneously
via Basel, LoW and a national code.
In the proto: WasteClassificationType.waste_type_code[] with code and list_id
(WasteCodeType). Used in SubmissionType.WasteClassification (notification, box 14),
in the Annex VII documents, in the receipt and completion certificates and in the
Article 15 certificate.
listID is no longer an XSD enum
In the current schema, WasteClassificationSchemeIdentifierType is an empty restriction on
xs:token — the schema lets any token through. The check only happens on the server side against the
repository. The old XSD enumeration (BASEL, EWL, YCODE, NATEXP, UNNUM, ANNEX3A, …)
is obsolete; bundled XML samples with listID="BASEL" are not evidence of the value valid
today. An outdated list name surfaces as waste.error.classification.code —
i.e. with the same message as an invalid code.
Strictly speaking, the field type is a union: WasteClassificationSchemeOrCountryIdentifierType
combines the loose token with CountryCodeType (\d\d\d). For national waste lists,
according to the schema annotation, a numeric ISO 3166-1 code is also intended as listID
(example from the annotation: 233 for Estonia). This path has not been measured against DIWASS.
The code itself is of type Token64OrEmpty: an xs:token with a maximum of 64 characters. xs:token
means that leading and trailing spaces are removed and internal sequences of two or more
spaces are not permitted — the single group spaces of a waste code are not
affected. The type explicitly also allows an empty value; the schema annotation
gives as its purpose waste codes that are not in any mandatory catalog.
Overview¶
“validated” = DIWASS checks the code against a maintained repository and rejects unknown values. “not validated” = free text, only the format counts.
| List | listID (verified) |
Sheet notation | validated | Entries in the sheet |
|---|---|---|---|---|
| Basel list A | basel_a |
Basel_A |
yes | 67 |
| Basel list B | basel_b |
Basel_B |
yes | 62 |
| OECD | oecd |
OECD |
yes | 36 |
| EU List of Waste (LoW) | LoW |
LoW |
yes | 890 |
| Y codes | y-code |
y-code |
yes | 45 |
| H codes | h-code |
h-code |
yes | 14 |
| HP codes | hp_codes |
hp_codes |
yes | 15 |
| UN class | un_class |
un_class |
yes | 11 distinct |
| WSR Annex III | wsr_a3 |
wsr_a3 |
yes | 1 |
| WSR Annex IIIA | wsr_a3a |
wsr_a3a |
yes | 15 |
| WSR Annex IIIB | wsr_a3b |
wsr_a3b |
yes | 2 |
| WSR Annex IV | wsr_a4 |
wsr_a4 |
yes | 1 |
| Customs codes (HS) | customs_codes |
customs_codes |
yes | Sheet empty |
| National code, export | nat_exp |
nat_exp |
no | — |
| National code, import | nat_imp |
nat_imp |
no | — |
| UN number | un_no |
un_no |
no | — |
| UN proper shipping name | un_shipping |
un_shipping |
no | — |
| Other | other |
Other |
no | — |
| Unlisted | unlisted |
unlisted |
no | — |
Verification status: 18 of the 19 lists were confirmed on 2026-08-03 by individual push against a
DIWASS environment using example codes from the specification. The only failure is
customs_codes (see there). The confirmation applies to the notification; it
does not automatically carry over to the Annex VII announcement, because the listID check
takes place on the server side and not in the schema.
In the .NET SDK, the list names are typed as WasteCodeListId
(namespace Zedal.Sdk.Apis.Diwass.Enums). ToWire() returns the wire string,
TryFromWire() / FromWireOrUnknown() read it back (case-insensitive). Unknown values
map to Unknown instead of throwing.
Basel list A — hazardous waste¶
listID = basel_a, validated. Sheet (Basel)A_codes, 67 entries — 63 A codes plus four
Y entries that the sheet lists in the same column.
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
Note the outliers from the grid of tens: A1181, A3210. Y46–Y49 are in the sheet of the
A codes, not in the sheet of the Y codes (which ends at Y45).
Basel list B — non-hazardous waste¶
listID = basel_b, validated. Sheet (Basel)B_codes, 62 entries.
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
Outliers: B1031, B1115, B3011, B3026, B3027, B3035, B3065.
OECD list¶
listID = oecd, validated. Sheet OECD, 36 entries.
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
For the AA/AB/AC/AD/RB entries, the sheet has an additional column with a
hazard indication (EU/National HZ, Maybe EU/National HZ, EU/National NHZ). This column
is an explanatory note in the sheet and has no field in the API.
EU List of Waste (LoW)¶
listID = LoW, validated. Sheet (EU list of waste)LoW, 890 entries. Too many to print
here — and an abridged selection would be misleading. The sheet is authoritative.
Notation of the listID: LoW or low?
The EU code list overview lists the API name as LoW. The lowercase low was also
measured and accepted by DIWASS. Whether the server ignores case is not
established — both forms are individually confirmed, never tested against each other.
For you, this means: if you use the .NET SDK, take the value from
WasteCodeListId.Low.ToWire() and don’t define your own constant — then a
change in notation won’t affect you. For direct calls via REST or gRPC, the
sheet name LoW applies.
Structure and notation:
- Six digits in three groups of two, each separated by a normal space (U+0020) —
form
NN NN NN. - The first group of two runs from
01to20. - Hazardous waste carries an appended asterisk:
01 04 07*. 442 of the 890 entries. - Examples from the sheet:
01 01 01,01 03 04*,01 03 06,20 03 01,20 03 99.
Two artifacts in the sheet that a parser must catch
Validity period in square brackets. 58 rows carry an editorial
addition in the code field — 20 01 44 [from 09.11.2026], 16 06 04 [until 08.12.2026]. The code is the part
before it; the bracketed addition describes from or until when the entry applies. As a result, five codes occur
twice (09 01 11*, 16 06 01*, 16 06 02*, 16 06 03*, 16 06 06*) — once
per time window. One row contains a typo in the date ([until 08.112.2026]).
Non-breaking spaces. 48 rows use U+00A0 instead of U+0020 as the separator. They occur exclusively within the 58 rows with a bracketed addition, not a single one in the remaining 832. Normalize to U+0020 — in the observed DIWASS response, the codes had normal spaces.
Not verified: whether DIWASS expects codes within a transition window with or without the bracketed addition. No push with any of the 58 annotated codes was measured.
Y codes — waste categories of Basel Annex I¶
listID = y-code, validated. Sheet (Y codes)Y_codes, 45 entries: Y1 to Y45, without gaps.
Y46–Y49 do not belong in this list — they are in the sheet of the Basel A codes.
H codes — hazardous characteristics of Basel Annex III¶
listID = h-code, validated. Sheet H codes, 14 values — with dot notation and with gaps.
There is no H2, H7, H9, H14, H15.
| Code | Characteristic | Code | Characteristic |
|---|---|---|---|
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 |
Typed in the SDK as HCode (the dots become underscores in the C# names: H4_1).
HP codes — EU hazardous properties¶
listID = hp_codes, validated. Sheet HP codes, 15 values, HP1 to HP15, without gaps —
unlike the H codes. The legal basis is Annex III of Directive 2008/98/EC as
amended by Regulation (EU) No 1357/2014.
| Code | Property | Code | Property |
|---|---|---|---|
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 |
Without the EU suffix and not in the H code field — see
Notation pitfalls.
Typed in the SDK as HpCode.
UN class¶
listID = un_class, validated. Sheet UN class codes — 14 rows, but only 11 distinct
codes: class 9 appears four times, for four different characteristics.
| Code | Characteristic |
|---|---|
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 |
Catch-all class — in the sheet for “liberation of toxic gases”, “toxic (delayed or chronic)”, “ecotoxic” and “capable of yielding another material after disposal” |
The dot notation is the same as for the H codes, but without a letter prefix. This is not a
short form of the H codes, even though the description texts in the sheet are identical — the mapping
9 covers four H codes at once.
WSR Annexes III, IIIA, IIIB, IV¶
All four validated. The legal basis is Regulation (EU) 2024/1157.
listID |
Annex | Codes in the sheet |
|---|---|---|
wsr_a3 |
Annex III (green-listed waste) | EU3011 |
wsr_a3a |
Annex IIIA (mixtures of green-listed waste) | 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 |
Annex IIIB (additional green-listed waste) | BEU04 BEU05 |
wsr_a4 |
Annex IV (waste subject to notification) | EU48 |
wsr_a3 and wsr_a4 each list exactly one code in the sheet. The other rows of the sheet
(WSR Annex III)A3 are continuation rows of the description of EU3011 (enumeration of the
permitted polymers) and not separate codes.
Customs codes (HS)¶
listID = customs_codes. The sheet Lists of codes lists it as validated, but the
detail sheet Customs code(s) (HS) is empty — it only contains the header row.
The specification does not tell you which values are permitted
A push with the plain four-digit HS heading 3915 (plastic waste) was rejected on
2026-08-03 with WASTE-CLASSIFICATION-INVALID-CODE — the only one of the 19 lists.
So DIWASS checks customs_codes against a repository that does not contain the four-digit HS heading.
Which codes it accepts is open. Ask the DIWASS operator instead of guessing.
Customs codes also have a dedicated field and don’t have to go through WasteTypeCode:
- Notification:
SubmissionType.CustomsCodes_HS(protocustoms_codes_hs, typeCustomsCodesTypewithcommodity_codes[]), optional. - Annex VII:
Annex7TransportAnnouncementType.commodityCode(protocommodity_code), optional.
Non-validated lists — free text¶
DIWASS does not check six lists against a repository. The value only has to meet the format
(Token64OrEmpty, i.e. an xs:token of up to 64 characters).
listID |
Meaning | Value used in the test |
|---|---|---|
nat_exp |
National waste code of the country of dispatch | 010304 |
nat_imp |
National waste code of the country of destination | 010304 |
un_no |
UN number according to the UN Model Regulations | 3082 |
un_shipping |
UN proper shipping name | ENVIRONMENTALLY HAZARDOUS SUBSTANCE, LIQUID, N.O.S. |
other |
Other code without a predefined vocabulary | custom-code-1 |
unlisted |
Unlisted waste | not-listed-1 |
Note: a code without spaces — such as the German AVV code 010304 — is
accepted here because the list is not validated. The same value under LoW is invalid; the
group spaces apply there.
Code lists from the schema¶
These value sets are defined as <xs:enumeration> in codelists.xsd. A value outside the set
fails at schema validation, not in the business logic — the rejection comes as a SOAP fault, not
as a validation error code.
Disposal and recovery operations (R/D codes)¶
XSD type RecoveryDisposalCodeType — R1–R13 and D1–D15, 28 values in total.
| Recovery | Description |
|---|---|
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 |
| Disposal | Description |
|---|---|
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 |
There is no D16 and no R14.
L1 exists in only one place. The XSD type LaboratoryCodeType knows exactly the value L1;
it is permitted via the union RecoveryDisposalLaboratoryCodeType (= RecoveryDisposalCodeType + L1)
exclusively in RecoveryDisposalLaboratoryFacilityType.RecoveryDisposalLaboratoryTypeCode.
In all other R/D fields, L1 is invalid.
Usage:
| Field | Value set |
|---|---|
SubmissionType.DisposalRecoveryOperations.RecoveryDisposalTypeCode (box 11) |
R1–R13, D1–D15 |
CertificateOfWasteReceiptType.RecoveryDisposalTypeCode |
R1–R13, D1–D15 |
Annex7TransportAnnouncementType.recoveryDisposalTypeCode |
R1–R13, D1–D15 |
QuantityArticle15Type.recoveryDisposalTypeCode (Article 15 certificate) |
R1–R13, D1–D15 |
RecoveryDisposalLaboratoryFacilityType.RecoveryDisposalLaboratoryTypeCode |
R1–R13, D1–D15, L1 |
In the SDK: RecoveryDisposalCode or RecoveryDisposalLaboratoryCode.
Packaging type (box 7)¶
XSD type PackageCodeType — values 1 to 10.
| Code | Meaning | Code | Meaning |
|---|---|---|---|
1 |
Drum | 6 |
Composite packaging |
2 |
Wooden barrel | 7 |
Pressure receptacle |
3 |
Jerrican | 8 |
Bulk |
4 |
Box | 9 |
Bale |
5 |
Bag | 10 |
Other |
Used in SubmissionType.Packaging.PackageTypeCode (notification, type PackagingType) and
in MovementPackagingType (transport announcement, base PackagingTypeBase, where
PackageQuantity is additionally a mandatory field). Both structures carry PackageTypeCode as a mandatory field with
maxOccurs="unbounded" and an optional PackageDescription (free text). The Boolean
SpecialHandlingRequirementIndicator is mandatory in PackagingType and optional in PackagingTypeBase
— that is the only difference between the two types.
For the risk of confusion with the classic list, see
Notation pitfalls.
In the SDK: PackageTypeCode.
Physical characteristics (box 13)¶
XSD type PhysicalCharacteristicCodeType — values 1 to 6.
| Code | Meaning |
|---|---|
1 |
Powdery / powder |
2 |
Solid |
3 |
Viscous / paste |
4 |
Sludgy |
5 |
Liquid |
6 |
Gaseous |
The specification sheet names a 7, the schema does not know it
Physical characteristics codes (box 13).xlsx additionally lists 7 = Other (specify).
PhysicalCharacteristicCodeType in codelists.xsd enumerates only 1–6. A 7 fails
schema validation.
SubmissionType.PhysicalCharacteristicTypeCode is mandatory and maxOccurs="unbounded".
The accompanying PhysicalCharacteristicDescription is optional in the schema — but the
DIWASS validation list includes a code
PHYSICAL_CHARACTERISTICS_DESCRIPTION_REQUIRED. The pattern “optional in the schema, still required by DIWASS”
occurs in several places; don’t rely on minOccurs="0".
In the SDK: PhysicalCharacteristicCode.
Means of transport¶
XSD type MeansOfTransportCodeType — five letters.
| Code | Meaning |
|---|---|
R |
Road |
T |
Train / Rail |
S |
Sea |
A |
Air |
W |
Inland waterways |
Used in CarrierType.meansOfTransportCode (attribute) and
TransportType.MeansOfTransportCode. Both are mandatory. In the SDK: MeansOfTransportCode.
Attachment classification (typeID)¶
XSD type BinaryAttachmentClassificationCodeType, attribute typeID on
model:AttachmentBinaryObject, mandatory. 27 values.
typeID |
Label in the user interface |
|---|---|
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 |
The document Attachment types.docx lists two further user interface labels — Carrier
Insurance and Financial Guarantee Calculation — without an API code; the “API code” column is
empty there. Neither has a counterpart in BinaryAttachmentClassificationCodeType, and neither can be
addressed via the API.
In the SDK: AttachmentTypeId.
mimeCode is not a controlled field
Besides typeID, AttachmentBinaryObject carries the mimeCode attribute — type Token64, i.e.
a free string with a maximum of 64 characters, required, without enumeration and without pattern.
There is no MIME allowlist, neither in the schema nor in ZEDAL. The image/png in the
schema documentation is an example, not a restriction. The controlled list in the
attachment context is typeID — that is the business classification, not a file format.
Further mandatory attributes: filename (NameType, max. 256 characters) and
containsPersonalData (Boolean).
Facility type¶
Two different value sets that are easily confused.
| XSD type | Values | Usage |
|---|---|---|
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 the notification world, D is permitted and L is not; in the Annex VII world, it is the other way around.
In the SDK: FacilityTypeCode and Annex7FacilityTypeCode.
Authority domain¶
Field userCompetentAuthorityDomainID (type notification:AuthorityDomainBodyIdentifier).
| Code | Meaning |
|---|---|
WSRDISP |
Competent authority of dispatch |
WSRTRAN |
Competent authority of transit |
WSRDEST |
Competent authority of destination |
Mandatory in MovementTakeBackDocumentType and WasteAnnex7TakeBackType, optional in
MovementSignalDocumentType and WasteAnnex7DocumentType.
In the SDK: CompetentAuthorityDomain (WsrDispatch, WsrTransit, WsrDestination).
Related, but a different list: AuthorityDomainDocumentType.AccessRights with R / RW.
Identification schemes for parties¶
| XSD type | Values |
|---|---|
PartyIdentificationSchemeIdentifierType |
VAT, NTR, GLN |
TracesPartyIdentificationSchemeIdentifierType |
EORI |
SiteIdentificationSchemeIdentifierType |
GLN |
PartyIdentificationSchemeOrCountryIdentifierType is the union of both party types and
CountryCodeType — so a numeric country code is also intended as a scheme identifier.
In the @type attribute of the operator search, the type is a free xs:token without restriction. In the
specification samples, the values are consistently lowercase (eori, vat); in practice,
only eori and vat have been confirmed so far. The SDK enum OperatorIdentifierType writes
eori/vat/ntr/gln and reads back case-insensitively.
Country code¶
XSD type CountryCodeType: <xs:pattern value="\d\d\d"/> — ISO 3166-1 numeric, exactly three
digits, leading zero mandatory. No enumeration; the valid values come from the
ISO code list, the schema only checks the form.
Used in AddressType.CountryID, ConcernedCountryType.CountryID,
Annex7ConcernedCountryType.countryID, OnBehalfCAType.CountryID and others.
A formally valid but unknown code is only rejected by the business logic — then with
DISPATCH_COUNTRY_NOT_FOUND, TRANSIT_COUNTRY_NOT_FOUND, DESTINATION_COUNTRY_NOT_FOUND,
COUNTRY_NOT_FOUND or CA_CODE_COUNTRY_NOT_FOUND, depending on where it occurs.
For the format difference compared with the directory lookup, see Notation pitfalls.
Other small value sets¶
| XSD type | Values | Meaning |
|---|---|---|
CountryRoleIDType |
E, I, T |
Role of the country: export/dispatch, import/destination, transit |
RejectionIndicatorType |
A, R |
A = fully accepted, R = fully rejected |
DecisionTypeEnum |
CONSENT, OBJECTED, WITHDRAWN |
Authority decision |
MessageCategoryCodeType |
inform, request |
inform = for information only, request = response expected |
StatementTypeCodeType |
RequestForNotificationInformation, PreConsentInformation |
Type of a statement message |
PriorityCodeType |
1, 2, 3 |
1 = Immediate, 2 = Urgent, 3 = Normal (UN/CEFACT code list 4037) |
GenderCodeType |
1, 2 |
ISO 5218: 1 = male, 2 = female |
AuthorityStatusType |
VALID, DELETED |
Status of an authority in the directory |
AuthorityActivityStatusType |
VALID, SUSPENDED, DELETED |
Status of an authority activity |
OperatorActivityStatusBaseType |
NEW, VALID, SUSPENDED, DELETED |
Status of an operator activity |
OperatorNameQueryMatchModeBaseType / AuthorityNameQueryMatchModeType |
PHRASE, FULL_TEXT |
Search mode in the directory, default PHRASE |
OperatorAuthorityActivityQueryCodeBaseType |
ACTIVITY_CODE, UNLOCODE |
Type of code in the activity search, default ACTIVITY_CODE |
OperatorSortingPredicateBaseType |
UPDATE, CREATE, NAME |
Sorting of the result list |
SDK enums exist for DecisionType, PriorityCode and SignalStatementType.
The value set of SignalStatementType: ProperlyCarriedOut, ProperlyCompleted,
NotificationInvalid, NotificationRevalidated, NotificationCancelled,
NotificationCompleted, NoPreConsentedFacilityTimeline, RejectPreConsentedFacility,
MovementCancelled, Annex7Cancelled, NotificationWithdrawn.
Event codes¶
XSD type waste:ModificationEventCode, 52 values. Used in WasteEventType.code
(event list of a document) and SyncNotificationEventType.code (detail of a sync event).
Notification
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
Signals
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 (prefix GLW_ for 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
Status changes, pre-consent, confidentiality
UPDATE_NOTIFICATION_STATUS UPDATE_MOVEMENT_STATUS UPDATE_GLW_STATUS
NEW_PRE_CONSENT_FACILITY UPDATE_PRE_CONSENT_FACILITY
UPDATE_FACILITY_CONFIDENTIALITY
The sheet gets the status change for Annex VII wrong
Event codes for sync.xlsx lists UPDATE_ANNEX7_STATUS. In the schema, the value is called
UPDATE_GLW_STATUS — matching the GLW_ prefix of the other Annex VII events. A match
against the sheet value never finds a hit. All other 51 values match between sheet
and schema.
For 19 events, the sheet additionally has a short code (NEWSUB, UPDSUB, NEWACK,
NEWREQ, NEWDEC, …) before the long name. The code field contains only the long name —
ModificationEventCode enumerates only these. One of the short codes is also
misspelled in the sheet (NEWMOVEMENT_CONIGNEE_RECEIPT).
The six values from the block “Status changes, pre-consent, confidentiality” are annotated in the
ZEDAL protos only on SyncNotificationEventType.code, not on WasteEventType.code
— the other 46 are there. The XSD type is the same for both fields.
Error pattern by list¶
| Trigger | Error |
|---|---|
| Unknown code in a validated waste code list | WASTE-CLASSIFICATION-INVALID-CODE / waste.error.classification.code |
Outdated or misspelled listID |
the same message — the error does not distinguish between “wrong code” and “wrong list” |
| Waste code without group spaces | the same message |
HP code under h-code, or HP code with EU suffix |
the same message |
WasteClassification missing entirely |
WASTE_CLASSIFICATION_REQUIRED / waste.notification.waste.classification.required |
Value outside an XSD enumeration (packaging, physical characteristics, transport, R/D, typeID) |
SOAP fault, HTTP 500, cvc-… message from the schema validator |
| Country code not three digits | SOAP fault, HTTP 500, cvc-pattern-valid … pattern '\d\d\d' for type 'CountryCodeType' |
| Country code formally valid, country unknown | DISPATCH_COUNTRY_NOT_FOUND / TRANSIT_COUNTRY_NOT_FOUND / DESTINATION_COUNTRY_NOT_FOUND / COUNTRY_NOT_FOUND |
| Packaging codes missing | PACKAGING_TYPE_CODES_REQUIRED |
| Physical characteristics missing | PHYSICAL_CHARACTERISTICS_CODES_REQUIRED |
Attachment without typeID |
ATTACHMENT_TYPE_EMPTY / waste.error.invalid.attachment.type |
The complete error code reference is at Error codes.
The EU error code list is not exhaustive
Validations-messages.xlsx lists 188 codes, but does not fully cover the ones that actually occur
— codes actually reported back, such as REJECTED-QUANTITY-EMPTY and
REJECTION-DESCRIPTION-EMPTY, are not there in any notation. Treat unknown
error codes at runtime as expected and log them instead of matching against a fixed list.
Known gaps¶
These points cannot be answered from the specification:
customs_codes: not a single valid example code is known. The detail sheet is empty, the four-digit HS heading is rejected.- Upper/lower case of the
listID: whether DIWASS checks case-insensitively is not established. - LoW codes in a transition window: none of the 58 codes with
[from …]/[until …]was measured against DIWASS. - Numeric
listIDfor national lists: permitted according to the schema annotation (WasteClassificationSchemeOrCountryIdentifierType), not measured. - Code list verification on the Annex VII path: the 18-of-19 confirmation was carried out via a
notification. The
listIDcheck runs on the server side, not in the schema — so the result does not automatically carry over to the Annex VII announcement.