Every screen the product must include, categorised by how often users interact with it. Main Operation screens drive daily work · Setup screens are touched once per event (or per year) · Rare / Modification screens fire on exceptions, audits, and edge cases.
Daily-use screens. Staff, operators, and external clients/suppliers live here.
Role-routed landing. Inventory & Distribution Command Center design: KPIs (Total Sold / Purchased / Allocated / Pending Dispatch), Action Center (urgent items), Match Summary Widgets, Stock Overview, Open Distribution CTA.
Grid/list of all events. Status pills (DRAFT / PLANNING / BUYING / SELLING / ALLOCATING / DISPATCHING / CLOSED / ARCHIVED). Quick filters by type.
Event overview with matches list, per-match inventory dashboard (Category × Purchased / Sold / Remaining / Oversold-alert), status transitions, match result entry for placeholder resolution.
Table of purchases with vendor · match · category · qty · price. Drill-down drawer shows expanded units, per-unit allocation status, seat position.
Manual entry or CSV bulk import tabs. Vendor / match / category / qty / price per line. Auto-expands to N _PURCHASE_UNITS on save. Optional: attach contract doc, deposit, delivery channel.
Table of sales with client · multi-match support · credit status · allocation status · oversell indicators. Drawer with line-item details.
Revised form layout: client typable-autocomplete at top · USD/EUR currency only (no FX) · match field moves to each line item (one client can buy across multiple matches in one sale). Real-time inventory feedback per line (green/amber/red).
The operational center. Table of unallocated + allocated distribution rows. Side drawer opens for allocation. Special Handling panel for unallocate / override / reset. Bulk allocation by SetID.
Shows top-6 candidate plans with scores, chunks, vendor mix, margin delta, policy violations. Operator picks one to commit.
Filtered dispatch queue. Tabs: All / Not Sent / Sent / Issues. "Assigned to me" toggle. Priority + status pills.
Full task: INV_NO · vendor creds (show/hide · PASSWORD_VIEWED audit) · client details · activity log. Mark SENT with proof URL.
Token-gated. Advanced filter bar (match · category · delivery · block/row · ticket holder). Yellow editable block (AB–AF). Copy-down button. Accept / Confirm Receipt (per-ticket, bulk, filtered-bulk). Column P = purchased, Q = allocated.
Token-gated (FEW suppliers only). Company=MIRRA redacted. Pre-generated from Purchases; allocated client detail streams in. Editable Delivery (adds UPLOADED value) + DispatchNotes. Confidentiality banner.
Internal view: all FEW-supplier portals, their token status, last activity, dispatch progress per supplier. Regenerate / refresh links.
Tabbed: Event Summary · Inventory Health · Allocation Progress · Dispatch Status · P&L. Drill-down by match / subgame. Charts (pie · bar · line).
Email + password. Demo-account chips for quick role-switching during development. Redirects by role after login.
TDS-specified dashboard showing Category × Purchased / Sold / Remaining / Oversold-alert per match. Exact wording: "Top Cat 1 oversold by 1 ticket — 128 sold but only 127 purchased". KPI row format: "462 · $1,870K revenue · Net remaining 185".
Configuration screens — set once per event, per venue, or per calendar year.
Org name · address · timezone · default currency · contact / support emails · fiscal year. One-time on install.
Default thresholds: priceChangeApprovalThreshold · dispatchBuffer · portalTokenExpiry · session timeout · audit retention · default allocation strategy.
Currently restricted to USD + EUR (per new rule). Retained for future expansion; no FX field on the Sale form.
Name · city · country · timezone · capacity · address · map URL. Cross-event.
New requirement. Upload stadium layout (Blocks · Rows · Seats · optional X/Y). Paint category zones. Capacity sanity check. Enables visual allocation.
Company · type (CORPORATE/AGENCY/INDIVIDUAL) · credit limit · payment terms · tax ID · VIP flag. Used by Sale form autocomplete.
Name · type (MARKETPLACE/DIRECT/AGENCY) · country · primary contact · website. Used by Purchase form.
PURCHASE or SALE · party × event · valid dates · maxValue · currency · document attach.
Login ID + email + password per vendor (optionally per event). Event-specific wins over global fallback.
10 seed templates. Code · name · channels (email/WhatsApp/Slack/in_app) · subject · body markdown · variables · active. Triggers linked.
Add / deactivate users. Roles: super_admin · event_admin · ops_manager · sr_operator · operator · staff · client · supplier.
New requirement. Drag-drop / browse .xlsx/.csv. Auto-detects FIFA vs Olympics flat shape. Column mapper UI. Creates Matches/SubGames/Categories/Venues in bulk. Handles placeholder teams.
Name / scope / mode (SUGGEST / SEMI_AUTO / FULLY_AUTO) · vendor whitelist/blocklist · margin floor · split policy · VIP exclusion · rank gaps · auto-commit cap.
One-time: clone _TEMPLATE_MATCH per match in the schedule list. Apps Script: createMatchSheetsFromSchedule.
Propagate _SUMMARY!A1:J20 block across all match sheets after seeding. Apps Script: copySummaryTableToAllMatches.
Enable category-based sorting on each match sheet. Apps Script: setupSortHelpers.
Exception-path screens — fired on audit, override, recovery, or post-event. Not part of the daily loop.
Unallocate sale · unallocate by SetID · reset seats · set/clear AllocFromCategory. Requires typing UNDO + reason. Writes to _ALLOC_LOG.
Approve override / reject / upgrade. Manager-only. Triggered when sale line qty > inventory at sale time.
Proposes higher-tier category with recalculated price + margin. Sets AllocFromCategory on acceptance.
New requirement. Enter winner/loser for a knockout match. Triggers placeholder resolution cascade. Notifies affected clients.
Bulk-edit screen for resolving TBD / Qualifier N / Winner-of-X after draws / results.
Void sale post-creation. Auto-unallocates all child DistRows (units → AVAILABLE). Appends CANCEL_SALE to _ALLOC_LOG. Refund flow triggered.
Sales tab vs Distribution row count diff. Actions: KEEP · DELETE_CANDIDATE · MANUAL_REVIEW · PROTECTED_EXCESS · MISSING_IN_DIST. Tick Process_Now to re-sync.
9 integrity checks. Severity: CRITICAL / HIGH / MEDIUM. Summary row shows invariant: unique UnitIDs referenced == allocated units count.
_ALLOC_LOG append-only. Actions: ALLOCATE · UNDO_SALE · UNDO_SET · RESET_SEATS · SET/CLEAR_ALLOC_FROM_CATEGORY · CANCEL_SALE · PASSWORD_VIEWED · credential CRUD · event transitions.
Per-credential timeline: CREATED · UPDATED · DEACTIVATED · PASSWORD_VIEWED. Actor + timestamp + details. Drives compliance.
Show/hide password on vendor creds. Reveal fires PASSWORD_VIEWED audit with actor + timestamp. Auto-hide after 30s.
New requirement. Rubber-band lasso on rendered map. "Consecutive seats" enforcement. Distance-proximity scoring. Writes Block/Row/Seat onto DistRows.
Move event between DRAFT → PLANNING → BUYING → SELLING → ALLOCATING → DISPATCHING → CLOSED → ARCHIVED. Each transition gates which screens are usable.
Change between FIFA scheme (Top Cat 1, Cat 1–4) and Olympics scheme (First, A–E) on an existing event — for data migration / cleanup.
Occasionally organisers publish revised schedules (venue / time changes). Re-import with merge semantics (preserves sales, updates match metadata).
Sent / failed notifications. Payload · recipients · channel · retryCount · error. Resend / debug.
Invalidate a token (security incident / client offboarding). Generate new token. Notify recipient with new URL.
Invoice generation · vendor settlement · refund tracking · margin report. Workflow TBD — open product decision.
Export event as CSV/Excel/PDF. Manual retention policy trigger. GDPR-style client data-subject requests.
Bulk regenerate / resync every client portal workbook. Apps Script: CLIENTPORTAL_autoRefreshAll_. Safe to cron.
Refresh one client's portal — by selecting client group, or by pasting the workbook URL. Functions: ui_refreshClient_SelectClient_ · ui_refreshClientByUrl_.
Pull AB:AF edits from a client's workbook (via the _CLIENT_INPUTS vault) into Master Distribution. Function: clientPortalImportBack · importClientDetailsBack_.
Verify the client can actually reach their workbook (permissions sanity-check). Function: clientPortalTestAccess.
Bulk fix sharing / protection issues across all client workbooks. Function: clientPortalRepairAndShareAll.
Rebuild _SUPPLIER_QUEUE from scratch based on current Distribution allocations. Preserves existing Delivery / DispatchNotes. Function: rebuildSupplierQueue.
Regenerate every supplier workbook. Function: SUPPLIER_refreshAllWorkbooks_.
Pull edits (Delivery / DispatchNotes / DispatchedAt) from every supplier workbook back into Master. Function: SUPPLIER_syncAllWorkbooksToDistribution_.
Rebuild _STAFF_QUEUE from allocated Distribution rows. Preserves AssignedTo · Priority · DispatchStatus · DispatchedAt · StaffNotes. Function: STAFFQ_rebuildQueue.
Pull dispatch updates from every staff workbook. Function: STAFFPORTAL_syncAllStaff_ · STAFFPORTAL_pullUpdatesFromAllStaff_.
Enable or disable per-workbook onEdit triggers across all staff. Functions: STAFFPORTAL_enableAutoPush_All_ · STAFFPORTAL_disableAutoPush_All_.
Sidebar form: Start SetID · Block · Row · Seat-start · Total · Overwrite. Fills consecutive SetIDs with a contiguous seat range. Function: APPLY_SEAT_RANGE_BULK_FROM_SETID.
Sidebar form: SetID · Block · Row · Seat-start · Seat-end · Overwrite. Fills a single set's units with seats in SetPos order. Function: APPLY_SEAT_RANGE_TO_SETID.
Copy Block/Row/Seat from _PURCHASE_UNITS into Distribution child rows for the currently selected parent. Function: FILL_SEATS_TO_DISTRIBUTION_ACTIVE.
Populate Distribution.Password by looking up vendor credentials for units allocated to the active parent. Function: ALLOC_SIDEBAR_fillPasswordsForActiveParent.
Purge rows marked DELETE_CANDIDATE in _SALES_PARENT_RECON after admin review. Function: deleteSalesParentReconCandidates.
Search/filter modal listing all matches — type to jump to a specific match sheet. Placeholder: "Filter (e.g. M20, MEX, Group A)". Function: openMatchNavigator / MatchNavigator.html.
Inventory form's "Load rows for this match" → click a row → form populates → Save (update) or "Delete This Purchase/Sale" (confirms before deletion). Functions: saveOrUpdateRecord (update path) · deleteRecordById.
Convert all live formulas in match ranges (C14:I, L14:S) to static values — seals the data at event close. Function: freezeMatchData.
Data-repair utility. Uses M92 sheet as a reference template to fill missing totals. Function: fillExistingTotalsFromM92.