Skip to main content

Tasks — Admin → Super Agent

Spec: admin-to-superagent · Mockup: sell-credit (modal), list, detail

Current status: applyAdminCashFunding exists (credits + note), modal on SuperAgentDetailPage (amount + note). No separate cash transaction table, form fields incomplete, no list/detail.

V1 scope: Submit only Paid in full — credits issued status. Detail view-only. No proof upload.

Shared UI: @kioskgaming/ui / portal-cash-settlement — Admin only wires API + route.


Phase 1 — Backend & data model

#TaskNotes
1.1Design cash_transactions tableSchema
1.2Migration + Sequelize model + indexesIndex: buyer_id, flow, status, received_at, created_at
1.3Enum / constants: flow, status, payment_methodV1 status: paid_full only on create
1.4Refactor superAgentCreditPurchaseBizService.applyAdminCashFundingAccept new payload; create cash_transaction + keep payment_transaction / credit wallet transfer
1.5Snapshot buyer costRate at time of saleStore in cash_transaction, do not re-read rate later
1.6Record performed_by (admin id) + create audit logMinimum: created_at, admin id in metadata
1.7API POST /api/admin/super-agents/:id/cash-credits (or extend existing cash funding endpoint)Body: credits, cash_received, payment_method, received_at, external_ref?, note?
1.8ValidationSA active; credits > 0; cost rate > 0; cash_received > 0; payment_method enum; valid received_at
1.9API GET /api/admin/cash-transactionsList + filter flow/status/payment_method/date/search; pagination
1.10API GET /api/admin/cash-transactions/:idView-only detail; include linked credit transaction summary
1.11(Optional V1) Export CSV from list APIMatch current filters
1.12Unit tests biz service + controllerHappy path, invalid SA, zero credits, snapshot cost rate

Phase 2 — UI package (packages/ui)

Details: ui-package-cash-settlement. Do before or parallel with Admin wire Phase 2.

#TaskNotes
UI.1–UI.7Module portal-cash-settlementModal, list ledger, detail view-only
UI.8Export from @kioskgaming/uiSellCreditsCashModal, PortalCashTransactionsLedger, PortalCashTransactionDetail

Phase 3 — Admin wire (integration)

#TaskNotes
3.1Super Agent detail: open SellCreditsCashModalflow=admin_super_agent, buyer = SA being viewed
3.2Hook useAdminSuperAgentCashCredits + API clientMap form → POST cash-credits
3.3Route /cash-transactions + sidebar menuRender PortalCashTransactionsLedger
3.4Hook useAdminCashTransactions (list) + export CSVInject onFetch / onExport
3.5Route /cash-transactions/:idRender PortalCashTransactionDetail
3.6Submit success → refresh SA balance; optional navigate to detail

Do not reimplement form/table/detail in kioskgaming_admin — only compose from package.

Reference: SuperAgentDetailPage.tsx (replace old amount+note modal)


Phase 4 — QA & docs

#TaskNotes
4.1Manual test checklist Admin → SAModal, wallet +credit, list, detail
4.2Confirm online USD wallet unchangedRegression payment tx audit
4.3Update spec if implementation divergesFile admin-to-superagent.md

Dependency for other flows

Phase 1 (table + list/detail API) shared by Super Agent → Agent and Agent → Shop — extend flow enum when implementing those flows.