# Product ## 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` у полей, доступность с клавиатуры и для скринридеров, адекватные тап-таргеты. Отдельных регуляторных требований к доступности пока не установлено.