📝 Онбординг клиента (лендинг → кабинет)
Self-service поток по архитектуре Iorys (НЕ по модели Lumera). Клиент сам подаёт заявку, проходит KYC, оператор вручную активирует и формирует кабинет. Код:
cabinet/app/main.py(/onboarding*),capital-kyc(SumSub),backoffice(/companies/{id}/activate). С 16.09.2026 регистрация - email-first (2 шага) + многоблочная анкета (9 блоков) по корпоративной анкете Stefa Pay (в main5127b2b, задеплоено). Спека:14 Iorys_Copy/00 Онбординг - путь регистрации/СПЕКА - многоблочная регистрация.md.
Сквозной поток
1. Лендинг → Онбординг (регистрация) или Логин (в кабинет)
2. EMAIL-FIRST: email + пароль → письмо со ссылкой → verify
→ создаются CabinetUser + Company(status=application) + Membership
3. МНОГОБЛОЧНАЯ АНКЕТА (9 блоков, черновик сохраняется после каждого шага)
4. SumSub: create_applicant → verification_url → клиент проходит KYC/KYB
→ Company.status=kyc_pending
5. Вебхук applicantReviewed (GREEN/RED) → capital-kyc → форвард в Ledger
6. Оператор в Ledger: GREEN → активирует; RED/on-hold → доп-запрос или отказ
7. Активация /companies/{id}/activate → status=active, оператор формирует кабинет
(счета, карты, реквизиты)
8. Email «счёт активен» → клиент логинится → пользуется кабинетом
Шаг 1: email-first (2 шага вместо большой формы)
Клиент вводит только email + пароль (мин 8, ×2) → получает письмо со ссылкой
verify → по ссылке email_verified=true и открывается анкета. Дубль email → 409
(включая гонку одновременных заявок - P2-1). Форма под CSRF + login-limiter,
бренд Stefa Pay (Manrope, navy+gold, dropdown стран, responsive).
Шаг 2: многоблочная анкета - 9 блоков (Business)
Анкета по образцу Iorys (у Iorys 12 шагов - дубли схлопнуты), поля - по
корпоративной анкете Stefa Pay. Прогресс «Шаг N из 9», черновик пишется в
Company после каждого шага (onboarding_step), «Continue previous application»
поднимает с места остановки.
| # | Блок | Суть |
|---|---|---|
| B1 | 🚪 Account & credentials | email + пароль + тип аккаунта (сделано email-first-шагом) |
| B2 | 🏢 Company profile | название, юрисдикция, рег. номер, tax id, сайт, NACE |
| B3 | 📇 Registered address | юр. адрес компании |
| B4 | 👤 Applicant | заявитель: имя, телефон, DOB, tax country/id |
| B5 | 🧑💼 Directors / UBO | развилка «вы директор/единственный владелец?» → карточки директоров и UBO → таблица CompanyPerson |
| B6 | 💰 Business information | обороты in/out, число транзакций, страны операций, описание деятельности (AML-вход) |
| B7 | 💵 Tariff plan | карточки TARIFF 1/2/3/Individual - инфо + предпочтение; фактический план назначает оператор |
| B8 | 📄 KYC-документы | пакет KYB через ClientDocument (+ «Provide later») |
| B9 | 🪪 SumSub | WebSDK-верификация → финиш «заявка отправлена» |
Модель: +37 полей на Company (анкетные) + новая таблица CompanyPerson
(директора/акционеры/UBO) - миграция b1d4f7a9c2e6 (+ merge c3f8a1e6d4b2,
head на проде). Private-сценарий (6 блоков) - каркас заложен, полная проработка
отложена (основной клиент - B2B).
Шаг 3: KYC/KYB в SumSub
Клиент проходит верификацию в SumSub (уровни kyc-director-msb-ca-v1 /
kyb-msb-ca-v1). Демо-прогон 16.09 дошёл до SumSub (applicant создан,
kyc_pending). Живой онбординг вендора Iorys для референса:
15 Архитектура Capital/Iorys онбординг - оба сценария.pdf.
Шаг 4: вебхук вердикта
SumSub шлёт applicantReviewed на kyc.algorys.cc/webhooks/sumsub (HMAC).
capital-kyc проверяет подпись, дедуплицирует, форвардит reviewAnswer (GREEN/
RED) в Ledger, где обновляется kyc_status компании. applicantPending/
applicantOnHold → PENDING/ON_HOLD.
Шаг 5: активация оператором
- GREEN → оператор активирует
POST /companies/{id}/activate(status="active"); при онбординге high-risk-страны/санкций авто-заводится AML-кейс, который блокирует активацию до закрытия (4-eyes). - RED / on-hold → оператор вручную: доп-запрос документов (модуль обмена документами) или отказ.
- Оператор вручную формирует кабинет: счета (IBAN), карты, реквизиты.
Шаг 6: клиент в кабинете
Email «счёт активен» → клиент логинится (email+пароль, опц. 2FA) → пользуется:
платежи, бенефициары, FX, инвойсы, карты, документы, messaging, выписка. Неактивная
компания в кабинет не пускает (403).
Статусы Company
onboarding → application (заявка подана) → kyc_pending (email verified, KYC идёт)
→ active (оператор активировал). kyc_status: none → pending → GREEN/RED (из вебхука).
Известные баги (ветка feature/onboarding-fixes, в работе)
KYC-финал websdkLink (тупик) · i18n на Documents · Send money - статус pending ·
коднейм Capital в клиентском UI → Stefa Pay · Jurisdictions picker · пре-заполнение
блока 6.