Skip to content

E7-F5: Quota Claiming Process

Epic: E7: Quota Management

Size: M (Medium)

Problem / Outcome

Quota holders claim tickets via web or mobile.

Scope

In-Scope:

  • Step 1: Select tickets (numbered) or quantity (non-numbered)
    • Tickets displayed as cards in grid layout (no seat map)
    • Each card shows sector, row, seat number
    • Tap cards to select/deselect
  • Step 2: Enter ticket holder info
  • Step 3: Payment (if required) or skip if free
  • Status transitions: ALLOCATED -> RESERVED -> SOLD

Out-of-Scope:

  • Partial claiming validation

Acceptance Criteria

  • AC1: Step 1 displays tickets as cards in grid layout (not seat map)
  • AC2: Step 1 allows selecting tickets (numbered) or quantity (non-numbered)
  • AC3: Step 2 saves ticket holder info, status becomes RESERVED
  • AC4: Step 3 completes payment (or skip if free), status becomes SOLD
  • AC5: Step 2 rejects duplicate OIB/passport within the form and against all existing tickets for the match

Data Model Impact

QuotaSeat table:
- status transitions: ALLOCATED -> RESERVED -> SOLD

QuotaTicketHolder table:
- id (UUID, PK)
- quota_seat_id (UUID, FK)
- full_name (VARCHAR)
- oib (VARCHAR, encrypted)
- email (VARCHAR)
- entered_at (TIMESTAMP)

QuotaClaim table:
- id (UUID, PK)
- quota_id (UUID, FK)
- step (INTEGER: 1, 2, 3)
- seats_selected (UUID[])
- ticket_holders_json (JSONB)
- payment_status (ENUM)
- completed_at (TIMESTAMP)

Permissions/Roles

  • Quota Holder

How to Verify

npm test -- --grep "quota claiming"

Expected: 3-step flow works, statuses transition correctly.

Dependencies

Implementation Tasks

See E7: Quota Management Tasks

Doc References


Last Updated: January 2026