💰 Казначейка (Treasury Monitor, read-only)

Отдельный read-only сервис-панель для мониторинга активов и денежных потоков банка. Код - ветка feature/treasury-monitor (коммит 32b07e6) головного capital, каталог treasury/ (в main НЕ смержено). Бренд Stefa Pay (navy + gold, Manrope). Обновлено: 16.09.2026.

Что это

Дашборд казначея: остатки клиентов по валютам, карточки ностро, платежи в пути, оборот за 14 дней, начисленные комиссии, последние движения. Архитектурная гарантия: двигать деньги из этого сервиса невозможно - 0 money-эндпоинтов.

Состав

Экраны

Виджет Что показывает
KPI-панель total client funds (EUR) · resting / in-flight / held поручения · оборот день/месяц · комиссии
Карточки ностро (6) Harbor Hills EUR/USD · Papaya EUR · EMQ GBP · XBO USDT (TRC20) · XBO EUR; сальдо = own + client funds, стек-бар
Матрица платежей ~80 платежей: номер, компания, сумма, статус, где находится, чьё следующее действие (Treasury/Operations/Bank/Compliance)
Матрица клиентов компания → остатки по валютам (сортировка по EUR-эквиваленту)
Комиссии доход по источникам: payment_fee / fx_fee / account_opening / card_fee
Оборот 14 дней line-чарт (inline SVG) по дневным дебет-постингам

Данные - SELECT по: ClientWallet, Company, PaymentOrder, Beneficiary, ClientLedgerEntry, RevenueEntry, FxRate.

Безопасность (несколько слоёв)

  1. Код: ни одного write-роута; wallet.py / платёжные движки не импортируются; сессии БД без commit().
  2. БД: отдельная SELECT-only роль capital_ro; конфиг fail-closed в prod - отвергает sqlite-URL и подключение владельцем capital.
  3. HTTP: CSP, nosniff, X-Frame DENY, HSTS, Referrer-Policy, Permissions-Policy.
  4. Доступ: опциональный TREASURY_ACCESS_TOKEN (backstop); основной гейт - Cloudflare Access (Zero-Trust, настраивается вне репо).

Что осталось до прода

# Доделка Статус
1 Таблица nostro_accounts в Capital (реальные балансы ностро + reconciliation) нет - карточки пока из статик-конфига app/nostro.py, own_liquidity = placeholder
2 Reconciliation-фид от провайдеров (Papaya / Harbor / XBO) + сверка placeholder «Reconciliation: -»
3 Фиксация FX-курса на 00:00 для оборота (сейчас - текущий курс) нет
4 Создать роль capital_ro в prod-БД (SQL есть в README сервиса) перед деплоем
5 Cloudflare Access на домен казначейки перед деплоем
6 Мерж feature/treasury-monitor в main + деплой ждёт очереди мержей

🚫 Железное: при любых доделках сохранить read-only - 0 money-эндпоинтов, SELECT-only роль. Это принцип фичи, не техдолг.