FA-12246 / Power metering accounting / Open access
Per-phase direction registers are collapsed before settlement · case 01
Per-phase direction registers are collapsed before settlement.
ROOT CAUSE
Summing phases before direction classification cancels separately billable registers.
VERIFIED REPAIR
Classify each phase before summing its direction register.
Unsuccessful approach: Absolute energy fixes missing magnitude but relabels exports as imports.
Case contract
For signed simultaneous phase energies, positive means import. Return [sum of positive phases, absolute sum of negative phases]. The modeled meter records import and export separately without cross-phase netting.
Why this case matters
Meter settlement depends on explicit register and tariff policies; this controlled model makes that policy observable.
1 / The failure
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(phases):
v=sum(phases)
return [max(v,0),max(-v,0)]
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
check('simultaneous directions', solve([3*N,-2*N,0]), [3*N,2*N])
check('balanced phases', solve([N,-N]), [N,N])
check('all import', solve([N,2*N]), [3*N,0])
check('all export', solve([-N,-2*N]), [0,3*N])
check('idle', solve([0,0,0]), [0,0])
check('single export', solve([-N]), [0,N])
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
| Boundary fixture | Actual | Expected | Outcome |
|---|---|---|---|
| simultaneous directions | [1, 0] | [3, 2] | Failed |
| balanced phases | [0, 0] | [1, 1] | Failed |
| all import | [3, 0] | [3, 0] | Passed |
| all export | [0, 3] | [0, 3] | Passed |
| idle | [0, 0] | [0, 0] | Passed |
| single export | [0, 1] | [0, 1] | Passed |
SHA-256 / 2387a5efce57c1a8b188fca2336dcfa86cd3f197eb0a5d131cb99eb301d95353
2 / The unsuccessful fix
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(phases):
return [sum(abs(v) for v in phases),0]
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
check('simultaneous directions', solve([3*N,-2*N,0]), [3*N,2*N])
check('balanced phases', solve([N,-N]), [N,N])
check('all import', solve([N,2*N]), [3*N,0])
check('all export', solve([-N,-2*N]), [0,3*N])
check('idle', solve([0,0,0]), [0,0])
check('single export', solve([-N]), [0,N])
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
| Boundary fixture | Actual | Expected | Outcome |
|---|---|---|---|
| simultaneous directions | [5, 0] | [3, 2] | Failed |
| balanced phases | [2, 0] | [1, 1] | Failed |
| all import | [3, 0] | [3, 0] | Passed |
| all export | [3, 0] | [0, 3] | Failed |
| idle | [0, 0] | [0, 0] | Passed |
| single export | [1, 0] | [0, 1] | Failed |
SHA-256 / 3cb346b9b6569047565c721eaf080d3352682c28c9824422c3fd4b86e132a5e7
3 / The verified repair
Exit 0"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(phases):
return [sum(max(v,0) for v in phases),sum(max(-v,0) for v in phases)]
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
check('simultaneous directions', solve([3*N,-2*N,0]), [3*N,2*N])
check('balanced phases', solve([N,-N]), [N,N])
check('all import', solve([N,2*N]), [3*N,0])
check('all export', solve([-N,-2*N]), [0,3*N])
check('idle', solve([0,0,0]), [0,0])
check('single export', solve([-N]), [0,N])
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
| Boundary fixture | Actual | Expected | Outcome |
|---|---|---|---|
| simultaneous directions | [3, 2] | [3, 2] | Passed |
| balanced phases | [1, 1] | [1, 1] | Passed |
| all import | [3, 0] | [3, 0] | Passed |
| all export | [0, 3] | [0, 3] | Passed |
| idle | [0, 0] | [0, 0] | Passed |
| single export | [0, 1] | [0, 1] | Passed |
SHA-256 / 02d6dcf7b035b7a2cab2e11a65c8ca9d7afb7b5e22ef36083158f25bfec95654
Verification & scope
Simplified integer-energy accounting model; no hardware protocol, legal tariff, measurement uncertainty, or live grid behavior is represented. This reproducer isolates one failure mechanism. Results cover the supplied fixtures. Variants within a family share a test contract and should remain grouped when constructing evaluation splits. Related mechanisms with a shared evaluation_group must also remain together; these controlled models are not independent production incidents.
Observations recorded using Python 3.12.14 at 2026-09-29T14:38:55.138535+00:00.
Case digest / 1b5eb54fb15f6a5bef73dbde54637d37b9f5c527d84eca01471f75e58e9468a0