/** * WIRE CONTRACT for the dashboard screen — the "BFF-lite" response. * * PURE wire shapes: this file imports NOTHING (CLAUDE.md §1, ADR-0001). Enums are * inlined string-literal unions that describe the wire, not the domain. The * adapter's `parseDashboardView` validates this untrusted shape and MAPS it onto * the FE domain model (Registration/Person/BigProfile) — that map is the * decoupling seam: the wire can change without the domain following. * * In production these types are GENERATED from the OpenAPI/TypeSpec spec (one * source of truth for both sides), and the `decisions` block is computed BY THE * BACKEND — never recomputed on the client. The frontend renders decisions; it * does not own the rules. See docs/reference/architecture/0001-bff-lite-decision-dtos.md. * * One screen-shaped call replaces the previous three (BIG-register + BRP + …), * so the page always sees one consistent snapshot instead of three independently * loading/erroring resources. */ /** Registration status on the wire: the discriminant tags as they arrive. */ export type RegistrationStatusDto = | { tag: 'Geregistreerd'; herregistratieDatum: string } // ISO date | { tag: 'Geschorst'; geschorstTot: string; reden: string } | { tag: 'Doorgehaald'; doorgehaaldOp: string; reden: string }; export interface RegistrationDto { bigNummer: string; naam: string; beroep: string; registratiedatum: string; // ISO date geboortedatum: string; status: RegistrationStatusDto; } export interface AdresDto { straat: string; postcode: string; woonplaats: string; } export interface PersonDto { naam: string; geboortedatum: string; // ISO date adres: AdresDto; } /** Server-computed decisions. Rendered by the FE as-is (decision DTO, ADR-0001): the eligibility rule lives on the backend; the optional reason lets the UI explain itself without knowing the rule. */ export interface HerregistratieDecisions { eligibleForHerregistratie: boolean; herregistratieReason?: string; } export interface DashboardViewDto { registration: RegistrationDto; person: PersonDto; decisions: HerregistratieDecisions; }