- TypeScript 80.1%
- Vue 11.2%
- Python 3.8%
- JavaScript 2.2%
- CSS 1.9%
- Other 0.8%
* fix(prescan): let the weights of 1.4.1 and 5.1.2 count again weightedCountMap looks its keys up verbatim in a plain object, so a key that does not match the stored answer character for character silently adds 0. The keys of both questions never matched their option values: the values carry a 'Categorie betrokkenen: ' / 'Basisregistratie: ' prefix that the keys omit. Both score keys therefore stayed 0 no matter what was ticked, so the weights (up to 3 points for children under 16 and other vulnerable groups) never reached the DPIA threshold of "sum > 4". Measured against the real calculation store, one filled-in form: before betrokkenen=0 basisregistratie=0 -> no obligation, after betrokkenen=2 basisregistratie=1 -> DPIA verplicht. Guards the invariant in the content test: every weightedCountMap key must match an existing option value. * test(pre-scan): assert the DPIA verdict, not just the score The weighted answers now run all the way through: risk score mapping, the sum > 4 criterion and the resulting "DPIA verplicht" level. Without the fix the scenario yields no obligation at all. Tightens the changelog entry to match the surrounding style, which keeps the feature as the subject of the sentence. --------- Co-authored-by: Ravi Meijer <ravi.meijer@rijksoverheid.nl> |
||
|---|---|---|
| .claude | ||
| .claude-plugin | ||
| .github | ||
| apps | ||
| containers | ||
| docs | ||
| LICENSES | ||
| packages/assessment-core | ||
| schemas | ||
| script | ||
| scripts | ||
| sources | ||
| tests/e2e | ||
| .containerignore | ||
| .editorconfig | ||
| .gitattributes | ||
| .gitignore | ||
| .pre-commit-config.yaml | ||
| .prettierrc.json | ||
| CHANGELOG.md | ||
| CODE_OF_CONDUCT.md | ||
| CONTRIBUTING.md | ||
| DCO.md | ||
| eslint.config.ts | ||
| GOVERNANCE.md | ||
| LICENSE | ||
| package.json | ||
| pnpm-lock.yaml | ||
| pnpm-workspace.yaml | ||
| publiccode.yml | ||
| pyproject.toml | ||
| README.md | ||
| REUSE.toml | ||
| SECURITY.md | ||
| SUPPORT.md | ||
| uv.lock | ||
PAR Assessments
Webapplicatie voor het uitvoeren van Pre-scan-, DPIA- en IAMA-assessments, volgens het Rijksmodel DPIA en het IAMA (Impact Assessment Mensenrechten en Algoritmes) van de Nederlandse overheid. Gebouwd met het RVO component library.
Kenmerken
- Pre-scan, DPIA en IAMA invullen in de browser als losstaande applicatie
- Samenwerken aan Pre-scans, DPIA's en IAMA's via Invulhulpen:
- Samenwerken aan assessments met meerdere gebruikers
- Projectbeheer met rollen (eigenaar, bewerker, kijker)
- Voortgang opslaan en later hervatten
- PDF-export van ingevulde assessments
Architectuur
pnpm monorepo:
| Package | Omschrijving |
|---|---|
packages/assessment-core |
Gedeelde assessment-engine: formulierweergave, navigatie, validatie, PDF-export |
apps/boekhouding-frontend |
Vue 3 SPA — projectbeheer, samenwerken, Keycloak-login |
apps/boekhouding-backend |
Fastify REST API — PostgreSQL, JWT-authenticatie |
apps/standalone-form |
Standalone formulier — draait zonder backend, exporteert als single HTML |
sources/ |
YAML-bronbestanden voor Pre-scan-, DPIA- en IAMA-assessments |
Technologie
- Frontend: Vue 3 (Composition API), TypeScript, Vite, Pinia
- Backend: Fastify 5, Drizzle ORM, PostgreSQL 17
- Auth: Keycloak (OIDC), JWT-verificatie via
jose - Styling: RVO Design System
- Standalone: Vite single-file build — alles (HTML, CSS, JS) in één bestand
- PDF: pdfmake
Aan de slag
Vereisten
- Volledige stack: Podman of Docker
- Standalone formulier: Node.js 22+ en pnpm (via
corepack enable)
Volledige stack
Start PostgreSQL, Keycloak en de applicatie met één commando. Wil je alleen een formulier invullen zonder backend? Zie Standalone formulier.
podman compose -f containers/compose.dev.yaml up -d
pnpm db:seed # testdata laden (idempotent)
| Service | URL |
|---|---|
| Frontend | http://localhost:5174 |
| Backend API | http://localhost:3000 |
| Standalone formulier | http://localhost:5175 |
| Keycloak admin | http://localhost:8080 (admin / admin) |
Testgebruikers: sam@example.com / welkom123, noor@example.com / welkom123
De seed maakt drie projecten aan (een pre-scan met antwoorden, een DPIA met versiegeschiedenis, en een leeg project) gekoppeld aan de testgebruikers. Database-migraties draaien automatisch bij het starten van de backend container.
Standalone formulier
Voor ontwikkeling zonder backend (vereist Node.js 22+ en pnpm):
corepack enable
pnpm install
pnpm dev
Bouwen
pnpm build:standalone # Standalone HTML-bestand
pnpm build:backend # Backend
pnpm build:frontend # Frontend
Commando's
| Commando | Omschrijving |
|---|---|
pnpm dev |
Start standalone formulier |
pnpm dev:backend |
Start backend (vereist PostgreSQL) |
pnpm dev:frontend |
Start frontend |
pnpm db:generate |
Genereer database-migraties |
pnpm db:migrate |
Voer migraties uit |
pnpm db:seed |
Vul database met testdata (idempotent) |
pnpm lint |
Lint de code |
Assessment-bronbestanden
De sources/ directory bevat de assessment-definities in YAML:
| Bestand | Omschrijving |
|---|---|
prescan.yaml |
Pre-scan DPIA-definitie |
dpia.yaml |
Volledige DPIA-definitie |
iama.yaml |
IAMA-definitie |
begrippenkader_dpia.yaml |
Begrippenlijst met tooltips |
begrippenkader_iama.yaml |
Begrippenlijst IAMA / Algoritmekader |
YAML verwerken
Vereist uv (Python package manager).
# Valideer en genereer JSON voor standalone formulier
uv run script/run_all.py \
--schema schemas/assessment-definition.v1.schema.json \
--source sources/dpia.yaml \
--begrippen-yaml sources/begrippenkader_dpia.yaml \
--output-json form-app/src/assets/DPIA.json \
--output-md docs/questions/questions_DPIA.md
Domeinkennis-plugin (AI-assistent)
Voor ontwikkelaars en redacteuren die in de editor (Claude Code / Cursor) aan déze repo werken is er een Claude-plugin met domeinkennis over de assessment-definities: schema's, begrippenkaders, RVO-styling en een validatie-agent. Het is een hulpmiddel bij het bouwen en onderhouden van de definities en applicatie — niet een invul-assistent voor eindgebruikers die een pre-scan, DPIA of IAMA uitvoeren.
Installeren:
/plugin marketplace add MinBZK/par-dpia-form
/plugin install assessments@assessment-tools
Zie het ontwerp en de verantwoording van de marketplace en plugin.
Standaarden en compliance
Invulhulpen conformeert aan de volgende overheidsstandaarden:
| Standaard | Status |
|---|---|
| NL GOV API Design Rules | URI-versioning (/api/v1/), application/problem+json, security headers, API-Version header |
| WCAG 2.2 AA | Gedeeltelijk — actieve verbetering, zie toegankelijkheidsverklaring |
| BIO2 | JWT audience-validatie, rate limiting, input-validatie, security headers |
| AVG / GDPR | Dataminimalisatie, RBAC, auditlog, privacyverklaring |
| EUPL-1.2 | Open source licentie conform open-tenzij beleid |
Privacy en gegevensverwerking
Zie docs/gegevensverwerking.md voor een overzicht van verwerkte persoonsgegevens, rechtsgrond en bewaartermijnen.
Documentatie
- Product Decision Records — productbeslissingen en achtergrond
- Gegevensverwerking — privacy en dataminimalisatie
- Standard for Public Code - zelfevaluatie tegen de zestien criteria
Bijdragen en hulp
- Een vraag of iets werkt niet: SUPPORT.md, of kijk in de issues
- Zelf iets bijdragen: CONTRIBUTING.md en de openstaande pull requests
- Wie het project onderhoudt en hoe besluiten tot stand komen: GOVERNANCE.md
- Omgangsvormen: CODE_OF_CONDUCT.md
- Een kwetsbaarheid melden: SECURITY.md