Files
jfandClaude Sonnet 5.5 af13d0e533 Flexibele kluissoorten: soorten in de database, beheer op de website
- Tabellen vault_categories en vault_category_fields (db/21), startrijen handmatig (db/handmatig/21b)
- VaultCategoryService met regels voor zichtbaarheid, gebruik en eigen velden
- Beheer > Kluissoorten (/beheer/soorten) met gebruikstellers; soort in gebruik niet te verwijderen
- Kluis en Nalatenschap (web en app) tonen soorten en eigen velden uit de database
- Socketprotocol: vault.categories; GRANTs voor mijnbesluit_app in db/02
- db/20 herhaalbaar gemaakt
- App versie 1.1 (versiecode 3)

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014MGLqt1uKfNARQHut9ifcx
2026-10-20 08:15:40 +00:00

75 lines
4.3 KiB
Markdown

# Kluissoorten
Wat iemand in zijn kluis kan vastleggen (Wachtwoord, Polis, Uitvaartwens, ... en alles wat de
beheerder er zelf bij zet, zoals "Niet reanimeren" of "Dementie") staat in de database en niet in de
code. Een nieuwe soort vraagt daarom **geen nieuwe versie van de app** in de Play Store of App Store.
## Hoe het werkt
* Tabel `vault_categories`: één rij per soort. Nummers 1-11 en 99 (Overig) zijn de ingebouwde
soorten en houden hun oude nummer; soorten die de beheerder maakt beginnen bij 100.
`vault_items.category` blijft een gewoon getal.
* Tabel `vault_category_fields`: de velden van een eigen soort (label, soort veld, keuzes, hulptekst,
verplicht, actief, volgorde).
* De app en de website vragen de lijst op bij de server (`vault.categories`) en tekenen het
formulier van een eigen soort naar zijn velden. Een ingebouwde soort heeft zijn invulscherm in de
app zelf; die velden zijn niet te wijzigen. Wil je voor iets als "Polis" andere velden, maak dan
een eigen soort.
* De ingevulde waarden van een eigen soort staan versleuteld in `VaultPayload.Velden`, op de vaste
`sleutel` van het veld. Een label hernoemen mag dus zonder dat iemands gegevens loskomen van hun veld.
## Regels
1. **Wat in gebruik is verdwijnt nooit.** Een soort met kluisitems kan niet worden verwijderd,
alleen op niet-actief gezet. Een niet-actieve soort staat niet meer in de lijst van wie hem nog
nooit gebruikte; wie er al een item van heeft, ziet hem nog en kan zijn items gewoon bekijken en
wijzigen. Hetzelfde geldt voor een veld: met items eronder kan het alleen op niet-actief.
2. **De beheerder ziet aantallen, nooit inhoud.** Per soort zie je hoeveel items en hoeveel mensen,
niet wie en niet wat.
3. **"Bespreken met" is een instelling per soort.** Startwaarden: aan bij Uitvaartwens en
Donorcodicil, uit bij de rest.
4. **De server controleert alles.** Een oudere of andere app stuurt wat hij wil: alleen bekende
velden blijven over, verplichte velden moeten gevuld zijn en datums moeten kloppen.
## Privacy: de naam van een soort is leesbaar voor de server
Alleen de *inhoud* van een kluisitem is versleuteld. De titel en de soort staan leesbaar in de
database, net als de naam die de beheerder aan een soort geeft. Een soort die "Dementieverklaring"
heet, zet dat woord dus in de database en laat zien hoe vaak het gebruikt wordt. Kies een neutrale
naam als de soort zelf iets over gezondheid zegt, en zet het gevoelige deel in de velden: die
waarden blijven versleuteld. Het beheerscherm waarschuwt hiervoor.
## Beheren
Website, ingelogd als beheerder: **Beheer > Kluissoorten** (`/beheer/soorten`). Daar maak je een
soort, hernoem je hem, zet je hem actief of niet-actief, kies je de plek in de lijst, zet je
"bespreken met" aan of uit en beheer je de velden. Elke wijziging komt in het logboek
(`KluisSoortBeheerd`).
## Uitrollen
1. **Database, eenmalig als root** (in cmd, niet in PowerShell). De uitrolagent heeft een beperkt
account dat tabellen mag maken maar geen gegevens mag invoegen en geen rechten mag uitdelen;
daarom zitten deze twee stappen niet in de uitrol zelf:
```
mysql -u root -p < db\02_applicatiegebruiker.sql
mysql -u root -p mijnbesluit < db\handmatig\21b_kluissoorten_startrijen.sql
```
De eerste geeft de applicatiegebruiker rechten op de twee nieuwe tabellen (zonder die rechten
krijgt de server "SELECT command denied"), de tweede zet de twaalf bestaande soorten erin.
Beide mogen opnieuw gedraaid worden. Controle: de tweede meldt `aantal_soorten` 12.
2. **Uitroller:** `21_kluissoorten.sql` maakt de tabellen (de uitrolagent draait dit mee),
daarna komen de website en de SocketServer. Draai stap 1 vóór je uitrolt: de nieuwe server leest
die tabellen meteen.
3. Nieuwe versie van de app (verhoog `ApplicationVersion`) voor Android en iOS. Die versie kan het
formulier van een eigen soort tekenen. Oudere versies blijven werken: een eigen soort toont
daar als "Overig", de items zijn zichtbaar maar niet te wijzigen (de server weigert, zodat er niets
van de ingevulde velden verloren gaat). Alleen de soorten zelf hoeven daarna nooit meer een release.
## Wat nog meer zonder release kan
Niet gebouwd, wel mogelijk op dezelfde manier: een mededelingenbalk in de app, een minimaal vereiste
appversie, de lijst met sociale media en instelwaarden (bezwaartermijn, limieten).