|
| 1 | +# Understanding Arcadia Tariff JSON |
| 2 | + |
| 3 | +> ⚠️ **Disclaimer**: This guide was generated by an LLM (Claude Opus 4.5) based on Arcadia API documentation and tariff data. The content looks reasonable but **has not been verified by domain experts**. Please verify any claims before relying on them for production use. |
| 4 | +
|
| 5 | +This page explains the structure of tariff data returned by the Arcadia Signal API. For complete field definitions, see the [Arcadia Tariff API Reference](https://docs.arcadia.com/v2022-12-21-Signal/reference/tariff). |
| 6 | + |
| 7 | +## Data Hierarchy |
| 8 | + |
| 9 | +Tariff data follows a three-level hierarchy: |
| 10 | + |
| 11 | +``` |
| 12 | +Tariff (header) |
| 13 | +├── properties[] → Input parameters needed for bill calculations |
| 14 | +└── rates[] → Array of TariffRate objects (line items) |
| 15 | + └── rateBands[] → Array of TariffRateBand objects (tiers/bands) |
| 16 | +``` |
| 17 | + |
| 18 | +- **Tariff** — The top-level object with metadata about the rate plan (name, utility, customer class, effective dates) |
| 19 | +- **TariffRate** — Individual charges like "Customer Charge" or "Summer Rate" — think of these as line items on a bill |
| 20 | +- **TariffRateBand** — Tiers within a rate (e.g., first 250 kWh at one price, remaining kWh at another) |
| 21 | + |
| 22 | +## Key Tariff Fields |
| 23 | + |
| 24 | +| Field | Description | |
| 25 | +|-------|-------------| |
| 26 | +| `tariffId` | Unique ID for *this version* of the tariff | |
| 27 | +| `masterTariffId` | Persistent ID across all revisions of a tariff | |
| 28 | +| `tariffCode` | Utility's shortcode (e.g., "EL1", "E-1") | |
| 29 | +| `tariffName` | Official tariff name | |
| 30 | +| `lseId` | Load Serving Entity (utility) ID | |
| 31 | +| `effectiveDate` | When this version became effective | |
| 32 | +| `priorTariffId` | Previous version's `tariffId` | |
| 33 | +| `customerClass` | Target segment: RESIDENTIAL, COMMERCIAL, INDUSTRIAL, etc. | |
| 34 | +| `customerCount` | Approximate customers on this tariff | |
| 35 | + |
| 36 | +### `tariffId` vs `masterTariffId` |
| 37 | + |
| 38 | +Tariff data changes periodically — a residential tariff might update several times per year as rates are adjusted. Each revision gets a new `tariffId`, but they all share the same `masterTariffId`. |
| 39 | + |
| 40 | +- Use **`masterTariffId`** when tracking a tariff over time or fetching historical versions |
| 41 | +- Use **`tariffId`** when you need to reference a specific version |
| 42 | + |
| 43 | +To get historical versions, use the [Tariff History API](https://docs.arcadia.com/v2022-12-21-Signal/reference/tariff-history). |
| 44 | + |
| 45 | +### Boolean Flags |
| 46 | + |
| 47 | +These flags tell you what features a tariff has without parsing all the rates: |
| 48 | + |
| 49 | +| Flag | What It Tells You | |
| 50 | +|------|-------------------| |
| 51 | +| `hasTimeOfUseRates` | Rates vary by time of day (peak/off-peak) | |
| 52 | +| `hasTieredRates` | Some rates have consumption-based tiers | |
| 53 | +| `hasContractedRates` | Includes supply charges (for bundled service) | |
| 54 | +| `hasNetMetering` | Net metering is available for solar customers | |
| 55 | +| `isActive` | Tariff is currently in effect | |
| 56 | + |
| 57 | +--- |
| 58 | + |
| 59 | +## Properties |
| 60 | + |
| 61 | +The `properties` array defines **input parameters** needed to calculate bills. When you call the Calculate API, you provide values for these properties, and the API uses them to determine which rates apply and compute charges. |
| 62 | + |
| 63 | +### What Properties Tell You |
| 64 | + |
| 65 | +Before running any calculations, the properties array reveals: |
| 66 | + |
| 67 | +- **What inputs you need** — `consumption` (kWh), `demand` (kW), time-of-use period, etc. |
| 68 | +- **What choices exist** — Territory/zone options, service types, rate schedules |
| 69 | +- **Default assumptions** — What values are assumed if you don't specify (e.g., `systemSize: 0` assumes no solar) |
| 70 | +- **Tariff complexity** — More properties usually means more rate variations |
| 71 | + |
| 72 | +### Common Property Types |
| 73 | + |
| 74 | +| `propertyTypes` | Meaning | |
| 75 | +|-----------------|---------| |
| 76 | +| `RATE_CRITERIA` | Input that affects which rates apply or how they're calculated | |
| 77 | +| `SERVICE_TERMS` | Describes service characteristics (informational, not an input) | |
| 78 | + |
| 79 | +### Common Properties |
| 80 | + |
| 81 | +| Property | Description | Typical Use | |
| 82 | +|----------|-------------|-------------| |
| 83 | +| `consumption` | Energy usage (kWh) | All consumption-based charges | |
| 84 | +| `demand` | Peak demand (kW) | Demand charges (commercial tariffs) | |
| 85 | +| `territoryId` | Service zone/region | Zone-specific rates | |
| 86 | +| `systemSize` | Solar system capacity (kW) | Solar-related charges (CBC, net metering) | |
| 87 | +| `connectionType` | Single-phase vs. three-phase | Service charges | |
| 88 | +| `chargeClass` | Categories to include | Filtering SUPPLY vs. DISTRIBUTION | |
| 89 | + |
| 90 | +### Property Structure |
| 91 | + |
| 92 | +Each property has metadata explaining what it is and how to use it: |
| 93 | + |
| 94 | +```json |
| 95 | +{ |
| 96 | + "keyName": "territoryId", |
| 97 | + "displayName": "Territory", |
| 98 | + "description": "Rate Baseline Region", |
| 99 | + "dataType": "CHOICE", |
| 100 | + "propertyTypes": "RATE_CRITERIA", |
| 101 | + "choices": [ |
| 102 | + { "displayValue": "Zone H", "value": "3632" }, |
| 103 | + { "displayValue": "Zone I", "value": "3633" }, |
| 104 | + { "displayValue": "Zone J", "value": "3634" } |
| 105 | + ], |
| 106 | + "isDefault": true |
| 107 | +} |
| 108 | +``` |
| 109 | + |
| 110 | +- **`keyName`** — The key to use in API calls |
| 111 | +- **`dataType`** — DECIMAL, CHOICE, STRING, BOOLEAN, etc. |
| 112 | +- **`choices`** — For CHOICE types, the valid options |
| 113 | +- **`propertyValue`** / **`isDefault`** — Default value if not specified |
| 114 | + |
| 115 | +--- |
| 116 | + |
| 117 | +## Rates |
| 118 | + |
| 119 | +The `rates` array contains the actual charges. Each `TariffRate` object represents a line item like "Customer Charge" or "Summer Delivery Rate." |
| 120 | + |
| 121 | +### Key Rate Fields |
| 122 | + |
| 123 | +| Field | Description | |
| 124 | +|-------|-------------| |
| 125 | +| `rateName` | Human-readable name | |
| 126 | +| `rateGroupName` | Category grouping (e.g., "Delivery Charges") | |
| 127 | +| `chargeType` | How it's calculated: FIXED_PRICE, CONSUMPTION_BASED, QUANTITY, MINIMUM | |
| 128 | +| `chargeClass` | Category: DISTRIBUTION, SUPPLY, TRANSMISSION, TAX | |
| 129 | +| `variableRateKey` | If present, rate value must be looked up via API | |
| 130 | +| `territory` | If present, rate is zone-specific | |
| 131 | +| `season` | If present, rate is seasonal | |
| 132 | +| `rateBands` | Tier structure with actual rate amounts | |
| 133 | + |
| 134 | +### Charge Types |
| 135 | + |
| 136 | +| `chargeType` | Meaning | Unit | |
| 137 | +|--------------|---------|------| |
| 138 | +| `FIXED_PRICE` | Flat monthly fee | $/month | |
| 139 | +| `CONSUMPTION_BASED` | Per-kWh charge | $/kWh | |
| 140 | +| `QUANTITY` | Based on a property value | Varies ($/kW, %) | |
| 141 | +| `DEMAND` | Based on peak demand | $/kW | |
| 142 | +| `MINIMUM` | Floor on total bill | $/month | |
| 143 | + |
| 144 | +### Variable Rates |
| 145 | + |
| 146 | +Some rates change frequently (monthly supply charges, adjustment factors). These have: |
| 147 | + |
| 148 | +- `rateAmount: 0.0` — Placeholder value |
| 149 | +- `variableRateKey` — Key to use with the [Lookups API](https://docs.arcadia.com/v2022-12-21-Signal/reference/lookups) |
| 150 | + |
| 151 | +--- |
| 152 | + |
| 153 | +## Rate Bands |
| 154 | + |
| 155 | +Each rate has a `rateBands` array containing one or more `TariffRateBand` objects. For simple rates, there's just one band. For tiered rates, there are multiple bands with consumption limits. |
| 156 | + |
| 157 | +### Key Rate Band Fields |
| 158 | + |
| 159 | +| Field | Description | |
| 160 | +|-------|-------------| |
| 161 | +| `rateAmount` | The actual rate value | |
| 162 | +| `rateUnit` | COST_PER_UNIT, PERCENTAGE, etc. | |
| 163 | +| `consumptionUpperLimit` | For tiered rates, the kWh threshold | |
| 164 | +| `rateSequenceNumber` | Order of tiers (1, 2, 3...) | |
| 165 | +| `isCredit` | True if this is a credit (negative charge) | |
| 166 | + |
| 167 | +### Tiered Rate Example |
| 168 | + |
| 169 | +```json |
| 170 | +"rateBands": [ |
| 171 | + { |
| 172 | + "rateSequenceNumber": 1, |
| 173 | + "consumptionUpperLimit": 250.0, |
| 174 | + "rateAmount": 0.16107 |
| 175 | + }, |
| 176 | + { |
| 177 | + "rateSequenceNumber": 2, |
| 178 | + "rateAmount": 0.18518 |
| 179 | + } |
| 180 | +] |
| 181 | +``` |
| 182 | + |
| 183 | +This means: First 250 kWh at $0.16107/kWh, remaining kWh at $0.18518/kWh. |
| 184 | + |
| 185 | +--- |
| 186 | + |
| 187 | +## Riders |
| 188 | + |
| 189 | +Riders are modular tariff components that can be attached to multiple base tariffs. They appear in the rates array with special fields: |
| 190 | + |
| 191 | +- **`riderId`** — Reference to a rider tariff (placeholder, no rate details) |
| 192 | +- **`riderTariffId`** — The actual rider implementation (contains rate details) |
| 193 | + |
| 194 | +For bill calculations, use rates with `riderTariffId` — they have all the charge details already resolved. |
| 195 | + |
| 196 | +--- |
| 197 | + |
| 198 | +## Further Reading |
| 199 | + |
| 200 | +- [Arcadia Tariff API Reference](https://docs.arcadia.com/v2022-12-21-Signal/reference/tariff) — Complete field definitions |
| 201 | +- [Lookups API](https://docs.arcadia.com/v2022-12-21-Signal/reference/lookups) — Retrieving variable rate values |
| 202 | +- [Calculate API](https://docs.arcadia.com/v2022-12-21-Signal/reference/calculate) — Running bill calculations |
| 203 | +- [Tariff History API](https://docs.arcadia.com/v2022-12-21-Signal/reference/tariff-history) — Historical tariff versions |
| 204 | + |
0 commit comments