Explore the latest updates and features in our new Signal Product Documentation and Switch Product Documentation.
Please note, this site’s retirement date will be announced soon, so make sure to update your bookmarks.
Handle Tiered Rates
What are Tiered Rates?
Tiered Rates are a certain type of Tariff Rate where the price the customer pays varies by how much power they use (and a Tariff Rate is one of many individual line items the customer pays on their Tariff rate plan). Tiered Rates are typically tied to consumption rates, so change by how much total kWh the customer uses (especially for residential customers), but can also be for demand rates (what the peak kW used is). Tiered rates can also have optional seasons, time-of-use groups and rate criteria (applicability values) that define them. In some rare cases they can have a Baseline region too (territory).
This how-to article gives you details about finding and understanding tiered rates, and is particularly useful for understanding how to display rate information or how to map these rates to your own tariff database. Note that our calculators automatically handle tiered rates using the usage data passed in.
Which Tariffs have Tiered Rates?
The most obvious way to see if a specific tariff, or a specific version of a tariff, has tiered rates is to loop through the rates and see if any have multiple tariff rate bands for the same applicability value (more on that later). However, there is a simpler approach that works for most cases. Each tariff has an indicator field at its tariff “header” level. The property is called hasTieredRates
. If this is true, one or more of its default TariffRate
has tiers. It doesn’t necessarily mean that all its rates are tiered, but at least one is. You can also filter your tariff query to just return tariffs with tiered rates.
Anatomy of a Tiered Rate
A Tariff Rate that is tiered has more than one Tariff Rate Band. There is one band for each tier, and the information on the band tells you about the lower and upper limit of that tier.
GET /rest/public/tariffs/980?populateRates=true&effectiveOn=2020-01-01
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
{
"tariffRateId":18616651,
"tariffId":3351380,
"tariffSequenceNumber":10,
"rateGroupName":"Energy and Demand Charge",
"rateName":"Energy and Demand Charge",
"fromDateTime":"2020-01-01T00:00:00-05:00",
"toDateTime":null,
"chargeType":"CONSUMPTION_BASED",
"chargePeriod":"MONTHLY",
"rateBands":[
{
"tariffRateBandId":12682396,
"tariffRateId":18616651,
"rateSequenceNumber":1,
"hasConsumptionLimit":true,
"consumptionUpperLimit":1000,
"hasDemandLimit":false,
"hasPropertyLimit":false,
"rateAmount":0.05271,
"rateUnit":"COST_PER_UNIT",
"isCredit":false,
"prevUpperLimit":null
},
{
"tariffRateBandId":12682397,
"tariffRateId":18616651,
"rateSequenceNumber":2,
"hasConsumptionLimit":true,
"hasDemandLimit":false,
"hasPropertyLimit":false,
"rateAmount":0.06271,
"rateUnit":"COST_PER_UNIT",
"isCredit":false,
"prevUpperLimit":null
}
]
}
Caution : Not all Tariff Rates with multiple bands are tiered rates. Sometimes a Tariff Rate will have several rate bands that are for different Rate Criteria and will have different “applicabilityValue” data in each band. A Tariff Rate is only tiered if it has more than one TariffRateBand for the same “applicabilityValue”, or one or more rates with no “applicabilityValue”.
Fixed Limit Tiered Rates
For Fixed Limit Tiered Rates, the limits between tiers are specified in the tariff rate bands consumptionUpperLimit
field (for consumption charges), or the demandUpperLimit
field (for demand charges). These are defined as the quantity for the billing period, so kWh for consumption and kW for demand. The sequence number field denotes the order of the limits from lowest to highest.
GET /rest/public/tariffs/980?populateRates=true&effectiveOn=2020-01-01
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
{
"tariffRateId":18616651,
"tariffId":3351380,
"tariffSequenceNumber":10,
"rateGroupName":"Energy and Demand Charge",
"rateName":"Energy and Demand Charge",
"fromDateTime":"2020-01-01T00:00:00-05:00",
"toDateTime":null,
"chargeType":"CONSUMPTION_BASED",
"chargePeriod":"MONTHLY",
"rateBands":[
{
"tariffRateBandId":12682396,
"tariffRateId":18616651,
"rateSequenceNumber":1,
"hasConsumptionLimit":true,
"consumptionUpperLimit":1000,
"hasDemandLimit":false,
"hasPropertyLimit":false,
"rateAmount":0.05271,
"rateUnit":"COST_PER_UNIT",
"isCredit":false,
"prevUpperLimit":null
},
{
"tariffRateBandId":12682397,
"tariffRateId":18616651,
"rateSequenceNumber":2,
"hasConsumptionLimit":true,
"hasDemandLimit":false,
"hasPropertyLimit":false,
"rateAmount":0.06271,
"rateUnit":"COST_PER_UNIT",
"isCredit":false,
"prevUpperLimit":null
}
]
}
Variable Limit Tiered Rates
Sometimes tier limits can be formulaic, or variable. This is the case for residential customers in California, where the limit is based in part on the number of days in the billing cycle. When a limit is variable, there will be a value in the TariffRate’s variableLimitKey
field. If the rate is tiered, but doesn’t have a variableLimitKey
, then its tier limits are fixed and you just use the values in the rate bands upper limit fields.
Example 1
Here’s a simple example of a variable limit tiered rate. Note that the variableLimitKey
is populated.
GET /rest/public/tariffs/80984?populateRates=true&effectiveOn=2020-01-01
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
{
"tariffRateId":17479531,
"tariffId":3245898,
"tariffSequenceNumber":5,
"rateGroupName":"Energy Charge",
"rateName":"Winter",
"fromDateTime":"2016-01-01T00:00:00-08:00",
"toDateTime":null,
"season":{
"seasonId":415,
"lseId":1116,
"seasonGroupId":1,
"seasonName":"Winter",
"seasonFromMonth":10,
"seasonFromDay":1,
"seasonToMonth":3,
"seasonToDay":31
},
"chargeType":"CONSUMPTION_BASED",
"chargePeriod":"MONTHLY",
"variableLimitKey":"consumptionTiersCalifornia",
"rateBands":[
{
"tariffRateBandId":10932410,
"tariffRateId":17479531,
"rateSequenceNumber":1,
"hasConsumptionLimit":true,
"consumptionUpperLimit":16,
"hasDemandLimit":false,
"hasPropertyLimit":false,
"rateAmount":0.0265,
"rateUnit":"COST_PER_UNIT",
"isCredit":false,
"prevUpperLimit":null
},
{
"tariffRateBandId":10932411,
"tariffRateId":17479531,
"rateSequenceNumber":2,
"hasConsumptionLimit":true,
"hasDemandLimit":false,
"hasPropertyLimit":false,
"rateAmount":0.0528,
"rateUnit":"COST_PER_UNIT",
"isCredit":false,
"prevUpperLimit":null
}
]
}
Where there is a variableLimitKey, the value in that field points to a property that defines how the variability works. Take the value (e.g.consumptionTiersCalifornia
) and use the Property Key API endpoint to get the property, which will tell you the formula to use to determine its limits. It’s in the formulaDetail
field that you will see the formula to use.
GET /rest/public/properties/{keyName}
// e.g.
GET /rest/public/properties/consumptionTiersCalifornia
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
{
"status":"success",
"count":1,
"type":"PropertyKey",
"results":[
{
"keyName":"consumptionTiersCalifornia",
"displayName":"Consumption Tiers in California",
"family":"formula",
"keyspace":"tariff",
"description":"Formula to calculate the consumption Tiers using the number of days in the billing period",
"dataType":"FORMULA",
"formulaDetail":"#tariffRateBand.consumptionUpperLimit * #billingPeriod.days",
"entityType":"ORG"
}
]
}
Given the above formula, here’s how you actually calculate the limits and also the costs associated with this Tariff Rate.
- Date Range: 7/1 to 8/1 (31 billing days)
- Billing Period Consumption: 1000 kWh
- Formula:
#tariffRateBand.consumptionUpperLimit * #billingPeriod.days
Rate Band Id | Consumption Upper Limit | Calculated Tier | Usage (kWh) | Total Usage | Rate | Cost |
---|---|---|---|---|---|---|
10932410 | 16 | 16*31 = 496 | 496 | 496 | .0265 | $13.144 |
10932411 | NULL | NULL | 504 | 1000 | .0528 | $26.6112 |
$39.7552 |
Example 2
The following snippet of JSON is a more complex example of a variable limit tiered rate that is commonly used across the California investor-owned utilities (PG&E, SCE and SDG&E).
1
2
3
4
5
6
7
8
9
10
11
12
13
14
{
"tariffRateId":17128970,
"masterTariffRateId":17023286,
"tariffId":3166167,
"tariffSequenceNumber":17,
"tariffBookSequenceNumber":17,
"rateGroupName":"Conservation Incentive Adjustment",
"rateName":"Conservation Incentive Adjustment (Winter - Territory P)",
"fromDateTime":"2014-03-01T00:00:00-08:00",
"toDateTime":null,
"chargeType":"CONSUMPTION_BASED",
"chargePeriod":"MONTHLY",
"variableLimitKey":"consumptionTiersCaliforniaWithMedicalAllowance"
}
The response snippet above indicates that the variableLimitKey is consumptionTiersCaliforniaWithMedicalAllowance
so we retrieve that from propertyKey endpoint:
GET /rest/public/properties/consumptionTiersCaliforniaWithMedicalAllowance
1
2
3
4
5
6
7
8
9
10
{
"keyName":"consumptionTiersCaliforniaWithMedicalAllowance",
"displayName":"Consumption Tiers in California With Medical Allowance Formula",
"family":"formula",
"keyspace":"tariff",
"description":"Consumption Tiers in California with Medical Allowance using the number of days in the billing period",
"dataType":"FORMULA",
"formulaDetail":"( #tariffRateBand.consumptionUpperLimit + #dailyMedicalAllowance ) * #tariffRateBand.propertyUpperLimit * #billingPeriod.days",
"entityType":"ORG"
}
Given the above formula, here’s how you actually calculate the limits and also the costs associated with this TariffRate.
- Date Range: 7/1 to 8/1 (31 billing days)
- Daily Medical Allowance: 0 (some customers with medical needs such as dialysis machines get an additional allowance)
- Billing Period Consumption: 1000 kWh
- Formula:
(#tariffRateBand.consumptionUpperLimit + #dailyMedicalAllowance ) * #tariffRateBand.propertyUpperLimit * #billingPeriod.days
so, Consumption Upper Limit is the daily allowance (before medical adjustment) Property Upper Limit is the percentage (factor) of baseline
Rate Band Id | Consumption Upper Limit | Property Upper Limit | Calculated Tier | Usage (kWh) | Total Usage | Rate | Cost |
---|---|---|---|---|---|---|---|
10408228 | 12.7 | 1.000000 | (12.7+0)1.031 = 393.7 | 393.7 | 393.7 | .06023 | $23.712 |
10408229 | 12.7 | 1.300000 | (12.7+0)1.331 = 511.81 | 511.81 | 905.51 | .04159 | $21.286 |
10408230 | 12.7 | 2.000000 | (12.7+0)2.031 = 787.4 | 94.49 | 1000 | .12299 | $1.162 |
10408231 | 12.7 | 3.000000 | (12.7+0)3.031 = 1181.1 | 0 | 1000 | .16299 | $0 |
10408232 | NULL | NULL | NULL | 0 | 1000 | .16299 | $0 |
$46.16 |