Zum Inhalt

Annex VII mit dem SDK

Setup und je Stage der Aufruf über den Annex7DocumentHandler.

Die fachlichen Hintergründe stehen in der Anleitung Annex VII (Company-Rolle).

Setup

// Authenticated client with an active session — see Getting started
var client = ZedalClientFactory.Default.CreateClient(
    TargetSystem.Test, "MyIntegrationApp", "1.0.0");

await client.CreateSession(
    userId:   "mysubscriber-myaccount@1:mypassword",
    appToken: new AppToken("<APP_TOKEN_JWT>"));

Pro Annex VII ein Handler. Jede Folge-Stage lädt den aktuellen Stand mit LoadFromZedalByAnnex7DocumentNo(annex7DocumentNo) neu.

Stage 1 — CreateAnnex7

Annex7DocumentHandler handler = client.DocumentHandler.CreateAnnex7Handler();

await handler.CreateAnnex7(new WasteAnnex7DocumentType
{
    // arranger, waste producer (or ArrangerIsProducer = true without a WasteProducer),
    // carriers, consignee, recovery facility or laboratory,
    // waste, quantity, planned start of the shipment, recovery operation …
    // CurrentUserPartyUuid: the PartyUuid of the arranger
    // TransportAnnouncement.ShipmentOriginLocation.PartyUuid: a party in the document
});
await handler.SendToDiwass(ZedalCallContext.Default.WithTimeout(180));
await handler.WaitForDiwassTransfer(
    timeout:      TimeSpan.FromMinutes(6),
    pollInterval: TimeSpan.FromSeconds(5));
await handler.ReloadFromZedal();

// The Annex VII number is assigned by DiWaSS and arrives with its response.
string annex7DocumentNo = handler.DiwassNotificationId;

DiwassNotificationId trägt beim Annex VII die Annex-VII-Nummer. Sie steht erst nach dem Nachladen fest; vorher ist sie leer. Welche Felder DiWaSS über das Schema hinaus verlangt, steht unter Feldregeln → Annex VII, alle Felder unter DiWaSS-Felder.

Status und nächste Schritte

var handler = client.DocumentHandler.CreateAnnex7Handler();
await handler.LoadFromZedalByAnnex7DocumentNo(annex7DocumentNo);

// status as last reported by DiWaSS, e.g. "MOVING"
string status = handler.Annex7.GetInformation()?.Announcement?.DocumentStatus?.Value;

// steps the document allows next, narrowed down to your roles in it
IReadOnlyList<long> mine = await client.MyAccount.GetOwnDiwassOperatorIds();
var mySteps = PermissionMatrixInference.Filter(mine, handler.FollowupIntents, handler.Annex7);

Die Statuswerte sind dieselben wie beim Movement. Die Zustände und welcher Aufruf in welchen Status führt, zeigt der Lebenszyklus.

Stage 2 — SetAnnex7

Ändert die Ankündigung. Die Annex-VII-Nummer muss im Dokument stehen, sonst findet DiWaSS die Ankündigung nicht.

var handler = client.DocumentHandler.CreateAnnex7Handler();
await handler.LoadFromZedalByAnnex7DocumentNo(annex7DocumentNo);

await handler.SetAnnex7(new WasteAnnex7DocumentType
{
    // the complete announcement with the Annex VII number,
    // e.g. now with the actual quantity and the carrier …
});
await handler.SendToDiwass();

Stage 3 — SetAnnex7CarrierTransfer

var handler = client.DocumentHandler.CreateAnnex7Handler();
await handler.LoadFromZedalByAnnex7DocumentNo(annex7DocumentNo);

await handler.SetAnnex7CarrierTransfer(new WasteAnnex7TransportType
{
    // Annex VII number, your carrier party with a contact of name, phone number and email,
    // date of takeover, means of transport …
});
await handler.SendToDiwass();

Stage 4 — SetAnnex7ConsigneeCertificate

var handler = client.DocumentHandler.CreateAnnex7Handler();
await handler.LoadFromZedalByAnnex7DocumentNo(annex7DocumentNo);

await handler.SetAnnex7ConsigneeCertificate(new WasteAnnex7ConsigneeCertificateOfWasteReceiptType
{
    // Annex VII number, date of receipt, quantity received,
    // your declaration and signature as consignee …
});
await handler.SendToDiwass();

Stage 5 — SetAnnex7FacilityCertificate

var handler = client.DocumentHandler.CreateAnnex7Handler();
await handler.LoadFromZedalByAnnex7DocumentNo(annex7DocumentNo);

await handler.SetAnnex7FacilityCertificate(new WasteAnnex7CertificateOfWasteReceiptType
{
    // Annex VII number, date of receipt, quantity accepted,
    // your declaration and signature as facility or laboratory …
});
await handler.SendToDiwass();

Stage 6 — SetAnnex7CertificateOfCompletion

var handler = client.DocumentHandler.CreateAnnex7Handler();
await handler.LoadFromZedalByAnnex7DocumentNo(annex7DocumentNo);

await handler.SetAnnex7CertificateOfCompletion(new WasteAnnex7CertificateOfWasteCompletionType
{
    // Annex VII number, completion date, recovery operation applied,
    // quantity recovered, your declaration and signature …
});
await handler.SendToDiwass();

Stornierung und Rücknahme

  • Stornierung: Der Veranlasser storniert mit dem Signal Annex7Cancelled. Der Annex7DocumentHandler hat dafür in SDK 1.4.0 keine eigene Methode.
  • Rücknahme: SetAnnex7TakeBack(WasteAnnex7TakeBackType) ist der Schritt der zuständigen Behörde. UserCompetentAuthorityDomainId und CompetentAuthoritySignature sind Pflichtfelder.

Validierung und Fehlerbehandlung

Wie beim Movement: Validierungsfehler stehen nach dem Stage-Aufruf in handler.ValidationErrors, WaitForDiwassTransfer wirft DiwassTransferFailedException, wenn DiWaSS ablehnt, und TimeoutException, wenn keine Quittung kommt. Die Zeitbudgets stehen unter Lebenszyklus → Versandverfahren, die Codes unter Fehlercodes.