[E08] Import Results

Summary

Result-import bookends of the async import flow. Mirrors E06; reuses C05 for the mapping middle steps. Drives an event organiser through uploading a results CSV/XLSX, resolving any mappings, and reviewing the per-row reconciliation including unresolved EPs and DNF/DNS/Drop entries.

Actor & Context

Actor: event organiser, results officer, tenant admin. Frequency: per event (initial result import, corrections during the verification window). Precondition: event has finished; EPs exist; user has EVENT_MANAGER or RESULTS_OFFICER permission. Entry point: Import results button on E04 Event Results; from E05's Results unverified pill click.

Main Flow

  1. Upload screen. File picker (CSV/XLSX), result-import-specific options:

    • registrationId resolution mode (per US #457).

    • DNF / DNS / Drop status handling toggle (per US #457).

    • Repeated header tolerance (per Bug #453).

  2. User clicks Upload — write localStorage.importCaller = 'e08', then POST /api/imports.

  3. Redirect to C05 for column / cell mapping + progress.

  4. C05 redirects back on completion to the summary screen.

  5. Summary screen. Per-row reconciliation:

    • Created / updated result counts.

    • Unresolved EPs surfaced as actionable issues (US #456).

    • DNF / DNS / Drop entries reported separately (US #457).

    • Non-data-line counts (US #455).

    • Link to E04 for follow-up.

Alternative Flows

  • AF-1: Re-import during correction window — existing results updated; summary distinguishes new vs corrected.

  • AF-2: Re-import after correction window closed — soft warning; user must confirm before submit.

  • AF-3: Cancel / fatal error — same patterns as E06.

Acceptance Criteria

  • Use-case page authored.

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

  • :design-url: populated.

  • Cross-references C05 + E04 + E05.

  • DNF / DNS / Drop entries surfaced separately per US #457.

  • Unresolved EPs surfaced as actionable issues per US #456.

API Surface

Call Purpose

POST /api/imports

Create import job from uploaded file + result-import options.

GET /api/imports/{uuid}/results

Driving the summary screen.

(delegates to C05 for column / cell / progress)

Shared mapping flow.

Out of Scope

  • The mapping middle steps — C05.

  • EP-import bookends — E06.

  • Mass result correction tooling — separate Feature.

Design Anchors

Notes

Backend result-import improvements: PR #146 (merged) + PR #147 (in flight). USs #455–#458 detail the row-level reporting nuances the summary screen must surface.