[Feature] OpenKAT-rapportages #672

Closed
opened 2026-07-22 19:03:09 +00:00 by brenno · 3 comments
Owner

1. OciDeck-issue: niet-destructieve weergavelimieten

Titel

Niet-destructieve weergavelimieten voor bullets, tabellen en grafieken

Probleem

Een OciDeck-presentatie kan worden opgebouwd uit grote datasets. Een OpenKAT-import kan bijvoorbeeld resultaten van duizenden scholen, domeinen of systemen bevatten.

De volledige dataset kan relevant zijn voor controle, hergebruik en onderbouwing, maar kan niet volledig op één slide worden getoond:

  • Meer dan acht bullets vermindert de leesbaarheid.
  • Tabellen met tientallen of duizenden regels passen niet.
  • Grafieken met honderden categorieën of meetpunten worden onleesbaar.
  • Een generator moet nu gegevens definitief verwijderen om een bruikbare slide te maken.

OciDeck heeft daarom een onderscheid nodig tussen:

  1. De gegevens die bij de slide horen.
  2. De selectie van die gegevens die visueel wordt getoond.

Een weergavelimiet mag de onderliggende gegevens nooit verwijderen.

Gewenst gedrag

Voeg aan datagedreven slides een optionele, niet-destructieve weergaveconfiguratie toe.

Ondersteun minimaal:

  • bullets;
  • tabellen;
  • grafieken;
  • waar zinvol de tabelgebaseerde speciale slides.

De configuratie bevat:

  • limit: maximaal aantal zichtbare items;
  • mode: welke items worden getoond;
  • key: kolom of reeks waarop de selectie wordt gebaseerd;
  • remainder: wat met niet-getoonde items gebeurt;
  • showCount: wel of niet tonen hoeveel items verborgen zijn.

Weergavemodi

Ondersteun:

  • first: de eerste N items in bronvolgorde;
  • last: de laatste N items in bronvolgorde;
  • top: de N hoogste waarden;
  • bottom: de N laagste waarden.

Niet iedere modus is op ieder slidetype toepasbaar:

  • Bullets ondersteunen standaard alleen first en last.
  • Tabellen kunnen sorteren op een geselecteerde kolom.
  • Categorische grafieken kunnen top en bottom gebruiken.
  • Tijdreeksen gebruiken standaard last, zodat de recentste perioden zichtbaar zijn.
  • Een lijn- of tijdgrafiek mag niet stilzwijgend op hoogste waarde sorteren, omdat daarmee de chronologie verloren gaat.

Niet-getoonde gegevens

Ondersteun voor remainder:

  • hide: niet tonen, maar wel bewaren;
  • other: samenvoegen tot “Overig”, alleen wanneer de waarden verantwoord kunnen worden opgeteld.

“Overig” is vooral bruikbaar voor staaf-, taart- en donutgrafieken. Voor bullets en gewone tabellen worden verborgen items niet samengevoegd.

De slide moet desgewenst een aanduiding tonen zoals:

  • “Top 8 van 6.000 systemen”
  • “Laatste 12 van 104 meetperioden”
  • “8 van 327 regels getoond”

Deze informatie moet ook beschikbaar zijn voor toegankelijkheidslabels en exports.

Voorstel voor opslagformaat

Gebruik leesbare per-slide metadata, bijvoorbeeld:

<!-- ocideck_view_limit: 8 -->
<!-- ocideck_view_mode: top -->
<!-- ocideck_view_key: 2 -->
<!-- ocideck_view_remainder: other -->
<!-- ocideck_view_show_count: true -->

Interpretatie van view_key:

  • Bij tabellen: de kolomindex of een stabiele kolomidentifier.
  • Bij grafieken: de naam van de reeks waarop wordt gerangschikt.
  • Bij bullets: niet van toepassing.

Alternatief kan dit als één getypeerd DisplayWindowSpec in het slidermodel worden geïmplementeerd, maar de serialisatie moet menselijk leesbaar blijven.

Ontbrekende metadata betekent het bestaande gedrag: alle gegevens tonen.

Databehoud

De beperking wordt pas in de renderer toegepast. De oorspronkelijke data blijft intact in:

  • Slide.bullets;
  • Slide.tableRows;
  • de volledige ChartSpec;
  • of een gekoppeld bestand in data/.

Openen, opslaan en opnieuw openen mag geen verborgen gegevens verwijderen.

Wanneer een grafiek een gekoppelde JSON- of CSV-bron gebruikt, moet het volledige bronbestand in het OciDeck-project en een .ocideck-pakket behouden blijven. Alleen de visuele projectie wordt beperkt.

Editor

Voeg in de relevante slide-editor een sectie “Weergave beperken” toe met:

  • schakelaar “Beperk aantal getoonde items”;
  • maximaal aantal items;
  • eerste, laatste, hoogste of laagste;
  • sorteerkolom of sorteerserie;
  • “Voeg overige waarden samen”;
  • “Toon aantal verborgen items”.

Toon in de editor altijd:

  • totaal aantal items;
  • aantal getoonde items;
  • een waarschuwing als de gekozen sorteerwaarde niet numeriek is;
  • een waarschuwing als “Overig” niet verantwoord kan worden berekend.

De editor moet de volledige dataset kunnen blijven bewerken of inspecteren, ook als de preview maar een selectie toont.

Standaardwaarden

Gebruik geen globale harde limiet die bestaande decks verandert.

Voor door generators aangemaakte slides zijn verstandige standaardwaarden:

  • bullets: maximaal 8;
  • managementtabellen: maximaal 8 gegevensregels;
  • categorische grafieken: maximaal 8 categorieën;
  • top-issues: maximaal 5;
  • tijdreeksen: laatste 12 perioden;
  • grafiekreeksen: bij voorkeur maximaal 4 zichtbare reeksen.

Dit zijn generator- en weergavekeuzes, geen limieten op de opgeslagen data.

Determinisme

Wanneer meerdere items dezelfde waarde hebben, moet de selectie stabiel blijven. Sorteer daarom achtereenvolgens op:

  1. de gekozen waarde;
  2. de oorspronkelijke bronpositie;
  3. een stabiele identifier of label.

Een deck mag bij opnieuw openen niet opeens andere items in de top-N tonen.

Acceptatiecriteria

  • Een slide met 6.000 datapunten kan slechts acht punten tonen zonder de overige 5.992 te verwijderen.
  • Opslaan en opnieuw openen behoudt alle data en de weergave-instellingen.
  • Preview, presenter, PDF, PPTX en HTML tonen dezelfde selectie.
  • De slide vermeldt optioneel “N van totaal”.
  • last behoudt de chronologische volgorde van tijdreeksen.
  • top en bottom gebruiken een expliciet gekozen kolom of reeks.
  • “Overig” telt alle verborgen waarden correct op.
  • Bestaande decks zonder weergavemetadata blijven identiek werken.
  • De kwaliteitscontrole beoordeelt de zichtbare hoeveelheid, niet de omvang van de onderliggende dataset.
  • Round-trip-, renderer-, export- en golden-tests dekken iedere ondersteunde modus af.
# 1. OciDeck-issue: niet-destructieve weergavelimieten ## Titel Niet-destructieve weergavelimieten voor bullets, tabellen en grafieken ## Probleem Een OciDeck-presentatie kan worden opgebouwd uit grote datasets. Een OpenKAT-import kan bijvoorbeeld resultaten van duizenden scholen, domeinen of systemen bevatten. De volledige dataset kan relevant zijn voor controle, hergebruik en onderbouwing, maar kan niet volledig op één slide worden getoond: - Meer dan acht bullets vermindert de leesbaarheid. - Tabellen met tientallen of duizenden regels passen niet. - Grafieken met honderden categorieën of meetpunten worden onleesbaar. - Een generator moet nu gegevens definitief verwijderen om een bruikbare slide te maken. OciDeck heeft daarom een onderscheid nodig tussen: 1. De gegevens die bij de slide horen. 2. De selectie van die gegevens die visueel wordt getoond. Een weergavelimiet mag de onderliggende gegevens nooit verwijderen. ## Gewenst gedrag Voeg aan datagedreven slides een optionele, niet-destructieve weergaveconfiguratie toe. Ondersteun minimaal: - bullets; - tabellen; - grafieken; - waar zinvol de tabelgebaseerde speciale slides. De configuratie bevat: - `limit`: maximaal aantal zichtbare items; - `mode`: welke items worden getoond; - `key`: kolom of reeks waarop de selectie wordt gebaseerd; - `remainder`: wat met niet-getoonde items gebeurt; - `showCount`: wel of niet tonen hoeveel items verborgen zijn. ### Weergavemodi Ondersteun: - `first`: de eerste N items in bronvolgorde; - `last`: de laatste N items in bronvolgorde; - `top`: de N hoogste waarden; - `bottom`: de N laagste waarden. Niet iedere modus is op ieder slidetype toepasbaar: - Bullets ondersteunen standaard alleen `first` en `last`. - Tabellen kunnen sorteren op een geselecteerde kolom. - Categorische grafieken kunnen `top` en `bottom` gebruiken. - Tijdreeksen gebruiken standaard `last`, zodat de recentste perioden zichtbaar zijn. - Een lijn- of tijdgrafiek mag niet stilzwijgend op hoogste waarde sorteren, omdat daarmee de chronologie verloren gaat. ### Niet-getoonde gegevens Ondersteun voor `remainder`: - `hide`: niet tonen, maar wel bewaren; - `other`: samenvoegen tot “Overig”, alleen wanneer de waarden verantwoord kunnen worden opgeteld. “Overig” is vooral bruikbaar voor staaf-, taart- en donutgrafieken. Voor bullets en gewone tabellen worden verborgen items niet samengevoegd. De slide moet desgewenst een aanduiding tonen zoals: - “Top 8 van 6.000 systemen” - “Laatste 12 van 104 meetperioden” - “8 van 327 regels getoond” Deze informatie moet ook beschikbaar zijn voor toegankelijkheidslabels en exports. ## Voorstel voor opslagformaat Gebruik leesbare per-slide metadata, bijvoorbeeld: ```markdown <!-- ocideck_view_limit: 8 --> <!-- ocideck_view_mode: top --> <!-- ocideck_view_key: 2 --> <!-- ocideck_view_remainder: other --> <!-- ocideck_view_show_count: true --> ``` Interpretatie van `view_key`: - Bij tabellen: de kolomindex of een stabiele kolomidentifier. - Bij grafieken: de naam van de reeks waarop wordt gerangschikt. - Bij bullets: niet van toepassing. Alternatief kan dit als één getypeerd `DisplayWindowSpec` in het slidermodel worden geïmplementeerd, maar de serialisatie moet menselijk leesbaar blijven. Ontbrekende metadata betekent het bestaande gedrag: alle gegevens tonen. ## Databehoud De beperking wordt pas in de renderer toegepast. De oorspronkelijke data blijft intact in: - `Slide.bullets`; - `Slide.tableRows`; - de volledige `ChartSpec`; - of een gekoppeld bestand in `data/`. Openen, opslaan en opnieuw openen mag geen verborgen gegevens verwijderen. Wanneer een grafiek een gekoppelde JSON- of CSV-bron gebruikt, moet het volledige bronbestand in het OciDeck-project en een `.ocideck`-pakket behouden blijven. Alleen de visuele projectie wordt beperkt. ## Editor Voeg in de relevante slide-editor een sectie “Weergave beperken” toe met: - schakelaar “Beperk aantal getoonde items”; - maximaal aantal items; - eerste, laatste, hoogste of laagste; - sorteerkolom of sorteerserie; - “Voeg overige waarden samen”; - “Toon aantal verborgen items”. Toon in de editor altijd: - totaal aantal items; - aantal getoonde items; - een waarschuwing als de gekozen sorteerwaarde niet numeriek is; - een waarschuwing als “Overig” niet verantwoord kan worden berekend. De editor moet de volledige dataset kunnen blijven bewerken of inspecteren, ook als de preview maar een selectie toont. ## Standaardwaarden Gebruik geen globale harde limiet die bestaande decks verandert. Voor door generators aangemaakte slides zijn verstandige standaardwaarden: - bullets: maximaal 8; - managementtabellen: maximaal 8 gegevensregels; - categorische grafieken: maximaal 8 categorieën; - top-issues: maximaal 5; - tijdreeksen: laatste 12 perioden; - grafiekreeksen: bij voorkeur maximaal 4 zichtbare reeksen. Dit zijn generator- en weergavekeuzes, geen limieten op de opgeslagen data. ## Determinisme Wanneer meerdere items dezelfde waarde hebben, moet de selectie stabiel blijven. Sorteer daarom achtereenvolgens op: 1. de gekozen waarde; 2. de oorspronkelijke bronpositie; 3. een stabiele identifier of label. Een deck mag bij opnieuw openen niet opeens andere items in de top-N tonen. ## Acceptatiecriteria - Een slide met 6.000 datapunten kan slechts acht punten tonen zonder de overige 5.992 te verwijderen. - Opslaan en opnieuw openen behoudt alle data en de weergave-instellingen. - Preview, presenter, PDF, PPTX en HTML tonen dezelfde selectie. - De slide vermeldt optioneel “N van totaal”. - `last` behoudt de chronologische volgorde van tijdreeksen. - `top` en `bottom` gebruiken een expliciet gekozen kolom of reeks. - “Overig” telt alle verborgen waarden correct op. - Bestaande decks zonder weergavemetadata blijven identiek werken. - De kwaliteitscontrole beoordeelt de zichtbare hoeveelheid, niet de omvang van de onderliggende dataset. - Round-trip-, renderer-, export- en golden-tests dekken iedere ondersteunde modus af.
Author
Owner

Coördinatie-aantekening: in de hoofdwerkkopie staat niet-gecommit werk dat exact op dit issue past (lib/models/display_window_spec.dart, lib/services/display_window_service.dart, lib/models/openkat/, lib/services/openkat/ plus drie testbestanden; laatst aangeraakt 23-07 14:22). Vermoedelijk is een andere sessie hiermee bezig zonder claim op de tracker. Niet dubbel oppakken; wie dit leest en het zijne is: claim het hier even met taknaam.

Coördinatie-aantekening: in de hoofdwerkkopie staat niet-gecommit werk dat exact op dit issue past (lib/models/display_window_spec.dart, lib/services/display_window_service.dart, lib/models/openkat/, lib/services/openkat/ plus drie testbestanden; laatst aangeraakt 23-07 14:22). Vermoedelijk is een andere sessie hiermee bezig zonder claim op de tracker. Niet dubbel oppakken; wie dit leest en het zijne is: claim het hier even met taknaam.
Author
Owner

Opgepakt — adoptie van het gestrande werk. De niet-gecommitte bouw in de hoofdwerkkopie (display_window_* + openkat/* + drie testbestanden) staat sinds 14:22 stil en is nooit geclaimd; ik kopieer hem naar tak feat/openkat-weergavelimieten-672 (de werkkopie zelf blijft onaangeraakt, zodat de oorspronkelijke sessie niets kwijt is als hij toch terugkomt). Plan: eerst de staat beoordelen (compileert het tegen de huidige main, wat bewijzen de tests), dan de keten afmaken — l10n, docs, formaat-toets op de nieuwe ocideck_view_*-aanwijzingen door de bewaker — en landen.

Opgepakt — adoptie van het gestrande werk. De niet-gecommitte bouw in de hoofdwerkkopie (display_window_* + openkat/* + drie testbestanden) staat sinds 14:22 stil en is nooit geclaimd; ik kopieer hem naar tak feat/openkat-weergavelimieten-672 (de werkkopie zelf blijft onaangeraakt, zodat de oorspronkelijke sessie niets kwijt is als hij toch terugkomt). Plan: eerst de staat beoordelen (compileert het tegen de huidige main, wat bewijzen de tests), dan de keten afmaken — l10n, docs, formaat-toets op de nieuwe ocideck_view_*-aanwijzingen door de bewaker — en landen.
Author
Owner

Af, op main: 01e253a (PR #771), en 'make check' is dáár groen gedraaid. De kern van dit issue — de niet-destructieve weergavelimieten — staat er, langs alle acceptatiecriteria: projectie op render- én exportmoment (voorbeeld/presentator/PDF/PPTX/HTML tonen dezelfde selectie), opslaan-heropenen verliest nooit verborgen items, leesbare ocideck_view_*-aanwijzingen, 'last' behoudt chronologie (een tijdreeks op 'hoogste' valt bewust terug op laatste), top/bottom op een expliciete kolom of reeks, 'Overig' telt eerlijk op, decks zonder aanwijzingen gedragen zich exact als voorheen, en de selectie is deterministisch — de tie-break op bronpositie ontbrak in het gestrande werk en is toegevoegd mét tests.

De bewaker verwierp de eerste versie op drie punten die alle drie zijn verwerkt (misvormd commentaar gijzelde het bestand; het geëxporteerde .md droeg een levend directief over de ingebakken projectie heen; bijschrift/'Overig' waren hardgecodeerd Nederlands — nu l10n, 20 sleutels × 31 talen).

Wat er bewust níét in zat: de OpenKAT-servicelaag uit hetzelfde gestrande werk. Zonder invoerpunt is dat dode code; hij staat veiliggesteld op tak wip/openkat-services-672 en het invoerpunt is #767. De niet-gecommitte kopie in de hoofdwerkkopie heb ik niet aangeraakt — die kan de oorspronkelijke sessie (of jij) opruimen nu alles geland of geparkeerd is. Dicht.

**Af, op main: 01e253a (PR #771), en 'make check' is dáár groen gedraaid.** De kern van dit issue — de niet-destructieve weergavelimieten — staat er, langs alle acceptatiecriteria: projectie op render- én exportmoment (voorbeeld/presentator/PDF/PPTX/HTML tonen dezelfde selectie), opslaan-heropenen verliest nooit verborgen items, leesbare ocideck_view_*-aanwijzingen, 'last' behoudt chronologie (een tijdreeks op 'hoogste' valt bewust terug op laatste), top/bottom op een expliciete kolom of reeks, 'Overig' telt eerlijk op, decks zonder aanwijzingen gedragen zich exact als voorheen, en de selectie is deterministisch — de tie-break op bronpositie ontbrak in het gestrande werk en is toegevoegd mét tests. De bewaker verwierp de eerste versie op drie punten die alle drie zijn verwerkt (misvormd commentaar gijzelde het bestand; het geëxporteerde .md droeg een levend directief over de ingebakken projectie heen; bijschrift/'Overig' waren hardgecodeerd Nederlands — nu l10n, 20 sleutels × 31 talen). **Wat er bewust níét in zat:** de OpenKAT-servicelaag uit hetzelfde gestrande werk. Zonder invoerpunt is dat dode code; hij staat veiliggesteld op tak wip/openkat-services-672 en het invoerpunt is #767. De niet-gecommitte kopie in de hoofdwerkkopie heb ik niet aangeraakt — die kan de oorspronkelijke sessie (of jij) opruimen nu alles geland of geparkeerd is. Dicht.
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
LibreKAT/Ocideck#672
No description provided.