[E07] Event Pre-assignment

Summary

Event-scoped screen where an organiser pre-assigns numbers ahead of an event. Two main paths: auto-assign for unassigned EPs (via RaceNumberPoolService) and bulk carry-over from a previous event for the same person.

Surfaces the cascade-preview UI honouring ADR-0006 (UNFIT-latest EPs forced to manual assignment).

Actor & Context

Actor: event organiser, tenant admin. Frequency: a few times per event (after registration, before event finalisation). Precondition: event exists with EPs; tenant has stock; user has EVENT_MANAGER+ permission. Entry point: Event mode-nav Pre-assignment (or whatever the design pass settles on); link from E01 finalisation readiness panel.

Main Flow

  1. Render unassigned EPs filtered by event.

  2. Auto-assign action — kicks off allocation for unassigned EPs.

  3. Bulk carry-over action — copies assignments from a previous event for the same person.

  4. Per-EP review row with manual override link to C04.

  5. Cascade preview honouring ADR-0006.

Alternative Flows

  • AF-1: All EPs assigned — page shows All assigned state with no actions.

  • AF-2: UNFIT-latest EPs cannot auto-resolve — visually distinguished as awaiting manual assignment — latest was UNFIT; link to C04 for manual selection.

  • AF-3: Stock insufficient for auto-assign — surface counts + suggest top-up via tenant inventory.

Acceptance Criteria

  • Use-case page authored.

  • Status design-todo → handoff-ready after Claude Design pass.

  • Implementation surfaces existing WS2 auto-assign + carry-over endpoints.

  • EPs with UNFIT-latest flagged per ADR-0006.

  • Cascade preview shown before destructive actions.

API Surface

Call Purpose

GET /api/event-participants?eventId={id}&assigned=false

List unassigned EPs.

POST /api/race-numbers/auto-assign

Auto-assign via RaceNumberPoolService.

POST /api/race-numbers/carry-over

Bulk copy from previous event.

(delegates to C04 for manual reassignment)

Cross-cutting reassignment dialog.

Out of Scope

  • Tenant-level stock browsing — T02.

  • Reassignment dialog itself — C04.

  • Stock return + bulk flag — T03 + T04.

Design Anchors

Notes

Backend WS2 already shipped. Implementation surfaces the existing endpoints; no new backend work expected.