2026-09-12 07:35:35 +00:00
|
|
|
[
|
|
|
|
|
{
|
|
|
|
|
"section": "Vehicle Costs",
|
|
|
|
|
"description": "Tracking",
|
|
|
|
|
"gl_account": "",
|
|
|
|
|
"supplier": "",
|
|
|
|
|
"qty": 0,
|
|
|
|
|
"unit_price": 0,
|
|
|
|
|
"amount_excl": 4524.0740000000005,
|
|
|
|
|
"vat": 798.366,
|
|
|
|
|
"amount_incl": 5322.4400000000005
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"section": "Vehicle Costs",
|
|
|
|
|
"description": "Diesel Truck",
|
|
|
|
|
"gl_account": "",
|
|
|
|
|
"supplier": "",
|
|
|
|
|
"qty": 0,
|
|
|
|
|
"unit_price": 0,
|
|
|
|
|
"amount_excl": 1033.2916666666667,
|
Round 3 (Parts A-B): charts fixes + expenses/overheads cleanup
- A.1: fixed_expenses per month now threaded through to chart bucket
- A.2: null = no data (forecast), 0 = real plotted zero — distinguishable
- A.3: x-axis clipped to last actual month (IncomeAreaChart + IncomeBarChart + MachineLineChart)
- A.4: chart hues as CSS vars (--color-chart-income/fixed/running) — deeper steps of same hues, validated for CVD
- A.5: chart-type toggle (Lines / Cost stack / Profit) + localStorage persistence + dynamic legend
- A.6: profit on charts page comes from computeProfit()
- B.1: deleted /expenses/plant-overheads, /expenses/insurance, /expenses/tracking (all empty); added /expenses/vehicles; ExpenseSectionPage now has an empty state
- B.2: captured R 157,200 Personnel block, R 100,000 Maintenance, R 10,000 Petty Cash; roll-up reconciles to R 675,162.93 (= sum of non-Plant non-Santam rows; workbook grand total R 1,110,486.87 is internally off by R 14,477.56 vs its own rows)
- B.3: seed flags incl<excl, VAT>20%, broken VAT math — does NOT silently correct; 4 anomalies reported on Charl-CCS + Buildsmart
- B.4: noted that workbook Vehicle Costs subtotal skips Santam (app R 9,673.87 is correct; workbook is wrong)
- B.2 reconciliation assertion added to verify-cost-reconciliation.mjs
- Sidebar updated: Vehicles added, Insurance/Tracking/Plant-Overheads removed
2026-09-12 09:24:18 +00:00
|
|
|
"vat": 0.0,
|
2026-09-12 07:35:35 +00:00
|
|
|
"amount_incl": 1033.2916666666667
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"section": "Vehicle Costs",
|
|
|
|
|
"description": "Water truck",
|
|
|
|
|
"gl_account": "",
|
|
|
|
|
"supplier": "",
|
|
|
|
|
"qty": 0,
|
|
|
|
|
"unit_price": 0,
|
|
|
|
|
"amount_excl": 3318.1416666666664,
|
Round 3 (Parts A-B): charts fixes + expenses/overheads cleanup
- A.1: fixed_expenses per month now threaded through to chart bucket
- A.2: null = no data (forecast), 0 = real plotted zero — distinguishable
- A.3: x-axis clipped to last actual month (IncomeAreaChart + IncomeBarChart + MachineLineChart)
- A.4: chart hues as CSS vars (--color-chart-income/fixed/running) — deeper steps of same hues, validated for CVD
- A.5: chart-type toggle (Lines / Cost stack / Profit) + localStorage persistence + dynamic legend
- A.6: profit on charts page comes from computeProfit()
- B.1: deleted /expenses/plant-overheads, /expenses/insurance, /expenses/tracking (all empty); added /expenses/vehicles; ExpenseSectionPage now has an empty state
- B.2: captured R 157,200 Personnel block, R 100,000 Maintenance, R 10,000 Petty Cash; roll-up reconciles to R 675,162.93 (= sum of non-Plant non-Santam rows; workbook grand total R 1,110,486.87 is internally off by R 14,477.56 vs its own rows)
- B.3: seed flags incl<excl, VAT>20%, broken VAT math — does NOT silently correct; 4 anomalies reported on Charl-CCS + Buildsmart
- B.4: noted that workbook Vehicle Costs subtotal skips Santam (app R 9,673.87 is correct; workbook is wrong)
- B.2 reconciliation assertion added to verify-cost-reconciliation.mjs
- Sidebar updated: Vehicles added, Insurance/Tracking/Plant-Overheads removed
2026-09-12 09:24:18 +00:00
|
|
|
"vat": 0.0,
|
2026-09-12 07:35:35 +00:00
|
|
|
"amount_incl": 3318.1416666666664
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"section": "Bastion Finance",
|
|
|
|
|
"description": "TLB 4 LL20TW GP - Monthly Finance Costs",
|
|
|
|
|
"gl_account": "Finance Costs",
|
|
|
|
|
"supplier": "Bastion",
|
|
|
|
|
"qty": 0,
|
|
|
|
|
"unit_price": 0,
|
|
|
|
|
"amount_excl": 29036.08,
|
Round 3 (Parts A-B): charts fixes + expenses/overheads cleanup
- A.1: fixed_expenses per month now threaded through to chart bucket
- A.2: null = no data (forecast), 0 = real plotted zero — distinguishable
- A.3: x-axis clipped to last actual month (IncomeAreaChart + IncomeBarChart + MachineLineChart)
- A.4: chart hues as CSS vars (--color-chart-income/fixed/running) — deeper steps of same hues, validated for CVD
- A.5: chart-type toggle (Lines / Cost stack / Profit) + localStorage persistence + dynamic legend
- A.6: profit on charts page comes from computeProfit()
- B.1: deleted /expenses/plant-overheads, /expenses/insurance, /expenses/tracking (all empty); added /expenses/vehicles; ExpenseSectionPage now has an empty state
- B.2: captured R 157,200 Personnel block, R 100,000 Maintenance, R 10,000 Petty Cash; roll-up reconciles to R 675,162.93 (= sum of non-Plant non-Santam rows; workbook grand total R 1,110,486.87 is internally off by R 14,477.56 vs its own rows)
- B.3: seed flags incl<excl, VAT>20%, broken VAT math — does NOT silently correct; 4 anomalies reported on Charl-CCS + Buildsmart
- B.4: noted that workbook Vehicle Costs subtotal skips Santam (app R 9,673.87 is correct; workbook is wrong)
- B.2 reconciliation assertion added to verify-cost-reconciliation.mjs
- Sidebar updated: Vehicles added, Insurance/Tracking/Plant-Overheads removed
2026-09-12 09:24:18 +00:00
|
|
|
"vat": 0.0,
|
2026-09-12 07:35:35 +00:00
|
|
|
"amount_incl": 29036.08
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"section": "Bastion Finance",
|
|
|
|
|
"description": "TLB 5 LN58CS GP - Monthly Finance Costs",
|
|
|
|
|
"gl_account": "Finance Costs",
|
|
|
|
|
"supplier": "Bastion",
|
|
|
|
|
"qty": 0,
|
|
|
|
|
"unit_price": 0,
|
Round 3 (Parts A-B): charts fixes + expenses/overheads cleanup
- A.1: fixed_expenses per month now threaded through to chart bucket
- A.2: null = no data (forecast), 0 = real plotted zero — distinguishable
- A.3: x-axis clipped to last actual month (IncomeAreaChart + IncomeBarChart + MachineLineChart)
- A.4: chart hues as CSS vars (--color-chart-income/fixed/running) — deeper steps of same hues, validated for CVD
- A.5: chart-type toggle (Lines / Cost stack / Profit) + localStorage persistence + dynamic legend
- A.6: profit on charts page comes from computeProfit()
- B.1: deleted /expenses/plant-overheads, /expenses/insurance, /expenses/tracking (all empty); added /expenses/vehicles; ExpenseSectionPage now has an empty state
- B.2: captured R 157,200 Personnel block, R 100,000 Maintenance, R 10,000 Petty Cash; roll-up reconciles to R 675,162.93 (= sum of non-Plant non-Santam rows; workbook grand total R 1,110,486.87 is internally off by R 14,477.56 vs its own rows)
- B.3: seed flags incl<excl, VAT>20%, broken VAT math — does NOT silently correct; 4 anomalies reported on Charl-CCS + Buildsmart
- B.4: noted that workbook Vehicle Costs subtotal skips Santam (app R 9,673.87 is correct; workbook is wrong)
- B.2 reconciliation assertion added to verify-cost-reconciliation.mjs
- Sidebar updated: Vehicles added, Insurance/Tracking/Plant-Overheads removed
2026-09-12 09:24:18 +00:00
|
|
|
"amount_excl": 29819.0,
|
|
|
|
|
"vat": 0.0,
|
|
|
|
|
"amount_incl": 29819.0
|
2026-09-12 07:35:35 +00:00
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"section": "Bastion Finance",
|
|
|
|
|
"description": "Desi Grader - Monthly Finance Costs",
|
|
|
|
|
"gl_account": "Finance Costs",
|
|
|
|
|
"supplier": "Bastion",
|
|
|
|
|
"qty": 0,
|
|
|
|
|
"unit_price": 0,
|
|
|
|
|
"amount_excl": 19088.95,
|
Round 3 (Parts A-B): charts fixes + expenses/overheads cleanup
- A.1: fixed_expenses per month now threaded through to chart bucket
- A.2: null = no data (forecast), 0 = real plotted zero — distinguishable
- A.3: x-axis clipped to last actual month (IncomeAreaChart + IncomeBarChart + MachineLineChart)
- A.4: chart hues as CSS vars (--color-chart-income/fixed/running) — deeper steps of same hues, validated for CVD
- A.5: chart-type toggle (Lines / Cost stack / Profit) + localStorage persistence + dynamic legend
- A.6: profit on charts page comes from computeProfit()
- B.1: deleted /expenses/plant-overheads, /expenses/insurance, /expenses/tracking (all empty); added /expenses/vehicles; ExpenseSectionPage now has an empty state
- B.2: captured R 157,200 Personnel block, R 100,000 Maintenance, R 10,000 Petty Cash; roll-up reconciles to R 675,162.93 (= sum of non-Plant non-Santam rows; workbook grand total R 1,110,486.87 is internally off by R 14,477.56 vs its own rows)
- B.3: seed flags incl<excl, VAT>20%, broken VAT math — does NOT silently correct; 4 anomalies reported on Charl-CCS + Buildsmart
- B.4: noted that workbook Vehicle Costs subtotal skips Santam (app R 9,673.87 is correct; workbook is wrong)
- B.2 reconciliation assertion added to verify-cost-reconciliation.mjs
- Sidebar updated: Vehicles added, Insurance/Tracking/Plant-Overheads removed
2026-09-12 09:24:18 +00:00
|
|
|
"vat": 0.0,
|
2026-09-12 07:35:35 +00:00
|
|
|
"amount_incl": 19088.95
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"section": "Bastion Finance",
|
|
|
|
|
"description": "Roller - Monthly Finance Cost",
|
|
|
|
|
"gl_account": "Finance Costs",
|
|
|
|
|
"supplier": "Bastion",
|
|
|
|
|
"qty": 0,
|
|
|
|
|
"unit_price": 0,
|
Round 3 (Parts A-B): charts fixes + expenses/overheads cleanup
- A.1: fixed_expenses per month now threaded through to chart bucket
- A.2: null = no data (forecast), 0 = real plotted zero — distinguishable
- A.3: x-axis clipped to last actual month (IncomeAreaChart + IncomeBarChart + MachineLineChart)
- A.4: chart hues as CSS vars (--color-chart-income/fixed/running) — deeper steps of same hues, validated for CVD
- A.5: chart-type toggle (Lines / Cost stack / Profit) + localStorage persistence + dynamic legend
- A.6: profit on charts page comes from computeProfit()
- B.1: deleted /expenses/plant-overheads, /expenses/insurance, /expenses/tracking (all empty); added /expenses/vehicles; ExpenseSectionPage now has an empty state
- B.2: captured R 157,200 Personnel block, R 100,000 Maintenance, R 10,000 Petty Cash; roll-up reconciles to R 675,162.93 (= sum of non-Plant non-Santam rows; workbook grand total R 1,110,486.87 is internally off by R 14,477.56 vs its own rows)
- B.3: seed flags incl<excl, VAT>20%, broken VAT math — does NOT silently correct; 4 anomalies reported on Charl-CCS + Buildsmart
- B.4: noted that workbook Vehicle Costs subtotal skips Santam (app R 9,673.87 is correct; workbook is wrong)
- B.2 reconciliation assertion added to verify-cost-reconciliation.mjs
- Sidebar updated: Vehicles added, Insurance/Tracking/Plant-Overheads removed
2026-09-12 09:24:18 +00:00
|
|
|
"amount_excl": 28641.0,
|
2026-09-12 07:35:35 +00:00
|
|
|
"vat": 0,
|
Round 3 (Parts A-B): charts fixes + expenses/overheads cleanup
- A.1: fixed_expenses per month now threaded through to chart bucket
- A.2: null = no data (forecast), 0 = real plotted zero — distinguishable
- A.3: x-axis clipped to last actual month (IncomeAreaChart + IncomeBarChart + MachineLineChart)
- A.4: chart hues as CSS vars (--color-chart-income/fixed/running) — deeper steps of same hues, validated for CVD
- A.5: chart-type toggle (Lines / Cost stack / Profit) + localStorage persistence + dynamic legend
- A.6: profit on charts page comes from computeProfit()
- B.1: deleted /expenses/plant-overheads, /expenses/insurance, /expenses/tracking (all empty); added /expenses/vehicles; ExpenseSectionPage now has an empty state
- B.2: captured R 157,200 Personnel block, R 100,000 Maintenance, R 10,000 Petty Cash; roll-up reconciles to R 675,162.93 (= sum of non-Plant non-Santam rows; workbook grand total R 1,110,486.87 is internally off by R 14,477.56 vs its own rows)
- B.3: seed flags incl<excl, VAT>20%, broken VAT math — does NOT silently correct; 4 anomalies reported on Charl-CCS + Buildsmart
- B.4: noted that workbook Vehicle Costs subtotal skips Santam (app R 9,673.87 is correct; workbook is wrong)
- B.2 reconciliation assertion added to verify-cost-reconciliation.mjs
- Sidebar updated: Vehicles added, Insurance/Tracking/Plant-Overheads removed
2026-09-12 09:24:18 +00:00
|
|
|
"amount_incl": 28641.0
|
2026-09-12 07:35:35 +00:00
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"section": "Bastion Finance",
|
|
|
|
|
"description": "TLB 4 LL20TW GP - Insurance",
|
|
|
|
|
"gl_account": "Insurance",
|
|
|
|
|
"supplier": "Bastion",
|
|
|
|
|
"qty": 0,
|
|
|
|
|
"unit_price": 0,
|
|
|
|
|
"amount_excl": 2088.53,
|
|
|
|
|
"vat": 313.27950000000004,
|
|
|
|
|
"amount_incl": 2401.8095000000003
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"section": "Bastion Finance",
|
|
|
|
|
"description": "TLB 5 LN58CS GP - Insurance",
|
|
|
|
|
"gl_account": "Insurance",
|
|
|
|
|
"supplier": "Bastion",
|
|
|
|
|
"qty": 0,
|
|
|
|
|
"unit_price": 0,
|
|
|
|
|
"amount_excl": 2432.72,
|
|
|
|
|
"vat": 364.90799999999996,
|
|
|
|
|
"amount_incl": 2797.6279999999997
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"section": "Bastion Finance",
|
|
|
|
|
"description": "Desi Grader - Insurance",
|
|
|
|
|
"gl_account": "Insurance",
|
|
|
|
|
"supplier": "Bastion",
|
|
|
|
|
"qty": 0,
|
|
|
|
|
"unit_price": 0,
|
|
|
|
|
"amount_excl": 2099.21,
|
|
|
|
|
"vat": 314.8815,
|
|
|
|
|
"amount_incl": 2414.0915
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"section": "Bastion Finance",
|
|
|
|
|
"description": "Roller - Insurance",
|
|
|
|
|
"gl_account": "Insurance",
|
|
|
|
|
"supplier": "Bastion",
|
|
|
|
|
"qty": 0,
|
|
|
|
|
"unit_price": 0,
|
|
|
|
|
"amount_excl": 1268.91,
|
|
|
|
|
"vat": 190.3365,
|
|
|
|
|
"amount_incl": 1459.2465000000002
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"section": "Bastion Finance",
|
|
|
|
|
"description": "TLB 4 LL20TW GP - Tracker",
|
|
|
|
|
"gl_account": "Tracking",
|
|
|
|
|
"supplier": "Bastion",
|
|
|
|
|
"qty": 0,
|
|
|
|
|
"unit_price": 0,
|
|
|
|
|
"amount_excl": 603.92,
|
|
|
|
|
"vat": 90.588,
|
|
|
|
|
"amount_incl": 694.5079999999999
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"section": "Bastion Finance",
|
|
|
|
|
"description": "TLB 5 LN58CS GP - Tracker",
|
|
|
|
|
"gl_account": "Tracking",
|
|
|
|
|
"supplier": "Bastion",
|
|
|
|
|
"qty": 0,
|
|
|
|
|
"unit_price": 0,
|
|
|
|
|
"amount_excl": 526.43,
|
|
|
|
|
"vat": 78.96449999999999,
|
|
|
|
|
"amount_incl": 605.3944999999999
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"section": "Bastion Finance",
|
Round 3 (Parts A-B): charts fixes + expenses/overheads cleanup
- A.1: fixed_expenses per month now threaded through to chart bucket
- A.2: null = no data (forecast), 0 = real plotted zero — distinguishable
- A.3: x-axis clipped to last actual month (IncomeAreaChart + IncomeBarChart + MachineLineChart)
- A.4: chart hues as CSS vars (--color-chart-income/fixed/running) — deeper steps of same hues, validated for CVD
- A.5: chart-type toggle (Lines / Cost stack / Profit) + localStorage persistence + dynamic legend
- A.6: profit on charts page comes from computeProfit()
- B.1: deleted /expenses/plant-overheads, /expenses/insurance, /expenses/tracking (all empty); added /expenses/vehicles; ExpenseSectionPage now has an empty state
- B.2: captured R 157,200 Personnel block, R 100,000 Maintenance, R 10,000 Petty Cash; roll-up reconciles to R 675,162.93 (= sum of non-Plant non-Santam rows; workbook grand total R 1,110,486.87 is internally off by R 14,477.56 vs its own rows)
- B.3: seed flags incl<excl, VAT>20%, broken VAT math — does NOT silently correct; 4 anomalies reported on Charl-CCS + Buildsmart
- B.4: noted that workbook Vehicle Costs subtotal skips Santam (app R 9,673.87 is correct; workbook is wrong)
- B.2 reconciliation assertion added to verify-cost-reconciliation.mjs
- Sidebar updated: Vehicles added, Insurance/Tracking/Plant-Overheads removed
2026-09-12 09:24:18 +00:00
|
|
|
"description": "Toyota Bakkie - LD13HZ GP ",
|
2026-09-12 07:35:35 +00:00
|
|
|
"gl_account": "Finance Costs",
|
|
|
|
|
"supplier": "Bastion",
|
|
|
|
|
"qty": 0,
|
|
|
|
|
"unit_price": 0,
|
|
|
|
|
"amount_excl": 7818.18,
|
|
|
|
|
"vat": 1172.727,
|
|
|
|
|
"amount_incl": 8990.907000000001
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"section": "Bastion Finance",
|
Round 3 (Parts A-B): charts fixes + expenses/overheads cleanup
- A.1: fixed_expenses per month now threaded through to chart bucket
- A.2: null = no data (forecast), 0 = real plotted zero — distinguishable
- A.3: x-axis clipped to last actual month (IncomeAreaChart + IncomeBarChart + MachineLineChart)
- A.4: chart hues as CSS vars (--color-chart-income/fixed/running) — deeper steps of same hues, validated for CVD
- A.5: chart-type toggle (Lines / Cost stack / Profit) + localStorage persistence + dynamic legend
- A.6: profit on charts page comes from computeProfit()
- B.1: deleted /expenses/plant-overheads, /expenses/insurance, /expenses/tracking (all empty); added /expenses/vehicles; ExpenseSectionPage now has an empty state
- B.2: captured R 157,200 Personnel block, R 100,000 Maintenance, R 10,000 Petty Cash; roll-up reconciles to R 675,162.93 (= sum of non-Plant non-Santam rows; workbook grand total R 1,110,486.87 is internally off by R 14,477.56 vs its own rows)
- B.3: seed flags incl<excl, VAT>20%, broken VAT math — does NOT silently correct; 4 anomalies reported on Charl-CCS + Buildsmart
- B.4: noted that workbook Vehicle Costs subtotal skips Santam (app R 9,673.87 is correct; workbook is wrong)
- B.2 reconciliation assertion added to verify-cost-reconciliation.mjs
- Sidebar updated: Vehicles added, Insurance/Tracking/Plant-Overheads removed
2026-09-12 09:24:18 +00:00
|
|
|
"description": "Toyota Bakkie - LD13HZ GP ",
|
2026-09-12 07:35:35 +00:00
|
|
|
"gl_account": "Insurance",
|
|
|
|
|
"supplier": "Bastion",
|
|
|
|
|
"qty": 0,
|
|
|
|
|
"unit_price": 0,
|
|
|
|
|
"amount_excl": 1853.9,
|
|
|
|
|
"vat": 278.085,
|
|
|
|
|
"amount_incl": 2131.985
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"section": "Bastion Finance",
|
Round 3 (Parts A-B): charts fixes + expenses/overheads cleanup
- A.1: fixed_expenses per month now threaded through to chart bucket
- A.2: null = no data (forecast), 0 = real plotted zero — distinguishable
- A.3: x-axis clipped to last actual month (IncomeAreaChart + IncomeBarChart + MachineLineChart)
- A.4: chart hues as CSS vars (--color-chart-income/fixed/running) — deeper steps of same hues, validated for CVD
- A.5: chart-type toggle (Lines / Cost stack / Profit) + localStorage persistence + dynamic legend
- A.6: profit on charts page comes from computeProfit()
- B.1: deleted /expenses/plant-overheads, /expenses/insurance, /expenses/tracking (all empty); added /expenses/vehicles; ExpenseSectionPage now has an empty state
- B.2: captured R 157,200 Personnel block, R 100,000 Maintenance, R 10,000 Petty Cash; roll-up reconciles to R 675,162.93 (= sum of non-Plant non-Santam rows; workbook grand total R 1,110,486.87 is internally off by R 14,477.56 vs its own rows)
- B.3: seed flags incl<excl, VAT>20%, broken VAT math — does NOT silently correct; 4 anomalies reported on Charl-CCS + Buildsmart
- B.4: noted that workbook Vehicle Costs subtotal skips Santam (app R 9,673.87 is correct; workbook is wrong)
- B.2 reconciliation assertion added to verify-cost-reconciliation.mjs
- Sidebar updated: Vehicles added, Insurance/Tracking/Plant-Overheads removed
2026-09-12 09:24:18 +00:00
|
|
|
"description": "Toyota Bakkie - LD13HZ GP ",
|
2026-09-12 07:35:35 +00:00
|
|
|
"gl_account": "Tracking",
|
|
|
|
|
"supplier": "Bastion",
|
|
|
|
|
"qty": 0,
|
|
|
|
|
"unit_price": 0,
|
|
|
|
|
"amount_excl": 216.91,
|
|
|
|
|
"vat": 32.536500000000004,
|
|
|
|
|
"amount_incl": 249.44650000000001
|
|
|
|
|
},
|
2026-09-12 08:24:26 +00:00
|
|
|
{
|
|
|
|
|
"section": "Personnel",
|
Round 3 (Parts A-B): charts fixes + expenses/overheads cleanup
- A.1: fixed_expenses per month now threaded through to chart bucket
- A.2: null = no data (forecast), 0 = real plotted zero — distinguishable
- A.3: x-axis clipped to last actual month (IncomeAreaChart + IncomeBarChart + MachineLineChart)
- A.4: chart hues as CSS vars (--color-chart-income/fixed/running) — deeper steps of same hues, validated for CVD
- A.5: chart-type toggle (Lines / Cost stack / Profit) + localStorage persistence + dynamic legend
- A.6: profit on charts page comes from computeProfit()
- B.1: deleted /expenses/plant-overheads, /expenses/insurance, /expenses/tracking (all empty); added /expenses/vehicles; ExpenseSectionPage now has an empty state
- B.2: captured R 157,200 Personnel block, R 100,000 Maintenance, R 10,000 Petty Cash; roll-up reconciles to R 675,162.93 (= sum of non-Plant non-Santam rows; workbook grand total R 1,110,486.87 is internally off by R 14,477.56 vs its own rows)
- B.3: seed flags incl<excl, VAT>20%, broken VAT math — does NOT silently correct; 4 anomalies reported on Charl-CCS + Buildsmart
- B.4: noted that workbook Vehicle Costs subtotal skips Santam (app R 9,673.87 is correct; workbook is wrong)
- B.2 reconciliation assertion added to verify-cost-reconciliation.mjs
- Sidebar updated: Vehicles added, Insurance/Tracking/Plant-Overheads removed
2026-09-12 09:24:18 +00:00
|
|
|
"description": "Attie / Sandrea / Jantjie",
|
|
|
|
|
"gl_account": "Personnel",
|
2026-09-12 08:24:26 +00:00
|
|
|
"supplier": "",
|
|
|
|
|
"qty": 0,
|
|
|
|
|
"unit_price": 0,
|
|
|
|
|
"amount_excl": 0,
|
|
|
|
|
"vat": 0,
|
Round 3 (Parts A-B): charts fixes + expenses/overheads cleanup
- A.1: fixed_expenses per month now threaded through to chart bucket
- A.2: null = no data (forecast), 0 = real plotted zero — distinguishable
- A.3: x-axis clipped to last actual month (IncomeAreaChart + IncomeBarChart + MachineLineChart)
- A.4: chart hues as CSS vars (--color-chart-income/fixed/running) — deeper steps of same hues, validated for CVD
- A.5: chart-type toggle (Lines / Cost stack / Profit) + localStorage persistence + dynamic legend
- A.6: profit on charts page comes from computeProfit()
- B.1: deleted /expenses/plant-overheads, /expenses/insurance, /expenses/tracking (all empty); added /expenses/vehicles; ExpenseSectionPage now has an empty state
- B.2: captured R 157,200 Personnel block, R 100,000 Maintenance, R 10,000 Petty Cash; roll-up reconciles to R 675,162.93 (= sum of non-Plant non-Santam rows; workbook grand total R 1,110,486.87 is internally off by R 14,477.56 vs its own rows)
- B.3: seed flags incl<excl, VAT>20%, broken VAT math — does NOT silently correct; 4 anomalies reported on Charl-CCS + Buildsmart
- B.4: noted that workbook Vehicle Costs subtotal skips Santam (app R 9,673.87 is correct; workbook is wrong)
- B.2 reconciliation assertion added to verify-cost-reconciliation.mjs
- Sidebar updated: Vehicles added, Insurance/Tracking/Plant-Overheads removed
2026-09-12 09:24:18 +00:00
|
|
|
"amount_incl": 157200.0
|
2026-09-12 08:24:26 +00:00
|
|
|
},
|
2026-09-12 07:35:35 +00:00
|
|
|
{
|
|
|
|
|
"section": "Personnel",
|
|
|
|
|
"description": "Opp + Drywers",
|
Round 3 (Parts A-B): charts fixes + expenses/overheads cleanup
- A.1: fixed_expenses per month now threaded through to chart bucket
- A.2: null = no data (forecast), 0 = real plotted zero — distinguishable
- A.3: x-axis clipped to last actual month (IncomeAreaChart + IncomeBarChart + MachineLineChart)
- A.4: chart hues as CSS vars (--color-chart-income/fixed/running) — deeper steps of same hues, validated for CVD
- A.5: chart-type toggle (Lines / Cost stack / Profit) + localStorage persistence + dynamic legend
- A.6: profit on charts page comes from computeProfit()
- B.1: deleted /expenses/plant-overheads, /expenses/insurance, /expenses/tracking (all empty); added /expenses/vehicles; ExpenseSectionPage now has an empty state
- B.2: captured R 157,200 Personnel block, R 100,000 Maintenance, R 10,000 Petty Cash; roll-up reconciles to R 675,162.93 (= sum of non-Plant non-Santam rows; workbook grand total R 1,110,486.87 is internally off by R 14,477.56 vs its own rows)
- B.3: seed flags incl<excl, VAT>20%, broken VAT math — does NOT silently correct; 4 anomalies reported on Charl-CCS + Buildsmart
- B.4: noted that workbook Vehicle Costs subtotal skips Santam (app R 9,673.87 is correct; workbook is wrong)
- B.2 reconciliation assertion added to verify-cost-reconciliation.mjs
- Sidebar updated: Vehicles added, Insurance/Tracking/Plant-Overheads removed
2026-09-12 09:24:18 +00:00
|
|
|
"gl_account": "Personnel",
|
2026-09-12 07:35:35 +00:00
|
|
|
"supplier": "",
|
|
|
|
|
"qty": 0,
|
|
|
|
|
"unit_price": 0,
|
|
|
|
|
"amount_excl": 0,
|
|
|
|
|
"vat": 0,
|
Round 3 (Parts A-B): charts fixes + expenses/overheads cleanup
- A.1: fixed_expenses per month now threaded through to chart bucket
- A.2: null = no data (forecast), 0 = real plotted zero — distinguishable
- A.3: x-axis clipped to last actual month (IncomeAreaChart + IncomeBarChart + MachineLineChart)
- A.4: chart hues as CSS vars (--color-chart-income/fixed/running) — deeper steps of same hues, validated for CVD
- A.5: chart-type toggle (Lines / Cost stack / Profit) + localStorage persistence + dynamic legend
- A.6: profit on charts page comes from computeProfit()
- B.1: deleted /expenses/plant-overheads, /expenses/insurance, /expenses/tracking (all empty); added /expenses/vehicles; ExpenseSectionPage now has an empty state
- B.2: captured R 157,200 Personnel block, R 100,000 Maintenance, R 10,000 Petty Cash; roll-up reconciles to R 675,162.93 (= sum of non-Plant non-Santam rows; workbook grand total R 1,110,486.87 is internally off by R 14,477.56 vs its own rows)
- B.3: seed flags incl<excl, VAT>20%, broken VAT math — does NOT silently correct; 4 anomalies reported on Charl-CCS + Buildsmart
- B.4: noted that workbook Vehicle Costs subtotal skips Santam (app R 9,673.87 is correct; workbook is wrong)
- B.2 reconciliation assertion added to verify-cost-reconciliation.mjs
- Sidebar updated: Vehicles added, Insurance/Tracking/Plant-Overheads removed
2026-09-12 09:24:18 +00:00
|
|
|
"amount_incl": 235000.0
|
2026-09-12 07:35:35 +00:00
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"section": "Subscriptions",
|
|
|
|
|
"description": "Abrie - CCS",
|
|
|
|
|
"gl_account": "CCS",
|
|
|
|
|
"supplier": "AEB",
|
Round 3 (Parts A-B): charts fixes + expenses/overheads cleanup
- A.1: fixed_expenses per month now threaded through to chart bucket
- A.2: null = no data (forecast), 0 = real plotted zero — distinguishable
- A.3: x-axis clipped to last actual month (IncomeAreaChart + IncomeBarChart + MachineLineChart)
- A.4: chart hues as CSS vars (--color-chart-income/fixed/running) — deeper steps of same hues, validated for CVD
- A.5: chart-type toggle (Lines / Cost stack / Profit) + localStorage persistence + dynamic legend
- A.6: profit on charts page comes from computeProfit()
- B.1: deleted /expenses/plant-overheads, /expenses/insurance, /expenses/tracking (all empty); added /expenses/vehicles; ExpenseSectionPage now has an empty state
- B.2: captured R 157,200 Personnel block, R 100,000 Maintenance, R 10,000 Petty Cash; roll-up reconciles to R 675,162.93 (= sum of non-Plant non-Santam rows; workbook grand total R 1,110,486.87 is internally off by R 14,477.56 vs its own rows)
- B.3: seed flags incl<excl, VAT>20%, broken VAT math — does NOT silently correct; 4 anomalies reported on Charl-CCS + Buildsmart
- B.4: noted that workbook Vehicle Costs subtotal skips Santam (app R 9,673.87 is correct; workbook is wrong)
- B.2 reconciliation assertion added to verify-cost-reconciliation.mjs
- Sidebar updated: Vehicles added, Insurance/Tracking/Plant-Overheads removed
2026-09-12 09:24:18 +00:00
|
|
|
"qty": 1.0,
|
|
|
|
|
"unit_price": 2150.0,
|
|
|
|
|
"amount_excl": 2150.0,
|
2026-09-12 07:35:35 +00:00
|
|
|
"vat": 322.5,
|
|
|
|
|
"amount_incl": 2472.5
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"section": "Subscriptions",
|
|
|
|
|
"description": "Charl - CCS",
|
|
|
|
|
"gl_account": "CCS",
|
|
|
|
|
"supplier": "RIB",
|
Round 3 (Parts A-B): charts fixes + expenses/overheads cleanup
- A.1: fixed_expenses per month now threaded through to chart bucket
- A.2: null = no data (forecast), 0 = real plotted zero — distinguishable
- A.3: x-axis clipped to last actual month (IncomeAreaChart + IncomeBarChart + MachineLineChart)
- A.4: chart hues as CSS vars (--color-chart-income/fixed/running) — deeper steps of same hues, validated for CVD
- A.5: chart-type toggle (Lines / Cost stack / Profit) + localStorage persistence + dynamic legend
- A.6: profit on charts page comes from computeProfit()
- B.1: deleted /expenses/plant-overheads, /expenses/insurance, /expenses/tracking (all empty); added /expenses/vehicles; ExpenseSectionPage now has an empty state
- B.2: captured R 157,200 Personnel block, R 100,000 Maintenance, R 10,000 Petty Cash; roll-up reconciles to R 675,162.93 (= sum of non-Plant non-Santam rows; workbook grand total R 1,110,486.87 is internally off by R 14,477.56 vs its own rows)
- B.3: seed flags incl<excl, VAT>20%, broken VAT math — does NOT silently correct; 4 anomalies reported on Charl-CCS + Buildsmart
- B.4: noted that workbook Vehicle Costs subtotal skips Santam (app R 9,673.87 is correct; workbook is wrong)
- B.2 reconciliation assertion added to verify-cost-reconciliation.mjs
- Sidebar updated: Vehicles added, Insurance/Tracking/Plant-Overheads removed
2026-09-12 09:24:18 +00:00
|
|
|
"qty": 1.0,
|
|
|
|
|
"unit_price": 1970.0,
|
|
|
|
|
"amount_excl": 1970.0,
|
2026-09-12 07:35:35 +00:00
|
|
|
"vat": 2265.5,
|
|
|
|
|
"amount_incl": 2265.5
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"section": "Subscriptions",
|
|
|
|
|
"description": "Buildsmart Yearly update",
|
|
|
|
|
"gl_account": "Buildsmart",
|
|
|
|
|
"supplier": "Mega infra",
|
Round 3 (Parts A-B): charts fixes + expenses/overheads cleanup
- A.1: fixed_expenses per month now threaded through to chart bucket
- A.2: null = no data (forecast), 0 = real plotted zero — distinguishable
- A.3: x-axis clipped to last actual month (IncomeAreaChart + IncomeBarChart + MachineLineChart)
- A.4: chart hues as CSS vars (--color-chart-income/fixed/running) — deeper steps of same hues, validated for CVD
- A.5: chart-type toggle (Lines / Cost stack / Profit) + localStorage persistence + dynamic legend
- A.6: profit on charts page comes from computeProfit()
- B.1: deleted /expenses/plant-overheads, /expenses/insurance, /expenses/tracking (all empty); added /expenses/vehicles; ExpenseSectionPage now has an empty state
- B.2: captured R 157,200 Personnel block, R 100,000 Maintenance, R 10,000 Petty Cash; roll-up reconciles to R 675,162.93 (= sum of non-Plant non-Santam rows; workbook grand total R 1,110,486.87 is internally off by R 14,477.56 vs its own rows)
- B.3: seed flags incl<excl, VAT>20%, broken VAT math — does NOT silently correct; 4 anomalies reported on Charl-CCS + Buildsmart
- B.4: noted that workbook Vehicle Costs subtotal skips Santam (app R 9,673.87 is correct; workbook is wrong)
- B.2 reconciliation assertion added to verify-cost-reconciliation.mjs
- Sidebar updated: Vehicles added, Insurance/Tracking/Plant-Overheads removed
2026-09-12 09:24:18 +00:00
|
|
|
"qty": 1.0,
|
2026-09-12 07:35:35 +00:00
|
|
|
"unit_price": 14827.91,
|
|
|
|
|
"amount_excl": 14827.91,
|
|
|
|
|
"vat": 2224.1865,
|
|
|
|
|
"amount_incl": 1421.0080416666667
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"section": "Rent & Utilities",
|
|
|
|
|
"description": "Huur",
|
|
|
|
|
"gl_account": "",
|
|
|
|
|
"supplier": "",
|
|
|
|
|
"qty": 0,
|
|
|
|
|
"unit_price": 0,
|
Round 3 (Parts A-B): charts fixes + expenses/overheads cleanup
- A.1: fixed_expenses per month now threaded through to chart bucket
- A.2: null = no data (forecast), 0 = real plotted zero — distinguishable
- A.3: x-axis clipped to last actual month (IncomeAreaChart + IncomeBarChart + MachineLineChart)
- A.4: chart hues as CSS vars (--color-chart-income/fixed/running) — deeper steps of same hues, validated for CVD
- A.5: chart-type toggle (Lines / Cost stack / Profit) + localStorage persistence + dynamic legend
- A.6: profit on charts page comes from computeProfit()
- B.1: deleted /expenses/plant-overheads, /expenses/insurance, /expenses/tracking (all empty); added /expenses/vehicles; ExpenseSectionPage now has an empty state
- B.2: captured R 157,200 Personnel block, R 100,000 Maintenance, R 10,000 Petty Cash; roll-up reconciles to R 675,162.93 (= sum of non-Plant non-Santam rows; workbook grand total R 1,110,486.87 is internally off by R 14,477.56 vs its own rows)
- B.3: seed flags incl<excl, VAT>20%, broken VAT math — does NOT silently correct; 4 anomalies reported on Charl-CCS + Buildsmart
- B.4: noted that workbook Vehicle Costs subtotal skips Santam (app R 9,673.87 is correct; workbook is wrong)
- B.2 reconciliation assertion added to verify-cost-reconciliation.mjs
- Sidebar updated: Vehicles added, Insurance/Tracking/Plant-Overheads removed
2026-09-12 09:24:18 +00:00
|
|
|
"amount_excl": 21250.0,
|
|
|
|
|
"vat": 3750.0,
|
|
|
|
|
"amount_incl": 25000.0
|
2026-09-12 07:35:35 +00:00
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"section": "Rent & Utilities",
|
|
|
|
|
"description": "Water & Ligte",
|
|
|
|
|
"gl_account": "",
|
|
|
|
|
"supplier": "",
|
|
|
|
|
"qty": 0,
|
|
|
|
|
"unit_price": 0,
|
Round 3 (Parts A-B): charts fixes + expenses/overheads cleanup
- A.1: fixed_expenses per month now threaded through to chart bucket
- A.2: null = no data (forecast), 0 = real plotted zero — distinguishable
- A.3: x-axis clipped to last actual month (IncomeAreaChart + IncomeBarChart + MachineLineChart)
- A.4: chart hues as CSS vars (--color-chart-income/fixed/running) — deeper steps of same hues, validated for CVD
- A.5: chart-type toggle (Lines / Cost stack / Profit) + localStorage persistence + dynamic legend
- A.6: profit on charts page comes from computeProfit()
- B.1: deleted /expenses/plant-overheads, /expenses/insurance, /expenses/tracking (all empty); added /expenses/vehicles; ExpenseSectionPage now has an empty state
- B.2: captured R 157,200 Personnel block, R 100,000 Maintenance, R 10,000 Petty Cash; roll-up reconciles to R 675,162.93 (= sum of non-Plant non-Santam rows; workbook grand total R 1,110,486.87 is internally off by R 14,477.56 vs its own rows)
- B.3: seed flags incl<excl, VAT>20%, broken VAT math — does NOT silently correct; 4 anomalies reported on Charl-CCS + Buildsmart
- B.4: noted that workbook Vehicle Costs subtotal skips Santam (app R 9,673.87 is correct; workbook is wrong)
- B.2 reconciliation assertion added to verify-cost-reconciliation.mjs
- Sidebar updated: Vehicles added, Insurance/Tracking/Plant-Overheads removed
2026-09-12 09:24:18 +00:00
|
|
|
"amount_excl": 3230.0,
|
|
|
|
|
"vat": 570.0,
|
|
|
|
|
"amount_incl": 3800.0
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"section": "Cash Floats",
|
|
|
|
|
"description": "Petty Cash",
|
|
|
|
|
"gl_account": "Cash Floats",
|
|
|
|
|
"supplier": "",
|
|
|
|
|
"qty": 0,
|
|
|
|
|
"unit_price": 0,
|
|
|
|
|
"amount_excl": 0,
|
|
|
|
|
"vat": 0,
|
|
|
|
|
"amount_incl": 10000.0
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"section": "Maintenance",
|
|
|
|
|
"description": "Maintenance",
|
|
|
|
|
"gl_account": "Maintenance",
|
|
|
|
|
"supplier": "",
|
|
|
|
|
"qty": 0,
|
|
|
|
|
"unit_price": 0,
|
|
|
|
|
"amount_excl": 0,
|
|
|
|
|
"vat": 0,
|
|
|
|
|
"amount_incl": 100000.0
|
2026-09-12 07:35:35 +00:00
|
|
|
}
|
|
|
|
|
]
|