swift-cortex: technisch datamodel instroom/intake + ER-diagrammen #1

Merged
colin merged 19 commits from swift-cortex into main 2026-07-29 08:07:11 +02:00

19 Commits

Author SHA1 Message Date
colinislit
0db3ec2ce1 docs(datamodel): Mermaid ER-diagrammen voor alle actuele deelmodellen
Voegt docs/datamodel/diagrammen/ toe: één self-contained HTML per
deelmodel (instroom, aanmelding, behandelplan, diagnose,
intake-behandeladvies, rapportage, screening, wachtlijst), elk met een
Mermaid erDiagram, blueprint-vormgeving en sleep/scroll pan-zoom
(mermaid.js + svg-pan-zoom via CDN, geen serverside build nodig).

Per diagram alleen sleutel-/FK-attributen en de kernrelaties uit de §2/§3
entiteiten-/cardinaliteitensecties van het bijbehorende deelmodel, niet elk
veld — bedoeld als navigeerbaar overzicht naast de tabelvorm, niet als
vervanging ervan.

Scope-keuzes:
- model-intake.md en datamodel-discovery.md zijn overgeslagen: eerstgenoemde
  is volledig vervangen door model-intake-behandeladvies.md, laatstgenoemde
  is een prosedocument zonder entiteitenstructuur.
- model-aanmelding.md toont alleen de nog geldige PERSOON/CLIENT-kern;
  AANMELDING/VERWIJZING/ZORGEPISODE zijn vervangen door model-instroom.md
  en daar al gediagrammeerd.
- model-screening.md krijgt een expliciete waarschuwing in titel en
  bronregel: het losse screeningsbesluit is achterhaald door besluit B21
  (screeningsbesluit = acceptatiebesluit, nu care_acceptance_decision in
  model-instroom.md).
- model-behandelplan.md, model-rapportage.md en model-wachtlijst.md tonen
  een statusnotitie (in herziening resp. deels herzien resp. voorlopig
  onderzoeksmodel) conform hun documentstatus.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-29 08:01:38 +02:00
colinislit
d5b583e24a docs(datamodel): sessielog avondronde 19 juli
Legt de middag-/avondsessie van 19 juli vast die tot nu toe alleen in
commit messages en het besluitenlog terug te vinden was: afronding van de
instroom-feitenronde (vraag 3-5, entiteiten/cardinaliteiten, B21-B30,
synchronisatie begrippenlijst/model-aanmelding) en de nieuwe feitenronde
intake/behandeladvies (episode-timing, Treatment Advice, B31-B34).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-29 08:01:25 +02:00
colinislit
ea4c0c836f feat(db): technisch datamodel instroom/intake/behandeladvies (SQL-migraties)
Vertaalt de FCO-IM-feitenrondes en logische modellen naar 37 nieuwe
PostgreSQL-tabellen, verdeeld over vier migraties:

- create_reference_data: één generieke value_list_item-tabel (spelregel
  3.1 #1) i.p.v. ~30 losse waardelijst-tabellen, met alle startwaarden uit
  model-aanmelding.md/model-instroom.md/model-intake-behandeladvies.md.
- create_person_client_domain: person, address, contact_detail, client,
  client_relation, referrer, practice_organization,
  client_general_practitioner, insurance, consent, client_portal_account
  (model-aanmelding.md §2.1-2.9, 2.14, 2.16). BSN als bsn_hash (SHA-256),
  conform de platform-privacyregel — geen raw BSN, geen reversibele
  encryptie.
- create_referral_domain: 20 entiteiten uit model-instroom.md (referral_
  request t/m episode_team_involvement), inclusief de vervangt-constraints
  als partial unique index (voorkomt vertakking) en de XOR-check op
  clinical_care_episode tussen acceptatiebesluit en Wvggz-mandaat.
- create_intake_treatment_advice_domain: 5 entiteiten uit
  model-intake-behandeladvies.md.

Scope: dit zijn nieuwe, additieve tabellen naast de bestaande prototype-
tabellen (patients, screenings, intakes, patients.is_john_doe,
intakes.kindcheck_data) — die tabellen zijn bewust niet aangeraakt.
Wiring van de live app op dit schema, en migratie van prototype-data, is
een aparte, nog te nemen beslissing. Migraties zijn nog niet toegepast op
een database.

decision_authority_id (care_acceptance_decision) is tijdelijk nullable
zonder FK — het doeltabel volgt uit de bevoegdheidsronde (B16). Perifere
waardelijst-kolommen zijn TEXT met een verwijzing naar de bedoelde lijst in
een comment, geen harde FK naar value_list_item — applicatievalidatie (Zod)
dekt die laag; business-kritieke uitkomsten (decision_outcome,
treatment_advice_outcome, mandate_type) hebben wel een CHECK-constraint.
2026-07-20 08:57:12 +02:00
colinislit
7ad50f4e33 docs(datamodel): feitenronde intake en behandeladvies afgerond
Voegt feitenmodel-intake-behandeladvies.md en model-intake-behandeladvies.md
toe: FCO-IM-feitenronde en entiteiten-/cardinaliteitenafleiding voor
Clinical Intake Assessment, Intake Contact, Child Safety Check en Treatment
Advice. Corrigeert de episode-timing (intake start ná het acceptatiebesluit,
niet bij een niet meer bestaande aanmelding-uitkomst "intake").

Sluit feitenmodel-instroom.md §7 vraag 2 af (behandeladvies-uitkomsten,
sinds sessielog 19 juli geparkeerd): behandeladvies wordt een eigen
Treatment Advice-object met vervangt-mechanisme, naar het patroon van Care
Acceptance Decision — geen apart voorafgaand advies. Op basis van volledige
LKS 4.0-teksttoetsing (niet alleen samenvattingen): doorverwijzing/
terugverwijzing zijn een volgtijdelijk paar, extra_diagnostiek is
praktijkgefundeerd niet LKS-genormeerd, en MDT-bespreking is voor settings
3-8 een dwingende norm (minimale hook: intake_mdt_review).

Legt B31-B34 vast in het besluitenlog, synchroniseert begrippenlijst §4
(Clinical Intake Assessment, Intake Contact, Child Safety Check, Treatment
Advice) en markeert het oudere model-intake.md niet-destructief als
vervangen, consistent met hoe model-aanmelding.md eerder is behandeld.
2026-07-19 18:24:34 +02:00
colinislit
890704a0f4 docs(datamodel): synchroniseer begrippenlijst en model-aanmelding met instroom
begrippenlijst-kernmodel.md §3: vervangt de voorlopige werktermen (Inbound
Care Signal, Access Assessment Case, Presenting Care Need, Screening
Recommendation) door de bevestigde instroom-begrippen uit model-instroom.md
(Referral Request/Submission/Case, Professional/Municipal Referral, Legal
Mandate, Case Information Request/Withdrawal, Crisis Encounter Note, Case
Urgency Assessment). §10 bijgewerkt: opgeloste terminologievragen gemarkeerd,
Wvggz/Wmo-Jeugdwet-aannames als nieuw juridisch te bevestigen punt.

model-aanmelding.md: AANMELDING/VERWIJZING/VERWIJSDOCUMENT/TOEWIJZING/
ZORGEPISODE (§2.10-§2.13, §2.15) niet-destructief gemarkeerd als vervallen
met verwijzing naar de vervangende entiteit in model-instroom.md — tekst
blijft als historisch werkdocument staan, consistent met het
niet-destructieve patroon dat elders in het datamodel wordt toegepast.
PERSOON/CLIENT/CLIENTRELATIE/VERWIJZER/PRAKTIJK_INSTELLING/CLIENT_HUISARTS/
VERZEKERING/TOESTEMMING/CLIENTPORTAAL_ACCOUNT (§2.1-§2.9, §2.14, §2.16)
blijven ongewijzigd en behouden hun sectienummers, waar model-instroom.md
extern naar verwijst. §7 (open besluitpunten) per punt van een status
voorzien, inclusief waar de uiteindelijke beslissing afweek van het advies.

Corrigeert ook twee foutieve paden in model-instroom.md (§4 waardelijsten
verwezen naar de verkeerde sectie in model-aanmelding.md).
2026-07-19 18:08:43 +02:00
colinislit
b663851233 docs(datamodel): besluitenlog uitgebreid met B21-B30 (instroom-feitenronde)
Legt de uitkomst van de instroom-feitenronde en het entiteitenmodel formeel
vast als besluiten B21-B30: screening=acceptatie, losse besluit-/vervolgroute-
/onderbouwingsfeiten, expliciete vervangt-relatie bij herziening,
cliënt-intrekking zonder bevoegdheidseis, tijdlijn i.p.v. statusmachine,
zorgverzoek zonder bekende persoon, Wmo/Jeugdwet en Wvggz als eigen
instroomroutes, crisisdocumentatie vóór identificatie, herhaalbare
urgentiebeoordeling, en een minimale hook voor teambetrokkenheid vooruitlopend
op een aparte zorgteam-ronde.

Werkt §10 (vervolg en nog open) bij: markeert afgeronde punten, voegt de
juridische verificatie- en behandeladvies-onderzoekspunten toe, en noteert
dat model-aanmelding.md's AANMELDING/VERWIJZING/ZORGEPISODE-deel is vervangen
door model-instroom.md (synchronisatie volgt als eerstvolgende stap).
2026-07-19 17:59:30 +02:00
colinislit
f68d63145a docs(datamodel): instroom entiteiten/cardinaliteiten + vier reviewrondes
Voegt model-instroom.md toe: de eerste entiteiten-/cardinaliteitenafleiding
uit feitenmodel-instroom.md (20 entiteiten, Engelstalig conform B20,
vervangt-patroon voor herzieningen, tijdlijn i.p.v. statusmachine voor
Referral Case).

Vier reviewrondes verwerkt:
- technische en GGZ-domeinreview (vertakkende vervangt-keten gefixed,
  timestamp-precisie, ontbrekende ZPM-velden hersteld);
- tweede ronde met datamodel-, GGZ-domein- en UX-expert-agents (lege
  screening-entiteit vervallen, naamgeving, cardinaliteitsfout, read-model-eis);
- GGZ-wetgeving-onderzoek (Wvggz, Wmo/Jeugdwet, 275-dagentoets,
  365-dagenregel, crisisdocumentatie) vertaald naar nieuwe entiteiten
  (municipal_care_assignment, legal_mandate, crisis_encounter_note);
- domeinreview eigenaarschap/urgentie met Colin: herhaalbare
  urgentiebeoordeling (case_urgency_assessment) en een bewust minimale hook
  voor teambetrokkenheid (episode_team_involvement) — het volledige
  zorgteam-model blijft een aparte, nog te plannen ronde.

feitenmodel-instroom.md: "verzoek zonder bekende persoon" (crisisaanmelding)
beantwoord — geen placeholder-persoon, koppeling als eigen gedateerd feit.
2026-07-19 17:46:57 +02:00
colinislit
dc15bf60d6 docs(datamodel): instroom domeinreview afronden (vraag 3, 4, 5)
Beantwoordt de resterende open vragen uit feitenmodel-instroom.md §7:
aanvullende_informatie_nodig wordt een gebeurtenisfeit i.p.v. besluituitkomst
of statusfase, heroverweging na afwijzing krijgt een expliciete
"vervangt"-relatie tussen acceptatiebesluiten, en intrekking vóór start
intake krijgt twee routes (cliënt-intrekking zonder bevoegdheidseis,
institutionele correctie met dezelfde bevoegdheid als het origineel) waarbij
de al ontstane zorgepisode altijd wordt afgesloten, nooit verwijderd.
Referral Case krijgt daarmee een tijdlijn-gebaseerde stand i.p.v. een vaste
lineaire statusmachine. Alleen vraag 2 (behandeladvies-uitkomsten) blijft
open als apart onderzoek.
2026-07-19 11:37:26 +02:00
colinislit
2a1278936b docs(datamodel): FCO-IM feitenronde instroom, besluitenlog + herstructurering
Voegt de discovery- en besluitvormingsronde van 18-19 juli toe (besluitenlog,
begrippenlijst, feitenmodel-instroom met scenariotoetsen, terminologie- en
leveranciersonderzoek) en synchroniseert feitenmodel-instroom.md met de
screening=acceptatie-beslissing (§5). Herstructureert docs/datamodel/ naar
submappen per documentsoort (besluiten/sessielogs/feitenmodellen/deelmodellen/
onderzoek/entiteitenkaarten) zodat toekomstige besluitenlogs en feitenrondes
per deelgebied een vaste plek krijgen.
2026-07-19 11:07:21 +02:00
colinislit
37beef14be docs(datamodel): discovery uitgebreid t/m behandelplan + sessielog 17 juli
- datamodel-discovery.md: scopeverbreding ronde 1 (wachtlijst, diagnose,
  behandelplan), besluiten zorgepisode als eigen entiteit, DSM-5-TR
  primair met ICD-10-mapping, wachtlijstplaatsing op twee momenten
  (Treeknormen), behandelplan-kern; bevindingen prototype-verkenning
- entiteitenkaart-instroom.html: samenhang-diagram (aanmelding als
  besluitproces vs zorgepisode als periode van zorg), diagram 3 met
  wachtlijst/diagnose/behandelplan, nieuwe waardelijsten
- sessielog 17 juli: 13 besluiten, bevindingen en open vragen

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-17 21:51:05 +02:00
colinislit
ca4c409733 docs(datamodel): discovery instroomflow — feitzinnen, besluiten en entiteitenkaart
- datamodel-discovery.md: FCO-IM-werkwijze, spelregels, feitzinnen §5.1
  afgerond met besluiten 17 juli (persoon/cliënt-splitsing, verwijzer +
  praktijk als eigen entiteiten, AGB per verwijzertype, flexibele
  statussen, verwijsbrief als nudge, cliëntportaal-account, BSN optioneel
  op persoon)
- entiteitenkaart-instroom.html: ER-diagram + waardelijsten instroomflow,
  gepubliceerd als artifact ter review

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-17 20:53:14 +02:00
colinislit
6419398060 docs: discussiestuk samenspel TIP-ECD, sessielog 14 juli en releasenote-screenshots
- docs/intent/samenspel-tip-ecd.html: laag-of-platform discussiestuk voor
  de werksessie over de TIP-koppeling (twee modellen, drie routes,
  API-mapping, beslisvragen)
- docs/sessions/2026-07-14-sessielog.md: besluiten, reviewbevindingen en
  uitgevoerde opschoning van vandaag

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-16 15:32:15 +02:00
colinislit
b00bfa5032 chore(strip): verwijder ongebruikte dependencies en marketing-restanten
- next-mdx-remote en gray-matter uit package.json (0 imports)
- components/ui/hero-section-2.tsx en timeline.tsx (nergens geimporteerd)
- lokale .DS_Store-bestanden opgeruimd (stonden al in .gitignore)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-14 22:51:47 +02:00
colinislit
caeba77bf8 chore(strip): verwijder /epd/clients redirect-laag
Alle verwijzingen (middleware, login, auth-callback, set-password,
Cortex context-bar) wijzen nu rechtstreeks naar /epd/patients; de
backwards-compat redirects zijn daarmee overbodig.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-14 22:50:52 +02:00
colinislit
38dd7c1f8a chore(strip): verwijder placeholder-pagina's dashboard en reports
Beide waren lege placeholders ('Epic 1 - Placeholder', 'Not designed yet').
Sidebar-items eruit; login-tests gebruiken /epd/agenda als voorbeeld van
een beveiligde route.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-14 22:49:40 +02:00
colinislit
96848ecc81 chore(strip): verwijder behandelplan-module
AI-generatie negeerde de geregistreerde diagnose en ernst — elk plan was
generiek (reviewbevinding). Module komt terug bij de rebuild, gekoppeld
aan het nieuwe datamodel.

- app/epd/patients/[id]/behandelplan/ en /api/behandelplan/ verwijderd
- components/behandelplan/ (view, list, forms) verwijderd
- lib/ai/behandelplan-prompt.ts, lib/ai/intervention-mapping.ts,
  lib/types/behandelplan.ts verwijderd
- behandelplan-sectie uit patientdashboard, dashboard-API en
  Cortex patient-dashboard-block
- 'Doorzetten naar behandelplan' uit behandeladvies-formulier

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-14 22:47:58 +02:00
colinislit
a8b02c1ef3 chore(strip): verwijder kapotte intake-tabs anamnese, onderzoeken en ROM
Opslaan faalde altijd door label/code-mismatch met de database-constraints
(reviewbevinding). Tabs komen terug bij de rebuild op het nieuwe datamodel.

- tab-mappen anamnese/, examination/, rom/ verwijderd
- tabs uit intake-tabs.tsx, server actions uit actions.ts
- intake-status API telt de secties niet meer mee (voortgangsring klopt)
- Cortex-navigatiedoelen (regex, entity-mapping, prompt) bijgewerkt zodat
  'ga naar anamnese' geen 404 meer geeft

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-14 22:44:09 +02:00
colinislit
5e910c3053 chore(strip): verwijder dubbele diagnosemodule op patientniveau
De intake-variant (intakes/[intakeId]/diagnosis) is de meest complete en
blijft. Sidebar-items Diagnose en Behandelplan (level 2) verwijderd —
behandelplan-module zelf volgt in de volgende commit.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-14 22:39:58 +02:00
colinislit
10c994b252 chore(strip): fase 0 — verwijder marketing, leads, archive en sitemap
Prototype-ballast verwijderd als eerste stap van de ECD-rebuild:
- app/(marketing) incl. blog, contact, documentatie + lib/mdx, lib/content, content/
- /api/leads en publieke marketing-routes uit middleware
- app/epd/_archive (backup van clients-module)
- sitemap.ts (verwees alleen naar blog), globals.css.backup
- root / redirect naar /login; robots.txt op disallow-all (afgeschermd systeem)

FHIR-routes blijven bewust staan: /api/fhir/Patient is de facto de
patienten-API voor dossier, agenda en Cortex — vervangen volgt in fase 3.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-14 22:21:20 +02:00