"""Запрос распознавания файла (arm-core → tabular-parser / scan-gateway): `recognition-request.schema.json` v1.0. Формируется из `recognition_job ⋈ stored_file ⋈ s3_object` (spec recognition-job-exchange); один файл — один job. Subject — по `pipeline` (`request_subject`); заголовок `Nats-Msg-Id = :` (`request_msg_id`) — не поле тела. """ from typing import Annotated, Literal from pydantic import Field from src.contract.common import ContractModel, ContractUUID, IntLike, NonEmptyStr, S3Ref, SchemaVersion, UtcDatetime from src.contract.subjects import Pipeline FileType = Literal["XLS", "XLSX", "XLSB", "PDF", "PNG", "JPG"] class RecognitionRequest(ContractModel): schema_version: SchemaVersion job_id: ContractUUID # recognition_job.id file_id: ContractUUID # stored_file.id pipeline: Pipeline file_type: FileType original_name: NonEmptyStr # имя файла, как загрузил пользователь s3: S3Ref # исходный файл в роли uploads reply_deadline: UtcDatetime # срок ответа, UTC attempt: Annotated[IntLike, Field(ge=1)] # номер попытки, с 1