docs(context): Срез 3a — раскладка горячих папок, §11.1 п. 6/9/10, OQ по редакциям и очистке, compose (#46) #47

Merged
aep merged 2 commits from feat/46-slice-3a-docs into main 2026-10-07 04:04:44 +03:00
Owner

Closes #46

Сопровождение Среза 3a (scan-gateway): горячие папки как у FileWorker, нормализатор OCR по §11.1.

Связанные работы:

  • scan-gateway: issue RSHB/arm-scan-gateway#6 (ветка feat/6-slice-3a-ocr-normalizer); PR scan-gateway: ссылка будет добавлена комментарием
  • fixtures: issue RSHB/arm-ka-fixtures#12 (ветка feat/12-ocr-golden) — эталоны ocr/expected_normalize/

Что изменено:

  • 03-architecture.md — .part остаётся в Tmp, очистка под SCAN_CLEANUP (по умолчанию выключена), OcrNormalizer, эмулятор по sha256; уточнение «Дополнено 06.10.2026».
  • 05-domain-rules.md §11.1 — п. 1 (двойники только для дат), п. 4 (повтор кода; строки с мусорным/пустым кодом пропускаются), п. 6 (справочник api/rules/statement_lines.yaml scan-gateway с редакциями), п. 7 (string_value, скобки }, тире), п. 9 (BACKEND_PARSING_ERROR на таблицу, RECOGNITION_FAILED, ошибочный файл-сосед), новый п. 10 «Редакции форм».
  • 07-open-questions.md — OQ-137 уточнён, OQ-12 и OQ-139 дополнены ссылками, новые OQ-144…OQ-151.
  • 09-delivery-plan.md — Срез 3 разделён на 3a (scan-gateway) и 3b (arm-core).
  • dev/docker-compose.yml, dev/qa-guide.md (новый §6.8) — SCAN_CLEANUP, SCAN_EMULATOR_DEFAULT, имена <uuid>.<ext> и пары по sha256, какие PDF загружать.

Проверка: make validate-contracts — 10 примеров, всё валидно; docker compose config для compose проходит.

Rulings I made

  • R-1: новых OQ восемь (OQ-144…OQ-151), а не четыре из плана: к четырём плановым добавлены тире как прочерк (решение №20 спеки 3a), строки с нечисловым/пустым кодом, состав fsbu4, эмулятор без JSON-пары. OQ-144 — права на SMB, OQ-145 — редакция в контракте (MINOR 1.3), OQ-146 — словари по редакциям (расширяет OQ-12 и OQ-139), OQ-147 — скобка }.
  • R-2: §11.1 п. 4 описывает пропуск строк с нечисловым/пустым кодом и предупреждения о них (решение №29 спеки 3a, добавлено после ревью; в первой редакции PR записывалось «молча»); восстановление строк — OQ-149.
  • R-3: ошибочный файл-сосед при успешном понижает статус до needs_check (решение №28), §11.1 п. 9.
  • R-4: в qa-guide.md раздела про PDF не было — добавлен §6.8; проверка PDF-пути описана как отдельная от ядра (маппинг PDF в формы — Срез 3b), ссылка на «Полный круг против compose и эмулятора» в README scan-gateway.
  • R-5: dev/.env.example не менялся — в нём нет переменных SCAN_* сервиса, только порт хоста SCAN_GATEWAY_PORT; настройки сервисов задаёт compose.
  • R-6: в п. 7 §11.1 признак is_recognized для скобок описан по решению №13 (до постановки минуса); поведение источника, где любая сумма в скобках была false, отмечено как отличие.
  • R-8 (правки по ревью, коммит a2811eb): OQ-152 — повтор кода 2410 в aep_6 (остаётся первая строка, решение №34); locator PDF-пути — file:<имя json>;table:<i>; ожидаемые предупреждения aep_3/aep_6 в qa-guide сверены с эталонами fixtures (5dcfaf8); обновлены устаревшие описания эмулятора (06-test-data.md, dev/README.md, repo-templates/scan-gateway.CLAUDE.md).
  • R-7: поле для редакции в контракте в OQ-145 названо нейтрально («необязательное поле statementDocument»), имя не придумывалось.

Follow-up (не в этом PR)

openspec/specs/dev-environment/spec.md (строки 37–46) всё ещё описывает прежнюю схему эмулятора (имя UUID_<имя>); его меняют через архив change, не напрямую.

Порядок мержа

docs и fixtures — раньше scan-gateway или вместе с ним. Мерж — только по явной команде.

🤖 Generated with Claude Code

https://claude.ai/code/session_012vJkmBGKKqMoEMzvsXG3y2

Closes #46 Сопровождение Среза 3a (scan-gateway): горячие папки как у FileWorker, нормализатор OCR по §11.1. Связанные работы: - scan-gateway: issue RSHB/arm-scan-gateway#6 (ветка `feat/6-slice-3a-ocr-normalizer`); PR scan-gateway: ссылка будет добавлена комментарием - fixtures: issue RSHB/arm-ka-fixtures#12 (ветка `feat/12-ocr-golden`) — эталоны `ocr/expected_normalize/` Что изменено: - `03-architecture.md` — `.part` остаётся в `Tmp`, очистка под `SCAN_CLEANUP` (по умолчанию выключена), `OcrNormalizer`, эмулятор по sha256; уточнение «Дополнено 06.10.2026». - `05-domain-rules.md` §11.1 — п. 1 (двойники только для дат), п. 4 (повтор кода; строки с мусорным/пустым кодом пропускаются), п. 6 (справочник `api/rules/statement_lines.yaml` scan-gateway с редакциями), п. 7 (`string_value`, скобки `}`, тире), п. 9 (`BACKEND_PARSING_ERROR` на таблицу, `RECOGNITION_FAILED`, ошибочный файл-сосед), новый п. 10 «Редакции форм». - `07-open-questions.md` — OQ-137 уточнён, OQ-12 и OQ-139 дополнены ссылками, новые OQ-144…OQ-151. - `09-delivery-plan.md` — Срез 3 разделён на 3a (scan-gateway) и 3b (arm-core). - `dev/docker-compose.yml`, `dev/qa-guide.md` (новый §6.8) — `SCAN_CLEANUP`, `SCAN_EMULATOR_DEFAULT`, имена `<uuid>.<ext>` и пары по sha256, какие PDF загружать. Проверка: `make validate-contracts` — 10 примеров, всё валидно; `docker compose config` для compose проходит. ## Rulings I made - R-1: новых OQ восемь (OQ-144…OQ-151), а не четыре из плана: к четырём плановым добавлены тире как прочерк (решение №20 спеки 3a), строки с нечисловым/пустым кодом, состав `fsbu4`, эмулятор без JSON-пары. OQ-144 — права на SMB, OQ-145 — редакция в контракте (MINOR 1.3), OQ-146 — словари по редакциям (расширяет OQ-12 и OQ-139), OQ-147 — скобка `}`. - R-2: §11.1 п. 4 описывает пропуск строк с нечисловым/пустым кодом и предупреждения о них (решение №29 спеки 3a, добавлено после ревью; в первой редакции PR записывалось «молча»); восстановление строк — OQ-149. - R-3: ошибочный файл-сосед при успешном понижает статус до `needs_check` (решение №28), §11.1 п. 9. - R-4: в `qa-guide.md` раздела про PDF не было — добавлен §6.8; проверка PDF-пути описана как отдельная от ядра (маппинг PDF в формы — Срез 3b), ссылка на «Полный круг против compose и эмулятора» в README scan-gateway. - R-5: `dev/.env.example` не менялся — в нём нет переменных `SCAN_*` сервиса, только порт хоста `SCAN_GATEWAY_PORT`; настройки сервисов задаёт compose. - R-6: в п. 7 §11.1 признак `is_recognized` для скобок описан по решению №13 (до постановки минуса); поведение источника, где любая сумма в скобках была `false`, отмечено как отличие. - R-8 (правки по ревью, коммит a2811eb): OQ-152 — повтор кода 2410 в `aep_6` (остаётся первая строка, решение №34); `locator` PDF-пути — `file:<имя json>;table:<i>`; ожидаемые предупреждения `aep_3`/`aep_6` в qa-guide сверены с эталонами fixtures (5dcfaf8); обновлены устаревшие описания эмулятора (`06-test-data.md`, `dev/README.md`, `repo-templates/scan-gateway.CLAUDE.md`). - R-7: поле для редакции в контракте в OQ-145 названо нейтрально («необязательное поле `statementDocument`»), имя не придумывалось. ## Follow-up (не в этом PR) `openspec/specs/dev-environment/spec.md` (строки 37–46) всё ещё описывает прежнюю схему эмулятора (имя `UUID_<имя>`); его меняют через архив change, не напрямую. ## Порядок мержа docs и fixtures — раньше scan-gateway или вместе с ним. Мерж — только по явной команде. 🤖 Generated with [Claude Code](https://claude.com/claude-code) https://claude.ai/code/session_012vJkmBGKKqMoEMzvsXG3y2
aep added 1 commit 2026-10-07 01:55:31 +03:00
- 03-architecture: scan-gateway — .part остаётся в Tmp, очистка под SCAN_CLEANUP, OcrNormalizer, эмулятор по sha256
- 05-domain-rules §11.1: п. 1 (двойники только для дат), п. 4 (повтор кода, пропуск строк с мусорным кодом),
  п. 6 (свой statement_lines.yaml с редакциями), п. 7 (string_value, скобки, тире), п. 9 (BACKEND_PARSING_ERROR на таблицу),
  новый п. 10 «Редакции форм»
- 07-open-questions: OQ-137 уточнён; OQ-12, OQ-139 дополнены; новые OQ-144…OQ-151
- 09-delivery-plan: Срез 3 разделён на 3a (scan-gateway) и 3b (arm-core)
- dev: SCAN_CLEANUP и SCAN_EMULATOR_DEFAULT в compose, комментарий про <uuid>.<ext> и пары по sha256; qa-guide §6.8

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012vJkmBGKKqMoEMzvsXG3y2
aep added 1 commit 2026-10-07 02:49:10 +03:00
- 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
Author
Owner

PR scan-gateway: RSHB/arm-scan-gateway#8; PR fixtures: RSHB/arm-ka-fixtures#13. Порядок мержа: этот PR и fixtures #13 — раньше или вместе с scan-gateway #8.

PR scan-gateway: https://git.aepif.ru/RSHB/arm-scan-gateway/pulls/8; PR fixtures: https://git.aepif.ru/RSHB/arm-ka-fixtures/pulls/13. Порядок мержа: этот PR и fixtures #13 — раньше или вместе с scan-gateway #8.
aep merged commit 3a5801d67c into main 2026-10-07 04:04:44 +03:00
Sign in to join this conversation.
No Reviewers
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: RSHB/arm-ka-docs#47
No description provided.