from enum import Enum from pydantic import BaseModel from typing import Optional from datetime import date, datetime import uuid class CompetencyRating(int, Enum): NEEDS_IMPROVEMENT = 1 SATISFACTORY = 2 GOOD = 3 EXCELLENT = 4 class ReHireEligibility(str, Enum): YES = "yes" NO = "no" CONDITIONAL = "conditional" # SECTION 1: INFORMATION & RECORD OVERVIEW class RecordOverview(BaseModel): position_applied:Optional[str]=None department_id:Optional[uuid.UUID]=None department:Optional[str]=None date_time:Optional[datetime]=None # SECTION 2: EMPLOYMENT VERIFICATION & DUTIES class EmploymentVerification(BaseModel): confirmed_job_title:Optional[str]=None confirmed_from:Optional[date]=None confirmed_to:Optional[date]=None reason_for_leaving:Optional[str]=None # SECTION 3: one row of the competency grid (1-4 tick + Notes column) class CompetencyScore(BaseModel): rating:Optional[CompetencyRating]=None notes:Optional[str]=None class CompetencyEvaluation(BaseModel): technical_knowledge:Optional[CompetencyScore]=None reliability:Optional[CompetencyScore]=None communication:Optional[CompetencyScore]=None problem_solving:Optional[CompetencyScore]=None # SECTION 4: QUALITATIVE EVALUATION & KEY INSIGHTS class QualitativeEvaluation(BaseModel): strengths:Optional[str]=None areas_for_growth:Optional[str]=None rehire_eligibility:Optional[ReHireEligibility]=None rehire_comments:Optional[str]=None # SECTION 5: REFEREE CONTACT & RELATIONSHIP VERIFICATION class RefereeDetails(BaseModel): full_name:Optional[str]=None current_title:Optional[str]=None company:Optional[str]=None phone:Optional[str]=None email:Optional[str]=None