from datetime import datetime from ninja import Schema class TicketDraftCreateIn(Schema): source_text: str = "" class TicketDraftPatchIn(Schema): expected_revision: int fields: dict class TicketDraftActionIn(Schema): expected_revision: int class TicketDraftAnswerIn(Schema): expected_revision: int answer: str question: str = "" class TicketDraftMaterialOut(Schema): id: str file_name: str material_type: str extension: str claimed_mime_type: str mime_type: str file_size: int status: str scan_status: str scan_result: dict parse_status: str parse_error: str parsed_text_length: int # Compatibility schema name retained for the legacy images field. TicketDraftImageOut = TicketDraftMaterialOut class TicketDraftMessageOut(Schema): role: str content: str round_number: int created_at: datetime class TicketDraftAgentProgressOut(Schema): stage: str message: str current_step: str total_steps: int retry_count: int elapsed_ms: int slow: bool class TicketDraftOut(Schema): public_id: str status: str revision: int source_text: str problem_valid: bool | None = None invalid_reason: str fields: dict last_ai_fields: dict field_evidence: dict message_timeline: list[dict] missing_fields: list[str] questions: list[str] guided_rounds: int agent_run_public_id: str | None = None agent_progress: TicketDraftAgentProgressOut materials: list[TicketDraftMaterialOut] images: list[TicketDraftMaterialOut] messages: list[TicketDraftMessageOut] decision: str error_code: str error_message: str created_ticket: dict | None = None confirmed_ticket: dict | None = None created_at: datetime updated_at: datetime expires_at: datetime class TicketDraftAvailabilityOut(Schema): available: bool reason: str vision_available: bool vision_reason: str max_file_size: int max_files: int max_total_size: int supported_extensions: list[str]