feat: consolidate ticket domain baseline
This commit is contained in:
@@ -1,4 +1,5 @@
|
||||
from datetime import datetime
|
||||
from typing import Any
|
||||
|
||||
from ninja import Schema
|
||||
|
||||
@@ -15,7 +16,18 @@ class TicketIn(Schema):
|
||||
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):
|
||||
@@ -27,20 +39,27 @@ class TicketUpdateIn(Schema):
|
||||
problem_object: str | None = None
|
||||
submitter_name: str | None = None
|
||||
submitter_org: str | None = None
|
||||
resolution: str | None = None
|
||||
is_resolved: bool | None = None
|
||||
replied_to_customer: bool | 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 = ""
|
||||
is_resolved: bool | None = None
|
||||
replied_to_customer: bool | None = None
|
||||
|
||||
|
||||
@@ -70,17 +89,36 @@ class TicketOut(Schema):
|
||||
problem_object: str
|
||||
submitter_name: str
|
||||
submitter_org: str
|
||||
ai_solution: 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
|
||||
|
||||
@@ -100,6 +138,9 @@ class TicketEventOut(Schema):
|
||||
to_value: dict
|
||||
remark: str
|
||||
operator: TicketUserOut | None = None
|
||||
source: str
|
||||
agent_run_id: int | None
|
||||
metadata: dict[str, Any]
|
||||
created_at: datetime
|
||||
|
||||
|
||||
@@ -114,6 +155,33 @@ class TicketCommentOut(Schema):
|
||||
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
|
||||
|
||||
|
||||
@@ -132,4 +200,243 @@ class TicketAttachmentOut(Schema):
|
||||
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
|
||||
|
||||
Reference in New Issue
Block a user