docs: докстринги контракта с точки зрения tabular-parser, паритет subjects с arm-core (T6.1-T6.3)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
parent
6491fdd538
commit
67a4311150
@ -1,8 +1,9 @@
|
||||
"""Запрос распознавания файла (arm-core → tabular-parser / scan-gateway): `recognition-request.schema.json` v1.0.
|
||||
"""Запрос распознавания файла: `recognition-request.schema.json` v1.0.
|
||||
|
||||
Формируется из `recognition_job ⋈ stored_file ⋈ s3_object` (spec recognition-job-exchange); один файл — один job.
|
||||
Subject — по `pipeline` (`request_subject`); заголовок `Nats-Msg-Id = <job_id>:<attempt>`
|
||||
(`request_msg_id`) — не поле тела.
|
||||
tabular-parser принимает этот запрос из `recognition.tabular.request` (производитель — arm-core); один файл — один job.
|
||||
Модель намеренно совпадает с копией в arm-core (контракт — `../docs/contracts`, обзор —
|
||||
`docs/context/03-architecture.md`). Subject — по `pipeline` (`request_subject`); заголовок
|
||||
`Nats-Msg-Id = <job_id>:<attempt>` (`request_msg_id`) — не поле тела.
|
||||
"""
|
||||
|
||||
from typing import Annotated, Literal
|
||||
|
||||
@ -1,7 +1,9 @@
|
||||
"""Файл результата в S3 (`results/{file_id}/{job_id}/result.json`): `recognition-result.schema.json` v1.0.
|
||||
|
||||
Один файл → один job → N документов (ОСВ по счёту / ББ / ОФР / прочее). В Срезе 0 — модели и валидация примеров;
|
||||
маппинг в таблицы — Срез 2. Суммы — `Decimal` в модели и строка в JSON (`"106311116.46"`, без `float`).
|
||||
tabular-parser формирует этот файл по запросу; один файл → один job → N документов (ОСВ по счёту / ББ / ОФР / прочее).
|
||||
Модель намеренно совпадает с копией в arm-core (контракт — `../docs/contracts`, обзор —
|
||||
`docs/context/03-architecture.md`).
|
||||
Суммы — `Decimal` в модели и строка в JSON (`"106311116.46"`, без `float`).
|
||||
Нормализация счетов, резолв контрагентов и проверки — в arm-core, не здесь.
|
||||
"""
|
||||
|
||||
|
||||
@ -3,6 +3,10 @@
|
||||
Источник: `docs/context/03-architecture.md`, «Контракт обмена через NATS»; схема recognition-request
|
||||
(`Nats-Msg-Id = <job_id>:<attempt>`) и recognition-result-message
|
||||
(`ack:<job_id>:<attempt>` / `result:<job_id>:<attempt>`).
|
||||
|
||||
Модуль намеренно совпадает с копией в arm-core. `request_subject`, `REQUEST_SUBJECTS`, `IMAGE_REQUEST_SUBJECT` и
|
||||
значение `"image"` в `Pipeline` tabular-parser не использует (он слушает только `tabular`) — это сознательный паритет
|
||||
с arm-core, а не мёртвый код.
|
||||
"""
|
||||
|
||||
import uuid
|
||||
|
||||
@ -1,5 +1,6 @@
|
||||
"""Контракт обмена с сервисами распознавания v1.0 (spec recognition-contract, design D-7).
|
||||
"""Контракт обмена с сервисами распознавания v1.0.
|
||||
|
||||
Спека сервиса — `tabular-recognition-service`; change `recognition-contract` лежит в `../docs`.
|
||||
Быстрые тесты без БД: вендоренные схемы `api/contracts/` идентичны `../docs/contracts/`; каждый пример проходит и
|
||||
JSON Schema, и pydantic-модель (с round-trip); модели и схемы выносят один и тот же вердикт на негативных кейсах.
|
||||
"""
|
||||
@ -598,7 +599,7 @@ def test_python_float_amount_is_rejected_with_clear_error() -> None:
|
||||
|
||||
|
||||
def test_decimal_object_input_is_accepted_and_dumped_as_string() -> None:
|
||||
"""Для кода, собирающего результат из `Decimal` (тесты, будущие производители): объект `Decimal` принимается."""
|
||||
"""Для кода, собирающего результат из `Decimal` (тесты, парсер при сборке результата): `Decimal` принимается."""
|
||||
payload = _example("result-statement-minimal.json")
|
||||
payload["documents"][0]["lines"][0]["values"][0]["amount"] = Decimal("1234.50")
|
||||
result = RecognitionResult.model_validate(payload)
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user