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 при виведенні.
РЕР/санкції (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. Локалізація/а11у: тексти, приклади, формати, RTL.
7. Приватність: мінімізація, шифрування, зрозумілі згоди, ретеншн-політики.
8. Телеметрія та алерти за якістю (відблиски/розмиття/NFC).
9. A/B тести копірайту/інструкцій/порядку кроків з guardrails по відмовах.
10. Док-процедури апеляцій і ручної перевірки з чітким TAT.
15) Чек-лист впровадження
- Матриця рівнів L0-L3, тригери і крок-апи.
- Провайдери OCR/NFC/liveness/санкції з бекапами.
- Екран інструкції + quality hints; авто-капчер, рамки, блік-детект.
- Пасивна liveness за замовчуванням, активна - як fallback.
- Resume-механіка, deep-links, нагадування.
- Локалізація, RTL, а11у, приклади документів по країні.
- Приватність/згоди, ретеншн, audit-trail.
- Дашборди: конверсія кроків, auto-pass, TAT, якості кадрів.
- Альберти: abandonment/OCR/NFC/auto-pass/backlog.
- Процедури апеляцій і ручних рішень, SLA.
Резюме
KYC-UX з низьким тертям - це ризик-базова ескалація, «розумні» технології захоплення (OCR/NFC/liveness), локалізовані інструкції і сильний resume-досвід. Додайте прозорі терміни, мінімізацію даних і передбачувані крок-апи - і ви одночасно підвищуєте конверсію депозитів/висновків, прискорюєте відповідність і знижуєте операційні витрати на ручні перевірки.