AI translation
This page was translated from German with AI. If in doubt, the German original applies.
Movement (company role)¶
This guide shows how a consented notification is carried out operationally — from creating the movement document to the facility’s completion report.
Prerequisites:
- Consented notification: all authorities concerned (dispatch, destination, transit) have given consent — the notification is in status
CONSENT. Without consent, no movement can be created. - Logged-in access to ZEDAL — see Getting started.
- Understanding of the DIWASS roles and the lifecycle.
What this guide does not cover:
- Authority stages (
SetMovementTakeBack,MovementCancelledSignal) — see Authority. - The notification path that precedes it — see Notification (Company).
This guide shows excerpts per stage
The examples focus on the respective step and leave out fields that contribute nothing to understanding the stage. The complete rules for fields and values are in the field rules and the code lists.
A fully runnable reference project is currently not publicly available. If you need one, ask ZEDAL support.
With the .NET SDK
The code for this guide is shown in Movement with the SDK.
Actors per stage¶
In the movement, the executing account changes from stage to stage. Who triggers which stage follows from the operator identities entered in the submission:
| Stage | Actor (role) | Note |
|---|---|---|
CreateMovementTemplate |
Notifier | Identical to the notifier of the notification |
SetCarrierTransport |
Carrier | If several carriers are involved, the one responsible in each case |
SetConsigneeReception |
Consignee | |
SetFacilityReception |
RecoveryDisposalFacility | |
SetFacilityCompletion |
RecoveryDisposalFacility | Per facility; with interim storage + final treatment, a separate call for each |
If several roles are performed by the same operator (e.g. the notifier is also the carrier), the calls are still made from the same session — what matters is the slot assignment in the notification, not the number of accounts.
Stage 1 — CreateMovementTemplate¶
The notifier creates the movement document based on the consented notification. It contains the planned quantities and the planned shipment date; the operational data (actual departure, takeover) are added in the following stages.
Every movement carries a SequenceNumber — the consecutive number of the shipment within the notification. Together with the NotificationId, it forms the MovementId. Unlike the NotificationId, it is not reserved on the server side; the integrator determines it. Use GetNextSequenceNumber(notificationId) for this — otherwise movements created repeatedly on the same notification collide.
→ Implementation with the .NET SDK
Status after a successful push: ANNOUNCED. SaveToZedal() and SendToDiwass() have no return values — for the state, see handler.ZedalDocumentId, handler.LastTransferLogId, handler.DiwassNotificationId.
Two number formats — do not confuse them
The same business sequence appears in two notations:
- ZEDAL transport paper number —
<NotificationId>.<sequence>, e.g.DE0126013235i.00002(max. 5 digits, withoutMOVsuffix). This is how the number appears in the transport paper index;GetNextSequenceNumberbuilds on it. - DIWASS MovementId —
<NotificationId>.<sequence>MOV, e.g.DE0126005589i.000001MOV. This is the value inhandler.DiwassNotificationId.
GetNextSequenceNumber returns the plain integer that you enter in SequenceNumber — not the formatted paper or movement number.
The number of shipments is capped
In block 4, the notification states the intended total number of shipments, and the system does not allow more movement documents than this number. If an authority’s consent contains a lower number as a condition, the lower number applies.
What matters for the implementation: A movement document that has been created but not used counts against the intended number of shipments. Only a properly canceled document is not counted. If you create movements during development or testing and leave them lying around, you use up real shipments of the notification — and only notice when the last real transport is rejected.
Therefore, provide a way in your application to actively cancel a movement that is not needed, instead of simply no longer using it. Legal basis: Implementing Regulation (EU) 2025/1290 Article 17(7) and (8).
Together with the missing reservation path, this means: assigning numbers is a task of your application — DIWASS does not help you with it, but it does keep count.
Stage 2 — SetCarrierTransport¶
As soon as the physical transport begins, the carrier records the transport data.
→ Implementation with the .NET SDK
Status after push: MOVING. Several carriers in a carrier chain are mapped serially through separate SetCarrierTransport calls — one call per carrier, in the order of the handovers.
Stage 3 — SetConsigneeReception¶
The consignee confirms receipt of the goods.
→ Implementation with the .NET SDK
Status after push: RECEIVED — the value is set with the first confirmation of receipt, regardless of how many facilities the chain still includes.
Subject to a time limit — and “working day” here means Monday to Friday
The regulation sets a time limit for the confirmation of receipt, counted from the start of transport. Take the specific length from the applicable text of the regulation; it differs between the notification procedure and the procedure under Annex VII.
What matters for the calculation in code: the regulation’s term “working day” means Monday to Friday and does not follow § 193 of the German Civil Code (Bürgerliches Gesetzbuch, BGB), which includes Saturday. If you calculate according to German legal practice, your time limit comes out too short.
Stage 3 is omitted if consignee and facility are identical
If the consignee and the facility are the same operator in the notification, SetConsigneeReception is omitted in accordance with Regulation (EU) 2024/1157 — receipt of the goods is then confirmed directly in stage 4 as acceptance by the facility. The status then goes from MOVING directly to RECEIVED, without a consignee certificate being present.
Stage 4 — SetFacilityReception¶
The recovery or disposal facility confirms acceptance for treatment. If the consignee and the facility are the same operator, this one call covers the entire post-transit step (stage 3 is omitted — see the note above).
→ Implementation with the .NET SDK
The status remains RECEIVED — it does not distinguish between acceptance by the consignee and by the facility. Which facility acknowledged is stated in the certificate itself.
If several facilities are involved (e.g. interim storage + final treatment), each one performs its own reception — a separate call sequence per facility.
Stage 5 — SetFacilityCompletion¶
The facility completes the treatment. Stage 5 marks the end of the regular lifecycle.
→ Implementation with the .NET SDK
Status after push: COMPLETED.
Subject to a time limit — and the time limit is not anchored to acceptance
The regulation requires the certificate of completed recovery or disposal within a time limit, but the time limit starts with the completion of the operation, not with the acceptance of the waste; in addition, an outer limit applies from receipt. Take both values from the applicable text of the regulation and do not calculate with a single time limit from acceptance.
Practical consequence for the notifier: the financial guarantee is released only when the competent authority has received the certificate of completed recovery or disposal. A late certificate therefore ties up capital with a third party.
What’s next¶
- Notification (Company) — How the upstream notification works
- Lifecycle — State diagrams and complete stage overview
- Roles — Who may perform which stage
- Authority — Authority interventions such as take-back orders or cancellation