KYC-UX: снижение трения
1) Принципы KYC-UX
Risk-based by design: чем ниже риск — тем меньше трения; эскалация только по сигналам.
Progressive disclosure: показываем ровно то, что нужно сейчас (минимум полей/экранов).
One-tap re-entry: сохранение контекста, резюмируем незаконченные проверки.
Многоисточниковость сигналов: документы + liveness + поведенческие/сетевые признаки.
Разделение целей: KYC (кто вы) ≠ SoF/SoW (откуда деньги) ≠ AML/санкции (доп. фильтры).
Explainability: короткие причины, понятные действия пользователя, предсказуемые сроки.
2) Риск-базовые уровни (примерная матрица)
3) Эталонный KYC-флоу (mobile-first)
1. Пороговый триггер (например, первый вывод) → экран с краткой причиной и выгодой: «Проверим личность, чтобы открыть выводы и поднять лимиты».
2. Выбор документа (паспорт/ID/водит.) с советом «что лучше» для страны.
3. Съемка: авто-крап, размытие фона, подсветка бликов/контраста, контроль резкости.
4. OCR/MRZ/NFC: мгновенный прогресс, не блокируем UI; при NFC — анимированная «поднесите документ к телефону».
5. Liveness: 3–4 простых действия (поворот головы/мигание) или пассивная liveness 2–3 кадра.
6. Авто-валидация (фоново) + видимый таймер SLA (например, «до 2 минут»).
7. Результат: + одобрено → лимиты/статус;нужно дополнить → ровно один пункт и примеры; - отказ → понятная причина и путь на апелляцию.
4) «Мягкие» шаг-апы (step-ups) и контекст
Geo-conflict (IP≠KYC) → запрос GPS/SIM или proof of address (L2).
High-risk BIN/эмитент → принудительная liveness при попытке депозита.
Velocity/мультиаккаунтинг → повторное селфи + SoF при выводе.
PEP/санкции (fuzzy) → L3 с SoF/SoW и ручной проверкой.
5) Микро-UX: как снижать трение
До шага: «Что приготовьте? ~2 минуты, паспорт/ID и хорошее освещение».
Захват документа: рамка-маска, детект бликов, зеленые чек-марки «фото читаемо/угол ровный».
Локальный OCR-preview: подсветить считанные поля для визуальной проверки.
NFC-подсказки: инфо по местоположению чипа для конкретной страны/бланка.
Liveness-навигация: простые задания без текста — пиктограммы + короткая фраза.
Retry без боли: повторить шаг, не теряя прогресс; лимит попыток с таймером.
Сторожок приватности: «Фото хранится зашифровано. Никаких данных в EXIF/логах UI».
6) Локализация и доступность
Полный перевод инструкций, примеров документов и допустимых форматов.
Поддержка RTL, крупных шрифтов, `aria-labels`, клавиатурной навигации.
Валидации по стране (формат адреса, ID-маски), для телефонов — E.164.
Примеры на местном языке: «Пример: ул. Пушкина, д. 10, кв. 5».
7) Приватность, хранение и согласия
Четкие согласия: цель (KYC/AML), срок хранения, права на удаление/апелляцию.
Минимизация данных: хранить токены/хэши где возможно, прятать PAN/EXIF.
Политика удаления/ретеншн: L0–L1 короче, L2–L3 дольше по закону/лицензии.
Audit-trail: кто/когда смотрел/решил; неизменяемые логи.
8) Инженерия: события и модель данных (минимум)
kyc.sessions (
kyc_id PK, user_id, level_target, started_at, status, provider, country, risk_score, conflict_flags, sla_eta_at
)
kyc.documents (
doc_id PK, kyc_id FK, type, side, ocr_json, mrz_ok, nfc_ok, quality_score, captured_at, storage_ref
)
kyc.liveness (
kyc_id FK, type, result, confidence, frames_ref, captured_at
)
kyc.sanctions_pep (
kyc_id FK, list, match_type, score, reviewed_by, reviewed_at, decision
)
kyc.proofs (
kyc_id FK, kind -- POA SOF SOW,
file_ref, parsed_json, status, requested_at, received_at, reviewer
)
kyc.decisions (
kyc_id FK, level_granted, result -- APPROVED MORE_INFO REJECTED,
reason_code, comment, decided_at
)
9) Политики в псевдо-DSL (пример)
yaml policy: "kyc_v2_risk_based"
triggers:
- name: "first_withdrawal" -> target_level: L1
- name: "limit_5k_month" -> target_level: L2
- name: "sanctions_fuzzyhit" -> target_level: L3 escalations:
- if: geo_conflict_score >= 2 then step: "POA"
- if: issuer_risk in ["high","unknown"] and method == "CARD" then step: "liveness"
- if: velocity_deposits_24h > 3 then step: "liveness"
timeouts:
L1: "PT10M" # ожидание авто-проверки
L2: "PT30M"
L3: "P3D"
ux:
show_timer: true resume_link: true
10) Метрики и дашборды
Конверсия/скорость
KYC Start → Auto-Pass → Manual Review → Approved
Median/95p time-to-KYC по уровням и странам
Auto-pass % (OCR/MRZ/NFC/liveness) и доля ручных
Качество/риск
Mismatch rate (IP≠KYC/SIM) и доля эскалаций
False Reject % (апелляции → реверс)
PEP/Sanctions hit rate и TAT на решение
UX/ошибки
Abandonment на шагах (Doc Capture, Liveness, Upload, Review)
Retry-rate и причины (блик/нерезкость/NFC fail)
Mobile vs Desktop: дельта успеха и времени
11) Алерты и пороги
Abandonment spike на шаге (рост > X bps за час)
OCR quality drop (quality_score p50 < порога)
NFC fail surge по стране/бланку
Auto-pass collapse: падение > Y% d/d
Manual backlog: TAT > SLA (красная зона)
Sanctions provider down: таймауты, переключение на бэкап
12) SQL-шаблоны
12.1. Воронка KYC
sql
SELECT stage, COUNT() AS users
FROM (
SELECT user_id, 'start' AS stage FROM kyc.sessions WHERE started_at BETWEEN:from AND:to
UNION ALL
SELECT user_id, 'doc_captured' FROM kyc.documents WHERE captured_at BETWEEN:from AND:to
UNION ALL
SELECT user_id, 'liveness_done' FROM kyc.liveness WHERE captured_at BETWEEN:from AND:to
UNION ALL
SELECT user_id, 'approved' FROM kyc.decisions WHERE decided_at BETWEEN:from AND:to AND result='APPROVED'
) s
GROUP BY stage ORDER BY 1;
12.2. Время до авто-верификации
sql
SELECT level_target,
PERCENTILE_CONT(0.5) WITHIN GROUP (ORDER BY EXTRACT(EPOCH FROM (COALESCE(decided_at, now()) - started_at))) AS t_median_sec,
PERCENTILE_CONT(0.95) WITHIN GROUP (ORDER BY EXTRACT(EPOCH FROM (COALESCE(decided_at, now()) - started_at))) AS t_p95_sec
FROM kyc.sessions
LEFT JOIN kyc.decisions USING (kyc_id)
WHERE started_at BETWEEN:from AND:to
GROUP BY 1;
12.3. Качество кадров и причины ретраев
sql
SELECT reason_code, COUNT() AS cnt
FROM (
SELECT CASE
WHEN quality_score < 0.6 THEN 'low_quality'
WHEN mrz_ok = FALSE THEN 'mrz_fail'
WHEN nfc_ok = FALSE THEN 'nfc_fail'
ELSE 'other'
END AS reason_code
FROM kyc.documents
WHERE captured_at BETWEEN:from AND:to
AND doc_id IN (SELECT doc_id FROM kyc.documents GROUP BY doc_id HAVING COUNT() > 1)
) t
GROUP BY 1 ORDER BY cnt DESC;
13) Анти-фрод сигналы (без «палок в колеса»)
Device-graph и повторяющиеся селфи/документы → тихая эскалация на L2/L3.
Geo-velocity (смена страны) → повторная liveness без повторного OCR.
BIN-geo mismatch → liveness на депозите, а не ломать весь KYC-флоу.
VPN/Proxy/Tor → мягкий запрос на альтернативный сигнал (GPS/SIM) до бана.
14) Best practices (коротко)
1. Дизайн под событие: KYC именно там, где пользователь получает ценность (депозит/вывод/лимит).
2. Авто-капчер + live-подсказки; OCR/NFC и пассивная liveness, где возможно.
3. Step-up только по сигналам (geo/conflict/velocity/санкции) и порогам сумм.
4. Сильный resume-опыт: «Продолжить с того же шага», глубинные ссылки в письмах/SMS.
5. Везде таймеры SLA и честные статусы.
6. Локализация/а11y: тексты, примеры, форматы, RTL.
7. Приватность: минимизация, шифрование, понятные согласия, ретеншн-политики.
8. Телеметрия и алерты по качеству (блики/размытие/NFC).
9. A/B тесты копирайта/инструкций/порядка шагов с guardrails по отказам.
10. Док-процедуры апелляций и ручной проверки с четким TAT.
15) Чек-лист внедрения
- Матрица уровней L0–L3, триггеры и шаг-апы.
- Провайдеры OCR/NFC/liveness/санкции с бэкапами.
- Экран инструкции + quality hints; авто-капчер, рамки, блик-детект.
- Пассивная liveness по умолчанию, активная — как fallback.
- Resume-механика, deep-links, напоминания.
- Локализация, RTL, а11y, примеры документов по стране.
- Приватность/согласия, ретеншн, audit-trail.
- Дашборды: конверсия шагов, auto-pass, TAT, качества кадров.
- Алерты: abandonment/OCR/NFC/auto-pass/backlog.
- Процедуры апелляций и ручных решений, SLA.
Резюме
KYC-UX с низким трением — это риск-базовая эскалация, «умные» технологии захвата (OCR/NFC/liveness), локализованные инструкции и сильный resume-опыт. Добавьте прозрачные сроки, минимизацию данных и предсказуемые шаг-апы — и вы одновременно повышаете конверсию депозитов/выводов, ускоряете соответствие и снижаете операционные издержки на ручные проверки.