Event Participant Import Functional Requirements
1. Business Context
Event Participants (EPs) are registered for an event through the Registration Portal during normal operations, but operations staff also need to:
-
Bulk-register participants from a spreadsheet on behalf of a club, school, or federation
-
Migrate participants from a legacy system (WPCA, Cycling SA) while preserving cross-system identity
-
Apply post-registration corrections in bulk when payment, category, or contact data was captured incorrectly
-
Seed an event with a roster before registration opens for testing or closed-club events
A single import run may mix all four use cases: create new participants, update existing ones, apply corrections, and carry forward external PKs from the source system. The import must decide per row whether it is an insert or an update, and produce an unambiguous per-row outcome so that a stakeholder can sign off on the result.
1.1. Scope
In scope:
-
Bulk XLSX import for
EventParticipant(with associatedPerson/User,Address,RaceNumberassignment,Order, and custom-list values) -
Upsert-by-registrationId within a target event
-
Configurable auto-creation of custom-list values (school dropdowns etc.) missing from the master list
-
Per-row outcome (CREATED / UPDATED / SKIPPED / WARNING / ERROR) aggregated into a top-level summary
-
Focused
issueslist containing only non-successful rows
Out of scope (covered elsewhere):
-
Registration Portal form-driven registration (see Form System)
-
Membership import (similar but distinct pipeline, see Membership Import Design)
-
Async/interactive import flows for unresolved references (see Async Import Architecture)
2. Functional Requirements
2.1. FR-EP-001: Bulk XLSX Import Endpoint (async)
| ID | FR-EP-001 |
|---|---|
Title |
Bulk XLSX Event Participant Import (async) |
Priority |
High |
Description |
The system shall expose a single HTTP endpoint that accepts an XLSX workbook and bulk-registers every non-blank row as an |
Acceptance Criteria |
|
2.2. FR-EP-002: Flexible Header Recognition
| ID | FR-EP-002 |
|---|---|
Title |
Dictionary-Based Header Alias Matching |
Priority |
High |
Description |
The system shall recognise column headers via a case-insensitive alias dictionary, so operators can use the natural label from their source spreadsheet rather than a fixed EMS-specific name. |
Acceptance Criteria |
|
2.3. FR-EP-003: Upsert by Registration ID
| ID | FR-EP-003 |
|---|---|
Title |
Upsert by registrationId within Event Scope |
Priority |
High |
Description |
Where a row supplies a |
Acceptance Criteria |
|
2.4. FR-EP-004: Person Matching
| ID | FR-EP-004 |
|---|---|
Title |
Identity-Based Person Matching |
Priority |
High |
Description |
When a row does not upsert an existing EP, the system shall attempt to match the row’s identity fields (ID number, email, first + last name + DOB) to an existing |
Acceptance Criteria |
|
Related |
2.5. FR-EP-005: Custom List Value Resolution and Auto-Creation
| ID | FR-EP-005 |
|---|---|
Title |
Resolve and Optionally Create Custom List Values |
Priority |
Medium |
Description |
For custom-list columns (e.g. school dropdown), the system shall resolve the row’s text value against the target |
Acceptance Criteria |
|
2.6. FR-EP-006: Race Number Assignment
| ID | FR-EP-006 |
|---|---|
Title |
Optional Race Number Assignment on Import |
Priority |
Medium |
Description |
Where a row supplies a |
Acceptance Criteria |
|
2.7. FR-EP-007: Order and Order Line Item Handling
| ID | FR-EP-007 |
|---|---|
Title |
Associate Order on Import |
Priority |
Medium |
Description |
Where a row supplies order information ( |
Acceptance Criteria |
|
2.8. FR-EP-008: Per-Row Outcome Classification
| ID | FR-EP-008 |
|---|---|
Title |
Classify Every Row with a Named Outcome |
Priority |
High |
Description |
Every data row shall produce exactly one outcome in the response, chosen from a closed set, so that the operator can reason about the file in aggregate. |
Acceptance Criteria |
|
2.9. FR-EP-009: Focused Issues List and Summary
| ID | FR-EP-009 |
|---|---|
Title |
Summary Counters + Focused Issues List |
Priority |
High |
Description |
The response shall contain top-level counters for the five outcomes and an |
Acceptance Criteria |
|
2.10. FR-EP-010: Idempotent Re-Import
| ID | FR-EP-010 |
|---|---|
Title |
Idempotent Re-Import |
Priority |
High |
Description |
Re-importing an unchanged file against the same event shall produce the same end-state. Every row that was |
Acceptance Criteria |
|
2.11. FR-EP-011: Error Isolation
| ID | FR-EP-011 |
|---|---|
Title |
Row-Level Error Isolation |
Priority |
High |
Description |
An exception processing one row shall not prevent the rest of the file from being processed. Each row is its own transactional unit. |
Acceptance Criteria |
|
2.12. FR-EP-012: External ID Preservation for Cross-System Migration
| ID | FR-EP-012 |
|---|---|
Title |
Preserve Legacy System External IDs |
Priority |
Medium |
Description |
The system shall preserve both Person-level and EP-level external identifiers from a source system, so that downstream integrations (timing exports, federation feeds) can cross-reference records. |
Acceptance Criteria |
|
2.13. FR-EP-013: Default Values
| ID | FR-EP-013 |
|---|---|
Title |
Column-Specific Defaults |
Priority |
Low |
Description |
Missing values for certain columns shall fall back to documented defaults rather than failing. |
Acceptance Criteria |
|
3. Non-Functional Requirements
3.1. NFR-EP-001: Throughput
The system shall accept an import upload within 5 seconds end-to-end (synchronous upload response, before background processing starts). Background processing of up to 500 rows shall complete within 60 seconds wall-clock; files up to 1,500 rows are observed to complete within 180 seconds. The async delivery mode removes the prior nginx/gateway-timeout cap — the HTTP request returns 202 Accepted as soon as the job is persisted. Post-upload processing latency is observable via the import.processWholeFile Micrometer timer (tag importType=EVENT_PARTICIPANT).
4. Traceability
| Artefact | Reference |
|---|---|
ADO Feature |
#442 (WPCA Event Migration — EP Import & Result Import Improvements) |
ADO User Story |
#443 (EP Import: registrationId Population & Upsert) |
Design Journal |
|
Design Doc |
|
Operations Runbook |