RTM — матрица трассируемости требований
Статус реализации (матрица трассируемости требований, RTM).
BRDописывает, что должна уметь система; этот документ — что реально реализовано на текущий момент, с трассировкой к требованиямFR-NN. Источник истины по объёму — BRD, по дизайну — LLD.
Проект: Система интеллектуального мониторинга мерчантов — сервис мониторинга контента сайтов мерчантов для банков-эквайеров и PSP.
Фаза 1 (MVP, тариф Basic) — работает
Заголовок раздела «Фаза 1 (MVP, тариф Basic) — работает»Детерминированный поиск по стоп-листам + рабочее место комплаенс-офицера.
| Область | Что реализовано | FR |
|---|---|---|
| Мультитенантность и доступ | tenant-scope на всех бизнес-таблицах; RBAC на ролях/пермишенах (Filament Shield): роли super_admin/admin/officer/auditor (read-only), управление ролями и правами в UI, доступ гейтят политики; приглашения (invite-flow), 2FA (email-OTP), отключение пользователей | FR-01 |
| Сайты | CRUD + CSV-импорт, реквизиты мерчанта, частота мониторинга (none/daily/weekly/monthly) | FR-03, FR-13 |
| Краул | multi-page обход (BFS) + sitemap.xml, robots.txt, throttle, лимиты по тарифу | FR-02, FR-05 |
| Извлечение текста | trafilatura — стрип nav/menu/footer | FR-07 |
| Матчинг | морфология ru (pymorphy3), be (UDPipe belarusian-hse, задеплоена в образ сканера), en + Aho-Corasick, whole-word; диспетчер по языку сайта | FR-08 |
| Анти-обфускация | разрядка к а з и н о, гомоглифы кaзино → казино, транслит kazino → казино | FR-09 |
| Стоп-листы | свои списки/фразы, категории, портфели, skip-правила (подавление ложных) | FR-04 |
| Evidence | immutable HTML-снимок страницы, подсветка найденного слова | FR-12 |
| Ревью офицера | очередь срабатываний, статусы, дедлайны, ремарки, historical alerts | FR-18, FR-20 |
| Отчёты | экспорт в Excel и PDF «Alert Report», статистика (диапазон дат, HBR/Watch List) | FR-19 |
| Алерты / почта | уведомления комплаенса, шаблоны писем (FinMail), очередь Horizon | FR-17 |
Фаза 2 (Premium, AI-слой) — работает
Заголовок раздела «Фаза 2 (Premium, AI-слой) — работает»Дорогой AI-слой по кандидатам первого слоя; провайдер — Mistral, vector DB — Qdrant. Вся AI/vector-логика — в admin (сканер ходит только по HTTP).
| Область | Что реализовано | FR |
|---|---|---|
| AI-классификация | разбор срабатываний LLM — по клику, bulk и авто в фоне (отсев ложных) | FR-10 |
| Семантический поиск | эмбеддинги + Qdrant ловят нарушения без точного слова (за флагом QDRANT_ENABLED) | FR-21 |
| SPA-детекция | эвристика «похоже на SPA» (флаг is_spa) + диагностика robots_blocked | FR-06 |
| Скриншоты в evidence | полностраничный снимок флагнутой Premium-страницы (headless-Chromium/Playwright) → MinIO, показ в карточке хита; SSRF-фильтр на недоверенные URL | FR-12 |
В планах (фаза 2 — доработки)
Заголовок раздела «В планах (фаза 2 — доработки)»| Область | Статус | FR |
|---|---|---|
| Headless-рендеринг текста SPA (Playwright) | детекция и скриншоты есть, переэкстракции текста нет | FR-06 |
Инвариант себестоимости сохраняется: дешёвый детерминированный проход (Aho-Corasick + морфология) — для всех тарифов; дорогой AI-слой — только Premium и только по кандидатам.
Модули Андеррайтинг + Onboarding — реализовано
Заголовок раздела «Модули Андеррайтинг + Onboarding — реализовано»Расширение до полного жизненного цикла мерчанта (по образцу Web Shield). Всё — в admin, в одной
панели, разделено nav-группами «Мониторинг / Андеррайтинг / Онбординг». План — admin/ROADMAP-modules.md.
| Область | Что реализовано | FR |
|---|---|---|
| Домен Merchant/Entity | мерчант + директора/UBO, адреса, документы, сайты (FK), контакты (телефон/email/расчётный счёт); бэкфилл из sites.entity | FR-33, FR-34 |
| Onboarding intake | заявка (manual/CSV/API/form) → convert() → мерчант (+структура) + кейс; CSV-импорт мерчантов (дедуп по УНП) | FR-30, FR-32 |
| Кейс Андеррайтинг | жизненный цикл open→approved/declined/terminated; decision-workspace; решение проецируется на мерчанта | FR-40, FR-45 |
| Каталог индикаторов | 52 индикатора, 4 группы, traffic-light, ручная разметка | FR-41, FR-43 |
| ЕГР Беларуси | сверка мерчанта с госреестром по УНП (открытое API egr.gov.by): существование, состояние (ликвидация → red), наименование, дата регистрации (молодое юрлицо → red/amber); справка ЕГР на детальной странице проверки | FR-48 |
| AML-скрининг (санкции/PEP) | директора/UBO/entity по консолидированным санкционным (OFAC/ЕС/ООН/UK…) и PEP-спискам через OpenSanctions Match API (или self-hosted yente); уверенное санкционное совпадение → red, PEP/неточное → amber-кандидаты с находками на детальной странице | FR-48 |
| FATF-риск страны | страна хостинга доменов мерчанта (GeoIP) против чёрного/серого списков FATF (ревизия окт. 2025) | FR-49 |
| Раннер анализа кейса | кнопка «Запустить анализ» — все деривации последовательно (прогресс) или точечно; детальная страница каждой проверки (/cases/{id}/check/{key}) | FR-50 |
| Карточка кейса (UI) | оформление в стиле Web Shield: бренд мерчанта в шапке, крупный риск-скор, сводка по индикаторам, панель 4 групп 2×2, секции CREM/OSINT/MCC | FR-47 |
| Контент-индикаторы из сканера | авто-деривация Business Classification (MCC-KB) + Content Violation (hits) + Website Compliance (наличие обязательных разделов сайта: Условия/Конфиденциальность/Возврат/Контакты/Доставка → WC%), не затирая ручное | FR-42 |
| AI-подсказка MCC (Premium) | Mistral читает контент сайтов мерчанта → черновой MCC с категорией/уверенностью/обоснованием; расхождение с заявленным MCC подсвечивается (misclassification). Анти-SSRF guard на загрузку контента | FR-10, FR-42 |
| Авто-OSINT (Reputation) | web-поиск кандидатов по аспектам: наименование, адрес, контакты, директора, сайты, соцсети (instagram/vk/facebook/telegram/tiktok), отзовики (отзывы/жалобы); находки amber-кандидаты + AI-оценка Mistral (Premium) | FR-30 |
| Dynamic risk score | вычитательная модель (старт 100%, пол 1%), на кейс и на сайт, уровень LOW/MEDIUM/HIGH | FR-44 |
| CREM | кредитная экспозиция: FEaD, EtPR, сценарии, рекомендуемые залоги (сверено с отчётом) | FR-44a |
| MCC Knowledge Base | регуляторная справка по MCC (MRP/VIRP, страновые правила) | FR-44b |
| Recommendation checklist + PDF | авто-чеклист из не-зелёных индикаторов; многосекционный PDF-отчёт по кейсу (серверный dompdf, формат по образцу loto.by) | FR-47 |
| Onboarding: форма + API | публичная token-based форма мерчанта (/onboarding/{token}) → Application; partner API ingest (per-tenant Bearer-токен) → Application; аккаунт не создаётся | FR-30, FR-31 |
| Связка кейс ↔ мониторинг | рескан сайта обновляет открытый кейс (индикаторы+score); ежегодный rerun high-risk; частота мониторинга per risk-категория (auto) | FR-46 |
| Transaction Laundering (детерминированный контур) | portfolio cross-check, corporate structure, whois (регистрант + entity mismatch), IP Scan (соседи по подсети, reverse-IP, добавление в кейс), возраст домена (whois) и возраст SSL (Certificate Transparency / crt.sh), анализ трафика (Tranco топ-1M — локальный снимок или API + детекция резкого скачка), SiteReveal, гео-клоакинг, Load Balancing, мобильные приложения / партнёрские сети, historic TL violations, outgoing/backlinks, редиректы/related-domains, входные слова (УНП/ФИО/email/телефон/счёт на внешних ресурсах), тест-карты (ручной ввод офицера). Reverse-IP/passive-DNS — pluggable (OTX бесплатно, ViewDNS/SecurityTrails по ключу) | FR-50 |
| RBAC | роли super_admin/admin/officer/auditor (read-only); политики Merchant/InvestigateCase/Application; отключение пользователей (блок входа); назначение тенанта + страница тенанта со связанными разделами | FR-01 |
Модуль Фишинг-детектор — реализовано (admin v1.8.x + scanner v0.33.0)
Заголовок раздела «Модуль Фишинг-детектор — реализовано (admin v1.8.x + scanner v0.33.0)»Защита брендов банка от фишинговых клонов: актив → отпечатки → тикет угрозы → доказательства → takedown. Реализованы и control plane в admin (UI + Scanner API), и авто-мониторы на стороне сканера (домены / веб / приложения + канарейка), плюс dark web-контур, threat-intel обогащение и первый шаг интеграции с SOC (STIX).
| Область | Что реализовано | FR |
|---|---|---|
| Защищаемые активы | реестр: сайт / мобильное приложение / соцаккаунт, статус active/paused, canary-сниппет | FR-60 |
| Web-отпечатки | версионируемые: favicon hash, DOM-сигнатура, палитра, бренд-слова, паттерны форм; Scanner API снятия/чтения | FR-61 |
| Mobile-отпечатки | package/bundle, cert SHA-256, icon hash, store-ссылки; версионируются | FR-62 |
| Мониторинг доменов (scanner) | тайпосквоттинг (omission/transposition/QWERTY/homoglyphs/TLD/prefix-suffix) + CT-логи crt.sh по бренд-слову + DNS-фильтр → тикеты type=domain (scanner v0.27.0) | FR-63 |
| Детект веб-клонов (scanner) | сравнение отпечатка кандидата с эталоном (favicon/keywords/палитра) + перцептивный хэш иконки/логотипа (ловит пересохранённую копию, FR-65 ф.1) по порогу → тикет + HTML-evidence (scanner v0.27.0, перцептив v0.32.0) | FR-64, FR-65 |
| Детект клонов приложений (scanner) | поиск в iTunes / Google Play + сторонние агрегаторы (Aptoide, FR-84), сравнение по иконке и названию → тикеты type=app (scanner v0.27.0, агрегаторы v0.32.0) | FR-66, FR-84 |
| Оркестрация мониторинга (scanner) | phishing_scheduler по очереди phishing-due / phishing-monitored; CLI scan-phishing-due / watch-phishing (scanner v0.27.0) | FR-63 |
| Канарейка (M7) | публичный beacon /api/canary/{token}: клон сам сообщает о себе с любого домена и чистого HTTP; нормализация URL, дедуп, анти-флуд потолок на актив/сутки — расширение FR-64 | FR-64 |
| Канарейка mobile (M10, ур. 1–2) | repackage/resign-клоны: self-check в официальном приложении → beacon → тикет type=app + evidence. Android — Kotlin, сверка package + SHA-256 подписи APK (?p=&s=); iOS — Swift, сверка bundle ID + Apple Team ID через code-signing (?p=&t=, Team ID задаёт офицер вручную). Платформа — по снятому отпечатку. Honeytoken cfg.json в ресурсах пакета ловит разбор (ответ всегда 200 {}) — расширение FR-64/FR-66 | FR-64, FR-66 |
| Тикеты угроз | дедуп по (актив, URL), источники auto/canary/manual, бэйдж открытых в навигации, ручная регистрация офицером | FR-68 |
| Lifecycle тикета | monitoring → in_progress → blocked; false_positive = whitelist (повторные обнаружения копятся в счётчике, тикет не возвращается в очередь) | FR-69 |
| Доказательства | скриншот + HTML-снимок + признак гео-клоакинга, append-only (read-only relation manager) | FR-70 |
| Takedown (ассистированный + 2.0) | abuse-письмо по шаблонам (регистратор/хостер/платформа), RDAP-подсказка abuse-контакта из реестров (+DoH), фолбэк на нац-CERT для зон .by/.бел (FR-71), справочник платформ, статусы ответов. SLA-дашборд + авто-эскалация черновиков жалоб (FR-75) и подача в браузерные блок-листы/фиды (FR-76, спит до ключей провайдеров). Авто-email abuse@ — в планах (оргпредусловия) | FR-71, FR-75, FR-76 |
| Dark web-мониторинг | watchlist тенанта (домены / БИН-диапазоны / бренд / email-домены) → находки утечек (креды, данные карт, упоминания бренда, продажа наборов для подделок) из Telegram-контура; сырьё шифруется, раскрытие аудируется (99-З). Связка находки с тикетом клона-источника — «жертвы этого клона» (FR-72.5) | FR-72 |
| Обогащение угрозы (threat-intel) | к тикету добавляется возраст инфраструктуры (из логов сертификатов) и риск-подсказка для приоритизации — для доменов и веб-клонов | FR-74 |
| Экспорт угроз в SOC | STIX 2.1 экспорт тикетов/IOC (phishing:export-stix), детерминированные id для дедупа в SIEM; клиентский pull-API / вебхуки / TAXII — следом | FR-86 |
| Watermark провенанса | подбор лого-кандидатов с офиц. сайта + подтверждение / загрузка / скачивание в UI (FR-77.1). Запечатывание невидимой метки (seal) — на активации (extra + мастер-ключ) | FR-77 |
| RBAC модуля | права ролей на ProtectedAssets/PhishingTickets (auditor — read-only) | FR-01 |
В планах (расширение продукта)
Заголовок раздела «В планах (расширение продукта)»| Область | Статус | FR |
|---|---|---|
| Фишинг: доработка мониторов сканера | перцептивный хэш иконки/логотипа (FR-65 ф.1) — реализован (scanner v0.32.0, см. детект веб-клонов); embedding-детекция визуально изменённых клонов (FR-65 ф.2) — каркас есть, спит (ждёт Qdrant + модель); мониторинг соцсетей/мессенджеров (FR-67) — не начат; CT-стриминг certstream + NRD-фиды и favicon-поиск urlscan.io — расширения FR-63/64 | FR-65, FR-67 |
| Фишинг: takedown уровни 1–2 | авто-подача в блоклисты (Safe Browsing, PhishTank, Netcraft, APWG) и авто-email abuse@shield.by — см. организационные предусловия в BRD (SPF/DKIM/DMARC, PhishTank-аккаунт, членство APWG) | FR-71 |
| Остаток контент-индикаторов (Price Point и пр.) | Deceptive Marketing / Subscription — структурные dark-patterns добавлены (обратный отсчёт распродажи, ложный дефицит, предотмеченное авто-продление; scanner v0.33.0); остаток — новые HTML-эвристики | FR-42 |
| Биллинг/метеринг объёмов | учёт проверок по видам услуг, квоты/overage, Акт сверки, месячный отчёт по ОТС — admin-side, без внешних ключей | — |
| Traffic-метрики Similarweb, live MATCH/VMSS (списки МПС) | требуют внешних провайдеров/ключей эквайера или вне области | FR-48, FR-49 |
Вне области (по решению заказчика)
Заголовок раздела «Вне области (по решению заказчика)»| Область | FR |
|---|---|
| OCR / vision по фото товаров — заказчику не требуется | FR-11 |
| Verdict API + Redis-кэш для PSP-шлюза | FR-15, FR-16 |
Контракты/требования остаются зафиксированными в BRD/LLD на будущее, но в работу не берём.