From 3531d38ea38aa73db75452c5d3d36a049afb2965 Mon Sep 17 00:00:00 2001 From: Juan-Pablo Velez Date: Tue, 2 Dec 2025 17:40:32 -0500 Subject: [PATCH] Add tariff wiki, pages for 3 coned rates, and deep-dive pages on technical coned concepts --- docs/wiki/index.md | 62 ++ .../utilities/coned/delivery-adjustments.md | 448 ++++++++ docs/wiki/utilities/coned/index.md | 71 ++ .../coned/residential-el1-demand/index.md | 694 +++++++++++++ .../coned/residential-el1-tou/index.md | 642 ++++++++++++ .../utilities/coned/residential-el1/index.md | 954 ++++++++++++++++++ docs/wiki/utilities/coned/riders.md | 604 +++++++++++ docs/wiki/utilities/coned/supply-charges.md | 405 ++++++++ .../utilities/coned/variable-rates-api.md | 491 +++++++++ docs/wiki/utilities/index.md | 29 + mkdocs.yml | 28 + 11 files changed, 4428 insertions(+) create mode 100644 docs/wiki/index.md create mode 100644 docs/wiki/utilities/coned/delivery-adjustments.md create mode 100644 docs/wiki/utilities/coned/index.md create mode 100644 docs/wiki/utilities/coned/residential-el1-demand/index.md create mode 100644 docs/wiki/utilities/coned/residential-el1-tou/index.md create mode 100644 docs/wiki/utilities/coned/residential-el1/index.md create mode 100644 docs/wiki/utilities/coned/riders.md create mode 100644 docs/wiki/utilities/coned/supply-charges.md create mode 100644 docs/wiki/utilities/coned/variable-rates-api.md create mode 100644 docs/wiki/utilities/index.md diff --git a/docs/wiki/index.md b/docs/wiki/index.md new file mode 100644 index 0000000..b3c33fd --- /dev/null +++ b/docs/wiki/index.md @@ -0,0 +1,62 @@ +# Tariff Wiki + +This section contains domain knowledge for understanding and working with electricity tariffs downloaded using `tariff_fetch`. + +## What's Here + +When you download tariff data from sources like Arcadia (Genability), you get detailed JSON structures with rates, riders, adjustments, and more. This wiki provides: + +- **Utility-specific guides** explaining rate structures, charges, and regulatory context +- **Rate plan breakdowns** with charge-by-charge explanations +- **API guides** for retrieving variable rate values +- **Domain knowledge** about how utility billing actually works + +## Why This Exists + +Tariff data is complex. A single residential tariff might have: + +- 20+ line items with different charge types +- Variable rates that require API lookups +- Riders that reference other tariff documents +- Zone-specific and seasonal variations +- Regulatory adjustment mechanisms with multi-month time lags + +This wiki explains what all of that means so you can actually use the data. + +## Utilities Covered + +| Utility | Region | Guides Available | +|---------|--------|------------------| +| [Consolidated Edison (ConEd)](utilities/coned/index.md) | New York | EL1 Residential | + +## Structure + +``` +wiki/ +├── utilities/ +│ └── coned/ # Consolidated Edison +│ ├── index.md # ConEd overview +│ └── residential-el1/ # EL1 Residential tariff +│ ├── index.md # Tariff field guide +│ ├── supply-charges.md # How supply charges work +│ ├── delivery-adjustments.md +│ ├── riders.md +│ └── variable-rates-api.md +``` + +## Contributing + +To add or update wiki content: + +1. **Follow the structure** — New utilities go in `docs/wiki/utilities/{utility-code}/`. Each rate plan gets its own subdirectory. + +2. **Use the existing format** — Look at the ConEd EL1 guides for the expected structure: + - `index.md` — Tariff overview with metadata, properties, and charge reference table + - Separate files for deep dives (supply charges, delivery adjustments, riders, etc.) + +3. **Submit a PR** — Open a pull request with your changes. Include the tariff JSON you're documenting if it's not already in the repo. + +## Disclaimer + +> ⚠️ The guides in this wiki are for educational purposes. They were initially generated with AI assistance and have not been verified by utility rate experts. Verify any claims against official utility tariff books before using for business or regulatory purposes. + diff --git a/docs/wiki/utilities/coned/delivery-adjustments.md b/docs/wiki/utilities/coned/delivery-adjustments.md new file mode 100644 index 0000000..19c20ca --- /dev/null +++ b/docs/wiki/utilities/coned/delivery-adjustments.md @@ -0,0 +1,448 @@ +# How ConEd's Delivery Adjustments Work: A Complete Explainer + +> ⚠️ **Disclaimer**: This guide was generated by an LLM (Claude Opus 4.5) based on the tariff JSON plus the model's background knowledge of utility regulation and NY PSC proceedings. The content looks reasonable but **has not been verified by domain experts**. Please verify any claims before relying on them for business or regulatory purposes. + +## Overview + +ConEd's delivery charges aren't just a single rate—they're a **base rate plus multiple adjustments**. This guide explains what each adjustment does, why it exists, and how it's calculated. + +``` +Your Delivery Bill = Base Delivery Rate (Summer/Winter Rate) + + Delivery Revenue Surcharge + + Reconciliation Rate + + Transition Adjustment + + Uncollectible Bill Expense + + Monthly Adjustment Clause + + Revenue Decoupling Mechanism Adjustment + + Clean Energy Standard Delivery Surcharge +``` + +All of these adjustments have `variableRateKey` in the JSON—meaning they change periodically and require the Lookups API to get current values. + +--- + +## Why So Many Adjustments? + +Electric utility regulation creates a fundamental timing problem: + +1. **Rate cases are infrequent**: ConEd files a rate case every 1-3 years +2. **Costs change constantly**: Fuel prices, labor, taxes, program costs fluctuate +3. **Sales volumes vary**: Weather affects how much electricity customers use +4. **Policy mandates evolve**: NY State adds new clean energy requirements + +Rather than constantly filing new rate cases (expensive, slow), regulators allow **adjustment mechanisms** that automatically true-up certain costs between rate cases. + +--- + +## The Adjustment Mechanisms + +### 1. Monthly Adjustment Clause (MAC) + +#### What Problem It Solves +The MAC is an **umbrella mechanism** that captures cost changes the PSC has pre-approved for pass-through. It's the "catch-all" for costs that vary but shouldn't require a rate case to update. + +#### What's Included +The MAC typically includes: +- Property tax changes +- Environmental compliance costs +- Storm damage recovery +- Pension and benefit cost changes +- Other PSC-approved cost pass-throughs + +#### How It Works + +**Step 1: Rate Case Establishes Baseline** +``` +During rate case, PSC sets base delivery rates assuming: +- Property taxes: $X million/year +- Storm costs: $Y million/year +- Pension costs: $Z million/year +``` + +**Step 2: Actual Costs Differ** +``` +Year 1 Reality: +- Property taxes: $X + $5 million (taxes went up) +- Storm costs: $Y + $20 million (bad hurricane season) +- Pension costs: $Z - $2 million (good investment returns) +``` + +**Step 3: MAC Adjustment Calculated** +``` +Net variance = +$5M + $20M - $2M = +$23 million under-recovery + +MAC Rate = $23 million / Expected annual kWh sales + = $23 million / 40 billion kWh + = $0.000575/kWh +``` + +**Step 4: Applied to Bills** +The MAC rate is updated (typically monthly or quarterly) and applied to all kWh consumed. + +#### Time Lag +- **Lag**: 1-3 months +- **Why**: ConEd needs to compile actual costs, file with PSC, get approval +- **Pattern**: You're paying for cost variances from ~2-3 months ago + +#### Variable Rate Key +```json +"variableRateKey": "monthlyAdjustmentClauseResidential" +``` + +--- + +### 2. Revenue Decoupling Mechanism (RDM) Adjustment + +#### What Problem It Solves +Traditional utility regulation created a perverse incentive: utilities made more money when customers used more electricity. This discouraged utilities from promoting energy efficiency. + +**Revenue decoupling** breaks this link by guaranteeing the utility a fixed revenue amount regardless of sales volume. + +#### The Core Concept + +``` +Traditional Model: +- Revenue = Rate × Sales Volume +- If customers conserve, utility loses money +- Utility has incentive to encourage consumption + +Decoupled Model: +- Revenue = PSC-authorized amount (fixed) +- If customers conserve, rates adjust upward to hit target +- If customers use more, rates adjust downward +- Utility is indifferent to sales volume +``` + +#### How It Works + +**Step 1: Rate Case Sets Target Revenue** +``` +PSC authorizes ConEd to collect $2.5 billion/year in delivery revenue +Based on expected sales of 40 billion kWh +Implied rate: $0.0625/kWh +``` + +**Step 2: Actual Sales Differ** +``` +Year 1: Mild summer → customers use only 38 billion kWh +At $0.0625/kWh, ConEd collects only $2.375 billion +Shortfall: $125 million +``` + +**Step 3: RDM Adjustment Calculated** +``` +RDM Adjustment = Shortfall / Expected Future Sales + = $125 million / 40 billion kWh + = $0.003125/kWh surcharge +``` + +**Step 4: Applied to Future Bills** +Next year's bills include the RDM surcharge to make ConEd whole. + +#### The Flip Side +``` +Year 2: Hot summer → customers use 43 billion kWh +At $0.0625/kWh, ConEd collects $2.6875 billion +Over-collection: $187.5 million + +RDM Adjustment = -$187.5 million / 40 billion kWh + = -$0.0047/kWh CREDIT +``` + +Customers get money back when they use more than expected! + +#### Time Lag +- **Lag**: 12-18 months typically +- **Why**: RDM is usually reconciled annually after a full year of data +- **Pattern**: This year's RDM reflects last year's over/under-collection + +#### Why This Matters for Clean Energy +Revenue decoupling is foundational to NY's climate policy. Without it: +- ConEd would fight rooftop solar (reduces sales) +- ConEd would oppose efficiency programs (reduces sales) +- ConEd would resist electrification messaging (complicated) + +With decoupling, ConEd's revenue is protected regardless of sales trends. + +#### Variable Rate Key +```json +"variableRateKey": "revenueDecouplingMechanismAdjustmentSc1" +``` + +--- + +### 3. Delivery Revenue Surcharge + +#### What Problem It Solves +This is a **supplemental revenue adjustment** that handles specific revenue shortfalls or policy-driven rate changes outside the normal MAC and RDM mechanisms. + +#### Common Uses +- Implementing PSC-ordered rate changes mid-period +- Recovering costs from specific events (major storms, infrastructure failures) +- Adjusting for regulatory lag when costs change faster than rate cases + +#### How It Works +Similar to MAC, but used for more specific, identifiable cost categories that the PSC wants tracked separately. + +#### Variable Rate Key +```json +"variableRateKey": "DeliveryRevenueSurchargeSc1" +``` + +--- + +### 4. Reconciliation Rate + +#### What Problem It Solves +The Reconciliation Rate handles **true-ups for deferred costs** from NY's electricity restructuring in the late 1990s. + +#### Historical Context +When NY deregulated electricity in 1996-2000: +- Utilities sold off power plants +- Some sold at losses ("stranded costs") +- PSC allowed utilities to recover these over time +- The Reconciliation Rate adjusts for actual vs. expected recovery + +#### Why It Still Exists +Even decades later, there are ongoing reconciliations for: +- Legacy power purchase contracts +- Deferred regulatory assets +- Long-term debt from restructuring + +#### Time Lag +- **Lag**: Annual +- **Pattern**: Reconciles prior year's deferred cost recovery + +#### Variable Rate Key +```json +"variableRateKey": "macAdjustmentReconciliation2252" +``` + +--- + +### 5. Transition Adjustment + +#### What Problem It Solves +Another legacy of deregulation. The Transition Adjustment handles costs related to the **transition** from regulated monopoly to competitive markets. + +#### What It Covers +- Costs of separating generation from distribution +- Stranded cost recovery adjustments +- Contract buyouts from the restructuring era + +#### Why It's (Usually) Small Now +Most transition costs have been recovered, so this adjustment is typically minimal. It persists for final true-ups and any remaining legacy obligations. + +#### Variable Rate Key +```json +"variableRateKey": "macAdjustmentTransitionAdjustment2252" +``` + +--- + +### 6. Uncollectible Bill Expense + +#### What Problem It Solves +Some customers don't pay their bills. ConEd can't collect from them, but still incurred costs to serve them. This adjustment recovers those costs from paying customers. + +#### How It Works + +**Step 1: Rate Case Estimates Bad Debt** +``` +PSC assumes 1.5% of billed revenue will be uncollectible +Base rates include recovery for this expected level +``` + +**Step 2: Actual Bad Debt Differs** +``` +Year 1: Economic downturn → 2.3% of bills unpaid +Excess bad debt: 0.8% × $2.5 billion = $20 million +``` + +**Step 3: Adjustment Calculated** +``` +Uncollectible Expense Adjustment = $20 million / 40 billion kWh + = $0.0005/kWh +``` + +#### COVID-19 Impact +This adjustment spiked during COVID when: +- Moratoriums prevented disconnections +- Many customers fell behind on bills +- Bad debt rates exceeded historical norms + +The separate "Arrears Management Program Recovery Surcharge" (a rider) handles some of this, but the Uncollectible Bill Expense adjustment captures ongoing bad debt variances. + +#### Time Lag +- **Lag**: 6-12 months +- **Why**: ConEd needs time to determine which bills are truly uncollectible (not just late) + +#### Variable Rate Key +```json +"variableRateKey": "macAdjustmentUncollectibeBillExpense2252" +``` + +--- + +### 7. Clean Energy Standard Delivery Surcharge + +#### What Problem It Solves +NY's Clean Energy Standard (CES) mandates that utilities procure increasing amounts of renewable energy. This surcharge recovers the **delivery-side costs** of that mandate. + +#### What It Covers (Delivery Side) +- Grid upgrades needed to integrate renewables +- Interconnection study costs +- Distribution system modifications for DERs (Distributed Energy Resources) +- Administrative costs for clean energy programs + +#### The Supply Side Counterpart +There's also a "Clean Energy Standard Supply Surcharge" that covers: +- Renewable Energy Credit (REC) purchases +- Zero Emission Credit (ZEC) purchases for nuclear +- Tier 4 (offshore wind/transmission) costs + +The delivery surcharge is separate because these are **infrastructure costs**, not commodity costs. + +#### How It Works + +**Step 1: PSC Sets CES Targets** +``` +2025: 70% renewable electricity +2030: 100% carbon-free electricity +``` + +**Step 2: ConEd Incurs Costs** +``` +Year 1 CES delivery costs: +- Distribution upgrades: $50 million +- DER integration: $30 million +- Program admin: $10 million +Total: $90 million +``` + +**Step 3: Surcharge Calculated** +``` +CES Delivery Surcharge = $90 million / 40 billion kWh + = $0.00225/kWh +``` + +#### Time Lag +- **Lag**: Varies (quarterly to annual updates) +- **Why**: Depends on when costs are incurred and PSC reporting requirements + +#### Variable Rate Key +```json +"variableRateKey": "cleanEnergyStandardDelivery2252" +``` + +--- + +## Complete Timeline: How Delivery Adjustments Flow + +Here's how all these adjustments play out over time: + +``` +YEAR 0: RATE CASE +──────────────────────────────────────────────────────────────────────────── +│ PSC sets base delivery rates for 3-year period +│ Assumes specific levels for: property taxes, storm costs, sales volume, +│ bad debt, clean energy costs, etc. +│ +▼ + +YEAR 1: ACTUAL OPERATIONS +──────────────────────────────────────────────────────────────────────────── +│ Q1: ConEd operates, incurs actual costs, serves actual load +│ Q2: Costs tracked, variances accumulate +│ Q3: ConEd files quarterly/annual reconciliations with PSC +│ Q4: Year-end data compiled +│ +│ Meanwhile, customers are billed at: +│ - Base rates (fixed from rate case) +│ - Prior period adjustments (from Year 0 or earlier) +│ +▼ + +YEAR 2: ADJUSTMENTS APPLIED +──────────────────────────────────────────────────────────────────────────── +│ Q1-Q2: PSC reviews Year 1 reconciliation filings +│ Q2-Q3: PSC approves adjustment factors +│ Q3-Q4: Adjustments appear on customer bills +│ +│ Customer bills now include: +│ - Base rates (still fixed) +│ - Year 1 cost variances via MAC, RDM, etc. +│ - Prior period true-ups being finalized +│ +▼ + +YEAR 3: NEXT RATE CASE (OR CONTINUED ADJUSTMENTS) +──────────────────────────────────────────────────────────────────────────── +│ Either: New rate case resets base rates +│ Or: Adjustment mechanisms continue accumulating +``` + +--- + +## How the Adjustments Interact + +These aren't completely independent—they're designed to work together: + +| Adjustment | What It Catches | Frequency | Typical Lag | +|------------|-----------------|-----------|-------------| +| MAC | Cost changes (taxes, storms, etc.) | Monthly | 1-3 months | +| RDM | Sales volume variance | Annual | 12-18 months | +| Delivery Revenue Surcharge | Specific revenue shortfalls | As needed | Varies | +| Reconciliation Rate | Deferred cost recovery | Annual | 12+ months | +| Transition Adjustment | Legacy restructuring costs | Annual | 12+ months | +| Uncollectible Bill Expense | Bad debt variance | Quarterly | 6-12 months | +| CES Delivery Surcharge | Clean energy infrastructure | Quarterly | 3-6 months | + +--- + +## Why Variable Rates Instead of Fixed? + +You might wonder: why not just set these adjustments at fixed levels? + +| Approach | Problem | +|----------|---------| +| Fixed adjustments | Would be wrong as soon as actual costs differ from forecast | +| Frequent rate cases | Expensive ($millions), slow (12-18 months), adversarial | +| Variable adjustments | Allow continuous true-up within PSC-approved framework | + +The variable adjustment mechanism is a regulatory compromise: +- **Utilities** get timely cost recovery +- **Customers** pay actual costs (no more, no less) +- **PSC** maintains oversight through filing requirements +- **Rate cases** can focus on major issues, not routine variances + +--- + +## Practical Impact: What This Means for Your Bill + +For a typical ConEd residential customer using 500 kWh/month: + +| Component | Typical Range | Monthly Impact | +|-----------|---------------|----------------| +| Base Delivery Rate | $0.161/kWh | $80.50 | +| MAC | ±$0.001-0.005/kWh | ±$0.50-2.50 | +| RDM | ±$0.002-0.008/kWh | ±$1.00-4.00 | +| Uncollectible | $0.0003-0.001/kWh | $0.15-0.50 | +| CES Delivery | $0.001-0.003/kWh | $0.50-1.50 | +| Others | ±$0.001/kWh | ±$0.50 | + +The adjustments typically add/subtract **$2-8/month** from your base delivery charges, or about **3-10%** of the delivery portion of your bill. + +--- + +## Summary: The Big Picture + +1. **Base rates are set infrequently** (rate cases every 1-3 years) +2. **Costs change constantly** (weather, taxes, policy, bad debt) +3. **Adjustments bridge the gap** (automatic true-ups between rate cases) +4. **Each adjustment has a specific purpose** (not arbitrary line items) +5. **Time lags exist** (you're always paying for past variances) +6. **Net effect is revenue neutrality** (ConEd recovers actual costs, no more, no less) + +The complexity isn't arbitrary—it's the result of decades of regulatory evolution trying to balance utility financial health, customer protection, and policy goals like decarbonization. + diff --git a/docs/wiki/utilities/coned/index.md b/docs/wiki/utilities/coned/index.md new file mode 100644 index 0000000..a6ce112 --- /dev/null +++ b/docs/wiki/utilities/coned/index.md @@ -0,0 +1,71 @@ +# Consolidated Edison (ConEd) + +**LSE ID**: 2252 +**Region**: New York City, Westchester County, NY +**Service Types**: Electricity, Gas + +## Overview + +Consolidated Edison Company of New York, Inc. (ConEd) is one of the largest investor-owned utilities in the United States, serving approximately 3.4 million electric customers in New York City and Westchester County. + +## Service Territory + +ConEd's electric service territory is divided into three NYISO pricing zones: + +| Zone | Territory ID | Area | +|------|--------------|------| +| H | 3632 | Upper Westchester | +| I | 3633 | Lower Westchester (including Yonkers) | +| J | 3634 | New York City (all five boroughs) | + +## Residential Tariffs + +| Tariff | Name | Type | Key Feature | Guide | +|--------|------|------|-------------|-------| +| SC1 (EL1) | Residential and Religious | Default | Tiered rates, no TOU | [View Guide](residential-el1/index.md) | +| SC3 (EL1-TOD) | Voluntary Time of Day | Opt-in | TOU rates (8am–midnight peak) | [View Guide](residential-el1-tou/index.md) | +| SC4 (EL1 Rate IV) | Optional Demand-Based | Opt-in | Demand charges ($/kW) | [View Guide](residential-el1-demand/index.md) | + +### Tariff Comparison + +| Aspect | SC1 | SC3 | SC4 | +|--------|-----|-----|-----| +| TOU | No | Yes | Yes | +| Tiering | Yes (250 kWh) | No | Partial | +| Demand Charges | No | No | **Yes** | +| Applicability | Everyone | Opt-in | Opt-in | +| Customer Charge | $20/mo | $20/mo | $29/mo | + +## Shared Explainers + +These guides apply to all ConEd residential tariffs: + +| Guide | Description | +|-------|-------------| +| [Delivery Adjustments](delivery-adjustments.md) | MAC, RDM, CES, and other delivery surcharges explained | +| [Supply Charges](supply-charges.md) | MSC, MSC I/II adjustments, and wholesale price pass-through | +| [Riders](riders.md) | GRT, DLM, CBC, VDER, and other modular charges | +| [Variable Rates API](variable-rates-api.md) | How to retrieve time-varying rates from Arcadia APIs | + +## Key Characteristics + +- **Deregulated market**: Customers can choose ConEd supply or an ESCO (Energy Service Company) +- **Seasonal rates**: Summer (Jun-Sep) and Winter (Oct-May) delivery rates +- **Tiered delivery**: Consumption tiers at 250 kWh for residential (SC1 only) +- **Variable supply charges**: MSC (Market Supply Charge) changes monthly based on wholesale prices +- **Multiple riders**: GRT, DLM, VDER, CBC, and others + +## Regulatory Context + +ConEd is regulated by the New York Public Service Commission (NY PSC). Key regulatory frameworks affecting tariffs: + +- **Revenue Decoupling**: ConEd's revenue is decoupled from sales volume +- **REV (Reforming the Energy Vision)**: Grid modernization initiative +- **VDER (Value of Distributed Energy Resources)**: Solar compensation framework +- **Clean Energy Standard**: Renewable energy mandates + +## Data Sources + +- [ConEd Tariff Books](https://www.coned.com/en/accounts-billing/your-bill/about-your-bill) +- [NY PSC Filings](https://www.dps.ny.gov/) +- Arcadia Signal API (LSE ID: 2252) diff --git a/docs/wiki/utilities/coned/residential-el1-demand/index.md b/docs/wiki/utilities/coned/residential-el1-demand/index.md new file mode 100644 index 0000000..44eeef8 --- /dev/null +++ b/docs/wiki/utilities/coned/residential-el1-demand/index.md @@ -0,0 +1,694 @@ +# ConEd Residential Demand-Based (SC4/EL1 Rate IV) — Field Guide + +> ⚠️ **Disclaimer**: This guide was generated by an LLM (Claude Opus 4.5) based on the tariff JSON plus the model's background knowledge of utility rate structures. The content looks reasonable but **has not been verified by domain experts**. Please verify any claims before relying on them for business or regulatory purposes. + +> **Data Source**: This guide covers tariff data from the [Arcadia Signal API](https://docs.arcadia.com/v2022-12-21-Signal/reference/tariff) (formerly Genability). The JSON structure, field names, and lookup mechanisms described here are specific to Arcadia's tariff data model. The [full JSON output is included below](#full-tariff-json) for reference. + +**Master Tariff ID**: 3352343 +**Tariff Code**: EL1 +**Tariff Name**: Residential and Religious - Optional Demand-Based +**Customer Class**: Residential +**Tariff Type**: ALTERNATIVE (opt-in) + +## Overview + +SC4 is ConEd's **demand-based rate** available to any residential customer who wants it. Unlike SC1 and SC3 which charge primarily based on energy consumption (kWh), SC4 includes significant **demand charges ($/kW)** based on your peak power draw. While open to all, it's particularly well-suited for customers with heat pumps—especially geothermal systems—that have high, steady loads. + +### What is a Demand Charge? + +Demand charges are based on your **peak power usage** (kW), not total energy consumption (kWh): + +| Concept | Energy (kWh) | Demand (kW) | +|---------|--------------|-------------| +| What it measures | Total electricity used over time | Maximum instantaneous power draw | +| Analogy | Miles driven | Top speed reached | +| Billing period | Sum of all usage | Highest 60-minute average | +| Units | kilowatt-hours | kilowatts | + +**Why demand charges exist:** The utility must build infrastructure to handle your peak load. A customer who uses 1,000 kWh spread evenly over a month costs less to serve than one who uses 1,000 kWh in concentrated bursts. Demand charges recover infrastructure costs more fairly. + +### Key Differences from SC1 and SC3 + +| Aspect | SC1 (Default) | SC3 (Vol. TOU) | SC4 (Demand-Based) | +|--------|---------------|----------------|-------------------| +| TOU | No | Yes | Yes | +| Tiering | Yes | No | Partial (delivery adjustments) | +| Demand Charges | No | No | **Yes** | +| Applicability | Everyone | Opt-in | **Opt-in** | +| Energy Input | `consumption` | `consumption[ON_PEAK/OFF_PEAK]` | `consumption` | +| Demand Input | N/A | N/A | **`demand[ON_PEAK/OFF_PEAK]`** | + +### Who This Rate is For + +SC4 is an opt-in rate available to **any residential customer** who wants demand-based billing. It may be particularly attractive for: + +- **Customers with geothermal heat pumps** — high, steady loads benefit from demand pricing +- **EV owners with managed charging** — can shift charging to off-peak hours +- **Homes with battery storage** — can flatten demand peaks +- **Customers with predictable, consistent usage patterns** + +The tariff includes a `hasGeothermalHeatPumps` property that may affect certain rate applicability rules, but geothermal is not required to enroll. + +### Understanding SC4's Demand Calculation + +#### How Billing Demand is Calculated + +SC4 uses a specific formula for billing demand: + +> The Billable Demands shall be determined by calculating the **average of the three highest maximum daily demands** occurring in each time period for the applicable billing period. All maximum daily demand values shall be established by calculating the highest integrated **60-minute demand** ending in each day and being entirely comprised of intervals ending in the same time period (on-peak, off-peak). + +**Step by step:** + +1. For each day in the billing period, find the highest 60-minute average demand during on-peak hours +2. Take the **three highest** daily values +3. Average them → This is your **On-Peak Billing Demand** +4. Repeat for off-peak hours → **Off-Peak Billing Demand** + +#### Example Calculation + +| Day | Max 60-min On-Peak (kW) | Max 60-min Off-Peak (kW) | +|-----|-------------------------|--------------------------| +| Day 1 | 4.2 | 2.1 | +| Day 2 | 3.8 | 1.9 | +| Day 3 | 5.1 | 2.3 | +| Day 4 | 4.5 | 2.0 | +| Day 5 | 3.9 | 2.2 | +| ... | ... | ... | + +**On-Peak Billing Demand** = Average of 3 highest = (5.1 + 4.5 + 4.2) / 3 = **4.6 kW** +**Off-Peak Billing Demand** = Average of 3 highest = (2.3 + 2.2 + 2.1) / 3 = **2.2 kW** + +This averaging smooths out single-day spikes, but still incentivizes consistent load management. + +--- + +## TOU Schedule + +SC4 uses a **different TOU schedule** than SC3. On-peak hours are more limited: + +### Schedule Summary + +| Period | Hours | Days | +|--------|-------|------| +| **On-Peak** | 12:00 PM – 8:00 PM | Sun – Thu | +| **Off-Peak** | All other hours | Sun – Thu | +| **Off-Peak** | All day | **Fri – Sat** | + +**Key differences from SC3:** + +- SC3 on-peak: 8am–midnight, all days +- SC4 on-peak: 12pm–8pm, **Sun–Thu only** +- SC4 treats **Friday and Saturday as entirely off-peak** + +### Visual Schedule + +``` + 12am 4am 8am 12pm 4pm 8pm 12am +Sun-Thu |←───── OFF-PEAK ─────→|← ON-PEAK →|← OFF-PEAK →| +Fri-Sat |←─────────────── ALL OFF-PEAK ──────────────→| +``` + +This schedule benefits customers who can shift high-demand activities to: + +- Evenings after 8pm +- Early mornings before noon +- Fridays and Saturdays (all day) + +--- + +## Quick Reference: All Charges + +### Fixed Charges + +| Rate Name | Charge Type | Rate Value | Note | +|-----------|-------------|------------|------| +| Customer Charge | FIXED_PRICE | **$29.00/mo** | Higher than SC1/SC3 ($20) | +| Billing and Payment Processing | FIXED_PRICE | $1.28/mo | Same as other tariffs | + +### Demand Charges ($/kW) + +The core differentiator of SC4. Based on peak power draw, not energy consumption. + +| Season | TOU Period | Rate | +|--------|------------|------| +| Summer | On-Peak | **$25.36/kW** | +| Summer | Off-Peak | $7.48/kW | +| Winter | On-Peak | **$19.50/kW** | +| Winter | Off-Peak | $7.48/kW | + +**Key observations:** + +- Off-peak demand rate is the same year-round ($7.48/kW) +- Summer on-peak is the most expensive (~3.4x off-peak) +- Winter on-peak is moderate (~2.6x off-peak) + +### Delivery Adjustments ($/kWh) + +Same variable-rate adjustments as SC1/SC3, applied to total consumption: + +| Rate Name | Charge Type | Zone | Season | Tiered | Rate Value | +|-----------|-------------|------|--------|--------|------------| +| Delivery Revenue Surcharge | CONSUMPTION_BASED | All | All | No | *Lookup* | +| Reconciliation Rate | CONSUMPTION_BASED | All | All | No | *Lookup* | +| Transition Adjustment | CONSUMPTION_BASED | All | All | No | *Lookup* | +| Uncollectible Bill Expense | CONSUMPTION_BASED | All | All | No | *Lookup* | +| Monthly Adjustment Clause | CONSUMPTION_BASED | All | All | No | *Lookup* | +| Revenue Decoupling Mechanism | CONSUMPTION_BASED | All | All | No | *Lookup* | +| Clean Energy Standard (Delivery) | CONSUMPTION_BASED | All | All | No | *Lookup* | +| Temporary Rate Adjustment | CONSUMPTION_BASED | H/I/J | Sum/Win | **Yes** | Credit (varies) | + +> **📘 Deep Dive**: For a complete explanation of delivery adjustments, see **[Delivery Adjustments Guide](../delivery-adjustments.md)**. + +### Supply Charges ($/kWh) + +Same as SC1/SC3: + +| Rate Name | Zone | Rate Value | +|-----------|------|------------| +| MSC Rate | H/I/J | *Lookup* | +| MSC I Adjustment | H/I/J | *Lookup* | +| MSC II Adjustment | All | *Lookup* | +| Clean Energy Standard (Supply) | All | *Lookup* | +| Merchant Function Charge | All | *Lookup* | + +> **📘 Deep Dive**: For a complete explanation of supply charges, see **[Supply Charges Guide](../supply-charges.md)**. + +### Rider Charges + +Same riders as SC1/SC3: + +| Rider | Charge Type | Rate Value | +|-------|-------------|------------| +| Tax Sur-Credit | CONSUMPTION_BASED | *Lookup* | +| Dynamic Load Management | CONSUMPTION_BASED | *Lookup* | +| Customer Benefit Contribution | QUANTITY | $1.84/kW | +| EV Make Ready Surcharge | CONSUMPTION_BASED | $0.0008/kWh | +| Arrears Management Recovery | CONSUMPTION_BASED | $0.0012/kWh | +| GRT Distribution | QUANTITY | 3.33–5.51% (by zone) | +| GRT Supply | QUANTITY | 1.01–3.09% (by zone) | +| VDER Cost Recovery | CONSUMPTION_BASED | $0.0011/kWh | + +> **📘 Deep Dive**: For a complete explanation of riders, see **[Riders Guide](../riders.md)**. + +--- + +## Charge-by-Charge Breakdown + +### Basic Service Charges + +#### Customer Charge — $29.00/month + +A flat monthly fee that covers the cost of having an account. **Higher than SC1/SC3** ($20/mo) because demand metering and billing is more complex. Everyone pays this regardless of usage. + +#### Billing and Payment Processing Charge — $1.28/month + +Covers the cost of generating and mailing bills, processing payments. Same as other tariffs. + +--- + +### Demand Charges + +These are the core differentiator of SC4. Based on your peak power draw (kW), not energy consumption (kWh). + +#### Summer On-Peak Demand — $25.36/kW + +The most expensive demand charge. Applied to your on-peak billing demand during summer months (June–September). This reflects the infrastructure costs of serving peak summer loads when air conditioning strains the grid. + +#### Summer Off-Peak Demand — $7.48/kW + +Applied to your off-peak billing demand during summer. Significantly lower than on-peak, rewarding customers who can shift high-power activities to nights, early mornings, and weekends. + +#### Winter On-Peak Demand — $19.50/kW + +Applied to your on-peak billing demand during winter months (October–May). Lower than summer because winter peak demand is typically less grid-straining than summer. + +#### Winter Off-Peak Demand — $7.48/kW + +Same rate year-round for off-peak demand. The consistent off-peak rate creates a predictable floor. + +--- + +### Delivery Adjustments + +Same variable-rate adjustments as SC1/SC3, applied to **total consumption** (not split by TOU): + +> **📘 Deep Dive**: For regulatory background and calculation details, see **[Delivery Adjustments Guide](../delivery-adjustments.md)**. + +**Monthly Adjustment Clause (MAC)** — *Variable* +Umbrella adjustment for property taxes, storm costs, pension expenses. + +**Revenue Decoupling Mechanism (RDM) Adjustment** — *Variable* +True-up for actual vs. expected sales volume. + +**Delivery Revenue Surcharge** — *Variable* +Supplemental revenue adjustment. + +**Clean Energy Standard Delivery Surcharge** — *Variable* +Grid infrastructure costs for clean energy compliance. + +**Reconciliation Rate** — *Variable* +Legacy deferred costs from 1990s restructuring. + +**Transition Adjustment** — *Variable* +Legacy deregulation costs. + +**Uncollectible Bill Expense** — *Variable* +Bad debt recovery. + +**Temporary Rate Adjustment** — *Credit, varies by zone/season* +A tiered credit that reduces delivery costs. Zone and season-specific. + +--- + +### Supply Charges + +Same as SC1/SC3—charges for the electricity commodity itself. Only apply if using ConEd as supplier. + +> **📘 Deep Dive**: For NYISO settlement, load-weighted averaging, and reconciliation details, see **[Supply Charges Guide](../supply-charges.md)**. + +**MSC Rate (Market Supply Charge)** — *Variable, by zone* +Base cost of electricity, forecasted monthly from wholesale prices. + +**MSC I Adjustment** — *Variable, by zone* +Reconciles actual energy costs vs. forecast. + +**MSC II Adjustment** — *Variable* +Reconciles capacity costs and ancillary services. + +**Clean Energy Standard Supply Surcharge** — *Variable* +RECs, ZECs, and other clean energy compliance costs. + +**Merchant Function Charge** — *Variable* +ConEd's costs to administer supply service. + +--- + +### System Benefits Charge + +#### System Benefits Charge (SBC) — *Variable* + +Funds NY's clean energy programs administered by NYSERDA. + +--- + +### NY State Surcharge + +#### New York State Surcharge — *Variable* + +Temporary surcharge for policy initiatives or one-time cost recovery. + +--- + +### Minimum Charge + +#### Minimum Charge — $29.00/month + +If your total bill is less than $29, you pay $29 anyway. Higher than SC1/SC3 ($20) to match the higher customer charge. + +--- + +### Rider Charges + +Same riders as SC1/SC3. See **[Riders Guide](../riders.md)** for full details. + +#### Tax Sur-Credit — *Variable* + +Tax cost true-ups. Can be positive or negative. + +#### Dynamic Load Management (DLM) Surcharge — *Variable* + +Demand response program costs. + +#### Customer Benefit Contribution (CBC) — $1.84/kW + +**Only for customers with solar.** Monthly fee based on solar system size. + +#### Electric Vehicle Make Ready Surcharge — $0.0008/kWh + +EV charging infrastructure costs. + +#### Arrears Management Program Recovery Surcharge — $0.0012/kWh + +COVID-era arrears recovery. + +#### Gross Receipts Tax (GRT) — Varies by zone + +Municipal taxes on utilities: + +| Zone | GRT Distribution | GRT Supply | +|------|------------------|------------| +| H (Upper Westchester) | 3.3322% | 1.0101% | +| I (Lower Westchester) | 5.5127% | 3.0928% | +| J (NYC) | 4.7940% | 2.4066% | + +#### VDER Cost Recovery — $0.0011/kWh + +Costs ConEd pays to solar generators under Value Stack. + +--- + +## Example Bill Calculation + +A Zone J customer in July (Summer) with: + +- Total consumption: 800 kWh +- On-Peak Billing Demand: 5 kW +- Off-Peak Billing Demand: 3 kW + +### Fixed Charges + +| Charge | Calculation | Amount | +|--------|-------------|--------| +| Customer Charge | $29.00 | $29.00 | +| Billing & Payment | $1.28 | $1.28 | +| **Subtotal Fixed** | | **$30.28** | + +### Demand Charges + +| Charge | Calculation | Amount | +|--------|-------------|--------| +| Summer On-Peak Demand | 5 kW × $25.36 | $126.80 | +| Summer Off-Peak Demand | 3 kW × $7.48 | $22.44 | +| **Subtotal Demand** | | **$149.24** | + +### Energy Charges (Delivery Adjustments + Supply) + +| Charge | Calculation | Amount | +|--------|-------------|--------| +| Delivery Adjustments | 800 kWh × ~$0.02 (varies) | ~$16.00 | +| MSC + Adjustments | 800 kWh × ~$0.09 (varies) | ~$72.00 | +| CES (Delivery + Supply) | 800 kWh × ~$0.006 | ~$4.80 | +| **Subtotal Energy** | | **~$92.80** | + +### Riders & Taxes + +| Charge | Calculation | Amount | +|--------|-------------|--------| +| Various Riders | 800 kWh × ~$0.004 | ~$3.20 | +| GRT | ~$273 × ~7% | ~$19.11 | +| **Subtotal Riders** | | **~$22.31** | + +### Total + +**~$294.63** for 800 kWh with 5 kW on-peak / 3 kW off-peak demand + +### Comparison to SC1 + +If this same 800 kWh were billed under SC1 (no demand charges): + +- Energy charges would be similar (~$92.80) +- But no demand charges (~$149.24 saved) +- Total would be ~$145 + +**SC4 is more expensive** for customers with high peak demand relative to consumption. It benefits customers with **high, steady** loads (like geothermal heat pumps that run consistently) rather than **peaky** loads. + +--- + +## Full Tariff JSON + +The complete tariff JSON response from the Arcadia Signal API is included below for reference. For an introduction to the tariff JSON structure (hierarchy, properties, rates, rate bands), see **[Understanding Arcadia Tariff JSON](../../../../providers/arcadia/tariff-json-structure.md)**. For complete field definitions, see the [Arcadia Tariff API Reference](https://docs.arcadia.com/v2022-12-21-Signal/reference/gettariff). + +
+Click to expand full JSON (~2000 lines) + +```json +{ + "tariffId": 3491617, + "masterTariffId": 3352343, + "tariffCode": "EL1", + "tariffName": "Residential and Religious - Optional Demand-Based", + "tariffBookName": "Residential and Religious - Optional Demand-Based", + "lseId": 2252, + "lseName": "Consolidated Edison Co-NY Inc", + "lseCode": "ConEd", + "serviceType": "ELECTRICITY", + "tariffType": "ALTERNATIVE", + "customerClass": "RESIDENTIAL", + "chargeTypes": "FIXED_PRICE,CONSUMPTION_BASED,DEMAND_BASED,QUANTITY,MINIMUM", + "hasTimeOfUseRates": true, + "hasTieredRates": true, + "hasContractedRates": true, + "hasTariffApplicability": true, + "hasNetMetering": true, + "properties": [ + { + "keyName": "hasGeothermalHeatPumps", + "displayName": "Has Geothermal Heat Pumps", + "dataType": "BOOLEAN", + "propertyTypes": "APPLICABILITY", + "propertyValue": "true" + }, + { + "keyName": "consumption", + "displayName": "Consumption (kWh)", + "dataType": "DECIMAL", + "propertyTypes": "RATE_CRITERIA" + }, + { + "keyName": "demand", + "period": "ON_PEAK", + "quantityKey": "billingDemand60min2252", + "displayName": "60 Minute Billing Demand", + "dataType": "DEMAND", + "propertyTypes": "RATE_CRITERIA", + "quantityUnit": "kW", + "lookbackQuantity": 1, + "lookbackPeriod": "BILLING_PERIOD", + "lookbackIntervalQuantity": 60 + }, + { + "keyName": "demand", + "period": "OFF_PEAK", + "quantityKey": "billingDemand60min2252", + "displayName": "60 Minute Billing Demand", + "dataType": "DEMAND", + "propertyTypes": "RATE_CRITERIA", + "quantityUnit": "kW", + "lookbackQuantity": 1, + "lookbackPeriod": "BILLING_PERIOD", + "lookbackIntervalQuantity": 60 + }, + { + "keyName": "systemSize", + "displayName": "System Size", + "dataType": "DECIMAL", + "propertyTypes": "RATE_CRITERIA", + "propertyValue": "0", + "quantityUnit": "kW" + }, + { + "keyName": "territoryId", + "displayName": "Territory", + "dataType": "CHOICE", + "propertyTypes": "RATE_CRITERIA", + "choices": [ + { "displayValue": "Zone H", "value": "3632" }, + { "displayValue": "Zone I", "value": "3633" }, + { "displayValue": "Zone J", "value": "3634" } + ] + } + ], + "rates": [ + { + "rateName": "Customer Charge", + "chargeType": "FIXED_PRICE", + "chargeClass": "DISTRIBUTION", + "rateBands": [{ "rateAmount": 29.0 }] + }, + { + "rateName": "Billing and Payment Processing Charge", + "chargeType": "FIXED_PRICE", + "chargeClass": "DISTRIBUTION", + "rateBands": [{ "rateAmount": 1.28 }] + }, + { + "rateName": "Demand Charge - Summer On-Peak", + "chargeType": "DEMAND_BASED", + "quantityKey": "billingDemand60min2252", + "timeOfUse": { + "touName": "Summer On-Peak", + "season": { "seasonName": "Summer" }, + "touType": "ON_PEAK", + "touPeriods": [{ "fromDayOfWeek": 0, "fromHour": 12, "toDayOfWeek": 4, "toHour": 20 }] + }, + "rateBands": [{ "rateAmount": 25.36 }] + }, + { + "rateName": "Demand Charge - Summer Off-Peak", + "chargeType": "DEMAND_BASED", + "quantityKey": "billingDemand60min2252", + "timeOfUse": { + "touName": "Summer Off-Peak", + "season": { "seasonName": "Summer" }, + "touType": "OFF_PEAK", + "touPeriods": [ + { "fromDayOfWeek": 0, "fromHour": 20, "toDayOfWeek": 4, "toHour": 12 }, + { "fromDayOfWeek": 5, "fromHour": 0, "toDayOfWeek": 6, "toHour": 0 } + ] + }, + "rateBands": [{ "rateAmount": 7.48 }] + }, + { + "rateName": "Demand Charge - Winter On-Peak", + "chargeType": "DEMAND_BASED", + "quantityKey": "billingDemand60min2252", + "timeOfUse": { + "touName": "Winter On-Peak", + "season": { "seasonName": "Winter" }, + "touType": "ON_PEAK" + }, + "rateBands": [{ "rateAmount": 19.5 }] + }, + { + "rateName": "Demand Charge - Winter Off-Peak", + "chargeType": "DEMAND_BASED", + "quantityKey": "billingDemand60min2252", + "timeOfUse": { + "touName": "Winter Off-Peak", + "season": { "seasonName": "Winter" }, + "touType": "OFF_PEAK" + }, + "rateBands": [{ "rateAmount": 7.48 }] + } + ] +} +``` + +*Note: The JSON above is a representative excerpt showing key rate structures. Some rates have been omitted for brevity. The actual tariff contains delivery adjustments, supply charges, and riders.* + +
+ +--- + +## Understanding the JSON + +### Demand-Based Charge Type + +SC4 introduces the `DEMAND_BASED` charge type, distinct from `CONSUMPTION_BASED`: + +```json +{ + "rateName": "Demand Charge - Summer On-Peak", + "chargeType": "DEMAND_BASED", + "quantityKey": "billingDemand60min2252", + "timeOfUse": { + "touName": "Summer On-Peak", + "touType": "ON_PEAK", + "season": { "seasonName": "Summer" }, + "touPeriods": [ + { "fromDayOfWeek": 0, "fromHour": 12, "toDayOfWeek": 4, "toHour": 20 } + ] + }, + "rateBands": [{ "rateAmount": 25.36 }] +} +``` + +| Field | Description | +|-------|-------------| +| `chargeType: "DEMAND_BASED"` | Charge calculated from peak demand, not energy | +| `quantityKey` | Specifies which demand calculation to use | +| `rateAmount` | $/kW (dollars per kilowatt of demand) | + +### Multiple TOU Periods + +Notice how off-peak has **two `touPeriods`**: + +```json +"touPeriods": [ + { "fromDayOfWeek": 0, "fromHour": 20, "toDayOfWeek": 4, "toHour": 12 }, + { "fromDayOfWeek": 5, "fromHour": 0, "toDayOfWeek": 6, "toHour": 0 } +] +``` + +- Period 1: Sun–Thu, 8pm to noon next day +- Period 2: Fri–Sat, all day (day 5 and 6) + +This is how the JSON represents "Friday and Saturday are entirely off-peak." + +### Tariff Properties + +The `properties` array shows what inputs are needed to calculate bills. SC4 introduces **demand properties** not present in SC1 or SC3. + +| Property | Type | Period | Description | Default | Used For | +|----------|------|--------|-------------|---------|----------| +| `hasGeothermalHeatPumps` | BOOLEAN | — | Applicability flag | true | Rate eligibility | +| `consumption` | DECIMAL | — | Total energy usage (kWh) | — | Delivery adjustments | +| `demand` | DEMAND | ON_PEAK | 60-min billing demand (kW) | — | On-peak demand charge | +| `demand` | DEMAND | OFF_PEAK | 60-min billing demand (kW) | — | Off-peak demand charge | +| `systemSize` | DECIMAL | — | Solar system capacity (kW) | 0 | CBC rider | +| `territoryId` | CHOICE | — | Service zone (H, I, or J) | — | Zone-specific rates | +| `chargeClass` | CHOICE | — | Charge categories | DISTRIBUTION,SUPPLY,CONTRACTED | Filtering | + +Below we walk through the properties specific to SC4. For standard properties like `territoryId` and `systemSize`, see the [SC1 documentation](../residential-el1/index.md#tariff-properties). + +#### `hasGeothermalHeatPumps` + +```json +{ + "keyName": "hasGeothermalHeatPumps", + "displayName": "Has Geothermal Heat Pumps", + "dataType": "BOOLEAN", + "propertyTypes": "APPLICABILITY", + "propertyValue": "true" +} +``` + +An **applicability flag** indicating whether the customer has geothermal heat pumps. This may affect certain rate applicability rules within the tariff. Note that geothermal is **not required** to enroll in SC4—it's an opt-in rate available to all residential customers. + +#### `demand[ON_PEAK]` and `demand[OFF_PEAK]` + +```json +{ + "keyName": "demand", + "period": "ON_PEAK", + "quantityKey": "billingDemand60min2252", + "displayName": "60 Minute Billing Demand", + "dataType": "DEMAND", + "propertyTypes": "RATE_CRITERIA", + "quantityUnit": "kW", + "lookbackQuantity": 1, + "lookbackPeriod": "BILLING_PERIOD", + "lookbackIntervalQuantity": 60 +} +``` + +The demand properties have additional fields that define how billing demand is calculated: + +| Field | Description | +|-------|-------------| +| `quantityKey` | `billingDemand60min2252` — ConEd-specific calculation method | +| `dataType` | `DEMAND` — distinct from `DECIMAL` (energy) | +| `quantityUnit` | `kW` (kilowatts, not kilowatt-hours) | +| `lookbackQuantity` | 1 — look back 1 billing period | +| `lookbackPeriod` | `BILLING_PERIOD` — within the current billing cycle | +| `lookbackIntervalQuantity` | 60 — 60-minute integration interval | + +These properties require **interval meter data** to calculate billing demand. Standard monthly meters don't capture this information. + +#### `consumption` + +Unlike SC3, SC4 uses a **single consumption** property (not split by TOU). Energy charges (delivery adjustments, supply charges) are based on total kWh, not split by on-peak/off-peak. + +--- + +## How to Get Variable Rate Values + +Same approach as SC1/SC3. See **[Variable Rates API Guide](../variable-rates-api.md)** for detailed examples. + +**Key difference**: When using the Calculate API, you must provide: + +- `consumption` — total kWh used +- `demand[ON_PEAK]` — on-peak billing demand in kW +- `demand[OFF_PEAK]` — off-peak billing demand in kW + +--- + +## Summary: What Makes SC4 Different + +1. **Demand charges**: Core billing component based on peak power (kW), not just energy (kWh) +2. **Opt-in for all**: Available to any residential customer (geothermal not required) +3. **Different TOU schedule**: On-peak is only 12pm–8pm Sun–Thu; Fri–Sat are all off-peak +4. **Higher fixed charge**: $29/mo vs $20/mo for SC1/SC3 +5. **Interval metering required**: Must have smart meter capturing 60-minute demand data +6. **Benefits steady loads**: Rewards consistent usage patterns over peaky consumption +7. **Same energy charges**: Delivery adjustments, supply charges, and riders work the same as SC1/SC3 diff --git a/docs/wiki/utilities/coned/residential-el1-tou/index.md b/docs/wiki/utilities/coned/residential-el1-tou/index.md new file mode 100644 index 0000000..ebeff73 --- /dev/null +++ b/docs/wiki/utilities/coned/residential-el1-tou/index.md @@ -0,0 +1,642 @@ +# ConEd Residential Voluntary TOU (SC3/EL1-TOD) — Field Guide + +> ⚠️ **Disclaimer**: This guide was generated by an LLM (Claude Opus 4.5) based on the tariff JSON plus the model's background knowledge of utility rate structures. The content looks reasonable but **has not been verified by domain experts**. Please verify any claims before relying on them for business or regulatory purposes. + +> **Data Source**: This guide covers tariff data from the [Arcadia Signal API](https://docs.arcadia.com/v2022-12-21-Signal/reference/tariff) (formerly Genability). The JSON structure, field names, and lookup mechanisms described here are specific to Arcadia's tariff data model. The [full JSON output is included below](#full-tariff-json) for reference. + +**Master Tariff ID**: 3220724 +**Tariff Code**: EL1 +**Tariff Name**: Residential and Religious, Voluntary Time of Day +**Customer Class**: Residential +**Tariff Type**: ALTERNATIVE (opt-in) + +## Overview + +SC3 is ConEd's **voluntary time-of-use (TOU) rate** for residential customers. Unlike the default SC1 tariff, SC3 charges different rates depending on *when* you use electricity: + +- **On-Peak (8am–midnight)**: Higher rates +- **Off-Peak (midnight–8am)**: Significantly lower rates + +This structure rewards customers who can shift consumption to overnight hours—charging EVs at night, running dishwashers after midnight, pre-cooling homes before the afternoon peak. The summer on-peak rate is **~14x more expensive** than off-peak, creating strong incentive to shift load. + +### Key Differences from SC1 (Default Rate) + +| Aspect | SC1 (Default) | SC3 (Voluntary TOU) | +|--------|---------------|---------------------| +| TOU | No | Yes (On-Peak/Off-Peak) | +| Tiering | Yes (≤250 kWh / >250 kWh) | No | +| Tariff Type | DEFAULT | ALTERNATIVE | +| Best for | Average usage patterns | Flexible schedules, EV owners, night owls | + +### Who This Rate Is For + +SC3 makes sense for customers who can shift significant consumption to off-peak hours: + +- **EV owners** who can charge overnight +- **Homes with battery storage** that can time-shift +- **Night-shift workers** with naturally offset schedules +- **Customers with smart thermostats** that can pre-cool/pre-heat + +If most of your usage is during daytime/evening hours, SC1 may be cheaper. + +--- + +## TOU Schedule + +SC3 uses the same TOU periods year-round for both summer and winter: + +``` +Hour: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 + |←────── OFF-PEAK ──────→|←──────────────── ON-PEAK ────────────────→| + midnight 8am 8am midnight +``` + +| Period | Hours | Days | Description | +|--------|-------|------|-------------| +| **Off-Peak** | 12:00 AM – 8:00 AM | All days | Cheapest rates | +| **On-Peak** | 8:00 AM – 12:00 AM | All days | Higher rates | + +**Key details:** + +- Same schedule applies **all 7 days** of the week (no weekday/weekend distinction) +- Same schedule applies **year-round** (no seasonal schedule change) +- However, **rates differ by season** (Summer vs Winter on-peak rates are different) + +--- + +## Quick Reference: All Charges + +### Fixed Charges + +| Rate Name | Charge Type | Rate Value | +|-----------|-------------|------------| +| Customer Charge | FIXED_PRICE | $20.00/mo | +| Billing and Payment Processing | FIXED_PRICE | $1.28/mo | + +### Delivery Energy Charges (TOU) + +Delivery rates vary by **zone**, **season**, and **TOU period**. No tiering. + +| Zone | Season | TOU Period | Rate | +|------|--------|------------|------| +| H | Summer | On-Peak | $0.3523/kWh | +| H | Summer | Off-Peak | $0.0249/kWh | +| H | Winter | On-Peak | $0.1305/kWh | +| H | Winter | Off-Peak | $0.0249/kWh | +| I | Summer | On-Peak | $0.3523/kWh | +| I | Summer | Off-Peak | $0.0249/kWh | +| I | Winter | On-Peak | $0.1305/kWh | +| I | Winter | Off-Peak | $0.0249/kWh | +| J | Summer | On-Peak | $0.3523/kWh | +| J | Summer | Off-Peak | $0.0249/kWh | +| J | Winter | On-Peak | $0.1305/kWh | +| J | Winter | Off-Peak | $0.0249/kWh | + +**Key observations:** + +- **Off-peak rates are identical** across all zones and seasons ($0.0249/kWh) +- **Summer on-peak is the most expensive** at $0.3523/kWh (~14x off-peak) +- **Winter on-peak is moderate** at $0.1305/kWh (~5x off-peak) +- Zone doesn't affect TOU delivery rates (same rates for H, I, J) + +### Delivery Adjustments + +Same variable-rate adjustments as SC1. These apply to all kWh regardless of TOU period. + +| Rate Name | Charge Type | Rate Value | +|-----------|-------------|------------| +| Delivery Revenue Surcharge | CONSUMPTION_BASED | *Lookup* | +| Reconciliation Rate | CONSUMPTION_BASED | *Lookup* | +| Transition Adjustment | CONSUMPTION_BASED | *Lookup* | +| Uncollectible Bill Expense | CONSUMPTION_BASED | *Lookup* | +| Monthly Adjustment Clause | CONSUMPTION_BASED | *Lookup* | +| Revenue Decoupling Mechanism | CONSUMPTION_BASED | *Lookup* | +| Clean Energy Standard (Delivery) | CONSUMPTION_BASED | *Lookup* | + +> **📘 Deep Dive**: For a complete explanation of delivery adjustments, see **[Delivery Adjustments Guide](../delivery-adjustments.md)**. + +### Supply Charges + +Same as SC1—zone-specific MSC rates, adjustments, and CES supply surcharge. + +| Rate Name | Zone | Rate Value | +|-----------|------|------------| +| MSC Rate | H/I/J | *Lookup* | +| MSC I Adjustment | H/I/J | *Lookup* | +| MSC II Adjustment | All | *Lookup* | +| Clean Energy Standard (Supply) | All | *Lookup* | +| Merchant Function Charge | All | *Lookup* | + +> **📘 Deep Dive**: For a complete explanation of supply charges, see **[Supply Charges Guide](../supply-charges.md)**. + +### Rider Charges + +Same riders as SC1: + +| Rider | Charge Type | Rate Value | +|-------|-------------|------------| +| Tax Sur-Credit | CONSUMPTION_BASED | *Lookup* | +| Dynamic Load Management | CONSUMPTION_BASED | *Lookup* | +| Customer Benefit Contribution | QUANTITY | $1.84/kW | +| EV Make Ready Surcharge | CONSUMPTION_BASED | $0.0008/kWh | +| Arrears Management Recovery | CONSUMPTION_BASED | $0.0012/kWh | +| GRT Distribution | QUANTITY | 3.33–5.51% (by zone) | +| GRT Supply | QUANTITY | 1.01–3.09% (by zone) | +| VDER Cost Recovery | CONSUMPTION_BASED | $0.0011/kWh | + +> **📘 Deep Dive**: For a complete explanation of riders, see **[Riders Guide](../riders.md)**. + +--- + +## Charge-by-Charge Breakdown + +### Basic Service Charges + +#### Customer Charge — $20.00/month + +A flat monthly fee that covers the cost of having an account: metering, billing systems, customer service. Everyone pays this regardless of usage. Same as SC1. + +#### Billing and Payment Processing Charge — $1.28/month + +Covers the cost of generating and mailing bills, processing payments. Same as SC1. + +--- + +### Delivery Energy Charges (TOU) + +These are the core delivery charges for using ConEd's distribution network. Unlike SC1's tiered rates, SC3 uses **time-of-use rates**—the price per kWh depends on *when* you consume, not *how much* you consume. + +#### On-Peak Rate — $0.3523/kWh (Summer) / $0.1305/kWh (Winter) + +Applies to electricity consumed during **on-peak hours (8am–midnight)**. The summer on-peak rate is particularly high because this is when the grid is most stressed—air conditioning drives demand, and ConEd must maintain infrastructure to handle these peaks. + +#### Off-Peak Rate — $0.0249/kWh (All Seasons) + +Applies to electricity consumed during **off-peak hours (midnight–8am)**. This rate is dramatically lower because: + +- Grid demand is low overnight +- Excess generation capacity is available +- ConEd wants to encourage load shifting to reduce peak strain + +**The value proposition**: If you can shift consumption to off-peak hours, you pay ~14x less per kWh in summer. + +--- + +### Delivery Adjustments + +Same variable-rate adjustments as SC1, applied to **total consumption** (not split by TOU period): + +> **📘 Deep Dive**: For regulatory background and calculation details, see **[Delivery Adjustments Guide](../delivery-adjustments.md)**. + +**Monthly Adjustment Clause (MAC)** — *Variable* +Umbrella adjustment for property taxes, storm costs, pension expenses. + +**Revenue Decoupling Mechanism (RDM) Adjustment** — *Variable* +True-up for actual vs. expected sales volume. + +**Delivery Revenue Surcharge** — *Variable* +Supplemental revenue adjustment. + +**Clean Energy Standard Delivery Surcharge** — *Variable* +Grid infrastructure costs for clean energy compliance. + +**Reconciliation Rate** — *Variable* +Legacy deferred costs from 1990s restructuring. + +**Transition Adjustment** — *Variable* +Legacy deregulation costs. + +**Uncollectible Bill Expense** — *Variable* +Bad debt recovery. + +--- + +### Supply Charges + +Same as SC1—charges for the electricity commodity itself. Only apply if using ConEd as supplier. + +> **📘 Deep Dive**: For NYISO settlement, load-weighted averaging, and reconciliation details, see **[Supply Charges Guide](../supply-charges.md)**. + +**MSC Rate (Market Supply Charge)** — *Variable, by zone* +Base cost of electricity, forecasted monthly from wholesale prices. + +**MSC I Adjustment** — *Variable, by zone* +Reconciles actual energy costs vs. forecast. + +**MSC II Adjustment** — *Variable* +Reconciles capacity costs and ancillary services. + +**Clean Energy Standard Supply Surcharge** — *Variable* +RECs, ZECs, and other clean energy compliance costs. + +**Merchant Function Charge** — *Variable* +ConEd's costs to administer supply service. + +--- + +### System Benefits Charge + +#### System Benefits Charge (SBC) — *Variable* + +Funds NY's clean energy programs administered by NYSERDA. + +--- + +### NY State Surcharge + +#### New York State Surcharge — *Variable* + +Temporary surcharge for policy initiatives or one-time cost recovery. + +--- + +### Minimum Charge + +#### Minimum Charge — $20.00/month + +If your total bill is less than $20, you pay $20 anyway. Same as SC1. + +--- + +### Rider Charges + +Same riders as SC1. See **[Riders Guide](../riders.md)** for full details. + +#### Tax Sur-Credit — *Variable* + +Tax cost true-ups. Can be positive or negative. + +#### Dynamic Load Management (DLM) Surcharge — *Variable* + +Demand response program costs. + +#### Customer Benefit Contribution (CBC) — $1.84/kW + +**Only for customers with solar.** Monthly fee based on solar system size. + +#### Electric Vehicle Make Ready Surcharge — $0.0008/kWh + +EV charging infrastructure costs. + +#### Arrears Management Program Recovery Surcharge — $0.0012/kWh + +COVID-era arrears recovery. + +#### Gross Receipts Tax (GRT) — Varies by zone + +Municipal taxes on utilities: + +| Zone | GRT Distribution | GRT Supply | +|------|------------------|------------| +| H (Upper Westchester) | 3.3322% | 1.0101% | +| I (Lower Westchester) | 5.5127% | 3.0928% | +| J (NYC) | 4.7940% | 2.4066% | + +#### VDER Cost Recovery — $0.0011/kWh + +Costs ConEd pays to solar generators under Value Stack. + +--- + +## Example Bill Calculation + +A Zone J customer in July (Summer) using: + +- 200 kWh On-Peak +- 100 kWh Off-Peak + +### Delivery Charges + +| Charge | Calculation | Amount | +|--------|-------------|--------| +| Customer Charge | $20.00 | $20.00 | +| Billing & Payment | $1.28 | $1.28 | +| Summer On-Peak | 200 kWh × $0.3523 | $70.46 | +| Summer Off-Peak | 100 kWh × $0.0249 | $2.49 | +| Delivery Adjustments | 300 kWh × ~$0.02 (varies) | ~$6.00 | +| **Subtotal Delivery** | | **~$100.23** | + +### Supply Charges + +| Charge | Calculation | Amount | +|--------|-------------|--------| +| MSC Rate (Zone J) | 300 kWh × ~$0.08 (varies) | ~$24.00 | +| MSC I/II Adjustments | 300 kWh × ~$0.005 | ~$1.50 | +| CES Supply | 300 kWh × ~$0.003 | ~$0.90 | +| **Subtotal Supply** | | **~$26.40** | + +### Riders & Taxes + +| Charge | Calculation | Amount | +|--------|-------------|--------| +| Various Riders | 300 kWh × ~$0.004 | ~$1.20 | +| GRT | ~$127 × ~7% | ~$8.89 | +| **Subtotal Riders** | | **~$10.09** | + +### Total + +**~$136.72** for 300 kWh (200 on-peak + 100 off-peak) + +Compare to SC1 (no TOU): ~$127 for same 300 kWh total + +- SC3 is **more expensive** when usage is mostly on-peak +- SC3 would be **cheaper** if ratio were reversed (100 on-peak + 200 off-peak) + +--- + +## Full Tariff JSON + +The complete tariff JSON response from the Arcadia Signal API is included below for reference. For an introduction to the tariff JSON structure (hierarchy, properties, rates, rate bands), see **[Understanding Arcadia Tariff JSON](../../../../providers/arcadia/tariff-json-structure.md)**. For complete field definitions, see the [Arcadia Tariff API Reference](https://docs.arcadia.com/v2022-12-21-Signal/reference/gettariff). + +
+Click to expand full JSON (~1500 lines) + +```json +{ + "tariffId": 3491856, + "masterTariffId": 3220724, + "tariffCode": "EL1", + "tariffName": "Residential and Religious, Voluntary Time of Day", + "tariffBookName": "Residential and Religious, Voluntary Time of Day", + "lseId": 2252, + "lseName": "Consolidated Edison Co-NY Inc", + "lseCode": "ConEd", + "serviceType": "ELECTRICITY", + "tariffType": "ALTERNATIVE", + "customerClass": "RESIDENTIAL", + "hasTimeOfUseRates": true, + "hasTieredRates": false, + "hasContractedRates": true, + "hasTariffApplicability": true, + "hasRateApplicability": true, + "hasNetMetering": true, + "properties": [ + { + "keyName": "isTODCustomerBeforeMarch12014", + "displayName": "Is TOD Customer before March 1, 2014", + "dataType": "BOOLEAN", + "propertyTypes": "APPLICABILITY", + "propertyValue": "false" + }, + { + "keyName": "consumption", + "period": "ON_PEAK", + "displayName": "Consumption (kWh)", + "dataType": "DECIMAL", + "propertyTypes": "RATE_CRITERIA" + }, + { + "keyName": "consumption", + "period": "OFF_PEAK", + "displayName": "Consumption (kWh)", + "dataType": "DECIMAL", + "propertyTypes": "RATE_CRITERIA" + }, + { + "keyName": "electricVehiclePresent", + "displayName": "Has Electric Vehicle", + "dataType": "BOOLEAN", + "propertyTypes": "RATE_CRITERIA", + "propertyValue": "false" + }, + { + "keyName": "systemSize", + "displayName": "System Size", + "dataType": "DECIMAL", + "propertyTypes": "RATE_CRITERIA", + "propertyValue": "0", + "quantityUnit": "kW" + }, + { + "keyName": "territoryId", + "displayName": "Territory", + "dataType": "CHOICE", + "propertyTypes": "RATE_CRITERIA", + "choices": [ + { "displayValue": "Zone H", "value": "3632" }, + { "displayValue": "Zone I", "value": "3633" }, + { "displayValue": "Zone J", "value": "3634" } + ] + } + ], + "rates": [ + { + "rateName": "Customer Charge", + "chargeType": "FIXED_PRICE", + "chargeClass": "DISTRIBUTION", + "applicabilityKey": "electricVehiclePresent", + "rateBands": [ + { "applicabilityValue": "false", "rateAmount": 20.0 }, + { "applicabilityValue": "true", "rateAmount": 20.0 } + ] + }, + { + "rateName": "Billing and Payment Processing Charge", + "chargeType": "FIXED_PRICE", + "chargeClass": "DISTRIBUTION", + "rateBands": [{ "rateAmount": 1.28 }] + }, + { + "rateName": "Summer On-Peak Rate", + "territory": { "territoryName": "Zone J" }, + "timeOfUse": { + "touName": "Summer On-Peak", + "season": { "seasonName": "Summer" }, + "touType": "ON_PEAK", + "touPeriods": [{ "fromHour": 8, "toHour": 0 }] + }, + "chargeType": "CONSUMPTION_BASED", + "chargeClass": "DISTRIBUTION", + "rateBands": [{ "rateAmount": 0.3523 }] + }, + { + "rateName": "Summer Off-Peak Rate", + "territory": { "territoryName": "Zone J" }, + "timeOfUse": { + "touName": "Summer Off-Peak", + "season": { "seasonName": "Summer" }, + "touType": "OFF_PEAK", + "touPeriods": [{ "fromHour": 0, "toHour": 8 }] + }, + "chargeType": "CONSUMPTION_BASED", + "chargeClass": "DISTRIBUTION", + "rateBands": [{ "rateAmount": 0.0249 }] + }, + { + "rateName": "Winter On-Peak Rate", + "territory": { "territoryName": "Zone J" }, + "timeOfUse": { + "touName": "Winter On-Peak", + "season": { "seasonName": "Winter" }, + "touType": "ON_PEAK" + }, + "chargeType": "CONSUMPTION_BASED", + "chargeClass": "DISTRIBUTION", + "rateBands": [{ "rateAmount": 0.1305 }] + }, + { + "rateName": "Winter Off-Peak Rate", + "territory": { "territoryName": "Zone J" }, + "timeOfUse": { + "touName": "Winter Off-Peak", + "season": { "seasonName": "Winter" }, + "touType": "OFF_PEAK" + }, + "chargeType": "CONSUMPTION_BASED", + "chargeClass": "DISTRIBUTION", + "rateBands": [{ "rateAmount": 0.0249 }] + } + ] +} +``` + +*Note: The JSON above is a representative excerpt showing key rate structures. Some rates have been omitted for brevity. The actual tariff contains entries for all zones (H, I, J), delivery adjustments, supply charges, and riders.* + +
+ +--- + +## Understanding the JSON + +### TOU-Specific Fields + +SC3 rates include a `timeOfUse` object that defines when the rate applies: + +```json +{ + "rateName": "Summer On-Peak Rate", + "timeOfUse": { + "touId": 5324, + "touName": "Summer On-Peak", + "touType": "ON_PEAK", + "season": { + "seasonName": "Summer", + "seasonFromMonth": 6, + "seasonFromDay": 1, + "seasonToMonth": 9, + "seasonToDay": 30 + }, + "touPeriods": [ + { + "fromDayOfWeek": 0, + "fromHour": 8, + "fromMinute": 0, + "toDayOfWeek": 6, + "toHour": 0, + "toMinute": 0 + } + ] + } +} +``` + +| Field | Description | +|-------|-------------| +| `touType` | `ON_PEAK` or `OFF_PEAK` | +| `season` | When this TOU period applies (month range) | +| `touPeriods` | Hour/day ranges for this period | +| `fromDayOfWeek` / `toDayOfWeek` | 0 = Sunday, 6 = Saturday | +| `fromHour` / `toHour` | 24-hour format (8 = 8am, 0 = midnight) | + +### Applicability Keys + +SC3 uses `applicabilityKey` and `applicabilityValue` for conditional rates: + +```json +{ + "rateName": "Customer Charge", + "applicabilityKey": "electricVehiclePresent", + "rateBands": [ + { "applicabilityValue": "false", "rateAmount": 20.0 }, + { "applicabilityValue": "true", "rateAmount": 20.0 } + ] +} +``` + +The rate that applies depends on whether `electricVehiclePresent` matches the `applicabilityValue`. This structure allows different charges for EV vs. non-EV customers (even though they're currently the same). + +### Tariff Properties + +The `properties` array tells you what inputs are needed to calculate bills. SC3 has more properties than SC1 due to TOU metering and applicability rules. + +| Property | Type | Period | Description | Default | Used For | +|----------|------|--------|-------------|---------|----------| +| `isTODCustomerBeforeMarch12014` | BOOLEAN | — | Grandfathering flag | false | Applicability | +| `consumption` | DECIMAL | ON_PEAK | Energy usage during on-peak hours | — | TOU delivery charges | +| `consumption` | DECIMAL | OFF_PEAK | Energy usage during off-peak hours | — | TOU delivery charges | +| `electricVehiclePresent` | BOOLEAN | — | Has electric vehicle | false | Customer charge applicability | +| `systemSize` | DECIMAL | — | Solar system capacity in kW | 0 | CBC rider | +| `territoryId` | CHOICE | — | Service zone (H, I, or J) | — | Zone-specific rates | +| `chargeClass` | CHOICE | — | Charge categories | DISTRIBUTION,SUPPLY,CONTRACTED | Filtering | + +Below we walk through the properties specific to SC3. For standard properties like `territoryId` and `systemSize`, see the [SC1 documentation](../residential-el1/index.md#tariff-properties). + +#### `isTODCustomerBeforeMarch12014` + +```json +{ + "keyName": "isTODCustomerBeforeMarch12014", + "displayName": "Is TOD Customer before March 1, 2014", + "dataType": "BOOLEAN", + "propertyTypes": "APPLICABILITY", + "propertyValue": "false" +} +``` + +A **grandfathering flag** for customers who enrolled in TOU rates before March 1, 2014. These customers may have different terms or rate structures. The `APPLICABILITY` property type means this affects *whether* certain rates apply, not the rate values themselves. + +#### `consumption[ON_PEAK]` and `consumption[OFF_PEAK]` + +```json +{ + "keyName": "consumption", + "period": "ON_PEAK", + "displayName": "Consumption (kWh)", + "dataType": "DECIMAL", + "propertyTypes": "RATE_CRITERIA" +} +``` + +Unlike SC1's single `consumption` property, SC3 requires **two separate consumption values**: + +- `consumption[ON_PEAK]`: kWh consumed during 8am–midnight +- `consumption[OFF_PEAK]`: kWh consumed during midnight–8am + +This split is necessary because different rates apply to each period. If you're using the Calculate API, you must provide both values. If you only have total consumption, you'll need to allocate it across periods based on assumed or actual load profiles. + +#### `electricVehiclePresent` + +```json +{ + "keyName": "electricVehiclePresent", + "displayName": "Has Electric Vehicle", + "dataType": "BOOLEAN", + "propertyTypes": "RATE_CRITERIA", + "propertyValue": "false" +} +``` + +Indicates whether the customer has an electric vehicle. This affects which `rateBand` applies for the Customer Charge (though currently both EV and non-EV customers pay $20/month, the structure allows for differentiation). + +--- + +## How to Get Variable Rate Values + +Same approach as SC1. See **[Variable Rates API Guide](../variable-rates-api.md)** for detailed examples. + +**Key difference**: When using the Calculate API, you must provide: + +- `consumption[ON_PEAK]` — kWh during on-peak hours +- `consumption[OFF_PEAK]` — kWh during off-peak hours + +--- + +## Summary: What Makes SC3 Different + +1. **TOU rates**: Charges vary by time of day (on-peak vs. off-peak) +2. **No tiering**: Unlike SC1, no consumption tiers—same rate for all kWh within a TOU period +3. **Split consumption input**: Must provide ON_PEAK and OFF_PEAK usage separately +4. **Strong off-peak incentive**: Off-peak is ~14x cheaper than summer on-peak +5. **Same schedule all week**: No weekday/weekend distinction +6. **Opt-in**: Customers must actively choose this rate (ALTERNATIVE tariff type) +7. **Best for load shifters**: EV owners, battery storage, flexible schedules diff --git a/docs/wiki/utilities/coned/residential-el1/index.md b/docs/wiki/utilities/coned/residential-el1/index.md new file mode 100644 index 0000000..fc7c95d --- /dev/null +++ b/docs/wiki/utilities/coned/residential-el1/index.md @@ -0,0 +1,954 @@ +# ConEd Residential (SC1/EL1) — Field Guide + +> ⚠️ **Disclaimer**: This guide was generated by an LLM (Claude Opus 4.5) based on the tariff JSON plus the model's background knowledge of utility rate structures. The content looks reasonable but **has not been verified by domain experts**. Please verify any claims before relying on them for business or regulatory purposes. + +> **Data Source**: This guide covers tariff data from the [Arcadia Signal API](https://docs.arcadia.com/v2022-12-21-Signal/reference/tariff) (formerly Genability). The JSON structure, field names, and lookup mechanisms described here are specific to Arcadia's tariff data model. The [full JSON output is included below](#full-tariff-json) for reference. + +**Master Tariff ID**: 809 +**Tariff Code**: EL1 +**Tariff Name**: Residential and Religious +**Customer Class**: Residential +**Customer Count**: ~3 million + +## Overview + +EL1 is **ConEd's default residential rate**—the tariff that applies to most homes and apartments in New York City and Westchester County. With approximately 3 million customers, it's one of the largest residential tariffs in the United States by customer count. + +This is a standard, non-time-of-use rate. Customers are charged the same per-kWh delivery rate regardless of when they consume electricity (though rates do vary by season). ConEd also offers optional time-of-use rates for residential customers who want to shift usage to off-peak hours, but EL1 remains the default for customers who don't opt into an alternative. + +The "Religious" in the tariff name refers to houses of worship, which are eligible for this rate alongside residential customers. + +--- + +## Quick Reference: All Charges + +| Rate Group | Rate Name | Charge Type | Charge Class | Zone | Season | Tiered | Rate Value | +|------------|-----------|-------------|--------------|:----:|:------:|:------:|------------| +| Basic Service Charge | Customer Charge | FIXED_PRICE | DISTRIBUTION | ❌ | ❌ | ❌ | $20.00/mo | +| Basic Service Charge | Billing and Payment Processing | FIXED_PRICE | DISTRIBUTION | ❌ | ❌ | ❌ | $1.28/mo | +| Delivery Charges | Delivery Revenue Surcharge | CONSUMPTION_BASED | DISTRIBUTION | ❌ | ❌ | ❌ | *Lookup* | +| Delivery Charges | Reconciliation Rate | CONSUMPTION_BASED | DISTRIBUTION | ❌ | ❌ | ❌ | *Lookup* | +| Delivery Charges | Transition Adjustment | CONSUMPTION_BASED | DISTRIBUTION | ❌ | ❌ | ❌ | *Lookup* | +| Delivery Charges | Uncollectible Bill Expense | CONSUMPTION_BASED | DISTRIBUTION | ❌ | ❌ | ❌ | *Lookup* | +| Delivery Charges | Monthly Adjustment Clause | CONSUMPTION_BASED | DISTRIBUTION | ❌ | ❌ | ❌ | *Lookup* | +| Delivery Charges | Revenue Decoupling Mechanism | CONSUMPTION_BASED | DISTRIBUTION | ❌ | ❌ | ❌ | *Lookup* | +| Delivery Charges | Clean Energy Standard (Delivery) | CONSUMPTION_BASED | DISTRIBUTION | ❌ | ❌ | ❌ | *Lookup* | +| Delivery Charges | Summer Rate | CONSUMPTION_BASED | DISTRIBUTION | ✅ | ✅ | ✅ | ≤250: $0.16107, >250: $0.18518 | +| Delivery Charges | Winter Rate | CONSUMPTION_BASED | DISTRIBUTION | ✅ | ✅ | ✅ | ≤250: $0.16107, >250: $0.16107 | +| Merchant Function | Merchant Function Charge | CONSUMPTION_BASED | SUPPLY,CONTRACTED | ❌ | ❌ | ❌ | *Lookup* | +| Supply Charges | MSC Rate | CONSUMPTION_BASED | SUPPLY,CONTRACTED | ✅ | ❌ | ❌ | *Lookup* | +| Supply Charges | MSC I Adjustment | CONSUMPTION_BASED | SUPPLY,CONTRACTED | ✅ | ❌ | ❌ | *Lookup* | +| Supply Charges | MSC II Adjustment | CONSUMPTION_BASED | SUPPLY,CONTRACTED | ❌ | ❌ | ❌ | *Lookup* | +| Supply Charges | Clean Energy Standard (Supply) | CONSUMPTION_BASED | SUPPLY,CONTRACTED | ❌ | ❌ | ❌ | *Lookup* | +| SBC Charges | System Benefits Charge | CONSUMPTION_BASED | DISTRIBUTION | ❌ | ❌ | ❌ | *Lookup* | +| NY State Surcharge | New York State Surcharge | CONSUMPTION_BASED | DISTRIBUTION | ❌ | ❌ | ❌ | *Lookup* | +| Minimum Charge | Minimum Charge | MINIMUM | — | ❌ | ❌ | ❌ | $20.00/mo | +| Rider: Tax Sur-Credit | Tax Sur-Credit | CONSUMPTION_BASED | — | ❌ | ❌ | ❌ | *Lookup* | +| Rider: DLM | Dynamic Load Management | CONSUMPTION_BASED | — | ❌ | ❌ | ❌ | *Lookup* | +| Rider: CBC | Customer Benefit Contribution | QUANTITY | — | ❌ | ❌ | ❌ | $1.84/kW | +| Rider: EV Make Ready | EV Make Ready Surcharge | CONSUMPTION_BASED | DISTRIBUTION | ❌ | ❌ | ❌ | $0.0008/kWh | +| Rider: Arrears Mgmt | Arrears Management Recovery | CONSUMPTION_BASED | DISTRIBUTION | ❌ | ❌ | ❌ | $0.0012/kWh | +| Rider: GRT | GRT Distribution | QUANTITY | TRANS,DISTRIBUTION | ✅ | ❌ | ❌ | H: 3.33%, I: 5.51%, J: 4.79% | +| Rider: GRT | GRT Supply | QUANTITY | SUPPLY | ✅ | ❌ | ❌ | H: 1.01%, I: 3.09%, J: 2.41% | +| Rider: VDER | VDER Cost Recovery | CONSUMPTION_BASED | — | ❌ | ❌ | ❌ | $0.0011/kWh | + +--- + +## Charge-by-Charge Breakdown + +### Basic Service Charges + +#### Customer Charge — $20.00/month + +A flat monthly fee that covers the cost of having an account: metering, billing systems, customer service. Everyone pays this regardless of usage. + +#### Billing and Payment Processing Charge — $1.28/month + +Covers the cost of generating and mailing bills, processing payments. Added in recent years as utilities unbundled these costs. + +--- + +### Delivery Charges + +These are charges for using ConEd's distribution network (wires, poles, transformers). They're regulated by the NY PSC. + +#### Core Delivery Rate + +**Summer/Winter Rate — $0.16107–$0.18518/kWh** + +The main volumetric delivery charge. Tiered at 250 kWh: + +- **Tier 1 (≤250 kWh)**: $0.16107/kWh (both seasons) +- **Tier 2 (>250 kWh)**: $0.18518/kWh (summer only; winter stays at $0.16107) + +The tier structure incentivizes conservation. Summer Tier 2 is higher because peak summer demand strains the grid. This rate is set during rate cases and stays fixed for 1-3 years. + +#### Delivery Adjustments + +> **📘 Deep Dive**: These adjustments involve regulatory mechanisms, time lags, and reconciliation math. For a complete explanation with step-by-step examples, see **[Delivery Adjustments Guide](../delivery-adjustments.md)**. + +**Monthly Adjustment Clause (MAC)** — *Variable* +Umbrella adjustment that captures various delivery cost true-ups: property taxes, storm costs, pension expenses. Changes monthly based on actual vs. forecasted costs. + +**Revenue Decoupling Mechanism (RDM) Adjustment** — *Variable* +Part of NY's decoupling policy: ConEd's revenue is "decoupled" from sales volume. If customers use less than expected, this adjusts upward (and vice versa). Removes utility incentive to discourage conservation. Typically reconciled annually. + +**Delivery Revenue Surcharge** — *Variable* +A supplemental revenue adjustment for specific shortfalls or PSC-ordered changes outside the normal MAC/RDM mechanisms. + +**Clean Energy Standard Delivery Surcharge** — *Variable* +Recovers ConEd's costs for grid infrastructure needed to comply with NY's Clean Energy Standard (distribution upgrades, DER integration). + +**Reconciliation Rate** — *Variable* +True-ups for deferred costs from NY's 1990s electricity restructuring. Legacy item, typically small. + +**Transition Adjustment** — *Variable* +More legacy costs from deregulation-era restructuring. Typically minimal now. + +**Uncollectible Bill Expense** — *Variable* +Recovers costs from customers who don't pay their bills. Spiked during COVID; now returning to normal levels. + +--- + +### Supply Charges + +These are charges for the electricity commodity itself. Only apply if you use ConEd as your supplier (not an ESCO). All are variable rates requiring the Lookups API. + +#### Core Supply Rate + +**MSC Rate (Market Supply Charge)** — *Variable, by zone* + +The base cost of electricity. ConEd forecasts this monthly based on expected wholesale prices from NYISO. Zone-specific because NYISO prices differ by location (H, I, J). + +**Merchant Function Charge** — *Variable* +Covers ConEd's costs to administer supply service: procurement staff, risk management, billing systems. Only applies to default service customers (not ESCO customers). + +#### Supply Adjustments + +> **📘 Deep Dive**: Supply adjustments involve NYISO settlement, load-weighted averaging, and 2-3 month reconciliation lags. For a complete explanation with step-by-step examples, see **[Supply Charges Guide](../supply-charges.md)**. + +**MSC I Adjustment** — *Variable, by zone* +Reconciles actual **energy costs** vs. what was billed via the forecasted MSC. Applied with a 2-3 month lag after NYISO settlement finalizes. Zone-specific because wholesale energy prices differ by location. + +**MSC II Adjustment** — *Variable* +Reconciles **capacity costs, ancillary services, and working capital**. Not zone-specific—averaged across ConEd's territory. + +**Clean Energy Standard Supply Surcharge** — *Variable* +Recovers the cost of Renewable Energy Credits (RECs), Zero Emission Credits (ZECs), and other clean energy compliance costs on the supply side. + +--- + +### System Benefits Charge + +#### System Benefits Charge (SBC) — *Variable* + +Funds NY's clean energy programs administered by NYSERDA: energy efficiency rebates, low-income assistance, renewable energy research. Set by the PSC; all customers pay. + +--- + +### NY State Surcharge + +#### New York State Surcharge — *Variable* + +A temporary surcharge authorized by the NY PSC. Often used for policy initiatives or one-time cost recovery. + +--- + +### Minimum Charge + +#### Minimum Charge — $20.00/month + +If your total bill (before taxes) is less than $20, you pay $20 anyway. Ensures ConEd recovers basic service costs from very-low-usage customers. + +--- + +### Rider Charges + +Riders are add-on tariff components that apply to multiple base tariffs. They're modular—ConEd can update them without revising every tariff. + +> **📘 Deep Dive**: Each rider has its own origin story, policy rationale, and calculation method. For detailed explanations including how VDER and CBC work together for solar, why all customers pay for EV infrastructure, and the COVID arrears recovery program, see **[Riders Guide](../riders.md)**. + +#### Tax Sur-Credit — *Variable* + +Adjusts for differences between tax costs embedded in rates vs. actual taxes paid. Can be positive (surcharge) or negative (credit). Related to federal tax reform and property tax changes. + +#### Dynamic Load Management (DLM) Surcharge — *Variable* + +Recovers costs for ConEd's demand response programs: paying customers and batteries to reduce load during peak periods. Part of NY's grid modernization efforts. + +#### Customer Benefit Contribution (CBC) — $1.84/kW of solar system size + +**Only applies to customers with solar panels.** A monthly fee based on your solar system's nameplate capacity (kW). Created as part of NY's Value of Distributed Energy Resources (VDER) reforms to ensure solar customers contribute to grid costs. If you don't have solar (`systemSize = 0`), this is $0. + +#### Electric Vehicle Make Ready Surcharge — $0.0008/kWh + +Recovers ConEd's costs for EV charging infrastructure: installing "make-ready" infrastructure (conduit, wiring) to support public and fleet charging stations. All customers pay a tiny amount per kWh. + +#### Arrears Management Program Recovery Surcharge — $0.0012/kWh + +Recovers costs from ConEd's COVID-era arrears forgiveness program. During the pandemic, many customers fell behind; this surcharge spreads the cost of debt forgiveness across all ratepayers. + +#### Gross Receipts Tax (GRT) — Varies by zone + +New York municipalities levy a Gross Receipts Tax on utilities. Applied as a percentage of your charges, split into Distribution and Supply components: + +| Zone | GRT Distribution | GRT Supply | +|------|------------------|------------| +| H (Upper Westchester) | 3.3322% | 1.0101% | +| I (Lower Westchester) | 5.5127% | 3.0928% | +| J (NYC) | 4.7940% | 2.4066% | + +Different municipalities have different tax rates, so this varies by zone. + +#### Value of Distributed Energy Resources (VDER) Cost Recovery — $0.0011/kWh + +Recovers costs ConEd pays to solar generators under NY's VDER/Value Stack tariff. When solar systems export power, ConEd compensates them based on time-varying values; this surcharge recovers those costs from all ratepayers. + +--- + +## Example Bill Calculation + +A Zone J customer in July (Summer) using 500 kWh: + +### Delivery Charges + +| Charge | Calculation | Amount | +|--------|-------------|--------| +| Customer Charge | $20.00 | $20.00 | +| Billing & Payment | $1.28 | $1.28 | +| Summer Rate Tier 1 | 250 kWh × $0.16107 | $40.27 | +| Summer Rate Tier 2 | 250 kWh × $0.18518 | $46.30 | +| Delivery Adjustments | 500 kWh × ~$0.02 (varies) | ~$10.00 | +| **Subtotal Delivery** | | **~$117.85** | + +### Supply Charges + +| Charge | Calculation | Amount | +|--------|-------------|--------| +| MSC Rate (Zone J) | 500 kWh × ~$0.08 (varies) | ~$40.00 | +| MSC I/II Adjustments | 500 kWh × ~$0.005 | ~$2.50 | +| CES Supply | 500 kWh × ~$0.003 | ~$1.50 | +| Merchant Function | 500 kWh × ~$0.001 | ~$0.50 | +| **Subtotal Supply** | | **~$44.50** | + +### Riders & Taxes + +| Charge | Calculation | Amount | +|--------|-------------|--------| +| Tax Sur-Credit | 500 kWh × ~$0.001 | ~$0.50 | +| DLM Surcharge | 500 kWh × ~$0.001 | ~$0.50 | +| EV Make Ready | 500 kWh × $0.0008 | $0.40 | +| Arrears Management | 500 kWh × $0.0012 | $0.60 | +| VDER Cost Recovery | 500 kWh × $0.0011 | $0.55 | +| SBC + NY Surcharge | 500 kWh × ~$0.005 | ~$2.50 | +| GRT Distribution | ~$118 × 4.794% | ~$5.66 | +| GRT Supply | ~$45 × 2.4066% | ~$1.08 | +| **Subtotal Riders** | | **~$11.79** | + +### Total + +**~$174.14** for 500 kWh in summer (Zone J) + +### Breakdown by Category + +| Category | Amount | % of Bill | +|----------|--------|-----------| +| Fixed Charges | $21.28 | 12% | +| Delivery (Volumetric) | ~$96.57 | 55% | +| Supply | ~$44.50 | 26% | +| Riders & Taxes | ~$11.79 | 7% | + +**Key insight**: Delivery charges make up the majority of the bill. The tiered structure means the second 250 kWh costs more than the first—incentivizing conservation. + +--- + +## Full Tariff JSON + +The complete tariff JSON response from the Arcadia Signal API is included below for reference. For an introduction to the tariff JSON structure (hierarchy, properties, rates, rate bands), see **[Understanding Arcadia Tariff JSON](../../../../providers/arcadia/tariff-json-structure.md)**. For complete field definitions, see the [Arcadia Tariff API Reference](https://docs.arcadia.com/v2022-12-21-Signal/reference/gettariff). + +
+Click to expand full JSON (~2000 lines) + +```json +[ + { + "tariffId": 3491277, + "masterTariffId": 809, + "tariffCode": "EL1", + "tariffName": "Residential and Religious", + "tariffBookName": "Residential and Religious", + "lseId": 2252, + "lseName": "Consolidated Edison Co-NY Inc", + "lseCode": "ConEd", + "serviceType": "ELECTRICITY", + "priorTariffId": 3465591, + "tariffType": "DEFAULT", + "customerClass": "RESIDENTIAL", + "privacy": "PUBLIC", + "customerCount": 3024550, + "customerLikelihood": 100.0, + "customerCountSource": "FERC Form 1", + "territoryId": 2533, + "effectiveDate": "2025-01-01", + "endDate": null, + "closedDate": null, + "effectiveOnRule": "TARIFF_EFFECTIVE_DATE", + "timeZone": "US/Eastern", + "billingPeriod": "MONTHLY", + "currency": "USD", + "chargeTypes": "FIXED_PRICE,CONSUMPTION_BASED,QUANTITY,MINIMUM", + "chargePeriod": "MONTHLY", + "minMonthlyConsumption": null, + "maxMonthlyConsumption": null, + "minMonthlyDemand": null, + "maxMonthlyDemand": null, + "hasTimeOfUseRates": false, + "hasTieredRates": true, + "hasContractedRates": true, + "hasTariffApplicability": false, + "hasRateApplicability": false, + "hasNetMetering": true, + "isActive": true, + "properties": [ + { + "keyName": "consumption", + "quantityKey": null, + "displayName": "Consumption (kWh)", + "family": "load", + "keyspace": "electricity", + "description": "Quantity in kWh of load that is used for a period of time", + "dataType": "DECIMAL", + "propertyTypes": "RATE_CRITERIA", + "operator": null, + "isDefault": false + }, + { + "keyName": "systemSize", + "quantityKey": null, + "displayName": "System Size", + "family": "system", + "keyspace": "solarPV", + "description": "Nameplate capacity (kW).", + "dataType": "DECIMAL", + "propertyTypes": "RATE_CRITERIA", + "operator": "=", + "propertyValue": "0", + "quantityUnit": "kW", + "isDefault": true + }, + { + "keyName": "territoryId", + "quantityKey": null, + "displayName": "Territory", + "family": "billing", + "keyspace": "electricity", + "description": "Rate Baseline Region", + "dataType": "CHOICE", + "propertyTypes": "RATE_CRITERIA", + "operator": null, + "choices": [ + { "displayValue": "Zone H", "value": "3632", "dataValue": "3632", "likelihood": null }, + { "displayValue": "Zone I", "value": "3633", "dataValue": "3633", "likelihood": null }, + { "displayValue": "Zone J", "value": "3634", "dataValue": "3634", "likelihood": null } + ], + "quantityUnit": "", + "isDefault": true + }, + { + "keyName": "chargeClass", + "quantityKey": null, + "displayName": "Charge Class Type", + "family": "service", + "keyspace": "electricity", + "description": "The tariff has rates with the following charge class.", + "dataType": "CHOICE", + "propertyTypes": "SERVICE_TERMS", + "operator": "=", + "propertyValue": "DISTRIBUTION,SUPPLY,CONTRACTED", + "choices": [ + { "displayValue": "Transmission", "value": "1", "dataValue": "1", "likelihood": null }, + { "displayValue": "Distribution", "value": "2", "dataValue": "2", "likelihood": null }, + { "displayValue": "Supply", "value": "4", "dataValue": "4", "likelihood": null }, + { "displayValue": "Tax", "value": "8", "dataValue": "8", "likelihood": null }, + { "displayValue": "Other", "value": "16", "dataValue": "16", "likelihood": null }, + { "displayValue": "Contracted", "value": "32", "dataValue": "32", "likelihood": null } + ], + "isDefault": false + } + ], + "rates": [ + { + "tariffRateId": 20389545, + "masterTariffRateId": 18246979, + "tariffId": 3491277, + "tariffSequenceNumber": 2, + "tariffBookSequenceNumber": 2, + "rateGroupName": "Basic Service Charge", + "tariffBookRateGroupName": "Basic Service Charge", + "rateName": "Customer Charge", + "tariffBookRateName": "Customer Charge", + "fromDateTime": "2025-01-01T00:00:00-05:00", + "toDateTime": null, + "chargeType": "FIXED_PRICE", + "chargeClass": "DISTRIBUTION", + "chargePeriod": "MONTHLY", + "transactionType": "BUY", + "variableFactorKey": "billingPeriodProrationFactor", + "rateBands": [ + { + "tariffRateBandId": 15213465, + "tariffRateId": 20389545, + "rateSequenceNumber": 1, + "hasConsumptionLimit": false, + "hasDemandLimit": false, + "hasPropertyLimit": false, + "rateAmount": 20.0, + "rateUnit": "COST_PER_UNIT", + "isCredit": false, + "prevUpperLimit": null + } + ], + "hasApplicabilityFormula": false + }, + { + "tariffRateId": 20389546, + "masterTariffRateId": 17033348, + "tariffId": 3491277, + "tariffSequenceNumber": 2, + "tariffBookSequenceNumber": 3, + "rateGroupName": "Basic Service Charge", + "tariffBookRateGroupName": "Basic Service Charge", + "rateName": "Billing and Payment Processing Charge", + "tariffBookRateName": "Billing and Payment Processing Charge", + "fromDateTime": "2025-01-01T00:00:00-05:00", + "toDateTime": null, + "chargeType": "FIXED_PRICE", + "chargeClass": "DISTRIBUTION", + "chargePeriod": "MONTHLY", + "transactionType": "BUY", + "rateBands": [ + { + "tariffRateBandId": 15213466, + "tariffRateId": 20389546, + "rateSequenceNumber": 1, + "hasConsumptionLimit": false, + "hasDemandLimit": false, + "hasPropertyLimit": false, + "rateAmount": 1.28, + "rateUnit": "COST_PER_UNIT", + "isCredit": false, + "prevUpperLimit": null + } + ], + "hasApplicabilityFormula": false + }, + { + "tariffRateId": 20389547, + "masterTariffRateId": 17275990, + "tariffId": 3491277, + "tariffSequenceNumber": 3, + "tariffBookSequenceNumber": 1, + "rateGroupName": "Delivery Charges", + "tariffBookRateGroupName": "Delivery Charges", + "rateName": "Delivery Revenue Surcharge", + "tariffBookRateName": "Delivery Revenue Surcharge", + "fromDateTime": "2025-01-01T00:00:00-05:00", + "toDateTime": null, + "chargeType": "CONSUMPTION_BASED", + "chargeClass": "DISTRIBUTION", + "chargePeriod": "MONTHLY", + "transactionType": "NET", + "variableRateKey": "DeliveryRevenueSurchargeSc1", + "rateBands": [ + { + "tariffRateBandId": 15213467, + "tariffRateId": 20389547, + "rateSequenceNumber": 1, + "hasConsumptionLimit": false, + "hasDemandLimit": false, + "hasPropertyLimit": false, + "rateAmount": 0.0, + "rateUnit": "COST_PER_UNIT", + "isCredit": false, + "prevUpperLimit": null + } + ], + "hasApplicabilityFormula": false + }, + { + "tariffRateId": 20389554, + "masterTariffRateId": 16981863, + "tariffId": 3491277, + "tariffSequenceNumber": 3, + "tariffBookSequenceNumber": 8, + "rateGroupName": "Delivery Charges", + "tariffBookRateGroupName": "Delivery Charges", + "rateName": "Summer Rate", + "tariffBookRateName": "Energy Rate - Summer - Territory H", + "fromDateTime": "2025-01-01T00:00:00-05:00", + "toDateTime": null, + "territory": { + "territoryId": 3632, + "territoryName": "Zone H", + "lseId": 2252, + "lseName": "Consolidated Edison Co-NY Inc", + "parentTerritoryId": 2533, + "usageType": "TARIFF", + "itemTypes": "ZIPCODE", + "deregRes": false, + "deregCandi": false, + "centerPoint": { "latitude": 41.24471966666667, "longitude": -73.81995450000002 }, + "countryCode": "US" + }, + "season": { + "seasonId": 213, + "lseId": 2252, + "seasonGroupId": 1, + "seasonName": "Summer", + "seasonFromMonth": 6, + "seasonFromDay": 1, + "fromEdgePredominance": "PREDOMINANT", + "seasonToMonth": 9, + "seasonToDay": 30, + "toEdgePredominance": "SUBSERVIENT" + }, + "chargeType": "CONSUMPTION_BASED", + "chargeClass": "DISTRIBUTION", + "chargePeriod": "MONTHLY", + "transactionType": "NET", + "rateBands": [ + { + "tariffRateBandId": 15213474, + "tariffRateId": 20389554, + "rateSequenceNumber": 1, + "hasConsumptionLimit": true, + "consumptionUpperLimit": 250.0, + "hasDemandLimit": false, + "hasPropertyLimit": false, + "rateAmount": 0.16107, + "rateUnit": "COST_PER_UNIT", + "isCredit": false, + "prevUpperLimit": null + }, + { + "tariffRateBandId": 15213475, + "tariffRateId": 20389554, + "rateSequenceNumber": 2, + "hasConsumptionLimit": true, + "hasDemandLimit": false, + "hasPropertyLimit": false, + "rateAmount": 0.18518, + "rateUnit": "COST_PER_UNIT", + "isCredit": false, + "prevUpperLimit": null + } + ], + "hasApplicabilityFormula": false + }, + { + "tariffRateId": 20389563, + "masterTariffRateId": 17033332, + "tariffId": 3491277, + "tariffSequenceNumber": 5, + "tariffBookSequenceNumber": 3, + "rateGroupName": "Supply Charges", + "tariffBookRateGroupName": "Supply Charges", + "rateName": "MSC Rate - Zone J", + "tariffBookRateName": "MSC Rate - Zone J", + "fromDateTime": "2025-01-01T00:00:00-05:00", + "toDateTime": null, + "territory": { + "territoryId": 3634, + "territoryName": "Zone J", + "lseId": 2252, + "lseName": "Consolidated Edison Co-NY Inc", + "parentTerritoryId": 2533, + "usageType": "TARIFF", + "itemTypes": "ZIPCODE", + "deregRes": false, + "deregCandi": false, + "centerPoint": { "latitude": 40.72388634472048, "longitude": -73.93697824534158 }, + "countryCode": "US" + }, + "chargeType": "CONSUMPTION_BASED", + "chargeClass": "SUPPLY,CONTRACTED", + "chargePeriod": "MONTHLY", + "transactionType": "NET", + "variableRateKey": "marketSupplyChargeResidentialZoneJ", + "rateBands": [ + { + "tariffRateBandId": 15213489, + "tariffRateId": 20389563, + "rateSequenceNumber": 1, + "hasConsumptionLimit": false, + "hasDemandLimit": false, + "hasPropertyLimit": false, + "rateAmount": 0.0, + "rateUnit": "COST_PER_UNIT", + "isCredit": false, + "prevUpperLimit": null + } + ], + "hasApplicabilityFormula": false + }, + { + "tariffRateId": 20389577, + "masterTariffRateId": 19244387, + "tariffId": 3491277, + "riderId": 3399165, + "tariffSequenceNumber": 11, + "tariffBookSequenceNumber": 1, + "rateGroupName": "CBC Rider", + "tariffBookRateGroupName": "CBC Rider", + "rateName": "CBC Rider", + "tariffBookRateName": "CBC Rider", + "fromDateTime": "2025-01-01T00:00:00-05:00", + "toDateTime": null, + "chargeType": null, + "chargePeriod": "MONTHLY", + "transactionType": "BUY", + "rateBands": [], + "hasApplicabilityFormula": false + }, + { + "tariffRateId": 20443074, + "masterTariffRateId": 19242493, + "tariffId": 3491277, + "riderTariffId": 3495063, + "tariffSequenceNumber": 11, + "tariffBookSequenceNumber": 2, + "rateGroupName": "Customer Benefit Contribution", + "tariffBookRateGroupName": "Customer Benefit Contribution", + "rateName": "Customer Benefit Contribution", + "tariffBookRateName": "Customer Benefit Contribution", + "fromDateTime": "2025-01-01T00:00:00-05:00", + "toDateTime": null, + "chargeType": "QUANTITY", + "chargePeriod": "MONTHLY", + "transactionType": "BUY", + "quantityKey": "systemSize", + "rateBands": [ + { + "tariffRateBandId": 15291918, + "tariffRateId": 20443074, + "rateSequenceNumber": 1, + "hasConsumptionLimit": false, + "hasDemandLimit": false, + "hasPropertyLimit": false, + "rateAmount": 1.84, + "rateUnit": "COST_PER_UNIT", + "isCredit": false, + "prevUpperLimit": null + } + ], + "hasApplicabilityFormula": false + }, + { + "tariffRateId": 20669930, + "masterTariffRateId": 20669924, + "tariffId": 3491277, + "riderTariffId": 3516477, + "tariffSequenceNumber": 14, + "tariffBookSequenceNumber": 2, + "rateGroupName": "GRT Charges", + "tariffBookRateGroupName": "GRT Charges", + "rateName": "GRT Distribution - Zone J", + "tariffBookRateName": "GRT Distribution - Zone J", + "fromDateTime": "2025-01-01T00:00:00-05:00", + "toDateTime": null, + "territory": { + "territoryId": 3634, + "territoryName": "Zone J", + "lseId": 2252, + "lseName": "Consolidated Edison Co-NY Inc", + "parentTerritoryId": 2533, + "usageType": "TARIFF", + "itemTypes": "ZIPCODE", + "deregRes": false, + "deregCandi": false, + "centerPoint": { "latitude": 40.72388634472048, "longitude": -73.93697824534158 }, + "countryCode": "US" + }, + "chargeType": "QUANTITY", + "chargeClass": "TRANSMISSION,DISTRIBUTION", + "chargePeriod": "MONTHLY", + "transactionType": "BUY", + "rateBands": [ + { + "tariffRateBandId": 15595394, + "tariffRateId": 20669930, + "rateSequenceNumber": 1, + "hasConsumptionLimit": false, + "hasDemandLimit": false, + "hasPropertyLimit": false, + "rateAmount": 4.794, + "rateUnit": "PERCENTAGE", + "isCredit": false, + "prevUpperLimit": null + } + ], + "hasApplicabilityFormula": false + } + ] + } +] +``` + +*Note: The JSON above is a representative excerpt showing key rate structures. Some rates have been omitted for brevity. The actual tariff contains ~50 rate entries including all zone/season variations.* + +
+ +--- + +## Understanding the JSON + +### Key Fields + +| Field | What It Means | +|-------|---------------| +| `chargeType` | How the charge is calculated (see below) | +| `chargeClass` | Category: DISTRIBUTION, SUPPLY, TRANSMISSION, TAX | +| `rateAmount` | The rate value (may be 0.0 if variable) | +| `variableRateKey` | If present, use Lookups API to get actual value | +| `territory` | If present, rate varies by zone (H, I, or J) | +| `season` | If present, rate varies by season (Summer/Winter) | +| `rateBands` | Array of tiers (if multiple, rate is tiered) | + +### Charge Types + +| chargeType | Meaning | Unit | +|------------|---------|------| +| `FIXED_PRICE` | Flat monthly fee | $/month | +| `CONSUMPTION_BASED` | Per-kWh charge | $/kWh | +| `QUANTITY` | Based on a property value | Varies ($/kW, %) | +| `MINIMUM` | Floor on total bill | $/month | + +### Fixed vs. Variable Rates + +**Fixed rates** have the value directly in `rateAmount`: + +```json +{ + "rateName": "Customer Charge", + "rateAmount": 20.0 +} +``` + +**Variable rates** show `rateAmount: 0.0` and have a `variableRateKey`: + +```json +{ + "rateName": "MSC Rate - Zone J", + "rateAmount": 0.0, + "variableRateKey": "marketSupplyChargeResidentialZoneJ" +} +``` + +### Tiered Rates + +Tiered rates have multiple `rateBands` with consumption limits: + +```json +{ + "rateName": "Summer Rate", + "rateBands": [ + { "rateSequenceNumber": 1, "consumptionUpperLimit": 250.0, "rateAmount": 0.16107 }, + { "rateSequenceNumber": 2, "rateAmount": 0.18518 } + ] +} +``` + +### Zone-Specific Rates + +Rates that vary by zone have a `territory` object: + +```json +{ + "rateName": "Summer Rate", + "territory": { + "territoryId": 3634, + "territoryName": "Zone J" + } +} +``` + +The three zones: + +| territoryId | Zone | Area | +|-------------|------|------| +| 3632 | H | Upper Westchester | +| 3633 | I | Lower Westchester | +| 3634 | J | New York City | + +### Seasonal Rates + +Rates that vary by season have a `season` object: + +```json +{ + "rateName": "Summer Rate", + "season": { + "seasonName": "Summer", + "seasonFromMonth": 6, "seasonFromDay": 1, + "seasonToMonth": 9, "seasonToDay": 30 + } +} +``` + +| Season | Months | +|--------|--------| +| Summer | June 1 – September 30 | +| Winter | October 1 – May 31 | + +### Tariff Properties + +The `properties` array tells you what inputs are needed to calculate bills for this tariff. SC1 is relatively simple—it only requires four properties. + +| Property | Type | Description | Default | Used For | +|----------|------|-------------|---------|----------| +| `consumption` | DECIMAL | Energy usage in kWh | — | All consumption-based charges | +| `systemSize` | DECIMAL | Solar system capacity in kW | 0 | CBC rider (solar customers only) | +| `territoryId` | CHOICE | Service zone (H, I, or J) | — | Zone-specific rates (MSC, GRT, delivery) | +| `chargeClass` | CHOICE | Charge categories to include | DISTRIBUTION,SUPPLY,CONTRACTED | Filtering rates by category | + +#### `consumption` + +```json +{ + "keyName": "consumption", + "displayName": "Consumption (kWh)", + "family": "load", + "keyspace": "electricity", + "dataType": "DECIMAL", + "propertyTypes": "RATE_CRITERIA", + "isDefault": false +} +``` + +The fundamental input for billing—how much electricity (kWh) the customer used. Required for all `CONSUMPTION_BASED` charges. No default value; you must provide it. + +#### `systemSize` + +```json +{ + "keyName": "systemSize", + "displayName": "System Size", + "family": "system", + "keyspace": "solarPV", + "dataType": "DECIMAL", + "propertyTypes": "RATE_CRITERIA", + "operator": "=", + "propertyValue": "0", + "quantityUnit": "kW", + "isDefault": true +} +``` + +The nameplate capacity of a customer's solar PV system. **Defaults to 0** (no solar). Only affects the Customer Benefit Contribution (CBC) rider, which charges $1.84/kW/month. If you're modeling a non-solar customer, you can omit this or leave it at 0. + +#### `territoryId` + +```json +{ + "keyName": "territoryId", + "displayName": "Territory", + "family": "billing", + "keyspace": "electricity", + "dataType": "CHOICE", + "propertyTypes": "RATE_CRITERIA", + "choices": [ + { "displayValue": "Zone H", "value": "3632" }, + { "displayValue": "Zone I", "value": "3633" }, + { "displayValue": "Zone J", "value": "3634" } + ] +} +``` + +Selects which NYISO load zone the customer is in. Required for the Calculate API because several rates vary by zone: + +| Zone | `territoryId` | Area | Notes | +|------|---------------|------|-------| +| H | 3632 | Upper Westchester | Lower wholesale prices, lower GRT | +| I | 3633 | Lower Westchester | Moderate prices | +| J | 3634 | New York City | Higher prices (transmission-constrained), higher GRT | + +#### `chargeClass` + +```json +{ + "keyName": "chargeClass", + "displayName": "Charge Class Type", + "family": "service", + "keyspace": "electricity", + "dataType": "CHOICE", + "propertyTypes": "SERVICE_TERMS", + "propertyValue": "DISTRIBUTION,SUPPLY,CONTRACTED", + "choices": [ + { "displayValue": "Transmission", "value": "1" }, + { "displayValue": "Distribution", "value": "2" }, + { "displayValue": "Supply", "value": "4" }, + { "displayValue": "Tax", "value": "8" }, + { "displayValue": "Other", "value": "16" }, + { "displayValue": "Contracted", "value": "32" } + ] +} +``` + +This is a `SERVICE_TERMS` property (not `RATE_CRITERIA`), meaning it describes what charge classes are available in this tariff rather than being an input you provide. The default value shows this tariff includes DISTRIBUTION, SUPPLY, and CONTRACTED charges. + +Use this to understand what categories of charges exist. If a customer uses an ESCO (third-party supplier) instead of ConEd supply, you'd exclude SUPPLY charges from calculations. + +--- + +## How to Get Variable Rate Values + +Rates with `variableRateKey` show `rateAmount: 0.0` in the JSON. To get actual values, use Arcadia's APIs: + +| API | What It Returns | When to Use | +|-----|-----------------|-------------| +| **[Lookups API](https://docs.arcadia.com/v2022-12-21-Signal/reference/lookups)** | Raw rate values for one `variableRateKey` | Historical analysis of specific rates | +| **Calculate API** | All resolved rates + computed bill line items | Getting all rates at once | + +**Key differences**: + +- **Lookups API**: One call per `variableRateKey` — you'd need 16+ calls to get all variable rates, then combine results +- **Calculate API**: One call returns ALL rates resolved, with line-item detail showing each `rateAmount` + +> **📘 Full Guide**: For detailed examples including code for getting a full year of variable rates via both methods, see **[Variable Rates API Guide](../variable-rates-api.md)**. + +### Quick Example: Lookups API + +``` +GET /rest/public/properties/marketSupplyChargeResidentialZoneJ/lookups + ?fromDateTime=2024-01-01T00:00:00-05:00 + &toDateTime=2025-01-01T00:00:00-05:00 +``` + +Returns monthly `bestValue` entries for that one rate. + +### Quick Example: Calculate API + +```json +POST /rest/public/calculate +{ + "masterTariffId": 809, + "fromDateTime": "2024-01-01", + "toDateTime": "2024-01-31", + "territoryId": 3634, + "detailLevel": "CHARGE_TYPE_AND_TOU", + "propertyInputs": [{ "keyName": "consumption", "dataValue": 500 }] +} +``` + +Returns line items for ALL charges with resolved `rateAmount` values—even variable ones. + +--- + +## Summary: What You Need to Know + +1. **Fixed vs. Variable**: Check for `variableRateKey` — if present, `rateAmount` is a placeholder and you need the Lookups API +2. **Zone-specific**: Check for `territory` object — if present, there are separate rates for H, I, J +3. **Seasonal**: Check for `season` object — if present, Summer and Winter have different values +4. **Tiered**: Check `rateBands` array length — if >1, there are consumption tiers (check `consumptionUpperLimit`) +5. **Riders**: Rates with `riderId` are modular components that apply across tariffs +6. **Supply vs. Delivery**: `chargeClass` tells you — SUPPLY rates only apply if using ConEd for supply diff --git a/docs/wiki/utilities/coned/riders.md b/docs/wiki/utilities/coned/riders.md new file mode 100644 index 0000000..aa9cc2c --- /dev/null +++ b/docs/wiki/utilities/coned/riders.md @@ -0,0 +1,604 @@ +# ConEd Rider Charges: A Complete Explainer + +> ⚠️ **Disclaimer**: This guide was generated by an LLM (Claude Opus 4.5) based on the tariff JSON plus the model's background knowledge of NY energy policy, VDER proceedings, and utility programs. The content looks reasonable but **has not been verified by domain experts**. Please verify any claims before relying on them for business or regulatory purposes. + +## What Are Riders? + +Riders are **modular tariff components** that can be attached to multiple base tariffs. Instead of updating every residential, commercial, and industrial tariff when a new program launches, ConEd creates a single rider that applies across rate classes. + +### How Riders Appear in the JSON + +Riders have a **two-part structure** in the tariff: + +**1. Rider Reference** (placeholder with `riderId`): +```json +{ + "rateName": "CBC Rider", + "riderId": 3399165, // ← Links to rider tariff + "chargeType": null, // ← No charge info here + "rateBands": [] +} +``` + +**2. Rider Implementation** (actual rate with `riderTariffId`): +```json +{ + "rateName": "Customer Benefit Contribution", + "riderTariffId": 3495063, // ← This IS the rider + "chargeType": "QUANTITY", + "rateBands": [{ "rateAmount": 1.84, ... }] // ← Actual rate +} +``` + +**For bill calculation, use the rates with `riderTariffId`** — they have all the charge details already resolved. + +### When to Query the Rider Tariff Separately + +You typically don't need to. The main tariff includes resolved rider rates. However, you might query `GET /tariffs/{riderId}` to: +- See which other base tariffs reference this rider +- Check the rider's own effective dates or applicability rules +- Audit or document the rider structure independently + +--- + +## Overview of ConEd Riders + +| Rider | What It Funds | Who Pays | Typical Impact | +|-------|---------------|----------|----------------| +| Tax Sur-Credit | Tax over/under-collection | All customers | ±$0-2/month | +| DLM Surcharge | Demand response programs | All customers | ~$0.50/month | +| CBC | Solar customer grid costs | Solar customers only | $1.84/kW/month | +| EV Make Ready | EV charging infrastructure | All customers | ~$0.40/month | +| Arrears Management | COVID debt forgiveness | All customers | ~$0.60/month | +| GRT | Municipal gross receipts taxes | All customers | 4-9% of bill | +| VDER Cost Recovery | Solar compensation payments | All customers | ~$0.55/month | + +--- + +## Tax Sur-Credit + +### The Problem It Solves + +Utility rates include assumptions about tax costs (property taxes, federal income taxes, etc.). When actual taxes differ from what's embedded in rates, this rider trues up the difference. + +### Origin Story + +**2017: Federal Tax Reform** + +The Tax Cuts and Jobs Act of 2017 slashed the corporate tax rate from 35% to 21%. ConEd's rates had been set assuming 35%, meaning: +- Customers were overpaying for taxes ConEd no longer owed +- PSC ordered utilities to pass savings back to customers +- Tax Sur-Credit rider was created/expanded to handle this + +**Ongoing: Property Tax Fluctuations** + +Property taxes on ConEd's infrastructure (substations, poles, etc.) change annually. The rider captures variances from rate case assumptions. + +### How It Works + +``` +Tax Sur-Credit = (Taxes Embedded in Rates - Actual Taxes Paid) / kWh Sales +``` + +- **Positive value** = Surcharge (ConEd under-collected) +- **Negative value** = Credit (ConEd over-collected, you get money back) + +### Example + +``` +Rate case assumed: $500 million in taxes +Actual taxes paid: $450 million (federal rate cut) +Over-collection: $50 million + +Tax Sur-Credit = -$50 million / 40 billion kWh = -$0.00125/kWh (CREDIT) +``` + +For a 500 kWh/month customer: **-$0.63/month credit** + +### Current Status + +Post-2017, customers received significant credits. As rate cases catch up to the new tax reality, this rider trends toward zero but still captures ongoing property tax variances. + +### Variable Rate Key +```json +"variableRateKey": "taxSurCreditSC1" +``` + +--- + +## Dynamic Load Management (DLM) Surcharge + +### The Problem It Solves + +New York's grid faces growing peak demand, especially on hot summer days. Building new power plants and transmission lines is expensive and carbon-intensive. **Demand response** is cheaper: pay customers to reduce usage during peaks instead of building more infrastructure. + +### Origin Story + +**2014: Reforming the Energy Vision (REV)** + +NY launched REV to modernize the grid and integrate distributed resources. Demand response became a key pillar. + +**2018: ConEd's Brooklyn-Queens Demand Management Program** + +Rather than build a $1 billion substation in Brooklyn, ConEd invested $200 million in: +- Battery storage +- Demand response programs +- Distributed solar +- Energy efficiency + +The program proved demand-side solutions could defer infrastructure investment. + +**2019+: DLM Programs Expanded** + +ConEd now runs multiple demand response programs: +- **Commercial System Relief Program (CSRP)**: Large customers curtail during emergencies +- **Distribution Load Relief Program (DLRP)**: Targeted local relief +- **Smart AC Program**: Residential AC cycling +- **Battery storage incentives**: Behind-the-meter batteries discharge during peaks + +### What the Surcharge Funds + +| Program Component | Purpose | +|-------------------|---------| +| Customer incentive payments | Pay participants to reduce load | +| Battery dispatch payments | Compensate storage for discharging | +| Program administration | ConEd staff, technology platforms | +| Evaluation & measurement | Verify demand reductions actually occurred | + +### How It Works + +``` +DLM Surcharge = Annual DLM Program Costs / Annual kWh Sales +``` + +The surcharge is per-kWh because: +1. All customers benefit from avoided infrastructure +2. Larger users (more kWh) benefit proportionally more + +### Example: Why This Makes Economic Sense + +``` +Without DLM: +- Build new peaker plant: $300 million capital cost +- 30-year life → $10 million/year (plus fuel, O&M) +- Runs 100 hours/year during peaks +- Cost per peak kWh: Very high + +With DLM: +- Pay customers $1/kWh to reduce 100,000 kWh during peaks +- Annual cost: $100,000 +- No capital investment, no emissions +- All ratepayers share $100,000 cost +``` + +The surcharge exists because demand response creates **system-wide benefits** (lower costs, fewer emissions, more reliability) that all customers share. + +### Current Typical Value +~$0.001/kWh → ~$0.50/month for typical residential customer + +### Variable Rate Key +```json +"variableRateKey": "dynamicLoadManagementSurcharge2252SC1" +``` + +--- + +## Customer Benefit Contribution (CBC) + +### The Problem It Solves + +Solar customers use the grid differently than non-solar customers: +- They export power during the day (grid must absorb it) +- They draw power at night and cloudy times (grid must serve them) +- They still need the grid as backup (full capacity must be maintained) + +Under old net metering, solar customers avoided paying most delivery charges but still relied on the grid. This shifted costs to non-solar customers—the "cost shift" debate. + +### Origin Story + +**2017: Value of Distributed Energy Resources (VDER) Order** + +The NY PSC overhauled solar compensation: +- Replaced retail net metering with "Value Stack" compensation +- Solar exports are valued based on actual grid benefits (energy, capacity, environmental) +- Created the CBC to ensure solar customers pay for grid services they use + +**The Compromise** + +- **Solar advocates** wanted continued strong incentives +- **Utilities** wanted solar customers to pay grid costs +- **Result**: CBC charges solar customers a modest fee based on system size + +### How It Works + +``` +Monthly CBC = Solar System Size (kW) × CBC Rate ($/kW) +``` + +Current rate: **$1.84/kW/month** + +### Example + +``` +Customer with 8 kW rooftop solar system: +CBC = 8 kW × $1.84/kW = $14.72/month +``` + +### Who Pays + +**Only customers with solar** (or other distributed generation). If `systemSize = 0` in the calculation inputs, CBC = $0. + +### The Intuition + +Think of CBC as a **"grid access fee"** for solar customers: +- You're using the grid as a giant battery (export midday, import evening) +- You need grid capacity for cloudy days and nights +- The fee ensures you pay something toward that infrastructure + +### Why It's Based on System Size (kW), Not Usage (kWh) + +The grid must be sized to handle your **maximum possible export or import**, which correlates with system size: +- 4 kW system → grid must handle 4 kW flows +- 12 kW system → grid must handle 12 kW flows + +Larger systems create more grid capacity needs, hence the $/kW structure. + +### Fixed Rate (Not Variable) +Unlike most riders, CBC has a fixed rate in the tariff: +```json +"rateAmount": 1.84, +"rateUnit": "COST_PER_UNIT", +"quantityKey": "systemSize" +``` + +--- + +## Electric Vehicle Make Ready Surcharge + +### The Problem It Solves + +New York is pushing aggressive EV adoption to meet climate goals. EVs need charging infrastructure. The "make-ready" work—installing conduit, wiring, transformers, and panels up to the charger—is expensive and slows deployment. + +### Origin Story + +**2020: NY PSC EV Make-Ready Order** + +The PSC ordered utilities to fund "make-ready" infrastructure for EV charging: +- ConEd must spend ~$300 million over several years +- Covers costs up to the charger (not the charger itself) +- Targets public charging, fleet depots, and multi-family buildings + +**The Goal** + +Remove infrastructure as a barrier to EV adoption. Property owners install chargers more readily if ConEd covers the electrical upgrades. + +### What It Funds + +| Component | What ConEd Pays For | +|-----------|---------------------| +| Utility-side work | Transformer upgrades, new service drops | +| Customer-side work | Conduit, wiring, panels (to the charger location) | +| Program administration | Application processing, inspections | + +### How It Works + +``` +EV Make Ready Surcharge = Annual Program Costs / Annual kWh Sales +``` + +### Example: Why Socializing Costs Makes Sense + +``` +Individual approach: +- Property owner wants to install 10 EV chargers +- Electrical upgrades cost $150,000 +- Project abandoned—too expensive + +Make-ready approach: +- ConEd covers $150,000 in make-ready costs +- Property owner pays only for chargers (~$30,000) +- Project proceeds +- Cost spread across all ratepayers: $0.0008/kWh +- For 500 kWh customer: ~$0.40/month +- Society gets EV infrastructure, reduced emissions +``` + +### Current Rate + +**$0.0008/kWh** → ~$0.40/month for typical residential customer + +### Why All Customers Pay + +1. **Climate benefits**: Less transportation emissions benefits everyone +2. **Grid benefits**: EVs can eventually provide grid services (V2G) +3. **Economic development**: Charging infrastructure attracts businesses +4. **Precedent**: Similar to how all ratepayers funded the original electric grid + +--- + +## Arrears Management Program Recovery Surcharge + +### The Problem It Solves + +During COVID-19, millions of New Yorkers fell behind on utility bills. NY imposed a moratorium on shutoffs, and debt accumulated. When moratoriums lifted, utilities faced: +- Massive unpaid balances +- Customers who couldn't pay without hardship +- Need to maintain service while recovering costs + +### Origin Story + +**March 2020: COVID Shutoff Moratorium** + +NY banned utility disconnections during the pandemic. Customers who couldn't pay accumulated arrears. + +**2021-2022: Arrears Forgiveness Programs** + +The PSC and legislature created programs to: +- Forgive portions of low-income customer debt +- Create extended payment plans for others +- Provide state/federal funds to cover some arrears + +**The Gap** + +Even with assistance programs, utilities were left with unrecoverable debt beyond normal "uncollectible bill expense" levels. This surcharge recovers the extraordinary COVID-era shortfall. + +### What It Funds + +| Component | Description | +|-----------|-------------| +| Forgiven debt | Balances written off under hardship programs | +| State program administration | Processing assistance applications | +| Extended payment plan losses | Time value of money on payment plans | + +### How It Works + +``` +Arrears Recovery Surcharge = COVID-Era Uncollectible Amount / kWh Sales Over Recovery Period +``` + +### The Scale + +ConEd accumulated hundreds of millions in COVID-era arrears. The surcharge spreads recovery over several years to minimize bill impact. + +### Example + +``` +COVID arrears to recover: $200 million +Recovery period: 5 years → $40 million/year +Annual sales: 40 billion kWh + +Surcharge = $40 million / 40 billion kWh = $0.001/kWh +For 500 kWh customer: ~$0.50/month +``` + +### Current Rate + +**$0.0012/kWh** → ~$0.60/month for typical residential customer + +### Why It's Separate from Uncollectible Bill Expense + +The regular "Uncollectible Bill Expense" adjustment handles **normal** bad debt (typically 1-2% of bills). COVID created **extraordinary** bad debt that would distort the normal mechanism. A separate rider provides: +- Transparency (customers see it as a distinct line item) +- Time-limited recovery (will eventually sunset) +- Regulatory accountability (PSC monitors specifically) + +--- + +## Gross Receipts Tax (GRT) + +### The Problem It Solves + +New York municipalities levy taxes on utilities based on their gross receipts (revenue). These taxes fund local government services. The GRT rider passes these taxes through to customers transparently. + +### Origin Story + +**Long-standing municipal tax authority** + +NY municipalities have taxed utilities for decades. Rates vary by jurisdiction based on local government decisions. + +**Why It Varies by Zone** + +ConEd serves three distinct areas with different tax authorities: +- **Zone J (NYC)**: NYC's tax rates +- **Zone I (Lower Westchester)**: Various Westchester municipalities +- **Zone H (Upper Westchester)**: Different Westchester municipalities + +### How It Works + +GRT is applied as a **percentage of your charges**, not per-kWh: + +``` +GRT = (Applicable Charges) × GRT Rate +``` + +It's split into two components: +- **GRT Distribution**: Applied to delivery charges +- **GRT Supply**: Applied to supply charges (if using ConEd supply) + +### Current Rates + +| Zone | GRT Distribution | GRT Supply | Total | +|------|------------------|------------|-------| +| H (Upper Westchester) | 3.3322% | 1.0101% | 4.34% | +| I (Lower Westchester) | 5.5127% | 3.0928% | 8.61% | +| J (NYC) | 4.7940% | 2.4066% | 7.20% | + +### Example + +``` +Zone J (NYC) customer: +- Delivery charges: $80 +- Supply charges: $50 + +GRT Distribution = $80 × 4.794% = $3.84 +GRT Supply = $50 × 2.4066% = $1.20 +Total GRT = $5.04 +``` + +### Why Separate Distribution and Supply? + +Different tax rules may apply to: +- **Distribution**: Charges for using ConEd's wires (always ConEd) +- **Supply**: Charges for electricity commodity (ConEd or ESCO) + +If you use an ESCO, you don't pay ConEd's supply charges, so GRT Supply doesn't apply to ConEd portion. + +### The QUANTITY Charge Type + +In the JSON, GRT uses `chargeType: "QUANTITY"` with `rateUnit: "PERCENTAGE"`: +```json +{ + "rateName": "GRT Distribution - Zone J", + "chargeType": "QUANTITY", + "rateBands": [{ + "rateAmount": 4.794, + "rateUnit": "PERCENTAGE" + }] +} +``` + +The "quantity" here is the dollar amount of applicable charges, and the rate is a percentage. + +--- + +## Value of Distributed Energy Resources (VDER) Cost Recovery + +### The Problem It Solves + +When solar systems (and other distributed generation) export power to the grid, ConEd must compensate them. Under NY's Value Stack tariff, these payments can be substantial. This surcharge recovers those costs from all ratepayers. + +### Origin Story + +**2017: The End of Net Metering** + +Traditional net metering gave solar customers retail-rate credit for exports—often $0.20+/kWh. Critics argued this overvalued solar and shifted costs to non-solar customers. + +**2017: Value of Distributed Energy Resources (VDER) Order** + +The PSC replaced net metering with the "Value Stack": +- Solar exports are valued based on actual grid benefits +- Components: Energy, Capacity, Environmental, Demand Reduction, Locational + +**The Value Stack Components** + +| Component | What It Values | Typical Value | +|-----------|----------------|---------------| +| Energy | Avoided wholesale energy cost | ~$0.03-0.08/kWh | +| Capacity | Avoided generation capacity | ~$0.02-0.04/kWh | +| Environmental (E) | Social cost of carbon | ~$0.02-0.03/kWh | +| Demand Reduction (DRV) | Avoided distribution investment | $0.00-0.10/kWh | +| Locational (LSRV) | Avoided transmission/local distribution | $0.00-0.05/kWh | + +### How VDER Costs Arise + +``` +1. Solar system exports 1,000 kWh to grid +2. ConEd calculates Value Stack: $0.12/kWh average +3. ConEd pays solar owner: $120 +4. ConEd needs to recover $120 from ratepayers +``` + +### How the Surcharge Works + +``` +VDER Cost Recovery = Total VDER Payments to DG Owners / Total kWh Sales +``` + +### Example: System-Wide Math + +``` +Annual VDER payments to solar owners: $50 million +Annual ConEd sales: 40 billion kWh + +VDER Surcharge = $50 million / 40 billion kWh = $0.00125/kWh +For 500 kWh customer: ~$0.63/month +``` + +### Why All Customers Pay + +1. **Grid benefit**: Solar reduces need for central generation and transmission +2. **Environmental benefit**: Lower emissions benefit everyone +3. **Policy decision**: NY chose to socialize DER costs to accelerate clean energy + +### Relationship to CBC + +These two riders are **complementary**: +- **CBC**: Solar customers pay for using the grid +- **VDER Cost Recovery**: All customers pay for solar exports to the grid + +Together, they create a balanced framework where: +- Solar is fairly compensated for grid benefits +- Solar pays for grid services it uses +- Non-solar customers share clean energy transition costs + +### Current Rate + +**$0.0011/kWh** → ~$0.55/month for typical residential customer + +--- + +## Summary: The Policy Story Behind Each Rider + +| Rider | Era | Policy Driver | +|-------|-----|---------------| +| Tax Sur-Credit | 2017+ | Federal tax reform, ongoing property tax changes | +| DLM Surcharge | 2014+ | REV grid modernization, demand response over generation | +| CBC | 2017+ | VDER solar reform, ensuring solar pays for grid use | +| EV Make Ready | 2020+ | Transportation electrification, climate goals | +| Arrears Management | 2020+ | COVID pandemic response, utility customer protection | +| GRT | Long-standing | Municipal taxation authority | +| VDER Cost Recovery | 2017+ | VDER solar reform, compensating distributed generation | + +--- + +## How Riders Appear in the JSON + +Riders have a two-part structure: + +**1. Rider Reference (in main tariff)** +```json +{ + "tariffRateId": 20389577, + "riderId": 3399165, // ← Links to rider tariff + "rateGroupName": "CBC Rider", + "rateName": "CBC Rider", + "chargeType": null, // ← No charge info here + "rateBands": [] // ← Empty, details in rider +} +``` + +**2. Rider Implementation (detailed rate)** +```json +{ + "tariffRateId": 20443074, + "riderTariffId": 3495063, // ← This IS the rider tariff + "rateGroupName": "Customer Benefit Contribution", + "rateName": "Customer Benefit Contribution", + "chargeType": "QUANTITY", + "quantityKey": "systemSize", + "rateBands": [{ + "rateAmount": 1.84, + "rateUnit": "COST_PER_UNIT" + }] +} +``` + +When processing the JSON, look for both: +- Rates with `riderId` (reference to rider) +- Rates with `riderTariffId` (implementation details) + +--- + +## Quick Reference: Rider Calculation Methods + +| Rider | Charge Type | Basis | Rate Structure | +|-------|-------------|-------|----------------| +| Tax Sur-Credit | CONSUMPTION_BASED | Per kWh | Variable (lookup) | +| DLM Surcharge | CONSUMPTION_BASED | Per kWh | Variable (lookup) | +| CBC | QUANTITY | Per kW of solar | Fixed ($1.84/kW) | +| EV Make Ready | CONSUMPTION_BASED | Per kWh | Fixed ($0.0008) | +| Arrears Management | CONSUMPTION_BASED | Per kWh | Fixed ($0.0012) | +| GRT Distribution | QUANTITY | % of delivery charges | Fixed by zone | +| GRT Supply | QUANTITY | % of supply charges | Fixed by zone | +| VDER Cost Recovery | CONSUMPTION_BASED | Per kWh | Fixed ($0.0011) | + diff --git a/docs/wiki/utilities/coned/supply-charges.md b/docs/wiki/utilities/coned/supply-charges.md new file mode 100644 index 0000000..2a91cb4 --- /dev/null +++ b/docs/wiki/utilities/coned/supply-charges.md @@ -0,0 +1,405 @@ +# How ConEd's Supply Charges Work: A Complete Explainer + +> ⚠️ **Disclaimer**: This guide was generated by an LLM (Claude Opus 4.5) based on the tariff JSON plus the model's background knowledge of utility rate structures and NYISO markets. The content looks reasonable but **has not been verified by domain experts**. Please verify any claims before relying on them for business or regulatory purposes. + +## Overview + +When you pay for electricity in New York, your bill includes two main categories: + +1. **Delivery Charges** — Fixed rates for using ConEd's wires (regulated, rarely change) +2. **Supply Charges** — Cost of the actual electricity (variable, changes monthly) + +This explainer focuses on **supply charges** and explains: +- How real-time wholesale prices become a single monthly rate +- Why there's a forecast + adjustment structure +- How the averaging and reconciliation math works + +--- + +## The Players + +| Entity | Role | +|--------|------| +| **NYISO** | Runs the wholesale electricity market for New York State | +| **ConEd** | Buys electricity from NYISO on behalf of customers who haven't chosen an ESCO | +| **NY PSC** | Regulates ConEd; must approve rate changes | +| **You** | Residential customer paying for electricity | + +--- + +## Part 1: How Wholesale Electricity Pricing Works + +### Real-Time Prices at NYISO + +NYISO calculates **Locational Marginal Prices (LMPs)** that change every 5 minutes: + +``` +LMP = Energy Component + Congestion Component + Losses Component +``` + +- **Energy**: Base cost of generation +- **Congestion**: Premium when transmission is constrained +- **Losses**: Cost of electricity lost in transmission + +These prices vary by location (node) and time. A hot summer afternoon in NYC might see prices spike to $500/MWh, while a mild spring night might be $20/MWh. + +### Zone-Level Pricing + +For retail purposes, NYISO aggregates nodal prices into **zone-level prices**: + +| Zone | Area | Typical Price Characteristics | +|------|------|------------------------------| +| H | Upper Westchester | Lower, less congested | +| I | Lower Westchester/Yonkers | Moderate | +| J | New York City | Higher, transmission-constrained | + +ConEd serves all three zones, so they track prices for each separately. + +--- + +## Part 2: From Real-Time Prices to a Forecasted MSC + +### The Challenge + +ConEd must set a **single $/kWh rate** for the upcoming month before knowing: +- What the weather will be +- What demand will be +- What generation will be available +- What actual NYISO prices will be + +### How ConEd Forecasts + +ConEd builds their MSC forecast using: + +| Input | How It's Used | +|-------|---------------| +| **Historical LMPs** | Same month in prior years as baseline | +| **Forward market prices** | NYISO forward curves for upcoming period | +| **Weather forecast** | Expected heating/cooling demand | +| **Load forecast** | Predicted hourly consumption pattern | +| **Fuel prices** | Natural gas forwards (drives generation costs) | + +### Load-Weighted Averaging (Critical Concept) + +The forecasted MSC is **not** a simple average of expected hourly prices. It's a **load-weighted average**: + +``` +Forecasted MSC = Σ (Expected_LMP_hour × Expected_Load_hour) / Σ Expected_Load_hour +``` + +**Why load-weighted?** + +Consider a simplified example: + +| Hour | Expected LMP | Expected Load | LMP × Load | +|------|--------------|---------------|------------| +| 2 AM (off-peak) | $0.03/kWh | 1,000 MWh | $30,000 | +| 2 PM (peak) | $0.15/kWh | 3,000 MWh | $450,000 | +| **Total** | | **4,000 MWh** | **$480,000** | + +``` +Simple average: ($0.03 + $0.15) / 2 = $0.09/kWh ← WRONG + +Load-weighted: $480,000 / 4,000 MWh = $0.12/kWh ← CORRECT +``` + +The load-weighted average reflects that **more electricity is consumed during expensive peak hours**, so the effective rate is higher than a simple average. + +### Zone-Specific Forecasts + +ConEd creates separate forecasts for each zone: + +| Rate | Zone | Reflects | +|------|------|----------| +| `marketSupplyChargeResidentialZoneH` | H | Forecasted load-weighted LMP for Zone H | +| `marketSupplyChargeResidentialZoneI` | I | Forecasted load-weighted LMP for Zone I | +| `marketSupplyChargeResidentialZoneJ` | J | Forecasted load-weighted LMP for Zone J | + +--- + +## Part 3: The Monthly Billing Cycle + +### Step 1: MSC Rate is Set (Before Billing Period) + +ConEd files the forecasted MSC with the NY PSC. This becomes the rate you'll be billed. + +``` +January MSC Rate (Zone J): $0.0823/kWh ← Forecast made in late December +``` + +--- + +### Step 2: Real-Time Procurement (During Billing Period) + +Throughout January, ConEd buys power at actual NYISO prices: + +| Day | Hour | Actual LMP (Zone J) | Actual Load | Cost | +|-----|------|---------------------|-------------|------| +| Jan 1 | 00:00 | $0.042 | 4,200 MW | $176,400 | +| Jan 1 | 01:00 | $0.038 | 3,900 MW | $148,200 | +| ... | ... | ... | ... | ... | +| Jan 31 | 23:00 | $0.067 | 4,800 MW | $321,600 | + +ConEd tracks every 5-minute interval across the entire month. + +--- + +### Step 3: Your Bill Goes Out (End of Billing Period) + +Your January bill uses: + +| Line Item | Value | Based On | +|-----------|-------|----------| +| MSC Rate | $0.0823/kWh | Forecast (from Step 1) | +| MSC I Adjustment | $0.0012/kWh | True-up from October | +| MSC II Adjustment | -$0.0008/kWh | True-up from October | + +**You're paying:** +- January supply at a **forecast** +- October supply **corrections** + +--- + +### Step 4: NYISO Settlement (1-2 Months Later) + +NYISO doesn't finalize costs immediately: + +| Settlement Stage | Timing | What Happens | +|------------------|--------|--------------| +| Initial | T+5 days | Preliminary pricing posted | +| First true-up | T+30 days | Corrections for meter data | +| Final | T+60 days | All adjustments finalized | + +Only after final settlement does ConEd know the **true cost** for January. + +--- + +### Step 5: Calculating the Variance (2-3 Months Later) + +Now ConEd can compare forecast vs. reality: + +``` +Actual Cost = Σ (Actual_LMP × Actual_Load) for all hours in January + +Billed Amount = Forecasted_MSC × Total_Actual_Load + +Variance = Actual Cost - Billed Amount +``` + +**Example:** + +| Metric | Value | +|--------|-------| +| Total January Load (Zone J residential) | 2,500,000 MWh | +| Forecasted MSC | $0.0823/kWh | +| Billed to customers | $205,750,000 | +| Actual load-weighted LMP | $0.0847/kWh | +| Actual procurement cost | $211,750,000 | +| **Variance (under-collection)** | **$6,000,000** | + +ConEd under-collected by $6 million. This needs to be recovered. + +--- + +### Step 6: How the Adjustment is Calculated + +The variance is converted to a per-kWh adjustment factor: + +``` +MSC I Adjustment = Variance / Expected Future Load +``` + +If ConEd expects to sell 2,400,000 MWh in the recovery period: + +``` +MSC I Adjustment = $6,000,000 / 2,400,000 MWh = $0.0025/kWh +``` + +This $0.0025/kWh surcharge will appear on bills ~3-4 months after January. + +--- + +### Step 7: Regulatory Filing and Approval + +ConEd files the proposed adjustment with the NY PSC: + +- Shows actual costs vs. billed amounts +- Proposes adjustment factor +- PSC reviews for accuracy (ConEd shouldn't profit on supply) +- PSC approves (or modifies) the adjustment + +--- + +### Step 8: Adjustments Applied to Future Bills + +The approved adjustment appears on customer bills: + +``` +April 2025 Bill: +├── MSC Rate: $0.0756/kWh ← Forecast for April +├── MSC I Adjustment: $0.0025/kWh ← Recovery for January under-collection +└── MSC II Adjustment: $0.0003/kWh ← Capacity/ancillary from January +``` + +--- + +## Part 4: MSC I vs. MSC II — What's the Difference? + +### MSC I Adjustment (Energy) + +Reconciles the **commodity cost** of electricity: + +``` +MSC I Variance = Σ (Actual_Energy_LMP × Load) - (Forecasted_MSC × Load) +``` + +- **Zone-specific**: Because NYISO energy prices differ by zone +- **Driven by**: Weather, demand spikes, generation outages, fuel prices + +| Zone | Key | Why Different | +|------|-----|---------------| +| H | `mscIResidentialWestchester2252` | Less congestion, different load shape | +| I | `mscIResidentialWestchester2252` | Similar to Zone H | +| J | `mscIResidentialNewYork2252` | NYC transmission constraints = higher prices | + +### MSC II Adjustment (Capacity & Ancillaries) + +Reconciles **non-energy costs**: + +| Cost Type | What It Is | +|-----------|------------| +| **Capacity** | Payments to generators to be available (even if not running) | +| **Ancillary services** | Frequency regulation, spinning reserves, voltage support | +| **Working capital** | Carrying costs for the lag between payment and collection | +| **NYISO fees** | Administrative charges from the grid operator | + +``` +MSC II Variance = Actual_Capacity_Costs - Forecasted_Capacity_Costs + + Actual_Ancillary_Costs - Forecasted_Ancillary_Costs + + Carrying_Costs +``` + +- **Not zone-specific**: These costs are averaged across ConEd's entire territory +- **More stable**: Capacity costs are set seasonally, less volatile than energy + +--- + +## Part 5: The Complete Timeline + +``` + BILLING SETTLEMENT FILING RECOVERY + PERIOD PERIOD PERIOD PERIOD + ───────── ────────── ──────── ──────── +January February March April May+ +───────────────────────────────────────────────────────────────────────────── +│ │ │ │ │ +▼ ▼ ▼ ▼ ▼ +You use power NYISO ConEd PSC reviews Adjustment +ConEd procures finalizes calculates and approves appears on +at real-time LMPs settlement variance adjustment your bill + +You're billed at +FORECASTED MSC + +Gap created ────────────────────────────────────────────────────► Gap closed +(forecast ≠ actual) via adjustment +``` + +--- + +## Part 6: Worked Example + +### January Billing Period (Zone J Residential) + +**Forecasting (December):** +``` +Expected January load shape × Forward LMP curve = $0.0823/kWh forecasted MSC +``` + +**Reality (January):** +``` +Actual hourly data: +- Total load: 2,500,000 MWh +- Load-weighted actual LMP: $0.0847/kWh +- Actual energy cost: $211,750,000 +``` + +**What customers paid:** +``` +2,500,000 MWh × $0.0823/kWh = $205,750,000 +``` + +**Variance:** +``` +$211,750,000 - $205,750,000 = $6,000,000 under-collection +``` + +**MSC I Adjustment (applied in April/May):** +``` +$6,000,000 / 2,400,000 MWh (expected recovery period load) = $0.0025/kWh +``` + +**Your April bill includes:** +``` +Energy for April: 500 kWh × $0.0756 = $37.80 (April forecast) +MSC I Adjustment: 500 kWh × $0.0025 = $1.25 (January true-up) +MSC II Adjustment: 500 kWh × $0.0003 = $0.15 (January capacity true-up) + ─────── +Total Supply Charges: $39.20 +``` + +--- + +## Part 7: Key Takeaways + +### Why This Structure Exists + +| Reason | Explanation | +|--------|-------------| +| **Timing mismatch** | Bills must go out before costs are known | +| **Settlement lag** | NYISO takes ~60 days to finalize | +| **Regulatory requirement** | Rate changes need PSC approval | +| **Revenue neutrality** | ConEd can't profit on supply; must true-up | + +### The Math in One Equation + +``` +What you pay over time = What ConEd paid NYISO + +MSC_billed + MSC_I_adjustments + MSC_II_adjustments = Actual_procurement_cost +``` + +### Load-Weighting Matters + +Both the **forecast** and the **adjustment** use load-weighted averages because: +- Electricity consumption isn't uniform throughout the day +- More power is consumed during expensive peak hours +- A simple average would understate true costs + +--- + +## Part 8: What If You Switch to an ESCO? + +If you choose an Energy Service Company (ESCO) instead of ConEd's default supply: + +- You **don't pay** MSC, MSC I, or MSC II +- You pay the ESCO's rate instead (could be fixed or variable) +- ConEd still handles delivery (you still pay delivery charges) +- The ESCO manages their own procurement and hedging + +The `chargeClass: "SUPPLY,CONTRACTED"` rates in the tariff only apply to customers using ConEd as their supplier. + +--- + +## Glossary + +| Term | Definition | +|------|------------| +| **LMP** | Locational Marginal Price — wholesale electricity price at a specific location and time | +| **MSC** | Market Supply Charge — ConEd's retail supply rate for default service customers | +| **NYISO** | New York Independent System Operator — runs the wholesale electricity market | +| **PSC** | Public Service Commission — NY's utility regulator | +| **ESCO** | Energy Service Company — competitive retail electricity supplier | +| **Load-weighted average** | Average where each price is weighted by the consumption during that period | +| **Settlement** | NYISO's process of finalizing actual costs after the operating period | + diff --git a/docs/wiki/utilities/coned/variable-rates-api.md b/docs/wiki/utilities/coned/variable-rates-api.md new file mode 100644 index 0000000..9d2705f --- /dev/null +++ b/docs/wiki/utilities/coned/variable-rates-api.md @@ -0,0 +1,491 @@ +# Retrieving Variable Rate Values from Arcadia APIs + +> ⚠️ **Disclaimer**: This guide was generated by an LLM (Claude Opus 4.5) based on Arcadia API documentation and the model's understanding of the API structure. The content looks reasonable but **has not been verified by domain experts**. Please verify any claims and test API calls before relying on them for production use. + +--- + +## You Have a Tariff—Now What? + +You downloaded a tariff (like ConEd EL1) and see rates with `variableRateKey`: + +```json +{ + "rateName": "MSC Rate - Zone J", + "rateAmount": 0.0, + "variableRateKey": "marketSupplyChargeResidentialZoneJ" +} +``` + +The `rateAmount: 0.0` is a placeholder. The actual values change over time (monthly, in most cases). To get them, you have two options: + +| Approach | How It Works | What You Get | +|----------|--------------|--------------| +| **Lookups API** | Extract `variableRateKey` values from tariff → query each one | Raw rate values, exactly what you asked for | +| **Calculate API** | Use tariff metadata to set up a billing scenario → run calculation | All applicable rates resolved for that scenario | + +**Key difference**: These approaches don't always give the same results. + +--- + +## ⚠️ Important: The Two Approaches Are Not Equivalent + +### Lookups API = Raw Data, You Control What You Query + +- You explicitly request specific `variableRateKey` values +- You get exactly those values, regardless of whether they apply to a specific customer +- Zone H, Zone I, Zone J rates? You can query all of them +- Solar-only rates? You get them even if you're not modeling a solar customer + +### Calculate API = Scenario-Based, API Filters for Applicability + +- You specify a billing scenario: territory, consumption, solar system size, etc. +- The API returns **only rates that apply to that scenario** +- Zone J customer? You only get Zone J rates +- No solar (`systemSize: 0`)? You won't get the CBC charge + +### When Results Match + +If you: +1. Query Lookups for only the `variableRateKey` values that apply to your scenario +2. Use Calculate with the same scenario parameters + +...you'll get the same variable rate values. + +### When Results Differ + +| Scenario | Lookups API | Calculate API | +|----------|-------------|---------------| +| Query all zone-specific MSC rates | Returns H, I, and J values | Returns only the zone you specified | +| Customer without solar | Returns CBC rate if you query it | Won't include CBC (doesn't apply) | +| Query a key that doesn't apply | Returns data anyway | Won't appear in results | + +**Bottom line**: Lookups gives you raw data; Calculate gives you scenario-specific data. + +--- + +## Workflow: From Tariff to Variable Rates + +### Method 1: Lookups API + +**Step 1: Extract all `variableRateKey` values from the tariff** + +Parse the tariff JSON and collect every unique `variableRateKey`: + +```python +import json + +def extract_variable_rate_keys(tariff_json): + """Extract all variableRateKey values from a tariff.""" + keys = set() + + for tariff in tariff_json: + for rate in tariff.get('rates', []): + if 'variableRateKey' in rate: + keys.add(rate['variableRateKey']) + + return list(keys) + +# Load your tariff +with open('coned_el1_tariff.json') as f: + tariff = json.load(f) + +variable_keys = extract_variable_rate_keys(tariff) +print(f"Found {len(variable_keys)} variable rate keys") +``` + +**For ConEd EL1, this returns keys like:** +```python +[ + "marketSupplyChargeResidentialZoneH", + "marketSupplyChargeResidentialZoneI", + "marketSupplyChargeResidentialZoneJ", + "mscIResidentialWestchester2252", + "mscIResidentialNewYork2252", + "mscIIAdjustmentFactor", + "monthlyAdjustmentClauseResidential", + # ... 15+ more +] +``` + +**Step 2: Query Lookups API for each key** + +```python +import requests + +def get_lookups(property_key, from_date, to_date, api_key): + """Get lookup values for a single variableRateKey.""" + response = requests.get( + f"https://api.arcadia.com/rest/public/properties/{property_key}/lookups", + params={ + "fromDateTime": from_date, + "toDateTime": to_date + }, + headers={"Authorization": f"Bearer {api_key}"} + ) + return response.json().get('results', []) + +# Get 2024 data for all keys +all_lookups = {} +for key in variable_keys: + all_lookups[key] = get_lookups( + key, + "2024-01-01T00:00:00-05:00", + "2025-01-01T00:00:00-05:00", + "YOUR_API_KEY" + ) + +print(f"Retrieved data for {len(all_lookups)} variable rates") +``` + +**Step 3: Organize by time period** + +```python +def organize_by_month(all_lookups): + """Reorganize lookup data by month.""" + monthly = {} + + for key, entries in all_lookups.items(): + for entry in entries: + # Extract month from fromDateTime + month = entry['fromDateTime'][:7] # "2024-01" + + if month not in monthly: + monthly[month] = {} + + monthly[month][key] = entry['bestValue'] + + return monthly + +monthly_rates = organize_by_month(all_lookups) + +# Result: +# { +# "2024-01": {"marketSupplyChargeResidentialZoneJ": 0.0823, ...}, +# "2024-02": {"marketSupplyChargeResidentialZoneJ": 0.0791, ...}, +# ... +# } +``` + +**Calls required**: One per `variableRateKey` (typically 15-20 for ConEd EL1) + +--- + +### Method 2: Calculate API + +**Step 1: Extract scenario parameters from the tariff** + +The tariff tells you what parameters the Calculate API needs: + +```python +def get_calculate_params(tariff_json): + """Extract parameters needed for Calculate API from tariff.""" + tariff = tariff_json[0] # First tariff in array + + return { + "masterTariffId": tariff['masterTariffId'], + "lseId": tariff['lseId'], + # Get available territories from properties + "territories": [ + choice['value'] + for prop in tariff.get('properties', []) + if prop['keyName'] == 'territoryId' + for choice in prop.get('choices', []) + ] + } + +params = get_calculate_params(tariff) +# Result: +# { +# "masterTariffId": 809, +# "lseId": 2252, +# "territories": ["3632", "3633", "3634"] # H, I, J +# } +``` + +**Step 2: Call Calculate API for each billing period** + +```python +def calculate_bill(master_tariff_id, territory_id, from_date, to_date, consumption, api_key): + """Run a bill calculation and return line items.""" + response = requests.post( + "https://api.arcadia.com/rest/public/calculate", + json={ + "masterTariffId": master_tariff_id, + "fromDateTime": from_date, + "toDateTime": to_date, + "territoryId": int(territory_id), + "detailLevel": "CHARGE_TYPE_AND_TOU", + "propertyInputs": [ + {"keyName": "consumption", "dataValue": consumption} + ] + }, + headers={"Authorization": f"Bearer {api_key}"} + ) + return response.json() + +# Get 2024 data for Zone J +monthly_results = {} +for month in range(1, 13): + from_date = f"2024-{month:02d}-01" + to_date = f"2024-{month+1:02d}-01" if month < 12 else "2025-01-01" + + result = calculate_bill( + master_tariff_id=809, + territory_id=3634, # Zone J + from_date=from_date, + to_date=to_date, + consumption=500, # Arbitrary—we just want rate values + api_key="YOUR_API_KEY" + ) + monthly_results[f"2024-{month:02d}"] = result +``` + +**Step 3: Extract rate values from responses** + +```python +def extract_rate_values(calculate_response): + """Extract rate values from Calculate API response.""" + rates = {} + + for item in calculate_response['results'][0]['items']: + rate_name = item['tariffRateName'] + rate_amount = item['rateAmount'] + rates[rate_name] = rate_amount + + return rates + +monthly_rates = { + month: extract_rate_values(result) + for month, result in monthly_results.items() +} + +# Result: +# { +# "2024-01": {"Customer Charge": 20.0, "MSC Rate - Zone J": 0.0823, ...}, +# "2024-02": {"Customer Charge": 20.0, "MSC Rate - Zone J": 0.0791, ...}, +# ... +# } +``` + +**Calls required**: One per billing period (12 for a year of monthly data) + +--- + +## Filtering Calculate API Results to Just Variable Rates + +The Calculate API returns ALL charges (fixed and variable). To get just variable rates, cross-reference with the tariff: + +```python +def filter_to_variable_rates(tariff_json, calculate_response): + """Filter Calculate results to only variable rates.""" + + # Build set of rate names that have variableRateKey + variable_rate_names = set() + for tariff in tariff_json: + for rate in tariff.get('rates', []): + if 'variableRateKey' in rate: + variable_rate_names.add(rate['rateName']) + + # Filter calculate results + all_rates = extract_rate_values(calculate_response) + variable_only = { + name: value + for name, value in all_rates.items() + if name in variable_rate_names + } + + return variable_only +``` + +--- + +## Can Calculate API Give the Same Results as Lookups? + +**Short answer**: Yes, but only if you're careful about scenario matching. + +### To Get Equivalent Results: + +1. **Match the territory**: If you queried `marketSupplyChargeResidentialZoneJ` via Lookups, use `territoryId: 3634` in Calculate + +2. **Match applicability conditions**: Some rates only apply in certain scenarios: + - CBC only appears if `systemSize > 0` + - Supply charges only appear if customer uses ConEd supply (not ESCO) + +3. **Cross-reference by rate name**: The Calculate API uses `tariffRateName` which matches the `rateName` in the tariff JSON + +### What Calculate API Cannot Do: + +- **Return rates for multiple zones in one call**: You must call once per territory +- **Return rates that don't apply to your scenario**: If you set `systemSize: 0`, you won't get CBC +- **Give you forecast vs. actual breakdown**: Lookups has `bestValue`, `actualValue`, `forecastValue`; Calculate just gives you the resolved value + +### When to Use Each: + +| Goal | Use | +|------|-----| +| Get all variable rates for a specific customer scenario | Calculate API | +| Get one rate's full history with forecast/actual breakdown | Lookups API | +| Discover what variable rates exist without knowing keys | Calculate API | +| Get raw data regardless of applicability | Lookups API | + +--- + +## API Reference Summary + +### Lookups API + +**Endpoint**: `GET /rest/public/properties/{propertyKey}/lookups` + +**Parameters**: + +| Parameter | Required | Description | +|-----------|----------|-------------| +| `propertyKey` | Yes | The `variableRateKey` | +| `fromDateTime` | Recommended | Start of date range (ISO 8601) | +| `toDateTime` | Recommended | End of date range (ISO 8601) | + +**Default date behavior**: Last 72 hours if not specified. + +**Response fields**: +- `bestValue`: Use this (best available value) +- `actualValue`: Finalized value (may be null) +- `forecastValue`: Arcadia's forecast +- `lseForecastValue`: Utility's forecast + +### Calculate API + +**Endpoint**: `POST /rest/public/calculate` + +**Key request fields**: + +| Field | Required | Description | +|-------|----------|-------------| +| `masterTariffId` | Yes | From tariff JSON | +| `fromDateTime` | Yes | Billing period start | +| `toDateTime` | Yes | Billing period end | +| `territoryId` | Depends | Required if tariff has multiple territories | +| `detailLevel` | Yes | Use `CHARGE_TYPE_AND_TOU` or `RATE` | +| `propertyInputs` | Yes | At minimum, consumption | + +**Response structure**: +- `results[0].items[]`: Array of line items +- Each item has `tariffRateName`, `rateAmount`, `itemQuantity`, `cost` + +### Lookup Stats API + +**Endpoint**: `GET /rest/public/properties/{propertyKey}/stats` + +**Returns**: Date range available, count, mean value, last updated date. + +--- + +## Complete Example: 2024 Variable Rates, Both Methods + +### Setup + +```python +import json +import requests +from datetime import datetime + +API_KEY = "YOUR_API_KEY" +TARIFF_FILE = "coned_el1_tariff.json" + +with open(TARIFF_FILE) as f: + tariff = json.load(f) +``` + +### Method 1: Lookups API + +```python +# Extract variable rate keys +variable_keys = [] +for t in tariff: + for rate in t.get('rates', []): + if 'variableRateKey' in rate: + variable_keys.append({ + 'key': rate['variableRateKey'], + 'name': rate['rateName'] + }) + +# Deduplicate +unique_keys = {k['key']: k['name'] for k in variable_keys} + +# Query each key +lookups_results = {} +for key, name in unique_keys.items(): + response = requests.get( + f"https://api.arcadia.com/rest/public/properties/{key}/lookups", + params={ + "fromDateTime": "2024-01-01T00:00:00-05:00", + "toDateTime": "2025-01-01T00:00:00-05:00" + }, + headers={"Authorization": f"Bearer {API_KEY}"} + ) + lookups_results[name] = response.json().get('results', []) + +print(f"Lookups API: {len(unique_keys)} calls made") +``` + +### Method 2: Calculate API (Zone J) + +```python +calculate_results = {} +for month in range(1, 13): + from_date = f"2024-{month:02d}-01" + to_date = f"2024-{month+1:02d}-01" if month < 12 else "2025-01-01" + + response = requests.post( + "https://api.arcadia.com/rest/public/calculate", + json={ + "masterTariffId": 809, + "fromDateTime": from_date, + "toDateTime": to_date, + "territoryId": 3634, + "detailLevel": "CHARGE_TYPE_AND_TOU", + "propertyInputs": [ + {"keyName": "consumption", "dataValue": 500} + ] + }, + headers={"Authorization": f"Bearer {API_KEY}"} + ) + calculate_results[f"2024-{month:02d}"] = response.json() + +print(f"Calculate API: 12 calls made") +``` + +### Compare Results + +```python +# Get January 2024 MSC Rate - Zone J from both methods + +# From Lookups +for entry in lookups_results.get("MSC Rate - Zone J", []): + if entry['fromDateTime'].startswith("2024-01"): + print(f"Lookups API: {entry['bestValue']}") + +# From Calculate +for item in calculate_results["2024-01"]['results'][0]['items']: + if item['tariffRateName'] == "MSC Rate - Zone J": + print(f"Calculate API: {item['rateAmount']}") + +# These should match! +``` + +--- + +## Summary + +| Aspect | Lookups API | Calculate API | +|--------|-------------|---------------| +| **Input needed** | `variableRateKey` from tariff | `masterTariffId`, `territoryId`, consumption | +| **Output** | Raw rate values with forecast/actual | Resolved rates for specific scenario | +| **Calls for 1 year, all rates** | ~16 (one per key) | 12 (one per month) | +| **Includes non-applicable rates** | Yes (if you query them) | No (filtered by scenario) | +| **Forecast vs. actual breakdown** | Yes | No | +| **Discovers rates for you** | No (you must know keys) | Yes (returns all applicable) | + +**Use Lookups when**: You know exactly which rates you want and need raw historical data. + +**Use Calculate when**: You want all applicable rates for a billing scenario without knowing the keys upfront. + diff --git a/docs/wiki/utilities/index.md b/docs/wiki/utilities/index.md new file mode 100644 index 0000000..0486ff2 --- /dev/null +++ b/docs/wiki/utilities/index.md @@ -0,0 +1,29 @@ +# Utilities + +Guides organized by utility company. + +## Available Utilities + +| Utility | LSE ID | Region | Service Type | +|---------|--------|--------|--------------| +| [Consolidated Edison (ConEd)](coned/index.md) | 2252 | New York City, Westchester | Electricity | + +## Adding New Utilities + +To add documentation for a new utility: + +1. Create a folder under `wiki/utilities/` with the utility's short name +2. Add an `index.md` with utility overview +3. Add subfolders for each tariff with detailed guides +4. Update the table above + +## Utility Identifiers + +When working with Arcadia/Genability data, utilities are identified by: + +- **`lseId`**: Unique numeric ID (e.g., 2252 for ConEd) +- **`lseName`**: Full name (e.g., "Consolidated Edison Co-NY Inc") +- **`lseCode`**: Short code (e.g., "ConEd") + +You can search for utilities using the `tariff_fetch` CLI or the Arcadia LSE API. + diff --git a/mkdocs.yml b/mkdocs.yml index c89444d..f14736e 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -7,9 +7,27 @@ repo_name: switchbox-data/tariff_fetch nav: - Home: index.md - API Reference: modules.md + - Tariff Wiki: + - wiki/index.md + - Utilities: + - wiki/utilities/index.md + - ConEd: + - wiki/utilities/coned/index.md + - Delivery Adjustments: wiki/utilities/coned/delivery-adjustments.md + - Supply Charges: wiki/utilities/coned/supply-charges.md + - Riders: wiki/utilities/coned/riders.md + - Variable Rates API: wiki/utilities/coned/variable-rates-api.md + - SC1 Residential (Default): + - wiki/utilities/coned/residential-el1/index.md + - SC3 Residential TOU: + - wiki/utilities/coned/residential-el1-tou/index.md + - SC4 Residential Demand: + - wiki/utilities/coned/residential-el1-demand/index.md theme: name: material + features: + - navigation.indexes palette: - scheme: default primary: blue @@ -30,3 +48,13 @@ plugins: handlers: python: paths: [src] + +markdown_extensions: + - toc: + toc_depth: 3 + - pymdownx.highlight: + anchor_linenums: true + line_spans: __span + pygments_lang_class: true + - pymdownx.inlinehilite + - pymdownx.superfences