What This Surface Shows
This page manages the grouping layer used by the failed-deposit queue.
Operators use it to:
- create a new error group
- edit group name and description
- assign failed reasons to a group
- remove already assigned reasons from a group
- export or import the whole grouping configuration
How To Read It
Each group is shown as an editable card. The page is not a classic table; it behaves more like a configuration manager.
The main operator objects are:
- group metadata
- assigned reasons
- unassigned reasons available for mapping
The page always loads:
- groups with
includeReasons=true - unassigned reasons with
unassignedOnly=true
That means the assignment selector is not a generic reason browser. It is a working list of reasons that are currently free for mapping plus the reasons already attached to the current group.
Main Actions
RefreshExportImportCreate GroupEdit Error GroupAssign failed reasonsRemove assigned reason
Action Behavior
Refresh reloads both configured groups and currently unassigned reasons. Because the unassigned-reasons request can auto-seed recent failed deposit reasons, refresh can make newly discovered reasons appear in the selector.
Export downloads a JSON snapshot containing group metadata and assigned reason mappings.
Import reads a local JSON file and requires a top-level groups array before it posts anything. Backend import is merge/upsert behavior: it can create missing groups/reasons, update existing metadata, and reassign existing reasons by normalized reason.
Create Group and Edit use the same dialog. Group Name is required; empty Description is stored as null. Duplicate names are rejected case-insensitively.
Assign failed reasons saves the whole selected reason set for that group. Removing a chip is implemented the same way: the page submits the remaining reason ids.
Common Questions
Is this page changing transaction rows directly?
No. It changes the grouping dictionary used to classify failed reasons. The transaction queue then shows those group names on its own list surface.
Does assigning reasons append to a group?
No. The assignment save is a full replacement. The backend first clears the group's existing error_group_id links and then writes back the selected reason ids.
Why does import/export exist here?
Because the grouping model is treated as maintainable operational configuration rather than as a one-off lookup table.
Known caveats
- This page mixes list, form, and relation-management behavior in one route.
- Assigned reasons are managed through a grouped multi-select and removable chips, not inline in the failed-deposit list.
- There is no delete-group action in the current manager.
- The source read layer supports search, pagination, date range, provider, and currency filters, but the current manager does not expose those controls on this route.
- Loading
unassignedOnly=truereasons can trigger source auto-seeding from recent failed deposit rows before the reason selector is shown. - Import is file-based. The page accepts only JSON and requires the parsed payload to contain a top-level
groupsarray. - Export downloads a JSON snapshot with an ISO timestamp in the filename.
- Removing a reason chip is not a dedicated delete endpoint; it saves the remaining membership through the same assignment flow.
Page actions, source read/write behavior, and the grouping schema have been traced. Full replacement assignment, import merge/upsert behavior, export shape, and unassigned-reason auto-seeding are confirmed.