Open Data Schema for Energy
Fault Intelligence

Error Taxonomy as Shared Infrastructure: Cross-OEM Fault Intelligence

Normalized error semantics are infrastructure, not a reporting convenience. They are what makes portfolio-wide reliability analytics comparable.

Consider a portfolio running Huawei string inverters at three sites, Enphase microinverters at two, and Solarman-connected loggers at another. Each OEM describes faults in its own vocabulary. One encodes communication loss as a numeric state, another as a text alarm, and another as a missing data interval. Without normalization, your alerting and triage logic is comparing unlike events — and every cross-site fault analysis requires vendor-specific branching.

ODSE addresses this by requiring a shared error_type contract while preserving source diagnostics in error_code_original. This gives you a common language for decision-making without losing root-cause traceability.

Why a Shared Taxonomy Changes Outcomes

Contract Mechanics in ODSE

ODSE defines supported error_type values and expects your transform logic to map OEM-native signals into that shared enum set. At the same time, the raw source code remains available for diagnostic drill-down.

OEM state/code -> transform mapping -> error_type + error_code_original -> validate() -> downstream fault analytics

Implementation Pattern

Step 1: Build Source Mapping Tables

For each OEM connector, define explicit mappings from vendor status/error payloads into ODSE error_type. Keep this mapping versioned and review it whenever OEM payloads change.

Step 2: Preserve Diagnostic Evidence

Never discard source-level signals. Store the original code or state string in error_code_original so your field teams can still investigate vendor-specific root causes.

Step 3: Validate for Contract Integrity

Run schema validation to enforce enum correctness, then semantic validation to catch suspicious state/value combinations. This prevents contract drift and bad cross-site comparisons.

Reference Example

from odse import transform, validate

rows = transform("fleet_dump.csv", source="huawei")
result = validate(rows)

if not result.is_valid:
    raise ValueError(result.errors)

# downstream analytics now consume normalized error_type values

Operational Dashboard Design

Once fault events are normalized, your first dashboard should answer three questions:

These questions are impossible to answer reliably when each OEM remains in its own taxonomy island.

Common Failure Modes

Practical rule: If your fault query logic starts with OEM-specific condition branches, normalization is not finished. Keep mappings in transforms and keep consumers contract-only.

Acceptance Criteria for "Taxonomy Done"

Shared error semantics are not optional polish. They are the minimum infrastructure required for trustworthy, portfolio-scale reliability intelligence.

Energy Timeseries Schema | Transforms | Semantic Validation

← Back to Blog