diff --git a/backend/app/models/hr.py b/backend/app/models/hr.py index 4f8adc19..54d0193b 100644 --- a/backend/app/models/hr.py +++ b/backend/app/models/hr.py @@ -19,6 +19,11 @@ class HeadcountRequest(SQLModel, table=True): justification: str | None = None status: str = Field(default="submitted") + # fulfillment linkage (optional) + fulfilled_employee_id: int | None = Field(default=None, foreign_key="employees.id") + fulfilled_onboarding_id: int | None = Field(default=None, foreign_key="agent_onboardings.id") + fulfilled_at: datetime | None = None + created_at: datetime = Field(default_factory=datetime.utcnow) @@ -32,6 +37,9 @@ class EmploymentAction(SQLModel, table=True): action_type: str # praise|warning|pip|termination notes: str | None = None + # Optional idempotency key to prevent duplicates on retries + idempotency_key: str | None = Field(default=None, index=True, unique=True) + created_at: datetime = Field(default_factory=datetime.utcnow) @@ -46,6 +54,9 @@ class AgentOnboarding(SQLModel, table=True): tools_json: str | None = None owner_hr_id: int | None = Field(default=None, foreign_key="employees.id") + # Link to the employee record once created + employee_id: int | None = Field(default=None, foreign_key="employees.id") + status: str = Field(default="planned") # planned|spawning|spawned|verified|blocked spawned_agent_id: str | None = None session_key: str | None = None diff --git a/backend/app/schemas/hr.py b/backend/app/schemas/hr.py index 691e44f0..6b92288e 100644 --- a/backend/app/schemas/hr.py +++ b/backend/app/schemas/hr.py @@ -15,6 +15,8 @@ class HeadcountRequestCreate(SQLModel): class HeadcountRequestUpdate(SQLModel): status: str | None = None justification: str | None = None + fulfilled_employee_id: int | None = None + fulfilled_onboarding_id: int | None = None class EmploymentActionCreate(SQLModel): @@ -22,6 +24,7 @@ class EmploymentActionCreate(SQLModel): issued_by_employee_id: int action_type: str notes: str | None = None + idempotency_key: str | None = None class AgentOnboardingCreate(SQLModel): @@ -31,6 +34,7 @@ class AgentOnboardingCreate(SQLModel): cron_interval_ms: int | None = None tools_json: str | None = None owner_hr_id: int | None = None + employee_id: int | None = None status: str = "planned" spawned_agent_id: str | None = None session_key: str | None = None @@ -44,6 +48,7 @@ class AgentOnboardingUpdate(SQLModel): cron_interval_ms: int | None = None tools_json: str | None = None owner_hr_id: int | None = None + employee_id: int | None = None status: str | None = None spawned_agent_id: str | None = None session_key: str | None = None