$ python3 packs/variance-bridge/skills/budget-vs-actual/scripts/bva.py --input examples/ch06/fixtures/pnl-zero-budget.csv --output /tmp/run/output/bva.json
YTD 2025 revenue $11,238K vs budget $11,600K, variance ($362K); operating income $388K vs $703K, variance ($315K); reconciles. Wrote /tmp/run/output/bva.json
exit 0
$ python3 -c "import json; d = json.load(open('/tmp/run/output/bva.json'))['display']; print(json.dumps([x for x in d['ytd']['lines'] if x['line_item'] == 'Other operating'], indent=2))"
[
  {
    "line_item": "Other operating",
    "category": "Opex",
    "actual": "$120K",
    "budget": "$0K",
    "variance": "($120K)",
    "variance_pct": "n/a",
    "direction": "unfavourable"
  }
]
$ python3 -c "import json; d = json.load(open('/tmp/run/output/bva.json'))['display']; print(json.dumps(d['movers']['unfavourable'][0], indent=2))"
{
  "line_item": "Other operating",
  "variance": "($120K)",
  "variance_pct": "n/a"
}
