Methodology · methodology-v1

Versioned calculations, read twice before they ship.

Every CSV row Cabroot produces — Scope-3, monthly, CMAQ — is stamped with methodology-v1. This page is the tie-back surface: the formula + EPA constants + plain-English assumptions live here, in versioned blocks, so a sponsor, grant reviewer, or sustainability auditor can replay any number in a downloaded CSV against this page by hand.

Current pin
methodology-v1— all export bundles
/methodology— approved tie-back URL

Bumping the pin to methodology-v2 re-stamps every Scope-3 + monthly CSV row at once — the same line on /dashboard/reports/scope3 and /dashboard/reports.

01 · Formulas

Four versions of the same math.

Each card is the live expression the report runner writes, with a plain-English one-liner and the basis string the per-row "co2Basis" column renders. Crib from one of these directly into your replay spreadsheet.

4 calculations · methodology-v1
Cost per rider
methodology-v1
costPerRiderUsd = (program.monthlySubsidyCents ÷ 100) × riderShare ÷ riders

Program-level monthly subsidy, prorated across van groups by capacity share, divided by the group's actual rider count for the month.

Basis
  • subsidyUsd = monthlySubsidyUsd × riderShare (riderShare = groupCapacity ÷ totalCapacity)
  • costPerRiderUsd = subsidyUsd ÷ riders (riders from live monthly RidershipEntry check-ins; falls back to seeded monthlyRidesCount × riderShare when no entries exist)

Pro-rata by capacity share keeps the sum of per-group subsidies exactly equal to the program total — no double counting, no rounding drift.

CO₂ avoided (kg)
methodology-v1
co2AvoidedKg = riders × (program.co2FactorKgPerMile × DEFAULT_SOLO_COMMUTE_MILES)

One-way solo-commute baseline (10 mi) × the per-tenant EPA passenger-vehicle CO₂ factor, multiplied by the number of riders for the month.

Basis
  • baselineKgPerRider = 0.404 kg/mi × 10 mi = 4.04 kg/rider (matched-by-hand against the seeded PilotProgram.co2FactorKgPerMile)
  • co2AvoidedKg = riders × baselineKgPerRider (riders from RidershipEntry.kind = "checkIn" for the current UTC month)

Tailpipe CO₂ only — does not include upstream fuel-cycle (well-to-tank) emissions. Multiply by 2 for a round-trip policy.

IRS §132(f) pre-tax utilization
methodology-v1
utilizationPercent = min(100, totalEnrolledCents ÷ irsMonthlyCapCents × 100)

Sum of enrolled cents across eligible commuters for the month, divided by the program-level IRS monthly cap, capped at 100%.

Basis
  • enrolledCents per commuter = min(irsMonthlyCapCents, monthlyVanFareCents) — limited to the lesser of the IRS cap and the actual van fare
  • program enrolment is a (groupCapacity ÷ totalGroupCapacity) split of totalEnrolledCents — the per-group ro rata matches the same logic the monthly report applies to subsidy
  • IRS_MONTHLY_CAP_CENTS_DEFAULT = 31,500 (the 2024+ §132(f) transit-pass monthly exclusion, mirrored on PilotProgram.irsMonthlyCapCents so a sponsor override is a one-row update)

Until a single BenefitEnrollment row exists for the (program, month) pair, the monthly report renders the literal "0.0%" with a pendingReason pointer to /dashboard/benefits — never silently zero-pads a missing metric.

Scope-3 emissions (gallons + CO₂)
methodology-v1
gallonsAvoided = (riders × co2FactorKgPerMile × soloCommuteMilesOneWay) ÷ KG_CO2_PER_GALLON_GASOLINE

The Scope-3 decomposition of the CO₂-avoided figure into gallons of motor gasoline avoided, using the EPA factor of 8.887 kg CO₂ per gallon. Categorised under GHG-Protocol Scope 3 category 7 / 13 (commuter travel).

Basis
  • KG_CO2_PER_GALLON_GASOLINE = 8.887 (EPA GHG Equivalencies — passenger-vehicle tailpipe)
  • gallonsAvoided = co2AvoidedKg ÷ 8.887; round-trip auditors multiply miles by 2
  • Per-tenant CO₂ factor lives on PilotProgram.co2FactorKgPerMile (seeded 0.404 kg/mi) — a per-sponsor override re-routes the formula without a code change.

One-way assumption; round-trip auditors multiply by 2. Tailpipe-only boundary documented in /methodology.

02 · Assumptions

The constants, called out line by line.

Every assumption a sponsor could push back on is on this page in plain English, with the literal value (or the row that owns it) and a note explaining where it shows up in the report. If a constant moves, bump methodology-v1 and ship.

AssumptionValueWhy it's there
Solo-commute miles (one-way)10 miDEFAULT_SOLO_COMMUTE_MILES in src/lib/business/reports.ts. Common one-way commute length used when a tenant hasn't supplied a sponsor override. Auditor middleware: multiply by 2 for a round-trip policy.
Per-tenant CO₂ factorPilotProgram.co2FactorKgPerMileEPA passenger-vehicle average (≈0.404 kg/mi) lives on the seeded PilotProgram row so a future per-tenant override re-routes the formula without a code change.
CO₂ per gallon of motor gasoline8.887 kg CO₂ / galEPA GHG Equivalencies — passenger-vehicle tailpipe. Used to translate CO₂-avoided (kg) into gallons of gasoline avoided.
IRS §132(f) monthly transit-pass cap$315.00 (31,500¢)IRS_MONTHLY_CAP_CENTS_DEFAULT in src/lib/business/commuter-benefits.ts. Mirrored on PilotProgram.irsMonthlyCapCents so a sponsor override is a one-row update — the 2024+ transit-pass monthly exclusion limit.
Vanpool-qualified min route distance0.5 mi (max pairwise, great-circle)VANPOOL_DISTANCE_MIN_MI_DEFAULT in src/lib/business/commuter-benefits.ts. Measles eligibility — a match counts as IRS-eligible vanpool when the maximum pairwise great-circle distance across the stops is ≥ 0.5 mi.
Van occupancy denominator (CMAQ)∑(vanGroupCount × operatingDays × vanCapacity) / vanGroupCountPeak capacity × operating days × # van groups; mirrors the CMAQ ridership-compliance report's occupancy formula so an auditor comparing the two views sees matching service-period windows.
Distance calculationGreat-circle, pairwisedistanceMiles() in src/lib/business/commuter-benefits.ts — Haversine on (lat, lng). No third-party routing API dependency, so the row reads back to the page deterministically.
Round-trip policyOne-way; auditors multiply by 2Default one-way assumption; a sponsor that runs a quarter-based or round-trip policy multiplies the per-rider baseline by 2. The monthly report renders the unadjusted figure and the doc states this explicitly so an auditor doesn't double-count.
Reporting month windowCalendar month in UTCcurrentUtcMonth() in src/lib/business/{reports,scope3-export,cmaq-export}.ts. Ridership rows also use UTC (utcDayBounds in ridership-log.ts) — staying UTC keeps the day-window deterministic across server timezones.
Solo-commute USD per mile$0.67 / miDEFAULT_SOLO_COMMUTE_USD_PER_MILE in src/lib/business/methodology.ts (currently $0.67/mi, the IRS standard business-mileage rate). Same constant the rider /dashboard/my-trips page multiplies by DEFAULT_SOLO_COMMUTE_MILES to express the per-ride "cost saved vs. solo commute" figure in dollars.
Tie back to live figures

A doc that lines up with the live numbers.

Every formula on this page re-executes against the program that wrote the numbers behind these two links. Stamps match (same methodology-v1), windows match (current UTC month), and a coach audit pass on either page reproduces the other.

Live figures

Scope-3 rollup

Gallons avoided, CO₂ avoided (kg), per-rider baseline — methodology-version stamped on every CSV export.

Open the Scope-3 bundle
Live figures

Monthly report

Cost-per-rider, IRS pre-tax benefit utilization, CO₂ avoided (kg) — live per-(tenant × month) figures.

Open the monthly report
Reproduction by hand

Two paths from this page to the numbers behind it. Both end with the same stamp: methodology-v1 — a coach-audit-grade replay for any reviewer.

  1. Read the leading Methodology Version row on the CSV (or pill at the top of /dashboard/reports/scope3) and confirm it matches methodology-v1.
  2. Read Methodology Tieback and confirm the URL is /methodology.
  3. For each calculation the CSV surfaces, jump to the matching card on this page and recompute using only the values in the CSV preamble + column headers. Spot-check against the constants listed in the assumption table.
Cost per rider
  1. · subsidyUsd = monthlySubsidyUsd × (groupCapacity ÷ totalCapacity)
  2. · riders = Σ RidershipEntry.headCount for the group’s check-ins this month
  3. · costPerRiderUsd = subsidyUsd ÷ riders
IRS §132(f) utilization
  1. · totalEnrolledCents = Σ BenefitEnrollment.enrolledCents (eligible, this month)
  2. · utilizationPercent = min(100, totalEnrolledCents ÷ irsMonthlyCapCents × 100)
  3. · Per-group slice = enrolledCents × (groupCapacity ÷ totalGroupCapacity)
Scope 3 (gallons avoided)
  1. · baselineKgPerRider = co2FactorKgPerMile × soloCommuteMilesOneWay
  2. · co2AvoidedKg = totalRiders × baselineKgPerRider
  3. · gallonsAvoided = co2AvoidedKg ÷ 8.887 (EPA motor-gasoline factor)