Spec: HR-09-ENHANCEMENTS (EN-1: Structured Interview Scorecards)Documentation Index
Fetch the complete documentation index at: https://docs.encoreos.io/llms.txt
Use this file to discover all available pages before exploring further.
Regulations: Title VII of the Civil Rights Act, EEOC Uniform Guidelines on Employee Selection Procedures
Date: 2026-03-25
Status: ✅ Implemented
1. Regulatory Context
Title VII and the EEOC Uniform Guidelines require that employee selection procedures (including interviews) be:- Job-related and consistent with business necessity (§1607.3)
- Applied uniformly to all candidates for a given position
- Free from discriminatory bias in both design and application
- Documented with sufficient records for adverse impact analysis (§1607.4)
2. Controls Implemented
2.1 Standardized Evaluation Criteria
| Control | Implementation | Evidence |
|---|---|---|
| Pre-defined competencies per position | hr_interview_scorecard_templates.competencies JSONB with name, description, weight, category | Migration: 20260325132353_ebf0fec5-db63-41ec-9656-95b6b12e9bb4.sql creates table with NOT NULL competencies |
| Consistent rating scale | hr_interview_scorecard_templates.rating_scale JSONB with min, max, labels | Zod schema validation: ratingScaleSchema in ats-scorecards.ts |
| Template assignment to job postings | hr_job_postings.default_scorecard_template_id FK | All candidates for a posting use the same template |
| Weighted scoring formula | computeOverallScore() in interviewScorecard.ts | Unit tested (13 tests in interviewScorecard.test.ts) |
2.2 Blind Evaluation (Bias Prevention)
| Control | Implementation | Evidence |
|---|---|---|
| Interviewers cannot see others’ scores before submitting | RLS policy using hr_scorecard_interviewer_has_submitted() SECURITY DEFINER helper | Migration lines 92-101: SELECT policy restricts visibility |
| Submission lock | is_submitted flag; once true, scorecard is immutable | CHECK constraint + application-level enforcement |
| Independent evaluation | Each interviewer completes their own scorecard independently | No shared editing; individual interviewer_id per scorecard |
2.3 Audit Trail
| Control | Implementation | Evidence |
|---|---|---|
| Scorecard creation/update timestamps | created_at, updated_at columns with defaults | Standard audit columns in migration |
| Actor tracking | created_by, updated_by UUID FK to pf_profiles | Tracks who created/modified each scorecard |
| Submission timestamp | completed_at timestamp set on submission | Immutable after submission |
| Tenant isolation | RLS + organization_id on all tables | Prevents cross-org data leakage |
2.4 Recommendation Constraints
| Control | Implementation | Evidence |
|---|---|---|
| Standardized recommendation values | CHECK constraint: strong_hire, hire, no_hire, strong_no_hire | Migration CHECK constraint on recommendation |
| Aggregate recommendation view | countRecommendations() utility + Comparison Grid | Shows distribution across all interviewers |
3. Documentation & Recordkeeping
Per EEOC §1607.15, organizations must maintain records of selection procedures and their impact:- Scorecard data is retained indefinitely in
hr_interview_scorecards(no TTL/purge) - Template history preserved via
is_activesoft-disable (templates are not deleted) - PDF export capability allows generation of compliance-ready documentation
- Comparison Grid provides aggregate view for adverse impact analysis
4. Gaps and Recommendations
| Item | Status | Notes |
|---|---|---|
| Adverse impact ratio calculator (4/5ths rule) | 🔲 Not implemented | Recommended for Phase 2; can be built from scorecard aggregate data |
| Competency validation against job analysis | 🔲 Manual process | Templates should be reviewed by HR/Legal to ensure job-relatedness |
| Interviewer calibration training | 🔲 Organizational process | Not a system feature; recommended as operational procedure |
| Retention policy documentation | 🔲 Pending | Define retention periods per state/federal requirements |
5. Testing Evidence
- Unit tests: 13 tests covering
computeOverallScore,countRecommendations,averageOverallScores - RLS tests:
hr-interview-scorecard-templates.rls.test.ts,hr-interview-scorecards.rls.test.ts— tenant isolation, cross-org blocking - E2E tests:
ats-scorecard-workflow.spec.ts— route rendering, skeleton loading, breadcrumbs