GRIDSHIFT gives a Scope 2 reviewer one defensible answer per report: accept it, correct it exactly, or withhold it until named evidence arrives. The data never leaves your browser.
Inspiration
Companies report Scope 2 purchased-electricity emissions, and a reviewer has to make the same call every time: accept the total, correct it, or hold it back. Spreadsheets make it easy to miss a kWh/MWh mix-up, a duplicate bill or an overlapping period. We wanted a tool that makes that call reproducibly and shows its working.
What it does
GRIDSHIFT checks a reported purchased-electricity emissions total against its supporting records and returns one of three results:
- ACCEPT: the total is supported.
- CORRECT: an exact, supported corrected total.
- WITHHOLD: held until specifically named evidence is supplied.
It uses South Africa's official 2024 national grid emission factor, 0.960 tCO2e/MWh (DFFE, Government Gazette 55353, Notice 7891). Malformed input files are rejected at intake and kept in a bounded quarantine with a diagnostic export of the original bytes. No calculation or acceptance runs on them.
How we built it
A Python reconciliation engine using exact decimal arithmetic, run natively and in the browser through Pyodide in a Web Worker, so the evidence stays on the reviewer's machine. Expected outcomes were frozen and hashed before evaluation.
Results (honest numbers)
- 157 Python tests, 61 web tests, 5 Node scripts and the Chromium UI specs pass on the published build.
- On our 31-case test set, 4 cases didn't match their frozen expected result in either runtime (8 misses across native and browser) and 1 differed only in message wording, all disclosed with explanations. The message-wording difference is fixed in the published build.
- A separate 40-case answer key was checked independently by a software agent (not a human expert) and no errors were found. The software has not yet been scored against it.
- These synthetic cases show how the software behaves. They do not prove that reviewers using it beat a competent spreadsheet; that comparison is designed and is next.
- A real-browser test on the pre-panel build confirmed three malformed files are quarantined at intake with a byte-exact diagnostic export and no calculation.
Challenges
Keeping three different outcomes apart: rejecting a bad file, quarantining it for inspection, and withholding a valid claim for missing evidence. And refusing to overclaim results we hadn't measured.
What we learned
Freeze expectations before running, keep every miss on record, and separate "the software behaves correctly" from "the product is useful".
Known limitations
- Needs internet access on first load, because Pyodide loads from a CDN.
- Malformed files open in a quarantine panel and are never treated as a withheld result; the collapsed technical details still show the engine's internal label, which is fixed in the next update.
- One maintenance check (the protected-file hash allowlist) is out of date after late UI changes; the frozen test artifacts still verify.
- The factor ID
ZA_NGGEF_2024_DFFE_2026is our own label; the value comes from the Gazette.
Code
https://github.com/LLoliwe/gridshift-assurance/tree/lane-b/r1-public
Built With
- css3
- html5
- javascript
- pyodide
- python
Log in or sign up for Devpost to join the conversation.