🏦 Capital - единый пульт (обзор платформы)
Единый источник правды по платформе Stefa Pay. Всё в демо/sandbox-режиме, живого бизнеса пока нет. Онлайн-версия (с демо-кредами, приватная страница) - вне этого репо; здесь - по правилу
capital-kbбез секретов (только имена/пути). Обновлено: 16.09.2026 (домены - HTTP-проба 15.09). Прод = main5127b2b.
Метрики: паритет с Iorys ~88% · расходы ~$71/мес · 2 выделенных сервера · 8 git-репо.
01 · 🔗 Сайты и доступы
Capital - наш прод (LIVE)
| Сервис | Адрес | Статус | Вход |
|---|---|---|---|
| Кабинет клиента | app.algorys.cc |
🟢 LIVE (303→login) | демо sandbox-логин (в handoff-файлах проекта) |
| Back-office (Ledger) | bo.algorys.cc |
🟢 LIVE (303→login) | оператор CEO (пароль мимо чата) |
| KYC (мост SumSub) | kyc.algorys.cc |
🟡 up (корня нет) | /webhooks/sumsub - HMAC, 401 без подписи |
Iorys - демо вендора (референс)
| Приложение | Адрес |
|---|---|
| Ledger Admin | demo-ledger.s-pay.io |
| Hub «Connect» | demo.s-pay.io |
| Client Portal | demo-portal.s-pay.io |
Логины main@s-pay.io / ops1@s-pay.io (одни на все стенды; пароль мимо чата). Старые demo-*.stefa-pay.com мертвы. Iorys - вендорский UI (их IP): делаем оригинальные компоненты под бренд, не клонируем 1:1.
Инфраструктура
| capital-prod | Hetzner cpx32 · 4c/8GB/160GB · nbg1 · 188.245.104.38 · tailnet 100.113.37.115 |
| capital-ops | Hetzner cpx22 · 2c/4GB/80GB · fsn1 · 142.132.228.161 · tailnet 100.93.23.99 |
| SSH | только tailnet · ключ ~/.ssh/capital_ed25519 (cc-host) · публичных портов нет (Cloudflare tunnel) |
| Мониторинг | Uptime Kuma http://100.93.23.99:3001 (tailnet-only) · uptime-check cron */5 → Telegram «Neo Infra Alerts» |
| Почта | Resend · домен algorys.cc verified · отправитель no-reply@algorys.cc |
| GitHub (CryGor11) | capital · capital-ledger · capital-portal · capital-shared · capital-kyc · capital-hub (reserved) · capital-kb · capital-support |
🔐 Секреты - только по пути (значения мимо чата)
| Секрет | Где |
|---|---|
Серверный .env |
capital-prod:~/capital/.env (имена: SMTP_PASSWORD · NSCARDS_WEBHOOK_SECRET · RAIL_* · SUMSUB_* · SECRET_KEY) |
| Hetzner API | ~/.config/hcloud/capital_token |
| Tailscale API | ~/.config/tailscale/api_token |
| Age-ключ бэкапов | приватный ~/.config/age/capital-backup.key (только cc-host) · публичный age1wt7dk7…azf3 |
| Git/deploy SSH | ~/.ssh/capital_ed25519 · ~/.ssh/github_ed25519 |
Значения секретов в базе знаний не хранятся. Впрыск/ротацию делает оператор на сервере мимо чата.
02 · 🏗 Архитектура
Стек: FastAPI + async SQLAlchemy 2.0 + Jinja2 (server-rendered) + Postgres · общий пакет capital_shared · схема через Alembic. Три сервиса: cabinet (8101) / backoffice (Ledger) / capital-kyc.
Сквозной поток: от лендинга до платежа
1. Лендинг → Онбординг или Логин
2. Онбординг → Ledger + SumSub (KYC) ↔ applicantReviewed GREEN/RED (вебхук, HMAC)
3. Ledger: GREEN → авто · RED/on-hold → ручной доп-запрос или отказ
4. Ручное формирование кабинета (счета, карты, реквизиты)
5. Email «счёт активен» → клиент логинится в кабинет (платежи/бенефициары/инвойсы/карты)
6. Платёжное поручение → Ledger: авто (API партнёра + KYT) или вручную ↔ KYT-скрининг
7. Партнёр-процессинг Papaya (рельсы/ностро, SEPA) - пока симулятор
Топология прод-инфраструктуры
Интернет
│
[Cloudflare: WAF / proxy / tunnel] (публичных портов на серверах нет)
│
┌───────────────┴───────────────┐
🖥 capital-prod (nbg1) 🖥 capital-ops (fsn1)
backoffice/cabinet/kyc staging (throwaway-БД)
Postgres 16 · compose Uptime Kuma · restore-тест
└──────── бэкапы (age) ─────────┘
│
☁️ Backblaze B2 (Object Lock) [план, ждёт аккаунт]
☁️ Hetzner Storage Box 1TB [план]
Сейчас (интерим-бэкапы): pg_dump → age → pull на cc-host (ретеншн 30д, restore-тест пройден 15.09). Целевое: pgBackRest + WAL (RPO ≤ 5 мин) → B2 + Storage Box, разные ДЦ, ключ не на prod. HA нет - быстрый DR ≤ 2-4 ч.
03 · 🏦 Ностро и партнёры
Живого ностро у Stefa Pay пока нет. Оба денежных партнёра в коде готовы, крутятся в симуляторе.
🛤 Papaya - рельс/ностро (симулятор, RAIL_SIMULATE=true)
- SEPA SCT + Inst · OAuth2 client-credentials · статусы pull-based (вебхуков нет).
- Полное покрытие спеки PAYM_001: refund/cancel/approve, VoP, loro statement, block/unblock, close.
- Хосты (⚠️ http + IP-allowlist, только VPN):
partn-bank.finbusinessadapters.tech(prod) ·partnerbanking.sbtechnical.tech:8077(sandbox).
💳 NS Cards - эмитент карт (симулятор, CARDS_SIMULATE=true)
- Выпуск / reveal PAN (view-once + аудит, PAN не хранится) / freeze / close / 3DS step-up.
- Вебхук
/webhooks/nscards- HMAC fail-closed, идемпотентный. Спенд-лимиты per-tx / daily / monthly.
Условия и экономика
- Тарифы:
Tariffпер-валюта (fixed + percent_bps + min/max + себестоимость + account_opening_fee + fx_fee_bps) ·ClientTariff- индивидуальный override. - Выручка: комиссия платежа · открытие счёта · FX-маржа → отчёт
/revenue(выручка/себестоимость/маржа). - KYT: крупная сумма / high-risk страна / велосити / структурирование → AML-кейс (алерт, платёж не блокируется).
- Live-ностро: нет - KYT ставится на ностро (блокер). Контакт по интеграции: Liza Bulat @lizabulat.
Блокер флипа на live (CEO 15.09): оплата инвойсов партнёров. Papaya: + sandbox client_id/secret + VPN/IP-allow. NS Cards: + company API key. Код готов - впрыснуть креды и снять
SIMULATE.
04 · 👥 Клиенты
| Клиент | Что есть | Доступ |
|---|---|---|
Демо-клиент id 25 |
2 счёта EUR+GBP · 8 операций (витрина) | sandbox-демо-логин (в handoff) |
| Боевые клиенты | 0 - БД очищена; сохранены операторы (CEO) + 4 тарифа | - |
Креды будущих реальных клиентов - по ссылке/мимо чата, в базе знаний не хранить.
05 · 💰 Текущие расходы
Факт (ежемесячно)
| Статья | Продукт | $/мес |
|---|---|---|
| Prod-сервер | Hetzner cpx32 | ~€36 |
| Ops/staging | Hetzner cpx22 | ~€29 |
| Мониторинг / CI / WAF / VPN | Kuma, Netdata, Sentry, Healthchecks, GH Actions, Cloudflare, Tailscale | $0 |
| Почта | Resend (free-tier) | $0 |
| Итого сейчас | €65 ≈ $71 |
Планово / разовое
| Статья | Когда | $ |
|---|---|---|
| Backblaze B2 (Object Lock) | ждёт аккаунт | ~3-6/мес |
| Hetzner Storage Box 1TB | план | ~4/мес |
| Внешний pentest | квартал 1 | ~2-3.5k/год |
| Профи-апгрейд | когда пойдут клиенты | ~130-150/мес |
План был ~$52-55/мес, но цены Hetzner выросли (ccx23 €103 отменён) → факт по серверам ~$71.
06 · ✅ Задачи
Закрыто и LIVE - ядро банка
- 8 модулей паритета: FX/мультивалюта · отчёты + аудит · Users&Roles · лимиты · инвойсы · messaging · AML/Risk 4-eyes · тарифы/выручка.
- Комплаенс-глубина: risk-scoring · sanctions-скрининг · справочники · формальные отчёты (EOD/Journal) · обмен документами.
- Деньги/карты: Papaya (sim) · NS Cards выпуск+reveal+3DS (sim) · KYT · Accounting (план счетов + баланс) · SAR · настраиваемая opening-fee.
- Инфра: 2 сервера заказаны+захарденены · переезд на capital-prod (=DR-тест) · SSH-алерты + chrony/journald · мониторинг · 8 git-репо + CI + branch protection · интерим-бэкапы + restore-тест · file-integrity + CI-сканеры.
- Интеграции: почта Resend живая · SumSub-вебхук живой (HMAC).
- Дистанция до Iorys: ~88% «достаточно работать банком», ~60% полный паритет. Hub сознательно не строим (роль у Papaya).
Новое в main / на проде (16.09)
- 🛡 P2-hardening: revenue partial-unique · advisory-lock на cap открытия счетов · double-reject.
- 💳 Card-funding: заявки на фондирование карт с matched-amount (уникальная сумма с «хвостом»-центами) -
CardFundingRequest. - 📧 Email-first онбординг (2 шага): email+пароль → verify по ссылке → анкета; гонка дублей → 409.
- 📝 KYC-9-блоков: многоблочная регистрация по корпоративной анкете Stefa Pay; +37 полей
Company+ таблицаCompanyPerson; демо-прогон дошёл до SumSub. - 🎨 Онбординг в бренде Stefa Pay + dropdown стран + responsive; кабинет слит ранее (
cabinet-auth-identity: 2FA, multi-company, balance-per-account).
Открыто - фиче-ветки (ждут ревью + мерж, ПО ОЧЕРЕДИ из-за shared/migrations)
| Ветка | Что | Статус |
|---|---|---|
feature/smooth-transitions |
плавные переходы + splash (86 тестов) | 0ded2ac, готова |
feature/onboarding-fixes |
баги онбординга: websdkLink-тупик, i18n Documents, Send money pending, коднейм, Jurisdictions, блок 6 | пишется |
feature/treasury-monitor |
казначейка read-only (см. architecture/09) |
32b07e6, доводка до live-данных |
feature/xbo-integration |
XBO USDT-шлюз, auth пробит (см. architecture/08) |
3e39f4e: base64-фикс подписи закоммичен+запушен, тесты 182+73 зелёные |
Открыто - инфра / внешнее
| # | Задача | Блокер |
|---|---|---|
| #17 | pgBackRest + WAL → B2 | ждёт B2-аккаунт (CEO) |
| #10 | SumSub webhook URL в дашборде | CEO прописать |
| #9 | Papaya + NS Cards → live | оплата инвойсов (CEO) |
| #16 | messenger-доступ | офлайн с 07.08, чинить |
| #20 | security-фиксы CEO | личный SSH-ключ · fine-grained PAT · CF Access · age-ключ CEO · MFA Hetzner |
07 · 🗺 План действий
Верхнеуровнево - roadmap
- Неделя 1 «не жить без бэкапов»: серверы + hardening ✅ · переезд ✅ · мониторинг ✅ · осталось pgBackRest + WAL → B2 (ждёт B2).
- Месяц 1 «профессиональная база»: CI/CD + GHCR + staging · sops+age · Sentry · BLOB→B2 · DR-ранбук + учения · hash-chain аудита.
- Квартал 1 «зрелость»: blue-green деплой · status-page · резервный email · квартальные DR-учения · внешний pentest · risk-register + политики.
Детально - ближайшие действия (по порядку)
- Слить фиче-ветки в main ПО ОЧЕРЕДИ (конфликты по
shared/models+migrations):smooth-transitions → onboarding-fixes → treasury-monitor → xbo-integration. Ревью каждой; money/auth-критичные - security-review; stage перед продом. - Дизайн-правки кабинета ТОП-5: нативные select/file-input → брендовые · боковая навигация · унификация кнопок/лейблов · пустые состояния · превью курса в Convert. Плюс session-таймаут баг (403/CSRF).
- Облачная папка документов клиента - по спеке (
storage.pyБД-backend, веб-анкета HTML/PDF WeasyPrint, секция «Папка клиента» в Ledger, аудит). Облако ждёт B2-аккаунт. - От CEO (разблокирует): B2-аккаунт → бэкапы · оплата инвойсов Papaya+NS → live · SumSub webhook URL · XBO этап 2 (боевой флип, отдельной сессией) · 5 security-токенов #20.
- После слияний: казначейка на live-данные + деплой · инфра-трек месяца 1 (CI/CD + GHCR + staging, уходим от rsync).
Правило владения демо-продом: деплой на прод - только из головного
capital, одной рукой; фиче-ветки тестируют на stage-контейнере (дважды 15.09 параллельные сессии роняли демо).