HomeGuidesAPI ReferenceChangelog
Log In
Guides

Step 5: Reconcile with the Savings Analysis Response

Compare hourly validation calculations against aggregate Savings Analysis summary, series, and scenario values.

Reconcile hourly validation calculations with the aggregate Savings Analysis response.

Use this step after you retrieve pre-solar and post-solar hourly Account Cost Calculations. Confirm that the granular hourly behavior is consistent with the annual or lifetime values returned by the Savings Analysis.

Reconciliation workflow

  1. Confirm the Savings Analysis date range and duration.
  2. Export or sum the hourly pre-solar Account Cost Calculation results for the same period.
  3. Export or sum the hourly post-solar Account Cost Calculation results for the same period.
  4. Compare pre-solar totals against the Savings Analysis before values.
  5. Compare post-solar totals against the Savings Analysis after values.
  6. Compare the difference between pre-solar and post-solar totals against the savings values.
  7. Review the scenarios[], series[], and seriesData[] arrays to confirm the inputs and time periods align.

Review the Savings Analysis response

The Savings Analysis response includes the aggregate results and the inputs used to create each scenario. The response is aggregated to a minimum duration of one year, so compare hourly calculations against the same duration when reconciling totals.

The following response has been shortened to show the top-level summary and first series entries:

{
  "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
      },
      "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,
          "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,
          "rate": -0.62352009,
          "qty": -2336.139644000000,
          "cost": 1456.63
        },
        {
          "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,
          "qty": 0,
          "cost": 734.1665016624583266853144632300000000
        }
      ]
    }
  ]
}

Compare summary values

Start with the summary object. These values are useful for validating whether the aggregate totals are consistent with the hourly calculations.

Savings Analysis fieldCompare against
preTotalCostSum of pre-solar Account Cost Calculation costs for the same period.
preTotalKWhSum of pre-solar consumption quantities for the same period.
postTotalCostSum of post-solar Account Cost Calculation costs for the same period.
postTotalKWhSum of post-solar net kWh for the same period.
netAvoidedCostDifference between pre-solar and post-solar costs, adjusted for modeled solar costs where applicable.
netAvoidedKWhDifference between pre-solar and post-solar kWh.

Compare series values

Use the series[] array to confirm that you are comparing the correct scenario and time period.

Series fieldPurpose
scenarioIdentifies whether the series represents before, after, solar, or savings.
fromDateTime / toDateTimeDefines the period represented by the series.
seriesPeriodIdentifies the aggregation level, such as MONTH, YEAR, or ALL.
seriesDurationIdentifies how many periods are included.
qtyAggregate quantity for the series.
costAggregate cost for the series.

When reconciling hourly calculations, make sure the summed hourly range matches the fromDateTime and toDateTime values in the Savings Analysis series you are comparing.

Check scenario inputs

Review the scenarios[] array in the Savings Analysis response to confirm that the validation calculations used the same inputs.

Check that the response includes the expected values for:

  • masterTariffId
  • consumption profile ID
  • solar profile ID
  • operator
  • rateInflation
  • solarDegradation
  • territoryId
  • any tariff-specific criteria or rate inputs

If an hourly validation calculation does not reconcile, differences in these inputs are the first thing to check.

Troubleshooting mismatches

If your hourly calculations do not reconcile with the Savings Analysis response, check the following:

IssueWhat to check
Date range mismatchConfirm the hourly calculation range matches the Savings Analysis series range.
Time zone mismatchConfirm fromDateTime and toDateTime use the same time zone as the Savings Analysis.
Profile mismatchConfirm the same consumption and solar profiles are used.
Missing solar operatorConfirm the solar profile uses operator: "-" in post-solar calculations.
Tariff mismatchConfirm the correct pre-solar and post-solar masterTariffId values are used.
Default profile included unexpectedlySet includeDefaultProfile to false when passing profiles explicitly.
Different granularityConfirm groupBy and detailLevel are appropriate for the comparison.

Summary

You reconciled the hourly validation calculations against the aggregate Savings Analysis response by comparing matching date ranges, scenarios, profile inputs, tariffs, quantities, and costs.