🧱 Обзор сервисов и репозиториев Capital
Как устроена платформа на уровне сервисов и кода. Инфраструктура прод-окружения - в
Архитектура Capital v1.0.md; единый пульт (домены/доступы/метрики) - вОбзор платформы - единый пульт.md.
Стек
FastAPI + async SQLAlchemy 2.0 + Jinja2 (server-rendered, без SPA) + Postgres 16.
Общий пакет capital_shared (канонические ORM-модели + бизнес-ядро) импортируется
всеми сервисами. Схема БД - через Alembic (на stage/prod), create_all только в
dev/тестах (ephemeral SQLite).
Три сервиса + общий пакет
| Сервис | Репозиторий | Папка в головном | Порт (внутр.) | Домен | Аудитория |
|---|---|---|---|---|---|
| backoffice (Ledger) | capital-ledger |
backoffice/ |
8000 | bo.algorys.cc |
операторы банка |
| cabinet (Portal) | capital-portal |
cabinet/ |
8101 | app.algorys.cc |
клиенты банка |
| capital-kyc (SumSub-мост) | capital-kyc |
отдельный деплой | 8099 | kyc.algorys.cc |
вебхуки SumSub |
| capital_shared (пакет) | capital-shared |
shared/ |
- | - | код обоих приложений |
Все порты слушают только 127.0.0.1; публичный вход - через named Cloudflare
Tunnel (никакие порты в интернет не открыты, origin-IP скрыт). Postgres общий у
backoffice и cabinet; capital-kyc держит store идемпотентности вебхуков в volume
kyc_data.
🗄 backoffice (Ledger) - операторский back-office
Полное управление банком: клиенты, счета, платежи (4-eyes-одобрение, реверсы),
FX-ставки, AML/Risk/Sanctions, тарифы и выручка, лимиты, карты (NS Cards),
план счетов и баланс, SAR, справочники, отчёты (EOD/Journal), обмен документами,
messaging, аудит. RBAC-роли операторов - см. 04 - RBAC и роли.md.
Роут активации клиента /companies/{id}/activate - ручное открытие кабинета
после успешного KYC (см. процесс онбординга).
🧑💼 cabinet (Portal) - клиентский кабинет
Изолирован по компании (client_id/company_id проверяется на каждом запросе).
Функционал: счета и балансы, платежи и бенефициары (IBAN-валидация), FX-конвертация,
инвойсы (клиент выставляет счета своим плательщикам), карты (свои, reveal с 3DS),
обмен документами, messaging с оператором, выписка (печатный PDF). Вход -
email+пароль (identity на CabinetUser), опционально 2FA (TOTP). Один логин может
владеть несколькими компаниями (через Membership).
Self-service онбординг: /onboarding (заявка) → /onboarding/verify (email + запуск
KYC). Подробности - в processes/01 - Онбординг клиента.md.
🪪 capital-kyc - мост к SumSub
Отдельный сервис. Создаёт applicant'ов (KYC-director и KYB-company уровни), выдаёт
verification_url / websdkLink, принимает вебхук POST /webhooks/sumsub
(HMAC-проверка, идемпотентность) и форвардит вердикт (GREEN/RED/PENDING/ON_HOLD) в
Ledger. Уровни SumSub: kyc-director-msb-ca-v1 (физлицо-директор),
kyb-msb-ca-v1 (компания). Детали - в 03 - Интеграции.md.
🧩 capital_shared - общий пакет
Канонические ORM-модели (models.py) + бизнес-ядро, которое переиспользуют оба
приложения:
| Модуль | Назначение |
|---|---|
models.py |
все ORM-модели (33 таблицы) - единый источник схемы |
wallet.py |
ledger-ядро: проводки, идемпотентность, FOR UPDATE-локи |
fx.py |
FX-ставки и конвертация между кошельками |
fees.py |
расчёт комиссии/себестоимости, эффективный тариф |
openingfee.py |
сбор комиссии за открытие счёта (реальный debit) |
accounting.py |
производный баланс (Balance Sheet) из client-ledger |
risk.py |
risk-scoring клиента + нормализация имён/скрининг санкций |
kyt.py |
мониторинг транзакций (KYT) |
rails.py |
Papaya rail (SEPA-ностро) |
cards.py |
NS Cards issuer |
security.py |
SecurityHeadersMiddleware (CSP/HSTS/…) |
ibanutil.py |
валидация IBAN (ISO 13616 mod-97 + длины стран) |
email.py |
отправка писем через SMTP (Resend) |
limits.py |
лимиты платежей клиента |
documents.py |
обмен документами (запрос/загрузка/ревью) |
Головной репозиторий capital
Точка сборки и деплоя: docker-compose.yml, migrations/ (Alembic, владелец схемы -
образ backoffice), .github/workflows/ (CI: тесты + сканеры), deploy/
(Cloudflare-tunnel + pgBackRest-kit). Компонентные репозитории вливаются через
git subtree pull, деплой - только отсюда. Правила параллельной работы - в
processes/03 - Параллельная разработка.md.
Прочие репозитории
| Репозиторий | Роль |
|---|---|
capital-hub |
зарезервирован; Hub не строим (роль процессинга закрывает Papaya) |
capital-kb |
эта база знаний |
capital-support |
инциденты, хотфиксы, диагностика |