🔀 Разграничение терминалов - ностро, автосбор, сверки (антиколлизия)

Составлено 2026-09-18 (терминал 🅲 TREASURY) по запросу CEO «построй работу так, чтобы не было столкновений». Источник блоков: wiki karta-rekonstrukcii (схемы B/C/D) + СТАРТ.md терминалов. Это правила границ, а не задачи - смотрят все терминалы, которые касаются ностро/казны.

🎯 Принцип (одной строкой)

Один блок = один владелец-репо. В таблицу пишет только её владелец. Общие модели (shared/models) мигрирует ТОЛЬКО 🅻 LEDGER. Остальные читают через API / SELECT-роль, а НЕ через совместную правку одних файлов. Так два потока никогда не редактируют один файл/одну схему одновременно.

🗺 Матрица: казначейский блок → владелец → что трогает → границы

# Блок (с карты) Владелец Пишет (репо / таблицы) Только читают Правило антиколлизии
1 Ностро-менеджмент (CRUD, план, балансы) 🅻 LEDGER capital-ledger; shared таблица nostro_accounts 🅲 treasury, 🅷 HUB Схему nostro_accounts мигрирует только LEDGER. Нужно поле - запрос к LEDGER, не своя миграция.
2 Мульти-ностро + автосбор - политика (когда/сколько двигать) 🅻 LEDGER capital-ledger; sweep-правила в shared 🅲 treasury Политику держит LEDGER. LEDGER не ходит в провайдера напрямую - отдаёт команду в HUB.
3 Ностро в HUB (субсчета/IBAN/балансы у провайдеров) + автосбор-исполнение 🅷 HUB capital-hub hub_service/models.py (hub_*) - НЕ shared 🅻 LEDGER (через API/callbacks) HUB держит свои hub_*; связь с ностро Ledger только по hub_uuid, не общая таблица.
4 Сверки / reconciliation (EOD, расхождения) 🅻 LEDGER shared таблица reconciliations; capital-ledger 🅲 treasury (показывает) Таблицу reconciliations создаёт/мигрирует только LEDGER.
5 Read-only казначейский монитор 🅲 TREASURY capital дерево treasury/ (своё) - 0 записей в БД сам читает через роль capital_ro Только GET, SELECT-only роль. Никогда не трогает shared/models и чужие сервисы.
6 KYT на ностро (скрининг транзакций) 🅳 KYC capital-kyc 🅻 LEDGER, ностро Ждёт SumSub→Identomat + живой ностро. Сейчас НЕ стартует.
7 YubiKey / HSM (казначей-ключи) 🅸 INFRA серверные секреты / hardware - Секреты мимо чата; деплой/ключи - INFRA одной рукой.

⚡ Точки соприкосновения (где реально могут столкнуться) и как разведено

  1. Таблица nostro_accounts - пишет только LEDGER; HUB и treasury читают. Новое поле нужно HUB/treasury → запрос к LEDGER (не своя миграция). → двух писателей в схему нет.
  2. Таблица reconciliations - owner LEDGER; treasury читает. Аналогично.
  3. «Автосбор» существует в ДВУХ слоях - это не дубль, это разделение: - 🅻 LEDGER = решает (бизнес-политика: порог, валюта, во сколько). - 🅷 HUB = исполняет (sweep через провайдера, Волна 2). Граница: LEDGER не вызывает провайдера, HUB не хранит политику. → не пишут одно и то же.
  4. Внутри одного репо capital-hub два параллельных потока = коллизия (уже была 18.09: незакоммиченная Wave-2 callbacks уронила test_payments). Правило: внутри одного сервиса - один активный поток на файл; перед передачей - commit+push, дерево чистое.

🔢 Порядок (зависимости, чтобы никто не ждал вслепую)

  1. 🅻 LEDGER закрепляет схему nostro_accounts + reconciliations в shared (owner) → это разблокирует и HUB-синк, и treasury-монитор.
  2. 🅷 HUB строит Волну 2 ностро (субсчета/балансы/автосбор-исполнение) поверх своих hub_* + связь hub_uuid.
  3. 🅲 TREASURY подключает монитор к nostro_accounts/reconciliations (read-only) - после того как LEDGER закрепил схему.
  4. 🅳 KYC - KYT на ностро - после Identomat + живого ностро.

🅲 Что это меняет для меня (TREASURY) - решение

🚦 Итог: почему столкновений не будет