ConsumerDataStandardsAustralia / standards-maintenance

This repository houses the interactions, consultations and work management to support the maintenance of baselined components of the Consumer Data Right API Standards and Information Security profile.
41 stars 9 forks source link

Add new pricing models to EnergyPlanContractV2 #623

Closed rhys-ergon closed 2 months ago

rhys-ergon commented 7 months ago

Description

EnergyPlanContractV2 has the following pricing model options:

Ergon Energy has several contract pricing models that do not fit into any of the above options, these are:

Area Affected

Schema: EnergyPlanContractV2 Property: pricingModel Endpoint: GET /energy/accounts/{accountId}

Change Proposed

Add 3 new pricing model options:

  1. DEMAND – This is to cover demand tariff contracts.
  2. DEMAND_CONT_LOAD – This is to cover demand tariff contracts with controlled load tariffs.
  3. OTHER – This is to cover multiple primary tariffs and primary tariffs as controlled load. Since these pricing models are likely unique to regional QLD, there may not be benefit in creating explicit categories and this option can be used by other energy retailers if they have niche pricing models.

DSB Proposed Solution

The proposed solution can be found through the staging link provided in https://github.com/ConsumerDataStandardsAustralia/standards-maintenance/issues/623#issuecomment-2024328249

mattyp commented 6 months ago

@rhys-ergon: on demand tariffs, I agree that the current demand tariff data structure is currently broken. Demand charges are currently defined in the standards as an alternative to singe rate or time-of-use rates within a tariff period, but the industry calculates demand tariffs in addition to single rates (conceivably TOU rates, too), rather than an alternative to the single rates.

Demand tariffs are the defacto standard for most new plans on the AusGrid network (NSW largest), so it is quickly becoming a material issue. EME are somewhat working around this by including the demandCharges property on the tariffPeriod object anyway, even though the tariffPeriod object has a rateBlockUType of singleRate (just don't mention the quality of data within those demandCharges objects...).

Give this is broken in the standards, what are the options?

You have suggested an option of elevating demand charges to dedicated pricing models. I can see the logic in that. This makes it very clear to data consumers that there are demand components to the plan. The downside is that a whole new structure needs to be defined which essentially duplicates 99% of existing structures for other pricing models (which may not be a big deal). Also, which pricing model is assigned for plans that have demand charges for one tariff period but not in another (e.g. demand for winter, not for summer)?

As an alternative option, what do you think about declaring demandCharges to be a component property of a tariff period (tariffPeriod), as an independent sibling to existing rates (singleRate, timeOfUseRates)? This involves removing demandCharges as a rateBlockUType enum option. This property then outlines the demand charges that are in addition to the usage rates, which aligns with how the industry calculates this tariff. It can be conditional on an additional tariffPeriod boolean property called hasDemandCharges being set to true. The upside is that this augments existing pricing models and so is extensible to any pricing models, it solves for the in-between plans which have demand charges in on tariff period but not in another, and that it aligns with the industry calculation methods. The downside is that data consumers need to drill deep into the structure to discover if the plan includes a demand component or not (not such a big deal).

BTW, how do the 'multiple primary tariff' plans work in practice?

rhys-ergon commented 5 months ago

Hi @mattyp, thanks for the feedback. I was initially just proposing adding the new models to the pricingModel enum without any changes to the schemas in EnergyPlanContractV2. I think I would need to see an example of your proposed data structure to make sure I understand the changes you're suggesting.

Also, which pricing model is assigned for plans that have demand charges for one tariff period but not in another (e.g. demand for winter, not for summer)?

Some options would be:

how do the 'multiple primary tariff' plans work in practice?

In our case, an example would be a rural property with a house (residential tariff) and workshop (business tariff). I think this model is specific to rural Queensland.

DannyDuong commented 4 months ago

DEECA does not agree with extending the pricing model options for EnergyPlanContractV2.

The EnergyPlanContractV2.pricingModel is designed for energy usage charges. All other charges are considered in addition to the energy usage charges.

Adding additional enum options to the EnergyPlanContractV2.pricingModel can cause confusion, as to when we deal with a combination of charges and when we don't.

For example, in addition to the energy usage charges, an offer/ plan can have:

  1. Demand charges
  2. Greenpower charges
  3. Solar tariffs

If the above mix of additional charges were added to the existing pricing model options, the enum list combinations would grow exponentially, i.e. adding demand in the mix we could go from 6 options to 12 (e.g. SINGLE_RATE_CONT_LOAD_DEMAND ), adding more (greenpower ,solar) would take that to 24, 48 + combinations.

Looking back at the standards, we may have already gone wrong by adding CONT_LOAD in the pricing model enum values, it could’ve easily been a flag.

The field itself becomes less descriptive and accurate the more complex offers become. The description of the pricing model is defined in the existence of objects - i.e. is there a demandCharges array within a EnergyPlanTariffPeriod object.

Alternatively, rather than adding more enum options to the pricing model, we can add more flags. This will avoid the need to loop through the tariff periods and looking for nested pricing model components, an object with component flags could be added to plan details, e.g. "electricityContract": { ... "pricingComponents": { "controlledLoad": true, "demand": true, "greenPower": false, "solar": true, } ... }

Potentially, at that point the sole remaining pricing model descriptor (SINGLE_RATE, TIME_OF_USE, FLEXIBLE ) could move into the pricing components object as well

rhys-ergon commented 4 months ago

Thanks for the feedback @DannyDuong

The EnergyPlanContractV2.pricingModel is designed for energy usage charges. All other charges are considered in addition to the energy usage charges.

If that's the case, then we would request the DSB to update the description to make that clearer. Currently it's "The pricing model for the contract. "

One issue would remain for us, which is that Ergon can have customers on multiple primary tariffs, so one might have a single rate and a TOU rate. We could just choose one but firstly, we'd like to understand what pricingModel is trying to achieve in CDR?

mattyp commented 4 months ago

@rhys-ergon in your example of multiple primary tariffs, wouldn't that be two separate service points, each with their own tariff?

a rural property with a house (residential tariff) and workshop (business tariff)

HemangCDR commented 4 months ago

Below is the comment I attempted to post last week but someone got deleted. Re-psoting it as discussed in today's MI call (February 21) to help progress the discussion.


Prior to considering changes, it would be worth understanding if current structure can cater for these scenarios given they were considered during the design. I've tried to summarise them with comments/questions for further consideration.

Multiple Primary Tariffs (with/without CL)

Demand Tariffs (with/without CL)

Primary Tariffs that are controlled load tariffs

Feedback on the above is welcome.

rhys-ergon commented 4 months ago

@rhys-ergon in your example of multiple primary tariffs, wouldn't that be two separate service points, each with their own tariff?

a rural property with a house (residential tariff) and workshop (business tariff)

@mattyp yes correct, 2 service points/meters each with their own tariff, 1 NMI, 1 contract, 1 account

rhys-ergon commented 3 months ago

Thanks for the examples @HemangCDR .

Can we now just make this ticket to update the description of EnergyPlanContractV2.pricingModel to make it clearer that pricing model is only based on usage charges?

Example:

"The pricing model for the contract based on usage charges only. Contracts for gas must use SINGLE_RATE. Note that the detail for the enumeration values are:"

rhys-ergon commented 3 months ago

@rhys-ergon could you clarify this further? Is this a scenario where the customer has signed up for a controlled load only plan (i.e. no other rates?). If so, would this also be classified as SINGLE_RATE_CONT_LOAD and you could provide the rates within the EnergyPlanControlledLoad array.

@HemangCDR I think there could be an issue with this use case.

Is this a scenario where the customer has signed up for a controlled load only plan (i.e. no other rates?)

That's correct.

The issue is that tariffPeriod is mandatory but its not applicable for this situation. image

HemangCDR commented 3 months ago

Below is the summary of discussion on this CR:

Feedback on the above is welcome.

nils-work commented 2 months ago

This issue was discussed in MI18 and the decision was for no change as described in this comment.