83 Commits

Author SHA1 Message Date
aep
f9c757ae97 Merge pull request 'Срез 1: DBML v5.14, §13 импорт из ЕЦП CRM, §10.1 видимость, OQ-86…91' (#7) from feat/6-slice-1-directories into main
Reviewed-on: #7
2026-10-05 09:59:29 +03:00
Andrey Epifancev
b677ee0b15 OQ-92…OQ-97: вопросы из реализации Среза 1 (импорт ЕЦП, часовой пояс effective_date, право DIRECTORY_DELETE)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012vJkmBGKKqMoEMzvsXG3y2
2026-10-05 02:43:13 +04:00
Andrey Epifancev
0826be0cad Срез 1: DBML v5.14, §13 импорт из ЕЦП CRM, §10.1 видимость, OQ-86…91, change slice-1-directories
- data-model-v5.14.dbml: related_group_member.kind + partial unique (legal_entity_id, kind) WHERE is_current
  (ЮЛ одновременно в одной ГСК и одной ГСЗ — решение владельца 04.10.2026), audit_action + LEGAL_ENTITY_CHANGE,
  USER_CHANGE; КПП не вводится.
- 05-domain-rules.md: §13 правила импорта выгрузки ЕЦП (формат, построчные коды, транзакция, след, ручные операции),
  §10.1 видимость справочников по филиалу без кода роли.
- 07-open-questions.md: OQ-31/32 закрыты, OQ-25 уточнён по выгрузке, добавлены OQ-86…OQ-91.
- source/biq/ecp-export-lagal-entity.xlsx — первоисточник формата (добавлен владельцем).
- openspec/changes/slice-1-directories: proposal, design, tasks (skip_specs).

Issue: RSHB/arm-ka-docs#6

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012vJkmBGKKqMoEMzvsXG3y2
2026-10-04 20:22:26 +04:00
aep
f276489760 Merge pull request 'chore(openspec): архив change slice-0-skeleton' (#4) from chore/archive-slice-0-skeleton into main
Reviewed-on: #4
2026-10-04 18:48:56 +03:00
Andrey Epifancev
49d9eca082 chore(openspec): архив change slice-0-skeleton
Срез 0 реализован и влит (PR #3), change перенесён в openspec/changes/archive, спеки — в openspec/specs.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012vJkmBGKKqMoEMzvsXG3y2
2026-10-04 19:44:29 +04:00
aep
8ee998d189 Merge pull request 'Срез 0: контракт v1.0, compose-окружение (профиль services), проверки качества, OQ-48…OQ-84' (#3) from feat/1-slice-0-skeleton into main
Reviewed-on: #3
2026-10-04 18:39:29 +03:00
Andrey Epifancev
f83052420f docs: dev/README — проверка окружения под склейку ответов ИС (aep_3, aep_6, aep_5)
Раздел «Проверка окружения» приведён в соответствие с доработанным scan-gateway (склейка всех *.json каталога ответа
в raw/{job_id}.json, ошибочные файлы набора в metrics.warnings), по результатам сквозной проверки Task 6 (04.10.2026):
- сценарий 2: размер и формат raw/ (`{"job_id", "files": [...]}`), лог эмулятора с каталогом набора, processing ~10 с
  (задержка эмулятора + SCAN_POLL_SECONDS + SCAN_SETTLE_SECONDS), абзац про фикстуры ИС (успешные ответы есть);
- добавлен сценарий 2а: aep_3 / aep_6 -> успешный ответ ИС -> NOT_IMPLEMENTED, metrics.warnings про aep_3_ofr.json;
- абзац про прогон рецепта: проверены оба пути вставки legal_entity (чистая БД и on conflict);
- «не покрывает»: нормализатор шлюза Среза 0 даёт NOT_IMPLEMENTED, у ошибок scan-gateway в metrics только warnings,
  оговорка, что `down -v` удаляет общие тома postgres-data/minio-data всех worktree;
- dev/docker-compose.yml: комментарий про фикстуры ответов ИС — набор <имя>.json + <имя>_*.json (поведение не менялось).

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-04 16:20:31 +04:00
Andrey Epifancev
e6ba1e0e30 docs: §11 и OQ-77 — убрано допущение о сегментах таблицы (поправка человека 04.10.2026)
Разбиение одной формы на несколько таблиц в образцах не встречалось; наблюдается только несколько таблиц разных
форм в одном json (баланс + ОФР). Нештатный случай (повтор label) — NEEDS_CHECK, правило — Срез 3.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012vJkmBGKKqMoEMzvsXG3y2
2026-10-04 14:08:43 +04:00
Andrey Epifancev
3c1d1d1261 docs: §11 — таблицы и документы ИС не взаимно однозначны (поправка человека 04.10.2026)
Тип документа задаёт label таблицы; несколько таблиц одного типа (баланс по страницам) — части одного документа
(уникальный индекс document в DBML: один ББ и один ОФР на файл); в одном json может быть несколько таблиц.
Допущение вынесено в OQ-77 для подтверждения на реальном ответе.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012vJkmBGKKqMoEMzvsXG3y2
2026-10-04 13:38:18 +04:00
Andrey Epifancev
f809cc936b docs: ответы человека 04.10.2026 — формат ответа ИС по aep_3/aep_6, OQ-13/14/56/76–79, JetStream как вопрос к платформе
§11 05-domain-rules.md переписан по реальным ответам ИС: data_ocr — объект, table_structure — список таблиц,
успех — error.code == "", в каталоге ответа несколько json (склейка), confidence 0–100. OQ-13/14/77/78/79 закрыты или
уточнены, OQ-56 — осознанный техдолг, OQ-76 — частично (образцы добавлены), новый OQ-85 — возможность JetStream
на платформе (проверить позже). OQ-73 остаётся открытым.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012vJkmBGKKqMoEMzvsXG3y2
2026-10-04 13:33:55 +04:00
Andrey Epifancev
b2f8aaa17e docs: .env.example — scan-gateway тоже отвергает OPENBAO__DATABASE__* (N-1 финального ревью)
В OpenBAOSettings scan-gateway нет поля DATABASE (extra_forbidden), поэтому общий dev/.env.example
годится только arm-core как есть. Исправлены комментарий в .env.example, раздел dev/README.md,
решение №44 в design.md и OQ-84.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012vJkmBGKKqMoEMzvsXG3y2
2026-10-04 07:26:37 +04:00
Andrey Epifancev
1568d49cd9 chore: отметить задачу 6.3 выполненной
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012vJkmBGKKqMoEMzvsXG3y2
2026-10-04 07:24:35 +04:00
Andrey Epifancev
5456a7df3b docs(context): 03-architecture — ack публикуется на корректный запрос
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-04 07:17:53 +04:00
Andrey Epifancev
5674097267 docs(dev): причина не запускать make -j — параллельные пререквизиты check, а не check-full
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-04 07:17:53 +04:00
Andrey Epifancev
bf893959df docs(openspec): recognition-contract — источник attempt только из тела, расхождение сервисов в THEN (OQ-71)
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-04 07:17:53 +04:00
Andrey Epifancev
050f59a384 docs: сценарий venv против compose не проверен — design #43/#44, OQ-84, README и .env.example без устаревшей обязательности SMB
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-04 07:17:21 +04:00
Andrey Epifancev
5630ffadb7 docs(context): реестр OQ — ссылки на отчёты задач заменены маркерами находок
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-04 07:16:10 +04:00
Andrey Epifancev
cdfac6c74b docs: 06-test-data — поиск пары эмулятором, design #36 — паузы по сервисам
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-04 07:03:47 +04:00
Andrey Epifancev
172d30a8b1 docs(openspec): спека recognition-contract — ack только на корректный запрос, источник attempt
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-04 07:03:35 +04:00
Andrey Epifancev
f928982058 docs(dev): README — зависимости проверки контракта (jsonschema, без rfc3339-validator)
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-04 07:03:23 +04:00
Andrey Epifancev
6000cab892 docs(dev): README — венв-черновик без ссылок на 5.4, legal_entity в проверке окружения
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-04 07:03:13 +04:00
Andrey Epifancev
04cdbd6cc4 docs(openspec): design.md — замыкающий | у решений 24–25
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-04 07:02:56 +04:00
Andrey Epifancev
c7c03616ce docs(dev): checks.md — .DEFAULT_GOAL в эталонном фрагменте, --profile services в down
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-04 07:02:41 +04:00
Andrey Epifancev
c32c904197 chore: отметить задачу 6.2 выполненной
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012vJkmBGKKqMoEMzvsXG3y2
2026-10-04 07:02:15 +04:00
Andrey Epifancev
55118120ad docs(openspec): design.md — решения 39–42 (рулинги задачи 6.2)
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-04 06:53:00 +04:00
Andrey Epifancev
f7c8c6c883 docs(context): 07-open-questions — OQ-48…OQ-83 по итогам Среза 0, статусы OQ-45/46/47
Вопросы из open-questions-proposal.md трёх сервисов (с дедупликацией), кандидаты
DBML v5.14 (только как строки реестра) и находки сквозной проверки окружения.
У каждой строки — репозиторий и маркер источника. OQ-45/46/47 переведены в
«допущение принято и применено» с фактами seed и ORM.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-04 06:53:00 +04:00
Andrey Epifancev
f8111cc383 chore: отметить задачу 6.1 выполненной
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012vJkmBGKKqMoEMzvsXG3y2
2026-10-04 06:49:08 +04:00
Andrey Epifancev
dc64d9a214 docs(openspec): design.md — решения 34–38 (рулинги задачи 6.1)
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-04 06:41:55 +04:00
Andrey Epifancev
3e1f39cd9e docs(context): 03-architecture — SCHEMA_MISMATCH без ack, нечитаемый запрос без ответа, PUBLISH_RETRIES, примеры контракта
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-04 06:41:29 +04:00
Andrey Epifancev
2423854f27 docs(openspec): recognition-contract — SCHEMA_MISMATCH без ack, нечитаемый запрос, повторы публикации, примеры как иллюстрации
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-04 06:41:29 +04:00
Andrey Epifancev
a977ab7792 docs(context): 09-delivery-plan, Срез 0 — ссылка на dev/README и сквозную проверку окружения
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-04 06:40:35 +04:00
Andrey Epifancev
bf0a0aef7b docs(context): 06-test-data §6 — seed продукта в arm-core/api/seed, directories только для тестовых ЮЛ/ГК
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-04 06:40:26 +04:00
Andrey Epifancev
a11eba028f chore: отметить задачу 5.4 выполненной
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012vJkmBGKKqMoEMzvsXG3y2
2026-10-04 06:38:58 +04:00
Andrey Epifancev
29e74b875f docs(openspec): design.md — решения 30–33 (сквозная проверка окружения)
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012vJkmBGKKqMoEMzvsXG3y2
2026-10-04 06:17:45 +04:00
Andrey Epifancev
2e2e50accb docs(dev): README — раздел «Проверка окружения» со сквозным сценарием
Помощники dpsql/dmc/new_job/poll и фактический вывод трёх сценариев на
профиле services (2026-10-04): tabular → error/NOT_IMPLEMENTED; image →
эмулятор ИС → error/INVALID_DOCUMENT (ответ-ошибка из фикстуры aep_5) и
raw/{job_id}.json в MinIO; tabular-parser остановлен → 3 повтора через 30 с →
dlq/NO_ACK (~120 с). Что сквозная проверка Среза 0 не покрывает.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012vJkmBGKKqMoEMzvsXG3y2
2026-10-04 06:17:08 +04:00
Andrey Epifancev
e98a9239bf docs(dev): README — замечания ревью задачи 5.3 (T3.3–T3.6)
- T3.3: риск общих queue group подтверждён чтением тестов tabular-parser и
  scan-gateway (test_roundtrip, боевые *.request); тесты arm-core изолированы
  (временная БД, уникальный subject результатов); команда проверки подписчиков.
- T3.4: «Остаточные тома» — down -v только с --profile services.
- T3.5: GET / отвечает 307 на // и затем 404.
- T3.6: up -d --build <сервис> пересоздаёт сервис и зависимости: arm-core-migrate
  пересоздаётся вместе с arm-core, scan-emulator со scan-gateway — нет (проверено).

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012vJkmBGKKqMoEMzvsXG3y2
2026-10-04 06:16:59 +04:00
Andrey Epifancev
e705080e55 chore: отметить задачу 5.3 выполненной
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012vJkmBGKKqMoEMzvsXG3y2
2026-10-04 06:01:46 +04:00
Andrey Epifancev
f6e14c2195 docs(openspec): design.md — решения 26–29 (профиль services в compose)
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012vJkmBGKKqMoEMzvsXG3y2
2026-10-04 05:44:05 +04:00
Andrey Epifancev
f1b648e7b7 docs(dev): README и .env.example — профиль services, порты хоста и контейнера, коды --wait
Порты хоста ARM_CORE_PORT/TABULAR_PARSER_PORT/SCAN_GATEWAY_PORT (8000/8001/8002, в контейнере 8000);
раздел «Профиль services»: команды, таблица портов, порядок старта, фактический вывод healthcheck,
коды возврата up -d --wait (в т.ч. scan-gateway scan-emulator — 0), пересборка; сброс только с
--profile services; предупреждение об интеграционных тестах при поднятом профиле.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012vJkmBGKKqMoEMzvsXG3y2
2026-10-04 05:43:41 +04:00
Andrey Epifancev
4171ecc410 feat(dev): профиль services в docker-compose — arm-core, tabular-parser, scan-gateway, scan-emulator
Сервисы собираются из соседних репозиториев (../../<repo>), образы <repo>:dev; порты хоста 8000/8001/8002
на ${BIND_ADDR:-127.0.0.1}, внутри контейнера все слушают 8000. Одноразовый arm-core-migrate выполняет
alembic upgrade head и seed --dev до старта arm-core. Фрагмент scan-gateway/scan-emulator взят из
open-questions-proposal.md scan-gateway; образ каждого репозитория собирается одним сервисом
(arm-core, scan-gateway), второй использует тег с pull_policy: never.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012vJkmBGKKqMoEMzvsXG3y2
2026-10-04 05:42:00 +04:00
Andrey Epifancev
22d7c10bb2 chore: отметить задачу 4.2 выполненной
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012vJkmBGKKqMoEMzvsXG3y2
2026-10-04 05:33:15 +04:00
Andrey Epifancev
9acd2f90c4 docs(dev): checks.md и README описывают Makefile.common; design.md — решения 24–25
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012vJkmBGKKqMoEMzvsXG3y2
2026-10-04 05:27:21 +04:00
Andrey Epifancev
792042ffad docs(dev): checks.md — замечания ревью задачи 4.1 (T1.1–T1.4)
Уточнены: fixtures только в arm-core, mypy scripts у arm-core, формулировка
про инфраструктуру compose и «одинаковую семантику» целей.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012vJkmBGKKqMoEMzvsXG3y2
2026-10-04 05:27:00 +04:00
Andrey Epifancev
b08df040e9 build(dev): Makefile.common — эталонный фрагмент общих целей сервисов
Цели venv, lint, test, test-integration, check, docker-build, check-full, up
по эталону scan-gateway; различия сервисов вынесены в переменные
(MYPY_PATHS, IMAGE, COMPOSE_*, CHECK_FULL_STEPS).

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012vJkmBGKKqMoEMzvsXG3y2
2026-10-04 05:26:51 +04:00
Andrey Epifancev
69fc0cc581 chore: отметить задачу 4.1 выполненной
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012vJkmBGKKqMoEMzvsXG3y2
2026-10-04 05:25:21 +04:00
Andrey Epifancev
eaf2489e98 docs(openspec): design.md — решения 21–23 (Makefile docs, эталон целей, README dev); checks.md — уточнение про сеть
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-04 05:20:53 +04:00
Andrey Epifancev
b6e2be9f87 docs(dev): README ссылается на checks.md, убрано устаревшее «Makefile только у arm-core»
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-04 05:20:41 +04:00
Andrey Epifancev
401cdbc362 docs(dev): checks.md — цели make, порядок проверок перед PR, пропуск без docs/fixtures
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-04 05:20:27 +04:00
Andrey Epifancev
039bb4ed7b build: Makefile репозитория docs с целью check (валидация контракта и OpenSpec)
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-04 05:19:39 +04:00
Andrey Epifancev
5f2be96e11 fix(dev): healthcheck PostgreSQL по TCP, порты на 127.0.0.1, пароли MinIO из .env в README
- pg_isready с -h 127.0.0.1: временный сервер initdb слушает только сокет (M-3)
- README: mc и psql берут учётные данные из переменных окружения контейнера, а не зашитые значения (M-4)
- порты postgres/nats/minio публикуются на ${BIND_ADDR:-127.0.0.1}; BIND_ADDR добавлен в .env.example и README,
  примечание про безопасность обновлено (M-6, R-9)

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-03 18:59:56 +04:00