# -*- coding: utf-8 -*- # hub/ticket/application/ticket_application_api.py """Публичный application API модуля Ticket.""" from __future__ import annotations from typing import Any, Mapping, Protocol, Sequence from domain import TicketDocumentSnapshot, TicketTaskSnapshot class TicketApplicationApi(Protocol): """Контракт orchestration-слоя между UI, state и сервисами.""" def start(self) -> None: """Инициализировать application-слой Ticket.""" def stop(self) -> None: """Остановить активные операции и освободить ресурсы.""" def list_tasks(self) -> Sequence[TicketTaskSnapshot]: """Вернуть текущий срез задач для UI.""" def list_active_tasks(self) -> Sequence[TicketTaskSnapshot]: """Вернуть активные задачи для UI.""" def list_archived_tasks(self) -> Sequence[TicketTaskSnapshot]: """Вернуть архивные задачи для UI.""" def get_task(self, task_id: int) -> TicketTaskSnapshot | None: """Вернуть задачу по идентификатору.""" def handle_task_action( self, raw_action: Mapping[str, Any], ) -> TicketTaskSnapshot | None: """Обработать входящее действие от аппаратного или mock-шлюза.""" def set_active_view(self, view_name: str) -> None: """Переключить активное представление Ticket.""" def assign_specialist( self, task_id: int, specialist_name: str, ) -> TicketTaskSnapshot | None: """Назначить специалиста на задачу.""" def list_specialists(self) -> Sequence[str]: """Вернуть список доступных специалистов.""" def sign_report( self, task_id: int, report_type: str, ) -> TicketTaskSnapshot | None: """Подписать диагностический или ремонтный отчёт.""" def sign_acceptance_report(self, task_id: int) -> TicketTaskSnapshot | None: """Подписать акт приёмки.""" def archive_task(self, task_id: int) -> TicketTaskSnapshot | None: """Перевести задачу в архив.""" def refuse_task( self, task_id: int, refusal_reason: str, ) -> TicketTaskSnapshot | None: """Перевести задачу в отказ.""" def create_diagnostic_report( self, task_id: int, initial_cause: str, actual_cause: str, ) -> TicketDocumentSnapshot: """Создать и подписать диагностический отчёт.""" def create_repair_report( self, task_id: int, work_done: str, used_parts: str, recommendations: str, ) -> TicketDocumentSnapshot: """Создать и подписать ремонтный отчёт.""" def create_acceptance_report( self, task_id: int, work_description: str, executor_signature: str, customer_signature: str, ) -> TicketDocumentSnapshot: """Создать и подписать акт приёмки.""" def list_documents( self, document_type: str | None = None, ) -> Sequence[TicketDocumentSnapshot]: """Вернуть список документов Ticket.""" def can_advance_to_confirmation(self, task_id: int) -> bool: """Проверить готовность задачи к переходу в подтверждение.""" def can_advance_to_completed(self, task_id: int) -> bool: """Проверить готовность задачи к переходу в выполненные.""" def get_active_view(self) -> str: """Вернуть имя активного внутреннего представления Ticket.""" def get_gateway_status(self): """Вернуть последний известный статус hardware gateway."""