Operator guideENtransactionskycdocumentsactions

Transactions / KYC

Action-heavy KYC document queue exposed under the transactions area for document review, verification, re-request, download, and third-party checks.

Reader view

Clean portal guidance

This page keeps the operator explanation, field and action descriptions, and screenshots visible without exposing repo paths, raw sidecars, or editorial-only implementation details.

Narrative content

Page body

What this surface shows

Even though the route lives under transactions, this page is the Backoffice document-verification queue.

Operators use it to:

  • review uploaded customer documents
  • preview or download files
  • run or inspect third-party verification
  • approve, reject, cancel, or re-request document flow

How to read it

This is an action-heavy queue rather than a simple list. The Action column is the main operator workspace.

The page also includes:

  • tag-driven search
  • direct navigation to the player profile
  • third-party verification state and history
  • document preview links
  • route-level pagination with page sizes up to 10,000

Action and filter behavior

  • Search by tag is a staged text input; the queue only changes when Apply Filters is pressed or the user confirms the active tag chip
  • Clear resets both the text input and the active tag filter
  • the route-level search is tag-only. It does not search by document name, user id, status, or provider
  • the Action column is status-driven:
    • Pending rows expose Approve Document and Reject Document
    • Requested rows expose Cancel Document
    • non-Rejected rows outside Requested expose Re-request Document
  • Verify by 3rd Party is shown only for bynn documents
  • Manually verify via Bynn is shown only for non-bynn documents
  • 3rd Party Verification History only appears when a row already has Bynn or SumSub history
  • Download Document only appears when the row has a latest document URL

Common questions

Why is KYC inside Transactions?

Because this route is grouped under the transaction navigation in the current Backoffice structure, even though the component is shared with player-document tooling.

Why is Add Document missing here but visible on player-scoped KYC?

/transactions/kyc mounts the shared PlayerKYCSettings component without a player context, so the Add Document button is intentionally hidden on this route. That helper is only rendered when the same component is used inside a player-scoped workspace with player.userId.

Which actions actually change workflow state?

The state-changing actions are:

  • approve
  • reject
  • cancel request
  • re-request document
  • request document

The other actions are inspection helpers such as preview, download, history, or third-party verification.

Why do some rows show a 3rd-party report and others do not?

The dedicated View Report link is only shown for rows where documentName === 'bynn'.

The frontend first resolves a dossier id through GET /api/admin/3rd-party-dossier-id and then opens the external Bynn dashboard for that dossier.

Why can the 3rd-party verification column look inconsistent?

The Bynn values are part of the live admin/backend flow, but sumsubVerificationStatus and sumsubVerificationDate are still injected as placeholder data in UserController.getUserDocument for testing.

Treat the combined 3rd Party Verification column as:

  • reliable for live Bynn-backed state
  • not yet a fully authoritative production source for SumSub state

Known caveats

  • This route reuses the player KYC component under the transactions navigation.
  • The action column mixes read-only helpers and mutation controls.
  • Some actions depend on document type and current status.
  • The route-level search is a tag substring filter built from joined users.tags, not a generic queue search over all visible columns.
  • The visible Verify by 3rd Party icon in the row action stack is currently a placeholder handler. The live Bynn verification transport is owned by the approve/manual verification modals.
  • View Report is an external-dashboard lookup, not an in-app workflow state change.

Verification status

  • status: verified_backend
  • last verified: 2026-04-18
  • note: queue filters, row actions, request/cancel/verify/download services, and Bynn third-party transport edges are traced; the remaining caution is that SumSub status/date values are still controller-injected placeholder data
Operator actions

Screen actions

action

Apply Filters

Runs the queue filter using the entered tag, or via tag-chip click.

action

Clear

Clears the current tag filter.

Operator actions

Row actions

action

Open Player

Opens the linked player profile from the User ID button.

action

Preview Document

Opens the latest document URL in a new tab when available.

action

Download Document

Downloads the stored document file.

action

View Report

Resolves the Bynn dossier id and opens the external Bynn dashboard in a new tab when the row supports it.

action

Verify by 3rd Party

Visible on Bynn rows, but the current row-level handler is a placeholder; the live Bynn submission flow is owned by the approve/manual verification modals.

action

Manually verify via Bynn

Opens manual verification for non-bynn documents.

action

3rd Party Verification History

Opens the history modal for prior verification attempts.

action

Approve Document

Moves pending documents to approved state.

action

Reject Document

Moves pending documents to rejected state.

action

Cancel Request

Cancels an active request in status `4`.

action

Re-request Document

Opens the modal to request the document again.

Calculation notes

Calculations

calculation

Tag search apply flow

Explains why typing into the field alone does not refresh the queue.

Source Fields
searchTagInput, searchTag
Transform
The route keeps the typed tag in `searchTagInput` until `Apply Filters` copies it into `searchTag`. The backend request only receives `searchTag`.
calculation

Tag search backend filter

Clarifies that this is a tag-only queue filter, not a generic search across document ids, player ids, or statuses.

Source Fields
searchTag, users.tags
Transform
`GetUserDocumentService` joins `users.tags`, converts them to a comma-separated string, then performs case-insensitive substring filtering across split tag tokens before paginating the filtered result.
calculation

Row action status gating

Explains why the action stack changes from row to row.

Source Fields
item.status, item.documentName, item.bynnVerificationHistory, item.sumsubVerificationHistory, item.documentUrl
Transform
`Pending` rows show approve/reject. `Requested` rows show cancel-request. Rows outside `Rejected` and `Requested` show re-request. Bynn verification/report controls depend on `documentName === 'bynn'`, and history/download controls depend on row data availability.
calculation

Transactions route button suppression

Prevents operators from expecting the same helper action on the global KYC queue and the player-scoped KYC workspace.

Source Fields
player?.userId
Transform
The shared `PlayerKYCSettings` component only renders `Add Document` when a player context exists. `/transactions/kyc` mounts the component without `player`, so the button is intentionally hidden there.
Grid columns

Columns

field

Document ID

field

User ID

field

Document Name

field

Preview Document

field

3rd Party Report

field

Tags

field

Reason

field

3rd Party Verification

Bynn values are live workflow state; SumSub values are currently placeholder data injected in UserController.getUserDocument.

Note
Bynn values are live workflow state; SumSub values are currently placeholder data injected in UserController.getUserDocument.
field

3rd Party Verification Date

Do not treat SumSub dates on this list as authoritative production timestamps yet.

Note
Do not treat SumSub dates on this list as authoritative production timestamps yet.
field

Updated At

field

Actionee

field

Action Performed At

field

Action

Status-driven action stack that mixes helper links with mutation controls.

Note
Visible controls depend on `status`, `documentName`, verification history availability, and whether the row supports Bynn report lookup.
Filter dictionary

Filters

field

Search by tag

Tag substring filter. The queue only changes after `Apply Filters` commits the staged input into the active request.

Type
text
Widget map

Widgets

item

KYC queue table

item

Tag search bar

item

Active tag chip

item

Queue pagination

Operational notes

Notes

item

This route is mounted under `/transactions/kyc` but reuses the player KYC component.

item

`/transactions/kyc` mounts `PlayerKYCSettings` without a `player` prop, so the shared `Add Document` button is not rendered on this route.

item

`searchTag` is the only queue filter sent to `GetUserDocumentService`; the backend builds the searchable tag string from joined `users.tags`.

item

Third-party verification report and history visibility depends on document type and available verification data.

item

`View Report` uses dossier lookup and then opens the external Bynn dashboard; it is not an in-app state transition.

item

Live Bynn verification transport is triggered from approve/manual verification modal flows, not from the row-level placeholder icon.

item

`sumsubVerificationStatus` and `sumsubVerificationDate` are still injected in `UserController.getUserDocument` as placeholder data for testing.

Related references

Related pages

pageTransactions / Banking

Filterable banking transaction dashboard with weekly summary cards, backend stats charts, CSV export, and a detailed ledger-style table.

pageTransactions / Casino

Game transaction dashboard with real-time list mode, monthly analytics mode, filterable table, and a dedicated transaction detail route.

pageTransactions / Casino Transaction Detail

Read-only detail page for a single casino transaction identified by `casinoTransactionId`.

pageTransactions / Failed Deposit

Triage grid for failed deposit rows, their provider reasons, and the error-group classification used for later analysis.

pageTransactions / Failed Deposit Error Groups

Configuration surface for creating, editing, importing, exporting, and assigning failed-deposit error groups and their reasons.

pageTransactions / Shared Detail Modals

Reusable read-only transaction payload modals for banking-style rows on banking, withdrawals, and failed-deposit surfaces.