E9-F5: Ticket Transfer (Self-Service)¶
Epic: E9: Ticket Management & Delivery
Size: M (Medium)
Problem / Outcome¶
Users with Transfer=YES tickets can reassign without restrictions.
Scope¶
In-Scope:
- Reassign ticket to new holder (name, OIB, email)
- No time restriction for Transfer=YES tickets
- Blacklist check for new holder
- Immediate transfer
Out-of-Scope:
- Transfer=NO tickets (support-only)
Acceptance Criteria¶
- AC1: Given Transfer=YES, user sees "Reassign Ticket" button
- AC2: User enters new holder details, system validates blacklist
- AC3: Ticket transferred immediately, notifications sent to both parties
Data Model Impact¶
Ticket table:
- transfer_allowed (BOOLEAN)
- holder_* fields updated on transfer
TransferLog table:
- id (UUID, PK)
- ticket_id (UUID, FK)
- from_holder_name (VARCHAR)
- from_holder_oib (VARCHAR, encrypted)
- to_holder_name (VARCHAR)
- to_holder_oib (VARCHAR, encrypted)
- to_holder_email (VARCHAR)
- transfer_type (ENUM: self_service, support)
- initiated_by (UUID, FK)
- transferred_at (TIMESTAMP)
Permissions/Roles¶
- Ticket holder (owner)
How to Verify¶
npm test -- --grep "self-service transfer"
Expected: Transfer completes, notifications sent.
Dependencies¶
- E9-F1: Ticket Generation with QR Code
- E11-F3: Blacklist Check Service
- E15-F1: Transactional Email Service
Implementation Tasks¶
See E9: Ticket Management Tasks
Doc References¶
Last Updated: January 2026