Перейти к содержанию

BOT / Комплаенс — Q&A

Подсвеченный Q&A для регулятора Bank of Thailand (BOT) и комплаенс-команды OneWallet (e-money кошелёк, THB). Формат: Вопрос → Как реализовано → Статус → Ссылка.

Легенда статусов: ✅ реализовано · ⏳ в плане · ⚠️ открыто (нет в коде).

На какие вопросы отвечает

  • Шифруются ли персональные данные (PII) клиентов и каким алгоритмом?
  • Как устроены KYC/AML и уровни (tiers), кто видит расшифрованные данные?
  • Где задаются лимиты переводов и работает ли step-up аутентификация?
  • Сколько и где хранятся данные операций, есть ли аудиторский след?
  • Чем гарантируется целостность денег (никаких потерянных/задвоенных средств)?
  • Что из требований BOT 18/2568 ещё не закрыто (root/jailbreak, cert pinning и т.д.)?

Базовые документы: ответ по BOT-уведомлению — bot-18-2568/01-response.md, открытый план — bot-18-2568/03-todo.md, вопросы по плану счетов — accountant-questions.md.

1. Защита PII (персональные данные)

Вопрос Как реализовано Статус Ссылка
Шифруются ли PII в БД? AES-256-GCM, blob [1B version][12B nonce][ciphertext+16B GCM tag], пакет cryptography. Поле user_profile.encryptedPii, флаг encryptPii=true onewallet_base_server/.../services/pii/pii_crypto_service.dart · adr/0005-pii-encryption.md
Как ищут по телефону/нац. ID без расшифровки? HMAC-SHA256 с pepper (piiPhoneHashPepper, piiNatIdHashPepper) — детерминированный хеш для поиска .../services/pii/pii_hash_service.dart
Видит ли оператор полные данные? По умолчанию — маскирование; полная расшифровка — только по явному запросу оператора .../services/pii/pii_mask_service.dart, pii_decryption_service.dart
Где хранятся ключи? passwords.yaml: piiEncryptionKey, piiPhoneHashPepper, piiNatIdHashPepper (не в репозитории) dev/05-security-and-auth.md

2. KYC / AML и уровни (tiers)

Вопрос Как реализовано Статус Ссылка
Как проходит KYC? OCR документа (Gemini/Ollama) + face matching (CompreFace), очередь BullMQ в kyc-service; файлы — в Garage S3 (bucket kyc-prod-data) dev/06-storage-and-kyc.md
Liveness для high-value операций? Face match есть; liveness-проверка по высоким суммам — в плане bot-18-2568/01-response.md §1.4 · 03-todo §A-9, C-2.11
Точные значения daily/monthly по Tier 1 / Tier 2? Механизм лимитов есть (pm.limit_rule); конкретные пороги tiers согласуются с BOT ⚠️ bot-18-2568/03-todo.md §A-6

3. Лимиты и step-up аутентификация

Вопрос Как реализовано Статус Ссылка
Где задаются лимиты переводов? Таблица pm.limit_rule (DAILY/MONTHLY окна, по operationType/channel/тегам); проверка при каждом intent payment-manager/src/limits/check-limits.ts · business/05-limits-and-fees.md
Есть ли step-up на крупные/рисковые операции? pm.auth_policies + POST /policies/evaluate: уровни NONE/PIN/OTP/BIOMETRIC/KYC_UPLIFT; условия amount_gte, daily_cumulative_gte, new_payee, currency ✅ (инфра) payment-manager/src/limits/evaluate-policy.ts
Конкретные пороги step-up (per-tx / daily)? Предложение 50 000 / 200 000 THB — на согласовании с compliance/legal ⚠️ bot-18-2568/03-todo.md §A-5
Защита приложения на устройстве? PIN 6 цифр + биометрия (local_auth) + auto-lock 5 мин (требование НацБанка) dev/05-security-and-auth.md

Пример step-up. Платёж 75 000 THB новому мерчанту: POST /policies/evaluate находит политику amount_gte=50000 → возвращает BIOMETRIC. Без подтверждения intent не переходит из VALIDATED в AUTHORIZED.

Сноска про operationType и расчёт комиссий. Всего в системе 11 типов операций, но эндпоинт предпросмотра комиссий POST /intents/quote поддерживает не все — его z.enum (payment-manager/src/intent/quote.ts) не включает, в частности, NFC_CHARGE. То есть intent такого типа создать можно, а получить по нему quote — нет.

4. Хранение данных, retention, аудит

Вопрос Как реализовано Статус Ссылка
Где журналируются события операций? pm.intent_event (полный журнал переходов по каждому intent), pm.tx_history, pm.outbox_event dev/03-data-and-schemas.md
Можно ли восстановить полный путь операции? trace_id = intent_id присутствует в каждом платёжном событии в логах и в intent_event dev/04-payments-and-ledger.md
Жизненный цикл данных пользователя? active → archive → delete + cleanup-кроны (Serverpod FutureCall) dev/05-security-and-auth.md
Retention attestation-логов / user_device? Предложение 1 год — в плане, поля ещё не введены bot-18-2568/03-todo.md §A-10

5. Целостность денег (ledger)

Вопрос Как реализовано Статус Ссылка
Чем гарантируется, что деньги не теряются/не дублируются? TigerBeetle 0.17.4 (двухфазные pending/post переводы); главный инвариант transit.balance = 0 adr/0001-tigerbeetle-ledger.md
Кто может писать в ledger? Только Payment Manager (HMAC POST /intents); admin-panel — read-only; Auth Center и PSP прямого доступа не имеют dev/04-payments-and-ledger.md
Как защищены внутренние вызовы? Единый HMAC-SHA256: sig = HMAC(secret, ${ts}\n${METHOD}\n${PATH}\n${sha256(body)}), окно ±60с, timing-safe сравнение payment-manager/src/auth/hmac.ts · adr/0002-single-hmac-auth.md
Воспроизводимость счетов? TB account id = uuidv5(name, namespace) — детерминирован и верифицируем без доп. state adr/0001-tigerbeetle-ledger.md

Состояния intent (поток денег для INTERNAL P2P — синхронно в одном запросе):

flowchart LR
  CREATED --> VALIDATED --> AUTHORIZED --> SETTLING --> SETTLED
  VALIDATED -. step-up .-> MANUAL_REVIEW
  AUTHORIZED -. отказ PSP .-> FAILED
  CREATED -. отмена/таймаут .-> CANCELED & EXPIRED

6. Открытые пункты BOT 18/2568 (нет в коде)

Вопрос Статус в коде Отметка Ссылка
Certificate pinning (TLS) В исходниках приложений не найден; нужен primary + backup pin и процедура ротации ⚠️ bot-18-2568/03-todo.md §C-2.19
Root/Jailbreak detection Есть в legacy onewallet_base_flutter/lib/main.dart (flutter_jailbreak_detection, hard-block в release); в активных one_loop_app / one_merchant_app отсутствует ⚠️ 03-todo §C-3.10 · onewallet_base_flutter/lib/main.dart:47-55
Play Integrity / App Attest (device attestation) Не реализовано bot-18-2568/03-todo.md §C-2.6, C-3.4–3.6
Один пользователь на устройство (device binding) Не реализовано 03-todo §C-2.1, C-3.1
Блокировка устаревших версий приложения Гейт версии есть в onewallet_base_flutter (app_version_gate); единая серверная политика — в плане 03-todo §C-2.7, C-3.15
Анти-tampering / обфускация / FLAG_SECURE В плане (Фаза 0–1) bot-18-2568/03-todo.md §C-3.7–3.13
TB-CERT feed (high-risk устройства) Не реализовано; требует юр. подписки 03-todo §A-4, C-2.12

Полный трекинг закрытия — bot-18-2568/03-todo.md (фазы 0–5, оценка 8–10 недель). Вопросы плана счетов / сверки для бухгалтера — accountant-questions.md.

См. также: service-map.md, TIMELINE.md, pm-report.md.