- 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>
1034 lines
32 KiB
HTML
1034 lines
32 KiB
HTML
<style>
|
||
:root {
|
||
--bg: #F5F7F6;
|
||
--surface: #FFFFFF;
|
||
--text: #172420;
|
||
--muted: #5B6D68;
|
||
--line: #DCE3E0;
|
||
--accent: #0F766E;
|
||
--accent-strong: #0B5C56;
|
||
--accent-soft: #E1F0EE;
|
||
--warn: #B45309;
|
||
--warn-soft: #FCEEDC;
|
||
--warn-line: #F0D3A8;
|
||
}
|
||
@media (prefers-color-scheme: dark) {
|
||
:root {
|
||
--bg: #0D1512;
|
||
--surface: #12201C;
|
||
--text: #E6EEEB;
|
||
--muted: #96A9A4;
|
||
--line: #223330;
|
||
--accent: #35D6C4;
|
||
--accent-strong: #6EE7D9;
|
||
--accent-soft: #163430;
|
||
--warn: #F0A94E;
|
||
--warn-soft: #2A1F10;
|
||
--warn-line: #4A3419;
|
||
}
|
||
}
|
||
:root[data-theme="dark"] {
|
||
--bg: #0D1512;
|
||
--surface: #12201C;
|
||
--text: #E6EEEB;
|
||
--muted: #96A9A4;
|
||
--line: #223330;
|
||
--accent: #35D6C4;
|
||
--accent-strong: #6EE7D9;
|
||
--accent-soft: #163430;
|
||
--warn: #F0A94E;
|
||
--warn-soft: #2A1F10;
|
||
--warn-line: #4A3419;
|
||
}
|
||
:root[data-theme="light"] {
|
||
--bg: #F5F7F6;
|
||
--surface: #FFFFFF;
|
||
--text: #172420;
|
||
--muted: #5B6D68;
|
||
--line: #DCE3E0;
|
||
--accent: #0F766E;
|
||
--accent-strong: #0B5C56;
|
||
--accent-soft: #E1F0EE;
|
||
--warn: #B45309;
|
||
--warn-soft: #FCEEDC;
|
||
--warn-line: #F0D3A8;
|
||
}
|
||
|
||
* { box-sizing: border-box; }
|
||
|
||
body {
|
||
background: var(--bg);
|
||
color: var(--text);
|
||
}
|
||
|
||
.page {
|
||
max-width: 900px;
|
||
margin: 0 auto;
|
||
padding: 3rem 1.5rem 5rem;
|
||
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;
|
||
line-height: 1.55;
|
||
}
|
||
|
||
.eyebrow {
|
||
display: inline-flex;
|
||
align-items: center;
|
||
gap: 0.4em;
|
||
font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
|
||
font-size: 0.72rem;
|
||
letter-spacing: 0.08em;
|
||
text-transform: uppercase;
|
||
color: var(--accent-strong);
|
||
background: var(--accent-soft);
|
||
border-radius: 999px;
|
||
padding: 0.3em 0.8em;
|
||
margin-bottom: 1.1rem;
|
||
}
|
||
|
||
h1 {
|
||
font-family: "Iowan Old Style", "Palatino Linotype", "Book Antiqua", Georgia, serif;
|
||
font-size: clamp(1.7rem, 3.2vw, 2.3rem);
|
||
font-weight: 600;
|
||
line-height: 1.2;
|
||
text-wrap: balance;
|
||
margin: 0 0 0.4rem;
|
||
}
|
||
|
||
.subtitle {
|
||
color: var(--muted);
|
||
font-size: 1.02rem;
|
||
max-width: 62ch;
|
||
margin: 0 0 2.6rem;
|
||
}
|
||
|
||
h2 {
|
||
font-family: "Iowan Old Style", "Palatino Linotype", "Book Antiqua", Georgia, serif;
|
||
font-size: 1.28rem;
|
||
font-weight: 600;
|
||
margin: 0 0 0.9rem;
|
||
padding-top: 0.2rem;
|
||
}
|
||
|
||
h3 {
|
||
font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
|
||
font-size: 0.86rem;
|
||
letter-spacing: 0.02em;
|
||
color: var(--accent-strong);
|
||
margin: 0 0 0.6rem;
|
||
}
|
||
|
||
section {
|
||
margin-bottom: 3rem;
|
||
}
|
||
|
||
section > p {
|
||
color: var(--muted);
|
||
max-width: 68ch;
|
||
margin: 0 0 1.2rem;
|
||
}
|
||
|
||
.panel {
|
||
background: var(--surface);
|
||
border: 1px solid var(--line);
|
||
border-radius: 10px;
|
||
padding: 1.4rem;
|
||
}
|
||
|
||
.diagram-panel {
|
||
overflow-x: auto;
|
||
}
|
||
|
||
.diagram-panel pre.mermaid {
|
||
margin: 0;
|
||
min-width: 640px;
|
||
}
|
||
|
||
.legend-row {
|
||
display: flex;
|
||
flex-wrap: wrap;
|
||
gap: 1.4rem;
|
||
margin-top: 1.1rem;
|
||
font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
|
||
font-size: 0.78rem;
|
||
color: var(--muted);
|
||
}
|
||
|
||
.legend-row span {
|
||
display: inline-flex;
|
||
align-items: center;
|
||
gap: 0.45em;
|
||
}
|
||
|
||
.legend-swatch {
|
||
width: 0.85em;
|
||
height: 0.85em;
|
||
border-radius: 3px;
|
||
border: 1px solid var(--line);
|
||
}
|
||
|
||
.waardelijsten-grid {
|
||
display: grid;
|
||
grid-template-columns: repeat(2, 1fr);
|
||
gap: 1.2rem;
|
||
}
|
||
|
||
@media (max-width: 620px) {
|
||
.waardelijsten-grid { grid-template-columns: 1fr; }
|
||
}
|
||
|
||
table {
|
||
width: 100%;
|
||
border-collapse: collapse;
|
||
font-size: 0.88rem;
|
||
}
|
||
|
||
caption {
|
||
caption-side: top;
|
||
text-align: left;
|
||
margin-bottom: 0.1rem;
|
||
}
|
||
|
||
th, td {
|
||
text-align: left;
|
||
padding: 0.45rem 0.5rem;
|
||
border-bottom: 1px solid var(--line);
|
||
vertical-align: top;
|
||
}
|
||
|
||
th {
|
||
font-weight: 600;
|
||
color: var(--muted);
|
||
font-size: 0.74rem;
|
||
text-transform: uppercase;
|
||
letter-spacing: 0.03em;
|
||
}
|
||
|
||
td.code {
|
||
font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
|
||
font-size: 0.82rem;
|
||
white-space: nowrap;
|
||
}
|
||
|
||
.tag {
|
||
display: inline-block;
|
||
font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
|
||
font-size: 0.72rem;
|
||
padding: 0.1em 0.5em;
|
||
border-radius: 5px;
|
||
}
|
||
|
||
.tag-ja { background: var(--accent-soft); color: var(--accent-strong); }
|
||
.tag-nee { background: var(--line); color: var(--muted); }
|
||
.tag-tbc { background: var(--warn-soft); color: var(--warn); }
|
||
|
||
.callout {
|
||
background: var(--warn-soft);
|
||
border: 1px solid var(--warn-line);
|
||
border-radius: 10px;
|
||
padding: 1.3rem 1.4rem;
|
||
}
|
||
|
||
.callout h2 { color: var(--warn); margin-bottom: 0.8rem; }
|
||
|
||
.callout ol {
|
||
margin: 0;
|
||
padding-left: 1.2rem;
|
||
color: var(--text);
|
||
}
|
||
|
||
.callout li { margin-bottom: 0.7rem; }
|
||
.callout li:last-child { margin-bottom: 0; }
|
||
.callout li b { font-weight: 600; }
|
||
.callout li .why { color: var(--muted); font-size: 0.92rem; }
|
||
|
||
.baseline-note {
|
||
font-size: 0.86rem;
|
||
color: var(--muted);
|
||
border-top: 1px dashed var(--line);
|
||
margin-top: 1.2rem;
|
||
padding-top: 1rem;
|
||
}
|
||
|
||
footer {
|
||
border-top: 1px solid var(--line);
|
||
padding-top: 1.5rem;
|
||
color: var(--muted);
|
||
font-size: 0.88rem;
|
||
}
|
||
|
||
footer a { color: var(--accent-strong); }
|
||
</style>
|
||
|
||
<div class="page">
|
||
|
||
<span class="eyebrow">ECD · datamodel discovery</span>
|
||
<h1>Entiteitenkaart — instroomflow</h1>
|
||
<p class="subtitle">
|
||
Afgeleid uit de feitzinnen in <code>datamodel-discovery.md</code> §5.1–5.5: van persoon en aanmelding
|
||
via screening, intake en wachtlijst tot diagnose en behandelplan, met de bijbehorende waardelijsten.
|
||
Status: concept, ter review — vóór dit naar SQL gaat, checkt Colin de entiteiten, kardinaliteiten en
|
||
waardelijst-waarden.
|
||
</p>
|
||
|
||
<section>
|
||
<h2>Samenhang — de keten in één oogopslag</h2>
|
||
<p>
|
||
Aanmelding en zorgepisode zijn géén gelijke niveaus: de aanmelding is de binnenkomst en het
|
||
besluitproces (daar horen screening en aanmeldwachttijd bij), de zorgepisode is de periode van zorg
|
||
die pas ontstaat als het besluit "intake" is. Alles in de onderste doos hangt aan de episode.
|
||
De pijlen binnen de episode tonen de chronologie (intake → diagnose → behandelplan); in het
|
||
datamodel hangen alle drie rechtstreeks aan de episode, met de intake als optionele herkomst
|
||
van de diagnose.
|
||
</p>
|
||
<div class="panel diagram-panel">
|
||
<pre class="mermaid">
|
||
flowchart TB
|
||
CL["CLIËNT (rol op PERSOON)"] -->|"meldt zich aan — 1 op veel"| AANM
|
||
subgraph AANMBOX["AANMELDING — binnenkomst en besluitproces"]
|
||
direction TB
|
||
AANM["Aanmelding
|
||
verwijzer · wettelijk kader · hulpvraag"]
|
||
AANM --> SCR["Screening
|
||
activiteiten + besluit"]
|
||
AANM -.-> WLA["Wachtlijstplaatsing
|
||
soort: aanmeld"]
|
||
SCR --> UIT{"Uitkomst
|
||
bij status besloten"}
|
||
end
|
||
UIT -->|"afgewezen · doorverwezen"| EINDE["geen episode"]
|
||
UIT -->|"wachtlijst"| WLA
|
||
UIT ==>|"intake"| EPI
|
||
subgraph EPIBOX["ZORGEPISODE — periode van zorg, 0..1 per aanmelding"]
|
||
direction TB
|
||
EPI["Zorgepisode"]
|
||
EPI --> INT["Intake(s)
|
||
aanleiding: regulier · intern · crisis"]
|
||
EPI -.-> WLB["Wachtlijstplaatsing
|
||
soort: behandel"]
|
||
INT --> DIA["Diagnose(s)
|
||
DSM-5-TR · gesteld tijdens intake"]
|
||
DIA --> PLAN["Behandelplan
|
||
doelen · interventies · evaluaties"]
|
||
end
|
||
</pre>
|
||
</div>
|
||
</section>
|
||
|
||
<section>
|
||
<h2>Diagram 1 — persoon & aanmelding (§5.1)</h2>
|
||
<p>Rechthoeken met een sleutel (<code>PK</code>) zijn entiteiten met een eigen identiteit; entiteiten met alleen een <code>code</code>-sleutel zijn waardelijsten (referentiedata, geen eigen levenscyclus).</p>
|
||
<div class="panel diagram-panel">
|
||
<pre class="mermaid">
|
||
erDiagram
|
||
PERSOON ||--o| CLIENT : "is cliënt sinds"
|
||
CLIENT ||--o{ AANMELDING : "meldt zich aan"
|
||
CLIENT ||--o| CLIENTPORTAAL_ACCOUNT : "heeft toegang via"
|
||
AANMELDING ||--o| ZORGEPISODE : "start bij uitkomst intake"
|
||
AANMELDING }o--|| WETTELIJK_KADER : "valt onder"
|
||
AANMELDING }o--|| AANMELDING_STATUS : "heeft"
|
||
AANMELDING }o--o| AANMELDING_UITKOMST : "heeft, bij besloten"
|
||
AANMELDING }o--o| VERWIJZER : "komt binnen via"
|
||
AANMELDING ||--o{ VERWIJSDOCUMENT : "ontvangt"
|
||
VERWIJSDOCUMENT }o--|| VERWIJSDOCUMENT_TYPE : "is van type"
|
||
VERWIJZER }o--|| VERWIJZERTYPE : "is van type"
|
||
VERWIJZER }o--o| PRAKTIJK_INSTELLING : "verbonden aan"
|
||
|
||
PERSOON {
|
||
uuid id PK
|
||
string naam
|
||
date geboortedatum
|
||
string bsn_encrypted "optioneel"
|
||
}
|
||
CLIENT {
|
||
uuid id PK
|
||
uuid persoon_id FK
|
||
string clientnummer UK
|
||
date sinds
|
||
}
|
||
CLIENTPORTAAL_ACCOUNT {
|
||
uuid id PK
|
||
uuid client_id FK
|
||
string status
|
||
}
|
||
AANMELDING {
|
||
uuid id PK
|
||
uuid client_id FK
|
||
date datum
|
||
string hulpvraag
|
||
}
|
||
ZORGEPISODE {
|
||
uuid id PK
|
||
uuid aanmelding_id FK
|
||
date gestart_op
|
||
date beeindigd_op "optioneel"
|
||
}
|
||
VERWIJZER {
|
||
uuid id PK
|
||
string naam
|
||
string agb_code
|
||
}
|
||
PRAKTIJK_INSTELLING {
|
||
uuid id PK
|
||
string naam
|
||
string agb_code
|
||
}
|
||
VERWIJSDOCUMENT {
|
||
uuid id PK
|
||
uuid aanmelding_id FK
|
||
date ontvangen_datum
|
||
}
|
||
VERWIJZERTYPE {
|
||
string code PK
|
||
string label
|
||
boolean agb_verplicht
|
||
}
|
||
WETTELIJK_KADER {
|
||
string code PK
|
||
string label
|
||
}
|
||
AANMELDING_STATUS {
|
||
string code PK
|
||
string label
|
||
}
|
||
AANMELDING_UITKOMST {
|
||
string code PK
|
||
string label
|
||
}
|
||
VERWIJSDOCUMENT_TYPE {
|
||
string code PK
|
||
string label
|
||
}
|
||
</pre>
|
||
</div>
|
||
<p class="baseline-note">
|
||
Niet in het diagram, maar op elke entiteit van toepassing (spelregels §3.1): <code>id</code> (uuid),
|
||
<code>created_at</code>/<code>updated_at</code>, <code>deleted_at</code> (soft delete), en een append-only
|
||
audit-event per mutatie. Weggelaten voor leesbaarheid, niet omdat ze niet gelden.
|
||
</p>
|
||
</section>
|
||
|
||
<section>
|
||
<h2>Diagram 2 — screening & intake (§5.2)</h2>
|
||
<p>
|
||
De screening hoort bij de aanmelding (besluitproces); intakes horen bij de zorgepisode. Eén episode
|
||
kan meerdere intakes hebben — naast de reguliere intake bestaan interne intakes binnen een lopende
|
||
episode; de <code>aanleiding</code> legt het verschil vast. Screening vóór intake is een nudge,
|
||
geen harde volgorde-eis in het schema.
|
||
</p>
|
||
<div class="panel diagram-panel">
|
||
<pre class="mermaid">
|
||
erDiagram
|
||
AANMELDING ||--o| SCREENING : "wordt gescreend in"
|
||
SCREENING ||--o{ SCREENING_ACTIVITEIT : "omvat"
|
||
SCREENING_ACTIVITEIT }o--|| SCREENING_ACTIVITEIT_TYPE : "is van type"
|
||
SCREENING }o--o| SCREENING_BESLUIT : "besluit, bij afronding"
|
||
SCREENING }o--o| AFDELING : "adviseert"
|
||
ZORGEPISODE ||--o{ INTAKE : "omvat"
|
||
INTAKE }o--|| INTAKE_AANLEIDING : "gestart vanwege"
|
||
INTAKE }o--|| INTAKE_STATUS : "heeft"
|
||
INTAKE }o--o| INTAKE_UITKOMST : "heeft, bij afgerond"
|
||
INTAKE }o--|| AFDELING : "op afdeling"
|
||
INTAKE ||--o{ CONTACTMOMENT : "omvat"
|
||
CONTACTMOMENT }o--|| CONTACTMOMENT_TYPE : "is van type"
|
||
INTAKE ||--o| KINDCHECK : "heeft"
|
||
|
||
SCREENING {
|
||
uuid id PK
|
||
uuid aanmelding_id FK
|
||
date gestart_op
|
||
date besluit_datum "optioneel"
|
||
}
|
||
SCREENING_ACTIVITEIT {
|
||
uuid id PK
|
||
uuid screening_id FK
|
||
date datum
|
||
string toelichting
|
||
uuid uitgevoerd_door "rollenronde"
|
||
}
|
||
INTAKE {
|
||
uuid id PK
|
||
uuid zorgepisode_id FK
|
||
date gestart_op
|
||
date afgerond_op "optioneel"
|
||
}
|
||
CONTACTMOMENT {
|
||
uuid id PK
|
||
uuid intake_id FK
|
||
date datum
|
||
uuid gevoerd_door "rollenronde"
|
||
}
|
||
KINDCHECK {
|
||
uuid id PK
|
||
uuid intake_id FK
|
||
date uitgevoerd_op
|
||
boolean thuiswonende_kinderen
|
||
boolean zorgen_veiligheid
|
||
boolean actie_ondernomen
|
||
string toelichting
|
||
}
|
||
SCREENING_ACTIVITEIT_TYPE {
|
||
string code PK
|
||
string label
|
||
}
|
||
SCREENING_BESLUIT {
|
||
string code PK
|
||
string label
|
||
}
|
||
AFDELING {
|
||
string code PK
|
||
string label
|
||
}
|
||
INTAKE_AANLEIDING {
|
||
string code PK
|
||
string label
|
||
}
|
||
INTAKE_STATUS {
|
||
string code PK
|
||
string label
|
||
}
|
||
INTAKE_UITKOMST {
|
||
string code PK
|
||
string label
|
||
}
|
||
CONTACTMOMENT_TYPE {
|
||
string code PK
|
||
string label
|
||
}
|
||
</pre>
|
||
</div>
|
||
<p class="baseline-note">
|
||
<b>ZORGPROGRAMMA</b> (FACT, Verslaving, Trauma, ...) is als waardelijst besloten maar heeft nog geen
|
||
relatie in dit diagram — de koppeling (aan behandeladvies of traject) volgt in de ronde
|
||
diagnose & behandeltraject. <b>Verslagen</b> (feitzin 9, provenance) volgen in de rapportage-ronde.
|
||
</p>
|
||
</section>
|
||
|
||
<section>
|
||
<h2>Diagram 3 — wachtlijst, diagnose & behandelplan (§5.3–5.5)</h2>
|
||
<p>
|
||
De aanmeldwachttijd hangt aan de AANMELDING (besluitproces); diagnoses, behandelplannen en de
|
||
behandelwachttijd hangen aan de ZORGEPISODE. De diagnose wordt in DSM-5-TR geregistreerd; de
|
||
ICD-10-code wordt via een mappingtabel afgeleid. Het behandelplan is hier de kern — sessieplanning,
|
||
leefgebieden en veiligheidsplan volgen in latere rondes.
|
||
</p>
|
||
<div class="panel diagram-panel">
|
||
<pre class="mermaid">
|
||
erDiagram
|
||
AANMELDING ||--o{ WACHTLIJSTPLAATSING : "aanmeldwachttijd"
|
||
ZORGEPISODE ||--o{ WACHTLIJSTPLAATSING : "behandelwachttijd"
|
||
WACHTLIJSTPLAATSING }o--|| WACHTLIJST_SOORT : "is van soort"
|
||
WACHTLIJSTPLAATSING }o--|| PRIORITEIT : "heeft"
|
||
WACHTLIJSTPLAATSING }o--|| AFDELING : "voor afdeling"
|
||
WACHTLIJSTPLAATSING }o--o| WACHTLIJST_EINDREDEN : "beëindigd met"
|
||
|
||
ZORGEPISODE ||--o{ DIAGNOSE : "heeft"
|
||
DIAGNOSE }o--|| ERNST : "heeft"
|
||
DIAGNOSE }o--|| DIAGNOSE_STATUS : "klinische status"
|
||
DIAGNOSE }o--|| VERIFICATIESTATUS : "werkdiagnose of definitief"
|
||
DIAGNOSE }o--o| INTAKE : "gesteld tijdens"
|
||
DIAGNOSE }o--|| DSM_ICD_MAPPING : "geclassificeerd als"
|
||
|
||
ZORGEPISODE ||--o{ BEHANDELPLAN : "heeft"
|
||
BEHANDELPLAN }o--|| PLAN_STATUS : "heeft"
|
||
BEHANDELPLAN }o--o{ DIAGNOSE : "adresseert"
|
||
BEHANDELPLAN }o--o| INTAKE : "gebaseerd op"
|
||
BEHANDELPLAN ||--o{ BEHANDELDOEL : "bevat"
|
||
BEHANDELDOEL }o--|| DOEL_STATUS : "heeft"
|
||
BEHANDELPLAN ||--o{ INTERVENTIE : "bevat"
|
||
INTERVENTIE }o--o{ BEHANDELDOEL : "werkt aan"
|
||
BEHANDELPLAN ||--o{ EVALUATIEMOMENT : "kent"
|
||
EVALUATIEMOMENT }o--|| EVALUATIE_TYPE : "is van type"
|
||
|
||
WACHTLIJSTPLAATSING {
|
||
uuid id PK
|
||
uuid aanmelding_id FK "bij soort aanmeld"
|
||
uuid zorgepisode_id FK "bij soort behandel"
|
||
date geplaatst_op
|
||
date telt_vanaf
|
||
date beeindigd_op "optioneel"
|
||
}
|
||
DIAGNOSE {
|
||
uuid id PK
|
||
uuid zorgepisode_id FK
|
||
string dsm_code
|
||
string omschrijving
|
||
boolean hoofddiagnose
|
||
date gesteld_op
|
||
uuid gesteld_door "rollenronde"
|
||
}
|
||
DSM_ICD_MAPPING {
|
||
string dsm_code PK
|
||
string icd10_code
|
||
string dsm_omschrijving
|
||
}
|
||
BEHANDELPLAN {
|
||
uuid id PK
|
||
uuid zorgepisode_id FK
|
||
int versie
|
||
date opgesteld_op
|
||
date client_akkoord_op "optioneel"
|
||
}
|
||
BEHANDELDOEL {
|
||
uuid id PK
|
||
uuid behandelplan_id FK
|
||
string titel
|
||
string clientversie_b1
|
||
string prioriteit
|
||
int termijn_weken
|
||
}
|
||
INTERVENTIE {
|
||
uuid id PK
|
||
uuid behandelplan_id FK
|
||
string naam
|
||
string rationale
|
||
}
|
||
EVALUATIEMOMENT {
|
||
uuid id PK
|
||
uuid behandelplan_id FK
|
||
int week
|
||
date gepland_op
|
||
date uitgevoerd_op "optioneel"
|
||
}
|
||
WACHTLIJST_SOORT {
|
||
string code PK
|
||
string label
|
||
}
|
||
PRIORITEIT {
|
||
string code PK
|
||
string label
|
||
}
|
||
WACHTLIJST_EINDREDEN {
|
||
string code PK
|
||
string label
|
||
}
|
||
ERNST {
|
||
string code PK
|
||
string label
|
||
}
|
||
DIAGNOSE_STATUS {
|
||
string code PK
|
||
string label
|
||
}
|
||
VERIFICATIESTATUS {
|
||
string code PK
|
||
string label
|
||
}
|
||
PLAN_STATUS {
|
||
string code PK
|
||
string label
|
||
}
|
||
DOEL_STATUS {
|
||
string code PK
|
||
string label
|
||
}
|
||
EVALUATIE_TYPE {
|
||
string code PK
|
||
string label
|
||
}
|
||
</pre>
|
||
</div>
|
||
<p class="baseline-note">
|
||
<b>Aannames ter bevestiging:</b> versiebeheer als nieuw record per versie (<code>versie</code>-veld) ·
|
||
cliëntakkoord als datum-feit, niet als status · "max één hoofddiagnose" als constraint — maar per wat
|
||
(episode / moment) is nog open. WACHTLIJSTPLAATSING heeft twee optionele FK's; welke gevuld is volgt
|
||
uit de soort (aanmeld → aanmelding, behandel → episode).
|
||
</p>
|
||
</section>
|
||
|
||
<section>
|
||
<h2>Waardelijsten</h2>
|
||
<p>De daadwerkelijke waarden per referentietabel, zodat je kunt controleren of de lijst klopt en compleet is.</p>
|
||
<div class="waardelijsten-grid">
|
||
|
||
<div class="panel">
|
||
<h3>VERWIJZERTYPE</h3>
|
||
<table>
|
||
<thead><tr><th>Code</th><th>AGB verplicht</th></tr></thead>
|
||
<tbody>
|
||
<tr><td class="code">huisarts</td><td><span class="tag tag-ja">ja</span></td></tr>
|
||
<tr><td class="code">medisch_specialist</td><td><span class="tag tag-tbc">te bevestigen</span></td></tr>
|
||
<tr><td class="code">ggz_instelling</td><td><span class="tag tag-tbc">te bevestigen</span></td></tr>
|
||
<tr><td class="code">bedrijfsarts</td><td><span class="tag tag-tbc">te bevestigen</span></td></tr>
|
||
<tr><td class="code">gemeente</td><td><span class="tag tag-nee">nee</span></td></tr>
|
||
<tr><td class="code">zelfaanmelding</td><td><span class="tag tag-nee">nee</span></td></tr>
|
||
<tr><td class="code">crisis</td><td><span class="tag tag-tbc">te bevestigen</span></td></tr>
|
||
</tbody>
|
||
</table>
|
||
</div>
|
||
|
||
<div class="panel">
|
||
<h3>WETTELIJK_KADER</h3>
|
||
<table>
|
||
<thead><tr><th>Code</th></tr></thead>
|
||
<tbody>
|
||
<tr><td class="code">zvw</td></tr>
|
||
<tr><td class="code">jeugdwet</td></tr>
|
||
<tr><td class="code">wmo</td></tr>
|
||
<tr><td class="code">wlz</td></tr>
|
||
<tr><td class="code">forensisch</td></tr>
|
||
</tbody>
|
||
</table>
|
||
</div>
|
||
|
||
<div class="panel">
|
||
<h3>AANMELDING_STATUS</h3>
|
||
<table>
|
||
<thead><tr><th>Code</th></tr></thead>
|
||
<tbody>
|
||
<tr><td class="code">nieuw</td></tr>
|
||
<tr><td class="code">in_screening</td></tr>
|
||
<tr><td class="code">besloten</td></tr>
|
||
</tbody>
|
||
</table>
|
||
<p class="baseline-note" style="margin-top: 0.9rem; padding-top: 0.7rem;">
|
||
Overgangen zijn vrij — een <code>besloten</code> aanmelding kan terug naar <code>in_screening</code> bij heropening. Geen eenrichtingsflow.
|
||
</p>
|
||
</div>
|
||
|
||
<div class="panel">
|
||
<h3>AANMELDING_UITKOMST</h3>
|
||
<table>
|
||
<thead><tr><th>Code</th></tr></thead>
|
||
<tbody>
|
||
<tr><td class="code">intake</td></tr>
|
||
<tr><td class="code">afgewezen</td></tr>
|
||
<tr><td class="code">doorverwezen</td></tr>
|
||
<tr><td class="code">wachtlijst</td></tr>
|
||
</tbody>
|
||
</table>
|
||
<p class="baseline-note" style="margin-top: 0.9rem; padding-top: 0.7rem;">
|
||
Alleen gezet zodra status = <code>besloten</code>.
|
||
</p>
|
||
</div>
|
||
|
||
<div class="panel">
|
||
<h3>VERWIJSDOCUMENT_TYPE</h3>
|
||
<table>
|
||
<thead><tr><th>Code</th></tr></thead>
|
||
<tbody>
|
||
<tr><td class="code">verwijsbrief</td></tr>
|
||
<tr><td class="code">beschikking</td></tr>
|
||
</tbody>
|
||
</table>
|
||
<p class="baseline-note" style="margin-top: 0.9rem; padding-top: 0.7rem;">
|
||
Lijst waarschijnlijk niet compleet — open voor aanvulling.
|
||
</p>
|
||
</div>
|
||
|
||
<div class="panel">
|
||
<h3>AFDELING</h3>
|
||
<table>
|
||
<thead><tr><th>Code</th></tr></thead>
|
||
<tbody>
|
||
<tr><td class="code">volwassenen</td></tr>
|
||
<tr><td class="code">jeugd</td></tr>
|
||
<tr><td class="code">ouderen</td></tr>
|
||
<tr><td class="code">forensisch</td></tr>
|
||
</tbody>
|
||
</table>
|
||
<p class="baseline-note" style="margin-top: 0.9rem; padding-top: 0.7rem;">
|
||
Organisatorische eenheid; per instelling configureerbaar. Startlijst te bevestigen —
|
||
FACT en Verslaving zijn bewust géén afdeling (zie ZORGPROGRAMMA).
|
||
</p>
|
||
</div>
|
||
|
||
<div class="panel">
|
||
<h3>ZORGPROGRAMMA</h3>
|
||
<table>
|
||
<thead><tr><th>Code</th></tr></thead>
|
||
<tbody>
|
||
<tr><td class="code">algemeen_ggz</td></tr>
|
||
<tr><td class="code">fact</td></tr>
|
||
<tr><td class="code">verslaving</td></tr>
|
||
<tr><td class="code">trauma</td></tr>
|
||
</tbody>
|
||
</table>
|
||
<p class="baseline-note" style="margin-top: 0.9rem; padding-top: 0.7rem;">
|
||
Inhoudelijk aanbod, los van afdeling. Koppeling volgt in de ronde diagnose & behandeltraject.
|
||
</p>
|
||
</div>
|
||
|
||
<div class="panel">
|
||
<h3>SCREENING_ACTIVITEIT_TYPE</h3>
|
||
<table>
|
||
<thead><tr><th>Code</th></tr></thead>
|
||
<tbody>
|
||
<tr><td class="code">telefonisch_contact</td></tr>
|
||
<tr><td class="code">dossieronderzoek</td></tr>
|
||
<tr><td class="code">vragenlijst</td></tr>
|
||
<tr><td class="code">overig</td></tr>
|
||
</tbody>
|
||
</table>
|
||
<p class="baseline-note" style="margin-top: 0.9rem; padding-top: 0.7rem;">
|
||
Type + vrije toelichting per activiteit. Startlijst te bevestigen.
|
||
</p>
|
||
</div>
|
||
|
||
<div class="panel">
|
||
<h3>SCREENING_BESLUIT</h3>
|
||
<table>
|
||
<thead><tr><th>Code</th></tr></thead>
|
||
<tbody>
|
||
<tr><td class="code">geschikt</td></tr>
|
||
<tr><td class="code">niet_geschikt</td></tr>
|
||
</tbody>
|
||
</table>
|
||
<p class="baseline-note" style="margin-top: 0.9rem; padding-top: 0.7rem;">
|
||
Verhouding tot AANMELDING_UITKOMST is een open vraag (overlap "geschikt" ↔ "intake").
|
||
</p>
|
||
</div>
|
||
|
||
<div class="panel">
|
||
<h3>INTAKE_AANLEIDING</h3>
|
||
<table>
|
||
<thead><tr><th>Code</th></tr></thead>
|
||
<tbody>
|
||
<tr><td class="code">regulier</td></tr>
|
||
<tr><td class="code">intern</td></tr>
|
||
<tr><td class="code">crisis</td></tr>
|
||
</tbody>
|
||
</table>
|
||
<p class="baseline-note" style="margin-top: 0.9rem; padding-top: 0.7rem;">
|
||
Regulier = vanuit aanmelding/screening; intern = tweede intake binnen lopende episode
|
||
(bijv. afdelingsovergang). Lijst te bevestigen.
|
||
</p>
|
||
</div>
|
||
|
||
<div class="panel">
|
||
<h3>INTAKE_STATUS</h3>
|
||
<table>
|
||
<thead><tr><th>Code</th></tr></thead>
|
||
<tbody>
|
||
<tr><td class="code">bezig</td></tr>
|
||
<tr><td class="code">afgerond</td></tr>
|
||
</tbody>
|
||
</table>
|
||
<p class="baseline-note" style="margin-top: 0.9rem; padding-top: 0.7rem;">
|
||
Uit het prototype overgenomen; mogelijk komt er nog een status bij (bijv. gepland).
|
||
</p>
|
||
</div>
|
||
|
||
<div class="panel">
|
||
<h3>INTAKE_UITKOMST</h3>
|
||
<table>
|
||
<thead><tr><th>Code</th></tr></thead>
|
||
<tbody>
|
||
<tr><td class="code">in_zorg</td></tr>
|
||
<tr><td class="code">doorverwijzing</td></tr>
|
||
<tr><td class="code">extra_diagnostiek</td></tr>
|
||
</tbody>
|
||
</table>
|
||
<p class="baseline-note" style="margin-top: 0.9rem; padding-top: 0.7rem;">
|
||
Alleen gezet bij status = <code>afgerond</code>. Waarden uit het prototype — te bevestigen.
|
||
</p>
|
||
</div>
|
||
|
||
<div class="panel">
|
||
<h3>CONTACTMOMENT_TYPE</h3>
|
||
<table>
|
||
<thead><tr><th>Code</th></tr></thead>
|
||
<tbody>
|
||
<tr><td class="code">intakegesprek</td></tr>
|
||
<tr><td class="code">aanvullend_onderzoek</td></tr>
|
||
<tr><td class="code">telefonisch_contact</td></tr>
|
||
<tr><td class="code">huisbezoek</td></tr>
|
||
<tr><td class="code">overig</td></tr>
|
||
</tbody>
|
||
</table>
|
||
</div>
|
||
|
||
<div class="panel">
|
||
<h3>WACHTLIJST_SOORT</h3>
|
||
<table>
|
||
<thead><tr><th>Code</th></tr></thead>
|
||
<tbody>
|
||
<tr><td class="code">aanmeld</td></tr>
|
||
<tr><td class="code">behandel</td></tr>
|
||
</tbody>
|
||
</table>
|
||
<p class="baseline-note" style="margin-top: 0.9rem; padding-top: 0.7rem;">
|
||
Volgt de Treeknormen: aanmeldwachttijd (vóór intake) en behandelwachttijd (na intake).
|
||
</p>
|
||
</div>
|
||
|
||
<div class="panel">
|
||
<h3>PRIORITEIT</h3>
|
||
<table>
|
||
<thead><tr><th>Code</th></tr></thead>
|
||
<tbody>
|
||
<tr><td class="code">spoed</td></tr>
|
||
<tr><td class="code">normaal</td></tr>
|
||
<tr><td class="code">laag</td></tr>
|
||
</tbody>
|
||
</table>
|
||
</div>
|
||
|
||
<div class="panel">
|
||
<h3>WACHTLIJST_EINDREDEN</h3>
|
||
<table>
|
||
<thead><tr><th>Code</th></tr></thead>
|
||
<tbody>
|
||
<tr><td class="code">intake_gestart</td></tr>
|
||
<tr><td class="code">behandeling_gestart</td></tr>
|
||
<tr><td class="code">doorverwezen</td></tr>
|
||
<tr><td class="code">teruggetrokken</td></tr>
|
||
</tbody>
|
||
</table>
|
||
<p class="baseline-note" style="margin-top: 0.9rem; padding-top: 0.7rem;">
|
||
Startlijst te bevestigen.
|
||
</p>
|
||
</div>
|
||
|
||
<div class="panel">
|
||
<h3>ERNST</h3>
|
||
<table>
|
||
<thead><tr><th>Code</th></tr></thead>
|
||
<tbody>
|
||
<tr><td class="code">licht</td></tr>
|
||
<tr><td class="code">matig</td></tr>
|
||
<tr><td class="code">ernstig</td></tr>
|
||
</tbody>
|
||
</table>
|
||
</div>
|
||
|
||
<div class="panel">
|
||
<h3>DIAGNOSE_STATUS</h3>
|
||
<table>
|
||
<thead><tr><th>Code</th></tr></thead>
|
||
<tbody>
|
||
<tr><td class="code">actief</td></tr>
|
||
<tr><td class="code">in_remissie</td></tr>
|
||
<tr><td class="code">opgelost</td></tr>
|
||
<tr><td class="code">inactief</td></tr>
|
||
</tbody>
|
||
</table>
|
||
<p class="baseline-note" style="margin-top: 0.9rem; padding-top: 0.7rem;">
|
||
Klinische status — losse as naast VERIFICATIESTATUS.
|
||
</p>
|
||
</div>
|
||
|
||
<div class="panel">
|
||
<h3>VERIFICATIESTATUS</h3>
|
||
<table>
|
||
<thead><tr><th>Code</th></tr></thead>
|
||
<tbody>
|
||
<tr><td class="code">werkdiagnose</td></tr>
|
||
<tr><td class="code">definitief</td></tr>
|
||
</tbody>
|
||
</table>
|
||
<p class="baseline-note" style="margin-top: 0.9rem; padding-top: 0.7rem;">
|
||
Aparte status-as — te bevestigen (zat in het prototype-model maar werd niet gebruikt).
|
||
</p>
|
||
</div>
|
||
|
||
<div class="panel">
|
||
<h3>PLAN_STATUS</h3>
|
||
<table>
|
||
<thead><tr><th>Code</th></tr></thead>
|
||
<tbody>
|
||
<tr><td class="code">concept</td></tr>
|
||
<tr><td class="code">actief</td></tr>
|
||
<tr><td class="code">afgerond</td></tr>
|
||
<tr><td class="code">vervallen</td></tr>
|
||
</tbody>
|
||
</table>
|
||
<p class="baseline-note" style="margin-top: 0.9rem; padding-top: 0.7rem;">
|
||
Voorstel — de statusmachine (incl. plaats van cliëntakkoord) is nog een open vraag.
|
||
</p>
|
||
</div>
|
||
|
||
<div class="panel">
|
||
<h3>DOEL_STATUS</h3>
|
||
<table>
|
||
<thead><tr><th>Code</th></tr></thead>
|
||
<tbody>
|
||
<tr><td class="code">niet_gestart</td></tr>
|
||
<tr><td class="code">bezig</td></tr>
|
||
<tr><td class="code">gehaald</td></tr>
|
||
<tr><td class="code">bijgesteld</td></tr>
|
||
</tbody>
|
||
</table>
|
||
</div>
|
||
|
||
<div class="panel">
|
||
<h3>EVALUATIE_TYPE</h3>
|
||
<table>
|
||
<thead><tr><th>Code</th></tr></thead>
|
||
<tbody>
|
||
<tr><td class="code">tussentijds</td></tr>
|
||
<tr><td class="code">eind</td></tr>
|
||
<tr><td class="code">crisis</td></tr>
|
||
</tbody>
|
||
</table>
|
||
</div>
|
||
|
||
</div>
|
||
</section>
|
||
|
||
<section class="callout">
|
||
<h2>Openstaand / geparkeerd</h2>
|
||
<ol>
|
||
<li>
|
||
<b>AGB-validatie tegen een echte Vecozo-tabel</b> — nu vrije invoer, geen validatie.
|
||
<div class="why">Geparkeerd tot de declaratie-ronde.</div>
|
||
</li>
|
||
<li>
|
||
<b>Wie mag de aanmelding-status zetten</b> — nog geen rollen/disciplines gemodelleerd.
|
||
<div class="why">Komt terug zodra die ronde wordt gedaan.</div>
|
||
</li>
|
||
<li>
|
||
<b>AGB-verplichting per verwijzertype</b> — alleen huisarts (ja) en gemeente (nee) zijn expliciet besproken; de overige vier staan als "te bevestigen" in de tabel hierboven.
|
||
</li>
|
||
<li>
|
||
<b>Verwijsbrief/beschikking is een nudge, geen schema-constraint</b> — leeft in de Protocol Rules Registry (Nudge Engine), niet zichtbaar als FK-verplichting in dit diagram.
|
||
</li>
|
||
<li>
|
||
<b>CLIENTPORTAAL_ACCOUNT is nog een lege huls</b> — alleen de relatie (1-op-0..1 op CLIENT) staat vast.
|
||
<div class="why">Authenticatiedetails (e-mail, provider-koppeling, status) volgen in de auth/ADM-ronde.</div>
|
||
</li>
|
||
<li>
|
||
<b>Verwijzersportaal — nog geen besluit, alleen een idee.</b> Mogelijk krijgt een verwijzer ook toegang tot de status van zijn verwijzingen, analoog aan <code>CLIENTPORTAAL_ACCOUNT</code>.
|
||
<div class="why">Niet in dit diagram opgenomen — apart onderwerp voor een volgende ronde als het een echte behoefte blijkt.</div>
|
||
</li>
|
||
<li>
|
||
<b>BSN is optioneel op PERSOON</b> — een medewerker is ook een persoon en heeft geen BSN in het systeem nodig. De verplichting hoort bij de rol (voor cliënten: Wabvpz).
|
||
<div class="why">Nudge ("cliënt zonder BSN") of rolgebonden eis — te bepalen in de rollenronde.</div>
|
||
</li>
|
||
<li>
|
||
<b>Screeningsbesluit ↔ aanmelding-uitkomst</b> — "geschikt" (screening) en uitkomst "intake" (aanmelding) overlappen mogelijk: één feit of twee?
|
||
<div class="why">Open vraag voor een volgende sessie.</div>
|
||
</li>
|
||
<li>
|
||
<b>Startlijsten te bevestigen</b> — AFDELING, ZORGPROGRAMMA, SCREENING_ACTIVITEIT_TYPE, INTAKE_AANLEIDING en INTAKE_UITKOMST zijn afgeleid uit het prototype en nog niet definitief.
|
||
</li>
|
||
<li>
|
||
<b>Kindcheck-structuur</b> — nu gemodelleerd als drie ja/nee-vlaggen + toelichting (zoals het prototype), niet als één uitkomstwaarde.
|
||
<div class="why">Bevestigen of dit de juiste registratievorm is (Meldcode-eisen meenemen).</div>
|
||
</li>
|
||
<li>
|
||
<b>Screening vóór intake is een nudge</b> — geen harde volgorde-eis in het schema; protocolregel bij de eerste intake van een episode.
|
||
</li>
|
||
<li>
|
||
<b>Behandelplan: statusmachine, versiebeheer-vorm en verplichting nog open</b> — cliëntakkoord als status of feit (WGBO), nieuw record per versie of muteren met audit, en behandelplan-verplicht-vóór-behandeling als nudge of harde eis.
|
||
</li>
|
||
<li>
|
||
<b>Wanneer ontstaat de ZORGEPISODE precies</b> — pas bij aanmelding-uitkomst "intake", of al bij "wachtlijst"?
|
||
<div class="why">Bepaalt waar de behandelwachttijd van een nog-niet-gestarte episode aan hangt.</div>
|
||
</li>
|
||
<li>
|
||
<b>DSM-ICD-mappingtabel heeft een bron nodig</b> — wie levert en onderhoudt de mapping (en de DSM-5-TR-lijst zelf, licentie APA)?
|
||
<div class="why">Uitzoeken vóór de schema-baseline; raakt ook de declaratie-ronde.</div>
|
||
</li>
|
||
<li>
|
||
<b>Wachtlijst per afdeling en/of zorgprogramma</b> — nu alleen afdeling gemodelleerd; en de beëindigingsredenen-startlijst is te bevestigen.
|
||
</li>
|
||
</ol>
|
||
</section>
|
||
|
||
<footer>
|
||
Bron: <code>docs/datamodel/datamodel-discovery.md</code> §5.1–5.5 · volgende stap (§6): statussen +
|
||
eigenaarschap ECD/TIP per entiteit vastleggen, daarna de latere rondes (agenda, rapportage &
|
||
overdracht, rollen/disciplines) en pas dan de schema-baseline.
|
||
</footer>
|
||
|
||
</div>
|