The ACL exposes zaak cancellation as a service operation the domain calls on document-timeout expiry; it default-fills the zaaktype and dates the status today, translating the domain intent to the ZGW cancellation status/resultaat. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
82 lines
3.3 KiB
C#
82 lines
3.3 KiB
C#
namespace Acl.Application;
|
|
|
|
/// <summary>The ACL's single operation: open a zaak from a domain payload,
|
|
/// default-filling the ZGW-mandatory fields (ADR-0003).</summary>
|
|
public sealed class AclService(IZaakGateway gateway, AclDefaults defaults, IClock clock)
|
|
{
|
|
public Task<Uri> OpenZaakAsync(DomainRegistration registration, CancellationToken ct = default)
|
|
{
|
|
ArgumentNullException.ThrowIfNull(registration);
|
|
|
|
var request = new ZaakRequest(
|
|
defaults.Bronorganisatie,
|
|
defaults.VerantwoordelijkeOrganisatie,
|
|
defaults.Vertrouwelijkheidaanduiding,
|
|
defaults.ZaaktypeUrl,
|
|
clock.Today,
|
|
registration.Reference);
|
|
|
|
return gateway.OpenZaakAsync(request, ct);
|
|
}
|
|
|
|
/// <summary>
|
|
/// Approve a zaak: set it to the eindstatus of the configured BIG zaaktype (ADR-0003 default). The
|
|
/// domain hands over only the zaak URL; the ACL owns which statustype means "approved" (§8.1).
|
|
/// </summary>
|
|
public Task ApproveZaakAsync(Uri zaakUrl, CancellationToken ct = default)
|
|
{
|
|
ArgumentNullException.ThrowIfNull(zaakUrl);
|
|
|
|
return gateway.SetZaakToEindstatusAsync(zaakUrl, defaults.ZaaktypeUrl, clock.Today, ct);
|
|
}
|
|
|
|
/// <summary>
|
|
/// Cancel a zaak on document-timeout expiry (S-10c): set it to the configured BIG zaaktype's
|
|
/// cancellation statustype + resultaat. The domain hands over only the zaak URL; the ACL owns which
|
|
/// statustype/resultaat means "cancelled" (§8.1).
|
|
/// </summary>
|
|
public Task CancelZaakAsync(Uri zaakUrl, CancellationToken ct = default)
|
|
{
|
|
ArgumentNullException.ThrowIfNull(zaakUrl);
|
|
|
|
return gateway.SetZaakToCancellationStatusAsync(zaakUrl, defaults.ZaaktypeUrl, clock.Today, ct);
|
|
}
|
|
|
|
/// <summary>The zaak's reference (its ZGW identificatie), for the read projection (#78).</summary>
|
|
public Task<string> GetZaakReferenceAsync(Uri zaakUrl, CancellationToken ct = default)
|
|
{
|
|
ArgumentNullException.ThrowIfNull(zaakUrl);
|
|
|
|
return gateway.GetZaakIdentificatieAsync(zaakUrl, ct);
|
|
}
|
|
|
|
/// <summary>
|
|
/// Store an uploaded diploma against the zaak (S-10b): default-fill the ZGW-mandatory document
|
|
/// fields (informatieobjecttype, bronorganisatie, vertrouwelijkheidaanduiding, taal, creatiedatum)
|
|
/// and hand the file to the gateway, which creates the informatieobject and relates it to the zaak.
|
|
/// The domain supplies only the zaak, the bytes, and the file's name/type (§8.1).
|
|
/// </summary>
|
|
public Task<Uri> StoreDiplomaAsync(Uri zaakUrl, byte[] content, string fileName, string contentType, CancellationToken ct = default)
|
|
{
|
|
ArgumentNullException.ThrowIfNull(zaakUrl);
|
|
ArgumentNullException.ThrowIfNull(content);
|
|
ArgumentException.ThrowIfNullOrWhiteSpace(fileName);
|
|
ArgumentException.ThrowIfNullOrWhiteSpace(contentType);
|
|
|
|
var request = new DocumentRequest(
|
|
defaults.Bronorganisatie,
|
|
defaults.InformatieobjecttypeUrl,
|
|
defaults.Vertrouwelijkheidaanduiding,
|
|
zaakUrl,
|
|
clock.Today,
|
|
Titel: "Diploma",
|
|
Auteur: "zorgprofessional",
|
|
Taal: "nld",
|
|
Bestandsnaam: fileName,
|
|
Formaat: contentType,
|
|
Inhoud: content);
|
|
|
|
return gateway.StoreDocumentAsync(request, ct);
|
|
}
|
|
}
|