Anomaly Upload Validator · Specification artifact
Data Dictionary
Every field, its source schema, and how it maps across vendor, platform, and client.
Overview
This data dictionary defines every field processed by the Anomaly Upload Validator — from raw the source inspection platform export columns through to derived conversion output columns in the exported XLSX. It covers field names, source column mappings, data types, classification, validation rules, and conversion output targets.
Field Classification Key
| Classification | Meaning |
|---|---|
| Required | Must be present and non-empty in every data row. Missing or invalid values raise an Error. |
| Conditional | Optional. No flag raised if absent or empty. Format validated only when populated. |
| Check Internally | Required in principle but may exist in internal records. Empty → Check Internally flag (not Error); excluded from compliance score. |
| Raw | Source columns used only as inputs to derivation formulas. Not directly validated. |
| Derived | Computed by the tool from raw source columns. Written to the output XLSX as VLOOKUP formulas. |
Column Alias Map
The tool normalizes the following column name variants before validation. Applied silently at ingestion.
| Raw Column Name | Normalized To | Notes |
|---|---|---|
Date | Inspection Date | the Source Platform uses 'Date'; platform requires 'Inspection Date' |
Blade Chamber | BladeChamber | Space removed to match platform column spec |
Chord (%) | Chord(%) | Parenthetical formatting normalized |
Turbine Serial Number | Serial Number | the Source Platform full label mapped to platform short label |
Links | Source Images | the Source Platform uses 'Links'; platform expects 'Source Images' |
Field Reference
All fields listed in the order they appear in the Damages Report output tab.
| Field Name | Source Column(s) | Type | Classification | Format / Validation Rule | Conversion Output |
|---|---|---|---|---|---|
ID | ID | String | Required | Any non-empty value | - |
Site | Site | String | Required | Any non-empty value | - |
Turbine | Turbine | String | Required | Any non-empty value | - |
Asset | Asset | String | Check Internally | Any value; empty → Check Internally flag | - |
Serial Number | Turbine Serial Number (alias) | String | Conditional | No validation; fully optional | - |
Severity | Severity | Integer | Required | Must be exactly 1, 2, 3, 4, or 5 | - |
Critical | Critical | String | Required | "Yes" or "No" (case-insensitive) | - |
Inspection Date | Date (alias) | Date | Required | Must match YYYY-MM-DD exactly | - |
Damage Location | Damage Location | String | Required | "Internal" or "External" (case-insensitive) | - |
Blade | Blade / Asset | String | Required | Single letter A–C. Extracted from Asset if absent or full label ("Blade A"→"A") | - |
Component | Component | String | Raw | Used in Input Component derivation | Input Component (part 1) |
Material | Material | String | Raw | Optional; used as suffix if present | Input Component suffix (Format A) |
Element | Element | String | Raw | Optional; used as suffix if Material absent | Input Component suffix (Format B) |
Type | Type | String | Raw | Optional; used as Damage Type base if present | Input Damage Type base (Format A) |
Anomaly Type | Anomaly Type | String | Raw | Optional; used as base if Type absent | Input Damage Type base (Format B) |
Subtype | Subtype | String | Raw | Optional; appended to Damage Type base if non-empty | Input Damage Type suffix |
Blade Side | Blade Side | String | Required | LE/Leading Edge/TE/Trailing Edge/PS/Pressure Side/SS/Suction Side | the organization + the OEM Blade Side |
BladeChamber | Blade Chamber (alias) | String | Conditional | Any value; no format rule | - |
Distance (m) | Distance (m) | Decimal | Required | Numeric; float noise cleaned to 4dp | - |
Length (m) | Length (m) | Decimal | Required | Numeric; float noise cleaned to 4dp | - |
Width (m) | Width (m) | Decimal | Required | Numeric; float noise cleaned to 4dp | - |
Chord(%) | Chord (%) (alias) | Decimal | Conditional | Numeric if present; float noise cleaned to 4dp | - |
Coordinates | Coordinates | String | Check Internally | Must contain ≥3 [x,y] pairs; empty → Check Internally flag | - |
Source Image Reference | Source Image Reference | String | Required | Any non-empty value (UUID expected) | - |
Source Images | Links / Source Images (alias) | String | Required | Any non-empty URL value | - |
Propagation Type | Propagation Type | String | Conditional | Preserved unchanged | - |
OpSeverity | OpSeverity | String | Conditional | Preserved unchanged | - |
Monitoring Recommendation | Monitoring Recommendation | String | Conditional | Preserved unchanged | - |
Action | Action | String | Conditional | Preserved unchanged | - |
Rule | Rule | String | Conditional | Preserved unchanged | - |
Tasks | Tasks | String | Conditional | Preserved unchanged | - |
Recommendation | Recommendation | String | Conditional | No format rule | - |
Derived Fields
Computed by the tool from raw source columns. Written as VLOOKUP formulas in the output XLSX.
| Field Name | Source | Type | Formula / Lookup | Output |
|---|---|---|---|---|
Input Component | Component + Material or Element | String | IF(LEN(Material)>0, Component&" - "&Material, IF(LEN(Element)>0, Component&" - "&Element, Component)) | the organization + the OEM Element |
the organization Element | Input Component (lookup) | String | IFERROR(VLOOKUP(O, Conversions!A:C, 2, FALSE), "MANUAL REVIEW: "&O) | Output column |
the OEM Element | Input Component (lookup) | String | IFERROR(VLOOKUP(O, Conversions!A:C, 3, FALSE), "MANUAL REVIEW: "&O) | Output column |
Input Damage Type | Type/Anomaly Type + Subtype | String | IF(LEN(Subtype)>0, base&" - "&Subtype, base) | the organization + the OEM Anomaly Type |
the organization Anomaly Type | Input Damage Type (lookup) | String | IFERROR(VLOOKUP(T, Conversions!A:C, 2, FALSE), "MANUAL REVIEW: "&T) | Output column |
the OEM Anomaly Type | Input Damage Type (lookup) | String | IFERROR(VLOOKUP(T, Conversions!A:C, 3, FALSE), "MANUAL REVIEW: "&T) | Output column |
the organization Blade Side | Blade Side (lookup) | String | IFERROR(VLOOKUP(W, Conversions!A:C, 2, FALSE), "MANUAL REVIEW: "&W) | Output column |
the OEM Blade Side | Blade Side (lookup) | String | IFERROR(VLOOKUP(W, Conversions!A:C, 3, FALSE), "MANUAL REVIEW: "&W) | Output column |
Dataset Format Variations
Two distinct the source inspection platform export formats have been identified. Format is detected automatically.
| Field | Format A (Dataset A) | Format B (Dataset B) | Detection Logic |
|---|---|---|---|
| Element source | Component + Material | Component + Element | Check if Material column exists |
| Element formula | Component & " - " & Material | Component & " - " & Element | LEN(Material)>0 → use Material; else use Element |
| Damage Type source | Type + Subtype | Anomaly Type + Subtype | Check if Type column exists |
| Damage Type formula | Type & " - " & Subtype | Anomaly Type & " - " & Subtype | LEN(Type)>0 → use Type; else use Anomaly Type |
| Blade field | Empty — extracted from Asset | "Blade A" — letter extracted | Regex /Blade\s+([A-C])/i |
Conversion Lookup Tables
All valid conversion mappings. These are the same tables stored in the Conversions tab of the exported XLSX.
Element / Component Conversions
Lookup key: Input Component. Conversions tab columns: A (the Source Platform) | B (the organization) | C (the OEM).
| Input Component | the organization Element | the OEM Element |
|---|---|---|
| Blade - Laminate | Laminate | Laminate |
| Blade - Structure | Core Material | Laminate |
| Blade - Surface | Coating | Coating |
| Blade - Through | Core Material | Laminate |
| Blade - Top Coat | Coating | Coating |
| Drainage System - Auxiliary Component | Accessory - Drain Hole | Drain Hole |
| Hub - Auxiliary Component | Other | Other |
| Leading Edge Protection - Auxiliary Component | LEP - Coating | LEP - Tape |
| Lightning Protection System - Auxiliary Component | LPS - Other | LPS - Other |
| Lightning Receptors - Auxiliary Component | LPS - Receptor | LPS - Receptor |
| Other - Auxiliary Component | Other | Other |
| Pitch System - Auxiliary Component | Other | Other |
| Rain Collar - Auxiliary Component | Accessory - Rain/Blade Collar | Add-on - Rain/Blade Collar |
| Serrations - Auxiliary Component | Add-on - TE Serrations | Add-on - TE Serrations |
| Vortex Generators - Auxiliary Component | Add-on - Vortex Generator | Add-on - Vortex Generator |
Anomaly Type Conversions
Lookup key: Input Damage Type. Conversions tab columns: A (the Source Platform) | B (the organization) | C (the OEM).
| Input Damage Type | the organization Anomaly Type | the OEM Anomaly Type |
|---|---|---|
| Bondline | Disbond | Crack - Split |
| Bondline - Crushed | Crush/Impact | Damaged Laminate - Crush/Impact Damage |
| Chip | Chip | Chipped Coat - Chip |
| Chip - Lightning | Lightning - Strike | Lightning Damage - Lightning Strike |
| Crack | Crack - TLC | Crack - Longitudinal |
| Crack - Bond Longitudinal | Crack - Longitudinal | Crack - Longitudinal |
| Crack - Bond Transverse | Crack - Transverse | Crack - Transverse |
| Crack - Diagonal | Crack - TLC | Crack - Diagonal |
| Crack - Fatigue Cracks | Crack - Transverse | Crack - Transverse |
| Crack - Longitudinal | Crack - Longitudinal | Crack - Longitudinal |
| Crack - Spiderweb-shaped | Crack - Diagonal | Crack - Diagonal |
| Crack - T-l-c Shaped | Crack - Diagonal | Crack - Diagonal |
| Crack - Trailing Transverse | Crack - Transverse | Crack - Chordwise |
| Crack - Transverse | Crack - Transverse | Crack - Transverse |
| Damaged | Broken | N/A - Damage |
| Damaged Cover | Other | Other |
| Damaged Or Misaligned | Bent/Deformed | N/A - Damage |
| Damaged Or Obstructed | Blockage | N/A - Damage |
| Damaged Or Obstructed - Lightning | Burn | Lightning Damage - Lightning Strike |
| Delamination | Delamination | Damaged Laminate - Delamination |
| Delamination - Lightning | Lightning - Delamination | Lightning Damage - Lightning Strike |
| Discoloration | Discoloration | Coat Fault - Abnormality |
| Discoloration - Bugs / Dirt | Dirt/Residue | Rub Mark - Dirt/Contamination |
| Discoloration - Scorch | Lightning - Strike | Lightning Hit - Receptor - Lightning Strike |
| Erosion | Erosion | Erosion |
| Flaking | Flaking | Rub Mark - Peeling/Flaking |
| Missing | Missing | N/A - Missing |
| Other | Unknown/Other | N/A - Unknown/Other |
| Pinholes | Flaking | Rub Mark - Peeling/Flaking |
| Scratch | Scratch/Gouge | Scratch - Scratch/Gouge |
Blade Side Conversions
Lookup key: Blade Side (direct lookup — no concatenation). Conversions tab columns: A (the Source Platform) | B (the organization) | C (the OEM).
| the Source Platform Blade Side | the organization Blade Side | the OEM Blade Side |
|---|---|---|
| Suction Side | Suction Side | Leeward |
| Pressure Side | Pressure Side | Windward |
| Leading Edge | Leading Edge | Leading Edge |
| Trailing Edge | Trailing Edge | Trailing Edge |
Validation Status Reference
| Status | Color | Trigger | Compliance Score | Export Gate |
|---|---|---|---|---|
| Error | 🔴 Red | Required field missing or format invalid | Counts against score | Does not block export |
| Manual Review | 🟠 Amber | Concatenated value not in conversion table | Counts against score | BLOCKS export until resolved |
| Check Internally | 🔵 Blue | Asset or Coordinates field empty | EXCLUDED from score | Does not block export |
| Warning | 🟡 Amber | Conditional field format invalid | Counts against score | Does not block export |
Compliance Score Formula
Score = ROUND( cleanRows / (totalRows - checkInternallyRows) * 100, 0 )
Where cleanRows = rows with no issues of any kind. Check Internally rows are excluded from the denominator.
Known Limitations
- VLOOKUP row ranges in the Damages Report are calculated at export time. Engineering adding rows beyond these ranges requires manually updating formula references.
- The tool processes only the first sheet of any XLSX file.
- Cross-field conditional validation is not implemented (e.g. BladeChamber required when Damage Location = Internal).
- Duplicate anomaly ID detection is not implemented.
- Manual Review resolutions are held in browser memory only — not persisted across sessions.