What this surface shows
Transactions / Casino is the Backoffice work surface for game transaction rows such as bets, wins, rollbacks, and free spins.
It combines:
- a real-time table view
- a monthly analytics view calculated from the loaded row data
- filter controls
- summary cards derived from the loaded rows
Use it when you need to inspect how gaming transactions are distributed by game, provider, player, action type, or time.
How to read it
The page has two modes:
Real-Time ViewMonthly Analytics
In Real-Time View, the main operator surface is the table. The rows come from the casino transaction row source. The cards above the table summarize the currently loaded row set, not a separate full-result aggregate.
In Monthly Analytics, the page uses the same casino-transactions list request in analytics mode and then derives monthly charts, provider shares, status distribution, and headline cards from those rows. The mounted page does not use a separate monthly aggregate route.
The table helps answer:
- which player performed the transaction?
- which game and provider are involved?
- was this a bet, win, rollback, or free spin?
- what was the real amount versus bonus amount?
Filters that change the list
The visible filters are:
- Search email
- Currency
- Type
- Status
- Provider
- Date start
- Date end
Server-side filtering is applied before the page calculates cards or analytics. Date, status, email, user, currency, transaction type, provider, and transaction id filters are translated into the row query first.
Common questions
Does this page show banking transactions?
The mounted list route is for casino-side game transaction rows. The row source also supports a unified financial-events mode for other callers, but this screen does not pass includeFinancialEvents=true, so the standard operator page does not mix banking rows into the table.
Why do the top cards change when I change the table filters?
Because the summary cards are calculated by the page from the loaded transaction list. Total Transactions uses the loaded row count, while the table badge and pagination use the full filtered result count.
Why can email search pull older rows than the selected date range?
Because the list hook resets startDate to 2022-01-01 whenever email is non-empty. In practice, email search intentionally widens the time window beyond the currently selected dates.
Why do the status filter values differ from the row badges?
Because the filter sends string values like pending, completed, failed, and rollback, while the loaded row data stores numeric status codes that the page maps to Pending, Complete, Failed, and Rollback.
What is the difference between Monthly Analytics and the table?
The table is row-level inspection. The analytics mode is a chart/report view derived from a wider list request. It is useful for directionality, provider share, and status distribution, but it is not a separate finance/reporting aggregate.
Known caveats
- The real-time cards convert bet/win/average amounts to EUR using the current currency list. EUR rows are used as-is; non-EUR rows are divided by the currency exchange rate when available; rows with a missing rate fall back to the original amount. If the currency list is not loaded yet, those card sums can be temporarily incomplete.
- The real-time card display currency is hard-coded to EUR after conversion.
Monthly Analyticsuses raw row amounts in the row currency and then formats chart values with the most common row currency. Do not compare those chart amounts directly to the real-time EUR cards without checking currency mix.- The analytics header says
Last 3 Months, while the headline card label saysTotal Transactions (6 Months). The traced hook default builds the analytics request and month buckets with a 3-month analysis window unless a differentmonthsToAnalyzevalue is passed. Average Monthly Profitdivides analyticsprofitLossby6, even though the default analytics buckets are 3 months. Treat it as the mounted page formula, not a full-period monthly average.Status Healthsearches for an analytics status label namedComplete. Standard rows expose numeric status codes, and the analytics reducer can keep those as string keys such as1, so the card can show0%even when completed rows exist.- The dedicated detail route is
/transactions/casino/[transactionId]. - The row component also has an expandable inline details panel, so operators currently have both inline and routed detail patterns on this surface.
- CSV export calls the same row service with
csvDownload=true. The custom export is visible only for thewincrafttheme and adds bet/win timestamp helper columns.
The row source, filters, CSV export, sanitizer, summary cards, and monthly analytics formulas have been traced. Summary cards and monthly analytics are display calculations from returned rows, so they should be read as page-level summaries rather than independent finance aggregates.