Appendix G: Application Screen Reference

Version: 7.0.0 Last Updated: March 2, 2026 BRD Version: 20.0 (19,900+ lines, 7 modules, 113 decisions) Total Screens: 118


G.1 Purpose & How to Use This Document

This appendix provides a complete catalog of every user-facing screen in the POS Platform, derived from the Business Requirements Document (BRD v20.0, Chapter 05). Each screen is mapped back to its source BRD section, database tables, Appendix F services, and state machines — creating full traceability from business requirement to UI surface.

Who Should Use This

AudienceUse Case
Frontend DevelopersFind the complete specification for any screen they need to build
UI/UX DesignersUnderstand screen inventory, element requirements, and navigation flows
QA EngineersTrace test scenarios back to specific screens and their business rules
Product OwnersReview screen coverage to ensure all BRD requirements have a UI surface
ArchitectsVerify that screen boundaries align with module boundaries and ADR decisions

How to Read Screen Entries

Each screen entry includes:

FieldDescription
Screen IDUnique identifier: SCR-MXX-YY (M=module 01-06), SCR-RXX (Raptag), SCR-XXX (cross-cutting)
Product(s)Role-based access within Nexus POS (React web app) or Raptag (React Native mobile). Values: All Roles, CASHIER+, MANAGER+, OWNER, BUYER+, Raptag
BRD Section(s)Chapter 05 section number(s) this screen implements
Database TablesTables from Ch 07/08 this screen reads (R) or writes (W)
State Machine(s)BRD Module 7 state machines that govern this screen’s behavior
Appendix F ServicesCode services from Appendix F that power this screen
User RolesWhich roles can access: OWNER, MANAGER, CASHIER, BUYER, AUDITOR
Offline CapableWhether the screen functions in DEGRADED/OFFLINE mode (ADR-048). SQLite WASM (sql.js/wa-sqlite + OPFS) provides 2-table fallback in the browser.
RouteSuggested URL route path

Cross-Reference Guide

To Find…Look At…
Business rules for a screenCh 05, section listed in BRD Section(s)
Database schema for a tableCh 08, entity specification for the table
Service implementation detailsAppendix F, service listed in Appendix F Services
State transitionsCh 05, Module 7 (sections 7.1-7.16)
Architecture decisionsCh 02, ADR listed in screen notes
Offline behavior patternsCh 04, Section L.10A.1 (ADR-048, ADR-052)

G.2 Product Context (2 Products)

The POS Platform delivers two product experiences from two codebases, governed by ADR-052 (Unified Web App) and ADR-047 (Raptag React Native):

┌─────────────────────────────────────────────────────────────────────────┐
│                    NEXUS PLATFORM — 2 PRODUCTS                         │
│                                                                         │
│   ┌──────────────────────────────────────────────┐  ┌────────────────┐ │
│   │         NEXUS POS — UNIFIED WEB APP           │  │  SEPARATE APP  │ │
│   │             (ADR-052, ADR-048)                 │  │   (ADR-047)    │ │
│   │                                                │  │                │ │
│   │  React / TypeScript / Vite                     │  │ ┌────────────┐│ │
│   │  Single SPA in the browser                     │  │ │NEXUS       ││ │
│   │                                                │  │ │RAPTAG      ││ │
│   │  Role-based access:                            │  │ │(React      ││ │
│   │    CASHIER  — sales terminal screens           │  │ │ Native)    ││ │
│   │    MANAGER  — reports, inventory, setup         │  │ │            ││ │
│   │    OWNER    — full config, integrations        │  │ │ RFID       ││ │
│   │    BUYER    — catalog, purchasing               │  │ │ counting   ││ │
│   │    AUDITOR  — counts, audit log                 │  │ │ ~8 screens ││ │
│   │                                                │  │ │ + SQLite   ││ │
│   │  107 screens + SQLite WASM fallback            │  │ │ offline    ││ │
│   │                                                │  │ └────────────┘│ │
│   └──────────────────────────────────────────────┘  └────────────────┘ │
│                                                                         │
│   SHARED: PostgreSQL 16 + Redis 7.x + Socket.io (ADR-049)             │
│   STATE: React Query (server) + Zustand (client) (ADR-051)            │
│   OFFLINE: 3-state monitor, 2-table SQLite WASM fallback (ADR-048)    │
└─────────────────────────────────────────────────────────────────────────┘

Product Summary

ProductTechDeploymentPrimary UsersScreensOffline
Nexus POSReact/TS + ViteWeb browser (any device)All roles (CASHIER through OWNER)107 + 3 cross-cuttingYes (ADR-048, SQLite WASM)
Nexus RaptagReact Native + ExpoMobile (iOS/Android)Auditor, Manager8Yes (ADR-047)

Key Insight (ADR-052): Nexus POS is a single React web application. All roles access the same app — the difference is what screens are visible based on permissions. A cashier at a register sees transaction screens; a manager sees reports and configuration. Role-based routing controls screen access (CASHIER+, MANAGER+, OWNER, BUYER+, AUDITOR).

Screen Distribution by Module

ModuleAll RolesCASHIER+MANAGER+OWNERBUYER+RaptagTotal
1. Sales19322
2. Customers4610
3. Catalog3101418
4. Inventory51141223
5. Setup & Config1121822
6. Integrations1212
Raptag Mobile88
Cross-Cutting33
Total1621353268118

G.3 Screen Inventory Summary

Complete master table of all 118 screens. See sections G.4-G.12 for full specifications.

Module 1: Sales (22 Screens)

IDScreenBRDProductRolesOffline
SCR-M01-01Sales Terminal / Item Entry1.1CASHIER+CASHIER, MANAGERYes
SCR-M01-02Cart Panel & Line Items1.1CASHIER+CASHIER, MANAGERYes
SCR-M01-03Discount Modal1.2CASHIER+MANAGER, OWNERYes
SCR-M01-04Payment / Checkout1.3CASHIER+CASHIER, MANAGERDegraded
SCR-M01-05Layaway Payment1.3CASHIER+CASHIER, MANAGERNo
SCR-M01-06Affirm Financing Flow1.3CASHIER+CASHIERNo
SCR-M01-07Parked Sales List1.1.1CASHIER+CASHIER, MANAGERYes
SCR-M01-08Gift Card Operations1.5CASHIER+CASHIER, MANAGERNo
SCR-M01-09Receipt Print / Reprint1.4CASHIER+CASHIER, MANAGERYes
SCR-M01-10Cash Drawer Management1.12CASHIER+CASHIER, MANAGERYes
SCR-M01-11Price Check Mode1.13CASHIER+CASHIERYes
SCR-M01-12Coupon Entry1.14CASHIER+CASHIERNo
SCR-M01-13Loyalty Display1.15CASHIER+CASHIERNo
SCR-M01-14Return Processing1.4CASHIER+CASHIER, MANAGERNo
SCR-M01-15Exchange Processing1.4CASHIER+CASHIER, MANAGERNo
SCR-M01-16Special Order Create1.6CASHIER+MANAGERNo
SCR-M01-17Multi-Store Inventory Lookup1.7CASHIER+CASHIER, MANAGERNo
SCR-M01-18Hold for Pickup (BOPIS)1.11CASHIER+CASHIER, MANAGERNo
SCR-M01-19Ship-to-Customer1.7CASHIER+MANAGERNo
SCR-M01-20Sales Reports Dashboard1.8, 1.19MANAGER+MANAGER, OWNERNo
SCR-M01-21Commission Management1.8MANAGER+MANAGER, OWNERNo
SCR-M01-22Manager Discrepancy Review1.16MANAGER+MANAGER, OWNERNo

Module 2: Customers (10 Screens)

IDScreenBRDProductRolesOffline
SCR-M02-01Customer List / Directory2.1All RolesCASHIER, MANAGERNo
SCR-M02-02Customer Profile / Detail2.1All RolesCASHIER, MANAGERNo
SCR-M02-03Customer Create / Edit2.1All RolesCASHIER, MANAGERNo
SCR-M02-04Customer Group / Tier Mgmt2.2MANAGER+MANAGER, OWNERNo
SCR-M02-05Customer Notes & Preferences2.3All RolesCASHIER, MANAGERNo
SCR-M02-06Communication Preferences2.4MANAGER+MANAGERNo
SCR-M02-07Customer Merge / Dedup2.5MANAGER+MANAGER, OWNERNo
SCR-M02-08Customer Deletion / Anonymize2.5MANAGER+OWNERNo
SCR-M02-09Loyalty Admin Dashboard2.6, 5.17MANAGER+MANAGER, OWNERNo
SCR-M02-10Communication Log2.4MANAGER+MANAGERNo

Module 3: Catalog (18 Screens)

IDScreenBRDProductRolesOffline
SCR-M03-01Product List / Search3.1All RolesALLYes
SCR-M03-02Product Detail / Edit3.1MANAGER+BUYER, MANAGERNo
SCR-M03-03Variant Matrix Editor3.1MANAGER+BUYER, MANAGERNo
SCR-M03-04Pricing Engine / Price Books3.3MANAGER+MANAGER, OWNERNo
SCR-M03-05Promotions Setup3.3MANAGER+MANAGER, OWNERNo
SCR-M03-06Markdown Workflow3.3MANAGER+MANAGER, OWNERNo
SCR-M03-07Coupon Management3.3MANAGER+MANAGER, OWNERNo
SCR-M03-08Category Hierarchy3.5MANAGER+BUYER, MANAGERNo
SCR-M03-09Tags & Collections3.5MANAGER+BUYER, MANAGERNo
SCR-M03-10Seasons / Buying Calendar3.5BUYER+BUYERNo
SCR-M03-11Barcode Management3.4MANAGER+BUYER, MANAGERNo
SCR-M03-12Multi-Channel Allocation3.6MANAGER+MANAGER, OWNERNo
SCR-M03-13Vendor Management3.8MANAGER+BUYER, MANAGERNo
SCR-M03-14Label Printing3.10All RolesCASHIER, MANAGERNo
SCR-M03-15Product Media Manager3.11BUYER+BUYERNo
SCR-M03-16Custom Fields Config3.12, 5.12OWNEROWNERNo
SCR-M03-17Product Search & Discovery3.9All RolesALLYes
SCR-M03-18Product Analytics3.14MANAGER+MANAGER, OWNERNo

Module 4: Inventory (23 Screens)

IDScreenBRDProductRolesOffline
SCR-M04-01Inventory Dashboard4.17MANAGER+MANAGER, OWNERNo
SCR-M04-02Inventory List (per location)4.1All RolesALLNo
SCR-M04-03Low Stock Alerts4.16MANAGER+MANAGER, BUYERNo
SCR-M04-04PO Create / Edit4.3BUYER+BUYER, MANAGERNo
SCR-M04-05PO Approval / Track4.3MANAGER+MANAGER, OWNERNo
SCR-M04-06PO Templates4.3BUYER+BUYERNo
SCR-M04-07Receiving & Inspection4.4All RolesCASHIER, MANAGERNo
SCR-M04-08Receiving Variance4.4All RolesMANAGERNo
SCR-M04-09Stock Count Session4.6All RolesAUDITOR, MANAGERNo
SCR-M04-10Count Freeze Manager4.6MANAGER+MANAGERNo
SCR-M04-11Scanner Count Entry4.6CASHIER+AUDITOR, CASHIERNo
SCR-M04-12RFID Count Manager4.6.8MANAGER+MANAGERNo
SCR-M04-13Count Results Review4.6MANAGER+MANAGER, AUDITORNo
SCR-M04-14Count Approval4.6MANAGER+MANAGER, OWNERNo
SCR-M04-15Adjustment Request4.7All RolesCASHIER, MANAGERNo
SCR-M04-16Adjustment Approval4.7MANAGER+MANAGER, OWNERNo
SCR-M04-17Transfer Create / Track4.8MANAGER+MANAGERNo
SCR-M04-18Reorder Configuration4.5MANAGER+BUYER, MANAGERNo
SCR-M04-19Reason Codes Management4.7OWNEROWNERNo
SCR-M04-20Serial Number Tracking4.10All RolesMANAGERNo
SCR-M04-21Vendor RMA4.9MANAGER+BUYER, MANAGERNo
SCR-M04-22Inventory Reports4.17MANAGER+MANAGER, OWNERNo
SCR-M04-23Reservation Management4.13MANAGER+MANAGERNo

Module 5: Setup & Configuration (22 Screens)

IDScreenBRDProductRolesOffline
SCR-M05-01Onboarding Wizard (13 steps)5.20OWNEROWNERNo
SCR-M05-02System Settings / Branding5.2OWNEROWNERNo
SCR-M05-03Location Management5.4OWNEROWNERNo
SCR-M05-04User Management5.5MANAGER+MANAGER, OWNERNo
SCR-M05-05Role & Permission Config5.5OWNEROWNERNo
SCR-M05-06Login / Authentication5.5All RolesALLYes
SCR-M05-07Clock-In / Clock-Out5.6CASHIER+CASHIER, MANAGERNo
SCR-M05-08Register Management5.7OWNERMANAGER, OWNERNo
SCR-M05-09Register Profiles5.7OWNERMANAGER, OWNERNo
SCR-M05-10Register Retirement5.7OWNEROWNERNo
SCR-M05-11Payment Terminal Config5.11OWNEROWNERNo
SCR-M05-12Payment Methods Setup5.11OWNEROWNERNo
SCR-M05-13Tax Jurisdiction Config5.9OWNEROWNERNo
SCR-M05-14Tax Exemption Management5.9MANAGER+MANAGER, OWNERNo
SCR-M05-15UOM Setup5.10OWNEROWNERNo
SCR-M05-16Approval Workflows5.13OWNEROWNERNo
SCR-M05-17Printer Configuration5.8OWNERMANAGER, OWNERNo
SCR-M05-18Receipt Builder5.14OWNEROWNERNo
SCR-M05-19Email Config & Templates5.15OWNEROWNERNo
SCR-M05-20RFID Configuration5.16OWNEROWNERNo
SCR-M05-21Audit Log Viewer5.18OWNEROWNERNo
SCR-M05-22Business Rules (YAML Editor)5.19OWNEROWNERNo

Module 6: Integrations (12 Screens)

IDScreenBRDProductRolesOffline
SCR-M06-01Integration Hub Dashboard6.11OWNERMANAGER, OWNERNo
SCR-M06-02Shopify Setup & Connection6.3OWNEROWNERNo
SCR-M06-03Shopify Inventory Sync Config6.3, 6.7OWNERMANAGER, OWNERNo
SCR-M06-04Shopify Order Fulfillment6.3OWNERMANAGERNo
SCR-M06-05Amazon Setup & Connection6.4OWNEROWNERNo
SCR-M06-06Amazon Catalog / Listings6.4OWNERMANAGERNo
SCR-M06-07Google Merchant Setup6.5OWNEROWNERNo
SCR-M06-08Google Validation Dashboard6.5OWNERMANAGERNo
SCR-M06-09Cross-Platform Validation6.6OWNERMANAGER, OWNERNo
SCR-M06-10Inventory Sync Dashboard6.7OWNERMANAGERNo
SCR-M06-11Integration Health Monitor6.11OWNERMANAGER, OWNERNo
SCR-M06-12Error DLQ Management6.2OWNERMANAGER, OWNERNo

Raptag Mobile (8 Screens)

IDScreenBRDProductRolesOffline
SCR-R01Login5.5RaptagALLYes
SCR-R02Home Dashboard4.6.8RaptagAUDITOR, MANAGERYes
SCR-R03Join / Start Session4.6.8RaptagAUDITOR, MANAGERNo
SCR-R04Scanning Interface4.6.8RaptagAUDITORYes
SCR-R05Section Assignment & Progress4.6.8RaptagAUDITORYes
SCR-R06Session Summary4.6.8RaptagAUDITOR, MANAGERYes
SCR-R07Chunked Upload / Sync4.6.8RaptagAUDITORDegraded
SCR-R08Device Pairing5.16RaptagMANAGERNo

Cross-Cutting (3 Screens)

IDScreenRefProductRolesOffline
SCR-X01Login / Authentication5.5, ADR-004All RolesALLYes
SCR-X02Error Pages (403/404/500)All RolesALLYes
SCR-X03Offline Mode Indicator1.16, ADR-048All RolesALLYes

G.4 Module 1: Sales Screens (22 Screens)

BRD Sections: 1.1-1.20 | Appendix F: §F.4 (37 services) | Pattern: Full CQRS + Event Sourcing

Cross-Reference: See Ch 05, Sections 1.1-1.20 for business rules. See Ch 08, Domain 4 (Sales & Payments) for table schemas. See Appendix F, §F.4 for service breakdown.


G.4.1 Sales Terminal / Item Entry

AttributeValue
Screen IDSCR-M01-01
Product(s)CASHIER+
BRD Section(s)1.1
Database Tablesorders (R/W), order_items (R/W), products (R), variants (R), inventory_levels (R), customers (R)
State Machine(s)7.1 Order States, 7.2 Parked Sale States
Appendix F Servicessale.cart.command.service, sale.cart.query.service, sale.park.command.service, sale.park.query.service
User RolesCASHIER, MANAGER
Offline CapableYes (degraded – cached products from product_cache only, no real-time price updates, stale pricing warning displayed)
Route/pos/sales/terminal

Purpose

The Sales Terminal is the primary point-of-sale screen where staff ring up customer purchases. It supports barcode scanning, manual SKU entry, and bulk RFID tag lookup (max 50 tags per request). Staff can toggle between Sale, Return, and Exchange modes, attach customers for loyalty/pricing, and park sales for later retrieval (max 5 per terminal, 4-hour TTL).

Key Elements

ElementTypeDescriptionBusiness Rule
Barcode/SKU InputInputScan barcode or type SKU to add items; auto-focuses after each entryBRD 1.1: GET /product/{sku} or POST /products/bulk-lookup (max 50 tags)
Mode ToggleButton GroupSwitch between Sale / Return / Exchange modesBRD 1.1: Mode determines stock validation behavior
Cart PanelPanelDisplays current line items with qty, price, discount, line totalBRD 1.1: Real-time subtotal calculation
Customer AttachButton + SearchSearch/attach customer by name, phone, email, or loyalty numberBRD 1.1: Recalculates prices if Price Tier applies; recalculates tax if exempt
Running TotalsPanelSubtotal, discounts, tax breakdown (State/County/City), grand totalBRD 1.2.1: Strict discount calculation order (7 steps)
Stock WarningBadge/AlertWarns when stock is low or zero for sale itemsBRD 1.1: Check Stock > 0 before adding to cart
Park SaleButtonSerialize cart state and release locks; max 5 per terminalBRD 1.1.1: 4-hour TTL, soft-reserve inventory
Retrieve SaleButtonList and restore parked sales for this terminalBRD 1.1.1: Parked items visible to other terminals with warning
Upsell AlertToast/BannerTriggered by promo engine when cart meets criteriaBRD 1.1: “Buy 1 more for 10% off” style suggestions
Proceed to PaymentButtonTransition order from DRAFT to PENDING stateBRD 1.3: Navigates to Payment/Checkout

Wireframe

┌─────────────────────────────────────────────────────────────────────────────┐
│ NEXUS POS  [Sale ▼]  [Price Check]  [Park Sale]  [Retrieve]    [User] [?] │
├────────────────────┬────────────────────────────────┬───────────────────────┤
│  ITEM ENTRY        │  CART                          │  CUSTOMER & TOTALS    │
│                    │                                │                       │
│  ┌──────────────┐  │  #  SKU       Name     Qty $  │  ┌─────────────────┐  │
│  │ Scan / SKU   │  │  1  NXJ-1001  Jacket    1 89  │  │ [Attach Cust.]  │  │
│  └──────────────┘  │  2  NXJ-2045  Tee       2 50  │  │                 │  │
│                    │  3  NXJ-3012  Pants     1 65  │  │ Jane Doe        │  │
│  ┌──────────────┐  │                                │  │ Gold Tier       │  │
│  │ Search Prod  │  │                                │  │ 450 pts         │  │
│  │ ─────────── │  │                                │  │ Tax Exempt: No  │  │
│  │ Recent Items │  │                                │  └─────────────────┘  │
│  │ NXJ-1001    │  │                                │                       │
│  │ NXJ-2045    │  │                                │  Subtotal:   $254.00  │
│  │ NXJ-3012    │  │                                │  Discount:   - $25.40 │
│  └──────────────┘  │                                │  State Tax:  +  $9.83 │
│                    │                                │  Local Tax:  +  $2.29 │
│  ⚠ Low Stock:     │  ├────────────────────────────┤  ─────────────────────  │
│  NXJ-3012 (2 left) │  │ [Remove] [Discount] [Qty] │  TOTAL:      $240.72  │
│                    │                                │                       │
│  [Upsell: Buy 1   │                                │  ┌─────────────────┐  │
│   more Tee, 10%   │                                │  │   PAY  ($240.72)│  │
│   off all Tees]    │                                │  └─────────────────┘  │
└────────────────────┴────────────────────────────────┴───────────────────────┘

Actions & Transitions

ActionNavigates ToRequires Role
Click “Pay”SCR-M01-04 Payment / CheckoutCASHIER+
Click “Park Sale”Stays on terminal (cart cleared, sale serialized)CASHIER+
Click “Retrieve”SCR-M01-07 Parked Sales ListCASHIER+
Click “Price Check”SCR-M01-11 Price Check ModeCASHIER+
Click line item discountSCR-M01-03 Discount ModalCASHIER+ (Manager PIN for override)
Click “Attach Customer”SCR-M02-01 Customer List (search overlay)CASHIER+
Toggle to Return modeSCR-M01-14 Return ProcessingCASHIER+
Toggle to Exchange modeSCR-M01-15 Exchange ProcessingCASHIER+

G.4.2 Cart Panel & Line Items

AttributeValue
Screen IDSCR-M01-02
Product(s)CASHIER+
BRD Section(s)1.1
Database Tablesorders (R/W), order_items (R/W), variants (R), products (R), pricing_rules (R)
State Machine(s)7.1 Order States
Appendix F Servicessale.cart.command.service, sale.cart.query.service
User RolesCASHIER, MANAGER
Offline CapableYes (degraded – uses product_cache prices, stale pricing warning)
Route/pos/sales/terminal (embedded panel within SCR-M01-01)

Purpose

The Cart Panel is the central line-item display embedded within the Sales Terminal. It shows all items in the current transaction with quantity controls, per-line discount indicators, tax amounts, and line totals. Staff can modify quantities, remove items, apply line discounts, and see real-time running totals as the cart changes.

Key Elements

ElementTypeDescriptionBusiness Rule
Line Item RowTable RowSKU, product name, quantity, unit price, discount, tax, line totalBRD 1.1: Snapshot product data at time of add
Quantity StepperInputIncrement/decrement quantity; validates against stockBRD 1.1: Stock > 0 validation for sale mode
Remove ItemButtonRemove line item from cartBRD 1.1: Releases any soft-reserve
Line Discount IndicatorBadgeShows applied discount type and percentageBRD 1.2.1: Discount calculation order applies
Non-Discountable FlagIconIndicates items excluded from global discountsBRD 1.2.1: Gift cards, deposits, is_discountable=false
Running SubtotalTextLive-calculated subtotal across all linesBRD 1.1: Updated on every cart change
Serial Number BadgeBadgeShows serial number for tracked itemsBRD 1.10: Serial required flag on product

Actions & Transitions

ActionNavigates ToRequires Role
Click line item discount buttonSCR-M01-03 Discount ModalCASHIER+
Click remove itemStays on cart (item removed)CASHIER+
Adjust quantity to 0Stays on cart (item removed)CASHIER+
Click serial number promptSerial entry modal (inline)CASHIER+

G.4.3 Discount Modal

AttributeValue
Screen IDSCR-M01-03
Product(s)CASHIER+
BRD Section(s)1.2
Database Tablesorders (R/W), order_items (R/W), pricing_rules (R)
State Machine(s)
Appendix F Servicessale.discount.command.service, sale.promotion.engine.service, sale.price-override.command.service
User RolesCASHIER, MANAGER
Offline CapableYes (degraded – promotions may be stale from product_cache)
Route/pos/sales/terminal (modal overlay)

Purpose

The Discount Modal allows staff to apply line-item discounts, global order discounts, or manual price overrides. It enforces the strict 7-step discount calculation order: Price Tier, Line Discounts, Auto Promos, Global %, Coupons, Tax, Loyalty Redemption. Manual price overrides require a manager PIN and a mandatory reason code.

Key Elements

ElementTypeDescriptionBusiness Rule
Discount Type SelectorRadio GroupChoose: percentage off, fixed amount off, or price overrideBRD 1.2: Three discount application types
Percentage InputInputEnter discount percentage (1-100%)BRD 1.2: Applied to line item or entire order
Fixed Amount InputInputEnter dollar amount to deductBRD 1.2: Cannot exceed line/order total
Reason Code DropdownSelectRequired for all discounts: Damaged, Employee, Price Match, Manager DiscretionBRD 1.2: Reason code mandatory for audit
Manager PIN PromptInputPIN entry for price overrides and discounts exceeding thresholdBRD 1.2: Manager Auth required for overrides
Discount PreviewPanelShows before/after price comparison and savings amountBRD 1.2.1: Calculation order preview
Non-Discountable WarningAlertBlocks discount on gift cards, deposits, flagged itemsBRD 1.2.1: is_discountable = false exclusion
Apply / CancelButton PairConfirm or cancel the discountBRD 1.2: Discount added to order

Actions & Transitions

ActionNavigates ToRequires Role
Apply discountReturns to SCR-M01-01 Sales Terminal (discount applied)CASHIER+
Apply price overrideReturns to SCR-M01-01 (requires MANAGER PIN)MANAGER+
CancelReturns to SCR-M01-01 (no change)CASHIER+

G.4.4 Payment / Checkout

AttributeValue
Screen IDSCR-M01-04
Product(s)CASHIER+
BRD Section(s)1.3, 1.18
Database Tablesorders (R/W), order_items (R), payments (W), payment_attempts (W), gift_cards (R/W), gift_card_transactions (W), store_credits (R/W), customers (R/W), loyalty_accounts (R/W), cash_movements (W)
State Machine(s)7.1 Order States (PENDING -> PAID -> COMPLETED)
Appendix F Servicessale.payment.command.service, sale.payment.card.service, sale.payment.cash.service, sale.payment.giftcard.service, sale.payment.storecredit.service, sale.payment.affirm.service, sale.finalize.command.service
User RolesCASHIER, MANAGER
Offline CapablePartial (cash only – card payments, gift cards, store credit, and Affirm blocked offline per BRD 1.16.2)
Route/pos/sales/checkout

Purpose

The Payment/Checkout screen processes split-tender payments across multiple methods: cash, credit/debit card (SAQ-A semi-integrated), gift card, store credit (on-account), layaway deposit, and Affirm third-party financing. It calculates change due for cash, manages remaining balance across multiple tenders, and finalizes the order once fully paid.

Key Elements

ElementTypeDescriptionBusiness Rule
Amount DuePanelDisplays remaining balance to be paidBRD 1.3: Decrements with each tender applied
Cash TenderButton + InputEnter amount received; auto-calculates change dueBRD 1.3: Change = Tendered - Remaining
Card PaymentButtonInitiates SAQ-A terminal flow; displays “Insert/Tap Card”BRD 1.18: Card data never touches system; token + auth code stored
Gift CardButton + InputScan/enter gift card number; shows balance; apply partial or fullBRD 1.5: Validates balance & expiry; partial allowed
Store Credit (On-Account)ButtonCheck credit limit: Credit Limit - (Debt + Pending Layaways + Cart)BRD 1.3.3: Block if exceeds available credit
LayawayButtonSelect layaway mode; validate minimum deposit percentageBRD 1.3.2: Status -> LAYAWAY
Affirm FinancingButtonCreate Affirm checkout session; display QR code for customerBRD 1.3: Webhook: loan approved + charge_id
Tender ListTableShows all applied payment methods with amountsBRD 1.3: Multiple tenders allowed
Change Due DisplayPanelShows change to return for cash overpaymentBRD 1.3: “Collect: $X.XX” or “Change: $X.XX”
Finalize OrderButtonWrite order record, decrement inventory, award loyalty, record commissionBRD 1.3: POST /orders/finalize
Receipt OptionsButton GroupSelect receipt format: Thermal, A4 Invoice, Gift Receipt, EmailBRD 1.4: Template selection

Wireframe

┌─────────────────────────────────────────────────────────────────────────────┐
│ PAYMENT                                                   [Back] [Cancel]  │
├─────────────────────────────────┬───────────────────────────────────────────┤
│  ORDER SUMMARY                  │  PAYMENT METHODS                         │
│                                 │                                          │
│  Items: 3                       │  ┌──────────┐  ┌──────────┐             │
│  Subtotal:     $254.00          │  │   CASH   │  │   CARD   │             │
│  Discount:     - $25.40         │  └──────────┘  └──────────┘             │
│  Tax:          + $12.12         │  ┌──────────┐  ┌──────────┐             │
│  ─────────────────────          │  │ GIFT CARD│  │ STORE CR │             │
│  TOTAL:        $240.72          │  └──────────┘  └──────────┘             │
│                                 │  ┌──────────┐  ┌──────────┐             │
│  TENDERS APPLIED:               │  │ LAYAWAY  │  │  AFFIRM  │             │
│  ┌────────────────────────┐     │  └──────────┘  └──────────┘             │
│  │ Visa ****4521  $200.00 │     │                                          │
│  │ [Remove]               │     │  CASH ENTRY:                             │
│  └────────────────────────┘     │  ┌────────────────────────────┐          │
│                                 │  │ Amount Received: $50.00    │          │
│  REMAINING:    $40.72           │  └────────────────────────────┘          │
│                                 │                                          │
│                                 │  Change Due:  $9.28                      │
│                                 │                                          │
│                                 │  ┌────────────────────────────────────┐  │
│                                 │  │         FINALIZE & PRINT          │  │
│                                 │  └────────────────────────────────────┘  │
│                                 │  [Thermal] [A4 Invoice] [Gift] [Email]  │
└─────────────────────────────────┴───────────────────────────────────────────┘

Actions & Transitions

ActionNavigates ToRequires Role
Finalize orderSCR-M01-09 Receipt Print / ReprintCASHIER+
Select LayawaySCR-M01-05 Layaway PaymentCASHIER+
Select AffirmSCR-M01-06 Affirm Financing FlowCASHIER+
Click BackSCR-M01-01 Sales Terminal (cart preserved)CASHIER+
Cancel transactionSCR-M01-01 Sales Terminal (cart cleared)MANAGER+

G.4.5 Layaway Payment

AttributeValue
Screen IDSCR-M01-05
Product(s)CASHIER+
BRD Section(s)1.3, 1.3.2
Database Tablesorders (R/W), payments (W), customers (R), inventory_levels (R/W)
State Machine(s)7.4 Layaway States (DEPOSIT_PAID -> RESERVED -> PAID_IN_FULL -> COMPLETED)
Appendix F Servicessale.layaway.command.service, sale.payment.command.service
User RolesCASHIER, MANAGER
Offline CapableNo (requires real-time balance verification and inventory reservation)
Route/pos/sales/layaway

Purpose

The Layaway Payment screen handles creating new layaways (with minimum deposit validation) and processing subsequent payments on existing layaways. When the final payment is received, inventory is released from reserved to sold status. Cancelled layaways trigger deposit refunds according to the configured policy.

Key Elements

ElementTypeDescriptionBusiness Rule
Customer DisplayPanelShows attached customer (required for layaway)BRD 1.3.2: Customer attachment mandatory
Minimum Deposit CalculatorPanelShows minimum deposit percentage and dollar amountBRD 1.3.2: Min deposit % configurable; default 50%
Deposit Amount InputInputEnter deposit amount; validates against minimumBRD 1.3.2: Must meet or exceed minimum deposit
Payment HistoryTableShows all prior payments on this layaway with datesBRD 1.3.2: RESERVED state allows additional payments
Remaining BalancePanelCalculated: Total - Sum(all payments)BRD 1.3.2: Final payment transitions to PAID_IN_FULL
Payment DeadlineDate DisplayShows configured payment deadlineBRD 1.3.2: FORFEITED if deadline missed
Cancel LayawayButtonCancel with refund processingBRD 1.3.2: CANCELLED_REFUND state; refund deposit
Complete LayawayButtonProcess final payment and release inventoryBRD 1.3.2: COMPLETED state; items released

Actions & Transitions

ActionNavigates ToRequires Role
Process depositSCR-M01-04 Payment / Checkout (deposit payment)CASHIER+
Complete layaway (final payment)SCR-M01-09 Receipt Print / ReprintCASHIER+
Cancel layawayConfirmation modal -> SCR-M01-04 (refund)MANAGER+
Back to terminalSCR-M01-01 Sales TerminalCASHIER+

G.4.6 Affirm Financing Flow

AttributeValue
Screen IDSCR-M01-06
Product(s)CASHIER+
BRD Section(s)1.3
Database Tablesorders (R/W), payment_attempts (W)
State Machine(s)7.1 Order States
Appendix F Servicessale.payment.affirm.service, sale.finalize.command.service
User RolesCASHIER, MANAGER
Offline CapableNo (requires active network connection for Affirm API and webhook)
Route/pos/sales/checkout/affirm

Purpose

The Affirm Financing Flow presents a QR code or redirect URL for customers to complete a third-party financing application on their personal device. The screen waits for an Affirm webhook confirming loan approval, then stores the charge_id and loan_id. The full purchase amount is received from Affirm; the customer pays Affirm directly over time.

Key Elements

ElementTypeDescriptionBusiness Rule
Order SummaryPanelShows items, total, and financing amountBRD 1.3: Full amount financed through Affirm
QR Code DisplayImageGenerated QR code for customer to scan and complete Affirm applicationBRD 1.3: POST /payments/affirm/initiate
Status IndicatorBadgeShows: Waiting for Customer / Application Submitted / Approved / DeclinedBRD 1.3: Webhook-driven status updates
TimerDisplayShows elapsed waiting time; timeout at configurable thresholdBRD 1.3: Staff can cancel if customer abandons
Approval ConfirmationAlertShows Affirm charge_id and approval statusBRD 1.3: charge_id, loan_id, status stored
Cancel AffirmButtonCancel financing attempt and return to payment selectionBRD 1.3: Tender list updated

Actions & Transitions

ActionNavigates ToRequires Role
Affirm approvedSCR-M01-04 Payment / Checkout (Affirm tender applied)CASHIER+
Affirm declinedSCR-M01-04 Payment / Checkout (try another method)CASHIER+
CancelSCR-M01-04 Payment / CheckoutCASHIER+

G.4.7 Parked Sales List

AttributeValue
Screen IDSCR-M01-07
Product(s)CASHIER+
BRD Section(s)1.1, 1.1.1
Database Tablesorders (R/W), order_items (R)
State Machine(s)7.2 Parked Sale States (ACTIVE -> PARKED -> ACTIVE or EXPIRED)
Appendix F Servicessale.park.command.service, sale.park.query.service
User RolesCASHIER, MANAGER
Offline CapableYes (parked sales stored locally; retrieve from local state)
Route/pos/sales/parked

Purpose

The Parked Sales List displays all currently parked (held) sales for the active terminal or location. Each entry shows the customer name (if attached), item count, total, and time remaining before the 4-hour TTL expires. Staff can retrieve any parked sale to resume checkout or let expired sales auto-release their soft-reserved inventory.

Key Elements

ElementTypeDescriptionBusiness Rule
Parked Sales TableTableLists all parked sales: customer, item count, subtotal, parked timeBRD 1.1.1: Max 5 parked sales per terminal
Time RemainingBadgeCountdown showing TTL remaining per parked saleBRD 1.1.1: 4-hour TTL; expired sales auto-release inventory
Expired IndicatorBadgeRed badge for sales that have exceeded TTLBRD 1.1.1: EXPIRED state; inventory released
Retrieve ButtonButtonRestore parked sale to active cartBRD 1.1.1: PARKED -> ACTIVE transition
Delete ExpiredButtonRemove expired parked sales from listBRD 1.1.1: Clean up expired entries
Soft-Reserve WarningAlertShows if parked items are being viewed/held by another terminalBRD 1.1: Soft-reserved while parked; visible with warning

Actions & Transitions

ActionNavigates ToRequires Role
Retrieve parked saleSCR-M01-01 Sales Terminal (cart restored)CASHIER+
Delete expired saleStays on list (sale removed)CASHIER+
BackSCR-M01-01 Sales TerminalCASHIER+

G.4.8 Gift Card Operations

AttributeValue
Screen IDSCR-M01-08
Product(s)CASHIER+
BRD Section(s)1.5
Database Tablesgift_cards (R/W), gift_card_transactions (R/W), orders (R/W), order_items (W)
State Machine(s)7.3 Gift Card States (INACTIVE -> ACTIVE -> DEPLETED/EXPIRED/CASHED_OUT)
Appendix F Servicessale.giftcard.command.service, sale.giftcard.query.service
User RolesCASHIER, MANAGER
Offline CapableNo (gift card activation, reload, balance check, and cash-out all blocked offline per BRD 1.16.2)
Route/pos/sales/gift-cards

Purpose

The Gift Card Operations screen handles all gift card lifecycle actions: selling/activating new cards, checking balances, reloading existing cards, and processing cash-outs where jurisdiction rules permit (e.g., California law requires cash-out for balances under $10). The screen enforces jurisdiction-specific compliance rules based on the store location.

Key Elements

ElementTypeDescriptionBusiness Rule
Card Number InputInputScan or manually enter gift card numberBRD 1.5: Unique card number lookup
Action SelectorTab GroupSell New / Check Balance / Reload / Cash OutBRD 1.5: Four distinct operations
Load Amount InputInputDollar amount for new card or reloadBRD 1.5: POST /giftcards/activate
Balance DisplayPanelCurrent balance, expiry date, last activityBRD 1.5: GET /giftcards/{number}/balance
Cash-Out EligibilityAlertShows whether balance qualifies for cash-out under jurisdiction rulesBRD 1.5.2: California $10 threshold; Virginia no cash-out
Jurisdiction RulesInfo PanelDisplays applicable expiry, fee, and cash-out rules for store locationBRD 1.5.2: Strictest-rule-wins default
Transaction HistoryTableShows activation, reloads, redemptions, and cash-outsBRD 1.5: Full audit trail
Add to CartButtonAdds gift card sale or reload as a cart line itemBRD 1.5: Non-discountable item

Actions & Transitions

ActionNavigates ToRequires Role
Sell new gift card (add to cart)SCR-M01-01 Sales Terminal (gift card in cart)CASHIER+
Reload existing card (add to cart)SCR-M01-01 Sales Terminal (reload in cart)CASHIER+
Process cash-outCash dispensed from drawerCASHIER+
BackSCR-M01-01 Sales TerminalCASHIER+

G.4.9 Receipt Print / Reprint

AttributeValue
Screen IDSCR-M01-09
Product(s)CASHIER+
BRD Section(s)1.4
Database Tablesorders (R), order_items (R), payments (R), customers (R)
State Machine(s)
Appendix F Servicessale.receipt.query.service
User RolesCASHIER, MANAGER
Offline CapablePartial (can reprint from local cache for recently completed sales; email requires network)
Route/pos/sales/receipt

Purpose

The Receipt Print/Reprint screen generates and delivers receipts in multiple formats. After completing a sale, it auto-shows with template selection. Staff can also access this screen from Sales History to reprint or email receipts for past transactions. Receipts include a scannable barcode for return/exchange validation.

Key Elements

ElementTypeDescriptionBusiness Rule
Receipt PreviewPanelFull receipt preview with line items, taxes, payments, barcodeBRD 1.4: Receipt data for verification
Template SelectorButton GroupThermal (standard), A4 Invoice (detailed), Gift Receipt (no prices)BRD 1.4: Three template formats
Email InputInputOverride email address for sending digital receiptBRD 1.4: POST /orders/{id}/email-receipt
Print ButtonButtonSend to configured receipt printerBRD 1.4: Thermal printer integration
Receipt BarcodeImageScannable barcode encoding order ID for return validationBRD 1.4: POST /receipts/validate for returns
Offline WatermarkBadgeShows “OFFLINE” watermark on receipts printed during offline modeBRD 1.16: Offline receipt indicator

Actions & Transitions

ActionNavigates ToRequires Role
Print receiptStays (prints to thermal/A4 printer)CASHIER+
Email receiptStays (sends email)CASHIER+
Done / New SaleSCR-M01-01 Sales Terminal (fresh cart)CASHIER+

G.4.10 Cash Drawer Management

AttributeValue
Screen IDSCR-M01-10
Product(s)CASHIER+
BRD Section(s)1.12
Database Tablescash_drawers (R/W), cash_movements (R/W), cash_counts (R/W), cash_drops (R/W), cash_pickups (R), shifts (R/W)
State Machine(s)7.9 Cash Drawer States (CLOSED -> OPENING -> OPEN -> COUNTING -> BALANCED -> CLOSED)
Appendix F Servicessale.cashdrawer.command.service, sale.cashdrawer.count.service, sale.cashdrawer.pickup.service, sale.shift.command.service
User RolesCASHIER (X-Report), MANAGER (Open/Close/Variance approval)
Offline CapableYes (cash operations are local; Z-Report synced on reconnection)
Route/pos/cash-drawer

Purpose

The Cash Drawer Management screen handles the full cash accountability lifecycle: opening with a float, mid-shift X-Reports, cash drops to safe, and end-of-shift Z-Report closure with blind denomination counting. It calculates expected cash based on all cash transactions and flags variances for manager review when outside tolerance.

Key Elements

ElementTypeDescriptionBusiness Rule
Drawer StatusBadgeShows: Closed / Open / Counting / Variance DetectedBRD 1.12.1: Cash Drawer State Machine
Opening Float InputInputEnter starting cash amount when opening drawerBRD 1.12: POST /cash-drawer/open
Denomination GridInput GridCount each denomination: pennies through hundreds, rolled coinsBRD 1.12: Blind count (expected not shown)
X-Report ButtonButtonGenerate mid-shift cash snapshot without closing drawerBRD 1.12.2: Unlimited per shift; does not close drawer
Z-Report ButtonButtonGenerate end-of-shift report; closes drawer and resets countersBRD 1.12.2: Once per shift; closes drawer
Variance DisplayPanelShows: Expected, Counted, Variance (+/-)BRD 1.12: Variance = Counted - Expected
Manager ApprovalInputManager PIN + reason code for out-of-tolerance varianceBRD 1.12: MANAGER_REVIEW state
Cash DropButtonRecord cash drop to safe with amountBRD 1.12: Cash drops reduce drawer balance
Paid In / Paid OutButton PairRecord non-sale cash movements (petty cash, vendor payments)BRD 1.12: Logged in cash_movements
Cash Movement LogTableChronological list of all cash in/out events for current shiftBRD 1.12.3: Immutable audit trail

Wireframe

┌─────────────────────────────────────────────────────────────────────────────┐
│ CASH DRAWER MANAGEMENT                   Drawer: OPEN     [X-Report] [?]  │
├─────────────────────────────────────┬───────────────────────────────────────┤
│  DENOMINATION COUNT (BLIND)         │  SHIFT SUMMARY                       │
│                                     │                                      │
│  COINS          Qty    Amount       │  Opening Float:     $200.00          │
│  Pennies ($0.01) [  ]  $0.00       │  Cash Sales:        $1,245.00        │
│  Nickels ($0.05) [  ]  $0.00       │  Cash Refunds:      -  $85.00        │
│  Dimes   ($0.10) [  ]  $0.00       │  Paid Out:          -  $50.00        │
│  Quarters($0.25) [  ]  $0.00       │  Cash Drops:        - $500.00        │
│  Half $  ($0.50) [  ]  $0.00       │  ──────────────────────────────       │
│  Dollar  ($1.00) [  ]  $0.00       │  Expected Cash:      $810.00         │
│                                     │  Counted Cash:       $805.00         │
│  BILLS          Qty    Amount       │  ──────────────────────────────       │
│  $1             [  ]  $0.00        │  VARIANCE:           -$5.00 ⚠        │
│  $5             [  ]  $0.00        │                                      │
│  $10            [  ]  $0.00        │  ┌──────────────────────────────┐     │
│  $20            [  ]  $0.00        │  │ Manager PIN: [____]         │     │
│  $50            [  ]  $0.00        │  │ Reason: [Counting error ▼]  │     │
│  $100           [  ]  $0.00        │  └──────────────────────────────┘     │
│  Rolled Coins   [____] $0.00       │                                      │
│                                     │  Transactions: 47                    │
│  COUNTED TOTAL:  $805.00           │  Shift Duration: 8h 15m              │
│                                     │                                      │
│  [Paid In] [Paid Out] [Cash Drop]  │  [Close Drawer & Print Z-Report]     │
└─────────────────────────────────────┴───────────────────────────────────────┘

Actions & Transitions

ActionNavigates ToRequires Role
Open drawer (enter float)Stays (drawer status -> OPEN)MANAGER+
Print X-ReportStays (report generated, drawer stays open)CASHIER+
Close drawer (Z-Report)Prints Z-Report; drawer status -> CLOSEDCASHIER+ (MANAGER for variance approval)
Cash dropStays (cash_drops record created)CASHIER+
Paid In / Paid OutStays (cash_movements record created)MANAGER+

G.4.11 Price Check Mode

AttributeValue
Screen IDSCR-M01-11
Product(s)CASHIER+
BRD Section(s)1.13
Database Tablesproducts (R), variants (R), pricing_rules (R), inventory_levels (R)
State Machine(s)
Appendix F Servicessale.price-check.query.service
User RolesCASHIER, MANAGER
Offline CapableYes (degraded – uses product_cache; stale pricing warning shown)
Route/pos/sales/price-check

Purpose

Price Check Mode allows staff to quickly scan an item and display its current selling price, stock level, and any active promotions without adding the item to the cart. This is used for customer inquiries (“How much is this?”). The display auto-returns to the normal sale mode after a configurable timeout or keypress.

Key Elements

ElementTypeDescriptionBusiness Rule
Barcode InputInputScan or enter item barcode/SKUBRD 1.13: GET /products/{sku}
Large Price DisplayPanelProduct name, SKU, and price displayed in large fontBRD 1.13: Customer-visible price display
Stock LevelBadgeCurrent stock count at this locationBRD 1.13: Show stock level
Promotion AlertBannerShows active sale/promotion: “Was $50, Now $39.99”BRD 1.13: Active promotion display
Auto-TimeoutTimerReturns to sale mode after configurable timeoutBRD 1.13: Press any key or timeout
Stale Price WarningAlertWarning when operating from cached prices (offline)BRD 1.16: product_cache may be stale

Actions & Transitions

ActionNavigates ToRequires Role
Press any key / TimeoutSCR-M01-01 Sales TerminalCASHIER+
Scan another itemStays (new product displayed)CASHIER+

G.4.12 Coupon Entry

AttributeValue
Screen IDSCR-M01-12
Product(s)CASHIER+
BRD Section(s)1.14
Database Tablesorders (R/W), order_items (R/W), pricing_rules (R)
State Machine(s)7.10 Coupon States (AVAILABLE -> APPLIED -> REDEEMED)
Appendix F Servicessale.promotion.engine.service
User RolesCASHIER, MANAGER
Offline CapableYes (degraded – coupon validation from cached rules; may accept expired coupons)
Route/pos/sales/terminal (modal overlay)

Purpose

The Coupon Entry modal allows staff to scan or manually enter coupon codes. The system validates single-use coupons (checking if already redeemed) and multi-use coupons (checking usage limits and expiry). Valid coupons are applied to the cart according to the discount calculation order (step 5 of 7). Coupons are marked REDEEMED upon order finalization.

Key Elements

ElementTypeDescriptionBusiness Rule
Coupon Code InputInputScan barcode or type coupon codeBRD 1.14: POST /coupons/validate
Validation StatusAlertShows: Valid, Already Redeemed, Expired, Limit ReachedBRD 1.14: Single-use vs multi-use validation
Discount PreviewPanelShows discount amount and type (% off, $ off, BOGO)BRD 1.14.1: APPLIED state preview
Stacking WarningAlertWarns if coupon cannot stack with other active discountsBRD 1.2.1: Calculation order step 5
Savings DisplayPanelShows total savings from applied couponBRD 1.14: Display savings
Apply / CancelButton PairConfirm coupon application or cancelBRD 1.14: Coupon linked to order at finalize

Actions & Transitions

ActionNavigates ToRequires Role
Apply couponReturns to SCR-M01-01 Sales Terminal (coupon applied)CASHIER+
CancelReturns to SCR-M01-01 (no change)CASHIER+

G.4.13 Loyalty Display

AttributeValue
Screen IDSCR-M01-13
Product(s)CASHIER+
BRD Section(s)1.15
Database Tablescustomers (R), loyalty_accounts (R/W), loyalty_transactions (R/W)
State Machine(s)7.11 Customer Tier States (BRONZE -> SILVER -> GOLD)
Appendix F Servicessale.loyalty.command.service
User RolesCASHIER, MANAGER
Offline CapableNo (loyalty point balance requires real-time server data for accuracy)
Route/pos/sales/terminal (embedded panel or overlay)

Purpose

The Loyalty Display shows the attached customer’s current loyalty status during a sale: tier (Bronze/Silver/Gold), points balance, points to be earned from this transaction, and available redemption options. It supports three program types: points-per-dollar, punch cards, and spend thresholds. Points are awarded upon order finalization; redemptions are applied after tax calculation (step 7 of discount order).

Key Elements

ElementTypeDescriptionBusiness Rule
Tier BadgeBadgeCurrent tier: Bronze (1x), Silver (1.5x + 5%), Gold (2x + 10%)BRD 1.15.1: Tier state machine
Points BalancePanelCurrent redeemable points and dollar equivalentBRD 1.15: 500 points = $5 off
Points to EarnPanelPoints that will be awarded from this transactionBRD 1.15: 1 point per $1 (modified by tier multiplier)
Redeem PointsButtonApply points redemption to current saleBRD 1.2.1: Step 7 – after tax calculation
Punch Card ProgressProgress BarShows punch count for qualifying items (e.g., “3 of 10”)BRD 1.15: Buy 10 Get 1 Free
Spend ThresholdProgress BarShows progress toward next reward thresholdBRD 1.15: Spend $100, Get $10 Off
Tier Upgrade AlertToastNotification when sale triggers tier upgradeBRD 1.15.1: Automatic tier upgrades

Actions & Transitions

ActionNavigates ToRequires Role
Redeem pointsStays (redemption applied to cart totals)CASHIER+
View loyalty historySCR-M02-02 Customer Profile (loyalty tab)CASHIER+

G.4.14 Return Processing

AttributeValue
Screen IDSCR-M01-14
Product(s)CASHIER+
BRD Section(s)1.4, 1.9
Database Tablesorders (R), order_items (R), returns (R/W), return_items (R/W), store_credits (W), customers (R/W), loyalty_accounts (R/W), cash_movements (W), inventory_levels (R/W)
State Machine(s)7.1 Order States (COMPLETED -> PARTIALLY_RETURNED / FULLY_RETURNED)
Appendix F Servicessale.return.command.service, sale.return-policy.engine.service, sale.receipt.validate.service
User RolesCASHIER, MANAGER
Offline CapablePartial (return with receipt allowed offline; queued for sync; no-receipt returns blocked offline)
Route/pos/sales/return

Purpose

Return Processing is a two-phase flow: first, locate the original sale via receipt barcode scan or order number lookup; second, select items to return and choose the refund method. The return policy engine evaluates eligibility based on receipt presence, time window (0-30 days: full refund; 31-90 days: store credit; 90+ days: manager override), and item-specific rules (final sale blocked, restocking fees for electronics).

Key Elements

ElementTypeDescriptionBusiness Rule
Receipt Barcode ScannerInputScan receipt barcode to validate and load original saleBRD 1.4: POST /receipts/validate {barcode_data}
Order Number SearchInputManual order number entry as fallbackBRD 1.4: GET /orders/{id}
Original Sale DisplayPanelShows all items from original order with quantities and pricesBRD 1.4: Original sale data loaded
Item Selection CheckboxesCheckbox GroupSelect which items to return with quantity controlsBRD 1.4: Partial returns supported
Policy Evaluation ResultAlertShows: Full Refund / Store Credit Only / Manager Override Required / BlockedBRD 1.9: Time-based policy tiers
Refund Method SelectorRadio GroupOriginal Payment (Manual on terminal or Auto via token) / Cash / Store CreditBRD 1.4.1: Card refund method selection
Restocking FeePanelShows applicable restocking fee (e.g., 15% for electronics)BRD 1.9: Item-specific rules
Final Sale BlockAlertBlocks return for items flagged as final saleBRD 1.9: No returns on final sale
Manager PINInputRequired for policy exceptions and no-receipt returnsBRD 1.9: Manager override with reason code
Commission Reversal PreviewPanelShows proportional commission reversal calculationBRD 1.8.1: Proportional reversal on return
Return ReasonSelectRequired reason code for the returnBRD 1.4: Reason code for audit

Wireframe

┌─────────────────────────────────────────────────────────────────────────────┐
│ RETURN PROCESSING                                          [Cancel] [Help] │
├─────────────────────────────────────────────────────────────────────────────┤
│  PHASE 1: LOCATE ORIGINAL SALE                                             │
│  ┌──────────────────────────────────────────────────────────────────────┐  │
│  │ Scan Receipt Barcode: [________________________]  [Search by Order#] │  │
│  └──────────────────────────────────────────────────────────────────────┘  │
│  ✓ Receipt Valid — Order #LOC-20260215-0042 — Feb 15, 2026 (14 days ago)  │
│  Policy: WITHIN 30 DAYS — Full Refund Eligible                             │
├─────────────────────────────────────────────────────────────────────────────┤
│  PHASE 2: SELECT ITEMS TO RETURN                                           │
│                                                                             │
│  [✓] NXJ-1001  Blue Jacket     1 of 1   $89.00   Reason: [Wrong Size ▼]  │
│  [ ] NXJ-2045  Cotton Tee      0 of 2   $25.00                            │
│  [✓] NXJ-3012  Slim Pants      1 of 1   $65.00   Reason: [Defective ▼]   │
│                                                                             │
│  Refund Method: (●) Original Payment  ( ) Cash  ( ) Store Credit          │
│                 [●] Auto via token  [ ] Manual on terminal                 │
│                                                                             │
│  Subtotal:         $154.00     Commission Reversal:  $5.13                 │
│  Tax Refund:       +  $8.16    (66.7% of original $7.70)                   │
│  Restocking Fee:     $0.00                                                  │
│  ──────────────────────────                                                 │
│  REFUND TOTAL:     $162.16                                                  │
│                                                                             │
│  ┌──────────────────────────────────────────────────────────────────────┐  │
│  │                        PROCESS RETURN                               │  │
│  └──────────────────────────────────────────────────────────────────────┘  │
└─────────────────────────────────────────────────────────────────────────────┘

Actions & Transitions

ActionNavigates ToRequires Role
Process returnSCR-M01-09 Receipt Print / Reprint (return receipt)CASHIER+
Manager override (no receipt / expired)Manager PIN modal -> continues return flowMANAGER+
Cancel returnSCR-M01-01 Sales TerminalCASHIER+

G.4.15 Exchange Processing

AttributeValue
Screen IDSCR-M01-15
Product(s)CASHIER+
BRD Section(s)1.4
Database Tablesorders (R/W), order_items (R/W), returns (R/W), return_items (R/W), products (R), variants (R), inventory_levels (R/W)
State Machine(s)7.1 Order States
Appendix F Servicessale.exchange.command.service, sale.return-policy.engine.service
User RolesCASHIER, MANAGER
Offline CapableNo (requires real-time inventory and pricing for new items)
Route/pos/sales/exchange

Purpose

Exchange Processing is a dedicated flow for swapping items (e.g., different size or color). Staff load the original sale, select items to exchange OUT, scan/add new items IN, and the system calculates the price difference. If the customer owes money, payment is collected; if the store owes a refund, it is processed. Even exchanges require no payment.

Key Elements

ElementTypeDescriptionBusiness Rule
Original Sale LoaderPanelLoad original order to select items for exchange outBRD 1.4: GET /orders/{id}
Items Out SelectionCheckbox GroupSelect items being returned in the exchangeBRD 1.4: Items being exchanged out
Items In ScannerInputScan or search for new replacement itemsBRD 1.4: Items being exchanged in
Price Difference CalculatorPanelShows: Items Out value vs Items In value, net differenceBRD 1.4: Calculate price difference
Collect PaymentButtonProcess additional payment if customer owes moneyBRD 1.4: “Collect: $15.00 difference”
Issue RefundButtonProcess refund if store owes customerBRD 1.4: “Refund: $10.00 to customer”
Even ExchangeBadgeIndicates no payment requiredBRD 1.4: No payment required
Commission AdjustmentPanelShows commission adjustment based on price differenceBRD 1.8.1: Adjust commission if price difference

Actions & Transitions

ActionNavigates ToRequires Role
Process exchange (collect payment)SCR-M01-04 Payment / CheckoutCASHIER+
Process exchange (issue refund)Refund processed -> SCR-M01-09 ReceiptCASHIER+
Process even exchangeSCR-M01-09 Receipt Print / ReprintCASHIER+
CancelSCR-M01-01 Sales TerminalCASHIER+

G.4.16 Special Order Create

AttributeValue
Screen IDSCR-M01-16
Product(s)CASHIER+
BRD Section(s)1.6
Database Tablesorders (R/W), order_items (R/W), products (R), variants (R), customers (R/W), payments (W)
State Machine(s)7.5 Special Order States (CREATED -> DEPOSIT_PAID -> ORDERED -> RECEIVED -> READY_FOR_PICKUP -> COMPLETED)
Appendix F Servicessale.specialorder.command.service
User RolesCASHIER, MANAGER
Offline CapableNo (requires real-time product lookup and customer verification)
Route/pos/sales/special-order

Purpose

The Special Order screen allows staff to create orders for out-of-stock items with customer deposits. A customer must be attached, and a minimum deposit (50% or full) is collected. The order progresses through vendor ordering, receiving, staging, and customer pickup. Notifications are sent when items arrive. Abandoned orders (30+ days without pickup) are flagged.

Key Elements

ElementTypeDescriptionBusiness Rule
Product SearchInputSearch for out-of-stock products to special orderBRD 1.6: “Available for Special Order”
Customer AttachmentPanelRequired customer profile for special ordersBRD 1.6: Attach Customer (Required)
Quantity InputInputEnter quantity neededBRD 1.6: Quantity for vendor ordering
Deposit CalculatorPanelShows minimum deposit (50% or full) and amount dueBRD 1.6: Min 50% or Full deposit required
Deposit PaymentButtonProcess deposit payment through standard payment flowBRD 1.6: POST /special-orders/create
Order Status DisplayBadgeShows current state in special order lifecycleBRD 1.6.1: 8-state machine
Expected Delivery DateDate DisplayEstimated arrival date from vendorBRD 1.6: Purchasing team notification
Special Order ReceiptButtonPrint receipt with order number (SO-XXXXX)BRD 1.6: Print Special Order Receipt

Actions & Transitions

ActionNavigates ToRequires Role
Process depositSCR-M01-04 Payment / Checkout (deposit amount)CASHIER+
Cancel special orderStays (order cancelled, no deposit)MANAGER+
Print receiptSCR-M01-09 Receipt Print / ReprintCASHIER+
BackSCR-M01-01 Sales TerminalCASHIER+

G.4.17 Multi-Store Inventory Lookup

AttributeValue
Screen IDSCR-M01-17
Product(s)CASHIER+
BRD Section(s)1.7
Database Tablesinventory_levels (R), products (R), variants (R), locations (R), transfer_orders (R/W), transfer_order_items (R/W)
State Machine(s)7.6 Transfer States, 7.7 Reservation States
Appendix F Servicessale.cart.command.service
User RolesCASHIER, MANAGER
Offline CapableNo (requires network for cross-store inventory query, max 5 min stale)
Route/pos/sales/multi-store

Purpose

Multi-Store Inventory Lookup displays real-time (eventually consistent, max 5-minute stale) stock levels across all store locations for a given product. When the current store is out of stock, staff can initiate a transfer request (ship to this store), a reservation (customer picks up at other store), or a ship-to-customer order. All options require full payment before processing.

Key Elements

ElementTypeDescriptionBusiness Rule
Product DisplayPanelShows product name, SKU, image for the searched itemBRD 1.7: GET /inventory/multi-store/{sku}
Stock Level GridTableStock count at each location: Store A: 5, Store B: 2, etc.BRD 1.7: Eventually consistent (max 5 min stale)
Request TransferButtonCreate transfer from source store to current storeBRD 1.7: Full payment required; POST /transfers/request
Reserve at StoreButtonReserve item for customer pickup at source storeBRD 1.7: Full payment required; POST /reservations/create
Ship to CustomerButtonShip directly from source store to customer addressBRD 1.7.3: Carrier shipping cost calculation
Staleness IndicatorBadgeShows time since last inventory sync per locationBRD 1.7: Max 5 min stale data
Transfer ReceiptButtonPrint transfer receipt or pickup voucher for customerBRD 1.7: Transfer #TRF-789 receipt

Actions & Transitions

ActionNavigates ToRequires Role
Request transferSCR-M01-04 Payment / Checkout (full payment required)CASHIER+
Reserve at storeSCR-M01-04 Payment / Checkout (full payment required)CASHIER+
Ship to customerSCR-M01-19 Ship-to-CustomerCASHIER+
BackSCR-M01-01 Sales TerminalCASHIER+

G.4.18 Hold for Pickup (BOPIS)

AttributeValue
Screen IDSCR-M01-18
Product(s)CASHIER+
BRD Section(s)1.11
Database Tablesorders (R/W), order_items (R), customers (R), inventory_levels (R/W)
State Machine(s)7.1 Order States (HOLD_FOR_PICKUP -> READY_FOR_PICKUP -> COMPLETED / HOLD_EXPIRED)
Appendix F Servicessale.hold-for-pickup.command.service
User RolesCASHIER, MANAGER
Offline CapableNo (requires real-time inventory reservation and customer verification)
Route/pos/sales/hold-pickup

Purpose

Hold for Pickup manages fully paid items held for later customer pickup at the current store. This includes both in-store holds (customer pays now, picks up later) and BOPIS orders (buy online, pick up in store). The screen shows pickup deadline (default 7 days), handles staging items as “ready,” and manages expired holds with customer contact workflows.

Key Elements

ElementTypeDescriptionBusiness Rule
Held Orders ListTableAll active hold-for-pickup orders with status and deadlineBRD 1.11: HOLD_FOR_PICKUP and READY_FOR_PICKUP states
Pickup DeadlineDate DisplayConfigurable deadline (default 7 days) per orderBRD 1.11: Set Pickup Deadline
Stage ItemsButtonMark items as staged and ready for customer pickupBRD 1.11.1: HOLD_FOR_PICKUP -> READY_FOR_PICKUP
Release to CustomerButtonVerify customer ID and release itemsBRD 1.11: PATCH /orders/{id}/pickup-complete
Expired HoldsAlertFlagged orders past deadline with customer contact requiredBRD 1.11.1: HOLD_EXPIRED -> CONTACT_CUSTOMER
Extend DeadlineButtonExtend pickup deadline for a held orderBRD 1.11.1: CONTACT_CUSTOMER -> READY_FOR_PICKUP
Refund ExpiredButtonProcess refund for expired hold if customer wants money backBRD 1.11.1: CONTACT_CUSTOMER -> REFUNDED
BOPIS IndicatorBadgeIdentifies orders originating from online purchaseBRD 1.11: In-store POS or Online order (BOPIS)
Print Pickup SlipButtonPrint pickup slip with order detailsBRD 1.11: Print Pickup Slip

Actions & Transitions

ActionNavigates ToRequires Role
Create hold (from checkout)SCR-M01-04 Payment / Checkout (full payment)CASHIER+
Release to customerOrder COMPLETED; SCR-M01-09 ReceiptCASHIER+
Refund expired holdSCR-M01-14 Return ProcessingMANAGER+
Extend deadlineStays (deadline updated)MANAGER+

G.4.19 Ship-to-Customer

AttributeValue
Screen IDSCR-M01-19
Product(s)CASHIER+
BRD Section(s)1.7, 1.7.3, 1.7.4
Database Tablesorders (R/W), order_items (R/W), customers (R), inventory_levels (R), locations (R)
State Machine(s)7.8 Ship-to-Customer States (REQUESTED -> PAID -> PICKING -> PACKED -> SHIPPED -> DELIVERED)
Appendix F Servicessale.cart.command.service, sale.finalize.command.service
User RolesCASHIER, MANAGER
Offline CapableNo (requires carrier API for real-time shipping cost calculation)
Route/pos/sales/ship-to-customer

Purpose

Ship-to-Customer enables direct shipping from a source store to the customer’s address. Staff enter the customer’s shipping address, the system queries carrier APIs for real-time shipping rates (Standard 3-5 days, Express 1-2 days), and the customer pays the full item price plus shipping cost. The source store packs and ships the item with tracking.

Key Elements

ElementTypeDescriptionBusiness Rule
Source Store SelectorSelectChoose which store has the item in stockBRD 1.7.3: Source store with inventory
Shipping Address FormFormCustomer address entry (or pre-fill from customer profile)BRD 1.7.3: Enter Address Details
Shipping Rate DisplayTableShows carrier options with prices and delivery estimatesBRD 1.7.3: Standard ($8.99) vs Express ($15.99)
Total CalculatorPanelItem price + selected shipping costBRD 1.7.3: Total = Item Price + Shipping Cost
Tracking InfoPanelShows tracking number and carrier once shippedBRD 1.7.4: Tracking number from carrier label
Shipment StatusBadgeREQUESTED / PAID / PICKING / PACKED / SHIPPED / DELIVEREDBRD 1.7.4: Ship-to-Customer State Machine
Customer NotificationsInfoEmail sent at SHIPPED (tracking) and DELIVERED (confirmation)BRD 1.7: TMPL-SHIPMENT-TRACKING, TMPL-DELIVERY-CONFIRMATION

Actions & Transitions

ActionNavigates ToRequires Role
Confirm shipping optionSCR-M01-04 Payment / Checkout (item + shipping)CASHIER+
CancelSCR-M01-17 Multi-Store Inventory LookupCASHIER+

G.4.20 Sales Reports Dashboard

AttributeValue
Screen IDSCR-M01-20
Product(s)MANAGER+
BRD Section(s)1.8, 1.19, 1.1.2, 1.3.4, 1.4.2, 1.5.3
Database Tablesorders (R), order_items (R), payments (R), returns (R), return_items (R), shifts (R), cash_drawers (R), cash_movements (R), gift_cards (R), gift_card_transactions (R), reports (R/W)
State Machine(s)
Appendix F Servicessale.history.query.service, sale.daily-summary.projection.service
User RolesMANAGER, OWNER, AUDITOR
Offline CapableNo (requires server-side aggregation of sales data)
Route/admin/reports/sales

Purpose

The Sales Reports Dashboard provides comprehensive sales analytics across all report categories defined in Module 1: daily sales summaries, hourly heatmaps, payment method breakdowns, discount usage, return summaries, gift card liability, variance history, and more. Managers can filter by date range, location, employee, and status, and export results to CSV.

Key Elements

ElementTypeDescriptionBusiness Rule
Report SelectorTab Group / DropdownChoose from 20+ report types across all sales subsectionsBRD 1.1.2-1.18.4: All report types
Date Range PickerInputFilter by date range (today, this week, this month, custom)BRD 1.19: Date-based filtering
Location FilterSelectFilter by store location or “All Locations”BRD 1.8: Per-location reporting
Employee FilterSelectFilter by employee for commission and performance reportsBRD 1.8: Employee-specific data
Summary CardsPanel GridKey metrics: Total Sales, Avg Transaction, Return Rate, etc.BRD 1.1.2: Daily Sales Summary
Data TableTableDetailed tabular data for selected reportBRD 1.19: Paginated results
Chart VisualizationChartBar charts, line charts, heatmaps for visual analysisBRD 1.1.2: Hourly Sales Heatmap
Export CSVButtonExport current report data to CSV fileBRD 1.19: Data export
Save ReportButtonSave report configuration for quick accessReports table: Saved configurations

Actions & Transitions

ActionNavigates ToRequires Role
Select report typeStays (data reloads for selected report)MANAGER+
Export CSVDownload file (stays on page)MANAGER+
Click order rowSCR-M01-09 Receipt Print / Reprint (order detail)MANAGER+
Commission reports tabSCR-M01-21 Commission ManagementMANAGER+

G.4.21 Commission Management

AttributeValue
Screen IDSCR-M01-21
Product(s)MANAGER+
BRD Section(s)1.8
Database Tablesorders (R), order_items (R), returns (R), customers (R)
State Machine(s)
Appendix F Servicessale.commission.command.service
User RolesMANAGER, OWNER
Offline CapableNo (requires server-side aggregation of commission data)
Route/admin/reports/commissions

Purpose

The Commission Management screen provides detailed commission tracking per employee. It shows total sales, commission earned, returns impact (proportional reversal), and net commission for a configurable period. Managers can drill into individual transactions to see commission calculation details and review reversal adjustments from voids and returns.

Key Elements

ElementTypeDescriptionBusiness Rule
Employee SelectorSelectChoose employee or view all employeesBRD 1.8: Per-employee commission tracking
Period SelectorDate RangeSelect commission period (weekly, biweekly, monthly)BRD 1.8.2: Period overview
Commission SummaryTableEmployee, Sales Count, Sales Total, Commission Earned, Returns Impact, NetBRD 1.8.2: Commission Summary report
Commission Rate DisplayPanelShows employee’s commission rate and tierBRD 1.8.1: percentage_of_sale base method
Reversal LogTableShows commission adjustments from voids (100%) and returns (proportional)BRD 1.8.1: Void=full reversal, Return=proportional
Proportional Calc DetailPanelOriginal Commission x (Returned Value / Original Sale Value)BRD 1.8.1: Proportional calculation formula
ExportButtonExport commission data for payroll processingBRD 1.8.2: Commission by Employee report

Actions & Transitions

ActionNavigates ToRequires Role
Click employee rowDrill-down to employee transaction detailMANAGER+
Click order in reversal logSCR-M01-09 Receipt Print / Reprint (order detail)MANAGER+
ExportDownload CSV (stays on page)MANAGER+

G.4.22 Manager Discrepancy Review

AttributeValue
Screen IDSCR-M01-22
Product(s)MANAGER+
BRD Section(s)1.16, 1.16.3
Database Tablesorders (R/W), order_items (R), shifts (R), cash_counts (R), cash_movements (R)
State Machine(s)7.12 Connectivity States
Appendix F Servicessale.offline.sync.service
User RolesMANAGER, OWNER
Offline CapableNo (this screen reviews discrepancies detected during online sync)
Route/admin/discrepancy-review

Purpose

The Manager Discrepancy Review screen displays all flagged discrepancies from offline-to-online sync operations and cash drawer variances. When the POS reconnects after offline operation, the server applies current prices (server-authoritative) and logs any differences. Managers review each flagged transaction, decide whether customer credits are warranted for price changes, and acknowledge or resolve each discrepancy.

Key Elements

ElementTypeDescriptionBusiness Rule
Discrepancy QueueTableList of all flagged items: type, order, cached price vs server price, statusBRD 1.16.3: Server is authoritative
Discrepancy Type FilterSelectFilter by: Price Changed, Out of Stock, Promotion Expired, Customer DeletedBRD 1.16.3: Six discrepancy types
Price Difference DetailPanelShows cached price at time of sale vs current server price, deltaBRD 1.16.3: Flag-on-sync price discrepancy
Customer Credit ActionButtonIssue store credit for price difference if warrantedBRD 1.16.3: Manager decides if credit warranted
AcknowledgeButtonMark discrepancy as reviewed (no action needed)BRD 1.16.3: Review and approve
ResolveButtonMark as resolved with notesBRD 1.16.3: Resolution tracking
Cash Variance SectionPanelCash drawer variances from shift close operationsBRD 1.12.3: Variance History Report
Offline Sale CountBadgeTotal number of sales processed while offlineBRD 1.16: Queue count from sync

Actions & Transitions

ActionNavigates ToRequires Role
Issue customer creditStore credit created -> stays on pageMANAGER+
Acknowledge discrepancyStays (item marked as reviewed)MANAGER+
Click order detailSCR-M01-09 Receipt Print / ReprintMANAGER+
Resolve allStays (batch resolution)OWNER+

G.5 Module 2: Customer Screens (10 Screens)

BRD Sections: 2.1-2.8 | Appendix F: §F.5 (7 services) | Pattern: Standard CRUD

Cross-Reference: See Ch 05, Sections 2.1-2.8 for business rules. See Ch 08, Domain 5 (Customer Loyalty & Gift Cards) for table schemas. See Appendix F, §F.5 for service breakdown.


G.5.1 Customer List / Directory

AttributeValue
Screen IDSCR-M02-01
Product(s)All Roles
BRD Section(s)2.1
Database Tablescustomers (R), loyalty_accounts (R)
State Machine(s)
Appendix F Servicescustomer.search.query.service
User RolesCASHIER, MANAGER, OWNER
Offline CapableNo (customer search requires real-time uniqueness and server query)
Route/customers (MANAGER+), /pos/customers (CASHIER+ overlay)

Purpose

The Customer List is the primary directory for searching and browsing customer profiles. It supports search by name, phone, email, or loyalty number with real-time filtering. On the sales terminal, it appears as a search overlay for attaching customers to sales; for managers, it provides full list management with sorting, filtering by group/tier, and bulk export capabilities.

Key Elements

ElementTypeDescriptionBusiness Rule
Search BarInputSearch by name, phone, email, or loyalty numberBRD 2.1: GET /customers/search
Customer TableTableName, phone, email, tier, group, last visit, total spentBRD 2.1: Paginated customer list
Tier FilterSelectFilter by tier: All, Bronze, Silver, GoldBRD 2.2: Customer tiers
Group FilterSelectFilter by group: All, Retail, Wholesale, VIP, StaffBRD 2.2: Customer groups
Sort OptionsSelectSort by: Name, Last Visit, Total Spent, Loyalty PointsBRD 2.1: Customer directory sorting
Create NewButtonOpen customer creation formBRD 2.1: POST /customers/create
Export CSVButtonExport filtered customer list (max 1,000 rows)BRD 2.5: Limit 1000 rows per batch
Quick AttachButtonAttach selected customer to current POS sale (POS mode only)BRD 1.1: Attach Customer to sale

Actions & Transitions

ActionNavigates ToRequires Role
Click customer rowSCR-M02-02 Customer Profile / DetailCASHIER+
Click “Create New”SCR-M02-03 Customer Create / EditCASHIER+
Click “Export CSV”Download file (stays on page)MANAGER+
Quick Attach (POS)Returns to SCR-M01-01 Sales Terminal (customer attached)CASHIER+

G.5.2 Customer Profile / Detail

AttributeValue
Screen IDSCR-M02-02
Product(s)All Roles
BRD Section(s)2.1, 2.3, 2.4
Database Tablescustomers (R), loyalty_accounts (R), loyalty_transactions (R), orders (R), returns (R), store_credits (R), gift_cards (R)
State Machine(s)7.11 Customer Tier States
Appendix F Servicescustomer.profile.crud.service, customer.search.query.service
User RolesCASHIER, MANAGER, OWNER
Offline CapableNo (requires real-time customer data including balances and history)
Route/customers/:id

Purpose

The Customer Profile is a dense information screen showing all aspects of a customer’s relationship with the business: personal details, contact information, loyalty tier and points, purchase history, store credit balances, notes and preferences, and communication settings. It serves as the central hub from which staff navigate to edit, merge, delete, or manage customer-specific actions.

Key Elements

ElementTypeDescriptionBusiness Rule
Customer HeaderPanelName, customer number, tier badge, group badge, last visitBRD 2.1: Customer overview
Contact InfoPanelPhone, email, shipping address, billing addressBRD 2.1: Distinct shipping and billing addresses
Loyalty SummaryPanelTier, points balance, lifetime points, point multiplierBRD 1.15: Tier benefits display
Purchase HistoryTableRecent orders with date, total, status, locationBRD 2.1: Sales history linked to customer
Store Credit BalancePanelActive store credits with amounts and expiry datesStore credits table: remaining_amount, expires_at
Account BalancePanelOn-account debt, credit limit, available creditBRD 1.3.3: Credit Limit calculation
Notes & PreferencesPanelClothing size, shoe size, color preferences, free-form notesBRD 2.3: Structured and free-form notes
Communication PrefsPanelEmail opt-in, SMS opt-in, preferred contact, Do Not Contact flagBRD 2.4: Marketing consent status
TagsBadge GroupCustomer tags (e.g., “High Value”, “Returns Often”)Customers table: tags[] array
Tax StatusBadgeTax exempt status and exemption certificate IDBRD 2.1: Custom tax rates

Wireframe

┌─────────────────────────────────────────────────────────────────────────────┐
│ CUSTOMER PROFILE                                [Edit] [Merge] [Delete] [?]│
├─────────────────────────────────────────────────────────────────────────────┤
│  ┌───────────────────────────────────┬─────────────────────────────────────┐│
│  │ JANE DOE  #C-00142               │  LOYALTY                           ││
│  │ ★ Gold Tier    VIP Group         │  Tier: GOLD (2x points, 10% off)   ││
│  │                                   │  Points: 2,450 ($24.50 available)  ││
│  │ Phone: (804) 555-1234            │  Lifetime: 12,800 pts              ││
│  │ Email: jane@example.com          │  Next Downgrade: $5,000/yr spend   ││
│  │ Last Visit: Feb 28, 2026         │  Annual Spend: $6,200              ││
│  │ Total Spent: $18,450             │                                     ││
│  │ Visits: 84                        │  ACCOUNT                           ││
│  │                                   │  Credit Limit: $500               ││
│  │ Shipping: 123 Main St, Suite 4   │  Current Debt: $0.00              ││
│  │           Richmond, VA 23220     │  Available: $500.00                ││
│  │ Billing:  Same as shipping       │  Store Credits: $25.00             ││
│  │                                   │                                     ││
│  │ Tax: Standard (not exempt)       │  Tags: [High Value] [VIP]          ││
│  └───────────────────────────────────┴─────────────────────────────────────┘│
│  ┌────────────────────────────────────────────────────────────┐             │
│  │ NOTES & PREFERENCES                               [Edit] │             │
│  │ Size: M  |  Shoe: 8.5  |  Colors: Navy, Charcoal        │             │
│  │ Brands: Levi's, Carhartt                                  │             │
│  │ Note: "Prefers classic styles, allergic to wool"          │             │
│  └────────────────────────────────────────────────────────────┘             │
│  ┌────────────────────────────────────────────────────────────┐             │
│  │ COMMUNICATION             [Edit]                          │             │
│  │ Email Marketing: ON | SMS Marketing: OFF                  │             │
│  │ Preferred Contact: Email | Do Not Contact: No             │             │
│  └────────────────────────────────────────────────────────────┘             │
│  ┌────────────────────────────────────────────────────────────┐             │
│  │ RECENT PURCHASES                                          │             │
│  │ Date       │ Order#           │ Total   │ Status          │             │
│  │ 2026-02-28 │ LOC-20260228-012 │ $240.72 │ Completed       │             │
│  │ 2026-02-15 │ LOC-20260215-042 │ $154.00 │ Partially Ret.  │             │
│  │ 2026-01-30 │ LOC-20260130-008 │  $89.00 │ Completed       │             │
│  └────────────────────────────────────────────────────────────┘             │
└─────────────────────────────────────────────────────────────────────────────┘

Actions & Transitions

ActionNavigates ToRequires Role
Click “Edit”SCR-M02-03 Customer Create / EditCASHIER+
Click “Merge”SCR-M02-07 Customer Merge / DedupMANAGER+
Click “Delete”SCR-M02-08 Customer Deletion / AnonymizeMANAGER+
Click order rowSCR-M01-09 Receipt Print / Reprint (order detail)CASHIER+
Click “Notes & Preferences Edit”SCR-M02-05 Customer Notes & PreferencesCASHIER+
Click “Communication Edit”SCR-M02-06 Communication PreferencesMANAGER+

G.5.3 Customer Create / Edit

AttributeValue
Screen IDSCR-M02-03
Product(s)All Roles
BRD Section(s)2.1
Database Tablescustomers (R/W), loyalty_accounts (W)
State Machine(s)
Appendix F Servicescustomer.profile.crud.service
User RolesCASHIER, MANAGER
Offline CapableNo (customer creation requires uniqueness check against server; blocked offline per BRD 1.16.2)
Route/customers/new, /customers/:id/edit

Purpose

The Customer Create/Edit form handles profile creation and modification. It collects personal details (name, phone, email), separate shipping and billing addresses, customer group assignment (which determines price tier), tax exemption status, and initial communication preferences. Email and phone uniqueness is validated server-side to prevent duplicates.

Key Elements

ElementTypeDescriptionBusiness Rule
First Name / Last NameInputRequired fieldsBRD 2.1: first_name, last_name NOT NULL
PhoneInputPhone number with format validationBRD 2.1: Unique per tenant (partial index)
EmailInputEmail with format validationBRD 2.1: Unique per tenant (partial index)
Shipping AddressForm GroupStreet, city, state, ZIP, country for physical deliveryBRD 2.1: Enter Physical Address (Shipping)
Billing AddressForm GroupSame as shipping checkbox, or separate billing addressBRD 2.1: Enter Billing Address (if different)
Customer GroupSelectRetail, Wholesale, VIP, StaffBRD 2.2: Group determines Price Tier
Tax ExemptionToggle + InputTax exempt status and exemption certificate IDBRD 2.1: Custom Tax Rate override
Communication PrefsToggle GroupEmail opt-in, SMS opt-in, preferred contact methodBRD 2.4: Initial consent settings
Date of BirthDate InputBirthday for loyalty program benefitsCustomer model: date_of_birth
CompanyInputCompany name for business customersCustomer model: company field
Save / CancelButton PairSubmit form or discard changesBRD 2.1: POST /customers/create or PATCH

Actions & Transitions

ActionNavigates ToRequires Role
Save (create)SCR-M02-02 Customer Profile (new customer)CASHIER+
Save (edit)SCR-M02-02 Customer Profile (updated)CASHIER+
CancelSCR-M02-01 Customer List or SCR-M02-02 ProfileCASHIER+

G.5.4 Customer Group / Tier Management

AttributeValue
Screen IDSCR-M02-04
Product(s)MANAGER+
BRD Section(s)2.2
Database Tablescustomers (R/W), loyalty_accounts (R/W)
State Machine(s)7.11 Customer Tier States (BRONZE -> SILVER -> GOLD)
Appendix F Servicescustomer.group.crud.service
User RolesMANAGER, OWNER
Offline CapableNo (requires server-side tier calculation and group management)
Route/admin/customers/groups

Purpose

Customer Group/Tier Management allows administrators to configure customer groups (Retail, Wholesale, VIP, Staff), define automatic tier upgrade thresholds (Bronze at $0, Silver at $1,000/yr, Gold at $5,000/yr), and configure tier benefits (point multipliers, automatic discounts, early access). Managers can also manually assign or override customer groups and tiers.

Key Elements

ElementTypeDescriptionBusiness Rule
Group ListTableAll customer groups with member count and pricing tierBRD 2.2: Retail, Wholesale, VIP, Staff
Tier ThresholdsFormAnnual spend thresholds for each tierBRD 1.15.1: $1,000 Silver, $5,000 Gold
Tier BenefitsFormPoint multiplier, discount %, early access per tierBRD 1.15.1: Bronze 1x, Silver 1.5x+5%, Gold 2x+10%
Customer AssignmentPanelBulk assign/reassign customers to groupsBRD 2.2: Manual Group Assignment
Tier Distribution ChartChartVisual breakdown of customers by tierBRD 2.6.1: Tier Distribution Report
Auto-Tier ToggleToggleEnable/disable automatic tier upgrades based on spendBRD 2.2: Automatic Tier Upgrades (Background Job)
Price Tier MappingTableMaps each group to its pricing rulesBRD 2.2: Group determines Price Tier

Actions & Transitions

ActionNavigates ToRequires Role
Edit group settingsStays (inline edit)MANAGER+
Click customer in groupSCR-M02-02 Customer ProfileMANAGER+
Save tier thresholdsStays (configuration saved)OWNER+

G.5.5 Customer Notes & Preferences

AttributeValue
Screen IDSCR-M02-05
Product(s)All Roles
BRD Section(s)2.3
Database Tablescustomers (R/W)
State Machine(s)
Appendix F Servicescustomer.notes.crud.service
User RolesCASHIER, MANAGER
Offline CapableNo (requires server to persist preference updates)
Route/customers/:id/notes

Purpose

The Customer Notes & Preferences screen provides both structured preference fields and free-form notes for customer profiles. Structured fields capture clothing size, shoe size, color preferences, and brand preferences. Free-form notes allow staff to record any additional observations. These notes are displayed at the POS when the customer is attached to a sale, enabling personalized service.

Key Elements

ElementTypeDescriptionBusiness Rule
Clothing SizeSelectS, M, L, XL, XXLBRD 2.3: Structured preferences
Shoe SizeInputNumeric shoe sizeBRD 2.3: Structured preferences
Color PreferencesMulti-SelectPreferred colors from configurable listBRD 2.3: Color Preferences
Brand PreferencesMulti-SelectPreferred brands from configurable listBRD 2.3: Brand Preferences
Free-Form NotesTextareaOpen text for staff observationsBRD 2.3: “Prefers classic styles, allergic to wool”
Note HistoryTableChronological list of note additions with author and timestampBRD 2.3: Audit trail of note changes
POS Display PreviewPanelPreview of how notes appear during POS sale attachmentBRD 2.3: Notes Display at POS
SaveButtonPersist all preference changesBRD 2.3: PATCH /customers/{id}/preferences

Actions & Transitions

ActionNavigates ToRequires Role
SaveSCR-M02-02 Customer Profile (preferences updated)CASHIER+
CancelSCR-M02-02 Customer Profile (no change)CASHIER+

G.5.6 Communication Preferences

AttributeValue
Screen IDSCR-M02-06
Product(s)MANAGER+
BRD Section(s)2.4
Database Tablescustomers (R/W)
State Machine(s)
Appendix F Servicescustomer.communication.crud.service
User RolesMANAGER, OWNER
Offline CapableNo (consent changes must be logged server-side immediately for compliance)
Route/customers/:id/communication

Purpose

The Communication Preferences screen manages marketing consent and contact preferences for a customer. It controls email and SMS marketing opt-in/opt-out, preferred contact method, and the “Do Not Contact” flag that blocks all marketing outreach while preserving transactional notifications. All consent changes are logged with timestamps for privacy compliance audit trails.

Key Elements

ElementTypeDescriptionBusiness Rule
Email Marketing ToggleToggleOpt-in/opt-out for email marketingBRD 2.4: Email Marketing [ON/OFF]
SMS Marketing ToggleToggleOpt-in/opt-out for SMS marketingBRD 2.4: SMS Marketing [ON/OFF]
Preferred Contact MethodRadio GroupEmail, Phone, SMSBRD 2.4: Preferred Contact selection
Do Not ContactToggleMaster block on all marketing outreachBRD 2.4: Blocks all outreach
Consent Change LogTableTimestamp, field changed, old value, new value, changed byBRD 2.4: Audit Trail for compliance
Privacy NoticeInfo PanelDisplays consent terms and privacy policy referenceBRD 2.4: Privacy Compliance
SaveButtonPersist changes and log consent updateBRD 2.4: PATCH /customers/{id}/communication-prefs

Actions & Transitions

ActionNavigates ToRequires Role
SaveSCR-M02-02 Customer Profile (prefs updated, consent logged)MANAGER+
CancelSCR-M02-02 Customer Profile (no change)MANAGER+

G.5.7 Customer Merge / Dedup

AttributeValue
Screen IDSCR-M02-07
Product(s)MANAGER+
BRD Section(s)2.5
Database Tablescustomers (R/W), loyalty_accounts (R/W), loyalty_transactions (R/W), orders (R/W), returns (R/W), store_credits (R/W)
State Machine(s)
Appendix F Servicescustomer.merge.command.service
User RolesMANAGER, OWNER
Offline CapableNo (requires server-side data transfer and uniqueness validation)
Route/admin/customers/merge

Purpose

Customer Merge/Dedup enables managers to consolidate duplicate customer profiles. Staff select a “Source” (duplicate) and “Target” (primary) profile. The system transfers all sales history, loyalty points, account balances, and notes to the target. The higher tier is preserved. The source profile is soft-deleted (archived) with a merge audit trail.

Key Elements

ElementTypeDescriptionBusiness Rule
Source Customer SelectorSearch + SelectSelect the duplicate profile to merge FROMBRD 2.5: Select “Source” (Duplicate)
Target Customer SelectorSearch + SelectSelect the primary profile to merge INTOBRD 2.5: Select “Target” (Primary)
Side-by-Side ComparisonPanelCompare both profiles: name, email, phone, points, tier, spendBRD 2.5: Visual comparison before merge
Data Transfer PreviewTableShows what will be transferred: history count, points, balance, notesBRD 2.5: Move History, Loyalty, Balance to Target
Tier ResolutionDisplayShows which tier will be kept (higher of the two)BRD 2.5: Keep Higher Tier
Notes Merge PreviewPanelShows how notes will be appended (source appended to target)BRD 2.5: Merge Notes (Append Source to Target)
Confirm MergeButtonExecute merge with confirmation dialogBRD 2.5: POST /customers/merge
CancelButtonCancel merge operationBRD 2.5: No data changed

Actions & Transitions

ActionNavigates ToRequires Role
Confirm mergeSCR-M02-02 Customer Profile (merged target profile)MANAGER+
CancelSCR-M02-01 Customer ListMANAGER+

G.5.8 Customer Deletion / Anonymize

AttributeValue
Screen IDSCR-M02-08
Product(s)MANAGER+
BRD Section(s)2.5
Database Tablescustomers (R/W), orders (R), store_credits (R), loyalty_accounts (R)
State Machine(s)
Appendix F Servicescustomer.privacy.command.service
User RolesMANAGER, OWNER
Offline CapableNo (requires server-side balance verification and anonymization)
Route/admin/customers/:id/delete

Purpose

Customer Deletion/Anonymize provides safe deletion with guard rails. The system blocks deletion if the customer has outstanding on-account debt or open layaways. When deletion proceeds, personal data is anonymized (replaced with “Anonymous”) while sales history is retained for accounting integrity. This screen also handles GDPR/privacy data subject requests for export, deletion, or restriction.

Key Elements

ElementTypeDescriptionBusiness Rule
Balance Check DisplayAlertShows outstanding debt and open layaways (if any)BRD 2.5: Cannot delete with outstanding balance
Block AlertAlert“Cannot Delete - Outstanding Balance: $X.XX”BRD 2.5: Error if debt or open layaway
Anonymization PreviewPanelShows which fields will be scrubbed vs retainedBRD 2.5: Anonymize Personal Data; retain sales history
Confirm DeleteButtonType-to-confirm deletion with customer nameBRD 2.5: DELETE /customers/{id}
Privacy Request TypeRadio GroupExport / Delete / Restrict processingBRD 2.5: Data Subject Request types
Request IDDisplayGenerated request tracking IDBRD 2.5: Must complete within 30 days
Completion DeadlineDate Display30-day deadline for privacy request completionBRD 2.5: 30-day compliance requirement

Actions & Transitions

ActionNavigates ToRequires Role
Confirm deletionSCR-M02-01 Customer List (customer removed)MANAGER+
Submit privacy requestStays (request logged with tracking ID)MANAGER+
CancelSCR-M02-02 Customer ProfileMANAGER+
Settle balance firstSCR-M02-02 Customer Profile (account tab)MANAGER+

G.5.9 Loyalty Admin Dashboard

AttributeValue
Screen IDSCR-M02-09
Product(s)MANAGER+
BRD Section(s)2.6, 5.17
Database Tablesloyalty_accounts (R/W), loyalty_transactions (R/W), customers (R)
State Machine(s)7.11 Customer Tier States
Appendix F Servicessale.loyalty.command.service, customer.group.crud.service
User RolesMANAGER, OWNER
Offline CapableNo (requires server-side aggregation of loyalty data)
Route/admin/loyalty

Purpose

The Loyalty Admin Dashboard provides a comprehensive view of the loyalty program: total points economy (issued, redeemed, expired, outstanding), tier distribution, program configuration, and individual customer point adjustments. Managers can manually adjust points (with mandatory reason notes), configure point earning rates, and view expiry forecasts. This is the management counterpart to the sales terminal loyalty display (SCR-M01-13).

Key Elements

ElementTypeDescriptionBusiness Rule
Points Economy SummaryPanelTotal issued, redeemed, expired, outstanding balanceBRD 1.15.2: Loyalty Points Summary report
Tier DistributionChartPie/bar chart of customers by tier (Bronze/Silver/Gold)BRD 2.6.1: Tier Distribution Report
Points Expiry ForecastTableCustomers with points expiring soon, amounts, datesBRD 1.15.2: Points Expiry Forecast
Manual Points AdjustmentFormSelect customer, enter points (+/-), mandatory reason noteBRD 2.7 (Story 2.B.3): Manual adjustment with reason
Program ConfigurationFormPoint earning rate, redemption ratio, tier thresholds, expiry rulesBRD 5.17: Loyalty program settings
Punch Card ActivityTableActive punch cards, completion rates, average time to completeBRD 1.15.2: Punch Card Activity report
ROI AnalysisPanelPoints cost vs additional revenue from loyalty customersBRD 1.15.2: Loyalty ROI Analysis
ExportButtonExport loyalty data for analysisBRD 2.6.1: Reports export

Actions & Transitions

ActionNavigates ToRequires Role
Adjust pointsStays (points updated, reason logged)MANAGER+
Click customer rowSCR-M02-02 Customer ProfileMANAGER+
Save configurationStays (program settings saved)OWNER+
ExportDownload CSV (stays on page)MANAGER+

G.5.10 Communication Log

AttributeValue
Screen IDSCR-M02-10
Product(s)MANAGER+
BRD Section(s)2.4
Database Tablescustomers (R)
State Machine(s)
Appendix F Servicescustomer.communication.crud.service
User RolesMANAGER, OWNER, AUDITOR
Offline CapableNo (requires server-side audit log data)
Route/admin/customers/communication-log

Purpose

The Communication Log provides a complete audit trail of all marketing consent changes, automated notifications sent (welcome emails, tier upgrades, shipment tracking, refund confirmations), and privacy-related communications. This screen supports regulatory compliance by documenting every consent change with timestamp, source, and the user who made the change. Auditors use this for compliance verification.

Key Elements

ElementTypeDescriptionBusiness Rule
Customer FilterSearchFilter log by specific customerBRD 2.4: Per-customer audit trail
Date Range FilterDate RangeFilter by date rangeBRD 2.4: Time-based filtering
Event Type FilterSelectFilter by: Consent Change, Email Sent, SMS Sent, Privacy RequestBRD 2.4: All communication events
Log TableTableTimestamp, customer, event type, details, changed by, old/new valueBRD 2.4: All consent changes logged with timestamp
Email Template LogTableEmails sent: template ID, recipient, trigger event, delivery statusBRD 2.6.1: TMPL-WELCOME, TMPL-TIER-UPGRADE, etc.
Privacy Request TrackerTableOpen privacy requests with type, status, deadlineBRD 2.5: 30-day compliance tracking
Export Audit TrailButtonExport full communication audit logBRD 2.4: Compliance export

Actions & Transitions

ActionNavigates ToRequires Role
Click customer nameSCR-M02-02 Customer ProfileMANAGER+
Click privacy requestSCR-M02-08 Customer Deletion / AnonymizeMANAGER+
ExportDownload CSV (stays on page)AUDITOR+

G.6 Module 3: Catalog Screens (18 Screens)

BRD Sections: 3.1-3.15 | Appendix F: §F.6 (20 services) | Pattern: CRUD + Redis Cache

Cross-Reference: See Ch 05, Sections 3.1-3.15 for business rules. See Ch 08, Domain 1 (Product Catalog) for table schemas. See Appendix F, §F.6 for service breakdown.


AttributeValue
Screen IDSCR-M03-01
Product(s)All Roles
BRD Section(s)3.1, 3.9
Database Tablesproducts (R), variants (R), categories (R), brands (R), inventory_levels (R), tags (R), product_tag (R)
State Machine(s)
Appendix F Servicescatalog.product.query.service, catalog.search.service
User RolesALL
Offline CapableYes (sales terminal: cached product list from product_cache SQLite WASM table; management screens: No — requires server)
Route/catalog/products

Purpose

Provides a searchable, filterable list of all products in the tenant’s catalog. Staff use this screen to find products by SKU, barcode, name, brand, or tag, with results returned in under 200ms. It serves as the primary navigation hub for all catalog management operations.

Key Elements

ElementTypeDescriptionBusiness Rule
Search barInputFull-text search with auto-complete (2+ chars, 150ms debounce, top 8 suggestions). Supports fuzzy matching (Levenshtein distance <= 2)BRD 3.9.1
Product tableTableColumns: Image, SKU, Name, Brand, Category, Price, Stock (sum across locations), Status. Sortable by any columnBRD 3.1.3
Filter sidebarPanelFilters: Category (hierarchy tree), Brand, Status (Draft/Active/Discontinued/Archived), Tags, Price range, Stock level (In Stock/Low/Out)BRD 3.9.3
Bulk actions toolbarButton groupSelect multiple rows → Bulk Edit, Bulk Channel Toggle, Bulk Delete, Bulk Category Move, Export CSVBRD 3.6.2
Recent searchesPanelLast 10 searches per user in dropdown when search field focusedBRD 3.9.1
Status badgeBadgeColor-coded lifecycle status: Draft (grey), Active (green), Discontinued (amber), Archived (red)BRD 3.2.1
Pagination controlsPanelPage size (25/50/100), page navigation, total result countBRD 3.1
+ New Product buttonButtonOpens product creation form (SCR-M03-02)BRD 3.1

Actions & Transitions

ActionNavigates ToRequires Role
Click product rowSCR-M03-02 Product Detail / EditALL
Click “+ New Product”SCR-M03-02 Product Detail / Edit (create mode)MANAGER+
Click “Bulk Channel Toggle”SCR-M03-12 Multi-Channel Allocation (modal)MANAGER+
Click “Print Labels” (bulk)SCR-M03-14 Label PrintingALL
Click category in filterFilters product list to selected categoryALL

G.6.2 Product Detail / Edit

AttributeValue
Screen IDSCR-M03-02
Product(s)MANAGER+
BRD Section(s)3.1, 3.2, 3.4, 3.11, 3.12
Database Tablesproducts (RW), variants (RW), categories (R), brands (R), tags (R), product_tag (RW), product_collection (RW), pricing_rules (R), collections (R)
State Machine(s)Product Lifecycle (DRAFT → ACTIVE → DISCONTINUED → ARCHIVED)
Appendix F Servicescatalog.product.crud.service, catalog.variant.crud.service, catalog.product.lifecycle.service, catalog.media.crud.service, catalog.barcode.service
User RolesMANAGER, OWNER, BUYER
Offline CapableNo — requires server for save operations
Route/catalog/products/:id

Purpose

The primary form for creating and editing products. Displays all product attributes organized into tabbed sections: Identity, Pricing, Variants, Media, Channels, Inventory, and Custom Fields. Manages the product lifecycle state machine and enforces validation rules before publishing.

Key Elements

ElementTypeDescriptionBusiness Rule
Product type selectorInputStandard / Variant Parent / Composite / Service — sets form modeBRD 3.1.1
Identity sectionPanelSKU (auto-generated or manual), Name, Description, Brand (dropdown), Category (hierarchy picker), Product Group, Gender, Origin, Fabric, SeasonBRD 3.1.3
Pricing sectionPanelBase price, Cost price, Compare-at price, Tax code, Selling UoM, Purchasing UoM, UoM conversion factorBRD 3.1.3, 3.3.1
Variant matrix tabPanelGrid editor for size/color combinations — links to SCR-M03-03BRD 3.1.6
Media tabPanelImage upload/reorder, primary image selection, video URLsBRD 3.11.1
Channel visibility tabPanelToggle per channel (IN_STORE, ONLINE, WHOLESALE) with scheduled date windowsBRD 3.6.2
Barcode sectionPanelPrimary barcode (UPC-A/EAN-13/Internal), alternate barcodes list, auto-generate buttonBRD 3.4.1, 3.4.2
Tags & CollectionsPanelFreeform tag entry, collection assignment multi-selectBRD 3.5.2
Custom fields sectionPanelTenant-defined custom attributes (TEXT/NUMBER/LIST/BOOLEAN)BRD 3.1.4
Lifecycle status barPanelCurrent status badge + action buttons: Publish (Draft→Active), Discontinue, Archive. Preconditions displayedBRD 3.2.1, 3.2.2
Shipping sectionPanelShippable toggle, weight, dimensions, package type. Mandatory when shippable=trueBRD 3.1.3
Clone buttonButtonCreates a new DRAFT product with new auto-generated SKU, copies all fieldsBRD 3.1.5
Audit trailPanelCreated by, updated by, timestamps, lifecycle transitions logBRD 3.13.4

Wireframe

┌─────────────────────────────────────────────────────────────────────────┐
│ PRODUCT DETAIL: Classic Oxford Shirt (NXJ1078)     [Active ●] [Clone] │
├──────────┬──────────────────────────────────────────────────────────────┤
│ Tabs:    │ [Identity] [Pricing] [Variants] [Media] [Channels] [Custom]│
├──────────┴──────────────────────────────────────────────────────────────┤
│ ┌─────────────────────────────┐  ┌────────────────────────────────┐   │
│ │ SKU: NXJ1078               │  │ Primary Image    [Upload] [▲▼] │   │
│ │ Name: Classic Oxford Shirt  │  │ ┌──────────┐ ┌──────────┐     │   │
│ │ Brand: [Nexus        ▼]    │  │ │          │ │          │     │   │
│ │ Category: [Men > Tops  ▼]  │  │ │  img-1   │ │  img-2   │     │   │
│ │ Product Group: [Tops   ▼]  │  │ │ ★primary │ │          │     │   │
│ │ Gender: [Men           ▼]  │  │ └──────────┘ └──────────┘     │   │
│ │ Season: [Spring 2026   ▼]  │  └────────────────────────────────┘   │
│ │ Origin: [Imported      ▼]  │                                       │
│ │ Fabric: [100% Cotton    ]  │  ┌────────────────────────────────┐   │
│ └─────────────────────────────┘  │ PRICING                       │   │
│                                  │ Base Price:    [$29.00      ]  │   │
│ ┌─────────────────────────────┐  │ Cost Price:    [$12.00      ]  │   │
│ │ BARCODE                     │  │ Compare At:    [$35.00      ]  │   │
│ │ Primary: [012345678901    ] │  │ Tax Code:      [clothing  ▼]  │   │
│ │ Type: UPC-A                 │  │ Selling UoM:   [EACH      ▼]  │   │
│ │ Alternates: + Add           │  └────────────────────────────────┘   │
│ │  · VENDOR-SKU-X99           │                                       │
│ └─────────────────────────────┘  ┌────────────────────────────────┐   │
│                                  │ TAGS & COLLECTIONS              │   │
│ ┌─────────────────────────────┐  │ Tags: [bestseller] [oxford] +  │   │
│ │ SHIPPING                    │  │ Collections: [✓ New Arrivals]   │   │
│ │ [✓] Shippable               │  │              [✓ Staff Picks]    │   │
│ │ Weight: [0.35] [lb ▼]      │  └────────────────────────────────┘   │
│ │ Dims: [12x8x2] [in ▼]     │                                       │
│ │ Package: [Box       ▼]    │                                       │
│ └─────────────────────────────┘                                       │
├─────────────────────────────────────────────────────────────────────────┤
│ [Save Draft]  [Publish ▶]  [Discontinue]            [Delete] [Cancel] │
└─────────────────────────────────────────────────────────────────────────┘

Actions & Transitions

ActionNavigates ToRequires Role
Click “Variants” tabSCR-M03-03 Variant Matrix Editor (inline)MANAGER+
Click “Publish”Stays on page; status changes to ACTIVE. Validates: name, SKU, price, category setMANAGER+
Click “Discontinue”Stays on page; status changes to DISCONTINUED. Blocks new POsMANAGER+
Click “Archive”Stays on page; requires stock=0 at all locationsOWNER
Click “Clone”SCR-M03-02 (new product, pre-filled, DRAFT status, new SKU)MANAGER+
Click “Print Label”SCR-M03-14 Label Printing (pre-filled with this product)ALL
Click “View Analytics”SCR-M03-18 Product Analytics (filtered to this product)MANAGER+

G.6.3 Variant Matrix Editor

AttributeValue
Screen IDSCR-M03-03
Product(s)MANAGER+
BRD Section(s)3.1.6
Database Tablesproducts (R), variants (RW)
State Machine(s)
Appendix F Servicescatalog.variant.crud.service
User RolesMANAGER, OWNER, BUYER
Offline CapableNo
Route/catalog/products/:id/variants

Purpose

A spreadsheet-like grid interface for managing variant products efficiently. Rows represent Dimension 1 values (e.g., sizes), columns represent Dimension 2 values (e.g., colors). Each cell shows price, cost, and stock level, enabling rapid inline editing and bulk variant creation.

Key Elements

ElementTypeDescriptionBusiness Rule
Dimension configInputUp to 3 dimension names (e.g., Size, Color, Material) with ordered valuesBRD 3.1.6
Matrix gridTableRows=Dim1, Cols=Dim2. Each cell: price / cost / stock. Click to edit inline. Tab navigates cellsBRD 3.1.6
Add dimension valueButtonAdd new size or color value — creates new variant row/columnBRD 3.1.6
Bulk price updateInputSet price/cost for entire row (size) or column (color) at onceBRD 3.1.6
Changed cells highlightBadgeYellow highlight on modified cells until savedBRD 3.1.6
Save All ChangesButtonPersists all edits in one batch operationBRD 3.1.6
Generate barcodesButtonAuto-generate internal barcodes for variants missing barcodesBRD 3.4.2
Variant active toggleInputPer-cell checkbox to activate/deactivate individual variantsBRD 3.1

Actions & Transitions

ActionNavigates ToRequires Role
Click “Save All Changes”Stays on page; batch save all modified variantsMANAGER+
Click variant SKU linkSCR-M03-02 Product Detail (variant tab focused)MANAGER+
Click “Generate Barcodes”Stays on page; auto-generates internal barcodes for variants without barcodesMANAGER+

G.6.4 Pricing Engine / Price Books

AttributeValue
Screen IDSCR-M03-04
Product(s)MANAGER+
BRD Section(s)3.3.1, 3.3.2
Database Tablespricing_rules (RW), products (R), categories (R)
State Machine(s)
Appendix F Servicescatalog.pricing.crud.service, catalog.pricing.calculation.service
User RolesMANAGER, OWNER
Offline CapableNo
Route/catalog/pricing

Purpose

Manages the 5-level price hierarchy (Manual Override > Promotion > Price Book > Channel > Base) and named price books. Staff create, edit, and schedule price books for specific customer groups, channels, or date ranges. Includes CSV bulk import of price book entries and conflict preview.

Key Elements

ElementTypeDescriptionBusiness Rule
Price hierarchy diagramPanelVisual display of 5-level pricing cascade with current active rules count at each levelBRD 3.3.1
Price books listTableName, Customer Group, Channel, Start/End Date, Priority, Status (Active/Inactive), Entry CountBRD 3.3.2
Price book detail formModalName, description, customer_group_id, channel, start_date, end_date, priority, is_activeBRD 3.3.2
Price book entries tableTableSKU, Product Name, Override Price, Override Cost. Inline editableBRD 3.3.2
CSV importButtonUpload CSV (sku, override_price, override_cost). Validates SKU existence and numeric formatsBRD 3.3.2
Conflict checkerPanelPreview which products have overlapping price books for same group/channelBRD 3.3.5
Price audit trailPanelLog of all price book activations, deactivations, and entry modificationsBRD 3.3.2

Actions & Transitions

ActionNavigates ToRequires Role
Click “+ New Price Book”Price book detail modal (create mode)MANAGER+
Click price book rowPrice book detail modal (edit mode) with entries tableMANAGER+
Click “Import CSV”File upload dialog; validates and applies entriesMANAGER+
Click “View Conflicts”Conflict checker panel expandsMANAGER+

G.6.5 Promotions Setup

AttributeValue
Screen IDSCR-M03-05
Product(s)MANAGER+
BRD Section(s)3.3.3
Database Tablespricing_rules (RW), products (R), categories (R)
State Machine(s)Promotion Lifecycle (DRAFT → SCHEDULED → ACTIVE → EXPIRED/CANCELLED)
Appendix F Servicescatalog.pricing.crud.service
User RolesMANAGER, OWNER
Offline CapableNo
Route/catalog/promotions

Purpose

Creates and manages the four promotion types: Basic Discount, Tiered/Volume, BOGO/Cross-Item, and Scheduled/Automatic. Each promotion follows a lifecycle from DRAFT through ACTIVE to EXPIRED. Staff configure product scope, stacking rules, exclusivity, and date windows.

Key Elements

ElementTypeDescriptionBusiness Rule
Promotions listTableName, Type, Status, Start Date, End Date, Redemptions, Revenue ImpactBRD 3.3.3
Promotion type selectorInputBASIC, TIERED, BOGO, SCHEDULED — changes form fields dynamicallyBRD 3.3.3
Product scope selectorInputALL / CATEGORY / PRODUCT_LIST with category picker or product multi-selectBRD 3.3.3
Tier editorPanelFor TIERED type: min_qty, max_qty, price_per_unit rows. Add/remove tiersBRD 3.3.3
BOGO configPanelFor BOGO: buy_product, buy_qty, get_product, get_qty, get_discount_type, get_discount_valueBRD 3.3.3
Schedule configPanelFor SCHEDULED: schedule_type (DATE_RANGE/RECURRING), recurrence_patternBRD 3.3.3
Stacking rulesInputstackable (boolean), exclusive (boolean). Combined discount cap = max_discount_percent (default 75%)BRD 3.3.5
Status badgeBadgeDRAFT (grey), SCHEDULED (blue), ACTIVE (green), EXPIRED (red), CANCELLED (dark)BRD 3.3.3

Actions & Transitions

ActionNavigates ToRequires Role
Click “+ New Promotion”Promotion detail form (create mode)MANAGER+
Click “Schedule” on DRAFTStays on page; status → SCHEDULED, fields lockedMANAGER+
Click “Cancel” on ACTIVE/SCHEDULEDStays on page; status → CANCELLED (terminal)MANAGER+
Click “Clone” on EXPIREDNew promotion form pre-filled from source (DRAFT status)MANAGER+

G.6.6 Markdown Workflow

AttributeValue
Screen IDSCR-M03-06
Product(s)MANAGER+
BRD Section(s)3.3.4
Database Tablespricing_rules (RW), products (RW), inventory_levels (R)
State Machine(s)Markdown Request (PENDING → APPROVED/REJECTED)
Appendix F Servicescatalog.markdown.command.service, catalog.pricing.crud.service
User RolesMANAGER, OWNER
Offline CapableNo
Route/catalog/markdowns

Purpose

Manages formal price reductions with approval workflows. Staff submit markdown requests specifying the product, new price, effective date, and reason. Managers review margin impact before approving. Also configures automatic markdown rules for slow-moving and aging inventory, and handles clearance tracking and write-offs.

Key Elements

ElementTypeDescriptionBusiness Rule
Pending requests listTableProduct, Current Price, Proposed Price, Margin Impact (%), Reason, Requested By, DateBRD 3.3.4
New markdown request formModalProduct picker, new_price, effective_date, reason (dropdown: Damaged, Price Match, Manager Discretion, Competitive Adjustment, Cost Change, Seasonal Reduction, Error Correction)BRD 3.3.4
Margin impact previewPanelCurrent margin vs. proposed margin, volume at each price point, total margin dollars changeBRD 3.3.4
Auto-markdown rulesTableRule name, condition (Slow Mover/Aging/Season End), threshold, action (flag for review / apply immediately), statusBRD 3.3.4
Clearance trackerTableProducts flagged as clearance: product, original price, clearance price, days on clearance, units remaining, sell-through %BRD 3.3.4
Write-off formModalProduct, quantity, write_off_value (calculated), reason (DAMAGED/EXPIRED/RECALLED/SHRINKAGE/OBSOLETE), approved_by, locationBRD 3.3.4

Actions & Transitions

ActionNavigates ToRequires Role
Click “Approve” on pending requestStays on page; price change scheduled, pushed to POS terminalsMANAGER+
Click “Reject” on pending requestStays on page; rejection reason required, requester notifiedMANAGER+
Click “+ New Markdown Request”New markdown request modalCASHIER+
Click “Configure Auto Rules”Auto-markdown rules editor panelOWNER

G.6.7 Coupon Management

AttributeValue
Screen IDSCR-M03-07
Product(s)MANAGER+
BRD Section(s)3.3
Database Tablespricing_rules (RW), products (R), categories (R)
State Machine(s)
Appendix F Servicescatalog.pricing.crud.service
User RolesMANAGER, OWNER
Offline CapableNo
Route/catalog/coupons

Purpose

Creates and manages code-based discount coupons that cashiers enter at POS during checkout. Coupons are a special subset of promotions requiring manual code entry rather than automatic application. Staff configure discount type, usage limits, valid date ranges, and applicable products.

Key Elements

ElementTypeDescriptionBusiness Rule
Coupon listTableCode, Name, Discount Type (% / $), Value, Max Uses, Current Uses, Status, Valid DatesBRD 3.3
Coupon detail formModalCode (auto-generated or manual), name, discount_type (PERCENT/AMOUNT), discount_value, product_scope, max_uses, start_date, end_dateBRD 3.3
Usage trackerPanelRedemption count, total discount given, revenue with coupon vs. withoutBRD 3.3
Product scopeInputALL / CATEGORY / PRODUCT_LIST — determines which products the coupon applies toBRD 3.3
Bulk generateButtonGenerate batch of unique single-use codes (e.g., 500 codes for campaign)BRD 3.3

Actions & Transitions

ActionNavigates ToRequires Role
Click “+ New Coupon”Coupon detail modalMANAGER+
Click coupon rowCoupon detail modal (edit mode)MANAGER+
Click “Deactivate”Stays on page; coupon disabled immediatelyMANAGER+
Click “Bulk Generate”Bulk code generation modalOWNER

G.6.8 Category Hierarchy

AttributeValue
Screen IDSCR-M03-08
Product(s)MANAGER+
BRD Section(s)3.5.1, 3.5.3
Database Tablescategories (RW), products (R)
State Machine(s)
Appendix F Servicescatalog.category.crud.service
User RolesMANAGER, OWNER
Offline CapableNo
Route/catalog/categories

Purpose

Manages the 4-level product category hierarchy (Department > Category > Subcategory > Sub-subcategory). Staff create, reorder, and nest categories using drag-and-drop. Each category can set default tax code, commission rate, and display image. Supports bulk product moves between categories.

Key Elements

ElementTypeDescriptionBusiness Rule
Category treePanelExpandable/collapsible 4-level tree with drag-and-drop reordering. Shows product count per nodeBRD 3.5.1
Category detail formPanelName, parent category (dropdown), description, display_order, is_active, image/icon uploadBRD 3.5.1
Default tax codeInputCategory-level default tax code inherited by products unless overriddenBRD 3.5.3
Default commission rateInputCategory-level commission % for sales commission calculationBRD 3.5.3
Product countBadgeNumber of products assigned to each category nodeBRD 3.5.1
Bulk moveButtonSelect multiple products from list → move to different categoryBRD 3.5.3

Actions & Transitions

ActionNavigates ToRequires Role
Click “+ New Category”Category detail form (create mode, parent pre-selected)MANAGER+
Click category nodeCategory detail form (edit mode) + product list filtered to categoryMANAGER+
Drag-and-drop categoryStays on page; reorders or re-nests categoryMANAGER+
Click “View Products”SCR-M03-01 Product List (filtered to this category)ALL

G.6.9 Tags & Collections

AttributeValue
Screen IDSCR-M03-09
Product(s)MANAGER+
BRD Section(s)3.5.2
Database Tablestags (RW), product_tag (RW), collections (RW), product_collection (RW), products (R)
State Machine(s)
Appendix F Servicescatalog.tag.crud.service, catalog.collection.crud.service
User RolesMANAGER, OWNER
Offline CapableNo
Route/catalog/collections

Purpose

Manages freeform product tags and named collections (manual and rule-based). Tags provide flexible filtering; collections group products for marketing purposes (e.g., “Summer Essentials”, “New Arrivals”). Rule-based collections auto-populate based on configurable conditions like published_at date or category membership.

Key Elements

ElementTypeDescriptionBusiness Rule
Tags listTableTag name, color hex, product count. Inline create/edit/deleteBRD 3.5.2
Tag color pickerInputHex color for UI display (validated #RRGGBB format)Ch 08 tags table
Collections listTableName, Type (Manual/Rule-Based), Product Count, Start Date, End Date, StatusBRD 3.5.2
Collection detail formModalName, description, image, is_active, start_date, end_dateBRD 3.5.2
Manual product assignmentPanelAdd/remove products via search or drag-and-drop with display_orderBRD 3.5.2
Rule builderPanelFor rule-based collections: IF conditions (category=X, published_at within last N days, tag=Y) THEN auto-includeBRD 3.5.2
Auto-tagging rulesTableCondition → Tag mappings (e.g., IF category=“Outerwear” AND created_at within 14 days THEN tag “new-outerwear”)BRD 3.5.2

Actions & Transitions

ActionNavigates ToRequires Role
Click “+ New Collection”Collection detail modalMANAGER+
Click collection rowCollection detail modal (edit mode) with product listMANAGER+
Click “+ New Tag”Inline tag creation rowMANAGER+
Click “View Products”SCR-M03-01 Product List (filtered by tag or collection)ALL

G.6.10 Seasons / Buying Calendar

AttributeValue
Screen IDSCR-M03-10
Product(s)BUYER+
BRD Section(s)3.5.5, 3.5.6
Database Tablesproducts (R), collections (R), pricing_rules (R)
State Machine(s)Season Lifecycle (PLANNING → ACTIVE → CLEARANCE → CLOSED)
Appendix F Servicescatalog.collection.crud.service
User RolesMANAGER, OWNER, BUYER
Offline CapableNo
Route/catalog/seasons

Purpose

Manages formal buying seasons with lifecycle dates that track merchandise from buy planning through active selling, clearance, and close-out. Provides a calendar view of all seasons and enables sell-through tracking, carryover identification, and season-over-season comparison reporting.

Key Elements

ElementTypeDescriptionBusiness Rule
Season calendarPanelVisual timeline showing all seasons with overlapping date ranges, color-coded by statusBRD 3.5.5
Season listTableName, Start Date, End Date, Status (PLANNING/ACTIVE/CLEARANCE/CLOSED), Product Count, Sell-Through %BRD 3.5.5
Season detail formModalName, start_date, end_date, status transition buttonsBRD 3.5.5
Sell-through metricsPanelUnits received, units sold, sell-through %, remaining inventory value, carryover countBRD 3.5.6
Season product listTableProducts assigned to this season with sales performance per productBRD 3.5.5
Reporting dimensionsPanelDepartment, Category, Brand, Season, Location multi-dimensional analysisBRD 3.5.6

Actions & Transitions

ActionNavigates ToRequires Role
Click “+ New Season”Season detail modalMANAGER+
Click season rowSeason detail modal with product list and metricsMANAGER+
Click “Move to Clearance”Stays on page; status → CLEARANCE, triggers clearance pricing rulesMANAGER+
Click “Close Season”Stays on page; status → CLOSED (terminal), remaining inventory flagged as carryoverOWNER

G.6.11 Barcode Management

AttributeValue
Screen IDSCR-M03-11
Product(s)MANAGER+
BRD Section(s)3.4
Database Tablesproducts (RW), variants (RW)
State Machine(s)
Appendix F Servicescatalog.barcode.service
User RolesMANAGER, OWNER
Offline CapableNo
Route/catalog/barcodes

Purpose

Centralized barcode management for the entire catalog. Provides tools for bulk barcode import, auto-generation of internal barcodes, barcode coverage auditing, and scan failure log review. Supports UPC-A, EAN-13, and configurable internal barcode formats.

Key Elements

ElementTypeDescriptionBusiness Rule
Barcode coverage summaryPanelTotal products, products with primary barcode, products with internal-only, products without barcode, coverage %BRD 3.4.4
Products without barcodesTableProducts missing primary barcode — with bulk auto-generate optionBRD 3.4.2
Bulk CSV importButtonUpload CSV mapping barcodes to existing SKUs. Validates uniqueness, reports conflictsBRD 3.4.2
Internal barcode configPanelPrefix configuration (e.g., “INT-”), next sequence number previewBRD 3.4.1
Scan failure logTableScanned value, timestamp, terminal, resolution (created new / manual lookup / abandoned)BRD 3.4.4
Duplicate barcode auditTableBarcode value, conflicting products, resolution statusBRD 3.4.4

Actions & Transitions

ActionNavigates ToRequires Role
Click “Auto-Generate” on missing barcodes listStays on page; generates internal barcodes for selected productsMANAGER+
Click “Import CSV”File upload dialog with validation resultsMANAGER+
Click product rowSCR-M03-02 Product Detail (barcode section focused)MANAGER+

G.6.12 Multi-Channel Allocation

AttributeValue
Screen IDSCR-M03-12
Product(s)MANAGER+
BRD Section(s)3.6
Database Tablesproducts (R), variants (R), inventory_levels (R), locations (R)
State Machine(s)
Appendix F Servicescatalog.product.crud.service
User RolesMANAGER, OWNER
Offline CapableNo
Route/catalog/channels

Purpose

Controls product visibility and inventory allocation across sales channels (IN_STORE, ONLINE, WHOLESALE). Supports two allocation modes: Shared Pool (all channels sell from same stock) and Dedicated Allocation (reserved quantities per channel). Enables bulk channel toggles and scheduled visibility windows.

Key Elements

ElementTypeDescriptionBusiness Rule
Channel listTableChannel name, type (PHYSICAL/DIGITAL/B2B), is_default, product count, system flagBRD 3.6.1
Allocation mode selectorInputShared Pool (default) or Dedicated Allocation — tenant-wide settingBRD 3.6.3
Product-channel matrixTableProducts as rows, channels as columns, toggles for visibility with optional date windowsBRD 3.6.2
Dedicated allocation gridTable(Only in Dedicated mode) Product × Location × Channel: allocated_qty, sold_qty, available_qtyBRD 3.6.3
Channel pricing overridesPanelPer-product per-channel price overrides and compare-at pricesBRD 3.6.4
Bulk channel toggleButtonSelect multiple products → toggle channel visibility in batchBRD 3.6.2
Stockout warningsBadge“Channel Stockout” flag when a channel’s allocated qty reaches 0BRD 3.6.3

Actions & Transitions

ActionNavigates ToRequires Role
Toggle channel visibilityStays on page; updates product-channel recordMANAGER+
Click “Reallocate”Modal to move allocated qty between channelsMANAGER+
Click “Channel Reports”SCR-M03-18 Product Analytics (channel tab)MANAGER+

G.6.13 Vendor Management

AttributeValue
Screen IDSCR-M03-13
Product(s)MANAGER+
BRD Section(s)3.8
Database Tablesbrands (RW), products (R), purchase_orders (R)
State Machine(s)
Appendix F Servicescatalog.vendor.crud.service
User RolesMANAGER, OWNER, BUYER
Offline CapableNo
Route/catalog/vendors

Purpose

Manages supplier/vendor records including contact information, payment terms, lead times, and the many-to-many vendor-product relationship. Each product can be sourced from multiple vendors with vendor-specific cost, SKU, and lead time. Designates primary vendors for automatic PO generation.

Key Elements

ElementTypeDescriptionBusiness Rule
Vendor listTableName, Code, Status (Active/Inactive), Product Count, Payment Terms, Lead Time, Last PO DateBRD 3.8.1
Vendor detail formPanelName, code, tax_id, contact (email, phone, address, contact_person), payment_terms, currency, minimum_order, lead_time_days, preferred_carrierBRD 3.8.1
Vendor-product tableTableProduct SKU, Vendor SKU, Vendor Cost, Is Primary, Lead Time Override, Min Order Qty, Last OrderedBRD 3.8.2
Primary vendor toggleInputDesignate primary vendor per product (one per product enforced)BRD 3.8.2
Performance metricsPanelPO count, on-time %, avg lead time, fill rate, defect rate, cost varianceBRD 3.8.4
Cost comparisonTableCompare vendor pricing for same product across multiple vendorsBRD 3.8.4

Actions & Transitions

ActionNavigates ToRequires Role
Click “+ New Vendor”Vendor detail form (create mode)MANAGER+
Click vendor rowVendor detail form (edit mode) with product listMANAGER+
Click “Create PO”SCR-M04-04 PO Create (vendor pre-selected)BUYER+
Click “View RMAs”SCR-M04-21 Vendor RMA (filtered to this vendor)MANAGER+

G.6.14 Label Printing

AttributeValue
Screen IDSCR-M03-14
Product(s)All Roles
BRD Section(s)3.10
Database Tablesproducts (R), variants (R), pricing_rules (R)
State Machine(s)
Appendix F Servicescatalog.label.print.service
User RolesALL
Offline CapableNo — requires printer connection
Route/catalog/labels

Purpose

Generates and prints barcode labels, price tags, and shelf labels for products. Supports multiple label types (price tag, shelf label, barcode-only) with configurable templates. Handles batch printing for new receiving, re-pricing, and routine label replacement.

Key Elements

ElementTypeDescriptionBusiness Rule
Label type selectorInputPrice Tag (barcode + price + name), Shelf Label (category + price), Barcode Only (barcode + SKU)BRD 3.10.1
Template pickerInputPredefined label dimensions: Avery 5160, Avery 5163, Dymo 30252, customBRD 3.10.2
Product queueTableProducts to print: SKU, Name, Variant, Price, Quantity of labels. Add via search, scan, or bulk selectBRD 3.10.3
Label previewPanelVisual preview of label layout before printingBRD 3.10.2
Printer selectorInputAvailable label printers (Zebra, Dymo, Brother)BRD 3.10.3
Print trigger indicatorsBadgeShows auto-print triggers: price change, new receiving, markdown appliedBRD 3.10.4

Actions & Transitions

ActionNavigates ToRequires Role
Click “Print”Sends print job to selected printerALL
Click “Add Products”Search/scan dialog to add products to queueALL
Click “Print All Received”Adds all products from most recent PO receive to queueCASHIER+

G.6.15 Product Media Manager

AttributeValue
Screen IDSCR-M03-15
Product(s)BUYER+
BRD Section(s)3.11
Database Tablesproducts (RW), variants (R)
State Machine(s)
Appendix F Servicescatalog.media.crud.service
User RolesMANAGER, OWNER
Offline CapableNo
Route/catalog/media

Purpose

Centralized media management for product images and videos. Provides bulk upload, drag-and-drop reordering, primary image designation, and variant-specific image assignment. Supports image optimization, CDN sync, and batch operations across multiple products.

Key Elements

ElementTypeDescriptionBusiness Rule
Media gallery gridPanelThumbnail grid of all product images with product name overlay. Drag-and-drop reorderBRD 3.11.1
Upload zonePanelDrag-and-drop or file picker for bulk image upload. Supports JPG, PNG, WebPBRD 3.11.1
Primary image selectorButtonStar icon to designate primary display image per productBRD 3.11.1
Variant image assignmentPanelAssign specific images to specific variants (e.g., blue shirt photo → Blue variant)BRD 3.11.1
Video URLsInputExternal video URLs (YouTube, Vimeo) linked to productsBRD 3.11.2
Sync statusBadgeCDN sync status per image: synced, pending, errorBRD 3.11.3
Products without imagesTableProducts missing primary image — filter for quick remediationBRD 3.11.1

Actions & Transitions

ActionNavigates ToRequires Role
Click product thumbnailSCR-M03-02 Product Detail (media tab)MANAGER+
Drag-and-drop imagesStays on page; reorders image display priorityMANAGER+
Click “Bulk Upload”File picker for multi-file uploadMANAGER+

G.6.16 Custom Fields Config

AttributeValue
Screen IDSCR-M03-16
Product(s)OWNER
BRD Section(s)3.12, 5.12
Database Tablesproducts (R)
State Machine(s)
Appendix F Servicescatalog.notes.crud.service, setup.customfield.crud.service
User RolesOWNER
Offline CapableNo
Route/catalog/custom-fields

Purpose

Configures tenant-defined custom attribute definitions that extend the standard product data model. Allows creating TEXT, NUMBER, LIST, and BOOLEAN fields with validation rules. Custom fields appear on the product edit form and can be made searchable, filterable, and required.

Key Elements

ElementTypeDescriptionBusiness Rule
Custom fields listTableName, Type (TEXT/NUMBER/LIST/BOOLEAN), Required, Searchable, Filterable, Display Order, Usage CountBRD 3.1.4
Field definition formModalname, type, list_values[] (for LIST type), required, searchable, filterable, display_orderBRD 3.1.4
List values editorPanelFor LIST type: ordered list of allowed values with add/removeBRD 3.1.4
Field limit indicatorBadge“X / 50 custom fields defined” — shows limit enforcementBRD 3.1.4 (max 50 per tenant)
Usage previewPanelShows where field appears: product form position, search index status, filter sidebar inclusionBRD 3.1.4
Structured notes configPanelNote types (INTERNAL, VENDOR, COMPLIANCE) and file attachment settings (max size, allowed types)BRD 3.12.1, 3.12.2

Actions & Transitions

ActionNavigates ToRequires Role
Click “+ New Field”Field definition modalOWNER
Click field rowField definition modal (edit mode)OWNER
Click “Archive” on fieldStays on page; field hidden from form but preserved in historical dataOWNER

G.6.17 Product Search & Discovery

AttributeValue
Screen IDSCR-M03-17
Product(s)All Roles
BRD Section(s)3.9
Database Tablesproducts (R), variants (R), categories (R), inventory_levels (R)
State Machine(s)
Appendix F Servicescatalog.search.service
User RolesALL
Offline CapableYes (POS: searches product_cache SQLite table with degraded fuzzy matching)
Route/pos/search (POS context)

Purpose

POS-optimized product search and discovery interface. Provides category browsing tiles, quick-add favorites grid, barcode scanner integration, and product substitution suggestions. Designed for cashier speed with large touch targets and instant results (<200ms).

Key Elements

ElementTypeDescriptionBusiness Rule
Search barInputFull-text search with auto-complete, fuzzy matching, recent searches. Barcode scanner auto-submitBRD 3.9.1
Category browse tilesPanelTop-level categories as large touch tiles. Tap to drill into subcategoriesBRD 3.9.2
Quick-add favoritesPanelConfigurable grid of frequently sold products per staff member. One-tap to add to cartBRD 3.9.4
Search results gridPanelProduct cards: image, name, price, stock level, variant indicator. Tap to add or view variantsBRD 3.9.1
Substitution suggestionsPanelWhen product is out of stock, shows similar alternatives with stock availabilityBRD 3.9.5
Advanced filtersPanelCategory, Brand, Price Range, In-Stock Only, Tags. Collapsible sidebarBRD 3.9.3
Recent searchesPanelLast 10 searches with result count, re-execute on tapBRD 3.9.1

Actions & Transitions

ActionNavigates ToRequires Role
Tap product cardAdds product to cart (sales terminal) or navigates to detail (management view)ALL
Tap variant indicatorVariant selector modal (size/color picker)ALL
Tap category tileDrills into subcategory product listALL
Tap substitutionAdds substitute product to cartALL
Tap “Manage Favorites”Quick-add favorites editor (personal per user)ALL

G.6.18 Product Analytics

AttributeValue
Screen IDSCR-M03-18
Product(s)MANAGER+
BRD Section(s)3.14
Database Tablesproducts (R), variants (R), inventory_levels (R), inventory_transactions (R), pricing_rules (R)
State Machine(s)
Appendix F Servicescatalog.analytics.query.service
User RolesMANAGER, OWNER
Offline CapableNo
Route/catalog/analytics

Purpose

Comprehensive product performance analytics dashboard. Displays embedded product metrics (velocity, margin, sell-through), ABC classification analysis, and catalog-wide KPIs. Enables data-driven decisions on pricing, restocking, and product lifecycle management.

Key Elements

ElementTypeDescriptionBusiness Rule
KPI summary cardsPanelTotal SKUs, Active Products, Avg Margin %, Top Seller (7d), Worst Performer (7d), New Products (30d)BRD 3.14.3
ABC classification chartPanelPareto chart showing A (top 20% revenue), B (next 30%), C (bottom 50%) products. Interactive click-throughBRD 3.14.2
Sales velocity heatmapPanelProduct × Location matrix with color-coded sales velocity (hot/warm/cold)BRD 3.14.1
Margin analysis tableTableProduct, Sell Price, WAC, Gross Margin $, Gross Margin %, Units Sold, Total Margin. SortableBRD 3.14.1
Pricing reportTablePrice book usage, promotion performance, markdown history, conflict resolution logBRD 3.3.6
Category sales breakdownPanelRevenue by category hierarchy with drill-downBRD 3.5.4
Channel comparisonPanelChannel revenue, units, margin side-by-side comparison chartBRD 3.6.5
Date range selectorInput7d, 30d, 90d, custom range for all metricsBRD 3.14
ExportButtonCSV and PDF export of all analytics dataBRD 3.14.4

Actions & Transitions

ActionNavigates ToRequires Role
Click product in ABC chartSCR-M03-02 Product DetailMANAGER+
Click category in breakdownSCR-M03-01 Product List (filtered to category)MANAGER+
Click “Export Report”Downloads CSV or PDFMANAGER+
Click velocity cellSCR-M04-02 Inventory List (filtered to product + location)MANAGER+

G.7 Module 4: Inventory Screens (23 Screens)

BRD Sections: 4.1-4.19 | Appendix F: §F.7 (23 services) | Pattern: Materialized + ES Audit Trail

Cross-Reference: See Ch 05, Sections 4.1-4.19 for business rules. See Ch 08, Domain 3 (Inventory) for table schemas. See Appendix F, §F.7 for service breakdown.


G.7.1 Inventory Dashboard

AttributeValue
Screen IDSCR-M04-01
Product(s)MANAGER+
BRD Section(s)4.17
Database Tablesinventory_levels (R), inventory_transactions (R), purchase_orders (R), transfer_orders (R), locations (R), products (R), variants (R)
State Machine(s)
Appendix F Servicesinventory.dashboard.projection.service, inventory.report.query.service
User RolesMANAGER, OWNER, BUYER
Offline CapableNo
Route/inventory/dashboard

Purpose

At-a-glance inventory health overview with eight KPI cards, trend indicators, and drill-down links to detailed reports. Provides multi-location summary with filters for location, category, brand, and date range. Serves as the primary inventory management landing page.

Key Elements

ElementTypeDescriptionBusiness Rule
Total Inventory Value (WAC)PanelSum of (available_qty x WAC) across all locations. 30-day trend arrow + % changeBRD 4.17.1
Low Stock ItemsPanelCount of products where available_qty <= reorder_point. Delta from prior weekBRD 4.17.1
Pending PO CountPanelCount of POs in OPEN/PARTIAL status with total pending PO valueBRD 4.17.1
Open TransfersPanelCount of transfers in REQUESTED/APPROVED/PICKING/SHIPPED status with in-transit items countBRD 4.17.1
Upcoming CountsPanelCount of scheduled counts in next 7 days with next count date and typeBRD 4.17.1
Shrinkage %Panel(Total variance value / Total inventory value) x 100 for last 30 days vs. prior periodBRD 4.17.1
Dead Stock CountPanelProducts with zero sales velocity in last 90 days. Delta from prior monthBRD 4.17.1
Avg Days of SupplyPanelAverage days_of_supply across active products. Top 3 categories with lowest supplyBRD 4.17.1
Dashboard filtersInputLocation (All/specific), Category, Date Range, BrandBRD 4.17.1
Active alerts feedPanelRecent LOW_STOCK, OVERSTOCK, SHRINKAGE, AGING_INVENTORY, PO_OVERDUE alertsBRD 4.16.1

Wireframe

┌─────────────────────────────────────────────────────────────────────────┐
│ INVENTORY DASHBOARD                    [All Locations ▼] [30 Days ▼]  │
├─────────────────────────────────────────────────────────────────────────┤
│ ┌────────────────┐ ┌────────────────┐ ┌────────────────┐ ┌──────────┐ │
│ │ TOTAL VALUE     │ │ LOW STOCK      │ │ PENDING POs    │ │ OPEN     │ │
│ │ $847,230    ▲2% │ │ 23 items   ▼3 │ │ 8 POs ($12.4K) │ │ XFERS: 5 │ │
│ └────────────────┘ └────────────────┘ └────────────────┘ └──────────┘ │
│ ┌────────────────┐ ┌────────────────┐ ┌────────────────┐ ┌──────────┐ │
│ │ UPCOMING COUNTS │ │ SHRINKAGE %    │ │ DEAD STOCK     │ │ AVG DAYS │ │
│ │ 2 (next: Mon)  │ │ 1.2%     ▼0.3% │ │ 15 items   ▲2 │ │ SUPPLY   │ │
│ │                │ │                │ │                │ │ 42 days  │ │
│ └────────────────┘ └────────────────┘ └────────────────┘ └──────────┘ │
├─────────────────────────────────────────────────────────────────────────┤
│ ACTIVE ALERTS                                            [View All →] │
│ ┌───────────────────────────────────────────────────────────────────┐  │
│ │ ● CRITICAL  Shrinkage 8.2% on CNT-2026-00031 at Store A         │  │
│ │ ▲ WARNING   Low Stock: 23 items below reorder point at Store B   │  │
│ │ ▲ WARNING   PO #PO-2026-00042 overdue by 3 days (Vendor: Nike)  │  │
│ │ ○ INFO      Overstock: 12 items >90 days supply at HQ            │  │
│ └───────────────────────────────────────────────────────────────────┘  │
├─────────────────────────────────────────────────────────────────────────┤
│ INVENTORY BY LOCATION                                                  │
│ ┌──────────┬──────────┬──────────┬──────────┬──────────┐              │
│ │ Store GM │ Store HM │ Store LM │ Store NM │ HQ (WH)  │              │
│ │ $182K    │ $165K    │ $158K    │ $147K    │ $195K    │              │
│ │ 1,245 SKU│ 1,180 SKU│ 1,090 SKU│ 1,050 SKU│ 1,420 SKU│              │
│ │ 3 low ▲  │ 5 low ▼  │ 8 low ▲  │ 4 low ─  │ 3 low ▼  │              │
│ └──────────┴──────────┴──────────┴──────────┴──────────┘              │
└─────────────────────────────────────────────────────────────────────────┘

Actions & Transitions

ActionNavigates ToRequires Role
Click “Low Stock Items” KPISCR-M04-03 Low Stock AlertsMANAGER+
Click “Pending POs” KPISCR-M04-05 PO Approval / TrackBUYER+
Click “Open Transfers” KPISCR-M04-17 Transfer Create / TrackMANAGER+
Click “Upcoming Counts” KPISCR-M04-09 Stock Count SessionMANAGER+
Click location cardSCR-M04-02 Inventory List (filtered to location)MANAGER+
Click alert rowNavigates to relevant detail screen based on alert typeMANAGER+
Click “View All Reports”SCR-M04-22 Inventory ReportsMANAGER+

G.7.2 Inventory List (per location)

AttributeValue
Screen IDSCR-M04-02
Product(s)All Roles
BRD Section(s)4.1, 4.2
Database Tablesinventory_levels (R), products (R), variants (R), locations (R)
State Machine(s)Inventory Status (AVAILABLE, QUARANTINE, DAMAGED, PENDING_INSPECTION, RESERVED, IN_TRANSIT)
Appendix F Servicesinventory.level.query.service, inventory.status-model.service
User RolesALL
Offline CapableYes (POS: reads from product_cache SQLite table; shows cached on_hand qty)
Route/inventory/levels

Purpose

Displays current stock quantities for all products at a selected location, broken down by inventory status (Available, Reserved, In-Transit, Quarantine, Damaged). Shows the computed available quantity (on_hand - committed - reserved) and visual indicators for low stock and reorder point thresholds.

Key Elements

ElementTypeDescriptionBusiness Rule
Location selectorInputDropdown to select location. Default: user’s assigned locationBRD 4.1
Inventory tableTableSKU, Product Name, Variant, Available, Reserved, In-Transit, Quarantine, Damaged, On-Hand (total), Reorder Point, WACBRD 4.1.5
Status breakdownPanelPer-row expandable showing qty by each status with last_status_change_atBRD 4.2.1
Low stock indicatorBadgeRed/amber badge when available_qty <= reorder_pointBRD 4.5
Min display qty warningBadgeAdvisory badge when available_qty < min_display_qty. Suggests transfer from location with highest stockBRD 4.2.4
FiltersPanelCategory, Brand, Stock Status (All/Low/Out/Overstock), Search by SKU/NameBRD 4.1
Balance equationPanelHeader showing: Available = On-Hand - Reserved - In-Transit - Quarantine - DamagedBRD 4.1.5
ExportButtonCSV export of current inventory snapshotBRD 4.17.2

Actions & Transitions

ActionNavigates ToRequires Role
Click product rowProduct inventory detail (movement history for this product+location)ALL
Click “New Adjustment”SCR-M04-15 Adjustment Request (product pre-selected)CASHIER+
Click “Request Transfer”SCR-M04-17 Transfer Create (destination pre-selected)MANAGER+
Click “Create Count”SCR-M04-09 Stock Count Session (location pre-selected)MANAGER+

G.7.3 Low Stock Alerts

AttributeValue
Screen IDSCR-M04-03
Product(s)MANAGER+
BRD Section(s)4.16
Database Tablesinventory_levels (R), products (R), variants (R), locations (R), purchase_orders (R)
State Machine(s)Alert Lifecycle (TRIGGERED → ACKNOWLEDGED → RESOLVED)
Appendix F Servicesinventory.alert.service, inventory.reorder.engine.service
User RolesMANAGER, OWNER, BUYER
Offline CapableNo
Route/inventory/alerts

Purpose

Displays all active inventory alerts across five types: Low Stock, Overstock, Shrinkage Threshold, Aging Inventory, and PO Overdue. Provides acknowledge/resolve workflow, auto-resolution tracking, and one-click actions to create POs or transfers from alert context.

Key Elements

ElementTypeDescriptionBusiness Rule
Alert tabsPanelTabs: All, Low Stock, Overstock, Shrinkage, Aging, PO Overdue. Count badges per tabBRD 4.16.1
Alert listTableAlert Type, Severity (CRITICAL/WARNING/INFO), Product, Location, Message, Triggered At, Status, Acknowledged ByBRD 4.16.2
Severity indicatorsBadgeRed=CRITICAL, Amber=WARNING, Blue=INFOBRD 4.16.1
Data snapshotPanelExpandable per alert showing key metrics at alert time (e.g., available_qty, reorder_point)BRD 4.16.2
One-click actionsButton“Create PO” (for low stock), “Create Transfer” (for overstock/imbalance), “View Count” (for shrinkage)BRD 4.16.1
Acknowledge buttonButtonMark alert as acknowledged — staff is aware and working on itBRD 4.16.3
Auto-resolved indicatorBadgeShows when alert was auto-resolved (e.g., stock received, sale occurred)BRD 4.16.3

Actions & Transitions

ActionNavigates ToRequires Role
Click “Create PO” on low stock alertSCR-M04-04 PO Create (product + vendor pre-filled)BUYER+
Click “Create Transfer”SCR-M04-17 Transfer Create (product pre-filled)MANAGER+
Click “Acknowledge”Stays on page; alert status → ACKNOWLEDGEDMANAGER+
Click “View Count” on shrinkage alertSCR-M04-13 Count Results Review (count session linked)MANAGER+

G.7.4 PO Create / Edit

AttributeValue
Screen IDSCR-M04-04
Product(s)BUYER+
BRD Section(s)4.3
Database Tablespurchase_orders (RW), purchase_order_items (RW), products (R), variants (R), brands (R), locations (R)
State Machine(s)PO Lifecycle (DRAFT → PENDING_APPROVAL → SUBMITTED → PARTIALLY_RECEIVED → FULLY_RECEIVED → CLOSED / CANCELLED)
Appendix F Servicesinventory.po.command.service
User RolesMANAGER, OWNER, BUYER
Offline CapableNo
Route/inventory/purchase-orders/new, /inventory/purchase-orders/:id/edit

Purpose

Creates and edits purchase orders for inventory replenishment. Staff select a vendor, add line items with quantities and costs, set expected delivery dates, and submit for approval or directly to the vendor. Supports auto-generation from reorder alerts and PO templates.

Key Elements

ElementTypeDescriptionBusiness Rule
PO headerPanelPO number (auto: PO-YYYY-NNNNN), Vendor selector, Destination Location, Expected Date, NotesBRD 4.3.4
Vendor product pickerPanelShows vendor’s product catalog with vendor SKU, vendor cost, lead time. Search + filterBRD 4.3.3
Line items tableTableProduct, Variant, Vendor SKU, Qty Ordered, Unit Cost, Line Total. Inline editableBRD 4.3.5
PO summaryPanelLine count, subtotal, tax_amount, shipping_cost, total_amountBRD 4.3.4
Approval indicatorBadgeShows if PO total exceeds auto-approve threshold ($2,000 default). “Requires Manager Approval” warningBRD 4.3.2
Auto-generated flagBadge“Auto-Generated” badge if created by reorder engineBRD 4.5.2
Status barPanelCurrent status badge + available actions based on stateBRD 4.3.1
Landed cost sectionPanelFreight, duties, customs, handling fields. Allocation method selector (BY_UNIT/BY_VALUE/BY_WEIGHT)BRD 4.11.1

Wireframe

┌─────────────────────────────────────────────────────────────────────────┐
│ PURCHASE ORDER: PO-2026-00042                        [DRAFT ○] [Save] │
├─────────────────────────────────────────────────────────────────────────┤
│ Vendor: [Nike USA           ▼]    Destination: [HQ Warehouse    ▼]    │
│ Expected: [2026-03-15       📅]   Notes: [Spring restock order     ]  │
│ ⚠ Total exceeds $2,000 — Manager approval required on submit         │
├─────────────────────────────────────────────────────────────────────────┤
│ LINE ITEMS                                          [+ Add Product]   │
│ ┌─────┬──────────────────────┬────────┬─────┬──────────┬─────────────┐ │
│ │  #  │ Product / Variant    │ V-SKU  │ Qty │ Unit Cost│ Line Total  │ │
│ ├─────┼──────────────────────┼────────┼─────┼──────────┼─────────────┤ │
│ │  1  │ Oxford Shirt - S/Blu │ NK-4401│  20 │   $12.00 │    $240.00  │ │
│ │  2  │ Oxford Shirt - M/Blu │ NK-4402│  30 │   $12.00 │    $360.00  │ │
│ │  3  │ Oxford Shirt - L/Blu │ NK-4403│  25 │   $12.00 │    $300.00  │ │
│ │  4  │ Oxford Shirt - XL/Bl │ NK-4404│  15 │   $13.00 │    $195.00  │ │
│ │  5  │ Classic Polo - M/Wht │ NK-5501│  40 │   $10.00 │    $400.00  │ │
│ │  6  │ Classic Polo - L/Wht │ NK-5502│  35 │   $10.00 │    $350.00  │ │
│ └─────┴──────────────────────┴────────┴─────┴──────────┴─────────────┘ │
├─────────────────────────────────────────────────────────────────────────┤
│ COST ALLOCATION                     │ SUMMARY                          │
│ Freight:  [$500.00            ]     │ Subtotal:     $1,845.00          │
│ Duties:   [$300.00            ]     │ Tax:          $0.00              │
│ Customs:  [$100.00            ]     │ Shipping:     $500.00            │
│ Handling: [$80.00             ]     │ ────────────────────────         │
│ Method:   [BY_UNIT            ▼]    │ Total:        $2,345.00          │
├─────────────────────────────────────────────────────────────────────────┤
│ [Save Draft]  [Submit to Vendor ▶]                          [Cancel]  │
└─────────────────────────────────────────────────────────────────────────┘

Actions & Transitions

ActionNavigates ToRequires Role
Click “Save Draft”Stays on page; PO saved as DRAFTBUYER+
Click “Submit to Vendor”If total <= threshold: status → SUBMITTED. If > threshold: status → PENDING_APPROVALBUYER+
Click “Cancel PO”Stays on page; status → CANCELLEDMANAGER+
Click vendor nameSCR-M03-13 Vendor Management (vendor detail)MANAGER+
Click “Use Template”SCR-M04-06 PO Templates (select and apply)BUYER+

G.7.5 PO Approval / Track

AttributeValue
Screen IDSCR-M04-05
Product(s)MANAGER+
BRD Section(s)4.3
Database Tablespurchase_orders (RW), purchase_order_items (R), brands (R), locations (R)
State Machine(s)PO Lifecycle (DRAFT → PENDING_APPROVAL → SUBMITTED → PARTIALLY_RECEIVED → FULLY_RECEIVED → CLOSED / CANCELLED)
Appendix F Servicesinventory.po.command.service, inventory.po.query.service
User RolesMANAGER, OWNER, BUYER
Offline CapableNo
Route/inventory/purchase-orders

Purpose

Lists all purchase orders with status tracking, filtering, and approval workflow. Managers review and approve/reject POs exceeding the auto-approve threshold. Buyers track PO status from submission through receiving. Shows overdue PO alerts and expected delivery timelines.

Key Elements

ElementTypeDescriptionBusiness Rule
PO listTablePO Number, Vendor, Status, Location, Order Date, Expected Date, Total Value, Received %, Overdue flagBRD 4.3
Status filter tabsPanelAll, Draft, Pending Approval, Submitted, Partially Received, Fully Received, Closed, CancelledBRD 4.3.1
Approval queuePanelPOs in PENDING_APPROVAL status with Approve/Reject buttons. Shows PO total vs. thresholdBRD 4.3.2
Overdue indicatorBadgeRed badge when expected_date passed and status is SUBMITTED/PARTIALLY_RECEIVEDBRD 4.3.6
PO detail drawerPanelSlide-out panel showing full PO header + line items + receiving historyBRD 4.3
Timeline viewPanelVisual timeline of PO state transitions with timestamps and actorsBRD 4.3.1

Actions & Transitions

ActionNavigates ToRequires Role
Click “Approve” on pending POStays on page; PO status → SUBMITTEDMANAGER+
Click “Reject” on pending PORejection reason modal; PO status → REJECTED → DRAFT (for revision)MANAGER+
Click PO rowSCR-M04-04 PO Create/Edit (read-only if not DRAFT)BUYER+
Click “Receive”SCR-M04-07 Receiving & Inspection (PO pre-selected)CASHIER+
Click “+ New PO”SCR-M04-04 PO CreateBUYER+

G.7.6 PO Templates

AttributeValue
Screen IDSCR-M04-06
Product(s)BUYER+
BRD Section(s)4.3
Database Tablespurchase_orders (R), purchase_order_items (R), brands (R), products (R)
State Machine(s)
Appendix F Servicesinventory.po.command.service
User RolesMANAGER, OWNER, BUYER
Offline CapableNo
Route/inventory/purchase-orders/templates

Purpose

Manages reusable purchase order templates for recurring vendor orders. Templates store pre-configured vendor, product line items, and default quantities, allowing staff to create new POs from templates with one click. Reduces repetitive data entry for routine restocking.

Key Elements

ElementTypeDescriptionBusiness Rule
Template listTableTemplate Name, Vendor, Product Count, Last Used, Created ByBRD 4.3
Template detail formPanelName, Vendor (locked), line items (product, default qty, unit cost)BRD 4.3
“Use Template” buttonButtonCreates a new DRAFT PO pre-filled from template. Staff can modify before submittingBRD 4.3
Save as templateButtonSave current PO as reusable template (strips PO-specific dates and numbers)BRD 4.3

Actions & Transitions

ActionNavigates ToRequires Role
Click “Use Template”SCR-M04-04 PO Create (pre-filled from template)BUYER+
Click template rowTemplate detail form (edit mode)MANAGER+
Click “+ New Template”Template detail form (create mode)MANAGER+

G.7.7 Receiving & Inspection

AttributeValue
Screen IDSCR-M04-07
Product(s)All Roles
BRD Section(s)4.4
Database Tablespurchase_orders (RW), purchase_order_items (RW), inventory_levels (RW), inventory_transactions (RW), products (R), variants (R)
State Machine(s)PO Lifecycle (SUBMITTED → PARTIALLY_RECEIVED → FULLY_RECEIVED)
Appendix F Servicesinventory.receiving.command.service
User RolesCASHIER, MANAGER, OWNER
Offline CapableNo — inventory updates require server
Route/inventory/receiving

Purpose

Processes inbound inventory from four source types: PO shipments, inter-store transfers, customer returns (return-to-stock), and vendor RMA replacements. Staff scan or enter received quantities, inspect items, flag discrepancies, and confirm receipt. Inventory is incremented and WAC is recalculated on confirmation.

Key Elements

ElementTypeDescriptionBusiness Rule
Source type selectorInputPO Receive / Transfer Receive / Return-to-Stock / RMA ReplacementBRD 4.4.1
PO/Transfer pickerInputSelect open PO or in-transit transfer to receive againstBRD 4.4
Line items tableTableProduct, Variant, Ordered Qty, Previously Received, Receiving Now, Discrepancy. Scanner-primary inputBRD 4.4.3
Scanner modePanelBarcode scanner auto-increments received qty per scan. Manual entry fallbackBRD 4.4.9
Inspection checklistPanelPer-line inspection: condition (GOOD/DAMAGED/WRONG_ITEM), notesBRD 4.4
Non-PO receivePanelReceive without PO: mandatory reason code (sample, gift, found, correction)BRD 4.4.6
Open receive modePanelAllows receiving items not on the PO — flags as unexpected and requires reasonBRD 4.4.4
WAC recalculation previewPanelShows current WAC, new landed cost, and projected new WAC after receiveBRD 4.11.2

Actions & Transitions

ActionNavigates ToRequires Role
Click “Confirm Receive”Stays on page; inventory incremented, WAC recalculated, PO status updatedCASHIER+
Click “Report Discrepancy”SCR-M04-08 Receiving Variance (pre-filled)CASHIER+
Click “Print Labels”SCR-M03-14 Label Printing (received products queued)ALL
Click “View PO”SCR-M04-04 PO Create/Edit (read-only)BUYER+

G.7.8 Receiving Variance

AttributeValue
Screen IDSCR-M04-08
Product(s)All Roles
BRD Section(s)4.4.5, 4.4.7
Database Tablespurchase_orders (R), purchase_order_items (R), inventory_transactions (R)
State Machine(s)
Appendix F Servicesinventory.receiving.command.service
User RolesCASHIER, MANAGER, OWNER
Offline CapableNo
Route/inventory/receiving/:id/variance

Purpose

Handles discrepancies between ordered/expected quantities and actually received quantities. Supports the triple approach: log a note (minor variance), auto-draft an RMA (defective items), or quarantine items for further inspection. Also manages over-shipment decisions (keep, return, or quarantine).

Key Elements

ElementTypeDescriptionBusiness Rule
Variance summaryTableProduct, Ordered Qty, Received Qty, Variance (+/-), Variance %, ResolutionBRD 4.4.5
Resolution actionsInputPer-line: Note Only / Draft RMA / Quarantine. Default based on variance typeBRD 4.4.5
Over-shipment handlerPanelFor positive variances: Accept & Add to Inventory / Return to Vendor / Quarantine for ReviewBRD 4.4.7
Condition notesInputFree-text notes per variance line explaining the discrepancyBRD 4.4.5
Auto-RMA draftButtonCreates draft RMA for defective items detected during receivingBRD 4.4.5
Variance historyTableHistorical receiving variances by vendor for performance trackingBRD 4.17.2

Actions & Transitions

ActionNavigates ToRequires Role
Click “Create RMA” for defective varianceSCR-M04-21 Vendor RMA (pre-filled from variance data)MANAGER+
Click “Accept Over-Shipment”Stays on page; inventory incremented for excess qtyMANAGER+
Click “Quarantine”Stays on page; items moved to QUARANTINE statusMANAGER+
Click “Save & Close”Returns to SCR-M04-07 ReceivingCASHIER+

G.7.9 Stock Count Session

AttributeValue
Screen IDSCR-M04-09
Product(s)All Roles
BRD Section(s)4.6
Database Tablesinventory_levels (R), inventory_transactions (R), products (R), variants (R), locations (R)
State Machine(s)Count Lifecycle (CREATED → IN_PROGRESS → REVIEW → APPROVED / CANCELLED)
Appendix F Servicesinventory.count.command.service, inventory.count.query.service
User RolesMANAGER, OWNER (create); CASHIER+ (count)
Offline CapablePartial (POS: scanner counting can work offline; sync on reconnect)
Route/inventory/counts/:id

Purpose

Primary interface for conducting physical inventory counts. Managers create count sessions specifying type, location, scope, and mode (Freeze/Snapshot). Staff perform scanner-primary counting or manual entry. The screen tracks progress, shows expected vs. counted quantities, and handles the complete count lifecycle.

Key Elements

ElementTypeDescriptionBusiness Rule
Count headerPanelCount number (CNT-YYYY-NNNNN), type (Full/Cycle/Scanner/Monthly/On-Demand), location, mode (FREEZE/SNAPSHOT), scope, status, assigned_toBRD 4.6.2
Mode indicatorBadgeFREEZE: “Sales Suspended at This Location” warning. SNAPSHOT: “Sales continue — reconciled at review”BRD 4.6.4
Count entry tableTableProduct, Variant, Expected Qty, Counted Qty, Variance, Variance %, Count Method (Scanner/Manual), NotesBRD 4.6.3
Scanner inputPanelActive barcode scanner listener. Each scan increments counted_qty by 1. Beep + product name confirmationBRD 4.6.5
Manual entry toggleButtonSwitch to manual qty entry for items with damaged/missing barcodesBRD 4.6.5
Section progressPanelFor scoped counts: progress bar showing sections/categories completed vs. remainingBRD 4.6.1
Unrecognized barcode handlerModal“Unknown barcode — search product manually?” with product searchBRD 4.6.5
Out-of-scope warningBadgeProducts scanned that are not in count scope — option to addBRD 4.6.5

Wireframe

┌─────────────────────────────────────────────────────────────────────────┐
│ STOCK COUNT: CNT-2026-00031          [IN_PROGRESS ●]  [FREEZE MODE ⚠] │
│ Location: Store A | Type: Cycle Count | Scope: Men's Tops             │
│ Assigned: Sarah M. | Started: 2026-03-01 08:15                        │
├─────────────────────────────────────────────────────────────────────────┤
│ ⚠ FREEZE MODE ACTIVE — Sales suspended at Store A                     │
├─────────────────────────────────────────────────────────────────────────┤
│ SCANNER INPUT: [Scan barcode or type SKU...          ]  [Manual Mode] │
│ Last scan: "Classic Oxford Shirt - M/Blue" → Count: 23                │
├─────────────────────────────────────────────────────────────────────────┤
│ SECTION PROGRESS: Men's Tops                    [████████░░░░] 67%    │
│ ┌──────────────────────┬──────┬─────────┬──────────┬──────┬─────────┐ │
│ │ Product / Variant    │ Exp. │ Counted │ Variance │ Var% │ Method  │ │
│ ├──────────────────────┼──────┼─────────┼──────────┼──────┼─────────┤ │
│ │ Oxford Shirt - S/Blu │   15 │      14 │       -1 │ -6.7%│ Scanner │ │
│ │ Oxford Shirt - M/Blu │   22 │      23 │       +1 │ +4.5%│ Scanner │ │
│ │ Oxford Shirt - L/Blu │   18 │      18 │        0 │  0.0%│ Scanner │ │
│ │ Oxford Shirt - XL/Bl │    8 │       6 │       -2 │  -25%│ Scanner │ │
│ │ Classic Polo - S/Wht │   12 │      -- │       -- │   -- │ Pending │ │
│ │ Classic Polo - M/Wht │   20 │      -- │       -- │   -- │ Pending │ │
│ │ Classic Polo - L/Wht │   15 │      -- │       -- │   -- │ Pending │ │
│ └──────────────────────┴──────┴─────────┴──────────┴──────┴─────────┘ │
├─────────────────────────────────────────────────────────────────────────┤
│ Counted: 4/7 items | Total scans: 61 | High variance: 1 item          │
├─────────────────────────────────────────────────────────────────────────┤
│ [Save Progress]  [Submit for Review ▶]                       [Cancel] │
└─────────────────────────────────────────────────────────────────────────┘

Actions & Transitions

ActionNavigates ToRequires Role
Click “Submit for Review”SCR-M04-13 Count Results Review (auto-navigates)CASHIER+
Click “Save Progress”Stays on page; progress saved, count remains IN_PROGRESSCASHIER+
Click “Cancel”Stays on page; confirmation dialog. Status → CANCELLED. If FREEZE: sales resumeMANAGER+
Scan barcodeStays on page; increments counted_qty for matched productCASHIER+

G.7.10 Count Freeze Manager

AttributeValue
Screen IDSCR-M04-10
Product(s)MANAGER+
BRD Section(s)4.6.4
Database Tablesinventory_levels (R), locations (R), products (R)
State Machine(s)
Appendix F Servicesinventory.count.command.service
User RolesMANAGER, OWNER
Offline CapableNo
Route/inventory/counts/freeze

Purpose

Manages the FREEZE mode for inventory counts, controlling which locations have sales suspended during counting. Shows active freezes across all locations, provides ability to release freeze early, and manages queued transfers that are held until count completion.

Key Elements

ElementTypeDescriptionBusiness Rule
Active freezes listTableLocation, Count ID, Count Type, Start Time, Duration, Status, Queued Transfers countBRD 4.6.4
Freeze impact previewPanelBefore starting freeze: estimated duration, expected revenue impact, affected terminals countBRD 4.6.4
Queued transfersTableTransfers held during freeze — to/from the frozen locationBRD 4.6.4
POS terminal statusPanelPer-terminal display at frozen location: “Count Mode — Sales Suspended” message activeBRD 4.6.4
Emergency releaseButtonRelease freeze early — requires reason. Queued transfers process immediatelyBRD 4.6.4

Actions & Transitions

ActionNavigates ToRequires Role
Click “Release Freeze”Stays on page; sales resume at location, queued transfers processMANAGER+
Click count rowSCR-M04-09 Stock Count SessionMANAGER+
Click queued transferSCR-M04-17 Transfer Create/Track (transfer detail)MANAGER+

G.7.11 Scanner Count Entry

AttributeValue
Screen IDSCR-M04-11
Product(s)CASHIER+
BRD Section(s)4.6.5
Database Tablesinventory_levels (R), products (R), variants (R)
State Machine(s)
Appendix F Servicesinventory.count.command.service
User RolesALL
Offline CapableYes (counts stored locally; synced when online)
Route/pos/count/:id

Purpose

POS-optimized barcode scanning interface for inventory counting. Designed for handheld scanner use with large text, audio feedback, and minimal interaction. Each scan increments the count by 1. Supports fallback to manual entry for items with damaged barcodes.

Key Elements

ElementTypeDescriptionBusiness Rule
Scanner listenerPanelActive barcode input field. Auto-focus. Each scan: beep + product name + running countBRD 4.6.5
Running count displayPanelLarge font: “Product XYZ: 23 counted” with +1 animation on each scanBRD 4.6.5
Count progressPanelItems counted vs. total expected items. Progress barBRD 4.6.5
Manual entry modeButtonSwitch to keyboard qty input for specific productBRD 4.6.5
Unknown barcode modalModalProduct search by SKU/name when barcode not recognizedBRD 4.6.5
Count summaryPanelTotal scans, unique products counted, estimated completion %BRD 4.6.5

Actions & Transitions

ActionNavigates ToRequires Role
Click “Submit for Review”SCR-M04-13 Count Results ReviewCASHIER+
Click “Save & Exit”Stays on count list; progress savedCASHIER+
Scan barcodeStays on page; increments count for matched productALL

G.7.12 RFID Count Manager

AttributeValue
Screen IDSCR-M04-12
Product(s)MANAGER+
BRD Section(s)4.6.8
Database Tablesrfid_scan_sessions (RW), rfid_scan_events (R), session_operators (RW), rfid_tags (R), inventory_levels (R), locations (R)
State Machine(s)RFID Count Session (same as stock count lifecycle)
Appendix F Servicesinventory.count.command.service, inventory.count.query.service
User RolesMANAGER, OWNER
Offline CapableNo (management side; Raptag mobile handles offline scanning)
Route/inventory/counts/rfid

Purpose

Management-side interface for RFID-assisted counting sessions conducted via the Raptag mobile application. Managers create RFID count sessions, assign sections to operators (up to 10), monitor real-time upload progress, review chunked sync status, and manage server-side deduplication of overlapping reads.

Key Elements

ElementTypeDescriptionBusiness Rule
RFID session listTableSession ID, Location, Type (full_inventory/cycle_count/spot_check), Status, Operator Count, Tag Reads, Sync %BRD 4.6.8
Operator assignmentPanelAdd operators (up to 10), assign sections (e.g., “Sarah: Men’s Tops”), track join/leave statusBRD 4.6.8
Chunked upload monitorPanelPer-operator: chunks uploaded, chunks pending, sync errors. 5,000 events per chunkBRD 4.6.8
Dedup resultsPanelTags scanned by multiple operators with RSSI comparison. Shows which read was keptBRD 4.6.8
Session completion checkBadge“All operators submitted” or “Waiting for: James (2 chunks pending)”BRD 4.6.8
EPC-to-product mappingTableEPC reads matched to products/variants via rfid_tag_mappingsBRD 4.6.8

Actions & Transitions

ActionNavigates ToRequires Role
Click “+ New RFID Session”Session creation form (location, type, operator assignment)MANAGER+
Click “View Results”SCR-M04-13 Count Results Review (RFID session data)MANAGER+
Click “Remove Operator”Stays on page; operator removed from session (data preserved)MANAGER+
Click operator rowOperator detail: sections assigned, chunks uploaded, tags readMANAGER+

G.7.13 Count Results Review

AttributeValue
Screen IDSCR-M04-13
Product(s)MANAGER+
BRD Section(s)4.6
Database Tablesinventory_levels (R), inventory_transactions (R), products (R), variants (R)
State Machine(s)Count Lifecycle (REVIEW stage)
Appendix F Servicesinventory.count.query.service
User RolesMANAGER, OWNER
Offline CapableNo
Route/inventory/counts/:id/review

Purpose

Presents the variance report from a completed stock count for manager review before adjustments are applied. Shows expected vs. counted quantities for every product in scope, highlights high-variance items, and provides per-line accept/reject controls. For SNAPSHOT mode, displays reconciliation adjustments for sales and transfers that occurred during the count.

Key Elements

ElementTypeDescriptionBusiness Rule
Variance summaryPanelTotal items counted, items with variance, total positive variance, total negative variance, net variance, variance value at costBRD 4.6.3
Variance tableTableProduct, Variant, Expected Qty, Counted Qty, Variance, Variance %, Count Method (Scanner/Manual/RFID), Accept/Reject toggle, NotesBRD 4.6.3
High-variance highlightBadgeRed highlight on lines where variance % exceeds shrinkage_threshold_pct (default 5%)BRD 4.16.1
SNAPSHOT reconciliationPanelFor SNAPSHOT mode: shows sales_during_count, receives_during_count, adjusted_expected_qtyBRD 4.6.4
Cost impact previewPanelTotal cost impact of accepting all variances (positive and negative)BRD 4.7.2
Count method breakdownPanelPercentage of items counted via Scanner vs. Manual vs. RFIDBRD 4.6.5

Actions & Transitions

ActionNavigates ToRequires Role
Click “Approve All Adjustments”SCR-M04-14 Count Approval (confirmation)MANAGER+
Click “Reject” on individual lineStays on page; line excluded from adjustmentMANAGER+
Click “Request Recount”SCR-M04-09 Stock Count Session (new count for specific items)MANAGER+
Click “Export Variance Report”Downloads CSV/PDF of variance dataMANAGER+

G.7.14 Count Approval

AttributeValue
Screen IDSCR-M04-14
Product(s)MANAGER+
BRD Section(s)4.6
Database Tablesinventory_levels (RW), inventory_transactions (RW), products (R), variants (R)
State Machine(s)Count Lifecycle (REVIEW → APPROVED)
Appendix F Servicesinventory.count.command.service, inventory.level.adjustment.service
User RolesMANAGER, OWNER
Offline CapableNo
Route/inventory/counts/:id/approve

Purpose

Final confirmation step for applying count variance adjustments to inventory. Displays a summary of all accepted adjustments, the total cost impact, and requires manager confirmation. On approval, inventory quantities are updated, COUNT_ADJUST movements are logged, and if FREEZE mode was active, sales resume at the location.

Key Elements

ElementTypeDescriptionBusiness Rule
Adjustment summaryPanelTotal lines to adjust, net quantity change, total cost impact (at WAC), approved_by fieldBRD 4.6
Accepted adjustments listTableProduct, Variant, Old Qty, New Qty, Change, Cost Impact — only accepted lines shownBRD 4.6.3
Freeze release indicatorBadge“Approving will release FREEZE and resume sales at [Location]” (if FREEZE mode)BRD 4.6.4
Confirmation checkboxInput“I confirm these inventory adjustments are accurate” — required before approve button enablesBRD 4.6
Movement log previewPanelPreview of COUNT_ADJUST movement records that will be createdBRD 4.12.1

Actions & Transitions

ActionNavigates ToRequires Role
Click “Approve & Apply”Stays on page; inventory updated, movements logged, count status → APPROVED. If FREEZE: sales resumeMANAGER+
Click “Back to Review”SCR-M04-13 Count Results ReviewMANAGER+
Click “Cancel Count”Stays on page; count status → CANCELLED, no inventory changes. If FREEZE: sales resumeMANAGER+

G.7.15 Adjustment Request

AttributeValue
Screen IDSCR-M04-15
Product(s)All Roles
BRD Section(s)4.7
Database Tablesinventory_levels (R), inventory_transactions (R), products (R), variants (R), locations (R)
State Machine(s)Adjustment Workflow (PENDING → APPROVED / REJECTED)
Appendix F Servicesinventory.level.adjustment.service
User RolesALL (create); MANAGER+ (approve)
Offline CapableNo — requires server for submission
Route/inventory/adjustments/new

Purpose

Staff submit manual inventory adjustment requests when they discover discrepancies between system quantities and physical reality outside of a formal stock count. All adjustments require manager approval before inventory changes. Supports positive adjustments (found stock) and negative adjustments (shrinkage, damage, theft).

Key Elements

ElementTypeDescriptionBusiness Rule
Product selectorInputSearch by SKU, barcode, or name. Shows current available qty at selected locationBRD 4.7.2
Location selectorInputLocation where adjustment appliesBRD 4.7.2
Qty changeInputPositive (found stock) or negative (shrinkage/damage). Must not be 0BRD 4.7.2
Reason code selectorInputStandard codes: DAMAGED, THEFT, COUNT_CORRECTION, SAMPLE, WRITE_OFF, FOUND_STOCK, RETURN_TO_STOCK, OTHER + tenant custom codesBRD 4.7.3
NotesInputFree-text explanation. Mandatory when reason code = OTHER or custom code has requires_notes=trueBRD 4.7.2
Cost impact previewPanelCalculated: qty_change x weighted_avg_cost. Shows dollar impact before submissionBRD 4.7.2
Pending adjustmentsTableList of user’s pending adjustments with status trackingBRD 4.7.4

Actions & Transitions

ActionNavigates ToRequires Role
Click “Submit for Approval”Stays on page; adjustment created as PENDING. Notification sent to managersALL
Click pending adjustment rowAdjustment detail view (read-only until approved/rejected)ALL
Click “View History”SCR-M04-22 Inventory Reports (adjustment history filter)MANAGER+

G.7.16 Adjustment Approval

AttributeValue
Screen IDSCR-M04-16
Product(s)MANAGER+
BRD Section(s)4.7
Database Tablesinventory_levels (RW), inventory_transactions (RW), products (R), variants (R)
State Machine(s)Adjustment Workflow (PENDING → APPROVED / REJECTED)
Appendix F Servicesinventory.level.adjustment.service
User RolesMANAGER, OWNER
Offline CapableNo
Route/inventory/adjustments/approve

Purpose

Manager queue for reviewing and approving/rejecting pending inventory adjustment requests. Shows adjustment details including product, location, quantity change, reason code, cost impact, and requester information. Approved adjustments immediately update inventory quantities and create movement records.

Key Elements

ElementTypeDescriptionBusiness Rule
Pending queueTableAdjustment #, Product, Location, Qty Change, Reason Code, Requested By, Date, Cost Impact, Days PendingBRD 4.7.1
Adjustment detailPanelFull detail: current qty, proposed new qty, reason, notes, cost impact, requester infoBRD 4.7.2
Approve buttonButtonApplies adjustment to inventory, creates ADJUSTMENT_UP or ADJUSTMENT_DOWN movementBRD 4.7.1
Reject buttonButtonRequires rejection reason. Inventory unchanged. Requester notifiedBRD 4.7.1
Concurrent adjustment warningBadgeWarning when multiple pending adjustments exist for same product+locationBRD 4.7.4
Approval historyTableRecently approved/rejected adjustments for audit trailBRD 4.7.5

Actions & Transitions

ActionNavigates ToRequires Role
Click “Approve”Stays on page; inventory updated, movement logged, requester notifiedMANAGER+
Click “Reject”Rejection reason modal; inventory unchanged, requester notifiedMANAGER+
Click product linkSCR-M04-02 Inventory List (filtered to product+location)MANAGER+
Click “View All History”SCR-M04-22 Inventory Reports (adjustment history)MANAGER+

G.7.17 Transfer Create / Track

AttributeValue
Screen IDSCR-M04-17
Product(s)MANAGER+
BRD Section(s)4.8
Database Tablestransfer_orders (RW), transfer_order_items (RW), inventory_levels (RW), inventory_transactions (RW), locations (R), products (R), variants (R)
State Machine(s)Transfer Lifecycle (REQUESTED → APPROVED → PICKING → SHIPPED → IN_TRANSIT → RECEIVED → COMPLETED / REJECTED / CANCELLED)
Appendix F Servicesinventory.transfer.command.service, inventory.transfer.query.service
User RolesMANAGER, OWNER
Offline CapableNo
Route/inventory/transfers

Purpose

Creates and tracks inter-store inventory transfers. Supports both Pull model (destination requests from source) and Push model (HQ pushes to stores). Full lifecycle from request through pick, ship, transit, receive, and verification. Includes auto-suggest transfer recommendations based on sales velocity imbalances.

Key Elements

ElementTypeDescriptionBusiness Rule
Transfer listTableTransfer #, Source, Destination, Direction (PULL/PUSH), Status, Priority, Shipped Date, Items Count, Tracking #BRD 4.8.3
Status filter tabsPanelAll, Requested, Approved, Picking, Shipped, In-Transit, Received, Completed, CancelledBRD 4.8.1
Create transfer formModalSource location, Destination location, Direction (PULL/PUSH), Priority (Normal/Urgent/Customer Request), line items (product, qty_requested)BRD 4.8.3
Auto-suggest panelPanelSystem recommendations: product, source (highest stock), destination (lowest stock), suggested qty, days-of-supply comparisonBRD 4.8.7
Pick listPanelFor PICKING status: items to pick with scan verificationBRD 4.8.1
Ship confirmationPanelEnter qty_shipped per line, tracking_number, carrier. Source inventory decrementedBRD 4.8.4
Receive confirmationPanelEnter qty_received per line, condition (GOOD/DAMAGED/WRONG_ITEM), variance notesBRD 4.8.4

Actions & Transitions

ActionNavigates ToRequires Role
Click “+ New Transfer”Transfer creation modalMANAGER+
Click “Approve” on requested transferStays on page; status → APPROVED, pick list generatedMANAGER+ (source location)
Click “Ship”Stays on page; inventory decremented at source, status → SHIPPEDMANAGER+
Click “Receive”Receive confirmation panel; inventory incremented at destinationMANAGER+
Click “View Suggestions”Auto-suggest panel with rebalancing recommendationsMANAGER+

G.7.18 Reorder Configuration

AttributeValue
Screen IDSCR-M04-18
Product(s)MANAGER+
BRD Section(s)4.5
Database Tablesinventory_levels (RW), products (R), variants (R), locations (R), purchase_orders (R)
State Machine(s)
Appendix F Servicesinventory.reorder.engine.service
User RolesMANAGER, OWNER
Offline CapableNo
Route/inventory/reorder

Purpose

Configures automatic reorder point calculation and draft PO generation. Displays velocity-based reorder points per product per location, allows static overrides by managers, monitors dead stock detection, and shows auto-generated draft POs for review. Controls the reorder engine’s background job schedule and parameters.

Key Elements

ElementTypeDescriptionBusiness Rule
Reorder points tableTableProduct, Location, Current Qty, Calculated Reorder Point, Override Value (if set), Days of Supply, Velocity (90d), Override Active (Y/N)BRD 4.5.1
Static override formModalProduct, Location, override_reorder_point, override_reason (mandatory). Visual indicator shows calculated vs. overrideBRD 4.5.3
Auto-PO queueTableAuto-generated draft POs awaiting review. Badge: “N draft POs auto-generated”BRD 4.5.2
Dead stock listTableProducts with zero velocity for 90+ days. Actions: Markdown, Transfer, Write-Off, DismissBRD 4.5.4
Override auditTableActive overrides: product, location, override value, calculated value, reason, set by, set date, days activeBRD 4.5.5
Reorder engine configPanelSafety stock calculation (1.65 sigma), velocity window (90d), check frequency, account_for_open_pos toggleBRD 4.5.1

Actions & Transitions

ActionNavigates ToRequires Role
Click “Set Override”Override form modalMANAGER+
Click “Remove Override”Stays on page; returns to dynamic calculationMANAGER+
Click auto-PO rowSCR-M04-04 PO Create (auto-generated PO, editable)BUYER+
Click dead stock “Transfer”SCR-M04-17 Transfer Create (product pre-filled)MANAGER+
Click dead stock “Markdown”SCR-M03-06 Markdown Workflow (product pre-filled)MANAGER+

G.7.19 Reason Codes Management

AttributeValue
Screen IDSCR-M04-19
Product(s)OWNER
BRD Section(s)4.7.3
Database Tablesinventory_transactions (R)
State Machine(s)
Appendix F Servicesinventory.level.adjustment.service
User RolesMANAGER, OWNER
Offline CapableNo
Route/inventory/reason-codes

Purpose

Manages tenant-defined custom reason codes for inventory adjustments, extending the standard set (DAMAGED, THEFT, COUNT_CORRECTION, etc.). Custom codes appear alongside standard codes in all adjustment workflows and reports. Supports direction constraints, mandatory notes, and deactivation (soft delete).

Key Elements

ElementTypeDescriptionBusiness Rule
Standard codes tableTableCode, Display Name, Direction, Description — read-only, system-definedBRD 4.7.3
Custom codes tableTableCode, Display Name, Direction (POSITIVE/NEGATIVE/BOTH), Requires Notes, Sort Order, Status (Active/Inactive), Usage CountBRD 4.7.3
Custom code formModalcode (uppercase, alphanumeric + underscore), display_name, description, direction, requires_notes, sort_orderBRD 4.7.3
Usage analyticsPanelPer-code: adjustment count, total qty impact, total cost impact, last used dateBRD 4.7.5
Code validationBadgePrevents duplicate codes and conflicts with standard codesBRD 4.7.3

Actions & Transitions

ActionNavigates ToRequires Role
Click “+ New Reason Code”Custom code form modalMANAGER+
Click custom code rowCustom code form modal (edit mode)MANAGER+
Click “Deactivate”Stays on page; code hidden from dropdown but preserved in historical recordsMANAGER+

G.7.20 Serial Number Tracking

AttributeValue
Screen IDSCR-M04-20
Product(s)All Roles
BRD Section(s)4.10
Database Tablesproducts (R), variants (R), inventory_levels (R), inventory_transactions (R), locations (R)
State Machine(s)Serial Status (IN_STOCK → SOLD → RETURNED → IN_STOCK / RMA / WRITE_OFF)
Appendix F Servicesinventory.serial-lot.command.service
User RolesCASHIER, MANAGER, OWNER
Offline CapableNo
Route/inventory/serials

Purpose

Manages serial number and lot/batch tracking for products that require individual unit traceability. Provides serial number lookup, status history, customer association, and recall support. Enforces serial capture at receiving and sale for serial-tracked products.

Key Elements

ElementTypeDescriptionBusiness Rule
Serial searchInputSearch by serial number, product SKU, or customer name. Returns full serial historyBRD 4.10.1
Serial detailPanelSerial number, product, current status (IN_STOCK/SOLD/RETURNED/RMA/WRITE_OFF), current location, received_at, received_via, sold_at, sold_to customer, sale_order_idBRD 4.10.1
Serial status timelinePanelVisual timeline of serial status changes with timestamps, actors, and source documentsBRD 4.10.1
Lot inventory tableTableLot number, product, location, qty_received, qty_on_hand, qty_sold, received_date, expiry_date, age (days), source POBRD 4.10.2
Recall lookupPanelEnter lot number → shows all units: in stock (by location), sold (customer, date, order), returnedBRD 4.10.2
Warranty lookupPanelEnter serial → shows customer, purchase date, location, order number for warranty claimsBRD 4.10.3

Actions & Transitions

ActionNavigates ToRequires Role
Click serial in resultsSerial detail panel with full historyALL
Click customer linkCustomer detail screen (from sales module)MANAGER+
Click order linkOrder detail screen (from sales module)MANAGER+
Click “Recall Report”Downloads lot trace report (CSV/PDF)MANAGER+

G.7.21 Vendor RMA

AttributeValue
Screen IDSCR-M04-21
Product(s)MANAGER+
BRD Section(s)4.9
Database Tablespurchase_orders (R), inventory_levels (RW), inventory_transactions (RW), products (R), variants (R), brands (R)
State Machine(s)RMA Lifecycle (DRAFT → SUBMITTED → VENDOR_APPROVED/VENDOR_REJECTED → SHIPPED_BACK → CREDIT_RECEIVED/REPLACEMENT_RECEIVED → CLOSED)
Appendix F Servicesinventory.rma.command.service
User RolesMANAGER, OWNER, BUYER
Offline CapableNo
Route/inventory/rma

Purpose

Manages vendor return merchandise authorizations for both defective returns and overstock returns. Tracks the full RMA lifecycle from draft through vendor response, shipping, and credit/replacement resolution. Inventory is decremented only when items are physically shipped back to the vendor.

Key Elements

ElementTypeDescriptionBusiness Rule
RMA listTableRMA #, Vendor, Type (DEFECTIVE_RETURN/OVERSTOCK_RETURN), Status, Source Location, Total Value, Credit Amount, Days OpenBRD 4.9.1
RMA type selectorInputDefective Return (inspection required) or Overstock Return (vendor agreement required)BRD 4.9.6
RMA detail formPanelRMA header: vendor, source_location, reason, notes. For overstock: vendor_agreement_ref, restocking_fee_pctBRD 4.9.2
Line items tableTableProduct, Variant, Qty, Unit Cost, Line Total, Condition Notes, Inspection ResultBRD 4.9.2
Inspection resultInputPer-line: CONFIRMED_DEFECTIVE, COSMETIC_DAMAGE, NOT_AS_DESCRIBED, NOT_INSPECTED (overstock only)BRD 4.9.2
Credit calculatorPanelFor overstock: Gross Credit, Restocking Fee (%), Restocking Fee Amount, Net CreditBRD 4.9.6
Status timelinePanelVisual progression through RMA states with timestampsBRD 4.9.1
Ship back formPanelTracking number, ship date. Inventory decremented on shipBRD 4.9.3

Actions & Transitions

ActionNavigates ToRequires Role
Click “+ New RMA”RMA detail form (create mode)MANAGER+
Click “Submit to Vendor”Stays on page; status → SUBMITTED, line items lockedMANAGER+
Click “Mark Vendor Approved”Stays on page; status → VENDOR_APPROVEDMANAGER+
Click “Ship Back”Ship back form; inventory decremented at source locationMANAGER+
Click “Record Credit”Credit amount entry; status → CREDIT_RECEIVEDBUYER+
Click “Receive Replacement”Creates linked PO for replacement items; status → REPLACEMENT_RECEIVEDBUYER+

G.7.22 Inventory Reports

AttributeValue
Screen IDSCR-M04-22
Product(s)MANAGER+
BRD Section(s)4.17.2
Database Tablesinventory_levels (R), inventory_transactions (R), purchase_orders (R), transfer_orders (R), products (R), variants (R), locations (R), brands (R)
State Machine(s)
Appendix F Servicesinventory.report.query.service, inventory.movement.query.service
User RolesMANAGER, OWNER, BUYER (scoped by role)
Offline CapableNo
Route/inventory/reports

Purpose

Centralized inventory reporting hub providing access to all 33 inventory reports defined in the master report suite. Supports filtering by location, category, brand, vendor, date range, and custom grouping keys. All reports exportable to CSV and PDF with role-based access control.

Key Elements

ElementTypeDescriptionBusiness Rule
Report catalogPanel33 reports organized by category: Stock Levels, Purchase Orders, Receiving, Counting, Adjustments, Transfers, RMA, Costing, Serial/Lot, AlertsBRD 4.17.2
Report builderPanelSelect report → configure filters (location, category, brand, date range) → generateBRD 4.17.2
Common filtersInputLocation (All/specific), Category, Brand, Vendor, Date Range, StatusBRD 4.17.2
Grouping keysInputPer-report grouping options (e.g., by Location, by Category, by Vendor)BRD 4.17.2
Report outputTableTabular results with sortable columns and inline drill-downBRD 4.17.2
Export optionsButtonCSV, PDF. Schedule recurring reports (email delivery)BRD 4.17.2
Access control indicatorBadgeShows which reports are available to current user roleBRD 4.17.3

Actions & Transitions

ActionNavigates ToRequires Role
Click report in catalogReport builder with report-specific filter optionsMANAGER+ (scoped)
Click “Export CSV”Downloads report data as CSVMANAGER+
Click “Export PDF”Downloads formatted PDF reportMANAGER+
Click “Schedule Report”Report scheduling modal (frequency, recipients)MANAGER+
Click product/SKU in resultsSCR-M04-02 Inventory List (filtered) or SCR-M03-02 Product DetailMANAGER+

G.7.23 Reservation Management

AttributeValue
Screen IDSCR-M04-23
Product(s)MANAGER+
BRD Section(s)4.13
Database Tablesinventory_levels (RW), products (R), variants (R), locations (R)
State Machine(s)Reservation Lifecycle (ACTIVE → COMMITTED / RELEASED / EXPIRED)
Appendix F Servicesinventory.reservation.command.service
User RolesMANAGER, OWNER
Offline CapableNo
Route/inventory/reservations

Purpose

Manages and monitors all active inventory reservations across five types: Sale Cart, Parked Transaction, Transfer, Online Order, and Hold-for-Pickup. Provides visibility into reserved quantities, allows manual release of stuck reservations, and monitors hold-for-pickup expirations with countdown timers.

Key Elements

ElementTypeDescriptionBusiness Rule
Reservation type tabsPanelAll, Sale Cart, Parked Transaction, Transfer, Online Order, Hold-for-Pickup. Count badges per tabBRD 4.2.2
Active reservations tableTableProduct, Variant, Location, Qty Reserved, Type, Status, Source Document, Reserved By, Reserved At, Expires AtBRD 4.2.2
Hold-for-pickup countdownPanelOrders with pickup holds showing countdown timers. Reminder sent at 2 days before expiryBRD 4.13.4
Expired reservationsTableRecently expired reservations: auto-released with reason. Stock returned to AVAILABLEBRD 4.2.2
Manual releaseButtonRelease stuck reservation (e.g., abandoned cart, system error). Requires reasonBRD 4.2.2
Reservation impact summaryPanelTotal reserved qty across all types, breakdown by location, impact on available stockBRD 4.1.5
Parked sale warningsPanelProducts with parked sale reservations showing terminal and sale referenceBRD 4.13.3

Actions & Transitions

ActionNavigates ToRequires Role
Click “Release” on reservationStays on page; reservation released, stock returns to AVAILABLE. Requires reasonMANAGER+
Click source document linkNavigates to source: sale detail, parked sale, transfer, or orderMANAGER+
Click “Extend Hold” on pickupStays on page; extends hold expiry (max 30 days total)MANAGER+
Click “View Expired”Switches to expired reservations tableMANAGER+

G.8 Module 5: Setup & Configuration Screens (22 Screens)

BRD Sections: 5.1-5.21 | Appendix F: §F.8 (21 services) | Pattern: Standard CRUD

Cross-Reference: See Ch 05, Sections 5.1-5.21 for business rules. See Ch 08, Domains 8-16 for table schemas. See Appendix F, §F.8 for service breakdown.


G.8.1 Onboarding Wizard (13 Steps)

AttributeValue
Screen IDSCR-M05-01
Product(s)OWNER
BRD Section(s)5.20
Database Tablestenants (R/W), locations (R/W), users (R/W), registers (R/W), tax_jurisdictions (R/W), tax_rates (R/W), tenant_settings (R/W), roles (R/W), role_permissions (R/W), devices (R/W), payment_terminals (R/W)
State Machine(s)5.20.4 Onboarding State Tracking
Appendix F Servicessetup.onboarding.wizard.service, setup.settings.crud.service, setup.location.crud.service, setup.user.crud.service, setup.register.crud.service, setup.tax.crud.service
User RolesOWNER
Offline CapableNo
Route/admin/onboarding

Purpose

The Onboarding Wizard is a 13-step guided setup workflow that provisions a new tenant from initial registration through operational go-live readiness. It ensures every required configuration area is addressed before the tenant begins processing transactions. Steps 1-5 and 7 and 9 are mandatory for go-live; remaining steps are recommended but deferrable.

Key Elements

ElementTypeDescriptionBusiness Rule
Step indicator barPanelHorizontal progress bar showing all 13 steps with completion status (green = complete, grey = pending, yellow = skipped)BRD 5.20.1
Current step contentPanelDynamic content area rendering the form fields for the active stepBRD 5.20.2
Step navigation buttonsButton“Back” and “Next” buttons to move between steps; “Skip” for optional stepsBRD 5.20.2
Go-Live Checklist panelPanelStep 13: automated validation of 9 mandatory checks and 7 advisory checks with pass/fail indicatorsBRD 5.20.3
Mandatory check indicatorsBadgeRed/green badges for each of the 9 mandatory checks (locations, registers, users, tax, payment, email, currency, timezone)BRD 5.20.3
Advisory warning listPanelYellow warnings for recommended but non-blocking checks (Shopify, label printers, receipt customisation)BRD 5.20.3
“Go Live” buttonButtonEnabled only when all 9 mandatory checks pass; activates tenant for live operationsBRD 5.20.3
Progress persistenceBadgeDisplays “Step X of 13” with auto-save; wizard state restored on returnBRD 5.20.4

Wireframe

┌─────────────────────────────────────────────────────────────────────────────┐
│ NEXUS ADMIN — Onboarding Wizard                          [Will] [?] [X]   │
├─────────────────────────────────────────────────────────────────────────────┤
│                                                                             │
│  ● ● ● ● ● ○ ○ ○ ○ ○ ○ ○ ○     Step 5 of 13: Users & Roles               │
│  1 2 3 4 5 6 7 8 9 10 11 12 13                                             │
│                                                                             │
├─────────────────────────────────────────────────────────────────────────────┤
│                                                                             │
│  CREATE USERS                                                               │
│  ┌─────────────────────────────────────────────────────────────────┐        │
│  │ Display Name    [________________________]                      │        │
│  │ Email           [________________________]                      │        │
│  │ PIN (4-6 digit) [______]                                        │        │
│  │ Role            [OWNER        ▼]                                │        │
│  │ Location        [Garden Mall  ▼]  ☑ Primary                    │        │
│  │                                          [+ Add User]           │        │
│  └─────────────────────────────────────────────────────────────────┘        │
│                                                                             │
│  CREATED USERS                                                              │
│  ┌──────────────────┬──────────┬─────────┬──────────────┐                  │
│  │ Name             │ Role     │ PIN     │ Location     │                  │
│  ├──────────────────┼──────────┼─────────┼──────────────┤                  │
│  │ Will Johnson     │ OWNER    │ ****    │ Garden Mall  │                  │
│  │ Sarah Adams      │ MANAGER  │ ****    │ Heritage Mall│                  │
│  └──────────────────┴──────────┴─────────┴──────────────┘                  │
│                                                                             │
│                                          [◄ Back]  [Skip]  [Next ►]        │
└─────────────────────────────────────────────────────────────────────────────┘

Actions & Transitions

ActionNavigates ToRequires Role
Complete Step 13 + Go LiveSCR-M05-02 System SettingsOWNER
Skip optional stepNext wizard stepOWNER
Click “Back”Previous wizard stepOWNER
Abandon wizard (close)Nexus POS Dashboard (wizard progress saved)OWNER

G.8.2 System Settings / Branding

AttributeValue
Screen IDSCR-M05-02
Product(s)OWNER
BRD Section(s)5.2
Database Tablestenant_settings (R/W), tenants (R)
State Machine(s)None
Appendix F Servicessetup.settings.crud.service
User RolesADMIN, OWNER
Offline CapableNo
Route/admin/settings/general

Purpose

The System Settings screen provides tenant-level identity, operational defaults, and visual branding configuration. Administrators configure the company name, logo, timezone, date format, session policies, and customer-facing visual identity. Settings are organised into three tabs: Core, Operational, and Branding.

Key Elements

ElementTypeDescriptionBusiness Rule
Tenant name inputInputTrading name displayed in headers and reports (max 100 chars)BRD 5.2.1
Legal entity name inputInputRegistered business name for invoices (max 200 chars)BRD 5.2.1
Company logo uploadInputPNG/SVG upload with preview (max 2MB, min 200x200px)BRD 5.2.1
Default timezone selectorInputIANA timezone dropdown; applies to all locations unless overriddenBRD 5.2.1
Base currency displayBadgeRead-only after first transaction; shows ISO 4217 code (e.g., USD)BRD 5.2.1 — immutable after first transaction
Auto-logout timeoutInputMinutes of inactivity before POS session logout (5-120 range)BRD 5.2.2
Failed login lockoutInputMax consecutive failed attempts before lockout (default: 5)BRD 5.2.2
Primary/Accent colour pickersInputHex colour selectors for brand_primary_color and brand_accent_colorBRD 5.2.4
Login background image uploadInputJPG/PNG (max 5MB, 1920x1080 recommended)BRD 5.2.4
Business hours tableTablePer-location, per-day-of-week open/close times with is_closed toggleBRD 5.2.3
Holiday calendarTableDate, name, applies_to, modified hours, recurring flagBRD 5.2.3

Actions & Transitions

ActionNavigates ToRequires Role
Save SettingsSame screen (confirmation toast)ADMIN+
Upload logoSame screen (preview updates)ADMIN+
Manage Business HoursInline editor expandsADMIN+
Manage Holiday CalendarModal dialogADMIN+

G.8.3 Location Management

AttributeValue
Screen IDSCR-M05-03
Product(s)OWNER
BRD Section(s)5.4
Database Tableslocations (R/W), tax_jurisdictions (R), tenant_settings (R)
State Machine(s)None
Appendix F Servicessetup.location.crud.service
User RolesADMIN, OWNER
Offline CapableNo
Route/admin/settings/locations

Purpose

The Location Management screen defines the physical topology of the tenant’s retail operation. Administrators create, edit, and deactivate store locations and warehouse facilities. Every inventory balance, register, user assignment, and transaction is scoped to a location, making this a foundational configuration screen.

Key Elements

ElementTypeDescriptionBusiness Rule
Location list tableTableSortable table of all locations with code, name, type, city, statusBRD 5.4
Add Location buttonButtonOpens modal to create new STORE or WAREHOUSE locationBRD 5.4.1
Location type selectorInputDropdown: STORE or WAREHOUSE; warehouses cannot have registersBRD 5.4.1
Address fieldsInputStreet, city, state, ZIP, country (ISO 3166-1 alpha-2)BRD 5.4.2
Tax jurisdiction assignmentInputDropdown linking location to a tax_jurisdiction recordBRD 5.4.2 — tax_jurisdiction_id required
Timezone overrideInputIANA timezone; overrides tenant default for this locationBRD 5.4.2
Franchise flagInputCheckbox for is_franchise (different reporting/fee rules)BRD 5.4.2
Sort orderInputInteger for display ordering in dropdowns and reportsBRD 5.4.2
Deactivate toggleButtonSets is_active=false; prevents new transactions at locationBRD 5.4.2

Actions & Transitions

ActionNavigates ToRequires Role
Add LocationModal form (stays on screen)ADMIN+
Edit LocationInline edit / modalADMIN+
View Location RegistersSCR-M05-08 Register Management (filtered)ADMIN+
Deactivate LocationConfirmation dialogOWNER

G.8.4 User Management

AttributeValue
Screen IDSCR-M05-04
Product(s)MANAGER+
BRD Section(s)5.5
Database Tablestenant_users (R/W), users (R/W), roles (R), locations (R)
State Machine(s)None
Appendix F Servicessetup.user.crud.service
User RolesADMIN, OWNER
Offline CapableNo
Route/admin/settings/users

Purpose

The User Management screen provides creation, editing, and deactivation of user accounts across the tenant. Each user represents a staff member who interacts with the POS system. Administrators assign roles, set PINs, configure location assignments, and manage commission rates from this screen.

Key Elements

ElementTypeDescriptionBusiness Rule
User list tableTableAll users with display name, email, role, primary location, status, last loginBRD 5.5.1
Add User buttonButtonOpens form to create new user with email, PIN, role, and locationBRD 5.5.1
Email inputInputUnique per tenant; used for standard loginBRD 5.5.1
PIN inputInput4-6 digit numeric PIN for POS login; unique per tenant; stored as bcrypt hashBRD 5.5.1
Role selectorInputDropdown: OWNER, ADMIN, MANAGER, STAFF, BUYERBRD 5.5.3
Location assignment panelPanelMulti-select locations with primary location toggleBRD 5.5.2
Commission rate inputInputDecimal percentage (e.g., 5.00 for 5%); null = no commissionBRD 5.5.1
Deactivate/Reactivate toggleButtonSets is_active; deactivation invalidates all active sessionsBRD 5.5.1
Failed login count badgeBadgeShows current failed_login_count and locked_until statusBRD 5.5.1
Reset lockout buttonButtonClears failed_login_count and locked_until for locked usersBRD 5.5.5

Actions & Transitions

ActionNavigates ToRequires Role
Add UserModal form (stays on screen)ADMIN+
Edit UserInline edit / detail panelADMIN+
View User ActivitySCR-M05-21 Audit Log Viewer (filtered by user)ADMIN+
Manage RolesSCR-M05-05 Role & Permission ConfigADMIN+

G.8.5 Role & Permission Config

AttributeValue
Screen IDSCR-M05-05
Product(s)OWNER
BRD Section(s)5.5
Database Tablesroles (R/W), role_permissions (R/W), tenant_users (R)
State Machine(s)None
Appendix F Servicessetup.role.crud.service
User RolesADMIN, OWNER
Offline CapableNo
Route/admin/settings/roles

Purpose

The Role & Permission Config screen provides granular control over which capabilities each role has access to. Administrators view and edit the feature toggle matrix for all five predefined roles (OWNER, ADMIN, MANAGER, STAFF, BUYER) and can create custom roles by duplicating and modifying an existing role’s permissions.

Key Elements

ElementTypeDescriptionBusiness Rule
Role list sidebarPanelList of all roles with user count badge per roleBRD 5.5.3
Feature toggle matrixTableGrid of feature_code rows x role columns with toggle switchesBRD 5.5.4
Permission descriptionPanelShows description of selected feature code on hover/clickBRD 5.5.4
OWNER lock indicatorBadgeShows locked toggles for OWNER role (manage_settings, manage_users always true)BRD 5.5.4 — OWNER cannot lose manage_settings/manage_users
Duplicate role buttonButtonCreates custom role from existing role’s toggles (is_system=false)BRD 5.5.4
User count per roleBadgeNumber of active users assigned to each roleBRD 5.5.3

Actions & Transitions

ActionNavigates ToRequires Role
Toggle feature permissionSame screen (real-time save)ADMIN+
Create custom roleSame screen (new role appears in sidebar)ADMIN+
Delete custom roleConfirmation dialog (only if no users assigned)OWNER
View users with roleSCR-M05-04 User Management (filtered by role)ADMIN+

G.8.6 Login / Authentication

AttributeValue
Screen IDSCR-M05-06
Product(s)All Roles
BRD Section(s)5.5
Database Tablesusers (R), tenant_users (R), roles (R), role_permissions (R), tenant_settings (R)
State Machine(s)7.12 Connectivity States
Appendix F Servicescrosscutting.auth.service
User RolesAll (unauthenticated)
Offline CapableYes (POS terminal only) — Cached credentials allow PIN login when API is unreachable; standard email/password login requires connectivity
Route/login

Purpose

The Login screen provides two authentication flows: email/password for standard access and PIN-based quick login for POS terminal cashiers. The POS PIN login supports offline operation using cached credential hashes stored in the local SQLite WASM database, enabling staff to continue working during network outages.

Key Elements

ElementTypeDescriptionBusiness Rule
Company logoPanelDisplays tenant’s company_logo_url with login_tagline belowBRD 5.2.4
Branded backgroundPanelCustom login_bg_image_url or system defaultBRD 5.2.4
Email inputInputEmail address for standard loginBRD 5.5.5
Password inputInputPassword validated against Argon2id hashBRD 5.5.1
PIN input (POS)Input4-6 digit numeric PIN pad with large touch targetsBRD 5.5.5
Lockout warningBadgeDisplays remaining lockout time when account is lockedBRD 5.2.2 — lockout_duration_minutes
Offline indicator (POS)BadgeShows “Offline Mode” banner when API is unreachableBRD 5.5.5 / ADR-048
Forgot password linkButtonTriggers TMPL-PASSWORD-RESET emailBRD 5.15.2

Actions & Transitions

ActionNavigates ToRequires Role
Successful standard loginDashboard (role-appropriate home)Any authenticated
Successful POS PIN loginPOS Terminal Home / SCR-M05-07 Clock-InAny authenticated
Failed login (max attempts)Same screen with lockout messageN/A
Forgot PasswordSame screen (email sent confirmation)N/A

G.8.7 Clock-In / Clock-Out

AttributeValue
Screen IDSCR-M05-07
Product(s)CASHIER+
BRD Section(s)5.6
Database Tablesclock_records (R/W), tenant_users (R), locations (R)
State Machine(s)None
Appendix F Servicessetup.timetracking.command.service
User RolesAll POS users
Offline CapableYes — Clock events queued locally and synced when connectivity restores
Route/pos/clock

Purpose

The Clock-In/Clock-Out screen records staff work time for basic payroll reporting. Staff clock in via PIN after POS login and clock out at the end of their work period. Managers can view current clock-in status for all staff at the location and manually edit missed clock-out entries with audit notes.

Key Elements

ElementTypeDescriptionBusiness Rule
Clock-In buttonButtonRecords clock_in timestamp for authenticated user at current locationBRD 5.6.1
Clock-Out buttonButtonRecords clock_out timestamp; required before end-of-day closeBRD 5.6.1
Current status indicatorBadgeShows “Clocked In since HH:MM” or “Not Clocked In”BRD 5.6.1
Duration timerPanelRunning timer showing elapsed time since clock-inBRD 5.6.1
Manager override panelPanelAllows MANAGER+ to manually set clock-out time with required notes fieldBRD 5.6.1
Staff clock status listTable(Manager view) All users at location with current clock-in/out statusBRD 5.6.1
16-hour alert indicatorBadgeWarning when clock-in exceeds 16 hours without clock-outBRD 5.6.1

Actions & Transitions

ActionNavigates ToRequires Role
Clock InPOS Terminal HomeAll POS users
Clock OutPOS Login screenAll POS users
Manager: Edit missed clock-outSame screen (inline edit with notes)MANAGER+
View clock historySame screen (expandable history panel)MANAGER+

G.8.8 Register Management

AttributeValue
Screen IDSCR-M05-08
Product(s)OWNER
BRD Section(s)5.7
Database Tablesregisters (R/W), register_ip_changes (R/W), devices (R/W), locations (R), register_profiles (R)
State Machine(s)5.7.2 Register State Machine (ACTIVE / MAINTENANCE / RETIRED)
Appendix F Servicessetup.register.crud.service, setup.device.crud.service
User RolesADMIN, OWNER
Offline CapableNo
Route/admin/settings/registers

Purpose

The Register Management screen maintains the register registry across all tenant locations. Administrators create registers, assign profiles (Full POS or Mobile), pair physical devices, manage IP addresses, and control register status through the ACTIVE/MAINTENANCE/RETIRED lifecycle. This screen enforces the IP change limit (max 2 per 365 days) and OWNER-only retirement with type-to-confirm safety.

Key Elements

ElementTypeDescriptionBusiness Rule
Register list tableTableRegisters grouped by location with number, name, profile, status, IP, last seenBRD 5.7.1
Location filterInputDropdown to filter registers by locationBRD 5.7.1
Add Register buttonButtonCreate register with number, name, profile, and locationBRD 5.7.1
Status badgeBadgeColour-coded: green=ACTIVE, yellow=MAINTENANCE, red=RETIREDBRD 5.7.2
IP address fieldInputIPv4/IPv6 address; shows remaining IP changes count for the yearBRD 5.7.1 — ERR-5071: max 2 changes per 365 days
Take Offline buttonButtonTransitions ACTIVE to MAINTENANCEBRD 5.7.2
Bring Online buttonButtonTransitions MAINTENANCE to ACTIVEBRD 5.7.2
Retire Register buttonButtonOWNER-only; type-to-confirm “RETIRE” dialogBRD 5.7.2 — ERR-5072
Device pairing panelPanelShows paired devices with hardware_id, type, is_primary, last_seen_atBRD 5.7.3
Peripheral assignmentsTableReceipt printer, label printer, scanner, payment terminal, cash drawer per registerBRD 5.7.5

Actions & Transitions

ActionNavigates ToRequires Role
Add RegisterModal form (stays on screen)ADMIN+
Change IP AddressConfirmation dialog showing remaining changesADMIN+
Retire RegisterType-to-confirm “RETIRE” modalOWNER only
Pair DeviceSCR-M05-08 device pairing sub-panelADMIN+
View Register ProfileSCR-M05-09 Register ProfilesADMIN+

G.8.9 Register Profiles

AttributeValue
Screen IDSCR-M05-09
Product(s)OWNER
BRD Section(s)5.7
Database Tablesregister_profiles (R), registers (R)
State Machine(s)None
Appendix F Servicessetup.register.crud.service
User RolesADMIN, OWNER
Offline CapableNo
Route/admin/settings/registers/profiles

Purpose

The Register Profiles screen displays the two system-defined register profiles (Full POS and Mobile Checkout) and their function availability matrix. This is a reference screen showing which POS functions are available on each terminal type. Custom profiles are not supported to prevent untested UI configurations.

Key Elements

ElementTypeDescriptionBusiness Rule
Profile comparison tableTableSide-by-side matrix of FULL_POS vs MOBILE with function availability (Y/N)BRD 5.7.4
Profile descriptionPanelDescription of each profile’s intended use caseBRD 5.7.4
Function listTableAll 15 POS functions (sale, return, exchange, layaway, etc.) with descriptionsBRD 5.7.4
Registers using profileBadgeCount of registers assigned to each profileBRD 5.7.4
Required peripherals indicatorPanelShows minimum required peripherals per profile (Full POS: printer+scanner+terminal+drawer; Mobile: scanner+terminal)BRD 5.7.5

Actions & Transitions

ActionNavigates ToRequires Role
View registers using profileSCR-M05-08 Register Management (filtered by profile)ADMIN+
Back to Register ManagementSCR-M05-08 Register ManagementADMIN+

G.8.10 Register Retirement

AttributeValue
Screen IDSCR-M05-10
Product(s)OWNER
BRD Section(s)5.7
Database Tablesregisters (R/W), devices (R/W)
State Machine(s)5.7.2 Register State Machine
Appendix F Servicessetup.register.crud.service
User RolesOWNER
Offline CapableNo
Route/admin/settings/registers/:id/retire (modal)

Purpose

The Register Retirement screen is a confirmation modal that enforces the OWNER-only, type-to-confirm safety protocol for permanently decommissioning a register. Retired registers cannot be reactivated, and all transaction history is preserved. This screen displays the full impact warning and requires exact-match text entry of “RETIRE”.

Key Elements

ElementTypeDescriptionBusiness Rule
Register details summaryPanelShows register number, name, location, profile, and transaction countBRD 5.7.2
Warning messagePanelFull text: “This action permanently retires this register. Retired registers cannot be reactivated…”BRD 5.7.2
Confirmation text inputInputText field requiring exact entry of “RETIRE” (case-sensitive)BRD 5.7.2 — ERR-5072
Confirm Retire buttonButtonDisabled until confirmation text matches exactlyBRD 5.7.2
Cancel buttonButtonReturns to Register Management without changesBRD 5.7.2

Actions & Transitions

ActionNavigates ToRequires Role
Confirm retirementSCR-M05-08 Register Management (register now shows RETIRED status)OWNER only
CancelSCR-M05-08 Register ManagementOWNER

G.8.11 Payment Terminal Config

AttributeValue
Screen IDSCR-M05-11
Product(s)OWNER
BRD Section(s)5.11, 6.8
Database Tablespayment_terminals (R/W), register_peripherals (R/W), locations (R), registers (R)
State Machine(s)6.8 Terminal State Machine (active / offline / maintenance / disabled)
Appendix F Servicessetup.payment-method.crud.service, integration.payment-processor.service
User RolesADMIN, OWNER
Offline CapableNo
Route/admin/settings/payments/terminals

Purpose

The Payment Terminal Config screen manages the registration and pairing of physical payment processing devices (card readers, NFC terminals) to registers and locations. Administrators configure processor credentials (via Integration Hub), register terminal hardware, and assign terminals to specific registers. The SAQ-A semi-integrated architecture ensures no card data touches the POS system.

Key Elements

ElementTypeDescriptionBusiness Rule
Terminal list tableTableAll payment terminals with terminal_id, name, location, processor, type, statusBRD 5.11.3 / 6.8.2
Add Terminal buttonButtonRegister new terminal with ID, name, location, processor, and typeBRD 6.8.2
Terminal type selectorInputintegrated, standalone, virtual, mobileBRD 6.8.2
Processor selectorInputDropdown of configured payment processors (Stripe, Square, Adyen)BRD 6.8.3
Capability badgesBadgeContactless, EMV chip, swipe support indicators per terminalCh 08 Domain 14
Register assignmentInputLink terminal to a specific register via register_peripheralsBRD 5.7.5
Health status indicatorBadgeLast transaction, last batch, current statusBRD 6.8.2

Actions & Transitions

ActionNavigates ToRequires Role
Add TerminalModal form (stays on screen)ADMIN+
Assign to RegisterSCR-M05-08 Register ManagementADMIN+
Test ConnectionSame screen (connection test result)ADMIN+
View Payment BatchesInline expandable panelADMIN+

G.8.12 Payment Methods Setup

AttributeValue
Screen IDSCR-M05-12
Product(s)OWNER
BRD Section(s)5.11
Database Tablespayment_methods (R/W), location_payment_methods (R/W), locations (R), tenant_settings (R/W)
State Machine(s)None
Appendix F Servicessetup.payment-method.crud.service
User RolesADMIN, OWNER
Offline CapableNo
Route/admin/settings/payments/methods

Purpose

The Payment Methods Setup screen configures which payment methods are accepted across the tenant and per location. Administrators enable/disable CASH, CREDIT_CARD, GIFT_CARD, STORE_CREDIT, LAYAWAY_PAYMENT, and FINANCING methods. Cash rounding rules (nearest cent, nickel, or dime) are also configured here.

Key Elements

ElementTypeDescriptionBusiness Rule
Payment method listTableAll 6 payment types with tenant-level enabled toggle, requires processor flag, split capability, offline supportBRD 5.11.1
Per-location matrixTableGrid of locations x payment methods with per-location enable/disable togglesBRD 5.11.2
CASH lock indicatorBadgeCASH is always enabled and cannot be disabled at any locationBRD 5.11.2
Cash rounding rule selectorInputDropdown: NEAREST_CENT, NEAREST_NICKEL, NEAREST_DIMEBRD 5.11.4
Method display nameInputCustomisable name per method (e.g., “Visa/MC/Amex” instead of “Credit/Debit Card”)BRD 5.11.1
Offline capability indicatorBadgeShows which methods work offline (CASH only)BRD 5.11.1

Actions & Transitions

ActionNavigates ToRequires Role
Toggle method tenant-wideSame screen (cascades to all locations)ADMIN+
Toggle method per locationSame screenADMIN+
Configure payment terminalsSCR-M05-11 Payment Terminal ConfigADMIN+
Save rounding rulesSame screen (confirmation toast)ADMIN+

G.8.13 Tax Jurisdiction Config

AttributeValue
Screen IDSCR-M05-13
Product(s)OWNER
BRD Section(s)5.9
Database Tablestax_jurisdictions (R/W), tax_rates (R/W), location_tax_jurisdictions (R/W), locations (R)
State Machine(s)None
Appendix F Servicessetup.tax.crud.service
User RolesADMIN, OWNER
Offline CapableNo
Route/admin/settings/tax

Purpose

The Tax Jurisdiction Config screen manages the 3-level compound tax system (State/County/City). Administrators create tax jurisdictions, define rate levels with effective dates, and assign jurisdictions to store locations. Future tax rate changes can be scheduled by setting an effective date in the future. The screen also displays the calculated compound rate for each location.

Key Elements

ElementTypeDescriptionBusiness Rule
Jurisdiction list tableTableAll jurisdictions with code, name, state_name, active rates summary, location countBRD 5.9.1
Add Jurisdiction buttonButtonCreate jurisdiction with code (e.g., “VA-NFK”) and nameBRD 5.9.1
Rate levels panelPanelUp to 3 rate rows per jurisdiction: STATE, COUNTY, CITY with rate_percent and effective_dateBRD 5.9.1
Compound rate calculatorBadgeShows summed effective rate (e.g., “State 4.3% + County 0.7% + City 1.0% = 6.0%”)BRD 5.9.1
Future rate indicatorBadgeScheduled rates highlighted with effective_date and countdownBRD 5.9.1
Location-jurisdiction assignmentTableWhich jurisdiction is assigned to each store locationBRD 5.4.2
Rate historyTableExpandable historical rates per jurisdiction level for auditBRD 5.9.1
Tax reporting period selectorInputMONTHLY or QUARTERLY dropdownBRD 5.9.4

Actions & Transitions

ActionNavigates ToRequires Role
Add JurisdictionModal form (stays on screen)ADMIN+
Add/Edit rate levelInline edit within jurisdiction panelADMIN+
Schedule future rateSame screen (rate appears with future badge)ADMIN+
Assign to locationSame screen (location-jurisdiction matrix)ADMIN+

G.8.14 Tax Exemption Management

AttributeValue
Screen IDSCR-M05-14
Product(s)MANAGER+
BRD Section(s)5.9
Database Tablescustomers (R/W), products (R), tax_jurisdictions (R)
State Machine(s)None
Appendix F Servicessetup.tax.crud.service
User RolesADMIN, OWNER
Offline CapableNo
Route/admin/settings/tax/exemptions

Purpose

The Tax Exemption Management screen provides a consolidated view of all tax-exempt customers and tax-exempt products across the tenant. Administrators can review exemption certificates, check expiry dates, and manage product-level tax exemption flags. Expired certificates are highlighted for follow-up action before the next sale.

Key Elements

ElementTypeDescriptionBusiness Rule
Exempt customers tableTableCustomers with tax_exempt=true, certificate number, expiry date, statusBRD 5.9.3
Expired certificate warningBadgeRed highlight for certificates past expiry_dateBRD 5.9.3 — “Tax exemption certificate expired” warning at POS
Certificate number inputInputState or federal exemption certificate number (max 50 chars)BRD 5.9.3
Expiry date inputInputCertificate expiration date; system validates at time of saleBRD 5.9.3
Exempt products listTableProducts with tax_exempt=true flag, grouped by categoryBRD 5.9.3
Tax calculation priority diagramPanelVisual display of priority: Product exempt > Customer exempt > Jurisdiction rateBRD 5.9.2

Actions & Transitions

ActionNavigates ToRequires Role
Edit customer exemptionCustomer detail modalADMIN+
Toggle product tax exemptionSame screen (inline toggle)ADMIN+
Export exempt customer listCSV/PDF downloadADMIN+
View tax calculation prioritySame screen (expandable diagram)ADMIN+

G.8.15 UOM Setup

AttributeValue
Screen IDSCR-M05-15
Product(s)OWNER
BRD Section(s)5.10
Database Tablesuom (R/W), uom_conversions (R/W), tenant_settings (R)
State Machine(s)None
Appendix F Servicessetup.uom.crud.service
User RolesADMIN, OWNER
Offline CapableNo
Route/admin/settings/uom

Purpose

The UOM Setup screen manages predefined and tenant-customizable units of measure used for selling, purchasing, and inventory tracking. Administrators review the 12 system-predefined UoMs, create custom UoMs with conversion factors, and manage the conversion table between related units. This enables scenarios where products are purchased in bulk (cases, dozens) and sold individually (each, pair).

Key Elements

ElementTypeDescriptionBusiness Rule
System UoM listTable12 predefined UoMs (EACH, PAIR, PACK, BOX, DOZEN, CASE, YARD, METER, FOOT, KG, LB, OZ) — read-onlyBRD 5.10.1
Custom UoM listTableTenant-created UoMs with code, name, category, conversion factor, base UoMBRD 5.10.2
Add Custom UoM buttonButtonCreate UoM with code, name, category (QUANTITY/LENGTH/WEIGHT), and conversion factor to baseBRD 5.10.2
Conversion tableTableFrom-UoM to To-UoM with factor; auto-generates inverse conversionBRD 5.10.3
Category filterInputFilter UoMs by QUANTITY, LENGTH, or WEIGHTBRD 5.10.1
Deactivate UoMButtonSoft-delete custom UoMs (system UoMs cannot be deactivated)BRD 5.10.2

Actions & Transitions

ActionNavigates ToRequires Role
Add Custom UoMModal form (stays on screen)ADMIN+
Edit Custom UoMInline editADMIN+
View products using UoMProduct list filtered by selling_uom or purchasing_uomADMIN+

G.8.16 Approval Workflows

AttributeValue
Screen IDSCR-M05-16
Product(s)OWNER
BRD Section(s)5.13
Database Tablesapproval_rules (R/W), approval_requests (R/W), tenant_users (R), roles (R)
State Machine(s)5.13.3 Approval Request Lifecycle (PENDING / APPROVED / REJECTED / ESCALATED / AUTO_REJECTED)
Appendix F Servicessetup.approval-workflow.crud.service
User RolesADMIN, OWNER
Offline CapableNo
Route/admin/settings/approvals

Purpose

The Approval Workflows screen configures approval rules that gate sensitive business actions behind manager or administrator review. Each of the 9 approvable actions (PO creation, inventory adjustments, refunds, voids, transfers, price markdowns, discount overrides, vendor RMAs) has its own rule with threshold, approver role, notification method, and escalation timeout.

Key Elements

ElementTypeDescriptionBusiness Rule
Approval rules tableTable9 approvable actions with enabled toggle, threshold value, threshold type, approver roleBRD 5.13.1
Threshold value inputInputDollar amount, unit count, or percentage depending on actionBRD 5.13.2
Threshold type selectorInputAMOUNT, UNITS, PERCENT, ALWAYSBRD 5.13.2
Approver role selectorInputMANAGER, ADMIN, or OWNER minimum role to approveBRD 5.13.2
Notification methodInputIN_APP, EMAIL, or BOTHBRD 5.13.5
Escalation timeoutInputHours before escalation to next-higher role (default 24)BRD 5.13.4
Auto-reject toggleInputWhether timed-out requests are auto-rejectedBRD 5.13.2
Pending approvals queueTableCurrent PENDING and ESCALATED requests with action, requester, value, timestampBRD 5.13.3

Actions & Transitions

ActionNavigates ToRequires Role
Edit approval ruleInline edit (stays on screen)ADMIN+
Approve/Reject requestSame screen (request status updated)MANAGER+ (per rule)
View escalation chainInline expansion: MANAGER -> ADMIN -> OWNERADMIN+

G.8.17 Printer Configuration

AttributeValue
Screen IDSCR-M05-17
Product(s)OWNER
BRD Section(s)5.8
Database Tablesprinters (R/W), register_printers (R/W), registers (R), locations (R)
State Machine(s)None
Appendix F Servicessetup.printer.crud.service
User RolesADMIN, OWNER
Offline CapableNo
Route/admin/settings/printers

Purpose

The Printer Configuration screen manages the central registry of all receipt and label printers across all tenant locations. Administrators register printers, configure connection settings, link printers to registers in specific roles (primary receipt, label, secondary receipt), and monitor printer health status via automated network pings.

Key Elements

ElementTypeDescriptionBusiness Rule
Printer list tableTableAll printers with name, type (RECEIPT/LABEL), location, connection, model, health statusBRD 5.8.1
Add Printer buttonButtonManual registration with name, type, connection_type, address, paper_widthBRD 5.8.1
Discover Printers buttonButtonNetwork subnet scan on ports 9100 (RAW) and 631 (IPP); returns candidatesBRD 5.8.5
Health status badgeBadgeONLINE (green), OFFLINE (red), ERROR (orange), UNKNOWN (grey)BRD 5.8.6
Connection type selectorInputUSB, NETWORK_IP, BLUETOOTHBRD 5.8.1
Paper width selectorInputReceipt: 58MM/80MM; Label: 25x50MM, 50x25MM, 50x75MM, CUSTOMBRD 5.8.1
Register-printer linksTableWhich registers use this printer and in what role (PRIMARY_RECEIPT, LABEL, SECONDARY_RECEIPT)BRD 5.8.4
Shared printer toggleInputWhether multiple registers can use this printer (network printers only)BRD 5.8.1

Actions & Transitions

ActionNavigates ToRequires Role
Add Printer (manual)Modal form (stays on screen)ADMIN+
Discover Printers (network scan)Discovery results panel on same screenADMIN+
Link to RegisterSame screen (register-printer assignment panel)ADMIN+
Test PrintSame screen (sends test page to selected printer)ADMIN+

G.8.18 Receipt Builder

AttributeValue
Screen IDSCR-M05-18
Product(s)OWNER
BRD Section(s)5.14
Database Tablesreceipt_config (R/W), email_receipt_templates (R/W), tenant_settings (R), locations (R)
State Machine(s)None
Appendix F Servicessetup.receipt.crud.service
User RolesADMIN, OWNER
Offline CapableNo
Route/admin/settings/receipts

Purpose

The Receipt Builder provides full customisation of receipt layout, content, and formatting for both printed thermal receipts and email receipts. Administrators toggle field visibility, reorder sections via drag-and-drop, configure header/footer text and logos, select paper width and font size, and preview changes in real-time with a simulated thermal receipt rendering.

Key Elements

ElementTypeDescriptionBusiness Rule
Field toggle listPanelAll 17 receipt fields with show/hide toggles and drag-and-drop reorderBRD 5.14.1
Live receipt previewPanelReal-time simulated receipt with sample data, monospace font, configured paper widthBRD 5.14.7
Header configurationInputThree header lines (max 100 chars each) + logo upload (PNG/BMP, max 300px wide)BRD 5.14.3
Footer configurationInputThree footer lines (max 200 chars each); blank lines omittedBRD 5.14.4
Paper width selectorInput58MM (~32 chars/line) or 80MM (~48 chars/line)BRD 5.14.2
Font size selectorInputSMALL, MEDIUM, LARGEBRD 5.14.2
Line separator styleInputDASH, EQUALS, BLANK, STARBRD 5.14.2
Location override toggleInputPer-location receipt config vs tenant-wide defaultBRD 5.14.5
Email receipt tabPanelHTML template editor with merge fields, subject line, and “Send Test Email” buttonBRD 5.14.6

Actions & Transitions

ActionNavigates ToRequires Role
Save receipt configSame screen (confirmation toast, preview updates)ADMIN+
Send Test EmailSame screen (sends sample email receipt to admin’s email)ADMIN+
Create location overrideSame screen (new location-specific config tab)ADMIN+
Reset to defaultsConfirmation dialog, then same screenADMIN+

G.8.19 Email Config & Templates

AttributeValue
Screen IDSCR-M05-19
Product(s)OWNER
BRD Section(s)5.15, 6.9
Database Tablesemail_templates (R/W), integration_providers (R/W), integration_credentials (R/W), tenant_settings (R)
State Machine(s)7.14 Integration Connection States
Appendix F Servicessetup.email-template.crud.service, integration.email.service
User RolesADMIN, OWNER
Offline CapableNo
Route/admin/settings/email

Purpose

The Email Config & Templates screen manages the email provider connection (SMTP, SendGrid, or Mailgun) and the complete template registry for all automated communications. Administrators configure provider credentials, send test emails, and enable/disable individual templates from a catalog of 13 pre-seeded templates covering sales receipts, refund confirmations, order notifications, inventory alerts, and system emails.

Key Elements

ElementTypeDescriptionBusiness Rule
Provider config panelPanelProvider type (SMTP/SENDGRID/MAILGUN), host, port, credentials, from addressBRD 6.9.1
Connection test buttonButtonSends test email to verify provider credentialsBRD 6.9.1
Template catalog tableTable13 templates with code, name, trigger event, recipient type, enabled toggleBRD 5.15.2
Template editorPanelSubject and body HTML editor with merge field insertion toolbarBRD 5.15.3
Merge fields referencePanelExpandable list of all available merge fields by category (common, transaction, inventory)BRD 5.15.4
Send preview buttonButtonSends preview email with sample data to admin’s emailBRD 5.15.3
Delivery monitoringPanelBounce rate, consecutive failures per address, suppression listBRD 6.9.2

Actions & Transitions

ActionNavigates ToRequires Role
Save provider configSame screen (connection test recommended)ADMIN+
Test connectionSame screen (success/failure indicator)ADMIN+
Edit templateInline editor on same screenADMIN+
Toggle template enabledSame screen (immediate effect)ADMIN+

G.8.20 RFID Configuration

AttributeValue
Screen IDSCR-M05-20
Product(s)OWNER
BRD Section(s)5.16
Database Tablesrfid_config (R/W), rfid_readers (R/W), rfid_printers (R/W), rfid_tags (R), rfid_scan_sessions (R), locations (R)
State Machine(s)None
Appendix F Servicessetup.integrations-hub.config.service
User RolesADMIN, OWNER
Offline CapableNo
Route/admin/settings/rfid

Purpose

The RFID Configuration screen manages all RFID hardware, EPC encoding parameters, tag printing settings, and scan session configuration for the dedicated inventory counting subsystem. Administrators register readers via claim codes, configure SGTIN-96 encoding parameters, manage RFID-enabled label printers, and set variance thresholds for count sessions. RFID is counting-only and does not participate in sales, receiving, or transfers.

Key Elements

ElementTypeDescriptionBusiness Rule
EPC encoding panelPanelCompany prefix, partition, filter, indicator, format regex; set during onboardingBRD 5.16.2
Reader list tableTableRegistered readers with name, model, serial, location, status, last_seen_atBRD 5.16.1
Generate claim code buttonButtonCreates 6-character alphanumeric code valid for 24 hours (one-time use)BRD 5.16.1
Reader status badgesBadgeactive (green), offline (yellow/alert after 15min), maintenance, retiredBRD 5.16.1
RFID printer listTableRegistered RFID printers with model, location, DPI, label size, rfid_positionBRD 5.16.3
Variance threshold configPanelAuto-approve (0%), review (1-2%), manager review (3-5%), mandatory recount (>5%)BRD 5.16.4
Session parametersPanelTimeout (480min), auto-save interval (30s), chunk upload size (5000), RSSI threshold (-70dBm)BRD 5.16.4
Tag stats summaryBadgeTotal active tags, tags per location, void/lost countsBRD 5.16.5

Actions & Transitions

ActionNavigates ToRequires Role
Generate claim codeSame screen (displays code with 24h expiry countdown)ADMIN+
Register printerModal form (stays on screen)ADMIN+
Edit EPC configSame screen (inline edit, requires confirmation for changes)OWNER
View scan sessionsSeparate RFID session history pageADMIN+

G.8.21 Audit Log Viewer

AttributeValue
Screen IDSCR-M05-21
Product(s)OWNER
BRD Section(s)5.18
Database Tablesaudit_log (R), audit_config (R/W), tenant_users (R), locations (R)
State Machine(s)None
Appendix F Servicessetup.audit.config.service, crosscutting.audit-log.service
User RolesADMIN, OWNER
Offline CapableNo
Route/admin/settings/audit

Purpose

The Audit Log Viewer provides a searchable, filterable view of the tamper-evident audit trail for every significant action in the system. Administrators can filter by category (LOGIN, SALE, VOID, etc.), date range, user, location, and entity type. The screen also manages audit configuration including category toggles, retention policies, and export settings.

Key Elements

ElementTypeDescriptionBusiness Rule
Audit log tableTablePaginated list with category, action, actor, role, location, entity, timestamp, detailsBRD 5.18.4
Category filterInputMulti-select from 12 audit categories (LOGIN, SALE, RETURN, VOID, etc.)BRD 5.18.1
Date range pickerInputStart/end date with max range of 365 days per queryBRD 5.18.3
User filterInputDropdown of all tenant users to filter by actorBRD 5.18.4
Location filterInputDropdown to filter by locationBRD 5.18.4
Details expansionPanelClick-through to JSON details showing before/after values for changesBRD 5.18.4
Export buttonButtonExport filtered results as CSV, JSON, or PDF (max 10,000 rows per export)BRD 5.18.3
Retention config panelPanelRetention days (min 90), archive toggle, archive format, purge after daysBRD 5.18.2
Category toggle panelPanelEnable/disable audit logging per categoryBRD 5.18.1

Actions & Transitions

ActionNavigates ToRequires Role
Filter audit logSame screen (results update)ADMIN+
Export resultsCSV/JSON/PDF downloadADMIN+
View entry detailsSame screen (expanded detail panel)ADMIN+
Edit retention configSame screen (settings panel)OWNER

G.8.22 Business Rules (YAML Editor)

AttributeValue
Screen IDSCR-M05-22
Product(s)OWNER
BRD Section(s)5.19
Database Tablestenant_settings (R/W)
State Machine(s)None
Appendix F Servicessetup.rules.engine.service
User RolesADMIN, OWNER
Offline CapableNo
Route/admin/settings/business-rules

Purpose

The Business Rules screen provides a structured editor for all configurable business rules across the POS system. Rather than raw YAML editing, the screen presents rules as organised form fields grouped by module (Sales, Customers, Catalog, Inventory). Each field maps to a YAML key in the consolidated configuration with validation, defaults, and contextual help. Advanced users can switch to raw YAML view.

Key Elements

ElementTypeDescriptionBusiness Rule
Module tabsPanelTabs for Sales, Customers, Catalog, Inventory rule sectionsBRD 5.19
Return policy fieldsInputFull refund days (30), store credit days (90), restocking fee %, final sale categoriesBRD 5.19.1
Parked sales configInputMax per terminal (5), TTL hours (4), reservation type (soft/hard)BRD 5.19.1
Discount limitsInputMax line discount % (20), max global discount % (15), require reason code toggleBRD 5.19.1
Cash drawer settingsInputVariance tolerance ($5.00), blind count toggle, max opening float ($500)BRD 5.19.1
Offline mode configPanelRead-only display of allowed/blocked offline operationsBRD 5.19.1
Inventory rulesInputLow stock threshold, reorder point formula, count frequencyBRD 5.19.4
Raw YAML toggleButtonSwitch between form view and raw YAML editor for advanced usersBRD 5.19
Reset to defaults buttonButtonResets all rules to system defaults with confirmationBRD 5.19
Validation indicatorsBadgeGreen check or red X per field showing valid/invalid configurationBRD 5.19

Actions & Transitions

ActionNavigates ToRequires Role
Save rulesSame screen (confirmation toast, validation runs)ADMIN+
Reset to defaultsConfirmation dialog, then same screenOWNER
Switch to YAML viewSame screen (raw YAML editor)ADMIN+
View rule documentationContextual help panel expandsADMIN+

G.9 Module 6: Integration Screens (12 Screens)

BRD Sections: 6.1-6.13 | Appendix F: §F.9 (20 services) | Pattern: CRUD + Audit ES

Cross-Reference: See Ch 05, Sections 6.1-6.13 for business rules. See Ch 08, Domain 14 (Integration) for table schemas. See Appendix F, §F.9 for service breakdown.


G.9.1 Integration Hub Dashboard

AttributeValue
Screen IDSCR-M06-01
Product(s)OWNER
BRD Section(s)6.11
Database Tablesintegration_providers (R), integration_sync_log (R), integration_credentials (R)
State Machine(s)7.14 Integration Connection States, 7.13 Integration Sync States
Appendix F Servicesintegration.provider.registry.service, integration.circuit-breaker.service
User RolesADMIN, OWNER
Offline CapableNo
Route/admin/integrations

Purpose

The Integration Hub Dashboard is the central management console for all external system integrations. It provides a consolidated health view across all six integration types (Shopify, Amazon, Google Merchant, Payment Processor, Email Provider, Shipping Carrier) with real-time status indicators, sync latency metrics, rate limit usage, and error counts. Administrators can trigger manual syncs and drill into individual integration details.

Key Elements

ElementTypeDescriptionBusiness Rule
Integration cards gridPanelCard per configured integration showing status dot, provider name, last sync time, error countBRD 6.11.4
Health status indicatorBadgeGreen (CONNECTED), yellow (RATE_LIMITED), red (ERROR/DISCONNECTED) per integrationBRD 6.11.4
Last sync timestampBadgeTime since last successful sync with colour coding (<30min green, 30min-2hr yellow, >2hr red)BRD 6.11.4
Error count (24h)BadgeRolling error count with severity colours (0=green, 1-5=yellow, >5=red)BRD 6.11.4
Sync latency gaugePanelAverage sync latency in ms (<2000 green, 2000-5000 yellow, >5000 red)BRD 6.11.4
Rate limit barPanelVisual bar showing rate limit consumption % per integrationBRD 6.11.4
Sync Now buttonButtonManual sync trigger per integration (requires ADMIN role)BRD 6.11.4
Add Integration buttonButtonOpens provider type selection and connection wizardBRD 6.11.1
Credential expiry bannerPanelWarning banner when OAuth token expires within 30 daysBRD 6.11.2

Wireframe

┌─────────────────────────────────────────────────────────────────────────────┐
│ NEXUS ADMIN — Integration Hub                            [Will] [?] [X]   │
├─────────────────────────────────────────────────────────────────────────────┤
│                                                                             │
│  INTEGRATION STATUS                                    [+ Add Integration] │
│                                                                             │
│  ┌──────────────────────┐  ┌──────────────────────┐  ┌──────────────────┐  │
│  │ ● Shopify            │  │ ○ Amazon SP-API       │  │ ○ Google Merch.  │  │
│  │ CONNECTED             │  │ NOT CONFIGURED        │  │ NOT CONFIGURED   │  │
│  │ Last sync: 3 min ago │  │ --                    │  │ --               │  │
│  │ Errors (24h): 0      │  │                       │  │                  │  │
│  │ Latency: 1,240ms     │  │ [Configure]           │  │ [Configure]      │  │
│  │ Rate limit: ████░ 62%│  │                       │  │                  │  │
│  │ [Sync Now] [Details] │  │                       │  │                  │  │
│  └──────────────────────┘  └──────────────────────┘  └──────────────────┘  │
│                                                                             │
│  ┌──────────────────────┐  ┌──────────────────────┐  ┌──────────────────┐  │
│  │ ● Payment Processor  │  │ ● Email (SendGrid)   │  │ ○ Shipping       │  │
│  │ CONNECTED             │  │ CONNECTED             │  │ NOT CONFIGURED   │  │
│  │ Last sync: 1 min ago │  │ Last sync: 12 min ago│  │ Planned v2.0     │  │
│  │ Errors (24h): 0      │  │ Errors (24h): 1      │  │                  │  │
│  │ Terminals: 4 active  │  │ Bounce rate: 0.2%    │  │                  │  │
│  │ [Details]            │  │ [Details]             │  │                  │  │
│  └──────────────────────┘  └──────────────────────┘  └──────────────────┘  │
│                                                                             │
│  RECENT SYNC ACTIVITY                                                       │
│  ┌────────┬──────────────────┬───────────┬──────────┬────────┬───────────┐ │
│  │ Time   │ Integration      │ Type      │ Records  │ Status │ Duration  │ │
│  ├────────┼──────────────────┼───────────┼──────────┼────────┼───────────┤ │
│  │ 14:32  │ Shopify          │ WEBHOOK_IN│ 1        │ ✓      │ 340ms     │ │
│  │ 14:30  │ Shopify          │ RECON     │ 847      │ ✓      │ 4,200ms   │ │
│  │ 14:28  │ Email            │ MANUAL    │ 1        │ ✗      │ 1,100ms   │ │
│  └────────┴──────────────────┴───────────┴──────────┴────────┴───────────┘ │
└─────────────────────────────────────────────────────────────────────────────┘

Actions & Transitions

ActionNavigates ToRequires Role
Click integration cardIndividual integration detail screen (SCR-M06-02 through SCR-M06-08)ADMIN+
Sync NowSame screen (sync status updates in real-time)ADMIN+
Add IntegrationIntegration type selection modalADMIN+
View sync logSCR-M06-11 Integration Health MonitorADMIN+

G.9.2 Shopify Setup & Connection

AttributeValue
Screen IDSCR-M06-02
Product(s)OWNER
BRD Section(s)6.3
Database Tablesintegration_providers (R/W), integration_credentials (R/W), tenant_settings (R/W)
State Machine(s)7.14 Integration Connection States
Appendix F Servicesintegration.shopify.product-sync.service, integration.shopify.webhook-handler.service
User RolesADMIN, OWNER
Offline CapableNo
Route/admin/integrations/shopify/setup

Purpose

The Shopify Setup screen manages the OAuth connection to a Shopify store, configures sync mode (POS-master vs bidirectional), and sets up webhook subscriptions. Administrators enter the shop URL, initiate the OAuth flow, verify the connection, and configure the fundamental sync behaviour that determines how product, inventory, and order data flows between the POS and Shopify.

Key Elements

ElementTypeDescriptionBusiness Rule
Shop URL inputInputShopify store URL (e.g., nexus-clothes.myshopify.com)BRD 6.3
Connect buttonButtonInitiates OAuth 2.0 flow for offline access tokenBRD 6.2.2
Connection statusBadgeNOT_CONFIGURED, CONNECTING, CONNECTED, ERRORBRD 7.14
Sync mode selectorInputpos_master (default) or bidirectionalBRD 6.3.1
API preferenceInputGraphQL (default) or RESTBRD 6.3.6
Third-party POS toggleInputEnables Shopify third-party POS integration rulesBRD 6.3.12
Webhook status panelPanelList of subscribed webhook topics with active/inactive statusBRD 6.3.11
Verify connection buttonButtonTests credentials and API accessBRD 6.2.1
Disconnect buttonButtonRevokes OAuth token and marks integration inactiveBRD 6.2.1

Actions & Transitions

ActionNavigates ToRequires Role
Connect to ShopifyShopify OAuth redirect, then returns to same screenADMIN+
Verify connectionSame screen (status badge updates)ADMIN+
Configure inventory syncSCR-M06-03 Shopify Inventory Sync ConfigADMIN+
DisconnectConfirmation dialog, then same screenOWNER

G.9.3 Shopify Inventory Sync Config

AttributeValue
Screen IDSCR-M06-03
Product(s)OWNER
BRD Section(s)6.3, 6.7
Database Tablesintegration_providers (R/W), tenant_settings (R/W), locations (R), integration_sync_log (R)
State Machine(s)7.13 Integration Sync States
Appendix F Servicesintegration.shopify.inventory-sync.service, integration.cross-platform.inventory-orchestrator.service
User RolesADMIN, OWNER
Offline CapableNo
Route/admin/integrations/shopify/inventory

Purpose

The Shopify Inventory Sync Config screen manages real-time inventory synchronisation between the POS and Shopify. Administrators configure location-to-Shopify-location mapping, safety buffer quantities, reconciliation intervals, and sync triggers. The screen displays sync status per location and provides controls for the safety buffer system that holds back inventory from online availability.

Key Elements

ElementTypeDescriptionBusiness Rule
Location mapping tableTablePOS locations mapped to Shopify locations for inventory syncBRD 6.3.1
Safety buffer configInputPer-location quantity or percentage to hold back from Shopify availabilityBRD 6.7.2 — Channel Available = POS Available - Safety Buffer
Reconciliation intervalInputMinutes between full inventory reconciliation (default: 15)BRD 6.3.14
Sync trigger listPanelEvents that trigger immediate inventory sync (sale, return, adjustment, transfer, receiving)BRD 6.3.14
Last reconciliation statusBadgeTimestamp and result of last full reconciliationBRD 6.7.1
Oversell prevention toggleInputBlock sale if available_qty <= 0BRD 6.7.3
Sync failure freeze settingInputMinutes to freeze marketplace quantity on sync failure (default: 120)BRD 6.7.5

Actions & Transitions

ActionNavigates ToRequires Role
Save sync configSame screen (confirmation toast)ADMIN+
Force reconciliationSame screen (reconciliation runs, status updates)ADMIN+
View sync logSCR-M06-11 Integration Health Monitor (filtered to Shopify)ADMIN+

G.9.4 Shopify Order Fulfillment

AttributeValue
Screen IDSCR-M06-04
Product(s)OWNER
BRD Section(s)6.3
Database Tablesintegration_sync_log (R), orders (R), locations (R), integration_providers (R)
State Machine(s)7.13 Integration Sync States
Appendix F Servicesintegration.shopify.order-sync.service, integration.shopify.webhook-handler.service
User RolesADMIN, OWNER, MANAGER
Offline CapableNo
Route/admin/integrations/shopify/orders

Purpose

The Shopify Order Fulfillment screen displays incoming Shopify orders that require POS-side fulfillment. Orders appear within 60 seconds of placement via webhook, with inventory reserved immediately. Managers can view order details, assign fulfillment to a location, update fulfillment status, and push tracking information back to Shopify.

Key Elements

ElementTypeDescriptionBusiness Rule
Pending orders tableTableIncoming Shopify orders awaiting fulfillment with order number, items, total, timestampBRD 6.3
Fulfillment location selectorInputAssign order to a POS store location for fulfillmentBRD 6.3
Order detail panelPanelLine items, customer info, shipping address, payment statusBRD 6.3
Fulfillment status updateButtonMark as picking, packed, shipped with tracking number entryBRD 6.3
BOPIS indicatorBadge“Buy Online, Pick Up In Store” tag for applicable ordersBRD 6.3.1
Sync statusBadgeShows if fulfillment update has been pushed to ShopifyBRD 6.3

Actions & Transitions

ActionNavigates ToRequires Role
Assign to locationSame screen (order assigned)MANAGER+
Mark as fulfilledSame screen (status pushes to Shopify)MANAGER+
View order detailExpandable panel on same screenMANAGER+
View all sync activitySCR-M06-11 Integration Health MonitorADMIN+

G.9.5 Amazon Setup & Connection

AttributeValue
Screen IDSCR-M06-05
Product(s)OWNER
BRD Section(s)6.4
Database Tablesintegration_providers (R/W), integration_credentials (R/W), tenant_settings (R/W)
State Machine(s)7.14 Integration Connection States
Appendix F Servicesintegration.amazon.catalog-sync.service, integration.amazon.order-sync.service
User RolesADMIN, OWNER
Offline CapableNo
Route/admin/integrations/amazon/setup

Purpose

The Amazon Setup screen manages the SP-API OAuth connection to Amazon Seller Central. Administrators configure marketplace, region, fulfillment mode (FBM/FBA), and notification delivery method (SQS or polling). The OAuth flow exchanges a Login with Amazon (LWA) refresh token for short-lived access tokens that are automatically refreshed.

Key Elements

ElementTypeDescriptionBusiness Rule
Seller ID inputInputAmazon Seller Central seller identifierBRD 6.4.1
OAuth connect buttonButtonInitiates LWA OAuth 2.0 flowBRD 6.4.1
Connection statusBadgeNOT_CONFIGURED, CONNECTING, CONNECTED, ERRORBRD 7.14
Marketplace selectorInputUS (ATVPDKIKX0DER), CA, UK, etc.BRD 6.4.1
Region selectorInputNA, EU, FEBRD 6.4.1
Fulfillment modeInputFBM (Fulfilled by Merchant), FBA (Fulfilled by Amazon), or bothBRD 6.4.5
Order poll intervalInputSeconds between order polling (default: 120)BRD 6.4.4
Notification deliveryInputSQS or pollingBRD 6.4.6
Safety buffer configInputQuantity or percentage to hold back from Amazon availabilityBRD 6.7.2
Seller code compliance toggleInputEnforce Amazon seller code rulesBRD 6.4.8

Actions & Transitions

ActionNavigates ToRequires Role
Connect to AmazonLWA OAuth redirect, then returns to same screenADMIN+
Verify connectionSame screen (status badge updates)ADMIN+
Configure listingsSCR-M06-06 Amazon Catalog / ListingsADMIN+
DisconnectConfirmation dialog, then same screenOWNER

G.9.6 Amazon Catalog / Listings

AttributeValue
Screen IDSCR-M06-06
Product(s)OWNER
BRD Section(s)6.4
Database Tablesintegration_providers (R), integration_sync_log (R), products (R), variants (R)
State Machine(s)7.16 Product Sync Validation States
Appendix F Servicesintegration.amazon.catalog-sync.service, integration.amazon.inventory-sync.service
User RolesADMIN, OWNER
Offline CapableNo
Route/admin/integrations/amazon/listings

Purpose

The Amazon Catalog / Listings screen shows the sync status of all POS products with their Amazon marketplace listings. Administrators can view validation status per product, identify items failing Amazon compliance rules (bullet point limits, search term byte limits, image requirements), and trigger manual sync operations for individual products or in bulk.

Key Elements

ElementTypeDescriptionBusiness Rule
Product listing tableTablePOS products with Amazon sync status, ASIN, listing status, last sync, validation stateBRD 6.4.2 / 6.4.3
Validation status columnBadgeDRAFT, VALID, INVALID, SYNCED, SYNC_FAILED, BLOCKED per productBRD 7.16
Compliance warningsPanelProducts failing Amazon rules: max 5 bullet points, 1000 chars/bullet, 250 bytes search termsBRD 6.4.8
Bulk sync buttonButtonSync all valid products to Amazon via flat-file feedBRD 6.4.3
Individual sync buttonButtonSync single product to AmazonBRD 6.4.3
FBA/FBM statusBadgePer-product fulfillment assignmentBRD 6.4.5
Image validationBadgeShows if product images meet Amazon requirements (white background, min 1000px)BRD 6.6.2

Actions & Transitions

ActionNavigates ToRequires Role
Sync productSame screen (sync status updates)ADMIN+
Bulk sync allSame screen (bulk operation progress bar)ADMIN+
Fix validation errorProduct edit screen in Catalog moduleADMIN+
View sync logSCR-M06-11 Integration Health Monitor (filtered to Amazon)ADMIN+

G.9.7 Google Merchant Setup

AttributeValue
Screen IDSCR-M06-07
Product(s)OWNER
BRD Section(s)6.5
Database Tablesintegration_providers (R/W), integration_credentials (R/W), tenant_settings (R/W)
State Machine(s)7.14 Integration Connection States
Appendix F Servicesintegration.google.product-sync.service, integration.google.inventory-sync.service
User RolesADMIN, OWNER
Offline CapableNo
Route/admin/integrations/google/setup

Purpose

The Google Merchant Setup screen manages the service account OAuth connection to Google Merchant Center. Administrators upload the service-account JSON key file, configure the Merchant ID, enable Local Inventory Ads (LIA), set product update frequency, and configure Google Business Profile integration for local listing enrichment.

Key Elements

ElementTypeDescriptionBusiness Rule
Merchant ID inputInputGoogle Merchant Center merchant identifierBRD 6.5.1
Service account key uploadInputJSON key file upload (stored encrypted)BRD 6.5.1
Connection statusBadgeNOT_CONFIGURED, CONNECTING, CONNECTED, ERRORBRD 7.14
Local Inventory Ads toggleInputEnable/disable LIA for local inventory visibility in Google ShoppingBRD 6.5.3
Product update frequencyInput2x_daily (default), daily, or hourlyBRD 6.5
Image validation strict toggleInputEnforce Google image requirements (min 1000x1000, no watermarks, no text overlay)BRD 6.5.7
GTIN required toggleInputRequire barcode (GTIN/UPC/EAN) for all products synced to GoogleBRD 6.5.6
Content API migration bannerPanelDeadline reminder for Merchant API migration (2026-08-18)BRD 6.5.10

Actions & Transitions

ActionNavigates ToRequires Role
Upload service account keySame screen (connection test runs)ADMIN+
Verify connectionSame screen (status badge updates)ADMIN+
Configure validationSCR-M06-08 Google Validation DashboardADMIN+
DisconnectConfirmation dialog, then same screenOWNER

G.9.8 Google Validation Dashboard

AttributeValue
Screen IDSCR-M06-08
Product(s)OWNER
BRD Section(s)6.5
Database Tablesintegration_providers (R), integration_sync_log (R), products (R), variants (R)
State Machine(s)7.16 Product Sync Validation States
Appendix F Servicesintegration.google.product-sync.service, integration.cross-platform.validation.service
User RolesADMIN, OWNER
Offline CapableNo
Route/admin/integrations/google/validation

Purpose

The Google Validation Dashboard shows product compliance status against Google Merchant Center requirements. Administrators can identify products with disapproval risks (missing GTIN, invalid images, incorrect pricing, missing product type taxonomy) and fix issues before they cause Google disapprovals. The disapproval prevention engine pre-validates products before pushing.

Key Elements

ElementTypeDescriptionBusiness Rule
Validation summary cardsPanelTotal products, valid count, invalid count, blocked count, synced countBRD 6.5.8
Invalid products tableTableProducts failing Google rules with specific failure reasonsBRD 6.5.8
Image compliance columnBadgePass/fail per product for image requirements (size, format, no watermarks)BRD 6.5.7
GTIN/barcode statusBadgeMissing barcode indicator per productBRD 6.5.6
Price match validationBadgeVerifies POS price matches Google listing priceBRD 6.5
Product type taxonomyBadgeGoogle product category assignment statusBRD 6.5.6
Disapproval prevention logTableProducts caught by pre-validation before being pushed to GoogleBRD 6.5.8

Actions & Transitions

ActionNavigates ToRequires Role
Fix product issueProduct edit screen in Catalog moduleADMIN+
Re-validate productSame screen (validation re-runs)ADMIN+
Force sync valid productsSame screen (bulk push to Google)ADMIN+
View disapproval detailsExpandable detail panel per productADMIN+

G.9.9 Cross-Platform Validation

AttributeValue
Screen IDSCR-M06-09
Product(s)OWNER
BRD Section(s)6.6
Database Tablesintegration_providers (R), products (R), variants (R), integration_sync_log (R)
State Machine(s)7.16 Product Sync Validation States
Appendix F Servicesintegration.cross-platform.validation.service
User RolesADMIN, OWNER
Offline CapableNo
Route/admin/integrations/validation

Purpose

The Cross-Platform Validation screen applies the strictest-rule-wins validation engine across all connected channels (Shopify, Amazon, Google Merchant). It shows a unified view of product readiness per platform, identifies which platform’s rules are causing failures, and provides a consolidated validation matrix for titles, descriptions, images, barcodes, and required attributes.

Key Elements

ElementTypeDescriptionBusiness Rule
Platform readiness matrixTableProducts x Platforms grid showing pass/fail per channelBRD 6.6 — strictest-rule-wins
Unified validation rulesPanelCombined requirements: title max 150 chars, description max 5000 chars, image min 1000px, no watermarksBRD 6.6.1
Image requirements matrixTablePer-platform image requirements side-by-side comparisonBRD 6.6.2
Failing products listTableProducts that fail at least one platform’s validation with specific failure reasons per platformBRD 6.6.3
Pre-sync validation toggleInputEnable/disable automatic pre-sync validation before pushing to any channelBRD 6.6.3
Platform-specific attributesPanelRequired fields per platform (Amazon bullet points, Google product type, Shopify tags)BRD 6.6.4

Actions & Transitions

ActionNavigates ToRequires Role
Fix product issueProduct edit screen in Catalog moduleADMIN+
Re-validate all productsSame screen (bulk re-validation runs)ADMIN+
View platform detailSCR-M06-06/08 (Amazon/Google validation screens)ADMIN+

G.9.10 Inventory Sync Dashboard

AttributeValue
Screen IDSCR-M06-10
Product(s)OWNER
BRD Section(s)6.7
Database Tablesintegration_providers (R), integration_sync_log (R), inventory_levels (R), locations (R)
State Machine(s)7.13 Integration Sync States
Appendix F Servicesintegration.cross-platform.inventory-orchestrator.service, integration.shopify.inventory-sync.service, integration.amazon.inventory-sync.service
User RolesADMIN, OWNER
Offline CapableNo
Route/admin/integrations/inventory

Purpose

The Inventory Sync Dashboard provides a unified view of inventory levels across all connected channels (POS, Shopify, Amazon, Google). Administrators monitor safety buffer calculations, channel-available quantities, oversell prevention status, and sync failure freeze states. The screen shows real-time inventory allocation across platforms with the formula: Channel Available = POS Available - Safety Buffer.

Key Elements

ElementTypeDescriptionBusiness Rule
Channel inventory tableTableProduct x Channel grid showing POS qty, safety buffer, channel-available qty per platformBRD 6.7.2
Safety buffer summaryPanelPer-location and per-channel buffer configuration with current allocationBRD 6.7.2
Sync status per channelBadgeLast sync time, success/failure, latency per channelBRD 6.7.1
Oversell prevention statusBadgeActive/inactive indicator with oversell event countBRD 6.7.3
Sync failure freeze indicatorBadgeProducts currently frozen due to sync failure (120-min freeze window)BRD 6.7.5
Reconciliation schedulePanelNext scheduled reconciliation per channel (Shopify 15min, Amazon 30min, Google 6hr)BRD 6.7.1
Force reconciliation buttonButtonTrigger immediate full inventory reconciliation across all channelsBRD 6.7.1

Actions & Transitions

ActionNavigates ToRequires Role
Force reconciliationSame screen (reconciliation runs)ADMIN+
Edit safety buffersSame screen (inline edit per channel/location)ADMIN+
View sync failuresSCR-M06-12 Error DLQ ManagementADMIN+
View channel detailPlatform-specific sync config (SCR-M06-03)ADMIN+

G.9.11 Integration Health Monitor

AttributeValue
Screen IDSCR-M06-11
Product(s)OWNER
BRD Section(s)6.11
Database Tablesintegration_sync_log (R), integration_providers (R)
State Machine(s)7.13 Integration Sync States, 7.14 Integration Connection States
Appendix F Servicesintegration.provider.registry.service, integration.circuit-breaker.service
User RolesADMIN, OWNER
Offline CapableNo
Route/admin/integrations/health

Purpose

The Integration Health Monitor provides a detailed sync log and operational metrics across all integrations. Administrators can filter by integration type, sync type (webhook, scheduled, manual, bulk), status, date range, and entity type. The screen shows circuit breaker states, retry attempts, and dead-letter queue entries for failed operations.

Key Elements

ElementTypeDescriptionBusiness Rule
Sync log tableTablePaginated log with integration, sync_type, direction, entity_type, status, records, duration, timestampBRD 6.11.3
Integration type filterInputMulti-select: Shopify, Amazon, Google, Payment, Email, ShippingBRD 6.11.3
Sync type filterInputWEBHOOK_IN, WEBHOOK_OUT, SCHEDULED_PULL, SCHEDULED_PUSH, RECONCILIATION, MANUAL, BULK_OPERATION, NOTIFICATIONBRD 6.11.3
Status filterInputSUCCESS, FAILED, PARTIAL, SKIPPED, RETRYINGBRD 6.11.3
Circuit breaker statusPanelPer-provider circuit state: CLOSED (green), HALF_OPEN (yellow), OPEN (red)BRD 6.2.4
Error detail expansionPanelClick-through to full error_details text for failed entriesBRD 6.11.3
Retry status trackerBadgeShows retry attempt count and next retry time for RETRYING entriesBRD 6.2.3

Actions & Transitions

ActionNavigates ToRequires Role
Filter sync logSame screen (results update)ADMIN+
View error detailsSame screen (expanded detail panel)ADMIN+
Retry failed operationSame screen (retry initiated)ADMIN+
View DLQ entriesSCR-M06-12 Error DLQ ManagementADMIN+

G.9.12 Error DLQ Management

AttributeValue
Screen IDSCR-M06-12
Product(s)OWNER
BRD Section(s)6.2
Database Tablesintegration_sync_log (R/W), integration_providers (R)
State Machine(s)7.13 Integration Sync States
Appendix F Servicesintegration.dead-letter.service, integration.idempotency.service
User RolesADMIN, OWNER
Offline CapableNo
Route/admin/integrations/dlq

Purpose

The Error DLQ (Dead-Letter Queue) Management screen displays integration messages that have failed all retry attempts (3 retries with exponential backoff: 5s, 15s, 45s) and been moved to the dead-letter queue for manual review. Administrators can inspect error details, retry individual messages, replay batches, or discard messages that are no longer relevant. The DLQ retains entries for 24 hours before auto-purge.

Key Elements

ElementTypeDescriptionBusiness Rule
DLQ entries tableTableFailed messages with integration, entity_type, entity_id, external_id, error details, failed_atBRD 6.2.3
Error detail panelPanelFull error message, stack trace, request/response payloadsBRD 6.2.3
Retry buttonButtonRe-enqueue message for another round of retries (with new idempotency window)BRD 6.2.5
Batch retry buttonButtonRetry all selected DLQ entriesBRD 6.2.3
Discard buttonButtonRemove message from DLQ (acknowledge as unrecoverable)BRD 6.2.3
Integration filterInputFilter by integration typeBRD 6.2.3
Age indicatorBadgeTime since message entered DLQ; highlight entries nearing 24-hour auto-purgeBRD 6.2.3
Retry countBadgeNumber of previous retry attempts per messageBRD 6.2.3

Actions & Transitions

ActionNavigates ToRequires Role
Retry messageSame screen (message re-enqueued, status updates)ADMIN+
Batch retrySame screen (selected messages re-enqueued)ADMIN+
Discard messageConfirmation dialog, then same screenADMIN+
View source entityNavigates to relevant entity screen (product, order, etc.)ADMIN+

G.10 Nexus POS Terminal Context

This section documents the POS terminal experience — the screens and navigation flows specific to the sales register context within the Nexus POS web application (ADR-052). While individual screen specs are in G.4-G.9 by module, this section covers POS navigation, hardware integration, offline behavior, keyboard shortcuts, and screen transition flows.

G.10.1 POS Navigation Structure

The Nexus POS terminal uses a sidebar-primary layout optimized for fixed-position retail terminals. When a CASHIER logs in, the app opens directly to the Sales Terminal with a transaction-focused sidebar. MANAGER and OWNER roles see an expanded navigation with access to administrative sections (reports, inventory, setup, integrations) in addition to the POS sidebar.

The POS screen is divided into three zones:

ZonePositionWidthContent
SidebarLeft64px (collapsed) / 240px (expanded)Primary navigation icons/labels
Content AreaCenterRemainingActive screen content
Status BarTopFull width, 48pxConnection indicator, location name, clock, user avatar
IconLabelRouteDescriptionRegister Profile
CartSales/pos/salesActive sale screen with product grid, cart panel, and paymentFULL_POS, MOBILE
SearchLookup/pos/lookupProduct search by barcode, SKU, or name — shows price, stock, location availabilityFULL_POS, MOBILE
UsersCustomers/pos/customersCustomer search, attach to sale, view purchase history, loyalty balanceFULL_POS
BoxInventory/pos/inventoryQuick stock check, count participation, adjustment requestsFULL_POS
ClockTime Clock/pos/timeclockClock-in/clock-out for current userFULL_POS, MOBILE
DollarSignDrawer/pos/drawerCash drawer operations: open, drop, X-Report, Z-ReportFULL_POS
FileTextHistory/pos/historyToday’s transaction history for this register — reprint receipts, view detailsFULL_POS
SettingsSettings/pos/settingsRegister-local settings (receipt format, display brightness)FULL_POS

The sidebar collapses to icon-only mode on smaller displays (< 1280px) and can be toggled via the hamburger menu icon at the top.

Role-Based Navigation Visibility

Since Nexus POS is a single web app (ADR-052), the navigation adapts based on the logged-in user’s role:

RoleDefault Screen on LoginSidebar Sections VisibleHardware ActionsAuthentication
CASHIERSales TerminalSales, Lookup, Customers, Inventory (count only), Time Clock, Drawer, HistoryPrint receipt, open drawer, scan barcodePIN-based login (4-6 digit numeric PIN via POST /auth/pin-login)
MANAGERDashboardAll CASHIER sections + Sales Reports, Catalog, Inventory (full), Setup (partial)Same as CASHIER (when at register)Email + password or PIN
OWNERDashboardAll sections including Setup (full), IntegrationsSame as CASHIER (when at register)Email + password
BUYERCatalogCatalog, Inventory (POs, vendors, reorder)None (back-office role)Email + password
AUDITORInventoryInventory (counts), Audit LogNone (back-office role)Email + password

When a MANAGER or OWNER navigates to the Sales Terminal, the POS sidebar replaces the admin navigation, providing the same transaction-focused experience as a CASHIER.

Quick-Access Toolbar

At the top of the Sales screen, a persistent quick-access toolbar provides one-tap shortcuts for the most common mid-sale actions:

ButtonActionShortcut
New SaleClear cart and start a new transactionF1
CustomerOpen customer search overlay, attach to current saleF2
Price CheckOpen price check dialog (scan or type barcode)F3
Park SalePark current cart (save for later retrieval)F4
RetrieveRetrieve a previously parked saleF5
VoidVoid the current transaction (requires Manager role)F8

G.10.2 Hardware Integration Points

The Nexus POS web application integrates with retail peripherals via web-compatible protocols (WebUSB, Star WebPRNT, Stripe Terminal JS SDK) and standard network interfaces. All hardware interactions are abstracted behind a HardwareService interface so that the React UI layer never directly communicates with physical devices.

Barcode Scanner Integration

AttributeValue
ProtocolUSB HID (keyboard wedge mode)
Supported DevicesAny USB barcode scanner that emits keyboard events (Zebra DS2208, Honeywell Voyager, Symbol LS2208)
ConnectionUSB wired — plug and play, no driver required
Data FormatBarcode string terminated by Enter key (configurable: CR, LF, or CR+LF)
Integration MethodGlobal keyboard event listener in React — detects rapid keystroke sequences (< 50ms between characters) as scanner input vs. manual typing

Focus Management: The barcode scanner input is captured globally regardless of which UI element has focus. When a scan is detected on the Sales screen, the system automatically performs a product lookup (API or product_cache) and adds the item to the cart. On non-Sales screens (e.g., Inventory Lookup), the scan triggers a product search instead.

Scan Detection Logic: The POS uses a timing-based heuristic to distinguish scanner input from keyboard typing:

  • Characters arriving within 50ms of each other are buffered as a scan sequence
  • The sequence is finalized when an Enter key is received or 200ms elapses after the last character
  • Sequences shorter than 3 characters are ignored (likely accidental keypresses)

Receipt Printer

AttributeValue
ProtocolESC/POS (Epson Standard Code for Point of Sale)
Supported DevicesEpson TM-T88VI, Star TSP143IV, Star mC-Print3
ConnectionUSB or network (TCP/IP port 9100)
Paper Width80mm (default), 58mm (compact)
Integration MethodStar WebPRNT SDK (HTTP/HTTPS to network printers) or WebUSB API for USB-connected printers. ESC/POS byte stream generated in the browser via receipt-printer-encoder library.

Receipt Content: Receipts are composed in the React layer as a structured receipt object (store name, items, totals, payment breakdown, barcode) and serialized to ESC/POS commands by the browser-side print service. Offline sales include an “OFFLINE” watermark below the store header.

Receipt Reprint: Receipts for today’s transactions can be reprinted from the History screen. The system stores the receipt data (not the rendered ESC/POS bytes) so reprints reflect the original sale data.

Cash Drawer

AttributeValue
ProtocolDK port trigger (RJ-12 cable from receipt printer)
Supported DevicesAny cash drawer with DK port (APG Vasario, Star CD3-1616)
ConnectionConnected to receipt printer’s DK port — drawer opens when printer sends the open command
Integration MethodESC/POS drawer kick pulse (0x1B 0x70 0x00) sent via the same Star WebPRNT / WebUSB channel used for receipt printing. Cash drawers connect to the printer’s DK port (kick-out cable).

Business Rules: The cash drawer opens automatically at the end of a cash sale. Manual drawer open requires the cash_drawer_operations feature toggle (enabled for STAFF, MANAGER, OWNER by default). All drawer open events are logged in the audit trail with user ID, timestamp, and reason (sale_complete, manual_open, cash_drop, drawer_count).

Payment Terminal

AttributeValue
ProtocolSemi-integrated (SAQ-A compliant)
Supported DevicesVerifone P400, Ingenico Lane/3000, PAX A80
ConnectionNetwork (TCP/IP) — POS sends amount, terminal handles card interaction
PCI ScopeSAQ-A: No card data touches the POS system. The payment terminal handles all card reads, PIN entry, and encryption. POS receives only authorization codes and masked card numbers (last 4 digits).
Integration MethodStripe Terminal JS SDK (or equivalent vendor SDK) sends amount to terminal via the browser. Terminal returns authorization result.

Payment Flow: POS sends { amount, currency, transactionType } to the payment terminal. The terminal displays amount, processes card tap/insert/swipe, communicates with the payment processor, and returns { approved, authCode, maskedPan, cardBrand } to the POS. If the terminal is unreachable, the POS shows “Payment terminal offline — use cash or try again.”

Offline Limitation: Card payments are blocked offline (see G.10.3). Only cash payments are accepted during OFFLINE mode because the payment terminal requires network connectivity to reach the payment processor.

RFID Reader (Web POS)

AttributeValue
ProtocolUSB HID (WebUSB API) or network-connected readers (HTTP/TCP)
Supported DevicesZebra FX9600 (fixed reader, dock door, network), Zebra RFD40 (USB sled)
ConnectionUSB (WebUSB) or Ethernet (fixed readers via REST/LLRP gateway)
Use CaseWeb POS RFID operations: tag lookup, tag void, tag status check. Bulk scanning is handled by the Raptag mobile app (G.11).
Integration MethodWebUSB API for USB-connected readers; HTTP REST calls for network-attached readers via RFID gateway service

Scope: RFID readers connected to the web POS are used for individual tag operations only (e.g., looking up a tag during a count discrepancy investigation, voiding a damaged tag). Bulk inventory counting uses the Raptag mobile app with handheld readers.


G.10.3 Offline Behavior (ADR-048)

The Nexus POS operates in an online-first architecture (ADR-048). All reads and writes go through the Central API via React Query during normal operation. When connectivity is lost, the POS falls back to a thin 2-table SQLite WASM database (sql.js or wa-sqlite backed by OPFS) for sales continuity.

3-State Connection Monitor

The connection monitor uses three detection layers (Socket.io events, HTTP health ping every 5s, navigator.onLine API) to determine the current state:

StateTriggerUI IndicatorData ReadsData Writes
ONLINEWebSocket connected + health ping OKGreen dot + “Connected”React Query → Central APIPOST → Central API
DEGRADEDWebSocket dropped, health ping intermittentYellow dot + “Unstable”Try API (2s timeout) → fallback to SQLite product_cachePOST → API + local backup copy in sales_queue
OFFLINE3 consecutive health pings fail (~15s)Red dot + banner: “Working offline. N sales queued. Prices may be outdated.”SQLite product_cache onlySQLite sales_queue (append-only, FIFO)

SYNCING (recovery sub-state): When connectivity restores, the monitor enters SYNCING — yellow dot with “Syncing 2/3…” progress text. The sales_queue is flushed oldest-first. On completion, the state transitions to ONLINE.

Operations Allowed Offline

OperationDetails
New sale (cash only)Product prices from product_cache. Sale written to sales_queue. Receipt printed with “OFFLINE” watermark.
Return with receiptOriginal receipt data available locally. Return queued for sync.
Price checkFrom product_cache. Stale warning shown if cache > 60 minutes old.
Park saleCart state saved to local storage.
Retrieve parked saleParked carts retrieved from local storage.

Operations Blocked Offline

OperationReason
Card paymentPayment terminal requires network to reach processor
Customer create/lookupRequires uniqueness check against Central API
Credit limit check / on-account paymentRisk of exceeding balance without real-time verification
Gift card activation / reload / redeem / balanceRisk of double-activation or stale balance
Multi-store inventory lookupRequires network to query other locations
Transfer request / reservation createRequires coordination with other locations
Inventory adjustment / receivingRequires server-side validation and approval workflow

When a user attempts a blocked operation offline, the POS shows a modal: “This feature requires an internet connection. Please try again when connected.” The blocked action button is visually disabled (grayed out) with a “requires connection” tooltip.

2-Table SQLite WASM Fallback

The fallback database runs in the browser via SQLite WASM (sql.js or wa-sqlite), with persistence to the Origin Private File System (OPFS) for durability across page reloads and browser restarts.

TablePurposeSize Estimate
product_cacheRead-only product data (id, sku, barcode, name, price, cost, tax_code, variants). Pre-warmed on startup. Updated via WebSocket push events.~5MB for 10,000 SKUs
sales_queueAppend-only offline transactions. Each row contains full sale data as JSON (line items, payments, totals). UUID sale_id for idempotent sync.~1KB per sale

The product_cache includes a last_refreshed timestamp. If the cache is older than 60 minutes during offline mode, the POS shows a subtle warning banner: “Product data may be outdated.”

Flag-on-Sync Price Discrepancy Handling

When the sales_queue flushes on reconnection, the Central API compares each line item’s unit_price (from the stale product_cache) against the current server price:

ScenarioServer ActionManager Review
Price matchAccept sale normallyNone
Price changedAccept sale at current server price; log discrepancy (sold_price, current_price, difference)Review flagged transactions in Nexus POS (MANAGER+ dashboard); decide if customer credit is warranted
Item out of stockRecord sale; flag negative inventoryApprove negative balance or adjust
Customer deletedReassign to “Walk-in Customer”Informational
Promotion expiredApply current (non-promotional) priceReview flagged transactions

Discrepancies appear in the Nexus POS manager dashboard under “Price Discrepancies” with [Issue Credit] and [Dismiss] actions per transaction.


G.10.4 POS Keyboard Shortcuts

The POS terminal supports function key shortcuts for rapid operation. These are active whenever the POS application has focus, regardless of which screen is displayed.

Function Key Assignments

KeyActionContextRequired Role
F1New SaleAny screen — navigates to Sales, clears cartALL
F2Customer LookupSales screen — opens customer search overlayALL
F3Price CheckAny screen — opens price check dialog (scan or type barcode)ALL
F4Park SaleSales screen — saves current cart for later retrievalALL
F5Retrieve Parked SaleSales screen — opens list of parked salesALL
F6Inventory LookupAny screen — opens stock level search by barcode or SKUALL
F7Transaction HistoryAny screen — opens today’s register transaction listALL
F8Void TransactionSales screen — voids the current or last transactionMANAGER, OWNER
F9Apply DiscountSales screen — opens discount dialog (line-item or cart-level)ALL (amount limits apply)
F10Open Cash DrawerSales screen — manual drawer openALL (requires cash_drawer_operations toggle)
F11Manager OverrideAny screen — prompts for manager PIN to authorize restricted actionsMANAGER, OWNER
F12Lock TerminalAny screen — locks the POS to the PIN entry screen (preserves current sale)ALL

Barcode Scan Handling

Barcode scans are intercepted globally via a keyboard event listener. The scan detection algorithm distinguishes rapid scanner input (< 50ms between keystrokes) from manual typing:

  • Sales screen: Scan adds item to cart (or increments quantity if already in cart)
  • Lookup screen: Scan populates the search field and triggers product detail display
  • Inventory screen: Scan shows stock levels across all locations for the scanned product
  • Any other screen: Scan opens a floating product info tooltip (price, stock, image)

Quick-Key Product Buttons

The Sales screen supports a configurable grid of quick-key buttons for high-frequency items that lack barcodes (e.g., gift wrapping, alterations, miscellaneous charges). Quick keys are configured under Settings > Registers > Quick Keys (OWNER role) and synced to the POS terminal via WebSocket.

AttributeValue
Grid size4x5 (20 buttons, configurable)
Button contentProduct name + price, color-coded by category
Location scopePer-register (different registers can have different quick-key layouts)

Manager Override Shortcut

When a restricted action is attempted by a STAFF user (e.g., void, price override beyond discount limit), the system prompts for a manager PIN:

  1. Modal appears: “Manager authorization required for [action name]”
  2. Manager enters their PIN on the numeric keypad
  3. System validates PIN against users with MANAGER or OWNER role at this tenant
  4. If valid, the action proceeds under the manager’s authority (logged as authorized_by in the audit trail)
  5. If invalid, the action is denied with “Invalid manager PIN”

The F11 shortcut opens this same override prompt pre-emptively, allowing a manager to authorize before the restricted action is attempted.


G.10.5 POS Screen Transition Flows

Standard Sale Flow

Login → Terminal → Cart → Payment → Receipt
=========================================================

 [PIN Entry]
     │
     ▼
 [Sales Screen] ◄──────────────────────────────────────┐
     │                                                   │
     │ scan/search                                       │
     ▼                                                   │
 [Product Added to Cart]                                 │
     │                                                   │
     │ (repeat for each item)                            │
     │                                                   │
     ▼                                                   │
 [Cart Review]                                           │
     │  ├── [Apply Discount] (F9)                        │
     │  ├── [Attach Customer] (F2)                       │
     │  └── [Park Sale] (F4) ──► [Parked Sales List]     │
     │                                                   │
     │ [Pay] button                                      │
     ▼                                                   │
 [Payment Dialog]                                        │
     │  ├── Cash: enter tendered amount                  │
     │  ├── Card: send to payment terminal               │
     │  ├── Gift Card: scan/enter card number            │
     │  ├── On Account: select customer account          │
     │  └── Split: combine multiple payment methods      │
     │                                                   │
     │ all payments applied                              │
     ▼                                                   │
 [Receipt Printed]                                       │
     │  ├── Print receipt (ESC/POS)                      │
     │  ├── Email receipt (if customer attached)         │
     │  └── Cash drawer opens (if cash payment)          │
     │                                                   │
     └──────────────── [New Sale] (F1) ─────────────────┘

Return Flow

Terminal → Return Lookup → Item Selection → Refund → Receipt
=========================================================

 [Sales Screen]
     │
     │ [Returns] button or navigate to History
     ▼
 [Return Lookup]
     │  ├── Scan receipt barcode
     │  ├── Enter sale number manually
     │  └── Search by date + register
     │
     │ original sale found
     ▼
 [Original Sale Details]
     │  ├── View all line items from original sale
     │  ├── Check return eligibility per item
     │  └── Items already returned are grayed out
     │
     │ select items to return
     ▼
 [Return Item Selection]
     │  ├── Select quantity per item (up to original qty)
     │  ├── Select reason code (defective, wrong_size, etc.)
     │  └── Select return action: refund or exchange
     │
     │ [Process Return] button
     ▼
 [Refund Method]
     │  ├── Original payment method (default)
     │  ├── Store credit
     │  └── Cash (if manager authorized)
     │
     │ refund applied
     ▼
 [Return Receipt Printed]
     │  ├── Print return receipt
     │  ├── Inventory restocked (if return_to_stock)
     │  └── Customer loyalty points adjusted
     │
     └──── back to [Sales Screen]

Cash Drawer Open/Close Flow

Open Drawer → X-Report → Z-Report → Close
=========================================================

 [Start of Day]
     │
     │ Manager navigates to Drawer screen
     ▼
 [Open Drawer]
     │  ├── Enter starting cash amount (counted bills/coins)
     │  ├── System records opening_balance
     │  └── Drawer status: OPEN
     │
     │ (normal sales throughout the day)
     │
     ▼
 [Mid-Day: X-Report] (non-destructive read)
     │  ├── View running totals: cash, card, gift card
     │  ├── View transaction count by payment method
     │  ├── Expected cash = opening_balance + cash_in - cash_out
     │  └── Does NOT reset counters
     │
     │ (optional: cash drop)
     ▼
 [Cash Drop] (if drawer has excess cash)
     │  ├── Enter drop amount
     │  ├── System records cash_drop event
     │  ├── Expected cash reduced by drop amount
     │  └── Manager signature/PIN required
     │
     │ (end of day)
     ▼
 [Z-Report / Close Drawer]
     │  ├── Enter counted cash amount (actual physical count)
     │  ├── System calculates variance (counted - expected)
     │  ├── Display variance: $0.00 = green, < $5 = yellow, > $5 = red
     │  ├── Print Z-Report (end-of-day summary)
     │  ├── Drawer status: CLOSED
     │  └── Register locked until next opening
     │
     └──── [Drawer Closed — Register Locked]

G.11 Nexus Raptag Mobile Context (8 Screens)

BRD Section: 4.6.8 (RFID Counting Subsystem) + 5.16 (RFID Configuration) | Appendix F: Section F.10A (6 services) | Tech: React Native + Expo (ADR-047)

This section provides full screen specifications for the Nexus Raptag mobile RFID counting application. Unlike the Nexus POS web app, Raptag is a separate React Native app deployed to iOS and Android via Expo (ADR-047).

Cross-Reference: See Ch 05, Section 4.6.8 for RFID counting business rules. See Ch 08, Domain 16 (RFID) for table schemas. See Appendix F, Section F.10A for RFID service breakdown.


G.11.1 Login

AttributeValue
Screen IDSCR-R01
Product(s)Raptag
BRD Section(s)5.5
Database Tablesusers (R), tenants (R), roles (R), user_locations (R)
State Machine(s)
Appendix F Servicesauth.login.service
User RolesALL
Offline CapableYes (cached credentials for returning users)
Route/login

Purpose

The Login screen authenticates Raptag operators against the Central API using email and password credentials. Unlike the POS terminal (which uses numeric PIN entry for speed), Raptag uses standard email/password authentication because operators log in once per session rather than switching users frequently. Returning users can authenticate offline using cached credential hashes stored in the device’s secure storage.

Key Elements

ElementTypeDescriptionBusiness Rule
Tenant SelectorDropdownSelect tenant (shown only if user belongs to multiple tenants)Pre-populated from last login; stored in AsyncStorage
Email FieldText InputUser’s login email addressValidated against users.email with users.is_active = true
Password FieldSecure InputPassword with show/hide toggleVerified against users.password_hash (bcrypt)
Remember MeToggleCache credentials for offline re-authenticationStores bcrypt hash in device secure storage (Expo SecureStore)
Login ButtonPrimary ButtonSubmit credentials to POST /auth/loginDisabled until both fields non-empty; shows spinner during request
Server URLSettings LinkConfigure Central API endpoint (first-time setup only)Stored in AsyncStorage; hidden after initial configuration
Offline BadgeInfo Banner“Offline mode — using cached credentials” shown when device is disconnectedOnly appears if cached credentials exist and device has no connectivity

Actions & Transitions

ActionNavigates ToRequires Role
Successful login (online)SCR-R02 Home DashboardALL
Successful login (offline, cached)SCR-R02 Home Dashboard (limited features)ALL
Failed login (wrong credentials)Stay on SCR-R01 with error message
Account lockedStay on SCR-R01 with “Account locked” message

G.11.2 Home Dashboard

AttributeValue
Screen IDSCR-R02
Product(s)Raptag
BRD Section(s)4.6.8
Database Tablesrfid_scan_sessions (R), session_operators (R), rfid_config (R), devices (R)
State Machine(s)RFID Session (7.11)
Appendix F Servicesrfid.scan.command.service, rfid.config.crud.service
User RolesALL
Offline CapablePartial (shows locally cached session data; cannot fetch new sessions)
Route/home

Purpose

The Home Dashboard is the primary landing screen after login. It displays the operator’s active session (if any), a list of available sessions at their assigned location, recent session history, and device/reader status. It serves as the central hub from which operators join existing sessions or managers create new ones.

Key Elements

ElementTypeDescriptionBusiness Rule
Active Session CardHighlight CardShows current session if operator is participating (session name, type, section assignment, tag count, elapsed time)Only one active session per operator at a time (enforced by session_operators unique constraint)
Available Sessions ListScrollable ListSessions at operator’s location with status in_progress that they haven’t joined yetFiltered by rfid_scan_sessions.location_id matching operator’s assigned location
New Session ButtonFAB (Floating Action Button)Create a new counting sessionRequires MANAGER or OWNER role; opens SCR-R03
Reader Status IndicatorStatus BadgeShows connected RFID reader model and battery levelGreen = connected, Yellow = low battery (< 20%), Red = disconnected
Recent SessionsCard ListLast 5 completed sessions with variance summaryTapping opens session summary (SCR-R06, read-only)
Pending UploadsWarning BadgeCount of sessions with un-synced scan dataShows “3 sessions pending upload” with upload button → SCR-R07
Location NameHeader TextCurrent location name (from user_locations.is_primary)Operator cannot change location from Raptag; set in Nexus POS (OWNER > Setup > Locations)

Actions & Transitions

ActionNavigates ToRequires Role
Tap “Active Session” cardSCR-R04 Scanning Interface (resume scanning)ALL
Tap “New Session” FABSCR-R03 Join / Start SessionMANAGER, OWNER
Tap available session → “Join”SCR-R05 Section AssignmentALL
Tap “Pending Uploads”SCR-R07 Chunked Upload / SyncALL
Tap recent session cardSCR-R06 Session Summary (read-only)ALL
Tap reader statusSCR-R08 Device PairingALL

G.11.3 Join / Start Session

AttributeValue
Screen IDSCR-R03
Product(s)Raptag
BRD Section(s)4.6.8, 5.16
Database Tablesrfid_scan_sessions (W), session_operators (W), locations (R), rfid_config (R)
State Machine(s)RFID Session (7.11): [*] → in_progress
Appendix F Servicesrfid.scan.command.service, rfid.config.crud.service
User RolesMANAGER, OWNER (create); ALL (join)
Offline CapableYes (session created locally in SQLite, synced later)
Route/session/new

Purpose

This screen allows managers to create new RFID counting sessions and operators to join existing sessions. When creating a session, the manager selects the count type, location, and assigns sections to operators. When joining, the operator selects their assigned section and confirms their reader device.

Key Elements

ElementTypeDescriptionBusiness Rule
Session Type SelectorSegmented Controlfull_inventory, cycle_count, spot_check, find_itemSee BRD Section 5.16.4 for type definitions
Location DisplayRead-only TextPre-filled with operator’s primary locationSessions are location-scoped; cannot count across locations
Section ListEditable ListManager defines sections (e.g., “Men’s Tops”, “Women’s Bottoms”, “Accessories”)Free-text section names; at least one section required
Operator AssignmentMulti-selectAssign operators to sections from a list of active users at the locationMax 10 operators per session; each operator assigned exactly one section
Session NameText InputOptional friendly name (e.g., “Q1 Full Count - March 2026”)Auto-generated as {session_type}-{location_code}-{date} if left blank
Expected CountNumber InputOptional expected tag count for variance calculationIf provided, used to calculate variance % on SCR-R06
Start Session ButtonPrimary ButtonCreates session and transitions to scanningWrites to rfid_scan_sessions (status: in_progress) and session_operators
Join Existing PanelCardShows session details for joining (session name, type, available sections)Operator selects their section and taps “Join”

Actions & Transitions

ActionNavigates ToRequires Role
Tap “Start Session” (create mode)SCR-R04 Scanning InterfaceMANAGER, OWNER
Tap “Join Session” (join mode)SCR-R05 Section Assignment → SCR-R04ALL
CancelSCR-R02 Home DashboardALL

G.11.4 Scanning Interface

AttributeValue
Screen IDSCR-R04
Product(s)Raptag
BRD Section(s)4.6.8, 5.16
Database Tablesrfid_scan_events (W, local SQLite), rfid_tags (R, cached), rfid_tag_mappings (R, cached)
State Machine(s)RFID Session (7.11): in_progress
Appendix F Servicesrfid.scan.command.service, rfid.tag.crud.service
User RolesALL
Offline CapableYes (fully offline — all scan data stored in local SQLite)
Route/session/:id/scan

Purpose

The Scanning Interface is the primary operational screen where operators perform RFID tag reads using the connected Zebra reader. It displays real-time scan progress including tag count, RSSI signal strength, section progress, and a live-updating list of detected EPCs. All scan data is written to local SQLite with 30-second auto-save checkpoints for crash recovery.

Key Elements

ElementTypeDescriptionBusiness Rule
Start/Stop Scan ToggleLarge ButtonToggle RFID reader on/off (green = scanning, red = stopped)Reader controlled via Zebra RFID SDK native bridge
Tag CounterLarge Numeric Display“347 / 500” format showing found tags vs expected countExpected count from session creation (SCR-R03) or total active tags at location
RSSI Signal IndicatorVertical Bar / ArcReal-time signal strength of current reads (-30 dBm = strong, -70 dBm = threshold)Tags below min_rssi_threshold (-70 dBm default) are filtered as phantom reads
Section Progress BarHorizontal ProgressPercentage of expected tags found in operator’s assigned sectionColor-coded: green (> 95%), yellow (80-95%), red (< 80%)
EPC ListScrollable ListLive-updating list of scanned EPCs with SKU name, variant, and read countSorted by most-recent-first; matched tags show product info from rfid_tag_mappings cache
Unknown Tags BadgeWarning CountCount of EPCs not found in rfid_tag_mappings (unmatched)Displayed as “12 unknown” badge; could indicate tags from other tenants or unregistered tags
Battery IndicatorIcon + PercentageDevice battery level and reader battery levelBelow 15%: triggers auto-save and warning “Low battery — save your progress”
Auto-Save IndicatorSubtle Text“Last saved: 12s ago” timestamp30-second SQLite checkpoint interval (configurable via rfid_config.auto_save_interval_seconds)
Elapsed TimeTimerSession duration counter (HH:MM:SS)Auto-expires after session_timeout_minutes (default: 480 min / 8 hours)

Wireframe

┌─────────────────────────────────┐
│ ◄ Session    Men's Tops    ■ ■ │  <- Back, Section name, Battery icons
│                  12:34:21      │  <- Elapsed time
├─────────────────────────────────┤
│                                 │
│         ┌───────────┐           │
│         │           │           │
│         │    347    │           │  <- Tag count (large)
│         │  ─── ───  │           │
│         │    500    │           │  <- Expected count
│         │           │           │
│         └───────────┘           │
│                                 │
│  ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓░░░░░  69%    │  <- Section progress bar
│                                 │
│  RSSI: ████████░░  -42 dBm     │  <- Signal strength
│                                 │
├─────────────────────────────────┤
│  Scanned Tags           12 unk │  <- Unknown tag count
├─────────────────────────────────┤
│  ▸ 3034F8A2C1E9B7D0  NXJ-1078 │
│    Blue Hoodie / M    ×3  -38  │
│  ▸ 3034F8A2C1E9B7D1  NXJ-1078 │
│    Blue Hoodie / L    ×2  -45  │
│  ▸ 3034F8A2C1E9B7D2  NXJ-1079 │
│    Black Tee / S      ×1  -52  │
│  ▸ 3034F8A2C1E9B7D3  ??? unkn │
│    Unknown tag        ×1  -61  │
│  ▸ 3034F8A2C1E9B7D4  NXJ-1080 │
│    White Polo / XL    ×1  -44  │
│                                 │
│         (scrollable)            │
├─────────────────────────────────┤
│  Auto-saved 12s ago             │
│                                 │
│  ┌─────────────────────────────┐│
│  │     ■  STOP SCANNING       ││  <- Large toggle button (red)
│  └─────────────────────────────┘│
└─────────────────────────────────┘

Actions & Transitions

ActionNavigates ToRequires Role
Tap “Stop Scanning” → “Complete Section”SCR-R05 Section Assignment & ProgressALL
Tap “Stop Scanning” → “End Session” (manager)SCR-R06 Session SummaryMANAGER, OWNER
App backgrounded / battery criticalStay on SCR-R04 (auto-save triggered immediately)ALL
App crash / force closeSCR-R04 with recovery dialog on relaunch (“Resume session?”)ALL

G.11.5 Section Assignment & Progress

AttributeValue
Screen IDSCR-R05
Product(s)Raptag
BRD Section(s)4.6.8
Database Tablessession_operators (R/W), rfid_scan_sessions (R), rfid_scan_events (R, local)
State Machine(s)RFID Session (7.11): in_progress
Appendix F Servicesrfid.scan.command.service
User RolesALL (view); MANAGER, OWNER (reassign sections)
Offline CapablePartial (shows local progress; section reassignment requires connectivity)
Route/session/:id/sections

Purpose

The Section Assignment & Progress screen shows the overall progress of a multi-operator counting session. Each operator’s assigned section is displayed with their individual tag count, progress percentage, and connection status. Managers can reassign sections or add/remove operators from this screen.

Key Elements

ElementTypeDescriptionBusiness Rule
Session HeaderInfo CardSession name, type, location, total tags found, elapsed timeAggregates counts from all operators
Operator Section CardsCard ListOne card per operator showing: name, section, tag count, progress %, last activity timestampProgress % = operator’s tags / (expected / num_sections)
My Section HighlightVisual EmphasisCurrent user’s section card is highlighted with a colored borderAllows quick identification of own section
Operator StatusBadge per Card“Scanning” (green pulse), “Paused” (yellow), “Completed” (checkmark), “Disconnected” (red)Based on last activity timestamp; disconnected if no scan events > 5 minutes
Add Operator ButtonIcon ButtonAdd a new operator to the session (manager only)Max 10 operators per session
Remove Operator ButtonIcon ButtonRemove an operator from the session (manager only)Already-uploaded data preserved; session_operators.left_at set
Reassign SectionEdit ButtonChange an operator’s assigned section (manager only)Updates session_operators.assigned_section
Resume Scanning ButtonPrimary ButtonReturn to scanning interface for current user’s sectionNavigates to SCR-R04

Actions & Transitions

ActionNavigates ToRequires Role
Tap “Resume Scanning”SCR-R04 Scanning InterfaceALL
Tap “Complete Session”SCR-R06 Session SummaryMANAGER, OWNER
Tap “Add Operator”Operator selection modal (inline)MANAGER, OWNER
Back buttonSCR-R02 Home DashboardALL

G.11.6 Session Summary

AttributeValue
Screen IDSCR-R06
Product(s)Raptag
BRD Section(s)4.6.8
Database Tablesrfid_scan_sessions (R/W), rfid_scan_events (R), session_operators (R), rfid_tags (R)
State Machine(s)RFID Session (7.11): in_progress → completed or in_progress → cancelled
Appendix F Servicesrfid.scan.command.service, rfid.inventory-reconciliation.service
User RolesALL (view); MANAGER, OWNER (approve/reject)
Offline CapablePartial (shows local counts; variance calculation requires server data)
Route/session/:id/summary

Purpose

The Session Summary displays the final results of an RFID counting session, including total tags scanned, expected count, variance analysis, and per-section breakdowns. Managers use this screen to review results and decide whether to approve the count, request a recount, or cancel the session. Variance is color-coded by severity threshold.

Key Elements

ElementTypeDescriptionBusiness Rule
Session Info HeaderInfo CardSession number, type, location, start/end time, duration, operator countRead from rfid_scan_sessions
Total Count SummaryLarge StatsFound: 4,832 / Expected: 5,000 / Variance: -168 (-3.36%)Variance = found - expected; negative = missing tags
Variance SeverityColor-Coded BannerGreen (0%), Yellow (1-2%), Orange (3-5%), Red (>5%)Thresholds from rfid_config variance settings (see BRD Section 5.16.4)
Per-Section BreakdownTable/CardsEach section with operator name, tags found, expected, variance, durationGrouped by session_operators.assigned_section
Unknown Tags ListExpandable SectionEPCs not found in rfid_tags table — potential unregistered or foreign tagsCount shown as “23 unknown tags” with expandable detail list
Missing Tags ListExpandable SectionExpected tags (active in rfid_tags at this location) not found during scanHelps identify potentially lost or misplaced inventory
Upload StatusBadge“Pending upload” or “Uploaded” with timestampShows whether scan data has been synced to server
Approve ButtonPrimary ButtonMark session as completed and accept the countMANAGER/OWNER only; writes rfid_scan_sessions.status = 'completed', sets completed_by and completed_at
Recount ButtonSecondary ButtonKeep session open for additional scanning passesReturns to SCR-R05 Section Assignment
Cancel ButtonDestructive ButtonCancel the session entirelyMANAGER/OWNER only; sets rfid_scan_sessions.status = 'cancelled'; scan data preserved for audit

Actions & Transitions

ActionNavigates ToRequires Role
Tap “Approve”SCR-R07 Chunked Upload (if not already uploaded) → SCR-R02 HomeMANAGER, OWNER
Tap “Recount”SCR-R05 Section Assignment (session stays in_progress)MANAGER, OWNER
Tap “Cancel Session”SCR-R02 Home Dashboard (after confirmation dialog)MANAGER, OWNER
Back buttonSCR-R02 Home DashboardALL

G.11.7 Chunked Upload / Sync

AttributeValue
Screen IDSCR-R07
Product(s)Raptag
BRD Section(s)4.6.8
Database Tablesrfid_scan_events (R, local SQLite → W, server PostgreSQL), rfid_scan_sessions (W)
State Machine(s)RFID Session (7.11): in_progress → uploaded
Appendix F Servicesrfid.scan.command.service, rfid.inventory-reconciliation.service
User RolesALL
Offline CapableNo (requires connectivity to upload)
Route/session/:id/sync

Purpose

The Chunked Upload screen manages the transfer of locally-stored RFID scan data from the mobile device to the Central API. Scan events are uploaded in chunks of 5,000 events each, with progress tracking, retry logic for failed chunks, and idempotency guarantees (UNIQUE constraint on session_id + epc prevents duplicate processing on retries).

Key Elements

ElementTypeDescriptionBusiness Rule
Session Upload CardInfo CardSession name, total events to upload, chunk countTotal events / 5,000 = number of chunks (rounded up)
Upload Progress BarDeterminate Progress“Chunk 3 of 7 — 15,000 / 35,000 events”Each chunk = POST to /api/rfid/sessions/:id/upload with 5,000 events
Upload SpeedStats Text“~2,400 events/sec” throughput indicatorCalculated from chunk upload time
Chunk Status ListScrollable ListPer-chunk status: pending, uploading, completed, failedFailed chunks show error message and retry button
Retry Failed ButtonWarning ButtonRetry all failed chunksIdempotent: server uses UNIQUE(session_id, epc) with UPSERT logic; safe to re-send
Connection StatusIndicatorCurrent connectivity stateUpload pauses automatically if connectivity drops; resumes on reconnection
Server ProcessingStatus Text“Server merging operator data…” shown after all chunks uploadedServer-side dedup (keeps highest RSSI per EPC) and variance calculation
Upload Complete SummarySuccess Card“35,000 events uploaded. 4,832 unique tags. Server processing complete.”Shown after server acknowledges all chunks and completes merge
Cancel Upload ButtonText ButtonCancel remaining upload (already-uploaded chunks are preserved)Partial uploads are safe; session stays in_progress for retry later

Actions & Transitions

ActionNavigates ToRequires Role
Upload completeSCR-R06 Session Summary (with server-calculated variance)ALL
Cancel uploadSCR-R02 Home Dashboard (session marked as “pending upload”)ALL
All sessions synced (from pending uploads)SCR-R02 Home Dashboard with cleared “Pending Uploads” badgeALL

G.11.8 Device Pairing

AttributeValue
Screen IDSCR-R08
Product(s)Raptag
BRD Section(s)5.16
Database Tablesdevices (R/W), rfid_config (R)
State Machine(s)
Appendix F Servicesrfid.config.crud.service
User RolesALL (view); MANAGER, ADMIN, OWNER (pair/unpair)
Offline CapablePartial (shows previously paired devices; new pairing requires connectivity)
Route/devices

Purpose

The Device Pairing screen manages the connection between the Raptag mobile app and Zebra RFID readers. Operators pair their phone with a reader using Bluetooth discovery or a 6-character claim code generated in Nexus POS (Settings > RFID > Devices). Once paired, the reader appears on the Home Dashboard status indicator and is available for scanning sessions.

Key Elements

ElementTypeDescriptionBusiness Rule
Paired Device CardInfo CardCurrently paired reader: model (MC3390R / RFD40), serial number, connection type, battery level, firmware versionOne reader per device at a time
Connection StatusStatus Badge“Connected” (green), “Disconnected” (red), “Searching…” (yellow pulse)Based on Bluetooth/WiFi connection state to the reader
Claim Code EntryText Input6-character alphanumeric code for initial reader registrationCode generated in Nexus POS > Settings > RFID > Devices (OWNER); valid for 24 hours; one-time use
Bluetooth DiscoveryButton + ListScan for nearby Bluetooth RFID readersShows discoverable Zebra devices with model and signal strength
Reader DetailsExpandable SectionSerial number, firmware version, last seen, assigned location, read rangeFrom devices table joined with reader registration data
Unpair ButtonDestructive Text ButtonDisconnect and unpair the current readerRequires MANAGER role; clears device association
Test Read ButtonSecondary ButtonFire a single RFID read to verify reader is workingReads one tag and displays EPC + RSSI; confirms hardware connection
Supported Models InfoCollapsible SectionList of supported reader models with specs (MC3390R, RFD40, FX9600)Reference information; not interactive

Actions & Transitions

ActionNavigates ToRequires Role
Successful pairingSCR-R02 Home Dashboard (reader status updated)MANAGER, ADMIN, OWNER
Tap “Test Read”Stay on SCR-R08 (inline result display)ALL
Unpair deviceStay on SCR-R08 (device card cleared)MANAGER, ADMIN, OWNER
Back buttonSCR-R02 Home DashboardALL

G.11.9 Offline Mode Indicator (Cross-Screen Component)

AttributeValue
Screen IDSCR-X03
Product(s)All Roles
BRD Section(s)1.16
Database Tables– (connection state is client-side only)
State Machine(s)Offline Mode (7.12): ONLINE / DEGRADED / OFFLINE
Appendix F Servicessystem.connection-state.service
User RolesALL
Offline CapableN/A (this component IS the offline indicator)

Purpose

The Offline Mode Indicator is a persistent banner component displayed at the top of all Nexus POS screens (all roles). It communicates the current connectivity state to the user using the 3-state model from ADR-048 (ONLINE / DEGRADED / OFFLINE). The banner is minimal when online, becomes more prominent during degraded connectivity, and displays critical information (queue count, staleness warning) when fully offline.

Wireframe

ONLINE (green — minimal, auto-hides after 3 seconds):
┌──────────────────────────────────────────────┐
│  ● Connected                                 │
└──────────────────────────────────────────────┘

DEGRADED (yellow — persistent, subtle):
┌──────────────────────────────────────────────┐
│  ● Limited connectivity — some features      │
│    unavailable                               │
└──────────────────────────────────────────────┘

OFFLINE (red — persistent, prominent):
┌──────────────────────────────────────────────┐
│  ● Offline mode — sales will sync when       │
│    connected. 3 sales queued.                │
│    Prices may be outdated (last sync: 47m)   │
└──────────────────────────────────────────────┘

SYNCING (yellow — persistent, with progress):
┌──────────────────────────────────────────────┐
│  ● Syncing... 2/3 sales uploaded             │
│    ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓░░░░░░░░  67%           │
└──────────────────────────────────────────────┘

Key Elements

ElementTypeDescriptionBusiness Rule
Status DotColored CircleGreen (ONLINE), Yellow (DEGRADED/SYNCING), Red (OFFLINE)Driven by ConnectionMonitor 3-state model
Status TextLabelState-specific message (see wireframe above)ONLINE message auto-hides after 3 seconds; DEGRADED and OFFLINE persist
Queue CountDynamic Text“N sales queued” — count of pending entries in sales_queueOnly shown in OFFLINE state; updated as new offline sales are created
Staleness WarningSubtle Text“Prices may be outdated (last sync: Xm)”Shown when product_cache.last_refreshed > 60 minutes old
Sync ProgressProgress Bar + Text“Syncing… 2/3 sales uploaded” with determinate progress barShown during SYNCING sub-state; transitions to ONLINE when queue is empty

Actions & Transitions

ActionNavigates ToRequires Role
Tap banner (OFFLINE state)Show detail modal: list of queued sales with timestampsALL
Tap banner (SYNCING state)Show detail modal: per-sale sync progress with success/error statusALL
Connection restoresBanner auto-transitions: OFFLINE → SYNCING → ONLINE

G.12 Cross-Cutting Screens

These screens appear across all products and are not tied to a single BRD module.

G.12.1 Login / Authentication

AttributeValue
Screen IDSCR-X01
Product(s)All Roles
BRD Section(s)5.5
Database Tablestenant_users (R), tenants (R), roles (R), role_permissions (R)
State Machine(s)
Appendix F Servicesauth.login.service, auth.token.service
User RolesALL
Offline CapableYes (cached credentials for POS terminal PIN login and Raptag; standard email/password login requires online)
Route/login

Purpose

The login screen is the entry point for both products. Users authenticate with email/password (standard login) or PIN (POS quick-switch for cashiers). On POS and Raptag, cached credentials allow offline login for previously authenticated users. The screen adapts its layout based on the deployment context (web browser for Nexus POS, React Native mobile for Raptag).

Key Elements

ElementTypeDescriptionBusiness Rule
Email FieldInputUser email addressBRD 5.5 — required
Password FieldInputMasked password entryBRD 5.5 — Argon2id hashing
PIN Entry (POS only)Input4-6 digit numeric PIN for quick-switchBRD 5.5 — BCrypt hashing
Tenant SelectorDropdownSelect tenant (multi-tenant users only)BRD 5.5 — row-level isolation
Remember MeCheckboxCache credentials for offline loginADR-048
Offline IndicatorBannerShows connection state if DEGRADED/OFFLINEADR-048
Forgot PasswordLinkTrigger password reset emailBRD 5.5

Actions & Transitions

ActionNavigates ToRequires Role
Login (POS)SCR-M01-01 Sales TerminalCASHIER+
Login (standard)Dashboard (role-appropriate home)MANAGER+
Login (Raptag)SCR-R02 Home DashboardAUDITOR+
Switch User (POS PIN)SCR-M01-01 Sales Terminal (different user)CASHIER+
Forgot PasswordPassword reset email flowALL

G.12.2 Error Pages (403 / 404 / 500)

AttributeValue
Screen IDSCR-X02
Product(s)All
BRD Section(s)
Database Tables
State Machine(s)
Appendix F Services
User RolesALL
Offline CapableYes (static pages bundled with app)
Route/error/403, /error/404, /error/500

Purpose

Standard error pages displayed when a user encounters an authorization failure (403), navigates to a non-existent route (404), or the server returns an unhandled error (500). These pages are statically bundled with each application and work offline. Each provides a clear error message, suggested actions, and a link to navigate back to a known-good state.

Key Elements

ElementTypeDescriptionBusiness Rule
Error CodeHeadingLarge display of 403, 404, or 500
Error MessageTextHuman-readable explanation (e.g., “Page not found”)
Suggested ActionsText“Check the URL” / “Go back” / “Contact support”
Back to HomeButtonNavigate to dashboard
Report IssueLinkOpens support/feedback form

Actions & Transitions

ActionNavigates ToRequires Role
Back to HomeDashboard (role-appropriate home)ALL
Go BackPrevious page (browser history)ALL
Report IssueSupport form / feedback modalALL

G.12.3 Offline Mode Indicator

Note: Full specification for SCR-X03 is provided in G.11 (Raptag section) as it was written by Agent A5 with the complete 3-state + SYNCING wireframe. See G.11 for the detailed specification including the ASCII wireframe showing all 4 states (ONLINE, DEGRADED, OFFLINE, SYNCING).

AttributeValue
Screen IDSCR-X03
Product(s)All Roles
BRD Section(s)1.16, ADR-048
Full SpecificationSee G.11 (Agent A5 output)

G.13 Navigation Flow Maps

These diagrams show the primary user workflows across screens. Screen IDs reference the detailed specifications in G.4-G.12.

G.13.1 Standard Sale Flow (POS)

┌──────────┐    ┌──────────────┐    ┌──────────────┐    ┌──────────────┐    ┌──────────────┐
│ SCR-X01  │    │ SCR-M01-01   │    │ SCR-M01-02   │    │ SCR-M01-04   │    │ SCR-M01-09   │
│ Login    │───►│ Sales        │───►│ Cart Panel   │───►│ Payment /    │───►│ Receipt      │
│          │    │ Terminal     │    │ & Line Items │    │ Checkout     │    │ Print        │
└──────────┘    └──────┬───────┘    └──────────────┘    └──────┬───────┘    └──────────────┘
                       │                                       │
                       ▼                                       ▼
                ┌──────────────┐                        ┌──────────────┐
                │ SCR-M02-01   │                        │ SCR-M01-03   │
                │ Customer     │                        │ Discount     │
                │ Lookup       │                        │ Modal        │
                └──────────────┘                        └──────────────┘

G.13.2 Return / Exchange Flow (POS)

┌──────────┐    ┌──────────────┐    ┌──────────────┐    ┌──────────────┐    ┌──────────────┐
│ SCR-M01  │    │ SCR-M01-14   │    │ Item         │    │ Refund       │    │ SCR-M01-09   │
│ -01      │───►│ Return       │───►│ Selection    │───►│ Method       │───►│ Receipt      │
│ Terminal │    │ Processing   │    │ (within      │    │ Selection    │    │ Print        │
│          │    │ (Receipt     │    │  SCR-M01-14) │    │ (within      │    │              │
│          │    │  Lookup)     │    │              │    │  SCR-M01-14) │    │              │
└──────────┘    └──────────────┘    └──────────────┘    └──────────────┘    └──────────────┘
                                                               │
                                                               ▼
                                                        ┌──────────────┐
                                                        │ SCR-M01-15   │
                                                        │ Exchange     │
                                                        │ (optional)   │
                                                        └──────────────┘

G.13.3 Cash Drawer Lifecycle (POS)

┌──────────────┐    ┌──────────────┐    ┌──────────────┐    ┌──────────────┐
│ SCR-M01-10   │    │ Sales Day    │    │ SCR-M01-10   │    │ SCR-M01-10   │
│ Cash Drawer  │───►│ (Multiple    │───►│ X-Report     │───►│ Z-Report     │
│ Open         │    │  sales via   │    │ (Mid-day     │    │ (End-of-day  │
│ (Starting $) │    │  SCR-M01-01) │    │  read-only)  │    │  close out)  │
└──────────────┘    └──────────────┘    └──────────────┘    └──────────────┘

G.13.4 Purchase Order Flow (BUYER+ / MANAGER+)

┌──────────────┐    ┌──────────────┐    ┌──────────────┐    ┌──────────────┐
│ SCR-M04-04   │    │ SCR-M04-05   │    │ SCR-M04-07   │    │ SCR-M04-08   │
│ PO Create /  │───►│ PO Approval  │───►│ Receiving &  │───►│ Receiving    │
│ Edit         │    │ / Track      │    │ Inspection   │    │ Variance     │
│              │    │              │    │              │    │ (if needed)  │
└──────────────┘    └──────────────┘    └──────────────┘    └──────────────┘
       ▲
       │
┌──────────────┐
│ SCR-M04-06   │
│ PO Templates │
│ (optional)   │
└──────────────┘

G.13.5 Stock Count Flow (MANAGER+ / CASHIER+ / Raptag)

┌──────────────┐    ┌──────────────┐    ┌──────────────────────┐    ┌──────────────┐
│ SCR-M04-09   │    │ SCR-M04-10   │    │ Count Entry:         │    │ SCR-M04-13   │
│ Stock Count  │───►│ Count Freeze │───►│ SCR-M04-11 (Scanner) │───►│ Count        │
│ Session      │    │ Manager      │    │ SCR-M04-12 (RFID)    │    │ Results      │
│ (Create)     │    │              │    │ SCR-R04 (Raptag)     │    │ Review       │
└──────────────┘    └──────────────┘    └──────────────────────┘    └──────┬───────┘
                                                                          │
                                                                          ▼
                                                                   ┌──────────────┐
                                                                   │ SCR-M04-14   │
                                                                   │ Count        │
                                                                   │ Approval     │
                                                                   └──────────────┘

G.13.6 RFID Count Flow (Raptag Mobile)

┌──────────┐    ┌──────────┐    ┌──────────┐    ┌──────────┐    ┌──────────┐    ┌──────────┐
│ SCR-R01  │    │ SCR-R02  │    │ SCR-R03  │    │ SCR-R04  │    │ SCR-R06  │    │ SCR-R07  │
│ Login    │───►│ Home     │───►│ Join /   │───►│ Scanning │───►│ Session  │───►│ Chunked  │
│          │    │ Dashboard│    │ Start    │    │ Interface│    │ Summary  │    │ Upload   │
│          │    │          │    │ Session  │    │          │    │          │    │ / Sync   │
└──────────┘    └──────────┘    └──────────┘    └────┬─────┘    └──────────┘    └──────────┘
                                                     │
                                                     ▼
                                              ┌──────────┐
                                              │ SCR-R05  │
                                              │ Section  │
                                              │ Progress │
                                              └──────────┘

G.13.7 Onboarding Flow (OWNER — New Tenant)

┌──────────────────────────────────────────────────────────────────────────────────┐
│                        SCR-M05-01 Onboarding Wizard                             │
│                                                                                  │
│  Step 1    Step 2     Step 3   Step 4    Step 5     Step 6    Step 7             │
│  Company → Locations → Tax   → Payment → Receipt → Users  → Registers          │
│  Profile   Setup      Config   Setup     Template   & Roles  Setup              │
│                                                                                  │
│  Step 8     Step 9      Step 10    Step 11       Step 12     Step 13             │
│  Product  → Inventory → Category → Integration → Printer  → Go-Live            │
│  Import     Sync        Setup      Setup         Setup       Checklist          │
└──────────────────────────────────────────────────────────────────────────────────┘

G.13.8 Integration Setup Flow (OWNER)

┌──────────────┐    ┌──────────────┐    ┌──────────────┐    ┌──────────────┐
│ SCR-M06-01   │    │ Provider     │    │ SCR-M06-03   │    │ SCR-M06-10   │
│ Integration  │───►│ Setup:       │───►│ Sync Config  │───►│ Inventory    │
│ Hub          │    │ SCR-M06-02   │    │ (rules,      │    │ Sync         │
│ Dashboard    │    │ SCR-M06-05   │    │  buffers)    │    │ Dashboard    │
│              │    │ SCR-M06-07   │    │              │    │              │
└──────────────┘    └──────────────┘    └──────────────┘    └──────────────┘
                                                                   │
                                                                   ▼
                                                            ┌──────────────┐
                                                            │ SCR-M06-11   │
                                                            │ Health       │
                                                            │ Monitor      │
                                                            └──────────────┘

G.14 Screen Statistics & Traceability Matrix

G.14.1 Screen Count Summary

CategoryCount
Module 1: Sales22
Module 2: Customers10
Module 3: Catalog18
Module 4: Inventory23
Module 5: Setup & Config22
Module 6: Integrations12
Raptag Mobile8
Cross-Cutting3
Total118

G.14.2 Product Distribution

ProductScreensNotes
Nexus POS (Web App)107All roles access the same web app; visibility controlled by role-based routing
Nexus Raptag (Mobile)8Separate React Native app (ADR-047)
Cross-Cutting (All Products)3Login, Error Pages, Offline Indicator
Total118

Role-Based Screen Access (Nexus POS)

Minimum RoleScreen CountNotes
All Roles16Customer list/profile, product search, inventory list, receiving, stock count, login, etc.
CASHIER+21Sales terminal, cart, payment, receipts, drawer, clock-in, scanner count
MANAGER+35Reports, catalog management, inventory management, user management
OWNER32Setup, integrations, configuration, onboarding, RFID config
BUYER+6Seasons, media manager, PO create, PO templates

G.14.3 Offline Capability

Offline StatusScreen CountNotes
Yes (full offline)14Includes Sales Terminal, Product Search, Receipt, Login, Raptag Scanning
Degraded3Payment (cash only), Raptag Upload (queued), SCR-X03 indicator
No (online required)101All management/config screens, most features beyond basic sales

G.14.4 Role Access Matrix

RoleScreens AccessiblePrimary Modules
OWNER118 (all)Setup (sole access to 8 screens), all others
MANAGER~95Sales, Inventory, Customers, Setup (partial), Integrations
CASHIER~25Sales (primary), basic Customer, basic Inventory
BUYER~20Catalog (primary), Inventory (POs, vendors, reorder)
AUDITOR~15Inventory (counts), Raptag (all), Audit Log

G.14.5 BRD Module Coverage

BRD ModuleTotal BRD SectionsScreens MappedCoverage
Module 1: Sales (1.1-1.20)2022100%
Module 2: Customers (2.1-2.8)810100%
Module 3: Catalog (3.1-3.15)1518100%
Module 4: Inventory (4.1-4.19)1923100%
Module 5: Setup (5.1-5.21)2122100%
Module 6: Integrations (6.1-6.13)1312100%
Module 7: State Machines (7.1-7.16)16Referenced in screens100%

G.14.6 State Machine Traceability

State MachineBRD SectionReferenced By Screens
7.1 Order States7.1SCR-M01-01, SCR-M01-02, SCR-M01-04, SCR-M01-07
7.2 Payment States7.2SCR-M01-04, SCR-M01-05, SCR-M01-06
7.3 Layaway States7.3SCR-M01-05
7.4 Return States7.4SCR-M01-14, SCR-M01-15
7.5 PO States7.5SCR-M04-04, SCR-M04-05, SCR-M04-07
7.6 Transfer States7.6SCR-M04-17
7.7 Count Session States7.7SCR-M04-09, SCR-M04-10, SCR-M04-13, SCR-M04-14
7.8 Adjustment States7.8SCR-M04-15, SCR-M04-16
7.9 RMA States7.9SCR-M04-21
7.10 Reservation States7.10SCR-M04-23
7.11 Gift Card States7.11SCR-M01-08
7.12 Connectivity States7.12SCR-X03
7.13 Integration Sync States7.13SCR-M06-10, SCR-M06-11
7.14 Integration Connection States7.14SCR-M06-01, SCR-M06-02, SCR-M06-05, SCR-M06-07
7.15 Special Order States7.15SCR-M01-16
7.16 Onboarding States7.16SCR-M05-01

G.14.7 ASCII Wireframe Index

#Screen IDScreen NameSection
1SCR-M01-01Sales Terminal / Item EntryG.4.1
2SCR-M01-04Payment / CheckoutG.4.4
3SCR-M01-10Cash Drawer Z-ReportG.4.10
4SCR-M01-14Return ProcessingG.4.14
5SCR-M02-02Customer Profile / DetailG.5.2
6SCR-M03-02Product Detail / EditG.6.2
7SCR-M04-01Inventory DashboardG.7.1
8SCR-M04-04PO Create / EditG.7.4
9SCR-M04-09Stock Count SessionG.7.9
10SCR-M05-01Onboarding Wizard (13 Steps)G.8.1
11SCR-M06-01Integration Hub DashboardG.9.1
12SCR-R04Scanning InterfaceG.11.4
13SCR-X03Offline Mode IndicatorG.11.9

G.15 Document Information

AttributeValue
Version7.0.0
CreatedMarch 1, 2026
UpdatedMarch 2, 2026
AuthorClaude Code UI/UX Team
StatusActive
AppendixG
Total Screens118
ASCII Wireframes13
BRD Version20.0

Change Log

VersionDateChanges
7.0.02026-03-02Unified web app pivot: removed Tauri/desktop references, “Nexus Admin” product eliminated. Nexus POS is now a single React web app (ADR-052). Product(s) field changed from POS/Admin/Both to role-based values (All Roles, CASHIER+, MANAGER+, OWNER, BUYER+, Raptag). G.2 rewritten for 2 products. G.10 POS vs Admin navigation comparison replaced with role-based navigation visibility table. G.10.2 hardware integration updated: Tauri Rust commands replaced with Star WebPRNT, WebUSB, Stripe Terminal JS SDK. G.10.3 SQLite fallback updated to SQLite WASM (sql.js/wa-sqlite + OPFS). G.14 statistics rewritten with role-based screen distribution. All 118 screen entries updated.
6.4.02026-03-01Initial release: 118 screens cataloged (7 modules + Raptag + cross-cutting). 13 ASCII wireframes. Full BRD traceability.

This appendix is part of the POS Blueprint Book. All content is self-contained.