mega-plant/components
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 Cash float card, Office role + Slips tab, job card PDF, manual close/delete 2026-10-22 15:09:57 +02:00
workforce Add Job Cards (vehicle-QR start/finish) and retire Operators/Mechanics pages 2026-10-22 12:54:59 +02:00
AccountMenu.tsx feat: add user access and improve plant dashboard 2026-10-06 04:02:08 +02:00
BadgeCamera.tsx Clock app: search + scanner on one screen; employee on fuel; drop codeless vehicles 2026-10-22 13:55:13 +02:00
BookedOutTable.tsx Clock app: vehicle-QR diesel book-out with meter photo; user access levels 2026-10-22 12:25:15 +02:00
BuildStamp.tsx feat: show the build commit as a faint corner mark 2026-10-30 01:27:22 +02:00
CashFloatCard.tsx Add Suppliers list; book purchase orders and petty-cash slips against it 2026-10-22 15:43:57 +02:00
ChartsGrid.tsx feat: add user access and improve plant dashboard 2026-10-06 04:02:08 +02:00
ClockAppHeader.tsx feat(clock): add standalone employee clock PWA 2026-10-21 06:39:15 +02:00
ClockBottomNav.tsx Cash float card, Office role + Slips tab, job card PDF, manual close/delete 2026-10-22 15:09:57 +02:00
ClockInstallPrompt.tsx feat(clock): add standalone employee clock PWA 2026-10-21 06:39:15 +02:00
DashboardCharts.tsx feat: add user access and improve plant dashboard 2026-10-06 04:02:08 +02:00
ExpenseSectionPage.tsx feat: add user access and improve plant dashboard 2026-10-06 04:02:08 +02:00
FinancingView.tsx Add Running Costs sub-pages: insurance, financing, purchases, oil, operators, mechanics 2026-10-09 01:06:27 +02:00
FuelSiteImport.tsx feat(plant): vehicle site history from Fuel Logs 2026-11-05 00:18:24 +02:00
GlobalSearch.tsx feat: add user access and improve plant dashboard 2026-10-06 04:02:08 +02:00
IncomeOverview.tsx feat(income): posted income per site, and the LIVE month on the overview 2026-11-05 00:19:06 +02:00
IncomeView.tsx feat(income): posted income per site, and the LIVE month on the overview 2026-11-05 00:19:06 +02:00
InsuranceView.tsx Add Running Costs sub-pages: insurance, financing, purchases, oil, operators, mechanics 2026-10-09 01:06:27 +02:00
InvoiceIntake.tsx Give external invoices a supplier name; keep them off the sites page 2026-10-08 12:04:42 +02:00
InvoiceList.tsx feat(income): posted income per site, and the LIVE month on the overview 2026-11-05 00:19:06 +02:00
InvoiceMonthFilter.tsx feat(income): posted income per site, and the LIVE month on the overview 2026-11-05 00:19:06 +02:00
InvoiceRegisterPage.tsx feat(income): posted income per site, and the LIVE month on the overview 2026-11-05 00:19:06 +02:00
InvoiceTable.tsx feat(income): posted income per site, and the LIVE month on the overview 2026-11-05 00:19:06 +02:00
InvoiceUploader.tsx Invoices: line-item extraction, booking to plant items, VAT-inclusive income 2026-10-01 15:59:30 +02:00
JobCardsTable.tsx Cash float card, Office role + Slips tab, job card PDF, manual close/delete 2026-10-22 15:09:57 +02:00
JobScanner.tsx Clock app: search + scanner on one screen; employee on fuel; drop codeless vehicles 2026-10-22 13:55:13 +02:00
MachineCombobox.tsx Invoices: a machine chosen in the dropdown was never actually booked 2026-10-03 15:43:46 +02:00
MachineLineChart.tsx feat: add user access and improve plant dashboard 2026-10-06 04:02:08 +02:00
OilsBoard.tsx Clock app: vehicle-QR diesel book-out with meter photo; user access levels 2026-10-22 12:25:15 +02:00
OilsStock.tsx Add Workforce pages, Plant Clock tab bar and oil & diesel book-out 2026-10-22 11:39:18 +02:00
PlantClock.tsx Clock app: vehicle-QR diesel book-out with meter photo; user access levels 2026-10-22 12:25:15 +02:00
PlantMap.tsx feat(plant): vehicle site history from Fuel Logs 2026-11-05 00:18:24 +02:00
PlantMapLoader.tsx Map: dark tiles from Esri, because CARTO retired keyless access 2026-10-03 09:20:24 +02:00
PlantRegisterTable.tsx feat(plant): vehicle site history from Fuel Logs 2026-11-05 00:18:24 +02:00
PurchaseIntake.tsx Purchase invoices: price an invoice that has no amount 2026-11-04 18:06:02 +02:00
QrCode.tsx Add Running Costs sub-pages: insurance, financing, purchases, oil, operators, mechanics 2026-10-09 01:06:27 +02:00
QrTextCell.tsx Job cards oil path, Fuel tab diesel-only, Mechanic role, Plant Register QR column 2026-10-22 13:44:01 +02:00
RunningView.tsx Stop the Running Costs grid at the current month 2026-10-09 12:35:52 +02:00
ScrollFade.tsx Fix: the mobile table was mislabelled and clipping its own totals 2026-10-02 15:34:19 +02:00
SearchPicker.tsx Add Job Cards (vehicle-QR start/finish) and retire Operators/Mechanics pages 2026-10-22 12:54:59 +02:00
Sidebar.tsx feat(clock): add standalone employee clock PWA 2026-10-21 06:39:15 +02:00
SiteBookingSelect.tsx Invoices: fix the tablet layout and make booking an unbooked line obvious 2026-10-03 09:59:05 +02:00
SiteContainerEditor.tsx Sites: auto-allocate container lines to the container the site hires 2026-10-02 18:32:12 +02:00
SiteCoordinateEditor.tsx Sites: give every site coordinates 2026-10-02 16:33:43 +02:00
SiteIncomeView.tsx feat(income): posted income per site, and the LIVE month on the overview 2026-11-05 00:19:06 +02:00
SitesOverview.tsx feat(income): posted income per site, and the LIVE month on the overview 2026-11-05 00:19:06 +02:00
SitesView.tsx feat(income): posted income per site, and the LIVE month on the overview 2026-11-05 00:19:06 +02:00
SlipCapture.tsx Add Suppliers list; book purchase orders and petty-cash slips against it 2026-10-22 15:43:57 +02:00
Sparkline.tsx Invoices: keep the PDF on the invoice, and search the invoice's own words 2026-10-02 19:09:16 +02:00
StockOut.tsx Cash float card, Office role + Slips tab, job card PDF, manual close/delete 2026-10-22 15:09:57 +02:00
SupplierCell.tsx Give external invoices a supplier name; keep them off the sites page 2026-10-08 12:04:42 +02:00
Suppliers2View.tsx Suppliers: dark-mode contrast for monthly figures and coloured text; heading drawn in the view (React key warning) 2026-10-29 21:16:54 +02:00
SuppliersView.tsx Add Suppliers list; book purchase orders and petty-cash slips against it 2026-10-22 15:43:57 +02:00
ThemeProvider.tsx Mega Plant dashboard — fix & harden (Parts 0-5) 2026-09-12 09:35:48 +02:00
ThemeToggle.tsx feat: add user access and improve plant dashboard 2026-10-06 04:02:08 +02:00
Toast.tsx Fix: toast and machine dropdown were rendering behind the page chrome 2026-10-02 18:42:29 +02:00
VehicleSiteHistory.tsx feat(plant): vehicle site history from Fuel Logs 2026-11-05 00:18:24 +02:00