[CL-1176] E2E payout-путей: bank + crypto (восьмой проход) #1196

Merged
andrei merged 1 commit from feature/claude-cl1176-payout-e2e into master 2026-07-23 14:35:23 +00:00
Owner

Что сделано

Восьмой адверсариальный проход: 9 opt-in интеграционных сценариев payout-путей (в CI бегут шагом «E2E integration tests» автоматически):

Bank (requestPayout):

  • P1: happy 2000 — реальный OTP (bcrypt-hash в БД, generateOtp→verifyOtp), payout PENDING, WITHDRAWAL −2000 PENDING, travel-rule запись SEPA + TFR-штамп транзакции (regulatoryRegime, travelRuleStatus COLLECTED, travelRuleRecordId).
  • P2: 500 ниже TR-порога 1000 — без travel-rule, regulatoryRegime = [] — живая верификация default-фикса E2E-2 на настоящем write-пути.
  • P3: 30000 — PENDING_REVIEW (>25k), деньги удержаны, AML inline-screen прогнан реально.
  • P4: дневной лимит — 3 запроса проходят, 4-й 429, ровно 3 payout-строки.
  • P5/P6: невалидный IBAN checksum / insufficient funds — отказ без денежных следов.
  • P7: OTP-гейт — 400 без OTP, 401 на неверный код (реальная bcrypt-проверка).

Crypto (requestCryptoPayout):

  • C1: happy 1500 — payoutType CRYPTO, cryptoAddress/chain base, travel-rule CRYPTO (порог 0), баланс −1500.
  • C2: EIP-55 checksum mismatch — отказ до денег.

Зачем

Последние непокрытые money-выходы платформы. Багов не найдено — пути написаны по канону (withMoneyTransaction/Serializable, TOCTOU-guards внутри tx, PII-шифрование). Тестовый фикс — ENCRYPTION_KEY (PII-интерсептор шифрует IBAN/адреса, отказывается писать plaintext).

План тестирования

9/9 passed; все 7 int-файлов серийно на одной БД: 38/38; tsc чист; eslint 0. CI этого PR прогонит все 38 шагом E2E.

Где могу ошибаться

  • AML inline-screen в P3 бежит по пустой БД — flag-ветка (amlFlagged) не покрыта позитивно; требует сложного seed санкционных данных, покрыта юнитами aml/.
  • SEPA-AUTO-02 (initiateStripePayout) отключён NODE_ENV=test — авто-выплата вне скоупа E2E.
## Что сделано Восьмой адверсариальный проход: 9 opt-in интеграционных сценариев payout-путей (в CI бегут шагом «E2E integration tests» автоматически): **Bank (`requestPayout`):** - P1: happy 2000 — реальный OTP (bcrypt-hash в БД, generateOtp→verifyOtp), payout PENDING, WITHDRAWAL −2000 PENDING, travel-rule запись SEPA + TFR-штамп транзакции (regulatoryRegime, travelRuleStatus COLLECTED, travelRuleRecordId). - P2: 500 ниже TR-порога 1000 — без travel-rule, `regulatoryRegime = []` — живая верификация default-фикса E2E-2 на настоящем write-пути. - P3: 30000 — PENDING_REVIEW (>25k), деньги удержаны, AML inline-screen прогнан реально. - P4: дневной лимит — 3 запроса проходят, 4-й 429, ровно 3 payout-строки. - P5/P6: невалидный IBAN checksum / insufficient funds — отказ без денежных следов. - P7: OTP-гейт — 400 без OTP, 401 на неверный код (реальная bcrypt-проверка). **Crypto (`requestCryptoPayout`):** - C1: happy 1500 — payoutType CRYPTO, cryptoAddress/chain base, travel-rule CRYPTO (порог 0), баланс −1500. - C2: EIP-55 checksum mismatch — отказ до денег. ## Зачем Последние непокрытые money-выходы платформы. Багов не найдено — пути написаны по канону (withMoneyTransaction/Serializable, TOCTOU-guards внутри tx, PII-шифрование). Тестовый фикс — ENCRYPTION_KEY (PII-интерсептор шифрует IBAN/адреса, отказывается писать plaintext). ## План тестирования 9/9 passed; все 7 int-файлов серийно на одной БД: 38/38; tsc чист; eslint 0. CI этого PR прогонит все 38 шагом E2E. ## Где могу ошибаться - AML inline-screen в P3 бежит по пустой БД — flag-ветка (amlFlagged) не покрыта позитивно; требует сложного seed санкционных данных, покрыта юнитами aml/. - SEPA-AUTO-02 (initiateStripePayout) отключён NODE_ENV=test — авто-выплата вне скоупа E2E.
[CL-1176] E2E-сценарии payout-путей: bank + crypto на реальной БД (восьмой проход)
All checks were successful
CI / Contracts (pull_request) Successful in 2m34s
CI / Telegram Mini App (pull_request) Successful in 1m29s
CI / Python SDK (pull_request) Successful in 28s
CI / Secrets Scan (pull_request) Successful in 12s
CI / Prisma Migrate Gate (pull_request) Successful in 1m41s
CI / API (pull_request) Successful in 18m59s
CI / App (pull_request) Successful in 20m0s
4972b05a35
Девять opt-in интеграционных сценариев (гейт E2E_DATABASE_URL, в CI бегут
шагом E2E integration tests): bank happy 2000 с реальным OTP (bcrypt в БД),
travel-rule записью SEPA и TFR-штампом транзакции; 500 ниже порога — без
travel-rule, regulatoryRegime default [] (живая верификация фикса E2E-2);
30000 — PENDING_REVIEW с удержанием денег; дневной лимит 3/день (4-й 429);
невалидный IBAN checksum и insufficient funds — отказ без следов; OTP-гейт
(400 без OTP, 401 на неверный код); crypto happy 1500 — payoutType CRYPTO,
адрес/chain, travel-rule CRYPTO (порог 0); EIP-55 checksum mismatch — отказ.
Багов в путях не найдено; тестовый фикс — ENCRYPTION_KEY для PII-интерсептора
(шифрование IBAN/адресов). Все 7 int-файлов серийно: 38/38.
andrei scheduled this pull request to auto merge when all checks succeed 2026-07-23 14:32:42 +00:00
andrei merged commit 93c1330c5b into master 2026-07-23 14:35:23 +00:00
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
europa-tech-srl/europatech!1196
No description provided.