from datetime import datetime from typing import Any from ninja import Schema class TicketIn(Schema): title: str description: str category_code: str | None = None priority: str = "medium" problem_performance: str = "" problem_object: str = "" submitter_name: str = "" submitter_org: str = "" impact_scope: str = "" environment: str = "" related_system: str = "" product_name: str = "" module_name: str = "" tags: list[str] = [] attempted_actions: str = "" error_information: str = "" customer_request: str = "" current_result: str = "" assignee_id: int | None = None problem_started_at: datetime | None = None customer_last_message_at: datetime | None = None support_first_response_at: datetime | None = None support_last_reply_at: datetime | None = None class TicketUpdateIn(Schema): title: str | None = None description: str | None = None category_code: str | None = None priority: str | None = None problem_performance: str | None = None problem_object: str | None = None submitter_name: str | None = None submitter_org: str | None = None impact_scope: str | None = None environment: str | None = None related_system: str | None = None product_name: str | None = None module_name: str | None = None tags: list[str] | None = None attempted_actions: str | None = None error_information: str | None = None customer_request: str | None = None current_result: str | None = None assignee_id: int | None = None problem_started_at: datetime | None = None customer_last_message_at: datetime | None = None support_first_response_at: datetime | None = None support_last_reply_at: datetime | None = None class TicketStatusIn(Schema): status: str remark: str = "" resolution: str = "" replied_to_customer: bool | None = None class TicketUserOut(Schema): id: int username: str display_name: str class TicketCategoryOut(Schema): id: int code: str name: str description: str class TicketOut(Schema): id: int ticket_no: str title: str description: str category: TicketCategoryOut | None = None category_code: str | None = None status: str priority: str problem_performance: str problem_object: str submitter_name: str submitter_org: str resolution: str resolution_id: int | None resolution_type: str | None resolution_source: str | None resolution_root_cause: str linked_solution_id: int | None is_resolved: bool replied_to_customer: bool impact_scope: str environment: str related_system: str product_name: str module_name: str tags: list[str] attempted_actions: str error_information: str customer_request: str current_result: str requester_id: int | None assignee_id: int | None requester: TicketUserOut | None = None assignee: TicketUserOut | None = None problem_started_at: datetime | None customer_last_message_at: datetime | None support_first_response_at: datetime | None support_last_reply_at: datetime | None resolved_at: datetime | None closed_at: datetime | None archived_at: datetime | None archived_by: TicketUserOut | None = None created_at: datetime updated_at: datetime class TicketListOut(Schema): items: list[TicketOut] page: int page_size: int total: int total_pages: int class TicketEventOut(Schema): id: int event_type: str from_value: dict to_value: dict remark: str operator: TicketUserOut | None = None source: str agent_run_id: int | None metadata: dict[str, Any] created_at: datetime class TicketCommentIn(Schema): content: str comment_type: str = "user" visibility: str = "internal" class TicketCommentOut(Schema): id: int content: str comment_type: str visibility: str created_by: TicketUserOut | None = None created_at: datetime class TicketCollaboratorIn(Schema): user_id: int role: str = "collaborator" class TicketCollaboratorOut(Schema): id: int user: TicketUserOut role: str added_by: TicketUserOut | None = None created_at: datetime class TicketFieldEvidenceOut(Schema): id: int field_name: str value: Any source: str confidence: float | None evidence: dict[str, Any] agent_run_id: int | None is_protected: bool created_by: TicketUserOut | None = None created_at: datetime class TicketAttachmentIn(Schema): file_name: str file_type: str = "" mime_type: str = "" file_size: int = 0 storage_path: str class TicketAttachmentOut(Schema): id: int file_name: str file_type: str mime_type: str file_size: int storage_path: str sha256: str scan_status: str scan_result: dict[str, Any] parse_status: str parse_error: str parsed_text: str created_at: datetime class TicketIntakeTraceOut(Schema): available: bool public_id: str | None = None status: str = "" source_text: str = "" problem_valid: bool | None = None invalid_reason: str = "" missing_fields: list[str] = [] message_timeline: list[dict[str, Any]] = [] agent_run_public_id: str | None = None class TicketSimilaritySuggestionOut(Schema): ticket_id: int ticket_no: str title: str status: str category_code: str | None score: float title_similarity: float keyword_score: float matched_excerpt: str algorithm_version: str created_at: datetime | None = None class TicketSupportAnalysisOut(Schema): id: int ticket_id: int run_public_id: str agent_version: int status: str progress_stage: str progress_message: str query: str retrieval_policy: dict[str, Any] references: list[dict[str, Any]] final_output: Any | None automation_decision: dict[str, Any] applied_solution_id: int | None processed_at: datetime | None error_code: str error_message: str created_at: datetime started_at: datetime | None finished_at: datetime | None class TicketKnowledgeDistillationOut(Schema): id: int ticket_id: int run_public_id: str agent_version: int status: str progress_stage: str progress_message: str references: list[dict[str, Any]] retrieval_policy: dict[str, Any] final_output: Any | None should_distill: bool | None reason: str assessment: dict[str, Any] knowledge_item_id: int | None troubleshooting_plan_id: int | None solution_id: int | None processed_at: datetime | None error_code: str error_message: str created_at: datetime started_at: datetime | None finished_at: datetime | None class CustomerReplyRevisionOut(Schema): version: int content: str source: str edited_by_id: int | None created_at: datetime class CustomerReplyTaskOut(Schema): id: int ticket_id: int support_analysis_id: int | None status: str draft_text: str final_text: str revision: int created_by_id: int | None updated_by_id: int | None approved_by_id: int | None approved_at: datetime | None sent_by_id: int | None sent_at: datetime | None created_at: datetime updated_at: datetime revisions: list[CustomerReplyRevisionOut] class CustomerReplyUpdateIn(Schema): final_text: str expected_revision: int class CustomerReplyConfirmIn(Schema): expected_revision: int class IntakeEvaluationRecordIn(Schema): case_key: str draft_public_id: str class IntakeEvaluationResultOut(Schema): id: int case_key: str case_source_kind: str draft_public_id: str ticket_id: int | None actual_auto_created: bool correct_field_count: int evaluated_field_count: int field_accuracy: float | None passed: bool details: dict[str, Any] created_at: datetime updated_at: datetime class IntakeRateMetricOut(Schema): valid_input_count: int auto_created_count: int auto_creation_rate: float | None class IntakeEvaluationMetricOut(Schema): enabled_case_count: int reviewed_case_count: int coverage_rate: float | None valid_input_count: int auto_created_count: int auto_creation_rate: float | None correct_field_count: int evaluated_field_count: int field_accuracy: float | None evidence_covered_field_count: int evidence_field_count: int evidence_coverage_rate: float | None correct_timeline_item_count: int evaluated_timeline_item_count: int timeline_accuracy: float | None result_selection: str class IntakeQualityTargetsOut(Schema): auto_creation_rate: float field_accuracy: float coverage_complete: bool auto_creation_rate_met: bool | None field_accuracy_met: bool | None class IntakeQualityMetricsOut(Schema): include_synthetic: bool operational: IntakeRateMetricOut evaluation: IntakeEvaluationMetricOut targets: IntakeQualityTargetsOut class SupportEvaluationRecordIn(Schema): case_key: str analysis_id: int class SupportEvaluationResultOut(Schema): id: int case_key: str case_source_kind: str analysis_id: int ticket_id: int actual_candidate_solution_ids: list[int] actual_citation_ranks: list[int] matched_expected_solution: bool actual_auto_resolved: bool actual_manual_fallback: bool incorrect_auto_reuse: bool citations_valid: bool passed: bool details: dict[str, Any] created_at: datetime updated_at: datetime class SupportEvaluationMetricOut(Schema): enabled_case_count: int reviewed_case_count: int coverage_rate: float | None expected_match_case_count: int matched_solution_count: int solution_match_rate: float | None eligible_auto_resolve_case_count: int auto_resolved_count: int eligible_auto_resolve_rate: float | None actual_auto_resolved_count: int incorrect_auto_reuse_count: int incorrect_auto_reuse_rate: float | None expected_manual_fallback_count: int manual_fallback_count: int manual_fallback_accuracy: float | None citation_valid_count: int citation_validity_rate: float | None result_selection: str class SupportQualityTargetsOut(Schema): solution_match_rate: float eligible_auto_resolve_rate: float incorrect_auto_reuse_rate: float coverage_complete: bool solution_match_rate_met: bool | None eligible_auto_resolve_rate_met: bool | None incorrect_auto_reuse_rate_met: bool | None manual_fallback_accuracy_met: bool | None citation_validity_rate_met: bool | None class SupportQualityMetricsOut(Schema): include_synthetic: bool evaluation: SupportEvaluationMetricOut targets: SupportQualityTargetsOut