[CL-1176] E2E webhook-settlement и income-distribution (шестой проход) #1190

Merged
andrei merged 1 commit from feature/claude-cl1176-webhook-distribution-e2e into master 2026-07-23 06:07:44 +00:00
Owner

Что сделано

Шестой адверсариальный проход: 7 opt-in интеграционных сценариев (гейт E2E_DATABASE_URL, в CI skip) для последних непокрытых money-путей:

Webhook settlement (fulfillPayment, провайдер NOWPAYMENTS — без Stripe API):

  • W1: SHARE_PURCHASE — ownership 10@1025, soldShares +10, пара строк SHARE_PURCHASE(−1025)+DEPOSIT(+1025) (W10-B2 net-zero ledger), payment COMPLETED+transactionId, внутренний баланс не тронут.
  • W2: идемпотентность — повторная доставка webhook ничего не удваивает.
  • W3: maxSharesPerUser exceeded — soft-reserve восстановлен (90→100), деньги конвертированы в депозит на баланс, долей нет.
  • W4: KYC не VERIFIED — 403, платёж остаётся PENDING, ноль зачислений.

Income distribution (dailyDistributeAllObjects + creditWeeklyUsers):

  • D1: точные суммы по долям — monthlyNet 31000, июль 31 день, 10 долей → 100/долю: держатели 6/4 получают 600/400, INCOME_ACCRUAL-строки, accruals credited=true.
  • D2: идемпотентность дня — повторный запуск не удваивает балансы (accrualCount 0).
  • D3: WEEKLY-держатель копит (credited=false, баланс 0) и получает кредит только при weekly-флаше.

Зачем

Замыкает E2E-покрытие всех критичных money-путей платформы: P2P-цикл (#1186–#1188) + fiat/crypto settlement + дивиденды. Багов в путях НЕ найдено — правки только тестовые (обязательный idempotencyKey в seed, user_risk_scores в cleanup: AML-side-effect fulfillPayment ломал FK RESTRICT при пере-seed).

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

7/7 passed на эфемерной БД из чистого prisma migrate deploy; повторный прогон 7/7 (перезапускаемость); tsc чист; eslint файла 0 warnings.

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

  • Провайдер NOWPAYMENTS выбран, чтобы не мокать Stripe API (verifyStripeAmount — только STRIPE-ветка); STRIPE-специфичная verify-логика покрыта юнитами, не этим E2E.
  • Числа D-сценариев зависят от 31-дневного месяца — дата зафиксирована ('2026-07-15'), от системного времени не зависят.
## Что сделано Шестой адверсариальный проход: 7 opt-in интеграционных сценариев (гейт `E2E_DATABASE_URL`, в CI skip) для последних непокрытых money-путей: **Webhook settlement (`fulfillPayment`, провайдер NOWPAYMENTS — без Stripe API):** - W1: SHARE_PURCHASE — ownership 10@1025, soldShares +10, пара строк SHARE_PURCHASE(−1025)+DEPOSIT(+1025) (W10-B2 net-zero ledger), payment COMPLETED+transactionId, внутренний баланс не тронут. - W2: идемпотентность — повторная доставка webhook ничего не удваивает. - W3: maxSharesPerUser exceeded — soft-reserve восстановлен (90→100), деньги конвертированы в депозит на баланс, долей нет. - W4: KYC не VERIFIED — 403, платёж остаётся PENDING, ноль зачислений. **Income distribution (`dailyDistributeAllObjects` + `creditWeeklyUsers`):** - D1: точные суммы по долям — monthlyNet 31000, июль 31 день, 10 долей → 100/долю: держатели 6/4 получают 600/400, INCOME_ACCRUAL-строки, accruals credited=true. - D2: идемпотентность дня — повторный запуск не удваивает балансы (accrualCount 0). - D3: WEEKLY-держатель копит (credited=false, баланс 0) и получает кредит только при weekly-флаше. ## Зачем Замыкает E2E-покрытие всех критичных money-путей платформы: P2P-цикл (#1186–#1188) + fiat/crypto settlement + дивиденды. Багов в путях НЕ найдено — правки только тестовые (обязательный `idempotencyKey` в seed, `user_risk_scores` в cleanup: AML-side-effect fulfillPayment ломал FK RESTRICT при пере-seed). ## План тестирования 7/7 passed на эфемерной БД из чистого `prisma migrate deploy`; повторный прогон 7/7 (перезапускаемость); tsc чист; eslint файла 0 warnings. ## Где могу ошибаться - Провайдер NOWPAYMENTS выбран, чтобы не мокать Stripe API (verifyStripeAmount — только STRIPE-ветка); STRIPE-специфичная verify-логика покрыта юнитами, не этим E2E. - Числа D-сценариев зависят от 31-дневного месяца — дата зафиксирована ('2026-07-15'), от системного времени не зависят.
[CL-1176] E2E-сценарии webhook-settlement и income-distribution на реальной БД
All checks were successful
CI / Telegram Mini App (pull_request) Successful in 1m52s
CI / Python SDK (pull_request) Successful in 27s
CI / Contracts (pull_request) Successful in 2m37s
CI / Secrets Scan (pull_request) Successful in 21s
CI / Prisma Migrate Gate (pull_request) Successful in 1m45s
CI / API (pull_request) Successful in 18m51s
CI / App (pull_request) Successful in 21m5s
fb6fc09ac4
Семь opt-in интеграционных сценариев (гейт E2E_DATABASE_URL): fulfillPayment
SHARE_PURCHASE — зачисление ownership/soldShares, пара ledger-строк
SHARE_PURCHASE(−total)+DEPOSIT(+total) (W10-B2 net-zero), идемпотентность
повторной доставки webhook, maxSharesPerUser-ветка (restore soft-reserve +
конверсия в депозит на баланс), KYC-блок (403, PENDING сохранён);
dailyDistributeAllObjects — точные суммы по долям (6/4 доли → 600/400 при
monthlyNet 31000/31дн), INCOME_ACCRUAL-строки, идемпотентность дня,
WEEKLY-отложка с кредитом только при creditWeeklyUsers. Все зелёные с
первого содержательного прогона — багов в путях не найдено; правки только
тестовые (seed idempotencyKey, user_risk_scores в cleanup — AML side-effect
fulfillPayment). Повторный прогон подтверждает перезапускаемость.
andrei scheduled this pull request to auto merge when all checks succeed 2026-07-23 06:05:48 +00:00
andrei merged commit 944509c0c4 into master 2026-07-23 06:07:44 +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!1190
No description provided.