diff --git a/services/domain/Big.Application/BeoordeelRegistratie.cs b/services/domain/Big.Application/BeoordeelRegistratie.cs
index f0a384f..8ba8e3f 100644
--- a/services/domain/Big.Application/BeoordeelRegistratie.cs
+++ b/services/domain/Big.Application/BeoordeelRegistratie.cs
@@ -20,10 +20,12 @@ public sealed record BeoordeelRegistratieCommand(RegistrationId RegistrationId,
/// sets the zaak's final status via the ACL (ยง8.1) and
/// advances the aggregate to INGESCHREVEN; advances it to
/// AFGEWEZEN in the domain (propagating a rejection to the zaak, so the openbaar projection reflects
-/// it, is a later sub-slice of S-12). Both decisions are idempotent โ a repeated or redelivered
-/// decision that matches the current terminal state is a no-op, so the ACL is not called twice.
+/// it, is a later sub-slice of S-12). After applying the decision it completes the Flowable
+/// Beoordelen task (found by registrationId) so the workflow advances (ADR-0013). Both
+/// decisions are idempotent โ a repeated or redelivered decision that matches the current terminal
+/// state is a no-op, so the ACL is not called and the task not completed twice.
///
-public sealed class BeoordeelRegistratie(IRegistrationStore store, IAclClient acl)
+public sealed class BeoordeelRegistratie(IRegistrationStore store, IAclClient acl, IUserTaskClient tasks)
{
public async Task HandleAsync(BeoordeelRegistratieCommand command, CancellationToken ct = default)
{
@@ -53,5 +55,17 @@ public sealed class BeoordeelRegistratie(IRegistrationStore store, IAclClient ac
}
await store.SaveAsync(registration, ct);
+ await CompleteWorkflowTaskAsync(command.RegistrationId, command.Besluit, ct);
+ }
+
+ // Advance the workflow: complete the open Beoordelen task for this registration. If none is open
+ // (already completed, or the process hasn't parked yet) the decision still stands โ we complete
+ // nothing rather than fail.
+ private async Task CompleteWorkflowTaskAsync(RegistrationId registrationId, BeoordelingsBesluit besluit, CancellationToken ct)
+ {
+ var open = await tasks.GetOpenBeoordelingenAsync(ct);
+ var task = open.FirstOrDefault(t => t.RegistrationId == registrationId);
+ if (task is not null)
+ await tasks.CompleteBeoordelingAsync(task.TaskId, besluit, ct);
}
}