fix(gateway): исходящий платёж скрыт от кассира до решения совета #21
Reference in New Issue
Block a user
Delete Branch "fix/wallet-withdraw-gateway-timing"
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?
Summary
Платёж по заявке на возврат паевого взноса сейчас создаётся в gateway PG со status=PENDING сразу при подаче заявки пайщиком — кассир видит заявку как готовую к выплате до того как совет её утвердил.
Фикс:
PaymentStatusEnum.AWAITING_AUTHORIZATION(«Ожидает решения совета»).gateway.interactor.ts::createWithdrawinitial status переключён с PENDING на AWAITING_AUTHORIZATION.WithdrawAuthorizationListenerслушает on-chain действия и переключает статус:action::wallet::authwthd→ AWAITING_AUTHORIZATION → PENDING (совет авторизовал, кассир может выплачивать).action::wallet::declinewthd→ AWAITING_AUTHORIZATION → CANCELLED.Why
Жалоба пользователя: «исходящий платёж летит в gateway вместе с предложением повестки, раньше времени». Совет ещё не голосовал, а кассир уже видит «готовую к выплате» заявку.
Out of scope
gateway::outcomes(когда parser2 ловит on-chain createoutpay delta) — отдельной задачей. Сейчас row создаётся сразу при createWithdraw, но скрыт от кассира статусом — это purely-statusный фикс.Test plan
Pre-mature payment row: при wallet.interactor.ts::createWithdraw платёж сразу появлялся в gateway PG со status=PENDING — кассир видел заявку как готовую к выплате ДО того как совет её утвердил. Минимальный фикс без переписывания create/sync-цепочки: - PaymentStatusEnum += AWAITING_AUTHORIZATION (с лейблом «Ожидает решения совета»). Initial status в gateway.interactor.createWithdraw переключён с PENDING на AWAITING_AUTHORIZATION. - Новый WithdrawAuthorizationListener в gateway.module: - on-chain `wallet::authwthd` (совет авторизовал) → AWAITING_AUTHORIZATION → PENDING (кассир увидит и сможет подтвердить). - on-chain `wallet::declinewthd` (совет/Gateway отказал) → AWAITING_AUTHORIZATION → CANCELLED. UI кассира (desktop) должен в отдельном PR фильтровать AWAITING_AUTHORIZATION из списка платежей (текущие компоненты, скорее всего, и так не показывают неизвестный статус). PAYMENT_STATUS_LABELS подхватится автоматически. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>