{
 "meta": {
  "version": 1,
  "currency": "USD",
  "basis_year": 2026,
  "note": "A negotiation instrument, not a forecast. The point is to find which assumptions move the bid by eight figures and which are noise."
 },
 "install_classes": {
  "res_single": {
   "label": "Residential, single",
   "property_classes": [
    "sfr_detached",
    "mobile_home_lot"
   ],
   "why": "Outdoor socket, no appointment. The base case everything else is measured against.",
   "base_productivity": {
    "default": 30,
    "min": 15,
    "max": 60,
    "provenance": "benchmark"
   },
   "meter_cost": {
    "default": 85,
    "min": 40,
    "max": 200,
    "provenance": "bidder"
   }
  },
  "res_multi_bank": {
   "label": "Residential, meter bank",
   "property_classes": [
    "mf_5plus",
    "duplex_fourplex",
    "condo"
   ],
   "why": "Slow to get into, fast per meter once inside -- the one class where productivity rises with parcel size. Nearly a third of SCE's meters sit behind a door someone has to open.",
   "base_productivity": {
    "default": 45,
    "min": 20,
    "max": 90,
    "provenance": "benchmark"
   },
   "meter_cost": {
    "default": 85,
    "min": 40,
    "max": 200,
    "provenance": "bidder"
   }
  },
  "comm_small": {
   "label": "Commercial, self-contained",
   "property_classes": [
    "commercial",
    "mixed_use",
    "hotel_lodging"
   ],
   "why": "Self-contained meter, but a business-hours appointment and a customer who notices an outage.",
   "base_productivity": {
    "default": 12,
    "min": 6,
    "max": 25,
    "provenance": "benchmark"
   },
   "meter_cost": {
    "default": 250,
    "min": 120,
    "max": 600,
    "provenance": "bidder"
   }
  },
  "comm_ct": {
   "label": "Commercial, CT-metered",
   "property_classes": [
    "industrial",
    "institutional"
   ],
   "why": "Two-person crew, outage coordination, sometimes an electrician.",
   "base_productivity": {
    "default": 4,
    "min": 1,
    "max": 8,
    "provenance": "benchmark"
   },
   "meter_cost": {
    "default": 900,
    "min": 400,
    "max": 2000,
    "provenance": "bidder"
   }
  },
  "res_master_mhp": {
   "label": "Mobile home park, master",
   "property_classes": [
    "mobile_home_park"
   ],
   "why": "Master service, park operator as the customer, non-standard hardware.",
   "base_productivity": {
    "default": 6,
    "min": 2,
    "max": 12,
    "provenance": "benchmark"
   },
   "meter_cost": {
    "default": 250,
    "min": 120,
    "max": 600,
    "provenance": "bidder"
   }
  },
  "ag_pump": {
   "label": "Agricultural pumping",
   "property_classes": [
    "agricultural"
   ],
   "why": "Remote, seasonal access, long drives between sites.",
   "base_productivity": {
    "default": 8,
    "min": 3,
    "max": 15,
    "provenance": "benchmark"
   },
   "meter_cost": {
    "default": 250,
    "min": 120,
    "max": 600,
    "provenance": "bidder"
   }
  }
 },
 "controls": {
  "labour": {
   "label": "Labour and productivity",
   "items": {
    "crew_day_rate": {
     "label": "Fully loaded crew-day rate",
     "unit": "$/crew-day",
     "default": 1200,
     "min": 400,
     "max": 2500,
     "step": 25,
     "affects": "labour",
     "provenance": "bidder",
     "help": "Wages, burden, vehicle and tools for one crew for one day. The single largest lever on total cost after productivity."
    },
    "revisit_rate": {
     "label": "Revisit rate",
     "unit": "% of meters",
     "default": 8,
     "min": 0,
     "max": 30,
     "step": 1,
     "affects": "labour",
     "provenance": "benchmark",
     "help": "Customer not home, access refused, meter not found."
    },
    "revisit_cost": {
     "label": "Revisit cost",
     "unit": "\u00d7 first visit",
     "default": 0.6,
     "min": 0.2,
     "max": 1.0,
     "step": 0.05,
     "affects": "labour",
     "provenance": "bidder"
    }
   }
  },
  "access": {
   "label": "Access and difficulty",
   "note": "This group is what the basemap actually buys. Everything hard about a meter enters through productivity, never as a cost adder -- a gated meter room is fewer meters per crew-day, and modelling it as a surcharge hides the fact that it also lengthens the schedule.",
   "items": {
    "hftd2_mult": {
     "label": "HFTD Tier 2 productivity",
     "unit": "\u00d7",
     "default": 0.9,
     "min": 0.5,
     "max": 1.0,
     "step": 0.01,
     "affects": "productivity",
     "provenance": "judgement",
     "data": "sce_hftd, joined per service point"
    },
    "hftd3_mult": {
     "label": "HFTD Tier 3 productivity",
     "unit": "\u00d7",
     "default": 0.75,
     "min": 0.4,
     "max": 1.0,
     "step": 0.01,
     "affects": "productivity",
     "provenance": "judgement",
     "data": "sce_hftd, joined per service point"
    },
    "escort_share": {
     "label": "Meter room needs an escort",
     "unit": "% of meter-bank meters",
     "default": 35,
     "min": 0,
     "max": 100,
     "step": 1,
     "affects": "productivity",
     "provenance": "judgement",
     "help": "Not in public data. A visible guess, deliberately."
    },
    "escort_mult": {
     "label": "Escort productivity",
     "unit": "\u00d7",
     "default": 0.55,
     "min": 0.2,
     "max": 1.0,
     "step": 0.01,
     "affects": "productivity",
     "provenance": "judgement"
    },
    "rural_mult": {
     "label": "Rural travel productivity",
     "unit": "\u00d7",
     "default": 0.6,
     "min": 0.2,
     "max": 1.0,
     "step": 0.01,
     "affects": "productivity",
     "provenance": "judgement",
     "data": "meters per route km, from 1,459,162 Overture segments"
    },
    "rural_threshold": {
     "label": "Rural below",
     "unit": "meters/route-km",
     "default": 25,
     "min": 5,
     "max": 200,
     "step": 5,
     "affects": "productivity",
     "provenance": "judgement"
    },
    "remediation_rate": {
     "label": "Panel remediation rate",
     "unit": "% of pre-1980 meters",
     "default": 6,
     "min": 0,
     "max": 25,
     "step": 1,
     "affects": "remediation",
     "provenance": "benchmark",
     "data": "year_built, 42% coverage (LA and Orange only)"
    },
    "remediation_cost": {
     "label": "Panel remediation cost",
     "unit": "$",
     "default": 650,
     "min": 150,
     "max": 2500,
     "step": 25,
     "affects": "remediation",
     "provenance": "bidder"
    }
   }
  },
  "hardware": {
   "label": "Hardware",
   "items": {
    "comms_module": {
     "label": "Comms module",
     "unit": "$",
     "default": 40,
     "min": 15,
     "max": 90,
     "step": 1,
     "affects": "hardware",
     "provenance": "bidder"
    },
    "ancillary_rate": {
     "label": "Socket adapter / ancillary",
     "unit": "% of meters",
     "default": 4,
     "min": 0,
     "max": 20,
     "step": 1,
     "affects": "hardware",
     "provenance": "bidder"
    },
    "disposal_cost": {
     "label": "Old meter disposal",
     "unit": "$",
     "default": 6,
     "min": 1,
     "max": 15,
     "step": 1,
     "affects": "hardware",
     "provenance": "bidder"
    }
   }
  },
  "customer": {
   "label": "Customer and regulatory",
   "items": {
    "notify_cost": {
     "label": "Notification per meter",
     "unit": "$",
     "default": 4.0,
     "min": 0,
     "max": 25,
     "step": 0.5,
     "affects": "notification",
     "provenance": "bidder",
     "help": "Mail, door hanger, call."
    },
    "dac_uplift": {
     "label": "In-language uplift in DAC tracts",
     "unit": "\u00d7",
     "default": 1.4,
     "min": 1.0,
     "max": 3.0,
     "step": 0.05,
     "affects": "notification",
     "provenance": "judgement",
     "data": "SB 535 disadvantaged communities, 2,310 tracts"
    },
    "optout_rate": {
     "label": "Opt-out rate",
     "unit": "%",
     "default": 1,
     "min": 0,
     "max": 10,
     "step": 0.5,
     "affects": "meters",
     "provenance": "benchmark",
     "help": "Removes meters from the install, and adds a manual-read tail."
    }
   }
  },
  "overhead": {
   "label": "Programme overhead",
   "items": {
    "pm_pct": {
     "label": "Project management and supervision",
     "unit": "% of direct",
     "default": 12,
     "min": 0,
     "max": 30,
     "step": 1,
     "affects": "loading",
     "provenance": "bidder"
    },
    "it_per_meter": {
     "label": "IT / head-end / MDM",
     "unit": "$/meter",
     "default": 25,
     "min": 5,
     "max": 60,
     "step": 1,
     "affects": "loading",
     "provenance": "bidder",
     "help": "Head-end system, meter data management, integration. The floor is not zero: there is no AMI programme without one, and a control whose range starts at zero dominates a sensitivity ranking for a reason that is an artefact of the range rather than a fact about the cost."
    },
    "contingency_pct": {
     "label": "Contingency",
     "unit": "% of loaded",
     "default": 10,
     "min": 0,
     "max": 30,
     "step": 1,
     "affects": "loading",
     "provenance": "bidder"
    },
    "margin_pct": {
     "label": "Bidder margin",
     "unit": "%",
     "default": 8,
     "min": 0,
     "max": 30,
     "step": 1,
     "affects": "loading",
     "provenance": "bidder"
    }
   }
  },
  "schedule": {
   "label": "Workforce and schedule",
   "note": "Crews change the schedule, not the price per meter. If a model makes cost fall as you add crews it is smuggling in an efficiency assumption, so the two effects are kept separate and both visible.",
   "items": {
    "crews": {
     "label": "Number of crews",
     "unit": "crews",
     "default": 250,
     "min": 20,
     "max": 1000,
     "step": 10,
     "affects": "schedule",
     "provenance": "bidder",
     "help": "The programme is roughly 236,000 crew-days at default productivity. Forty crews -- the figure this file first carried -- finishes it in 27 years, which is not a plan; the default is sized to a four-year rollout instead."
    },
    "days_per_month": {
     "label": "Working days per crew-month",
     "unit": "days",
     "default": 19,
     "min": 10,
     "max": 26,
     "step": 1,
     "affects": "schedule",
     "provenance": "bidder"
    },
    "psps_days": {
     "label": "Red Flag / PSPS days lost",
     "unit": "days/year",
     "default": 12,
     "min": 0,
     "max": 40,
     "step": 1,
     "affects": "schedule",
     "provenance": "benchmark",
     "help": "Removes working days, not productivity. A crew stood down for a wind event is not a slower crew."
    },
    "ramp_per_month": {
     "label": "Hiring ramp",
     "unit": "crews/month",
     "default": 25,
     "min": 1,
     "max": 120,
     "step": 1,
     "affects": "schedule",
     "provenance": "bidder"
    },
    "training_weeks": {
     "label": "Training period",
     "unit": "weeks",
     "default": 3,
     "min": 0,
     "max": 12,
     "step": 1,
     "affects": "schedule",
     "provenance": "bidder"
    },
    "training_mult": {
     "label": "Productivity while training",
     "unit": "\u00d7",
     "default": 0.5,
     "min": 0.1,
     "max": 1.0,
     "step": 0.05,
     "affects": "schedule",
     "provenance": "bidder"
    },
    "attrition_pct": {
     "label": "Attrition",
     "unit": "%/year",
     "default": 15,
     "min": 0,
     "max": 60,
     "step": 1,
     "affects": "schedule",
     "provenance": "benchmark"
    }
   }
  }
 },
 "disclosure": [
  {
   "driver": "How many meters",
   "known": "per parcel with a method label",
   "assumed": "\u2014"
  },
  {
   "driver": "Where they are",
   "known": "parcel representative point only",
   "assumed": "true location; address points are blocked"
  },
  {
   "driver": "Property / install class",
   "known": "from assessor use code",
   "assumed": "service size and phase within class"
  },
  {
   "driver": "Multifamily bank size",
   "known": "units per parcel",
   "assumed": "whether the bank is one room or scattered"
  },
  {
   "driver": "Fire tier",
   "known": "CPUC HFTD per service point",
   "assumed": "actual crew work rules by tier"
  },
  {
   "driver": "Disadvantaged community",
   "known": "SB 535 tract",
   "assumed": "notification cost uplift"
  },
  {
   "driver": "Structure vintage",
   "known": "42% of meters (LA and Orange)",
   "assumed": "panel condition",
   "hot-socket rate": null
  },
  {
   "driver": "Rural drive time",
   "known": "meters per route km from Overture",
   "assumed": "crew routing efficiency"
  },
  {
   "driver": "Meter inside vs outside",
   "known": "nothing",
   "assumed": "rate by class"
  },
  {
   "driver": "Locked gate",
   "dog": null,
   "escort": null,
   "known": "nothing",
   "assumed": "rate by class"
  },
  {
   "driver": "Customer not home",
   "known": "nothing",
   "assumed": "revisit rate"
  },
  {
   "driver": "Crew productivity",
   "known": "nothing",
   "assumed": "every rate. Nobody outside SCE has this."
  }
 ],
 "ask_sce_for": "A few hundred historical work orders with actual hours and property type. That converts the entire productivity block from judgement into fitted parameters, and it is a small ask."
}