Performance reviews
Performance in HRMQ is dossier-anchored — there is no standalone
"performance" module and no 10th top-level menu entry. Per ADR-001 Rule
6, the review surface hangs off the personnel dossier (EmployeeDetail)
and the existing Personeel menu group.
Review cycles: the container
ReviewCycle (jaargesprek / beoordeling / tussentijds) is a generic
container with a simple lifecycle:
concept → open → gesloten
There is no re-open edge — a closed cycle is history; corrections mean a
new cycle. ReviewCycles and ReviewCycleDetail live as sub-pages under
the existing Personeel group, listing the reviews that reference each
cycle. ReviewCycle is deliberately generic so a future compensation-cycle
capability can reference cycles instead of reinventing them.
Reviews: one dossier, goals inside
PerformanceReview carries rating, sterktes, ontwikkelpunten,
afspraken, and a goals array — inside the review object. There is
no separate Goal entity anywhere in the register: goals freeze with the
dossier under one lifecycle, one audit trail, and one retention context.
A future OKR capability owns cross-cycle goal tracking.
concept → ingediend → besproken → vastgesteld
↑___________|
(heropenen)
vaststellen requires the same NoSelfApprovalGuard already used on
Timesheets and Expenses, reused unchanged: the employee under review
cannot vaststellen their own beoordeling. heropenen returns a
vastgesteld review to besproken for correction — every path back to
vastgesteld passes the guard again.
Machine-checked dossier completeness
A vastgesteld review without a rating or afspraken is no
ontslagdossier — BW art. 7:669 lid 3 sub d requires a documented,
substantiated basis for a disfunctioneren dismissal. HRMQ makes this a
machine-checkable, recommended-severity rule:
nl-performance-dossiervorming — a vastgesteld PerformanceReview
must carry a non-null rating and non-empty afspraken. Reviews in any
earlier status pass vacuously — an unfinished review legitimately lacks a
rating yet.
occ hrmq:rules:audit
Where reviews show up
EmployeeDetailgains a "Beoordelingen" row listing the employee's reviews, linking toPerformanceReviewDetailPerformanceReviewDetail(not a menu child — reached only from the dossier orMijnBeoordelingen) exposes exactly the lifecycle actions indienen / bespreken / vaststellen / heropenenMijnBeoordelingenunder Mijn HR shows each employee their own reviews, via the same denormalizeduserId@mepattern as Self-service
OKR / 9-box / kalibratie, compensation cycles, and career frameworks are explicitly out of scope — separate future capabilities.