From assessments
Use when editing assessment YAML sources in sources/, asking about the assessment schema structure, adding tasks/fields to prescan.yaml, dpia.yaml or iama.yaml, or working with dependencies, calculations, or references in assessment definitions.
How this skill is triggered — by the user, by Claude, or both
Slash command
/assessments:assessment-schema-yamlThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Guide for editing YAML assessment sources (`sources/prescan.yaml`, `sources/dpia.yaml`, `sources/iama.yaml`) that conform to `schemas/assessment-definition.v1.schema.json`.
Guide for editing YAML assessment sources (sources/prescan.yaml, sources/dpia.yaml, sources/iama.yaml) that conform to schemas/assessment-definition.v1.schema.json.
name: "DPIA Rapportagemodel Rijksdienst"
urn: "urn:nl:dpia:3.0" # Pattern: urn:nl:<type>:<version>
version: "3.0"
description: "..."
tasks: [...] # Required: array of task objects
assessments: [...] # Optional: evaluation rules (used in prescan)
prefixQuestionIds: true # Optional: prefix every label with its official question ID (used by iama.yaml)
The IAMA (sources/iama.yaml, urn: "urn:nl:iama", version: "2.0") is a third assessment type alongside Pre-scan and DPIA. It sets prefixQuestionIds: true, which prefixes each task label with its official question ID.
Every task requires these fields:
- task: "Task title" # Required: display name
id: "2.1.3" # Required: hierarchical ID, pattern ^[0-9]+(\.[0-9]+)*
type: # Required: array of field types
- open_text
repeatable: false # Required: boolean
Optional fields:
description: explanation text (may contain HTML)category: grouping categoryis_official_id: true if ID matches the Rapportagemodel DPIA numberingvalueType: expected data type (string, boolean, number, string[], boolean|null)defaultValue: pre-filled valueoptions: required when type includes select_option, checkbox_option, or radio_optiontasks: nested child tasks (for task_group type)dependencies: conditional display rulescalculation: score calculation logicreferences: cross-references to other assessmentssources: external resource references (images, documents)required_status: whether the field is mandatoryinstance_label_template: template for repeatable instance labels (e.g. "Gegevensverwerking {4.1.1}")IAMA-specific task fields (present in sources/iama.yaml):
in_fria: true — marks a question as part of the FRIA (Fundamental Rights Impact Assessment, art. 27 AI-verordening)action_point_group: true — marks a task group that collects the action points ("Actiepunten") for a deelaction_point_summary: true — marks the deel (Deel 5 – Afsluiting) that summarises all action points| Type | Description | Requires |
|---|---|---|
text_input | Single-line text | - |
open_text | Multi-line text | - |
select_option | Dropdown select | options array |
multiselect_scrollable | Scrollable multi-select list (used in iama.yaml) | options array |
checkbox_option | Multiple checkboxes | options array |
radio_option | Radio buttons | options array |
task_group | Container for child tasks | tasks array |
informational | Read-only informational block (no input; used in iama.yaml) | - |
date | Date picker | - |
A task can have multiple types (array), e.g. [open_text, select_option].
options:
- value: "option_value" # Required: string, boolean, or null
label: "Display label" # Optional: if omitted, value is shown
Three types of dependencies control conditional behavior:
dependencies:
- type: conditional
condition:
id: "2.1.6" # Task ID to check
operator: equals # equals | contains | any | all
value: true # Value to match
action: show # show | hide
dependencies:
- type: source_options
condition:
id: "2.1" # Source task ID
action: options
dependencies:
- type: instance_mapping
source:
id: "3.1" # Source repeatable task
mapping_type: one_to_one # one_to_one | one_to_many | many_to_one
action: sync_instances
Score calculations use jexl expressions:
calculation:
scoreKey: "gewone_persoonsgegeven"
expression: "answers('1.1.2') | count"
riskScore:
- when: "gewone_persoonsgegeven < 6"
value: 0
- when: "gewone_persoonsgegeven >= 6"
value: 1
answers('taskId') — get the answer value for a taskbool(value) — convert to booleancount — filter/transform that counts array itemscountSelectedOptions('taskId') — count selected checkbox optionsweightedCountMap(answers, weightMap) — weighted count of selected optionsCross-references between Pre-scan and DPIA:
references:
prescanModelId: "1" # Links to Pre-scan Model paragraph
DPIA: "1.1" # Simple: links to DPIA task ID
DPIA: # With type:
- id: "1.1"
type: "one-to-one" # one-to-one | one-to-many | many-to-one | many-to-many
DPIA: # Typed reference:
id: "12.1.1"
type: "pre-fill" # pre-fill | pre-view | direct takeover
assessments:
- id: "DPIA"
levels:
- level: "required" # required | recommended
expression: "criteria.wetgeving || criteria.riskscore"
result: "DPIA verplicht"
criteria:
- id: "wetgeving"
expression: "bool(answers('0.1'))"
explanation: "er sprake is van nieuwe wet- of regelgeving"
"0", "1", "2")"2.1", "2.1.3")"0" is the introduction (not an official DPIA section)is_official_id: true means the ID corresponds to the Rapportagemodel numberingAfter editing YAML sources, validate with:
python script/schema_validator.py --schema schemas/assessment-definition.v1.schema.json --source sources/dpia.yaml
python script/schema_validator.py --schema schemas/assessment-definition.v1.schema.json --source sources/prescan.yaml
python script/schema_validator.py --schema schemas/assessment-definition.v1.schema.json --source sources/iama.yaml
The schema file schemas/assessment-definition.v1.schema.json is the source of truth. Always read it when unsure about allowed values.
Creates, edits, and optimizes skills for Claude Code, including drafting, evaluating with test prompts, iterating on performance, and improving skill descriptions for better triggering accuracy.
npx claudepluginhub minbzk/par-dpia-form --plugin assessments