Summary
Implement fct_staff_attrition as a periodic snapshot fact table capturing each staff member's attrition status at the close of each academic year, across three measurement methodologies (foundation, nj_compliance, recruitment).
This replaces fct_staff_attrition and fct_staff_terminations from the prototype marts folder and plugs into the star schema defined in the 2026-03-27 design doc.
Design
See docs/superpowers/specs/2026-04-02-fct-staff-attrition-design.md.
Key decisions
- Single model: combines attrition + termination context (
fct_staff_terminations dropped — no downstream consumers)
- Grain: employee × academic_year × attrition_type (3 rows per person per year)
snapshot_date: per-methodology window close for retained staff; termination effective date for attritors
- Source:
int_people__staff_roster_history
- Location:
models/marts/facts/fct_staff_attrition.sql
Acceptance criteria
Summary
Implement
fct_staff_attritionas a periodic snapshot fact table capturing each staff member's attrition status at the close of each academic year, across three measurement methodologies (foundation, nj_compliance, recruitment).This replaces
fct_staff_attritionandfct_staff_terminationsfrom the prototype marts folder and plugs into the star schema defined in the 2026-03-27 design doc.Design
See docs/superpowers/specs/2026-04-02-fct-staff-attrition-design.md.
Key decisions
fct_staff_terminationsdropped — no downstream consumers)snapshot_date: per-methodology window close for retained staff; termination effective date for attritorsint_people__staff_roster_historymodels/marts/facts/fct_staff_attrition.sqlAcceptance criteria
fct_staff_attrition.sqlbuilt fromint_people__staff_roster_historyemployee_number + academic_year + attrition_typedim_staffanddim_staff_work_assignments(SCD2, resolved onsnapshot_date)Internship Endedexcluded from all cohortsfct_staff_terminationsremoved