HomeGuidesAPI ReferenceChangelog
Log In
Guides

How to Validate Savings Analyses

Simple steps for validating an analysis

In this guide, we'll step through what you can do to understand and confirm the data used in the context of a savings analysis.


Approach

Since rates come from tariffs and depend on account-holder criteria, including usage, the approach we'll take will use a specific account, and with the actual consumption and solar production profiles that you might expect to use in a simple integration. It will also be repeatable for any given account.

How It Works

A savings analysis compares a pre-solar scenario and a post-solar scenario. In order to model the savings given the parameters used in the proposal, we assume the exact same load curve in the pre-solar and post-solar scenarios, and then just calculate the aggregate difference. There are positive savings when the post-solar scenario costs less.

In order to validate the underlying data, we will make a couple of API calls to represent the pre-solar and post-solar hourly costs -- for the same load curve over the same time range (but on different tariffs to reflect the expected post-solar tariff). Each call will calculate the cost of energy over the specified range, and return it by hour so you can inspect and understand the savings in that period, which are part of the overall aggregate savings analysis.

In an NEM3 scenario, we can also make an additional call to pull the export rates for that same period and validate the cost calculations that show up accurately reflect the export rate on hours where net consumption is negative (implying exports back to the grid).

Validation Steps for an Existing Savings Analysis

To understand the Savings Analysis ('SA') data, calculation, and key metrics, this guide uses a single account-based SA, and steps through it end to end. You can take the same approach for any of your account's SAs to understand how the APIs work and validate the underlying data. The results at any stage can also be observed in the Switch UI if helpful to follow along visually.

To run the validation steps, we'll need an account ID, along with the pre-solar profile id and the post-solar profile IDID used in the savings analysis. If we further want to inspect export rates, such as with a NEM3 tariff, we'll also need the MTID for the relevant NEM3 tariff.

If those objects/IDs are not available, section #2 below will walk you through creating the example we're using here, which has a providerAccountId ('pid') of "example-1".

Ok, let's get started.

1. Retrieve Net Hourly Cost for baseline/pre-solar scenario (used in a Savings Analysis)

Make the following request for your sample account to retrieve the baseline consumption data used in both the pre-solar and post-solar scenarios. (Note: this request assumes the account has the pre-solar tariff in this baseline cost calculation scenario. If running this exercise from scratch, you should update it on the account or pass a property key to specify this ahead of this step.)

You can use an account id or a pid:

POST Request: {{domain}}/rest/v1/accounts/pid/example-1/calculate/

Alternatively, using the system-generated account ID you can do the same with:

POST Request: {{domain}}/rest/v1/accounts/{{accountId}}/calculate/

The body of this request for our example, which inspects one day in July 2023, is:

_{  
  "fromDateTime": "2023-07-01",  
  "toDateTime": "2023-07-02",  
  "useIntelligentBaselining": "true",  
  "includeDefaultProfile": "true",  
  "autoBaseline": "true",  
  "minimums": "false",  
  "detailLevel": "CHARGE_TYPE",  
  "groupBy": "HOUR",  
  "fields": "EXT"  
}_

Notes:

  • "includeDefaultProfile": "true" uses the Typical baseline for the zipcode and region
  • "useIntelligentBaselining": "true" scales the shape of the typical load curve to any known consumption values applied to this account in defining its baseline load.

Here's the beginning of the response..

_{  
    "status": "success",  
    "count": 1,  
    "type": "CalculatedCost",  
    "requestId": "0a0fb410-8a18-4738-ae16-8b88f050c497",  
    "results": \[  
        {  
            "calculatedCostId": "09f878a3-012b-4d45-b866-a66bebfe0de7",  
            "masterTariffId": 522,  
            "tariffName": "Residential",  
            "totalCost": 10.28000000,  
            "fromDateTime": "2023-07-01T00:00:00-07:00",  
            "toDateTime": "2023-07-02T00:00:00-07:00",  
            "currency": "USD",  
            "summary": {  
                "ELECTRICITY": {  
                    "kWh": 28.82,  
                    "kW": 3.75  
                },  
                "subTotalCost": 10.28,  
                "taxCost": 0.00,  
                "totalCost": 10.28,  
                "adjustedTotalCost": 10.29,  
                "kWh": 28.82,  
                "kW": 1.93  
            },  
            "accuracy": 100.00000000,  
            "items": \[  
                {  
                    "fromDateTime": "2023-07-01T00:00:00-07:00",  
                    "toDateTime": "2023-07-01T01:00:00-07:00",  
                    "quantityKey": "fixed",  
                    "rateAmount": 0.00000000,  
                    "itemQuantity": 0.00000000,  
                    "cost": 0.00000000,  
                    "chargeType": "FIXED_PRICE"  
                },  
                {  
                    "fromDateTime": "2023-07-01T00:00:00-07:00",  
                    "toDateTime": "2023-07-01T01:00:00-07:00",  
                    "quantityKey": "consumption",  
                    "rateAmount": 0.35701223,  
                    "itemQuantity": 0.86398500,  
                    "cost": 0.30845321,  
                    "chargeType": "CONSUMPTION_BASED"_

You might notice each hourly interval has both a FIXED and CONSUMPTION-based charge type. We'll focus on CONSUMPTION rates in this exercise, but this is where fees show up as well. Each interval repeats in this format and can be referenced later for hour-by-hour comparisons of pre-solar vs post-solar scenarios.


2. Retrieve Net Hourly Cost for post-solar scenario (used in a Savings Analysis)

Now make the following request to retrieve the cost data used in the post-solar scenario. (Note: this request assumes the account now has the post-solar tariff in this post-solar cost calculation scenario. If running this exercise from scratch, you should update it on the account or pass a property key to specify this ahead of this step.)

You can use an account id or a pid:

POST Request: {{domain}}/rest/v1/accounts/pid/example-1/calculate/

Alternatively, using the system-generated account ID you can do the same with:

_POST Request: {{domain}}/rest/v1/accounts/{{accountId}}/calculate/_

The body of this request for our example, which inspects one day in July 2023, is:

_{  
  "fromDateTime": "2023-07-01",  
  "toDateTime": "2023-07-02",  
  "useIntelligentBaselining": "true",  
  "includeDefaultProfile": "true",  
  "autoBaseline": "true",  
  "minimums": "false",  
  "detailLevel": "CHARGE_TYPE",  
  "groupBy": "HOUR",  
  "fields": "EXT",  
  "propertyInputs": [{  
    "keyName": "profileId",  
    "dataValue": "448ea77c-dcbf-4405-bb5a-568197cf8687",  
    "operator": "-"  
  }]  
}_
  • Note: 448ea77c-dcbf-4405-bb5a-568197cf8687 is the id of the solar profile used in our hypothetical Savings Analysis.

Here's the beginning of the response..

_{  
    "status": "success",  
    "count": 1,  
    "type": "CalculatedCost",  
    "requestId": "a4eb5019-b6ed-41ec-b90a-9bd8343ae4b2",  
    "results": \[  
        {  
            "calculatedCostId": "71e814bf-bb5a-41c8-9576-ab3f4e88fda2",  
            "masterTariffId": 3424821,  
            "tariffName": "Residential Time-Of-Use - Electric Home - NEM 3.0",  
            "totalCost": 1.28000000,  
            "fromDateTime": "2023-07-01T00:00:00-07:00",  
            "toDateTime": "2023-07-02T00:00:00-07:00",  
            "currency": "USD",  
            "summary": {  
                "SOLAR_PV": {  
                    "kWh": 46.12,  
                    "kW": 0.00,  
                    "systemSize": 8  
                },  
                "ELECTRICITY": {  
                    "kWh": 28.82,  
                    "kW": 3.75  
                },  
                "subTotalCost": 1.28,  
                "taxCost": 0.00,  
                "totalCost": 1.28,  
                "adjustedTotalCost": 1.28,  
                "kWh": -17.30,  
                "kW": 1.62,  
                "import": 12.42,  
                "export": 29.73  
            },  
            "accuracy": 100.00000000,  
            "items": \[  
                {  
                    "fromDateTime": "2023-07-01T00:00:00-07:00",  
                    "toDateTime": "2023-07-01T01:00:00-07:00",  
                    "quantityKey": "consumption",  
                    "rateAmount": 0.30813000,  
                    "itemQuantity": 0.86398500,  
                    "cost": 0.26621970,  
                    "chargeType": "CONSUMPTION_BASED"  
                },  
                {  
                    "fromDateTime": "2023-07-01T00:00:00-07:00",  
                    "toDateTime": "2023-07-01T01:00:00-07:00",  
                    "quantityKey": "quantity",  
                    "rateAmount": 0.02053375,  
                    "itemQuantity": 1.00000000,  
                    "cost": 0.02053375,  
                    "chargeType": "QUANTITY"  
                },_

...Let's skip ahead to the first negative itemQuantity value, which indicates an export of energy back to the grid, and then we'll include the remaining hours of the day...

  • Note: In our example, we see the first export occur between 8am-9am. The date we picked falls on a Saturday, but this example modeled an 8 kW solar system so that it would have a >100% offset to our typical load profile overall, so it's not surprising that we see exports when the sun is shining even on the typical consumption pattern of a weekend.
_                {  
                    "fromDateTime": "2023-07-01T08:00:00-07:00",  
                    "toDateTime": "2023-07-01T09:00:00-07:00",  
                    "quantityKey": "consumption",  
                    "rateAmount": 0.07187955,  
                    "itemQuantity": -1.46189600,  
                    "cost": -0.10508043,  
                    "chargeType": "CONSUMPTION_BASED"  
                },  
                {  
                    "fromDateTime": "2023-07-01T08:00:00-07:00",  
                    "toDateTime": "2023-07-01T09:00:00-07:00",  
                    "quantityKey": "quantity",  
                    "rateAmount": 0.02053375,  
                    "itemQuantity": 1.00000000,  
                    "cost": 0.02053375,  
                    "chargeType": "QUANTITY"  
                },  
                {  
                    "fromDateTime": "2023-07-01T09:00:00-07:00",  
                    "toDateTime": "2023-07-01T10:00:00-07:00",  
                    "quantityKey": "consumption",  
                    "rateAmount": 0.07311719,  
                    "itemQuantity": -2.71365300,  
                    "cost": -0.19841468,  
                    "chargeType": "CONSUMPTION_BASED"  
                },  
                {  
                    "fromDateTime": "2023-07-01T09:00:00-07:00",  
                    "toDateTime": "2023-07-01T10:00:00-07:00",  
                    "quantityKey": "quantity",  
                    "rateAmount": 0.02053375,  
                    "itemQuantity": 1.00000000,  
                    "cost": 0.02053375,  
                    "chargeType": "QUANTITY"  
                },  
                {  
                    "fromDateTime": "2023-07-01T10:00:00-07:00",  
                    "toDateTime": "2023-07-01T11:00:00-07:00",  
                    "quantityKey": "consumption",  
                    "rateAmount": 0.07457886,  
                    "itemQuantity": -3.48146000,  
                    "cost": -0.25964332,  
                    "chargeType": "CONSUMPTION_BASED"  
                },  
                {  
                    "fromDateTime": "2023-07-01T10:00:00-07:00",  
                    "toDateTime": "2023-07-01T11:00:00-07:00",  
                    "quantityKey": "quantity",  
                    "rateAmount": 0.02053375,  
                    "itemQuantity": 1.00000000,  
                    "cost": 0.02053375,  
                    "chargeType": "QUANTITY"  
                },  
                {  
                    "fromDateTime": "2023-07-01T11:00:00-07:00",  
                    "toDateTime": "2023-07-01T12:00:00-07:00",  
                    "quantityKey": "consumption",  
                    "rateAmount": 0.07494740,  
                    "itemQuantity": -4.07633900,  
                    "cost": -0.30551101,  
                    "chargeType": "CONSUMPTION_BASED"  
                },  
                {  
                    "fromDateTime": "2023-07-01T11:00:00-07:00",  
                    "toDateTime": "2023-07-01T12:00:00-07:00",  
                    "quantityKey": "quantity",  
                    "rateAmount": 0.02053375,  
                    "itemQuantity": 1.00000000,  
                    "cost": 0.02053375,  
                    "chargeType": "QUANTITY"  
                },  
                {  
                    "fromDateTime": "2023-07-01T12:00:00-07:00",  
                    "toDateTime": "2023-07-01T13:00:00-07:00",  
                    "quantityKey": "consumption",  
                    "rateAmount": 0.07427278,  
                    "itemQuantity": -4.34146100,  
                    "cost": -0.32245238,  
                    "chargeType": "CONSUMPTION_BASED"  
                },  
                {  
                    "fromDateTime": "2023-07-01T12:00:00-07:00",  
                    "toDateTime": "2023-07-01T13:00:00-07:00",  
                    "quantityKey": "quantity",  
                    "rateAmount": 0.02053375,  
                    "itemQuantity": 1.00000000,  
                    "cost": 0.02053375,  
                    "chargeType": "QUANTITY"  
                },  
                {  
                    "fromDateTime": "2023-07-01T13:00:00-07:00",  
                    "toDateTime": "2023-07-01T14:00:00-07:00",  
                    "quantityKey": "consumption",  
                    "rateAmount": 0.07863340,  
                    "itemQuantity": -4.30434500,  
                    "cost": -0.33846528,  
                    "chargeType": "CONSUMPTION_BASED"  
                },  
                {  
                    "fromDateTime": "2023-07-01T13:00:00-07:00",  
                    "toDateTime": "2023-07-01T14:00:00-07:00",  
                    "quantityKey": "quantity",  
                    "rateAmount": 0.02053375,  
                    "itemQuantity": 1.00000000,  
                    "cost": 0.02053375,  
                    "chargeType": "QUANTITY"  
                },  
                {  
                    "fromDateTime": "2023-07-01T14:00:00-07:00",  
                    "toDateTime": "2023-07-01T15:00:00-07:00",  
                    "quantityKey": "consumption",  
                    "rateAmount": 0.18442886,  
                    "itemQuantity": -3.86914200,  
                    "cost": -0.71358145,  
                    "chargeType": "CONSUMPTION_BASED"  
                },  
                {  
                    "fromDateTime": "2023-07-01T14:00:00-07:00",  
                    "toDateTime": "2023-07-01T15:00:00-07:00",  
                    "quantityKey": "quantity",  
                    "rateAmount": 0.02053375,  
                    "itemQuantity": 1.00000000,  
                    "cost": 0.02053375,  
                    "chargeType": "QUANTITY"  
                },  
                {  
                    "fromDateTime": "2023-07-01T15:00:00-07:00",  
                    "toDateTime": "2023-07-01T16:00:00-07:00",  
                    "quantityKey": "consumption",  
                    "rateAmount": 0.20365138,  
                    "itemQuantity": -2.96846900,  
                    "cost": -0.60453281,  
                    "chargeType": "CONSUMPTION_BASED"  
                },  
                {  
                    "fromDateTime": "2023-07-01T15:00:00-07:00",  
                    "toDateTime": "2023-07-01T16:00:00-07:00",  
                    "quantityKey": "quantity",  
                    "rateAmount": 0.02053375,  
                    "itemQuantity": 1.00000000,  
                    "cost": 0.02053375,  
                    "chargeType": "QUANTITY"  
                },  
                {  
                    "fromDateTime": "2023-07-01T16:00:00-07:00",  
                    "toDateTime": "2023-07-01T17:00:00-07:00",  
                    "quantityKey": "consumption",  
                    "rateAmount": 0.50130076,  
                    "itemQuantity": -1.78790300,  
                    "cost": -0.89627713,  
                    "chargeType": "CONSUMPTION_BASED"  
                },  
                {  
                    "fromDateTime": "2023-07-01T16:00:00-07:00",  
                    "toDateTime": "2023-07-01T17:00:00-07:00",  
                    "quantityKey": "quantity",  
                    "rateAmount": 0.02053375,  
                    "itemQuantity": 1.00000000,  
                    "cost": 0.02053375,  
                    "chargeType": "QUANTITY"  
                },  
                {  
                    "fromDateTime": "2023-07-01T17:00:00-07:00",  
                    "toDateTime": "2023-07-01T18:00:00-07:00",  
                    "quantityKey": "consumption",  
                    "rateAmount": 0.51647094,  
                    "itemQuantity": -0.52478200,  
                    "cost": -0.27103465,  
                    "chargeType": "CONSUMPTION_BASED"  
                },  
                {  
                    "fromDateTime": "2023-07-01T17:00:00-07:00",  
                    "toDateTime": "2023-07-01T18:00:00-07:00",  
                    "quantityKey": "quantity",  
                    "rateAmount": 0.02053375,  
                    "itemQuantity": 1.00000000,  
                    "cost": 0.02053375,  
                    "chargeType": "QUANTITY"  
                },  
                {  
                    "fromDateTime": "2023-07-01T18:00:00-07:00",  
                    "toDateTime": "2023-07-01T19:00:00-07:00",  
                    "quantityKey": "consumption",  
                    "rateAmount": 0.52669000,  
                    "itemQuantity": 0.78234600,  
                    "cost": 0.41205381,  
                    "chargeType": "CONSUMPTION_BASED"  
                },  
                {  
                    "fromDateTime": "2023-07-01T18:00:00-07:00",  
                    "toDateTime": "2023-07-01T19:00:00-07:00",  
                    "quantityKey": "quantity",  
                    "rateAmount": 0.02053375,  
                    "itemQuantity": 1.00000000,  
                    "cost": 0.02053375,  
                    "chargeType": "QUANTITY"  
                },  
                {  
                    "fromDateTime": "2023-07-01T19:00:00-07:00",  
                    "toDateTime": "2023-07-01T20:00:00-07:00",  
                    "quantityKey": "consumption",  
                    "rateAmount": 0.52669000,  
                    "itemQuantity": 1.62112300,  
                    "cost": 0.85382927,  
                    "chargeType": "CONSUMPTION_BASED"  
                },  
                {  
                    "fromDateTime": "2023-07-01T19:00:00-07:00",  
                    "toDateTime": "2023-07-01T20:00:00-07:00",  
                    "quantityKey": "quantity",  
                    "rateAmount": 0.02053375,  
                    "itemQuantity": 1.00000000,  
                    "cost": 0.02053375,  
                    "chargeType": "QUANTITY"  
                },  
                {  
                    "fromDateTime": "2023-07-01T20:00:00-07:00",  
                    "toDateTime": "2023-07-01T21:00:00-07:00",  
                    "quantityKey": "consumption",  
                    "rateAmount": 0.52669000,  
                    "itemQuantity": 1.46847000,  
                    "cost": 0.77342846,  
                    "chargeType": "CONSUMPTION_BASED"  
                },  
                {  
                    "fromDateTime": "2023-07-01T20:00:00-07:00",  
                    "toDateTime": "2023-07-01T21:00:00-07:00",  
                    "quantityKey": "quantity",  
                    "rateAmount": 0.02053375,  
                    "itemQuantity": 1.00000000,  
                    "cost": 0.02053375,  
                    "chargeType": "QUANTITY"  
                },  
                {  
                    "fromDateTime": "2023-07-01T21:00:00-07:00",  
                    "toDateTime": "2023-07-01T22:00:00-07:00",  
                    "quantityKey": "consumption",  
                    "rateAmount": 0.36481000,  
                    "itemQuantity": 1.14166000,  
                    "cost": 0.41648898,  
                    "chargeType": "CONSUMPTION_BASED"  
                },  
                {  
                    "fromDateTime": "2023-07-01T21:00:00-07:00",  
                    "toDateTime": "2023-07-01T22:00:00-07:00",  
                    "quantityKey": "quantity",  
                    "rateAmount": 0.02053375,  
                    "itemQuantity": 1.00000000,  
                    "cost": 0.02053375,  
                    "chargeType": "QUANTITY"  
                },  
                {  
                    "fromDateTime": "2023-07-01T22:00:00-07:00",  
                    "toDateTime": "2023-07-01T23:00:00-07:00",  
                    "quantityKey": "consumption",  
                    "rateAmount": 0.36481000,  
                    "itemQuantity": 0.89127300,  
                    "cost": 0.32514530,  
                    "chargeType": "CONSUMPTION_BASED"  
                },  
                {  
                    "fromDateTime": "2023-07-01T22:00:00-07:00",  
                    "toDateTime": "2023-07-01T23:00:00-07:00",  
                    "quantityKey": "quantity",  
                    "rateAmount": 0.02053375,  
                    "itemQuantity": 1.00000000,  
                    "cost": 0.02053375,  
                    "chargeType": "QUANTITY"  
                },  
                {  
                    "fromDateTime": "2023-07-01T23:00:00-07:00",  
                    "toDateTime": "2023-07-02T00:00:00-07:00",  
                    "quantityKey": "consumption",  
                    "rateAmount": 0.36481000,  
                    "itemQuantity": 0.73241000,  
                    "cost": 0.26719049,  
                    "chargeType": "CONSUMPTION_BASED"  
                },  
                {  
                    "fromDateTime": "2023-07-01T23:00:00-07:00",  
                    "toDateTime": "2023-07-02T00:00:00-07:00",  
                    "quantityKey": "quantity",  
                    "rateAmount": 0.02053375,  
                    "itemQuantity": 1.00000000,  
                    "cost": 0.02053375,  
                    "chargeType": "QUANTITY"  
                }  
            ],  
            "assumptions": \[ <this part of the response returns the modeling parameter values used>_

3. Verify the export rates (NEM3 example)

We can now see the underlying consumption data, and the pre-solar and _post-solar _costs for each of the hourly intervals used in the sample range we pulled, which roll up to the aggregate savings analysis calculation.

To go a step further and verify the correct export rates, let's inspect the NEM3 Tariff used in our example post-solar scenario, which is PGE's E-ELEC NEM3 Tariff.

Use this call to get the NEM Export rates for the time range inspected in the validation exercise:

GET Request: {{domain}}/rest/public/properties/avoidedCostCalculatorHourlyExportRate2023PGECZ3B/lookups?fromDateTime=2023-07-01&toDateTime=2023-07-02&pageCount=100&pageStart=0

Response:

{  
    "status": "success",  
    "count": 24,  
    "type": "PropertyLookup",  
    "results": [  
        {  
            "lookupId": 51326699,  
            "propertyKey": "avoidedCostCalculatorHourlyExportRate2023PGECZ3B",  
            "fromDateTime": "2023-07-01T00:00:00",  
            "toDateTime": "2023-07-01T01:00:00",  
            "bestValue": -0.052283980,  
            "bestAccuracy": 0,  
            "actualValue": -0.052283980,  
            "lseForecastValue": -0.052283980,  
            "lseForecastAccuracy": null,  
            "forecastValue": null,  
            "forecastAccuracy": null  
        },  
        {  
            "lookupId": 51326700,  
            "propertyKey": "avoidedCostCalculatorHourlyExportRate2023PGECZ3B",  
            "fromDateTime": "2023-07-01T01:00:00",  
            "toDateTime": "2023-07-01T02:00:00",  
            "bestValue": -0.051571120,  
            "bestAccuracy": 0,  
            "actualValue": -0.051571120,  
            "lseForecastValue": -0.051571120,  
            "lseForecastAccuracy": null,  
            "forecastValue": null,  
            "forecastAccuracy": null  
        },  
        {  
            "lookupId": 51326701,  
            "propertyKey": "avoidedCostCalculatorHourlyExportRate2023PGECZ3B",  
            "fromDateTime": "2023-07-01T02:00:00",  
            "toDateTime": "2023-07-01T03:00:00",  
            "bestValue": -0.050178490,  
            "bestAccuracy": 0,  
            "actualValue": -0.050178490,  
            "lseForecastValue": -0.050178490,  
            "lseForecastAccuracy": null,  
            "forecastValue": null,  
            "forecastAccuracy": null  
        },  
        {  
            "lookupId": 51326702,  
            "propertyKey": "avoidedCostCalculatorHourlyExportRate2023PGECZ3B",  
            "fromDateTime": "2023-07-01T03:00:00",  
            "toDateTime": "2023-07-01T04:00:00",  
            "bestValue": -0.050782350,  
            "bestAccuracy": 0,  
            "actualValue": -0.050782350,  
            "lseForecastValue": -0.050782350,  
            "lseForecastAccuracy": null,  
            "forecastValue": null,  
            "forecastAccuracy": null  
        },  
        {  
            "lookupId": 51326703,  
            "propertyKey": "avoidedCostCalculatorHourlyExportRate2023PGECZ3B",  
            "fromDateTime": "2023-07-01T04:00:00",  
            "toDateTime": "2023-07-01T05:00:00",  
            "bestValue": -0.051756620,  
            "bestAccuracy": 0,  
            "actualValue": -0.051756620,  
            "lseForecastValue": -0.051756620,  
            "lseForecastAccuracy": null,  
            "forecastValue": null,  
            "forecastAccuracy": null  
        },  
        {  
            "lookupId": 51326704,  
            "propertyKey": "avoidedCostCalculatorHourlyExportRate2023PGECZ3B",  
            "fromDateTime": "2023-07-01T05:00:00",  
            "toDateTime": "2023-07-01T06:00:00",  
            "bestValue": -0.053540830,  
            "bestAccuracy": 0,  
            "actualValue": -0.053540830,  
            "lseForecastValue": -0.053540830,  
            "lseForecastAccuracy": null,  
            "forecastValue": null,  
            "forecastAccuracy": null  
        },  
        {  
            "lookupId": 51326705,  
            "propertyKey": "avoidedCostCalculatorHourlyExportRate2023PGECZ3B",  
            "fromDateTime": "2023-07-01T06:00:00",  
            "toDateTime": "2023-07-01T07:00:00",  
            "bestValue": -0.054001000,  
            "bestAccuracy": 0,  
            "actualValue": -0.054001000,  
            "lseForecastValue": -0.054001000,  
            "lseForecastAccuracy": null,  
            "forecastValue": null,  
            "forecastAccuracy": null  
        },  
        {  
            "lookupId": 51326706,  
            "propertyKey": "avoidedCostCalculatorHourlyExportRate2023PGECZ3B",  
            "fromDateTime": "2023-07-01T07:00:00",  
            "toDateTime": "2023-07-01T08:00:00",  
            "bestValue": -0.050028220,  
            "bestAccuracy": 0,  
            "actualValue": -0.050028220,  
            "lseForecastValue": -0.050028220,  
            "lseForecastAccuracy": null,  
            "forecastValue": null,  
            "forecastAccuracy": null  
        },  
        {  
            "lookupId": 51326707,  
            "propertyKey": "avoidedCostCalculatorHourlyExportRate2023PGECZ3B",  
            "fromDateTime": "2023-07-01T08:00:00",  
            "toDateTime": "2023-07-01T09:00:00",  
            "bestValue": -0.049879550,  
            "bestAccuracy": 0,  
            "actualValue": -0.049879550,  
            "lseForecastValue": -0.049879550,  
            "lseForecastAccuracy": null,  
            "forecastValue": null,  
            "forecastAccuracy": null  
        },  
        {  
            "lookupId": 51326708,  
            "propertyKey": "avoidedCostCalculatorHourlyExportRate2023PGECZ3B",  
            "fromDateTime": "2023-07-01T09:00:00",  
            "toDateTime": "2023-07-01T10:00:00",  
            "bestValue": -0.051117190,  
            "bestAccuracy": 0,  
            "actualValue": -0.051117190,  
            "lseForecastValue": -0.051117190,  
            "lseForecastAccuracy": null,  
            "forecastValue": null,  
            "forecastAccuracy": null  
        },  
        {  
            "lookupId": 51326709,  
            "propertyKey": "avoidedCostCalculatorHourlyExportRate2023PGECZ3B",  
            "fromDateTime": "2023-07-01T10:00:00",  
            "toDateTime": "2023-07-01T11:00:00",  
            "bestValue": -0.052578860,  
            "bestAccuracy": 0,  
            "actualValue": -0.052578860,  
            "lseForecastValue": -0.052578860,  
            "lseForecastAccuracy": null,  
            "forecastValue": null,  
            "forecastAccuracy": null  
        },  
        {  
            "lookupId": 51326710,  
            "propertyKey": "avoidedCostCalculatorHourlyExportRate2023PGECZ3B",  
            "fromDateTime": "2023-07-01T11:00:00",  
            "toDateTime": "2023-07-01T12:00:00",  
            "bestValue": -0.052947400,  
            "bestAccuracy": 0,  
            "actualValue": -0.052947400,  
            "lseForecastValue": -0.052947400,  
            "lseForecastAccuracy": null,  
            "forecastValue": null,  
            "forecastAccuracy": null  
        },  
        {  
            "lookupId": 51326711,  
            "propertyKey": "avoidedCostCalculatorHourlyExportRate2023PGECZ3B",  
            "fromDateTime": "2023-07-01T12:00:00",  
            "toDateTime": "2023-07-01T13:00:00",  
            "bestValue": -0.052272780,  
            "bestAccuracy": 0,  
            "actualValue": -0.052272780,  
            "lseForecastValue": -0.052272780,  
            "lseForecastAccuracy": null,  
            "forecastValue": null,  
            "forecastAccuracy": null  
        },  
        {  
            "lookupId": 51326712,  
            "propertyKey": "avoidedCostCalculatorHourlyExportRate2023PGECZ3B",  
            "fromDateTime": "2023-07-01T13:00:00",  
            "toDateTime": "2023-07-01T14:00:00",  
            "bestValue": -0.056633400,  
            "bestAccuracy": 0,  
            "actualValue": -0.056633400,  
            "lseForecastValue": -0.056633400,  
            "lseForecastAccuracy": null,  
            "forecastValue": null,  
            "forecastAccuracy": null  
        },  
        {  
            "lookupId": 51326713,  
            "propertyKey": "avoidedCostCalculatorHourlyExportRate2023PGECZ3B",  
            "fromDateTime": "2023-07-01T14:00:00",  
            "toDateTime": "2023-07-01T15:00:00",  
            "bestValue": -0.162428860,  
            "bestAccuracy": 0,  
            "actualValue": -0.162428860,  
            "lseForecastValue": -0.162428860,  
            "lseForecastAccuracy": null,  
            "forecastValue": null,  
            "forecastAccuracy": null  
        },  
        {  
            "lookupId": 51326714,  
            "propertyKey": "avoidedCostCalculatorHourlyExportRate2023PGECZ3B",  
            "fromDateTime": "2023-07-01T15:00:00",  
            "toDateTime": "2023-07-01T16:00:00",  
            "bestValue": -0.181651380,  
            "bestAccuracy": 0,  
            "actualValue": -0.181651380,  
            "lseForecastValue": -0.181651380,  
            "lseForecastAccuracy": null,  
            "forecastValue": null,  
            "forecastAccuracy": null  
        },  
        {  
            "lookupId": 51326715,  
            "propertyKey": "avoidedCostCalculatorHourlyExportRate2023PGECZ3B",  
            "fromDateTime": "2023-07-01T16:00:00",  
            "toDateTime": "2023-07-01T17:00:00",  
            "bestValue": -0.479300760,  
            "bestAccuracy": 0,  
            "actualValue": -0.479300760,  
            "lseForecastValue": -0.479300760,  
            "lseForecastAccuracy": null,  
            "forecastValue": null,  
            "forecastAccuracy": null  
        },  
        {  
            "lookupId": 51326716,  
            "propertyKey": "avoidedCostCalculatorHourlyExportRate2023PGECZ3B",  
            "fromDateTime": "2023-07-01T17:00:00",  
            "toDateTime": "2023-07-01T18:00:00",  
            "bestValue": -0.495736090,  
            "bestAccuracy": 0,  
            "actualValue": -0.495736090,  
            "lseForecastValue": -0.495736090,  
            "lseForecastAccuracy": null,  
            "forecastValue": null,  
            "forecastAccuracy": null  
        },  
        {  
            "lookupId": 51326717,  
            "propertyKey": "avoidedCostCalculatorHourlyExportRate2023PGECZ3B",  
            "fromDateTime": "2023-07-01T18:00:00",  
            "toDateTime": "2023-07-01T19:00:00",  
            "bestValue": -0.383674450,  
            "bestAccuracy": 0,  
            "actualValue": -0.383674450,  
            "lseForecastValue": -0.383674450,  
            "lseForecastAccuracy": null,  
            "forecastValue": null,  
            "forecastAccuracy": null  
        },  
        {  
            "lookupId": 51326718,  
            "propertyKey": "avoidedCostCalculatorHourlyExportRate2023PGECZ3B",  
            "fromDateTime": "2023-07-01T19:00:00",  
            "toDateTime": "2023-07-01T20:00:00",  
            "bestValue": -0.230851410,  
            "bestAccuracy": 0,  
            "actualValue": -0.230851410,  
            "lseForecastValue": -0.230851410,  
            "lseForecastAccuracy": null,  
            "forecastValue": null,  
            "forecastAccuracy": null  
        },  
        {  
            "lookupId": 51326719,  
            "propertyKey": "avoidedCostCalculatorHourlyExportRate2023PGECZ3B",  
            "fromDateTime": "2023-07-01T20:00:00",  
            "toDateTime": "2023-07-01T21:00:00",  
            "bestValue": -0.092238660,  
            "bestAccuracy": 0,  
            "actualValue": -0.092238660,  
            "lseForecastValue": -0.092238660,  
            "lseForecastAccuracy": null,  
            "forecastValue": null,  
            "forecastAccuracy": null  
        },  
        {  
            "lookupId": 51326720,  
            "propertyKey": "avoidedCostCalculatorHourlyExportRate2023PGECZ3B",  
            "fromDateTime": "2023-07-01T21:00:00",  
            "toDateTime": "2023-07-01T22:00:00",  
            "bestValue": -0.087989400,  
            "bestAccuracy": 0,  
            "actualValue": -0.087989400,  
            "lseForecastValue": -0.087989400,  
            "lseForecastAccuracy": null,  
            "forecastValue": null,  
            "forecastAccuracy": null  
        },  
        {  
            "lookupId": 51326721,  
            "propertyKey": "avoidedCostCalculatorHourlyExportRate2023PGECZ3B",  
            "fromDateTime": "2023-07-01T22:00:00",  
            "toDateTime": "2023-07-01T23:00:00",  
            "bestValue": -0.057338640,  
            "bestAccuracy": 0,  
            "actualValue": -0.057338640,  
            "lseForecastValue": -0.057338640,  
            "lseForecastAccuracy": null,  
            "forecastValue": null,  
            "forecastAccuracy": null  
        },  
        {  
            "lookupId": 51326722,  
            "propertyKey": "avoidedCostCalculatorHourlyExportRate2023PGECZ3B",  
            "fromDateTime": "2023-07-01T23:00:00",  
            "toDateTime": "2023-07-02T00:00:00",  
            "bestValue": -0.051414550,  
            "bestAccuracy": 0,  
            "actualValue": -0.051414550,  
            "lseForecastValue": -0.051414550,  
            "lseForecastAccuracy": null,  
            "forecastValue": null,  
            "forecastAccuracy": null  
        }  
    ],  
    "pageCount": 100,  
    "pageStart": 0

4. Putting it all together - doing the math to verify the #s (NEM3 example)

Now that we have all the building blocks of a Savings Analysis laid out in a granular way, let's look at a select hour to validate that the rates and math all line up as we would expect. This step can be repeated for any hour in the array you're inspecting.

Let's look at 8am - 9am

Post-solar scenario:

_ {  
                    "fromDateTime": "2023-07-01T08:00:00-07:00",  
                    "toDateTime": "2023-07-01T09:00:00-07:00",  
                    "quantityKey": "consumption",  
                    "rateAmount": 0.07187955,  
                    "itemQuantity": -1.46189600,  
                    "cost": -0.10508043,  
                    "chargeType": "CONSUMPTION_BASED"  
                },_

Export rate:

_  {  
            "lookupId": 51326707,  
            "propertyKey": "avoidedCostCalculatorHourlyExportRate2023PGECZ3B",  
            "fromDateTime": "2023-07-01T08:00:00",  
            "toDateTime": "2023-07-01T09:00:00",  
            "bestValue": -0.049879550,  
            "bestAccuracy": 0,  
            "actualValue": -0.049879550,  
            "lseForecastValue": -0.049879550,  
            "lseForecastAccuracy": null,  
            "forecastValue": null,  
            "forecastAccuracy": null  
        },_

The rateAmount [0.07187955] + actualValue [-0.049879550] + adder [see key below] = $0

$0.07188 - $0.04988 = $.022.

The adder (additional export savings) applied here for PGE Residential, non-care is $.022:


If you want to run the validation exercise above from scratch, first start here.

2. Setup steps for running this validation exercise from scratch

If you don't already have a specific savings analysis you're inspecting, or find it easier to validate a fresh example where you can control the system modeled, follow these steps first to create some data for your test scenarios, and then circle back to the validation steps #1.

Create an Account to use for the validation exercise

The first step is to set up an account.

[If you already have an account to use, you can skip to the next step and begin creating profiles to store the data arrays used in the analysis (e.g. meter intervals and solar production).]

To set up an account, you'll use the accounts API to (1.1) create an account, (1.2) set the utility on the account, (1.3) set the tariff on the account.

Here's a simple call sequence for Switch endpoints:

  1. Create a bare-bones account

_POST <https://api.genability.com/rest/v1/accounts> _

_{  
     "providerAccountId": "example-1"  
}_

  • Or include a few extra details if helpful, like a name and/or zipcode
_{  
   "providerAccountId":"example-1",  
   "accountName":"You can name the account with another string",  
   "address":{"addressString":"94112"}  
}_

  1. Set the Utility for the account

Gets set automatically with the Tariff? (validate)

  1. Set the Tariff for the account
{  
"masterTariffId": 522,  
"serviceType": "ELECTRICITY"  
}

  • Note: you can update it at any time with the same call sent as a PUT request

Validating Profiles used to perform the analysis

Create Profiles containing the data to be used in the analysis

Now that you have an account, you're ready to construct the various energy profiles that will be used in the analysis. A simple solar savings analysis will require (A) a consumption profile, and (B) a solar production profile. Validating the data depends on its source.

📘

Where do usage/consumption load profiles come from?

It depends on your implementation.

  • Submit usage arrays from an independent modeling or intervals service.
  • Use our Connect product to access interval or statement data directly through other Arc endpoints, or by passing the Arc account ID to Switch, once a user connects (this triggers automation of our advanced IB use case below).
  • Use our default load profiles, opensource datasets developed by the National Renewable Energy Lab (NREL), that approximate consumption based on researched averages for the building type and specific geographic territory.
  • Use our advances Intelligent Baselining feature, to scale, or 'fit' limited site-specific consumption history to the shape of the typical curve for the site (this is most helpful when complete load profiles aren't available).

📘

Where do solar production load profiles come from?

This also depends on your implementation.

  • Submit usage arrays from your independent modeling
  • Use our Connect product to access it automatically through other Arc endpoints when a user logs into their credentials
  • Use our out of the box default load profiles, which are developed by the National Renewable Energy Lab (NREL) and approximate consumption based on researched averages for the building type and specific geographic territory.

To create a baseline consumption profiles from scratch, in this case with a simple flat yearly load.

POST /rest/v1/profiles

{  
  "profileAccountId" : "Test1",  
  "providerProfileId" : "annual-50k-flatload",  
  "profileName" : "annual-50k-flatload",  
  "description" : "single flat annual bill 50k kWh",  
  "isDefault" : true,  
  "serviceTypes" : "ELECTRICITY",  
  "sourceId" : "ReadingEntry",  
  "readingData" : [  
      { "fromDateTime" : "2023-02-01",  
        "toDateTime" : "2024-02-01",  
        "quantityUnit" : "kWh",  
        "quantityValue" : "50000"  
      }  
    ]  
}

For the solar profile, it's the same endpoint with different properties and values

POST /rest/v1/profiles

{  
  "providerAccountId" : "example-1",  
  "providerProfileId" : "p2-annual-solar-2022-2023",  
  "groupBy" : "YEAR",  
  "serviceTypes" : "SOLAR_PV",  
  "source": {  
    "sourceId":"PVWatts",  
    "sourceVersion":"5"  
  },  
  "properties" : {  
    "systemSize" : {  
      "keyName" : "systemSize",  
      "dataValue" : "8"  
    },  
    "azimuth" : {  
      "keyName" : "azimuth",  
      "dataValue" : "180"  
    },  
    "losses" : {  
      "keyName" : "losses",  
      "dataValue" : "15"  
    },  
    "inverterEfficiency" : {  
      "keyName" : "inverterEfficiency",  
      "dataValue" : "96"  
    },  
    "tilt" : {  
      "keyName" : "tilt",  
      "dataValue" : "20"  
    }  
  }  
}

3. Running your Savings Analysis.

To run a Savings Analysis, we'll the request will tell the calculator which scenarios to consider in the aggregate calculation, which then gets performed on the hourly intervals given the rules of the Tariffs.

In our example, our pre-solar profile is the is from scenario: p1-annual-2023-2024

And our post-solar scenario uses both p1-annual-2023-2024, p2-annual-solar-2023-2024

We're using the providerProfileId for the scenario in this request (you can also use the system-generated ProfileId)

POST {{domain}}/rest/v1/accounts/analysis

_{  
    "providerAccountId": "example-1",  
    "fromDateTime": "2023-07-01",  
    "propertyInputs": [  
        {  
            "scenarios": "before,after",  
            "keyName": "providerProfileId",  
            "dataValue": "p1-annual-2023-2024",  
            "dataFactor": 1  
        },  
        {  
            "scenarios": "after,solar",  
            "keyName": "providerProfileId",  
            "dataValue": "p2-annual-solar-2023-2024",  
            "dataFactor": 1  
        },  
        {  
            "scenarios": "after",  
            "keyName": "masterTariffId",  
            "dataValue": "3424821"  
        },  
        {  
            "scenarios": "before,after",  
            "keyName": "rateInflation",  
            "dataValue": "3.5"  
        },  
        {  
            "scenarios": "solar",  
            "keyName": "rateInflation",  
            "dataValue": "1.9"  
        },  
        {  
            "scenarios": "after,solar",  
            "keyName": "solarDegradation",  
            "dataValue": "1.5"  
        }  
    ],  
    "rateInputs": \[  
        {  
            "scenarios": "solar",  
            "chargeType": "FIXED_PRICE",  
            "rateBands": [  
                {  
                    "rateAmount": 99.99  
                }  
            ]  
        }  
    ]  
}_

The Response is as follows (truncated after 1st monthly breakdown summary):

_Notes:

  • The response of this Savings Analysis is aggregated to a minimum duration of one year. So to reconcile and validate this against the hourly breakdowns, it's best to convert the complete JSON response to something easier to sum up using a third-party tool or script. The individual hourly breakdowns, if aggregated as a sum, ought to equal the total annual figures for the savings analysis when the same duration is compared.
  • The response to a Savings Analysis includes all of the components of the analysis as well. There's more information about a Savings Analysis in other tutorials, but here's a sample of what that includes from our example above.
_{  
    "status": "success",  
    "count": 1,  
    "type": "AccountAnalysis",  
    "results": \[  
        {  
            "designId": null,  
            "dataStatus": 2,  
            "currency": "USD",  
            "summary": {  
                "lifeTimeUtilityAfterCost": 49139.630,  
                "lifeTimeUtilityAvoidedRate": 0.217,  
                "lifetimeAvoidedCost": 17882.260,  
                "lifetimeSolarCost": 28865.310,  
                "lifetimeWithoutCost": 95887.200,  
                "netAvoidedCost": 1934.05,  
                "netAvoidedCostPctOffset": 0.5704,  
                "netAvoidedKWh": 12369.26,  
                "netAvoidedKWhPctOffset": 1.2328,  
                "netAvoidedRate": 0.156359,  
                "postTotalCost": 1456.630000,  
                "postTotalKWh": -2336.139644,  
                "postTotalKWhCost": 1276.261261,  
                "postTotalKWhRate": 0.156359,  
                "postTotalMinCost": 0.000000,  
                "postTotalNonBypassableCost": 0.000000,  
                "postTotalNonMinCost": 1456.629721,  
                "postTotalRate": -0.623521,  
                "preTotalCost": 3390.680000,  
                "preTotalKWh": 10033.123826,  
                "preTotalKWhCost": 3210.307763,  
                "preTotalKWhRate": 0.319971,  
                "preTotalMinCost": 0.000000,  
                "preTotalNonBypassableCost": 0.000000,  
                "preTotalNonMinCost": 3390.676223,  
                "preTotalRate": 0.337949  
            },  
            "scenarios": \[  
                {  
                    "id": null,  
                    "name": "before",  
                    "serviceType": "ELECTRICITY",  
                    "inputs": [  
                        {  
                            "keyName": "lseId",  
                            "displayName": "Utility or Load Serving Entity",  
                            "dataType": "INTEGER",  
                            "fromDateTime": "2023-07-01T00:00:00-07:00",  
                            "toDateTime": "2024-07-01T00:00:00-07:00",  
                            "dataValue": "734",  
                            "scenarios": "before"  
                        },  
                        {  
                            "keyName": "masterTariffId",  
                            "displayName": "Residential Time-Of-Use - Electric Home - NEM 3.0",  
                            "dataType": "INTEGER",  
                            "fromDateTime": "2023-07-01T00:00:00-07:00",  
                            "toDateTime": "2024-07-01T00:00:00-07:00",  
                            "dataValue": "3424821",  
                            "scenarios": "before"  
                        },  
                        {  
                            "keyName": "profileId",  
                            "displayName": "annual consumption",  
                            "dataType": "STRING",  
                            "fromDateTime": "2023-07-01T00:00:00-07:00",  
                            "toDateTime": "2024-07-01T00:00:00-07:00",  
                            "dataValue": "1b47434c-7ab9-4420-8031-9f90bbac0245",  
                            "scenarios": "before"  
                        },  
                        {  
                            "keyName": "rateInflation",  
                            "displayName": "Rate Inflation",  
                            "dataType": "DECIMAL",  
                            "fromDateTime": "2023-07-01T00:00:00-07:00",  
                            "toDateTime": "2024-07-01T00:00:00-07:00",  
                            "dataValue": "3.5",  
                            "scenarios": "before"  
                        },  
                        {  
                            "keyName": "tariffCode",  
                            "displayName": "tariffCode",  
                            "dataType": "STRING",  
                            "fromDateTime": "2023-07-01T00:00:00-07:00",  
                            "toDateTime": "2024-07-01T00:00:00-07:00",  
                            "dataValue": "E-ELEC-NEM3",  
                            "scenarios": "before"  
                        },  
                        {  
                            "keyName": "territoryId",  
                            "displayName": "Territory",  
                            "description": "Territory where tariff is operational",  
                            "dataType": "INTEGER",  
                            "fromDateTime": "2023-07-01T00:00:00-07:00",  
                            "toDateTime": "2024-07-01T00:00:00-07:00",  
                            "dataValue": "3536",  
                            "accuracy": 100,  
                            "scenarios": "before"  
                        }  
                    ]  
                },  
                {  
                    "id": null,  
                    "name": "after",  
                    "serviceType": "ELECTRICITY",  
                    "inputs": [  
                        {  
                            "keyName": "lseId",  
                            "displayName": "Pacific Gas & Electric Co",  
                            "dataType": "INTEGER",  
                            "dataValue": "734",  
                            "scenarios": "after"  
                        },  
                        {  
                            "keyName": "masterTariffId",  
                            "displayName": "Residential Time-Of-Use - Electric Home - NEM 3.0",  
                            "dataType": "INTEGER",  
                            "dataValue": "3424821",  
                            "scenarios": "after"  
                        },  
                        {  
                            "keyName": "profileId",  
                            "displayName": "8.0 kW | PVWatts",  
                            "dataType": "STRING",  
                            "fromDateTime": "2023-07-01T00:00:00-07:00",  
                            "toDateTime": "2024-07-01T00:00:00-07:00",  
                            "dataValue": "448ea77c-dcbf-4405-bb5a-568197cf8687",  
                            "scenarios": "after",  
                            "operator": "-"  
                        },  
                        {  
                            "keyName": "profileId",  
                            "displayName": "annual consumption",  
                            "dataType": "STRING",  
                            "fromDateTime": "2023-07-01T00:00:00-07:00",  
                            "toDateTime": "2024-07-01T00:00:00-07:00",  
                            "dataValue": "1b47434c-7ab9-4420-8031-9f90bbac0245",  
                            "scenarios": "after"  
                        },  
                        {  
                            "keyName": "rateInflation",  
                            "displayName": "Rate Inflation",  
                            "dataType": "DECIMAL",  
                            "fromDateTime": "2023-07-01T00:00:00-07:00",  
                            "toDateTime": "2024-07-01T00:00:00-07:00",  
                            "dataValue": "3.5",  
                            "scenarios": "after"  
                        },  
                        {  
                            "keyName": "solarDegradation",  
                            "displayName": "Solar Degradation",  
                            "dataType": "DECIMAL",  
                            "fromDateTime": "2023-07-01T00:00:00-07:00",  
                            "toDateTime": "2024-07-01T00:00:00-07:00",  
                            "dataValue": "1.5",  
                            "scenarios": "after"  
                        },  
                        {  
                            "keyName": "tariffCode",  
                            "displayName": "E-ELEC-NEM3",  
                            "dataType": "STRING",  
                            "dataValue": "E-ELEC-NEM3",  
                            "scenarios": "after"  
                        },  
                        {  
                            "keyName": "territoryId",  
                            "displayName": "Territory",  
                            "description": "Territory where tariff is operational",  
                            "dataType": "INTEGER",  
                            "fromDateTime": "2023-07-01T00:00:00-07:00",  
                            "toDateTime": "2024-07-01T00:00:00-07:00",  
                            "dataValue": "3536",  
                            "accuracy": 100,  
                            "scenarios": "after"  
                        }  
                    ],  
                    "rates": \[]  
                },  
                {  
                    "id": null,  
                    "name": "solar",  
                    "serviceType": "SOLAR_PV",  
                    "inputs": [  
                        {  
                            "keyName": "profileId",  
                            "displayName": "8.0 kW | PVWatts",  
                            "dataType": "STRING",  
                            "fromDateTime": "2023-07-01T00:00:00-07:00",  
                            "toDateTime": "2024-07-01T00:00:00-07:00",  
                            "dataValue": "448ea77c-dcbf-4405-bb5a-568197cf8687",  
                            "scenarios": "solar",  
                            "operator": "+"  
                        },  
                        {  
                            "keyName": "rateInflation",  
                            "displayName": "Rate Inflation",  
                            "dataType": "DECIMAL",  
                            "fromDateTime": "2023-07-01T00:00:00-07:00",  
                            "toDateTime": "2024-07-01T00:00:00-07:00",  
                            "dataValue": "1.9",  
                            "scenarios": "solar"  
                        },  
                        {  
                            "keyName": "solarDegradation",  
                            "displayName": "Solar Degradation",  
                            "dataType": "DECIMAL",  
                            "fromDateTime": "2023-07-01T00:00:00-07:00",  
                            "toDateTime": "2024-07-01T00:00:00-07:00",  
                            "dataValue": "1.5",  
                            "scenarios": "solar"  
                        }  
                    ],  
                    "rates": \[  
                        {  
                            "fromDateTime": null,  
                            "toDateTime": null,  
                            "chargeType": "FIXED_PRICE",  
                            "chargePeriod": "MONTHLY",  
                            "rateBands": [  
                                {  
                                    "tariffRateBandId": null,  
                                    "tariffRateId": null,  
                                    "rateSequenceNumber": null,  
                                    "hasConsumptionLimit": null,  
                                    "hasDemandLimit": null,  
                                    "hasPropertyLimit": false,  
                                    "rateAmount": 99.99,  
                                    "rateUnit": null,  
                                    "isCredit": null,  
                                    "prevUpperLimit": null  
                                }  
                            ],  
                            "scenarios": "solar"  
                        }  
                    ]  
                }  
            ],  
            "series": [  
                {  
                    "seriesId": 1,  
                    "fromDateTime": "2023-07-01T00:00:00-07:00",  
                    "toDateTime": "2024-07-01T00:00:00-07:00",  
                    "scenario": "before",  
                    "displayLabel": "Before Solar Utility (Mo/Year 1)",  
                    "seriesPeriod": "MONTH",  
                    "seriesDuration": 12,  
                    "designId": null,  
                    "key": null,  
                    "rate": 0.33794858,  
                    "qty": 10033.123826,  
                    "cost": 3390.68  
                },  
                {  
                    "seriesId": 2,  
                    "fromDateTime": "2023-07-01T00:00:00-07:00",  
                    "toDateTime": "2024-07-01T00:00:00-07:00",  
                    "scenario": "after",  
                    "displayLabel": "After Solar Utility (Mo/Year 1)",  
                    "seriesPeriod": "MONTH",  
                    "seriesDuration": 12,  
                    "designId": null,  
                    "key": null,  
                    "rate": -0.62352009,  
                    "qty": -2336.139644000000,  
                    "cost": 1456.63  
                },  
                {  
                    "seriesId": 3,  
                    "fromDateTime": "2023-07-01T00:00:00-07:00",  
                    "toDateTime": "2024-07-01T00:00:00-07:00",  
                    "scenario": "solar",  
                    "displayLabel": "Solar (Mo/Year 1)",  
                    "seriesPeriod": "MONTH",  
                    "seriesDuration": 12,  
                    "designId": null,  
                    "key": null,  
                    "rate": 0.097005,  
                    "qty": 12369.263470000000,  
                    "cost": 1199.88  
                },  
                {  
                    "seriesId": 4,  
                    "fromDateTime": "2023-07-01T00:00:00-07:00",  
                    "toDateTime": "2024-07-01T00:00:00-07:00",  
                    "scenario": "savings",  
                    "displayLabel": "Total Savings (Mo/Year 1)",  
                    "seriesPeriod": "MONTH",  
                    "seriesDuration": 12,  
                    "designId": null,  
                    "key": null,  
                    "qty": 0,  
                    "cost": 734.1665016624583266853144632300000000  
                },  
                {  
                    "seriesId": 5,  
                    "fromDateTime": "2023-07-01T00:00:00-07:00",  
                    "toDateTime": "2043-07-01T00:00:00-07:00",  
                    "scenario": "before",  
                    "displayLabel": "Before Solar Utility (Annual)",  
                    "seriesPeriod": "YEAR",  
                    "seriesDuration": 20,  
                    "designId": null,  
                    "key": null,  
                    "rate": 0.477853,  
                    "qty": 200662.476520,  
                    "cost": 95887.200000  
                },  
                {  
                    "seriesId": 6,  
                    "fromDateTime": "2023-07-01T00:00:00-07:00",  
                    "toDateTime": "2043-07-01T00:00:00-07:00",  
                    "scenario": "after",  
                    "displayLabel": "After Solar Utility (Annual/Lifetime)",  
                    "seriesPeriod": "YEAR",  
                    "seriesDuration": 20,  
                    "designId": null,  
                    "key": null,  
                    "rate": -3.400769,  
                    "qty": -14449.563480,  
                    "cost": 49139.629721  
                },  
                {  
                    "seriesId": 7,  
                    "fromDateTime": "2023-07-01T00:00:00-07:00",  
                    "toDateTime": "2043-07-01T00:00:00-07:00",  
                    "scenario": "solar",  
                    "displayLabel": "Solar (Annual/Lifetime)",  
                    "seriesPeriod": "YEAR",  
                    "seriesDuration": 20,  
                    "designId": null,  
                    "key": null,  
                    "rate": 0.134187,  
                    "qty": 215112.043470000000,  
                    "cost": 28865.31  
                },  
                {  
                    "seriesId": 8,  
                    "fromDateTime": "2023-07-01T00:00:00-07:00",  
                    "toDateTime": "2043-07-01T00:00:00-07:00",  
                    "scenario": "savings",  
                    "displayLabel": "Total Year Savings (Annual/Lifetime)",  
                    "seriesPeriod": "YEAR",  
                    "seriesDuration": 20,  
                    "designId": null,  
                    "key": null,  
                    "rate": 0,  
                    "qty": 0,  
                    "cost": 17882.260279  
                },  
                {  
                    "seriesId": 9,  
                    "fromDateTime": "2023-07-01T00:00:00-07:00",  
                    "toDateTime": "2043-07-01T00:00:00-07:00",  
                    "scenario": "before",  
                    "displayLabel": "Before Solar Utility (Lifetime)",  
                    "seriesPeriod": "ALL",  
                    "seriesDuration": 20,  
                    "designId": null,  
                    "key": null,  
                    "rate": 0.477853,  
                    "qty": 200662.476520,  
                    "cost": 95887.200000  
                },  
                {  
                    "seriesId": 10,  
                    "fromDateTime": "2023-07-01T00:00:00-07:00",  
                    "toDateTime": "2043-07-01T00:00:00-07:00",  
                    "scenario": "after",  
                    "displayLabel": "After Solar Utility (Lifetime)",  
                    "seriesPeriod": "ALL",  
                    "seriesDuration": 20,  
                    "designId": null,  
                    "key": null,  
                    "rate": -3.400769,  
                    "qty": -14449.563480,  
                    "cost": 49139.629721  
                },  
                {  
                    "seriesId": 11,  
                    "fromDateTime": "2023-07-01T00:00:00-07:00",  
                    "toDateTime": "2043-07-01T00:00:00-07:00",  
                    "scenario": "solar",  
                    "displayLabel": "Solar (Lifetime)",  
                    "seriesPeriod": "ALL",  
                    "seriesDuration": 20,  
                    "designId": null,  
                    "key": null,  
                    "rate": 0.134187,  
                    "qty": 215112.043470000000,  
                    "cost": 28865.31  
                },  
                {  
                    "seriesId": 12,  
                    "fromDateTime": "2023-07-01T00:00:00-07:00",  
                    "toDateTime": "2043-07-01T00:00:00-07:00",  
                    "scenario": "savings",  
                    "displayLabel": "Total Savings (Lifetime)",  
                    "seriesPeriod": "ALL",  
                    "seriesDuration": 20,  
                    "designId": null,  
                    "key": null,  
                    "rate": 0,  
                    "qty": 0,  
                    "cost": 17882.260279  
                }  
            ],  
            "seriesData": \[  
                {  
                    "seriesId": 1,  
                    "fromDateTime": "2023-07-01T00:00:00-07:00",  
                    "toDateTime": "2023-08-01T00:00:00-07:00",  
                    "rate": 0.39623979,  
                    "qty": 1063.697505,  
                    "cost": 421.4792769672100000000000  
                },_