Add registratie wizard, BFF dashboard-view, contracts/value-objects, and architecture docs

Checkpoint of in-progress work: the registration wizard (address prefill,
DUO diploma lookup, policy questions), decision-DTO contracts, parse-don't-
validate value objects, infrastructure adapters, plus CLAUDE.md and the
architecture/ADR docs.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-06-26 17:23:52 +02:00
parent 8a8a2f0f29
commit 64385999eb
58 changed files with 7271 additions and 556 deletions

View File

@@ -0,0 +1,32 @@
import { describe, it, expect } from 'vitest';
import { parseDashboardView } from './dashboard-view.adapter';
const valid = {
registration: {
bigNummer: '19012345601',
naam: 'Dr. A. de Vries',
beroep: 'Arts',
registratiedatum: '2012-09-01',
geboortedatum: '1985-03-14',
status: { tag: 'Geregistreerd', herregistratieDatum: '2027-03-01' },
},
person: { naam: 'Dr. A. de Vries', geboortedatum: '1985-03-14', adres: { straat: 'X 1', postcode: '2514 EA', woonplaats: 'Den Haag' } },
decisions: { eligibleForHerregistratie: true, herregistratieReason: 'within window' },
};
describe('parseDashboardView (trust boundary)', () => {
it('maps a valid response into a DashboardView', () => {
const r = parseDashboardView(valid);
expect(r.ok).toBe(true);
if (r.ok) {
expect(r.value.profile.registration.bigNummer).toBe('19012345601');
expect(r.value.decisions.eligibleForHerregistratie).toBe(true);
}
});
it('rejects malformed responses instead of trusting them', () => {
expect(parseDashboardView(null).ok).toBe(false);
expect(parseDashboardView({ ...valid, registration: undefined }).ok).toBe(false);
expect(parseDashboardView({ ...valid, decisions: { eligibleForHerregistratie: 'yes' } }).ok).toBe(false);
});
});