"""Domain entity: ParentalLeaveFetch. Represents a snapshot of a parent's Försäkringskassan data — either scraped via the headless-browser flow or entered manually. The `source` field records the provenance so the UI can display freshness information ("Manually entered on …"). tier_data is stored as a JSON string in the DB and should be decoded on load. """ from dataclasses import dataclass, field from datetime import datetime from uuid import UUID @dataclass class TierData: """Breakdown of days by compensation tier.""" sjukpenning_total: int sjukpenning_used: int sjukpenning_left: int lagsta_niva_total: int lagsta_niva_used: int lagsta_niva_left: int @dataclass class ParentalLeaveFetch: id: UUID personal_data_uuid: UUID workspace_id: UUID child_id: UUID source: str # 'scraped' | 'manual' | 'deduced' fetched_at: datetime total_days: int days_used: int days_left: int reserved_days_total: int reserved_days_left: int transferable_days_left: int dubbeldagar_left: int tier_data: TierData created_at: datetime | None = field(default=None) updated_at: datetime | None = field(default=None) # True when `transferable_days_left` is FK's own reported figure (parsed # from the "Dagar ni kan föra över" panel); False when it was derived by # `app.services.leave_snapshot.build_snapshot`'s transferable-first # fallback, including when only `reserved_days_left` was supplied. transferable_days_reported: bool = field(default=False)