Performance management: evaluations, objectives, trainings, promotions and 9-box.

- Client
- Socium
Context
Each client company runs its own review campaigns, rating scales and weighting rules, and HR needs the same score on screen, in the printed report and in the dashboards.
What I built
As lead: evaluations with live scoring, configurable rating scales and printable PDF reports; objectives with sub-objectives, strict weighting controls, bulk closing and role-based views; training plans with scheduled reminders and Yello e-learning integration; promotions, mobility and the 9-box talent grid. Like the four other apps of the suite, it runs on the shared security model I put in place: tenant isolation in a common data-access layer, fail-closed guards and per-app permissions on Keycloak.
Result
As lead on the module, about 384 commits: evaluations, objectives, trainings, promotions and the 9-box in one place.
Architecture
One score calculation for the whole suite
Evaluation scores are computed by a shared @socium library, so the live score during input, the PDF report and the dashboards always show the same number.
Write routes guarded by the journey
An answer can only be written by its evaluator, on their own form, at the right step of the campaign, checked on the server.
Reminders outside the API
An hourly serverless cron sends training and evaluation reminders at the time each company configured, without loading the API.
Strict weighting rules
Objective weights are validated on the server, sub-objectives included, and gaps trigger a notification instead of a silent error.
Stack
- Angular
- NestJS
- MongoDB
- Keycloak

