arm-ka-docs/repo-templates/scan-gateway.CLAUDE.md
Andrey Epifancev a2811ebc52 docs(context): Срез 3a — правки по ревью (OQ-149, устаревшие описания эмулятора, locator, решения №28–35)
- 07-open-questions: OQ-149 переписан (пустой код у «БАЛАНС»/«Выручка», предупреждения №29, `|` экранирован), новый OQ-152
  (повтор кода 2410 в aep_6), уточнены OQ-137 и OQ-144 (Input)
- 05-domain-rules: §11 locator `file:<имя json>;table:<i>`; §11.1 п. 2 (длина даты №31), п. 4 (предупреждения о пропущенных
  строках), п. 7 (все точки удаляются, Money и confidence №30), п. 8 (ИНН неуверенно), п. 9 (№28), п. 10 (редакция не определена)
- 03-architecture: формулировка про `.part`; 06-test-data, dev/README (сценарии 2/2а), repo-templates/scan-gateway.CLAUDE.md —
  раскладка `<job_id>.<ext>` и пары по sha256
- dev/compose, qa-guide §6.8/§8 (ожидаемые предупреждения по эталонам, OQ-151), 09-delivery-plan (статус 3a)

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012vJkmBGKKqMoEMzvsXG3y2
2026-10-07 03:49:05 +04:00

1.8 KiB
Raw Blame History

CLAUDE.md — scan-gateway

Общий контекст системы — ../CLAUDE.md и ../docs/. Этот файл — только про этот сервис.

Что это

Адаптер внешней ИС Сканирование (Content AI) для PDF/PNG/JPG: положить файл во «Входящие» как <job_id>.<ext> (временный .part — в Tmp), забрать все Исходящие/<job_id>/*.json (по одному json на документ), сохранить склеенный сырой ответ в S3 raw/{job_id}.json (в БД не регистрируется), очистить горячую папку (только при SCAN_CLEANUP=true), нормализовать в ../docs/contracts/recognition-result.schema.json (statementDocument), опубликовать recognition.result. Таймаут 5 мин → TIMEOUT. Нет доступа к БД.

Правила

  • Нормализация по фактическим ответам ../fixtures/ocr/aep_*.json, а не по ТЗ (OQ-13, OQ-14): confidence → 0–100, поля организации/даты — по тому, что реально приходит.
  • Один PDF может содержать ББ и ОФР → два документа в результате (по одному на таблицу ответа).
  • Dev-режим: эмулятор ИС Сканирование (python -m src.scan_emulator) ищет пару PDF + JSON по sha256 содержимого входящего файла; имя файла на выбор пары не влияет. Промах — набор SCAN_EMULATOR_DEFAULT, иначе INVALID_DOCUMENT.

Соглашения шаблона