> ## Documentation Index
> Fetch the complete documentation index at: https://documentation.kodelabs.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Interval normalization labels

> Reference for normalized interval virtual points, physical limits, field priority, and data quality labels

Look up the fields, limits, and quality labels produced by [interval data normalization](/products/energ/concepts/interval-data-normalization). Use this page when you investigate empty intervals, interpolated values, or configuration flags on KODE OS interval meters.

<h2 id="virtual-points">
  Virtual point fields by meter type
</h2>

Each meter type writes consumption and rate to standard field names and units.

### Electric

| Virtual point        | Field name                                      | Data interval | Unit |
| -------------------- | ----------------------------------------------- | ------------- | ---- |
| Consumption (15-min) | `virtual_normalized_differential_energy_sensor` | `15_min`      | kWh  |
| Consumption (Daily)  | `virtual_normalized_differential_energy_sensor` | `daily`       | kWh  |
| Rate                 | `virtual_normalized_average_power_sensor`       | `15_min`      | kW   |

### Energy (chilled or hot water)

| Virtual point        | Field name                                      | Data interval | Unit   |
| -------------------- | ----------------------------------------------- | ------------- | ------ |
| Consumption (15-min) | `virtual_normalized_differential_energy_sensor` | `15_min`      | kBtu   |
| Consumption (Daily)  | `virtual_normalized_differential_energy_sensor` | `daily`       | kBtu   |
| Rate                 | `virtual_normalized_average_power_sensor`       | `15_min`      | kBtu/h |

### Water

| Virtual point        | Field name                                      | Data interval | Unit    |
| -------------------- | ----------------------------------------------- | ------------- | ------- |
| Consumption (15-min) | `virtual_normalized_differential_volume_sensor` | `15_min`      | gal     |
| Consumption (Daily)  | `virtual_normalized_differential_volume_sensor` | `daily`       | gal     |
| Rate                 | `virtual_normalized_average_flowrate_sensor`    | `15_min`      | gal/min |

### Natural gas

| Virtual point        | Field name                                      | Data interval | Unit  |
| -------------------- | ----------------------------------------------- | ------------- | ----- |
| Consumption (15-min) | `virtual_normalized_differential_volume_sensor` | `15_min`      | ft³   |
| Consumption (Daily)  | `virtual_normalized_differential_volume_sensor` | `daily`       | ft³   |
| Rate                 | `virtual_normalized_average_flowrate_sensor`    | `15_min`      | ft³/h |

### Steam

| Virtual point        | Field name                                       | Data interval | Unit  |
| -------------------- | ------------------------------------------------ | ------------- | ----- |
| Consumption (15-min) | `virtual_normalized_differential_mass_sensor`    | `15_min`      | lbm   |
| Consumption (Daily)  | `virtual_normalized_differential_mass_sensor`    | `daily`       | lbm   |
| Rate                 | `virtual_normalized_average_massflowrate_sensor` | `15_min`      | lbm/h |

Daily consumption for standard meters is the sum of normalized 15-minute values. For Carma meters, daily consumption can use Carma's daily consumption point instead of summing intervals.

<h2 id="limits">
  Physical limits per 15-minute interval
</h2>

Values outside these limits are nullified and labeled `CANONICAL_LIMIT_OUTLIER`.

| Meter type | Minimum | Maximum (per 15 min) | Unit |
| ---------- | ------- | -------------------- | ---- |
| Electric   | 0       | 5,000                | kWh  |
| Water      | 0       | 25,000               | gal  |
| Energy     | 0       | 7,500                | kBtu |
| Steam      | 0       | 50,000               | lbm  |

<h2 id="field-priority">
  Field priority
</h2>

When a meter exposes multiple fields, normalization selects one field in this order.

| Service     | Priority (highest first)                                                                                                                |
| ----------- | --------------------------------------------------------------------------------------------------------------------------------------- |
| Electric    | Total energy accumulator, differential energy accumulator, average power sensor, output power sensor                                    |
| Natural gas | Total volume accumulator, differential volume accumulator, total energy accumulator, differential energy accumulator, `flowrate_sensor` |
| Water       | Total volume accumulator, differential volume accumulator, `flowrate_sensor`                                                            |
| Steam       | Total mass accumulator, differential mass accumulator, `massflowrate_sensor`                                                            |
| Energy      | Total energy accumulator, total cooling or heating accumulator, differentials, then power or flow sensors                               |

The chosen field is recorded as `field_used` on the row.

<h2 id="label-categories">
  Label categories
</h2>

| Category        | Scope       | Contents                                               |
| --------------- | ----------- | ------------------------------------------------------ |
| `data_quality`  | Meter-level | Configuration issues that block reliable normalization |
| `validation`    | Row-level   | Invalid or missing readings                            |
| `interpolation` | Row-level   | How a timestamp or gap was filled                      |
| `field_used`    | Row-level   | Name of the selected source field                      |

An empty labels object `{}` means clean measured data with no flags.

<h2 id="data-quality-labels">
  Configuration labels (`data_quality`)
</h2>

| Label                      | Meaning                                                 | Trust                              |
| -------------------------- | ------------------------------------------------------- | ---------------------------------- |
| `DUPLICATE_FIELD_POINTS`   | Multiple points map to the same meter field             | Do not trust. Fix mapping.         |
| `COOLING_HEATING_CONFLICT` | Meter has both cooling and heating fields               | Do not trust. Fix mapping.         |
| `FIELD_INVALID_UNIT`       | Unit symbol is invalid for the field type               | Do not trust. Fix units.           |
| `POINT_VALUE_DISCREPANCY`  | Meter fields report totals that differ by more than 50% | Do not trust. Investigate sensors. |

<h2 id="validation-labels">
  Validation labels (`validation`)
</h2>

| Label                     | Meaning                                           | Trust                   |
| ------------------------- | ------------------------------------------------- | ----------------------- |
| `MISSING_RAW_DATA`        | No raw data existed for the interval              | No data available       |
| `NEGATIVE_VALUE`          | Reading was negative and removed                  | Invalid reading removed |
| `ACCUMULATOR_ZERO`        | Accumulator showed zero                           | Likely sensor error     |
| `ACCUMULATOR_RESET`       | Accumulator decreased (reset or rollover)         | Review before use       |
| `CANONICAL_LIMIT_OUTLIER` | Value exceeded physical limits                    | Bad reading removed     |
| `PLATFORM_OUTLIER`        | Spike or dip detected against surrounding medians | Glitch reading removed  |

<h2 id="interpolation-labels">
  Interpolation labels (`interpolation`)
</h2>

| Label           | Meaning                                                    | Trust                      |
| --------------- | ---------------------------------------------------------- | -------------------------- |
| `TIME_WEIGHTED` | Value interpolated to align to the 15-minute grid          | Minor timestamp adjustment |
| `LINEAR`        | Short gap filled by linear interpolation (up to two hours) | Estimate for a short gap   |

## Example rows

| Meter         | Time  | Consumption | Rate  | Labels                                                                  |
| ------------- | ----- | ----------- | ----- | ----------------------------------------------------------------------- |
| Main Electric | 08:00 | 125.5       | 502.0 | `{}`                                                                    |
| Main Electric | 08:15 | 128.2       | 512.8 | `{"field_used": "total_energy_accumulator"}`                            |
| Main Electric | 08:30 | —           | —     | `{"validation": "MISSING_RAW_DATA"}`                                    |
| Main Electric | 08:45 | 130.1       | 520.4 | `{"interpolation": "LINEAR", "field_used": "total_energy_accumulator"}` |
| Main Electric | 09:00 | —           | —     | `{"validation": "PLATFORM_OUTLIER"}`                                    |

## Next steps

<CardGroup cols={2}>
  <Card title="Interval data normalization" icon="filter" href="/products/energ/concepts/interval-data-normalization" arrow={true} cta="Read">
    Understand why and how interval data is cleaned.
  </Card>

  <Card title="KODE OS data source" icon="plug" href="/products/energ/data-sources/kode-os-data-source" arrow={true} cta="Open">
    Connect the meters that produce these virtual points.
  </Card>

  <Card title="Data and meter fields" icon="table" href="/products/energ/reference/data-and-meter-fields" arrow={true} cta="Look up">
    Look up bill-side meter columns and service types.
  </Card>

  <Card title="Meter comparisons" icon="git-compare" href="/products/energ/data-quality/meter-comparisons" arrow={true} cta="Open">
    Compare utility and interval totals after normalization.
  </Card>
</CardGroup>
