feat(gateway,account): возврат вступительного взноса при отказе совета #97
Reference in New Issue
Block a user
Delete Branch "feat/registration-refund"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Stacked на #95 (feat/registration-fsm). После последовательного мерджа (#91→#95→dev) перетаргетится на dev.
Суть
При отказе совета в приёме пайщика взнос по фондам ещё не разносился (confirmreg не было), но деньги физически у кооператива. Заводим исходящий платёж-возврат в реестр.
Зависимость
Триггер declinereg (немедленный отказ по негативному консенсусу / истечению срока) даёт PR #94 (feat/soviet-negative-consensus) — мерджится в dev отдельно. Эта ветка #94 НЕ содержит (история чистая); для сквозного e2e нужен #94 в dev.
🤖 Generated with Claude Code
@@ -0,0 +30,4 @@@Inject(CANDIDATE_REPOSITORY) private readonly candidateRepository: CandidateRepository,) {}@OnEvent('action::registrator::declinereg')тут через константы из Cooptypes подписываться надо!! Смотри как в других местах и запомни себе уже
В БД registration_hash хранится lowercase (sha256().digest('hex')), а из цепи checksum256 в declinereg.registration_hash приходит UPPERCASE — exact-match findOneBy не находил кандидата, возврат взноса пропускался с warn. Нормализуем входящий хэш .toLowerCase() в findByRegistrationHash. Проверено на voskhod: candidate czeudubzzuql имеет registration_hash f25ca396... (lowercase), warn пришёл с F25CA396... (uppercase) — тот же хэш. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>