Files
Bridge-and-Join-s/PRODUCT.md
zuevav da12a9ec1c feat(bj): модуль ЛК на PostgreSQL, обмен с DEPO, боевой ЛК с имитатором НРД, QUIK, НПР
- bj_exchange и «кран» Fancy убраны: данные модуля ЛК в PostgreSQL (схема lk)
- трансферные таблицы FTV_M2M: создание при установке, события, справочник участников
- сверка с DEPO: счёт, ФИО, дата рождения, ИИС по договору, квал-инвестор из опции DEPO
- боевой ЛК ЕСИА Финанс при тестовом ИШ: журнал, отказ через DEPO, статусы в ЛК
- онлайн-лицензирование в bj, план тестирования M2M для контрагента (интерактивный HTML)
- модули QUIK МНП, экспорт QUIK, НПР/УДС; документы и тестовые материалы

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-15 19:41:12 +03:00

127 lines
10 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Product
<!-- impeccable:product-schema 1 -->
## Platform
web
## Users
**Основной пользователь — оператор/бэк-офис брокера** (администратор bj). Работает
в веб-админке `bj-server`: настраивает подключения (Fancy, QUIK, НРД/ИШ, ЕСИА
Финансы), мониторит заявки на M2M-перевод и их статусы, читает журнал обмена с
НРД, ведёт пользователей ЛК, обрабатывает входящие переводы, прогоняет тесты с
роботом НРД. Контекст — рабочее место специалиста депозитария/бэк-офиса.
**Вторичный пользователь — розничный инвестор (физлицо)** в клиентском ЛК
(`bj-lk`): подаёт заявку на перевод своих ценных бумаг себе же в другой
депозитарий. Актуально для брокеров БЕЗ платформы Финансы (профили «автомат» и
«полуавтомат»); у брокеров с Финансы клиентский ЛК даёт сама Финансы.
## Product Purpose
Bridge-and-Join-s (bj) — шлюз, обеспечивающий переводы ценных бумаг физлица
«самому себе» (M2M) между депозитариями через сервис НРД **MOEX МОСТ**. Это
регулируемая операция (ФЗ от 23.05.2025 № 124-ФЗ, Указание Банка России
№ 7317-У, вступление в силу 01.09.2026): депозитарий зачисляет бумаги клиенту в
другом депозитарии без встречного поручения, за минуты.
Роль bj — **протокольное плечо НРД/MOEX МОСТ**: собрать `M2MTransferRequest`,
подписать транзитной ЭП (ГОСТ через Интеграционный шлюз НРД), отправить в НРД,
принять `M2MTransferDecision`/`M2MTransferResponse`, вернуть исход в вызвавшую
систему. Успех = перевод исполнен и клиент/оператор видят понятный статус.
## Positioning
Незаменимое ядро bj — именно **междепозитарный обмен с НРД по протоколу M2M**
(XML с namespace-префиксами в кодировке windows-1251, транспорт ИШ с ГОСТ-ЭП и
шифрованием «закрытого конверта», тестирование с роботом НРД, коды отказа
M2Mxx). Соседние системы этого не делают: платформа ЕСИА Финансы/winr закрывает
ЛК/портфель/подпись клиента, QUIK — блокировку позиций, но обмен depository↔НРД
не ведёт ни одна из них. bj встраивается за ними как шлюз в НРД, а не дублирует
их функции.
## Operating Context
**Три профиля развёртывания** (bj во всех — шлюз в НРД):
- **Через Финансы:** ЛК, портфель, подпись клиента и блокировку держит платформа
ЕСИА Финансы (winr / ef.winr.pro). Стык — реализованный контракт
`back_office V1` (`docs/lk-contract/v1/openapi.yaml`, HTTP Basic): ЛК шлёт
`POST /api/v1/back_office/claims/` с подписанной (XMLDSig) заявкой, bj шлёт в
НРД и возвращает статус callback-ом `PATCH /api/v1/back_office/claims/{id}`.
- **Автомат:** фирма без Финансы, но с QUIK — свой `bj-lk` + коннектор QUIK МНП
(блокировка позиций хранимыми процедурами).
- **Полуавтомат:** без Финансы и QUIK — свой `bj-lk` + ручные гейты оператора.
**Интеграции:** НРД ИШ (Интеграционный шлюз, крипто ГОСТ/Валидата); Fancy
(депозитарий/Спектр, MSSQL/PostgreSQL — портфели клиентов, канал обмена и журнал
НРД); QUIK МНП (блокировка, боевая БД — только чтение + штатные процедуры);
ЕСИА Финансы/winr (ЛК). Тестовый контур НРД — TEST3 с роботом (сценарии
1111/2001/2002/3333).
**Регуляторные факты:** SLA «минуты» (5 мин до 31.08.2027, 2 мин с 01.09.2027);
переводятся только **российские ценные бумаги** (ISIN начинается с RU),
учитываемые на **торговом счёте депо (разделе)**; обособленные бумаги — нельзя.
Отказ по неподходящей бумаге — код НРД M2M01.
## Capabilities and Constraints
- Реализован контракт ЕСИА Финансы `back_office V1`: приём подписанной заявки,
проверка подписи (crypto-service), валидация, отправка в НРД, callback со
статусом (`draft/signed/submitted/in_progress/confirmed/rejected/timed_out`) и
кодом причины (`reason_code`/`reason_text`, напр. M2M18).
- Клиентский ЛК `bj-lk` (отдельный бинарь, ставится на веб-сервер брокера):
портфель, подача заявки с подтверждением, статусы; ходит только в bj по API с
ключом, к БД напрямую не подключается.
- Коннектор QUIK МНП (`quikm2m.go`) — регистрация/подпись/снятие поручений;
сейчас за предохранителем, ждёт настройки QAdmin у аутсорсера.
- Чтение реальных портфелей из Fancy (`BJ_DEPO_DATA`); правило RU-only и
человекочитаемые коды отказа M2Mxx.
- **Терминология (не переводить, не упрощать):** M2M, MOEX МОСТ, НРД, ИШ
(Интеграционный шлюз), депозитарий, депонент, счёт депо, раздел, поручение,
контрагент, место расчётов (НРД/СПБ), торговый счёт.
- **Открытые/недорешённые факты:** транспорт depo_m2m у Финансы (V1 back_office
или их webhook-модель) — на подтверждении; типы QUIK 100/101 не включены
(у аутсорсера); `place_of_payment=spb` не реализован; справочник контрагентов
(ИНН) у Финансы ещё не готов.
## Brand Commitments
Фиксированный бренд продукта — **Bridge-and-Join-s (bj)**. Клиентский ЛК может
нести название брокера через настройку `LK_TITLE` (напр. «Личный кабинет ·
Фонтвьель»), но это конфигурация развёртывания, а не смена бренда продукта.
Язык интерфейса — русский; тон — деловой, финансово-точный.
## Evidence on Hand
- Контракт-спецификация: `docs/lk-contract/v1/openapi.yaml`, `DOC/API ЛК ЕСИА.pdf`.
- Документация НРД (`DOC/`), QUIK (`/home/fontvielle/quik-docs/`), Финансы/winr
(`/home/fontvielle/lk-docs/`).
- Реальные данные: боевые базы Fancy (`BJ_DEPO_DATA` — настоящие портфели
клиентов), боевая БД QUIK МНП (`88_INSTR`), тестовый контур НРД с роботом.
- Пройденные проверки: сквозной цикл ЛК → НРД (робот) с реальным клиентом;
замыкание исхода (в т.ч. отказ M2M18) на клиента.
- НЕ выдумывать: отзывы, цены, лицензии, метрики, клиентов — таких данных нет.
## Product Principles
1. **bj — шлюз в НРД, а не полный стек.** Интегрироваться с ЛК/QUIK/Fancy, а не
дублировать их. Сначала проверять существующий контракт, потом строить.
2. **Безопасность необратимых операций.** Перевод бумаг необратим: подтверждение
перед подачей, никаких необеспеченных поручений в НРД.
3. **Боевые системы — только на чтение.** Fancy и QUIK боевые; писать только
штатными процедурами API, никаких прямых INSERT/UPDATE в их таблицы.
4. **Понятный исход.** Коды НРД (M2Mxx) и статусы показывать человекочитаемо —
и оператору, и клиенту; статус должен честно отражать реальность (отказ ≠
«в работе», «отправлено» ≠ «исполнено»).
5. **Регуляторная корректность.** Только российские бумаги на торговом счёте, SLA
«минуты», соответствие требованиям Банка России.
## Accessibility & Inclusion
Обычная веб-доступность уровня **WCAG AA**: достаточный контраст (в т.ч. тёмная
тема), программные `label` у полей, доступность с клавиатуры и для скринридеров,
адекватные тап-таргеты. Отдельных регуляторных требований к доступности пока не
установлено.