namespace Big.Domain; /// /// The Registration aggregate root (CLAUDE.md §2.2): a zorgprofessional's submission to the BIG /// register. It owns its lifecycle invariants — it starts /// on submission, remembers the Flowable process that drives it, and records the zaak the ACL opens. /// public sealed class Registration { // STUB (red): mutators are no-ops and Submit leaves the bsn empty so the behaviour tests // compile and fail on their assertions. The green commit implements the invariants. private Registration(RegistrationId id, string bsn) { Id = id; Bsn = bsn; Status = RegistrationStatus.Ingediend; } public RegistrationId Id { get; } /// The citizen-service number of the submitting zorgprofessional. Handed to the ACL /// as the domain payload; the domain never constructs ZGW concepts from it (§8.1). public string Bsn { get; } public RegistrationStatus Status { get; private set; } /// The Flowable process instance driving this registration, once started. public string? ProcessInstanceId { get; private set; } /// The zaak the ACL opened for this registration, once the external task has run. public Uri? ZaakUrl { get; private set; } /// Submit a new registration. It begins in . public static Registration Submit(string bsn) => new(RegistrationId.New(), string.Empty); /// Record that the registratie workflow process has been started for this registration. public void RecordProcessStarted(string processInstanceId) { // STUB (red). } /// Attach the zaak the ACL opened. Idempotent on the same URL; a conflicting URL is rejected. public void AttachZaak(Uri zaakUrl) { // STUB (red). } }