HomeGuidesRecipesAPI ReferenceChangelog
Log In
Guides

Improving Calc Accuracy with Rate Criteria Properties

This guide delves into the importance of being explicit about billing rate criteria properties to enhance the precision of your calculations. It covers when to utilize them effectively and how to determine their relevance in your specific scenarios.

What is "Rate Criteria"?

Put simply, Rate Criteria inform you about the basis of rates in a specific tariff, thereby determining costs. Most tariffs have rates based on load (or usage), i.e., what electricity is used. Sometimes, rates vary by where the customer is within the utility service area. However, other factors, including customer characteristics and choices, often influence costs. In this how-to, we will delve into them.

What are my tariffs Rate Criteria Properties?

Many residential and almost all commercial and industrial tariffs feature one or more rates that fluctuate depending on specific customer features or choices. For instance, it's quite common for a commercial customer's distribution rate to vary based on the size of their grid connection (connectionType). Let's take Arizona Public Service’s E-32-M with its tiered demand charge as an example:

connectionTypeUp to 100 kWOver 100 kW
Secondary Connection **$9.254/kW$4.065/kW
Primary Connection$8.356/kW$3.327/kW
Transmission Connection$6.186/kW$0.999/kW

** Arcadia defaults to this value

As evident in the above example, costs can significantly vary for different customers under this tariff. For instance, a customer with a secondary connection pays $1431.90 for 200 kW, while a customer with a transmission-level connection would see their charges almost halved to $718.50.

Here are some other common rate criteria examples:

  • lowIncomeCustomer - many utilities have assistance programs with lower rates for low-income householders
  • phase - Monthly fixed charges or other rates that depend on a Single or Three(Poly) Phase connection
  • billingMeter - How many billing meters does the site have
  • cityLimits - Is the customer within or outside city limits? Popular with municipal utilities
  • electricSpaceHeaterPresent - Does the customer have electric or gas heating, with rates that vary based on this?
  • utilityEmployee - Is the customer a utility employee? Many utilities offer a discount to their staff.

There is a lot of rate criteria variability across Utilities, so Arcadia takes a data-driven approach to modeling these.

Let's learn how...

Retrieving Rate Criteria Properties

Each Tariff in our database includes a list of Tariff properties, which in the JSON can be found in the properties list. You can ask for these properties to be populated in the results of the [Get-Tariffs][api-ref-get-tariffs], [Get-Tariff][api-ref-get-tariff] API endpoint by including populateProperties=true in your request. Then each property returned has a propertyTypes on it, which denotes what the property is for. The subset of the tariff properties we care about here for rate applicabilities have the propertyTypes property set to RATE_CRITERIA.

Here’s Sonoma Clean Power’s E-1 Residential tariff with populateProperties=true

GET /rest/public/tariffs/3200682?populateProperties=true&populateRates=true
{  
  "status": "success",  
  "count": 1,  
  "type": "Tariff",  
  "results": \[  
    {  
      "tariffId": 3279203,  
      "masterTariffId": 3200682,  
      "tariffCode": "E-1",  
      "tariffName": "Residential",  
      "lseId": 100747,  
      "lseName": "Sonoma Clean Power",  
      "priorTariffId": 3260063,  
      "tariffType": "DEFAULT",  
      "customerClass": "RESIDENTIAL",  
      "customerCount": 50000,  
      "customerLikelihood": null,  
      "territoryId": 7571,  
      "effectiveDate": "2017-03-01",  
      "endDate": null,  
      "timeZone": "US/Pacific",  
      "billingPeriod": "MONTHLY",  
      "currency": "USD",  
      "chargeTypes": "FIXED_PRICE,CONSUMPTION_BASED,MINIMUM",  
      "chargePeriod": "DAILY",  
      "hasTimeOfUseRates": false,  
      "hasTieredRates": true,  
      "hasContractedRates": false,  
      "hasRateApplicability": true,  
      "isActive": true,  
      "properties": \[  
        {  
          "keyName": "consumption",  
          "quantityKey": null,  
          "displayName": "Consumption (kWh)",  
          "family": "load",  
          "keyspace": "electricity",  
          "description": "Quantity in kWh of load that is used for a period of time",  
          "dataType": "DECIMAL",  
          "propertyTypes": "RATE_CRITERIA",  
          "operator": null,  
          "isDefault": false  
        },  
        {  
          "keyName": "dailyMedicalAllowance",  
          "quantityKey": null,  
          "displayName": "Daily Medical Allowance ",  
          "family": "load",  
          "keyspace": "electricity",  
          "description": "Residential customers on a medical allowance get additional quantities of energy at the lowest (baseline) price. The medical allowance is a daily value derived from an additional 500 kWh per month (16.438 kWh/Day).  Medical Baseline customers can have 1 or more additional allotments at multiples of 16.438 kWh per day. ",  
          "dataType": "DECIMAL",  
          "propertyTypes": "RATE_CRITERIA",  
          "operator": "=",  
          "propertyValue": "0",  
          "isDefault": true  
        },  
        {  
          "keyName": "hasCAEnergySurchargeExemption",  
          "quantityKey": null,  
          "displayName": "Has Energy Surcharge Exemption",  
          "family": "billing",  
          "keyspace": "electricity",  
          "description": "Exemptions for CA Energy Surcharge apply to the following:\\r\\n1. Federal Agencies\\r\\n2. American National Red Cross facilities\\r\\n3. Energy consumed on Indian reservations\\r\\n4. Foreign consular employees\\r\\n5. Federal Credit Unions",  
          "dataType": "BOOLEAN",  
          "propertyTypes": "RATE_CRITERIA",  
          "operator": "=",  
          "propertyValue": "false",  
          "isDefault": true  
        },  
        {  
          "keyName": "powerChargeIndifferenceAdjustmentVintageYear",  
          "quantityKey": null,  
          "displayName": "Power Charge Indifference Adjustment  Vintage Year ",  
          "family": "load",  
          "keyspace": "electricity",  
          "description": "The adjustment (either a \\r\\ncharge or credit) is intended to ensure that customers that purchase electricity from \\r\\nnon-utility suppliers pay their share of cost for generation acquired prior to 2003",  
          "dataType": "CHOICE",  
          "propertyTypes": "RATE_CRITERIA",  
          "operator": "=",  
          "propertyValue": "Pre 2009 Vintage",  
          "choices": [  
            {  
              "displayValue": "Pre 2009 Vintage",  
              "value": "Pre 2009 Vintage",  
              "dataValue": "Pre 2009 Vintage",  
              "likelihood": null  
            },  
            {  
              "displayValue": "2009 Vintage",  
              "value": "2009 Vintage",  
              "dataValue": "2009 Vintage",  
              "likelihood": null  
            },  
            {  
              "displayValue": "2010 Vintage",  
              "value": "2010 Vintage",  
              "dataValue": "2010 Vintage",  
              "likelihood": null  
            },  
            {  
              "displayValue": "2011 Vintage",  
              "value": "2011 Vintage",  
              "dataValue": "2011 Vintage",  
              "likelihood": null  
            },  
            {  
              "displayValue": "2012 Vintage",  
              "value": "2012 Vintage",  
              "dataValue": "2012 Vintage",  
              "likelihood": null  
            },  
            {  
              "displayValue": "2013 Vintage",  
              "value": "2013 Vintage",  
              "dataValue": "2013 Vintage",  
              "likelihood": null  
            },  
            {  
              "displayValue": "2014 Vintage",  
              "value": "2014 Vintage",  
              "dataValue": "2014 Vintage",  
              "likelihood": null  
            },  
            {  
              "displayValue": "2015 Vintage",  
              "value": "2015 Vintage",  
              "dataValue": "2015 Vintage",  
              "likelihood": null  
            },  
            {  
              "displayValue": "2016 Vintage",  
              "value": "2016 Vintage",  
              "dataValue": "2016 Vintage",  
              "likelihood": null  
            },  
            {  
              "displayValue": "2017 Vintage",  
              "value": "2017 Vintage",  
              "dataValue": "2017 Vintage",  
              "likelihood": null  
            },  
            {  
              "displayValue": "None",  
              "value": "None",  
              "dataValue": "None",  
              "likelihood": null  
            }  
          ],  
          "isDefault": true  
        },  
        {  
          "keyName": "rateOption100747",  
          "quantityKey": null,  
          "displayName": "Sonoma Energy Choice",  
          "family": "load",  
          "keyspace": "electricity",  
          "description": "Customers electing the 100% Local Renewable service option will pay the otherwise applicable SCP rate plus the 100% Renewable Energy Charge.",  
          "dataType": "CHOICE",  
          "propertyTypes": "RATE_CRITERIA",  
          "operator": "=",  
          "propertyValue": "CleanStart Surcharge",  
          "choices": [  
            {  
              "displayValue": "EverGreen Surcharge",  
              "value": "EverGreen Surcharge",  
              "dataValue": "EverGreen Surcharge",  
              "likelihood": null  
            },  
            {  
              "displayValue": "CleanStart Surcharge",  
              "value": "CleanStart Surcharge",  
              "dataValue": "CleanStart Surcharge",  
              "likelihood": null  
            }  
          ],  
          "isDefault": true  
        },  
        {  
          "keyName": "territoryId",  
          "quantityKey": null,  
          "displayName": "Territory",  
          "family": "billing",  
          "keyspace": "electricity",  
          "description": "Territory where tariff is operational",  
          "dataType": "CHOICE",  
          "propertyTypes": "RATE_CRITERIA",  
          "operator": null,  
          "choices": [  
            {  
              "displayValue": "Baseline Region T",  
              "value": "7572",  
              "dataValue": "7572",  
              "likelihood": null  
            },  
            {  
              "displayValue": "Baseline Region X",  
              "value": "7573",  
              "dataValue": "7573",  
              "likelihood": null  
            }  
          ],  
          "isDefault": false  
        },  
        {  
          "keyName": "chargeClass",  
          "quantityKey": null,  
          "displayName": "Charge Class Type",  
          "family": "service",  
          "keyspace": "electricity",  
          "description": "The tariff has rates with the following charge class.",  
          "dataType": "CHOICE",  
          "propertyTypes": "SERVICE_TERMS",  
          "operator": "=",  
          "propertyValue": "SUPPLY",  
          "choices": [  
            {  
              "displayValue": "Transmission",  
              "value": "1",  
              "dataValue": "1",  
              "likelihood": null  
            },  
            {  
              "displayValue": "Distribution",  
              "value": "2",  
              "dataValue": "2",  
              "likelihood": null  
            },  
            {  
              "displayValue": "Supply",  
              "value": "4",  
              "dataValue": "4",  
              "likelihood": null  
            },  
            {  
              "displayValue": "Tax",  
              "value": "8",  
              "dataValue": "8",  
              "likelihood": null  
            },  
            {  
              "displayValue": "Other",  
              "value": "16",  
              "dataValue": "16",  
              "likelihood": null  
            },  
            {  
              "displayValue": "Contracted",  
              "value": "32",  
              "dataValue": "32",  
              "likelihood": null  
            }  
          ],  
          "isDefault": false  
        }  
      ]  
    }  
  ]  
}  
{% endhighlight %}

If you look at (loop through) all the tariff properties, skipping over anything that doesn't have a propertyTypes including RATE_CRITERIA, then you get the following rate criteria:

keyNamefamilyData Type
consumptionloadDecimal
dailyMedicalAllowanceloadDecimal
hasCAEnergySurchargeExemptionbillingDecimal
powerChargeIndifferenceAdjustmentVintageYearloadDecimal
rateOption100747loadChoice
territoryIdbillingInteger

What do these properties mean...?

Rate Criteria based on Load or Usage

The first in the list is consumption. This is pretty common and falls into a group of rate criteria properties that tell you what types of usage data are used to drive costs. It's consumption that's by far the most common and it can sometimes be split out into Time of Use (TOU) groups. For many General tariffs, you might also see the keyName of demand or a property with a dataType of DEMAND. This tells you the tariff has rates based on billing demand.

The collection of [how-to articles on usage and models][how-to-usage] has some good resources for passing in usage data, whether it be bills or meter data, to our calculators.

Territory (Baseline Region) Rate Criteria

The last property in our example is territoryId. If you find territoryId in your list of rate criteria properties, that means the tariff rates vary according to the customer’s location within the utilities service area. This occurs for residential customers in California and all customers for certain Northeastern utilities such as Consolidated Edison. It's somewhat unusual elsewhere.

We have a separate [How-To][how-to-baseline-territories] that covers the specific case of territoryId.

Rate Criteria Properties that Drive Rate Changes

With load data and territory out of the way, in our example, we are left with four remaining rate criteria on this tariff. Every tariff is different, and rate criteria in the properties list are fully data-driven and specific to that tariff. What's returned includes a plain text description of what the property represents, the data type of the property, and the valid choices (where applicable).

Smart default values

Our rate criteria properties also have a smart default, so if you don’t specify it we pick the most likely value. Many properties have a high portion of the utility customers on the default, with only a small population needing an alternative value. Arcadia determines the default value for each tariff property and will use the default value in calculations unless you override the default with a specific value.

Is the default value good enough?

Arcadia includes all tariff properties on its tariffs, even those that have a minimal impact on a calculation. So before you provide your customer with lots of choices, you should consider evaluating that tariff’s impact on calculation accuracy. Using the additional parameter populateRates = true, you can identify the rates that are affected by the tariff property. Let’s take two examples from the call above:

Start with finding the rate with applicabilityKey of rateOption100747:

{  
  "tariffRateId": 17805934,  
  "tariffId": 3279203,  
  "tariffSequenceNumber": 1,  
  "rateGroupName": "EverGreen Surcharge",  
  "rateName": "EverGreen Surcharge",  
  "fromDateTime": "2017-03-01T00:00:00-08:00",  
  "toDateTime": null,  
  "chargeType": "CONSUMPTION_BASED",  
  "chargePeriod": "MONTHLY",  
  "applicabilityKey": "rateOption100747",  
  "rateBands": [  
    {  
      "tariffRateBandId": 11534251,  
      "tariffRateId": 17805934,  
      "rateSequenceNumber": 1,  
      "hasConsumptionLimit": false,  
      "hasDemandLimit": false,  
      "hasPropertyLimit": false,  
      "applicabilityValue": "CleanStart Surcharge",  
      "rateAmount": 0,  
      "rateUnit": "COST_PER_UNIT",  
      "isCredit": false,  
      "prevUpperLimit": null  
    },  
    {  
      "tariffRateBandId": 11534252,  
      "tariffRateId": 17805934,  
      "rateSequenceNumber": 2,  
      "hasConsumptionLimit": false,  
      "hasDemandLimit": false,  
      "hasPropertyLimit": false,  
      "applicabilityValue": "EverGreen Surcharge",  
      "rateAmount": 0.025,  
      "rateUnit": "COST_PER_UNIT",  
      "isCredit": false,  
      "prevUpperLimit": null  
    }  
  ]  
}  

As you can see above, the rate affected by “rateOption100747” is consumption_based. The rate in question varies from 0¢/kWh (CleanStart Surcharge) to 2.5¢/kWh (EverGreen Surcharge). 2.5¢ represents a significant percentage of the total charges, so this is a good property to surface to your customers.

Next, let’s review the rate with applicabilityKey = “hasCAEnergySurchargeExemption”:

{  
  "tariffRateId": 17419812,  
  "tariffId": 3279203,  
  "tariffSequenceNumber": 3,  
  "rateGroupName": "Energy Surcharge",  
  "rateName": "Energy Surcharge",  
  "fromDateTime": "2017-03-01T00:00:00-08:00",  
  "toDateTime": null,  
  "chargeType": "CONSUMPTION_BASED",  
  "chargeClass": "AFTER_TAX",  
  "chargePeriod": "MONTHLY",  
  "applicabilityKey": "hasCAEnergySurchargeExemption",  
  "rateBands": [  
    {  
      "tariffRateBandId": 10836003,  
      "tariffRateId": 17419812,  
      "rateSequenceNumber": 1,  
      "hasConsumptionLimit": false,  
      "hasDemandLimit": false,  
      "hasPropertyLimit": false,  
      "applicabilityValue": "false",  
      "rateAmount": 0.00029,  
      "rateUnit": "COST_PER_UNIT",  
      "isCredit": false,  
      "prevUpperLimit": null  
    }  
  ]  
}  
{% endhighlight %}

This rate is also consumption-based, but in this case, the rate is much smaller (0.00029¢/kWh). You only need to ask your customer for this value if you are aiming for bill-level accuracy.

Tariff Property Data Types

The tariff property itself tells you a lot about what values to pass in. The display name and description are useful for helping with the data entry form labels and tool tips. The data type tells you if it’s a choice (dropdown list), a boolean (checkbox), or an integer/decimal (input box). Finally, the default value is indicated in the propertyValue value.

Boolean Properties

Here’s an example of a boolean (True/False) property, the hasCAEnergySurchargeExemption.

{  
  "keyName": "hasCAEnergySurchargeExemption",  
  "quantityKey": null,  
  "displayName": "Has Energy Surcharge Exemption",  
  "family": "billing",  
  "keyspace": "electricity",  
  "description": "Exemptions for CA Energy Surcharge apply to the following:\\r\\n1. Federal Agencies\\r\\n2. American National Red Cross facilities\\r\\n3. Energy consumed on Indian reservations\\r\\n4. Foreign consular employees\\r\\n5. Federal Credit Unions",  
  "dataType": "BOOLEAN",  
  "propertyTypes": "RATE_CRITERIA",  
  "operator": "=",  
  "propertyValue": "false",  
  "isDefault": true  
}  

Integer or Decimal Properties

Integer and decimal properties are driven by number values, either whole numbers (integer) or decimals. Here’s an example of a decimal tariff property, dailyMedicalAllowance:

{  
  "keyName": "dailyMedicalAllowance",  
  "quantityKey": null,  
  "displayName": "Daily Medical Allowance ",  
  "family": "load",  
  "keyspace": "electricity",  
  "description": "Residential customers on a medical allowance get additional quantities of energy at the lowest (baseline) price. The medical allowance is a daily value derived from an additional 500 kWh per month (16.438 kWh/Day).  Medical Baseline customers can have 1 or more additional allotments at multiples of 16.438 kWh per day.  ",  
  "dataType": "DECIMAL",  
  "propertyTypes": "RATE_CRITERIA",  
  "operator": "=",  
  "propertyValue": "0",  
  "isDefault": true  
}  

Choice Properties

Choice properties provide you with a list of strings (choices) that are then used to select the appropriate rate for the customer. This is a simple choice property with only two choices:

{  
  "keyName": "rateOption100747",  
  "quantityKey": null,  
  "displayName": "Sonoma Energy Choice",  
  "family": "load",  
  "keyspace": "electricity",  
  "description": "Customers electing the 100% Local Renewable service option will pay the otherwise applicable SCP rate plus the 100% Renewable Energy Charge.",  
  "dataType": "CHOICE",  
  "propertyTypes": "RATE_CRITERIA",  
  "operator": "=",  
  "propertyValue": "CleanStart Surcharge",  
  "choices": [  
    {  
      "displayValue": "EverGreen Surcharge",  
      "value": "EverGreen Surcharge",  
      "dataValue": "EverGreen Surcharge",  
      "likelihood": null  
    },  
    {  
      "displayValue": "CleanStart Surcharge",  
      "value": "CleanStart Surcharge",  
      "dataValue": "CleanStart Surcharge",  
      "likelihood": null  
    }  
  ],  
  "isDefault": true  
}  

Being Explicit about Rate Criteria Properties

Once you’ve surfaced rate criteria properties in your application, you will need to pass that information into your calculations. There are two ways you can do that and the one you choose depends on your use case.

Passing Rate Criteria Properties to Calculations

Passing tariff properties directly into your calculation is the best approach if you are not storing your customer’s data with Arcadia or are doing a one-time calculation, including a “what-if” where you change the tariff property settings.

Read more about passing tariff properties in Calculations as propertyInputs.