from __future__ import annotations from datetime import datetime from typing import Any from pydantic import BaseModel, ConfigDict, Field class ExpenseCaseLinkRead(BaseModel): model_config = ConfigDict(from_attributes=True) id: str resource_type: str resource_id: str relation_type: str created_at: datetime class BusinessEventRead(BaseModel): model_config = ConfigDict(from_attributes=True) id: str event_type: str event_version: int idempotency_key: str aggregate_type: str aggregate_id: str correlation_id: str causation_id: str | None actor_id: str actor_type: str payload_json: dict[str, Any] = Field(default_factory=dict) delivery_status: str occurred_at: datetime published_at: datetime | None class ExpenseCaseTimelineRead(BaseModel): model_config = ConfigDict(from_attributes=True) id: str case_no: str scene_code: str title: str owner_employee_id: str | None current_stage: str status: str created_at: datetime updated_at: datetime links: list[ExpenseCaseLinkRead] = Field(default_factory=list) events: list[BusinessEventRead] = Field(default_factory=list)