← Anomaly Upload Validator

Anomaly Upload Validator · Specification artifact

User Stories & Acceptance Criteria

The work decomposed into shippable pieces.

This page is rendered from that DOCX. Same document, same words.

Anomaly Upload Validator — User Stories & Acceptance Criteria

Platform A · Internal Tool · v3.1.4 · September 2026

Overview

This document contains the user stories and acceptance criteria for the Anomaly Upload Validator. Stories are organized by epic and reflect delivered functionality as of v3.1.4. Each story follows the format: "As a [persona], I want [capability], so that [outcome]." Acceptance criteria are written as testable, unambiguous conditions.

Story Map

Story Map
EpicNameStoriesVersionStatus
EP-01File Ingestion3 storiesv1.0–v2.3✅ Done
EP-02Validation4 storiesv1.0–v1.2✅ Done
EP-03Status & Compliance3 storiesv1.1–v1.2✅ Done
EP-04Conversion Engine4 storiesv2.0–v2.1✅ Done
EP-05Manual Review Resolution2 storiesv2.0✅ Done
EP-06Results Dashboard2 storiesv1.0–v2.0✅ Done
EP-07Export5 storiesv1.0–v2.7✅ Done
EP-08Output Fidelity4 storiesv2.7.1–v3.1.4✅ Done

EP-01 — File Ingestion

Uploading raw source platform exports into the tool.

US-01 — Upload a dataset file

EP-01 — File Ingestion
FieldDetail
PersonaData Coordinator
PriorityMust Have
StatusDone
Versionv1.0

User Story:

As a Data Coordinator, I want to upload a CSV or XLSX file by dragging it into the tool or browsing for it, so that I can begin validating a dataset without needing any technical setup.

Acceptance Criteria

US-02 — Have column names normalized automatically

EP-01 — File Ingestion
FieldDetail
PersonaData Coordinator
PriorityMust Have
StatusDone
Versionv1.0

User Story:

As a Data Coordinator, I want the tool to automatically handle common column name variations in source platform exports, so that I don't have to manually rename columns before uploading.

Acceptance Criteria

Note: Alias map is defined as a named constant in the tool script. Engineering can extend it without touching validation logic.

US-25 — Upload a file that has a metadata preamble above the header row

EP-01 — File Ingestion
FieldDetail
PersonaData Coordinator
PriorityMust Have
StatusDone
Versionv2.3

User Story:

As a Data Coordinator, I want a file whose header row sits below several rows of metadata to be read correctly, so that I do not have to delete rows by hand before uploading.

Acceptance Criteria

Note: Before v2.3 the tool assumed row 1 was the header, so any export carrying a preamble failed at ingestion.

EP-02 — Validation

Checking datasets against the Platform A upload specification.

US-03 — See which required columns are missing

EP-02 — Validation
FieldDetail
PersonaData Coordinator
PriorityMust Have
StatusDone
Versionv1.0

User Story:

As a Data Coordinator, I want the tool to tell me which required columns are missing from my dataset, so that I can fix the file before attempting an upload.

Acceptance Criteria

US-04 — See which rows have field errors

EP-02 — Validation
FieldDetail
PersonaData Coordinator
PriorityMust Have
StatusDone
Versionv1.0

User Story:

As a Data Coordinator, I want to see exactly which rows have missing or incorrectly formatted required fields, so that I know what needs to be fixed before the dataset can be uploaded.

Acceptance Criteria

US-05 — Validate Blade Side using full descriptive names

EP-02 — Validation
FieldDetail
PersonaData Coordinator
PriorityMust Have
StatusDone
Versionv1.2

User Story:

As a Data Coordinator, I want the tool to accept both abbreviated codes and full descriptive names for Blade Side values, so that datasets using either naming convention pass validation without manual editing.

Acceptance Criteria

Note: Expanded in v1.2. Original v1.0 accepted two-character codes only.

US-06 — See conditional field warnings separately from hard errors

EP-02 — Validation
FieldDetail
PersonaEngineering / Data Lead
PriorityMust Have
StatusDone
Versionv1.2

User Story:

As a Engineering / Data Lead, I want conditional field format issues to appear as Warnings rather than Errors, so that they don't inflate the error count or block the export.

Acceptance Criteria

Note: Serial Number demoted from Required to Conditional in v1.2.

EP-03 — Status & Compliance

Understanding dataset health at a glance.

US-07 — See an overall compliance score

EP-03 — Status & Compliance
FieldDetail
PersonaOperations Manager
PriorityMust Have
StatusDone
Versionv1.1

User Story:

As an Operations Manager, I want to see a single compliance score for the dataset, so that I can quickly understand its overall readiness for upload without reviewing every row.

Acceptance Criteria

US-08 — Distinguish between hard errors and check-internally flags

EP-03 — Status & Compliance
FieldDetail
PersonaData Coordinator
PriorityMust Have
StatusDone
Versionv1.1

User Story:

As a Data Coordinator, I want empty Asset and Coordinates fields to be flagged differently from hard errors, so that I'm not penalised for information that may already exist in our internal records.

Acceptance Criteria

US-09 — Filter the issues table by status type

EP-03 — Status & Compliance
FieldDetail
PersonaData Coordinator
PriorityMust Have
StatusDone
Versionv1.0

User Story:

As a Data Coordinator, I want to filter the issues table by status type, so that I can focus on one category of issue at a time.

Acceptance Criteria

EP-04 — Conversion Engine

Transforming Input Source field values across three nomenclature systems.

US-10 — Have Element values derived and converted automatically

EP-04 — Conversion Engine
FieldDetail
PersonaData Coordinator
PriorityMust Have
StatusDone
Versionv2.0 / v2.1

User Story:

As a Data Coordinator, I want the tool to automatically build the Input Source Component value from the raw data columns and look up its Platform A and Platform B equivalents, so that I don't have to manually apply conversion formulas.

Acceptance Criteria

Note: Multi-format support (Material vs Element fallback) and ISBLANK→LEN fix added in v2.1.

US-11 — Have Anomaly Type values derived and converted automatically

EP-04 — Conversion Engine
FieldDetail
PersonaData Coordinator
PriorityMust Have
StatusDone
Versionv2.0 / v2.1

User Story:

As a Data Coordinator, I want the tool to automatically build the Input Source Damage Type value and look up its Platform A and Platform B equivalents, so that damage type conversion happens without any manual steps.

Acceptance Criteria

Note: Type vs Anomaly Type column fallback added in v2.1. Fixes the trailing dash bug.

US-12 — Have Blade Side values translated automatically

EP-04 — Conversion Engine
FieldDetail
PersonaData Coordinator
PriorityMust Have
StatusDone
Versionv2.0

User Story:

As a Data Coordinator, I want Blade Side values to be translated to Platform A and Platform B equivalents automatically, so that source values are correctly mapped without manual intervention.

Acceptance Criteria

US-13 — Process datasets from multiple source platform export formats

EP-04 — Conversion Engine
FieldDetail
PersonaData Coordinator
PriorityMust Have
StatusDone
Versionv2.1

User Story:

As a Data Coordinator, I want the tool to correctly process datasets from different clients even when the column structure varies, so that I don't have to manually reformat files before uploading.

Acceptance Criteria

Note: Added in v2.1 following Format B dataset testing.

EP-05 — Manual Review Resolution

Human-in-the-loop handling of unmatched conversion values.

US-14 — Resolve unmatched conversion values inline

EP-05 — Manual Review Resolution
FieldDetail
PersonaData Coordinator
PriorityMust Have
StatusDone
Versionv2.0

User Story:

As a Data Coordinator, I want to resolve Manual Review flags directly in the tool using a dropdown, so that I can correct unmatched values without leaving the browser or editing the source file.

Acceptance Criteria

US-15 — Be prevented from exporting until all Manual Reviews are resolved

EP-05 — Manual Review Resolution
FieldDetail
PersonaData Coordinator
PriorityMust Have
StatusDone
Versionv2.0

User Story:

As a Data Coordinator, I want the Export Converted XLSX button to be locked until all Manual Review flags are resolved, so that I can't accidentally export a file with unresolved values.

Acceptance Criteria

EP-06 — Results Dashboard

Operational visibility into dataset health and content.

US-16 — See a summary of dataset statistics

EP-06 — Results Dashboard
FieldDetail
PersonaOperations Manager
PriorityMust Have
StatusDone
Versionv1.0

User Story:

As an Operations Manager, I want to see a summary of the dataset's content alongside validation results, so that I can confirm the scope of data being processed without opening the source file.

Acceptance Criteria

US-17 — See conversion statistics alongside validation results

EP-06 — Results Dashboard
FieldDetail
PersonaData Coordinator
PriorityMust Have
StatusDone
Versionv2.0

User Story:

As a Data Coordinator, I want to see how many fields were auto-converted and how many need manual review at a glance, so that I know immediately how much work is required before I can export.

Acceptance Criteria

EP-07 — Export

Producing outputs for upload and internal records.

US-18 — Export a validation issues report

EP-07 — Export
FieldDetail
PersonaData Coordinator
PriorityMust Have
StatusDone
Versionv1.0

User Story:

As a Data Coordinator, I want to download a CSV report of all validation issues, so that I can share it with the data team or keep it as a record.

Acceptance Criteria

US-19 — Export a converted XLSX working document

EP-07 — Export
FieldDetail
PersonaData Coordinator
PriorityMust Have
StatusDone
Versionv2.0

User Story:

As a Data Coordinator, I want to download a formatted XLSX file with all three nomenclature columns populated, so that I have a working document ready for Platform A upload and Platform B submission.

Acceptance Criteria

US-20 — Have the Conversions tab be editable and extensible

EP-07 — Export
FieldDetail
PersonaEngineering / Data Lead
PriorityShould Have
StatusDone
Versionv2.0

User Story:

As a Engineering / Data Lead, I want the Conversions tab in the exported XLSX to be structured and editable, so that I can add new mapping rows when new damage types or component combinations appear.

Acceptance Criteria

US-26 — Open image links directly from the exported report

EP-07 — Export
FieldDetail
PersonaData Coordinator
PriorityShould Have
StatusDone
Versionv2.6–v2.7

User Story:

As a Data Coordinator, I want the image links in the exported report to be clickable, so that I can open a referenced image without copying a URL out of a cell.

Acceptance Criteria

Note: AC-04 is the v2.7 fix. Reading a hyperlink returns its XML entities still encoded, and writing it back encodes them a second time; the resulting URL failed signature matching at the storage provider. Entities are now decoded on ingestion. Links are time-limited by the source system, roughly a 30 day window, which the tool does not yet warn about.

US-27 — Distinguish the blade from the two serial numbers in the output

EP-07 — Export
FieldDetail
PersonaEngineering / Data Lead
PriorityMust Have
StatusDone
Versionv2.5

User Story:

As an Engineering / Data Lead, I want the blade identifier and the two serial numbers to occupy separate output columns, so that the Asset field means one thing and the upload is not carrying a turbine number where a blade letter belongs.

Acceptance Criteria

Note: Before v2.5 the output Asset column carried turbine numbers rather than blade letters. The v2.5 insertion shifted every column after D by one position, which is the root of the width misalignment later fixed at v3.1.1.

EP-08 — Output Fidelity

Four stories covering defects where the tool produced output that looked correct and was not. Each was found after v2.1 and fixed between v2.7.1 and v3.1.4.

US-21 — Read output headers that spell both company names correctly

EP-08 — Output Fidelity
FieldDetail
PersonaEngineering / Data Lead
PriorityMust Have
StatusDone
Versionv2.7.1

User Story:

As an Engineering / Data Lead, I want the derived output column headers to render both company names as those companies write them, so that a downstream consumer matching on header text does not have to match two spellings of the same name.

Acceptance Criteria

Note: The misrendered strings were a single namespace inside the tool — output header, row key, conversion-field label, Manual Review dropdown key and formula lookup key at once. Correcting only the header text would have broken the formulas. LIM-07 is closed by this story.

US-22 — Have dates arrive intact regardless of my timezone

EP-08 — Output Fidelity
FieldDetail
PersonaData Coordinator
PriorityMust Have
StatusDone
Versionv3.0

User Story:

As a Data Coordinator, I want an inspection date to reach the export as the date the file actually contains, so that I am neither shipping the wrong day nor clearing a validation error on every dated row.

Acceptance Criteria

Note: Two faults with one cause: the ingestion path preferred the parser's display formatting over the underlying value. The timezone shift affected CSV inputs only; the format fault affected both input kinds everywhere, including UTC.

US-23 — Have every column I supply reach the export

EP-08 — Output Fidelity
FieldDetail
PersonaData Coordinator
PriorityMust Have
StatusDone
Versionv3.1

User Story:

As a Data Coordinator, I want a column I supplied to carry its values into the export, so that a blank column means the data was absent rather than lost.

Acceptance Criteria

Note: The alias map normalises Blade Chamber to BladeChamber and Chord (%) to Chord(%) on ingestion; the export then looked them up by header text, which retains the space, and both lookups missed. All 39 output columns were audited for the same mismatch — these two were the whole set.

US-24 — Read the exported report without resizing columns

EP-08 — Output Fidelity
FieldDetail
PersonaData Coordinator
PriorityShould Have
StatusDone
Versionv3.1.1–v3.1.4

User Story:

As a Data Coordinator, I want each column in the exported report to be wide enough for what it holds, so that I can read a delivered file without resizing columns by hand.

Acceptance Criteria

Note: The width list had been one entry short since the v2.5 column insertion, so every column from E onward wore its right-hand neighbour's width. Input Source Component carries a deliberate exception to the general width ceiling, because it is the lookup key the Platform A and Platform B formulas read.

Anomaly Upload Validator · Platform A · Internal Use Only · v3.1.4 · September 2026 · 27 Stories across 8 Epics

← Back to the Anomaly Upload Validator case study