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¶
Doc References¶
Last Updated: January 2026