mega-plant/lib
Dave 7b3ec2fbd8 feat(income): posted income per site, and the LIVE month on the overview
Two changes to the income overview, sharing one rule for what "the month"
means (lib/income-month.ts).

POSTED INCOME PER SITE

/income gains Vehicles / Sites views, and /sites defaults to the SAME
posted-income view with a separate Internal billed invoices view.
buildSiteIncomeRows (lib/site-income.ts) is the shared calculation: actual
monthly_income supplies the amount, year and month, and the linked invoice
supplies its historical site. It never uses assets.site, fuel-log
locations or today's map assignment.

- Unposted invoice lines are billing, not posted income.
- Historical workbook income with no site evidence stays in Unallocated
  historical income; external income, whose site field names the SUPPLIER,
  stays in Unallocated external income.
- Missing source references stay visible as unallocated invoice income.
  No group is dropped to make a site list look cleaner and no site is
  guessed to force a total.
- No site profit is calculated without an explicit cost-allocation rule.
- Invoice writes use revalidateInvoicePages, which invalidates both
  registers, Income, Sites/details, Charts and Dashboard.

THE LIVE MONTH

The tiles show the year-to-date income and profit AND the current month,
and every vehicle card shows the current month income beside its year
figure.

- The month is the live CALENDAR month and it is shown even at R0. Income
  for a month is usually entered near the end of it, so the current month
  is a figure that starts at R0 and grows.
- The month index is computed on the SERVER and passed down as a number.
  The browser never works it out for itself: two clocks disagreeing would
  show two different months on the same page.
- A month profit is a dash until that month costs are posted. September
  and October carry invoice income with no posted fixed costs (their costs
  exist only as forecast rows), so a profit there would be income minus
  zero - a 100% margin that does not tie back to the year-to-date profit.
  It becomes a number by itself the moment the workbook posts that month.
- The 12-month strip shows the live month as R0 rather than a dash, so a
  card cannot contradict itself. Months after it stay a dash.
- The sparkline on a collapsed card is hidden below xl: the content column
  is only ~700px wide between md and xl, and the vehicle name must not be
  truncated to pay for a decorative trend.
2026-11-05 00:19:06 +02:00
..
auth-policy.test.ts feat: add user access and improve plant dashboard 2026-10-06 04:02:08 +02:00
auth-policy.ts Cash float card, Office role + Slips tab, job card PDF, manual close/delete 2026-10-22 15:09:57 +02:00
auth-service.test.ts feat: add user access and improve plant dashboard 2026-10-06 04:02:08 +02:00
auth-service.ts Job cards oil path, Fuel tab diesel-only, Mechanic role, Plant Register QR column 2026-10-22 13:44:01 +02:00
auth.ts feat(clock): add standalone employee clock PWA 2026-10-21 06:39:15 +02:00
cash-float-server.ts Cash float card, Office role + Slips tab, job card PDF, manual close/delete 2026-10-22 15:09:57 +02:00
cash-float.test.ts Cash float card, Office role + Slips tab, job card PDF, manual close/delete 2026-10-22 15:09:57 +02:00
cash-float.ts Cash float card, Office role + Slips tab, job card PDF, manual close/delete 2026-10-22 15:09:57 +02:00
chart-profit.ts Income: hide stood-down machines, with an active/inactive filter 2026-10-03 18:40:32 +02:00
clock-access.test.ts Cash float card, Office role + Slips tab, job card PDF, manual close/delete 2026-10-22 15:09:57 +02:00
clock-access.ts Cash float card, Office role + Slips tab, job card PDF, manual close/delete 2026-10-22 15:09:57 +02:00
clock-api.ts Clock app: vehicle-QR diesel book-out with meter photo; user access levels 2026-10-22 12:25:15 +02:00
clock-badge.ts feat(clock): add standalone employee clock PWA 2026-10-21 06:39:15 +02:00
clock-display.ts feat(clock): add standalone employee clock PWA 2026-10-21 06:39:15 +02:00
clock-lock.test.ts feat(clock): add standalone employee clock PWA 2026-10-21 06:39:15 +02:00
clock-lock.ts feat(clock): add standalone employee clock PWA 2026-10-21 06:39:15 +02:00
clock-origin.ts feat(clock): add standalone employee clock PWA 2026-10-21 06:39:15 +02:00
clock-pwa.test.ts feat(clock): add standalone employee clock PWA 2026-10-21 06:39:15 +02:00
clock-pwa.ts feat(clock): add standalone employee clock PWA 2026-10-21 06:39:15 +02:00
clock-request.test.ts feat(clock): add standalone employee clock PWA 2026-10-21 06:39:15 +02:00
clock-request.ts feat(clock): add standalone employee clock PWA 2026-10-21 06:39:15 +02:00
clock-rules.ts Add Workforce pages, Plant Clock tab bar and oil & diesel book-out 2026-10-22 11:39:18 +02:00
clock-store.ts Add Workforce pages, Plant Clock tab bar and oil & diesel book-out 2026-10-22 11:39:18 +02:00
clock.test.ts Add Workforce pages, Plant Clock tab bar and oil & diesel book-out 2026-10-22 11:39:18 +02:00
clock.ts Add Workforce pages, Plant Clock tab bar and oil & diesel book-out 2026-10-22 11:39:18 +02:00
cost-code.ts Add Running Costs sub-pages: insurance, financing, purchases, oil, operators, mechanics 2026-10-09 01:06:27 +02:00
data.ts feat(plant): vehicle site history from Fuel Logs 2026-11-05 00:18:24 +02:00
financing.ts Add Running Costs sub-pages: insurance, financing, purchases, oil, operators, mechanics 2026-10-09 01:06:27 +02:00
income-month.test.ts feat(income): posted income per site, and the LIVE month on the overview 2026-11-05 00:19:06 +02:00
income-month.ts feat(income): posted income per site, and the LIVE month on the overview 2026-11-05 00:19:06 +02:00
insurance-rate-policy.json Add Running Costs sub-pages: insurance, financing, purchases, oil, operators, mechanics 2026-10-09 01:06:27 +02:00
insurance-rate-policy.ts Add Running Costs sub-pages: insurance, financing, purchases, oil, operators, mechanics 2026-10-09 01:06:27 +02:00
insurance.ts Add Running Costs sub-pages: insurance, financing, purchases, oil, operators, mechanics 2026-10-09 01:06:27 +02:00
intake-retry.test.ts feat: add user access and improve plant dashboard 2026-10-06 04:02:08 +02:00
intake-retry.ts feat: add user access and improve plant dashboard 2026-10-06 04:02:08 +02:00
invoice-booking-policy.json Invoices: line-item extraction, booking to plant items, VAT-inclusive income 2026-10-01 15:59:30 +02:00
invoice-booking-route.test.ts feat(income): posted income per site, and the LIVE month on the overview 2026-11-05 00:19:06 +02:00
invoice-booking.ts Invoices: line-item extraction, booking to plant items, VAT-inclusive income 2026-10-01 15:59:30 +02:00
invoice-parser.test.ts Test: a site typed without its space is deliberately NOT folded 2026-10-08 19:06:30 +02:00
invoice-parser.ts Invoices: one line per charge, and fold an abbreviated site 2026-10-06 11:25:10 +02:00
invoice-party-policy.json Split the invoice register into Internal and External Invoices 2026-10-08 11:49:48 +02:00
invoice-party.test.ts Split the invoice register into Internal and External Invoices 2026-10-08 11:49:48 +02:00
invoice-party.ts Split the invoice register into Internal and External Invoices 2026-10-08 11:49:48 +02:00
invoice-register.test.ts feat(income): posted income per site, and the LIVE month on the overview 2026-11-05 00:19:06 +02:00
invoice-register.ts feat(income): posted income per site, and the LIVE month on the overview 2026-11-05 00:19:06 +02:00
invoice-revalidate.ts feat(income): posted income per site, and the LIVE month on the overview 2026-11-05 00:19:06 +02:00
invoice-routes.ts Split the invoice register into Internal and External Invoices 2026-10-08 11:49:48 +02:00
job-card-pdf.ts Cash float card, Office role + Slips tab, job card PDF, manual close/delete 2026-10-22 15:09:57 +02:00
job-cards.ts Add Job Cards (vehicle-QR start/finish) and retire Operators/Mechanics pages 2026-10-22 12:54:59 +02:00
mechanics.ts Add Running Costs sub-pages: insurance, financing, purchases, oil, operators, mechanics 2026-10-09 01:06:27 +02:00
oil-log.ts Add Workforce pages, Plant Clock tab bar and oil & diesel book-out 2026-10-22 11:39:18 +02:00
oil.ts Add Workforce pages, Plant Clock tab bar and oil & diesel book-out 2026-10-22 11:39:18 +02:00
pb.ts Round 4: regressions fixed + mobile standard 2026-09-12 12:05:43 +02:00
plant-location-policy.json feat: add user access and improve plant dashboard 2026-10-06 04:02:08 +02:00
plant-map.test.ts feat: add user access and improve plant dashboard 2026-10-06 04:02:08 +02:00
plant-map.ts feat(plant): vehicle site history from Fuel Logs 2026-11-05 00:18:24 +02:00
plant-site-history.test.ts feat(plant): vehicle site history from Fuel Logs 2026-11-05 00:18:24 +02:00
plant-site-history.ts feat(plant): vehicle site history from Fuel Logs 2026-11-05 00:18:24 +02:00
plant-site-import.test.ts feat(plant): vehicle site history from Fuel Logs 2026-11-05 00:18:24 +02:00
plant-site-import.ts feat(plant): vehicle site history from Fuel Logs 2026-11-05 00:18:24 +02:00
plant-site-policy.json feat(plant): vehicle site history from Fuel Logs 2026-11-05 00:18:24 +02:00
profit.test.ts Mega Plant dashboard — fix & harden (Parts 0-5) 2026-09-12 09:35:48 +02:00
profit.ts Mega Plant dashboard — fix & harden (Parts 0-5) 2026-09-12 09:35:48 +02:00
purchase-booking.ts Fold purchase orders into the Running Costs Overview, with incl/excl totals 2026-10-09 12:10:13 +02:00
purchase-invoice-amount.test.ts Purchase invoices: price an invoice that has no amount 2026-11-04 18:06:02 +02:00
purchase-invoice-amount.ts Purchase invoices: price an invoice that has no amount 2026-11-04 18:06:02 +02:00
purchase-invoice-status.ts Suppliers: replace the menu entry with the new page, flag over-invoiced POs, audited invoice amount corrections 2026-10-29 20:49:05 +02:00
purchase-parser.ts Purchase invoices, Suppliers 2 with payments, multi-page PO parsing 2026-10-29 20:29:08 +02:00
qr-pdf.ts Add Workforce pages, Plant Clock tab bar and oil & diesel book-out 2026-10-22 11:39:18 +02:00
qr.ts Add Running Costs sub-pages: insurance, financing, purchases, oil, operators, mechanics 2026-10-09 01:06:27 +02:00
require-full.ts Add Suppliers list; book purchase orders and petty-cash slips against it 2026-10-22 15:43:57 +02:00
rows.test.ts Invoices: line-item extraction, booking to plant items, VAT-inclusive income 2026-10-01 15:59:30 +02:00
rows.ts Running cost = everything linked to a vehicle: repairs, purchases, insurance, finance 2026-10-09 12:28:29 +02:00
running-costs.ts Stop the Running Costs grid at the current month 2026-10-09 12:35:52 +02:00
server-data.ts Add Running Costs sub-pages: insurance, financing, purchases, oil, operators, mechanics 2026-10-09 01:06:27 +02:00
shrink-image.ts Cash float card, Office role + Slips tab, job card PDF, manual close/delete 2026-10-22 15:09:57 +02:00
site-income.test.ts feat(income): posted income per site, and the LIVE month on the overview 2026-11-05 00:19:06 +02:00
site-income.ts feat(income): posted income per site, and the LIVE month on the overview 2026-11-05 00:19:06 +02:00
sites.test.ts Give external invoices a supplier name; keep them off the sites page 2026-10-08 12:04:42 +02:00
sites.ts Give external invoices a supplier name; keep them off the sites page 2026-10-08 12:04:42 +02:00
stock-out.ts Job cards oil path, Fuel tab diesel-only, Mechanic role, Plant Register QR column 2026-10-22 13:44:01 +02:00
supplier-server.ts Add Suppliers list; book purchase orders and petty-cash slips against it 2026-10-22 15:43:57 +02:00
supplier-spend.ts Suppliers: replace the menu entry with the new page, flag over-invoiced POs, audited invoice amount corrections 2026-10-29 20:49:05 +02:00
supplier.test.ts Add Suppliers list; book purchase orders and petty-cash slips against it 2026-10-22 15:43:57 +02:00
supplier.ts Add Suppliers list; book purchase orders and petty-cash slips against it 2026-10-22 15:43:57 +02:00
utils.ts Mega Plant dashboard — fix & harden (Parts 0-5) 2026-09-12 09:35:48 +02:00
workforce-store.ts Add Workforce pages, Plant Clock tab bar and oil & diesel book-out 2026-10-22 11:39:18 +02:00
workforce.test.ts Add Workforce pages, Plant Clock tab bar and oil & diesel book-out 2026-10-22 11:39:18 +02:00
workforce.ts Add Workforce pages, Plant Clock tab bar and oil & diesel book-out 2026-10-22 11:39:18 +02:00