Skip to content

E4-F5: Checkout Ticket Holder Entry

Epic: E4: Ticket Purchase Flow

Size: M (Medium)

Problem / Outcome

User enters ticket holder information for each ticket.

Scope

In-Scope:

  • Primary buyer auto-filled from default profile
  • Additional tickets allow profile selection or manual entry
  • Email field with minor restrictions
  • Blacklist check integration

Out-of-Scope:

  • Changing primary buyer

Acceptance Criteria

  • AC1: Ticket 1 auto-filled with logged-in user's default profile (read-only)
  • AC2: Additional tickets allow saved profile selection or manual entry
  • AC3: Minor ticket holders (under 18) have email field disabled with info message
  • AC4: Each OIB (Croatians) or passport number (foreigners) must be unique per match — reject if already used on another ticket for the same match

Data Model Impact

TicketHolder table:
- id (UUID, PK)
- ticket_id (UUID, FK)
- full_name (VARCHAR)
- date_of_birth (DATE)
- nationality (VARCHAR)
- oib (VARCHAR, encrypted)
- email (VARCHAR, nullable)
- is_minor (BOOLEAN)
- source (ENUM: default_profile, saved_profile, manual_entry)

Permissions/Roles

  • Authenticated user

How to Verify

npm test -- --grep "checkout ticket holder"

Expected: Primary buyer locked, minors restricted, profiles selectable.

Dependencies

Implementation Tasks

See E4: Ticket Purchase Tasks

Doc References


Last Updated: January 2026