Tariffs are rate plans for electricity. They describe who the plan applies to (service and applicability), what the charges are, and other information about this electricity service:
- We have residential tariffs and general tariffs (commercial & industrial), and specialty (agriculture, transport, lighting).
- You can specify whether you want the tariff fully populated, or whether you just want a sub-section of the data (to avoid charges and to speed up your queries).
Data Definitions
The complete tariff data is a hierarchy of many objects. We call the "header" object the Tariff
(to confuse things!), which contains zero or more TariffRate
objects. Think of a tariff rate like the line item on your bill. Then each tariff rate has 1 or more TariffRateBand
. Some charges (rates) can be banded to contain several levels based on demand or consumption (or other) thresholds. Our rich structure is designed to support the complexity found in the large array of tariff plans that are in the market.
TariffId versus MasterTariffId
Tariff data changes periodically. E-1 Residential in PG&E territory, for example, usually changes a few times per year. For each revision, we created a new tariff with a unique tariffId
. Logically, however, each of these new tariffs is just a different version of a single "master" tariff. This family of tariffs is tied together with the masterTariffId
property. Again using E-1 as an example, each version of the tariff will have a different tariffId
, but they all have the same masterTariffId
-- 522
.
Taxes
The Arcadia database only has rates that appear in utility tariff books. That means that it does not have state, local, and other tax rates. That doesn't mean that you can't include them in a calculation, though. We have a quick how-to on exactly how to do that.
Tariff
The Tariff
object has the following data structure.
Name | Type | Fields | Description |
---|---|---|---|
tariffId | Long | M | Unique Arcadia ID (primary key) for this tariff |
masterTariffId | Long | M | Unique Arcadia ID that persists across all revisions of this tariff |
tariffCode | String | M | Shortcode that the LSE uses as an alternate name for the tariff |
tariffName | String | M | Name of the tariff as used by the LSE |
tariffBookName | String | E | Name of the tariff as it appears in the tariff document |
lseId | Long | M | ID of load serving entity this tariff belongs to |
lseName | String | M | Name of the load-serving entity |
lseCode | String | E | Abbreviated name of the load-serving entity |
serviceType | String | M | Type of service for the tariff. Current values include ELECTRICITY (grid power), SOLAR_PV (for a Solar PPA, Lease or similar) and GAS (Natural Gas) |
priorTariffId | Long | Unique Arcadia ID that identifies the prior revision of the tariffId above | |
distributionLseId | Long | In states like Texas where the load-serving entity that sells the power is different than the load-serving entity that distributes the power, this will contain the ID of the distribution LSE. Otherwise, it will be null. | |
tariffType | String | Possible values are:DEFAULT - tariff that is automatically given to this service classALTERNATIVE - opt-in alternate tariff for this service classOPTIONAL_EXTRA - opt-in extra, such as green power or a smart thermostat programRIDER - charge that can apply to multiple tariffs. Often a regulatory-mandated charge | |
customerClass | String | Possible values are:RESIDENTIAL - homes, apartments etc.GENERAL - commercial, industrial, and other business and organization service types (often have additional applicability criteria)SPECIAL_USE - examples are government, agriculture, street lighting, transportationPROPOSED - Utility rates that have been proposed by utilities and approved by utility commissions, but are not yet effective (requires product subscription) | |
customerCount | Integer | Number of customers that are on this master tariff | |
customerLikelihood | Decimal | The likelihood that a customer is on this tariff of all the tariffs in the search results. Only populated when getting more than one tariff. | |
customerCountSource | String | E | Where we got the customer count numbers from. Typically FERC (form 1 filings) or Arcadia (our own estimates). |
territoryId | String | ID of the territory that this tariff applies to. This is typically the service area for the LSE in this regulatory region (i.e. a state in the USA) | |
effectiveDate | DateTime | Date on which the tariff was or will be effective | |
endDate | DateTime | Date on which this tariff is no longer effective. Can be null which means end date is not known or tariff is open-ended | |
closedDate | Date | E | Date on which a tariff became closed to new customers, but still available for customers who were on it at the time. Can be null which means that the tariff is not closed. All versions of a particular tariff (i.e. those that share a particular masterTariffId ) will have the same closedDate value. |
effectiveOnRule | String | Property of the tariff determining when the tariff takes effect. Possible values: TARIFF_EFFECTIVE_DATE , BILLING_PERIOD_START | |
timeZone | String | If populated (usually is), it's the timezone that this tariffs dates and times refer to | |
billingPeriod | String | How frequently bills are generated. | |
currency | String | ISO Currency code that the rates for this tariff refer to (e.g. USD for USA Dollar) | |
chargeTypes | String | A comma-separated list of all the different ChargeType rates on this tariff (see field on TariffRate below). | |
chargePeriod | String | The most fine-grained period for which charges are calculated. | |
minMonthlyConsumption | Decimal | E | When applicable, the minimum monthly consumption allowed to be eligible for this tariff. |
maxMonthlyConsumption | Decimal | E | When applicable, the maximum monthly consumption allowed to be eligible for this tariff. |
minMonthlyDemand | Decimal | E | When applicable, the minimum monthly demand allowed to be eligible for this tariff. |
maxMonthlyDemand | Decimal | E | When applicable, the maximum monthly demand allowed to be eligible for this tariff. |
hasTimeOfUseRates | Boolean | Indicates whether this tariff contains one or more Time of Use Rate. | |
hasTieredRates | Boolean | Indicates whether this tariff contains one or more Tiered Rate. | |
hasContractedRates | Boolean | Indicates whether this tariff contains one or more Rate that can be contracted (sometimes called by-passable or associated with a price to compare). | |
hasTariffApplicability | Boolean | E | Indicates that this tariff has additional eligibility criteria, as specified in the TariffProperty collection (below). |
hasRateApplicability | Boolean | Indicates that one or more rates on this tariff are only applicable to customers with a particular circumstance. When true, this will be specified in the TariffProperty collection, and also on the TariffRate or rates in question. | |
hasNetMetering | Boolean | E | Indicates whether this tariff contains one or more net metered rates. | | privacy | String | E | Privacy status of the tariff. Possible values are PUBLIC , UNLISTED or PRIVATE . |
properties | List of TariffProperty | The properties on this tariff. See below for the TariffProperty structure. | |
rates | List of TariffRate | The rates for this tariff. See below for TariffRate structure | |
documents | List of TariffDocument | The documents for this tariff. See below for TariffDocument structure |
Tariff Rate
The TariffRate
object has the following data structure.
Name | Type | Fields | Description |
---|---|---|---|
tariffRateId | Long | M | Unique Arcadia ID (primary key) for each tariff rate |
tariffId | Long | M | Associates the rate with a tariff (foreign key) |
riderTariffId | Long | E | Tariff ID of the rider attached to this tariff version. null otherwise |
riderId | Long | M | Master Tariff ID of the rider linked to this tariff rate. |
tariffSequenceNumber | Integer | M | Sequence of this rate in the tariff, for display purposes only (e.g. this is the order on the bill) |
tariffBookSequenceNumber | Integer | E | Sequence of this rate in the tariff source document, if it differs from tariffSequenceNumber |
rateGroupName | String | M | Name of the group this rate belongs to |
tariffBookRateGroupName | String | E | Name of the group this rate belongs to in the tariff source document, if it differs from rateGroupName |
rateName | String | M | Name of this rate. Can be null (in which case use the group name) |
tariffBookRateName | String | E | Name of this rate in the tariff source document, if it differs from rateName |
fromDateTime | DateTime | If populated, this indicates the rate's effective date is not the same as that of its tariff | |
toDateTime | DateTime | If populated, this indicates the rates end date is not the same as that of its tariff | |
territory | Territory | Only populated when this rate applies to a different region than the whole tariff (e.g. California Baseline Regions). This how-to has more. | |
season | Season | The season this rate applies to. Only used for seasonal rates (null otherwise) | |
timeOfUse | TimeOfUse | The time period this rate applies to. Only used for TOU rates (null otherwise) | |
chargeType | String | Possible values are:FIXED_PRICE - a fixed charge for the periodCONSUMPTION_BASED - based on quantity used (e.g. kW/h)DEMAND_BASED - based on the peak demand (e.g. kW)QUANTITY - a rate per number of items (e.g. $5 per street light)FORMULA - a rate that has a specific or custom formulaMINIMUM - a minimum amount that the LSE will charge you, overriding lower pre-tax chargesMAXIMUM - a maximum amount that the LSE will charge you, overriding higher pre-tax chargesTAX - a percentage tax rate which is applied to the sum of all of the other charges on a bill | |
chargeClass | String | A comma-separated string that indicates what class(es) of charges this rate is for. Values include:SUPPLY - Energy-related charges.TRANSMISSION - Transmission level delivery charges.DISTRIBUTION - Distribution level (last mile) delivery charges of moving electricity into your home or business.TAX - Tax surcharges that appear in the utility tariff document.CONTRACTED - Charges that get replaced or overridden when you pass the retail (contracted) energy supply rate in the calculation.USER_ADJUSTED - Additional or custom rates you can add to a public or private tariff. An example would be a local tax rate which Arcadia does not model but you would want included.AFTER_TAX - Charges which apply post utility and other taxes. A good example would be the California Climate credit which is applied to the bill after the taxes are applied to the bill subtotal.OTHER - Charges which cannot be classified in any of the above buckets. This is very rare. NON_BYPASSABLE - Charges which cannot be offset by credits (usually Net Metering) | |
chargePeriod | String | Indicates what period this charge is calculated for. This is usually the same as the billing period (and is usually monthly) but can be other intervals. Possible values are:MONTHLY - each calendar monthDAILY - calculated for each dayQUARTERLY - every 3 monthsANNUALLY - every year | |
transactionType | String | E | Indicates whether this rate is BUY (charge when importing from the grid, no credit when exporting), SELL (credit when exporting to the grid, no charge when importing), or NET (charge when importing, credit when exporting) with imports and exports resolved according to the chargePeriod . BUY_IMPORT (charge only when importing) and SELL_EXPORT (credit only when exporting) indicates that imports and exports are resolved in real-time (instantaneous netting). |
quantityKey | String | When not null , the property that defines the type of quantity this rate applies to. (e.g. billingMeter : property which defines the number of billing meters the rate will apply to) | |
applicabilityKey | String | When not null , the property that defines the eligibility criteria for this rate. (e.g. connectionType : property which defines how the service is connected to the grid) | |
variableLimitKey | String | When populated this defines the variable which determines the upper limit(s) of this rate. (e.g. demandMultiplierTierswithkWhTiers2416: property which uses the demand value to drive the consumption limits) | |
variableRateKey | String | When not null , this is the name of the property that defines the variable rate. In this case, the rate field is null , or can (rarely) be used as an input to the determination of the variable rate. (e.g massachusettsResidentialRetailPrevailingRates : property which provides the regional prevailing residential supply rate for Massachusetts ) | |
variableFactorKey | String | When not null , this is the name of the property that defines the variable factor to apply to this rate. (e.g billingPeriodProrationFactor: property which defines a prorated number of billing days) | |
rateBands | List of TariffRateBand | See the data definition below |
Tariff Rate Band
The TariffRateBand
object has the following data structure.
Name | Type | Description |
---|---|---|
tariffRateBandId | Long | Unique Arcadia ID (primary key) for each Band |
tariffRateId | Long | ID of the rate this band belongs to (foreign key) |
rateSequenceNumber | Integer | This bands position in the bands for its rate |
hasConsumptionLimit | Boolean | true indicates that this has banded consumption |
consumptionUpperLimit | Decimal | When hasConsumptionLimit is true , this indicates the upper consumption limit of this band. null means no upper limit |
hasDemandLimit | Boolean | true indicates that this has banded demand |
demandUpperLimit | Decimal | When hasDemandLimit is true , this indicates the upper demand limit of this band. null means no upper limit |
hasPropertyLimit | Boolean | true indicates that this has a limit based on a property |
propertyUpperLimit | Decimal | When hasPropertyLimit is true , this indicates the upper limit of this band. null means no upper limit |
prevUpperLimit | Integer | The upper limit of the previous rate band for this rate |
applicabilityValue | String | When not null , this indicates the value of applicability property that qualifies for this rate. |
calculationFactor | Decimal | A factor to be applied to the cost of the rate. |
rateAmount | Decimal | Charge amount for this band |
rateUnit | String | Possible values are:COST_PER_UNIT - rate amount multiplied by the number of unitsPERCENTAGE - percentage of a value (e.g. percentage of overall bill) |
isCredit | Boolean | When true this band is a credit amount (reduces the bill) |
Tariff Document
The TariffDocument
object has the following data structure.
Name | Type | Description |
---|---|---|
tariffId | Long | The tariff ID associated with this document |
documentId | Long | Unique ID of the document associated with this tariff |
documentSectionId | Long | Unique ID of the section of the documentSection associated with this tariff |
document | Document | The Document object associated with this tariff |
Document
The Document
object has the following data structure.
Name | Type | Description |
---|---|---|
documentId | Long | Unique ID of this document |
documentTitle | String | Title of this document |
archiveUrl | String | URL for Arcadia's archive of this document |
sourceUrl | String | URL for source document (if applicable) |
sourceContentType | String | Type of source document, possible values are (???) |
lseId | Long | ID of the LSE associated with this document |
lseName | String | Name of the LSE associated with this document |
territoryId | Long | ID of the territory associated with this document |
territoryName | String | Name of the territory associated with this document |
sequenceNumber | Integer | The position of this document in all documents for the LSE |
parentDocumentId | Long | The documentId of the parent document of this document, if this document is part of a collection |
sections | List of DocumentSection | Document sections, typically corresponding to specific tariffs |
priorDocumentId | Long | documentId of the document for the previous version of this tariff |
Document Section
The DocumentSection
object has the following data structure.
Name | Type | Description |
---|---|---|
documentSectionId | Long | Unique ID of this document section |
documentId | Long | Unique ID of the document associated with this section |
sectionHeading | String | Title of the document section |
sectionType | String | Possible values are SERVICE , TARIFF , CLIMATE_ZONE , or UTILITY_CLIMATE_ZONE |
startPage | Integer | The page number of the document this section starts on |
customerClass | String | The type of customer this document section concerns. Possible values are GENERAL, RESIDENTIAL, SPECIAL_USE or PROPOSED |
revised | Boolean | Whether this document has been revised from the original |
priorDocumentSectionId | Long | Unique ID of the document section for the previous version of this tariff |
Tariff Property
Tariff properties represent metadata about a tariff. They might tell you things like, "What values are required to do a calculation with this tariff?" or "What do I have to do to be eligible for this tariff?" They're broken down into many types, the most important of which are listed below.
APPLICABILITIES
Tariff properties of type APPLICABILITY
tell you whether or not a customer is eligible to receive service under a particular tariff. For example, a tariff that is only for electric vehicles might have the hasElectricVehicle
applicability property.
RATE CRITERIA
Tariff properties of type RATE_CRITERIA
represent things that you need to know to properly calculate the tariff. This includes obvious things like consumption
and demand
, but also things like dailyMedicalAllowance
or isSmartRateCustomer
.
For things other than consumption
and demand
, we usually set a reasonable default value so you don't have to answer questions about every single property before doing a calculation. If you want to set these values yourself, though, you can do that by running through the list of properties returned when you set populateProperties
to true
when getting a tariff.
DATA STRUCTURE
The TariffProperty
object has the following data structure.
Name | Type | Fields | Description |
---|---|---|---|
keyName | String | M | Unique name for this property |
period | String | If applicable the type of time of use. Possible values are "ON_PEAK" , "PARTIAL_PEAK" , "OFF_PEAK" , and "CRITICAL_PEAK" . | |
displayName | String | M | The display name of this property |
keyspace | String | M | Top-level categorization of the property hierarchy |
family | String | M | Second level categorization of the property hierarchy, below keyspace |
description | String | M | A longer description of the tariff property. Good for further explanation as part of a customer "questionnaire" |
dataType | String | M | The data type of this property. Possible values are string , choice , boolean , date , decimal , integer , formula , demand |
propertyTypes | String | M | The category of property. Possible values are APPLICABILITY , RATE_CRITERIA , BENEFIT , DATA_REPUTATION , SERVICE_TERMS |
operator | String | The mathematical operator associated with this property's value, where applicable. | |
propertyValue | String | If applicable the specific value of this property. | |
minValue | String | If applicable the minimum value of this property. | |
maxValue | String | If applicable the maximum value of this property. | |
choices | Array of Choices | The possible choices for this array | |
formulaDetail | String | If this property is a FORMULA type, the formula details will be in this field. | |
isDefault | Boolean | Whether the value of this Property is the default value. |
Here's an example in JSON of a fully populated tariff, containing tariff rates and tariff rate bands:
{
"tariffId":512,
"masterTariffId":512,
"priorTariffId":null,
"lseId":2756,
"lseName":"Georgia Power Co",
"distributionLseId":null,
"tariffCode":"R-17",
"tariffName":"Residential Service",
"tariffType":"DEFAULT",
"customerClass":"RESIDENTIAL",
"territoryId":3114,
"effectiveDate":"2011-03-01T00:00:00.000-0800",
"endDate":null,
"isActive":true,
"hasNetMetering":true,
"minMonthlyConsumption":null,
"maxMonthlyConsumption":null,
"minMonthlyDemand":null,
"maxMonthlyDemand":null,
"billingPeriod":"MONTHLY",
"properties":null,
"timeZone":"US/Eastern",
"currency":"USD",
"rates":[
{
"tariffRateId":2734,
"tariffId":512,
"riderId":null,
"tariffSequenceNumber":0,
"rateGroupName":"Basic Service Charge",
"rateName":"Basic Service Charge",
"territory":null,
"season":null,
"timeOfUse":null,
"chargeType":"FIXED_PRICE",
"chargePeriod":"MONTHLY",
"quantityKey":null,
"applicabilityKey":null,
"variableLimitKey":null,
"rateBands":[
{
"tariffRateBandId":3258,
"tariffRateId":2734,
"rateSequenceNumber":1,
"hasConsumptionLimit":false,
"consumptionUpperLimit":null,
"hasDemandLimit":false,
"demandUpperLimit":null,
"hasPropertyLimit":false,
"propertyUpperLimit":null,
"applicabilityValue":null,
"calculationFactor":null,
"rateAmount":.090000,
"rateUnit":"COST_PER_UNIT",
"isCredit":false
}
]
},
{
"tariffRateId":2735,
"tariffId":512,
"riderId":null,
"tariffSequenceNumber":1,
"rateGroupName":"Energy Charges",
"rateName":"Winter Energy Charges",
"territory":null,
"season":{
"seasonId":314,
"lseId":2756,
"seasonGroupId":3,
"seasonName":"Winter",
"seasonFromMonth":10,
"seasonFromDay":1,
"seasonToMonth":5,
"seasonToDay":31
},
"timeOfUse":null,
"chargeType":"CONSUMPTION_BASED",
"chargePeriod":"MONTHLY",
"quantityKey":null,
"applicabilityKey":null,
"variableLimitKey":null,
"rateBands":[
{
"tariffRateBandId":3259,
"tariffRateId":2735,
"rateSequenceNumber":1,
"hasConsumptionLimit":true,
"consumptionUpperLimit":650.0,
"hasDemandLimit":false,
"demandUpperLimit":null,
"hasPropertyLimit":false,
"propertyUpperLimit":null,
"applicabilityValue":null,
"calculationFactor":null,
"rateAmount":.050633,
"rateUnit":"COST_PER_UNIT",
"isCredit":false
},
{
"tariffRateBandId":3260,
"tariffRateId":2735,
"rateSequenceNumber":2,
"hasConsumptionLimit":true,
"consumptionUpperLimit":1000.0,
"hasDemandLimit":false,
"demandUpperLimit":null,
"hasPropertyLimit":false,
"propertyUpperLimit":null,
"applicabilityValue":null,
"calculationFactor":null,
"rateAmount":.043443,
"rateUnit":"COST_PER_UNIT",
"isCredit":false
},
{
"tariffRateBandId":3261,
"tariffRateId":2735,
"rateSequenceNumber":3,
"hasConsumptionLimit":true,
"consumptionUpperLimit":null,
"hasDemandLimit":false,
"demandUpperLimit":null,
"hasPropertyLimit":false,
"propertyUpperLimit":null,
"applicabilityValue":null,
"calculationFactor":null,
"rateAmount":.042647,
"rateUnit":"COST_PER_UNIT",
"isCredit":false
}
]
},
]
}