MEGAINFRA-WEBAPP/scripts
DEls 4e5d13950a fix(po-email): book a PO against the site name, not the cost code
The project code on a PO's lines is a cost allocation, not a statement of
where the work is going. MEGCPO9550 is a Cedar Gate delivery -- its subject
says "(Cedar Gate)" and its email subject says "RE: Cedar Gate Paving &
Kerbs PO" -- yet four of its seven lines are billed to C26/08 (Castle Gate)
and three to C26/13 (Cedar Gate). Booking by code would have put a Cedar
Gate PO against Castle Gate, and that risk grows as sites are added.

The site is now read from the name written on the PO: its subject line
first, then its description, then the email subject. A PO naming two sites,
or none, is flagged for review instead of being booked against one of them.
The code is still read and kept on the filed row as po_cost_codes, because
the app's own finalisation step uses it as evidence.

MEGA does not always write a site name the way the app has it, so the name
is also matched without its instance qualifier ("Munyaka" for "Munyaka 2")
and through an explicit table of the spellings seen on real POs ("West Park"
for Wespark, MEGCPO9554; "Nellmpius" for Nellmapius Ext 25, MEGCPO9475).
Without those, POs naming a site would have stopped filing themselves.
2026-11-06 10:25:34 +02:00
..
data feat(po-email): hourly mailbox check that files new POs into MEGA 2026-11-02 22:37:12 +02:00
migrations feat(users): Last active column to spot people not using the app 2026-11-02 22:54:07 +02:00
n8n chore(n8n): keep the stored PO-ingest callback in step with the published workflow 2026-10-11 00:47:00 +02:00
site-model feat(site-map): Munyaka 2 stormwater and village network, Progress section highlight, layer switches 2026-10-28 12:13:38 +02:00
backfill-fuel-log-previous-reading.py feat: add employee search and save pending fleet updates 2026-09-30 00:42:38 +02:00
backfill-retention-forecasts.ts feat: update management comparisons and Cedar Gate site model 2026-10-20 12:23:44 +02:00
build-icons.mjs feat(clock): replace icon with clock-on-cube design + OG share preview 2026-09-13 21:55:40 +02:00
build-og-image.mjs
check-connections.mjs feat: add remote purchasing MCP to existing app 2026-10-05 02:46:36 +02:00
clear-site-rows.py feat: add employee search and save pending fleet updates 2026-09-30 00:42:38 +02:00
close-flagged-site-moves.ts feat(clock): a scan at another site moves workers and vehicles there automatically 2026-10-21 06:34:05 +02:00
compare-dn-pipelines.mts fix(dn): let staged ingestion run against the real PocketBase schema 2026-09-20 23:49:58 +02:00
dn-backfill-dates.py fix(dn): date deliveries by the slip and orders by the PO's order date 2026-10-11 00:35:00 +02:00
dn-board.mts chore(dn): add two read-only checks for the staged rollout 2026-09-21 01:00:44 +02:00
dn-replay-review.mts Integrate agent work and add dashboard attention indicators 2026-10-04 21:53:32 +02:00
dn-snapshot.mts chore(dn): add two read-only checks for the staged rollout 2026-09-21 01:00:44 +02:00
download-all-delivery-notes.py fix(dn-pipeline): enhance product resolution by incorporating article numbers 2026-09-17 22:59:09 +02:00
generate-mcp-key.mjs feat: add remote purchasing MCP to existing app 2026-10-05 02:46:36 +02:00
generate-plant-hours-template.ts
import-buildsite-fuel.ts fix: harden workforce, plant and financials 2026-10-19 13:18:31 +02:00
import-management-plans.ts feat(management): store planning data in PocketBase with editable income, add job and forecast vs actual chart 2026-10-20 03:04:01 +02:00
import-management-workbook.py feat(management): refresh workbook plans and reconcile cashflow 2026-10-14 05:48:01 +02:00
inbox-three-rerun.ts chore(dn): inbox 3 queue re-run script 2026-10-26 20:01:09 +02:00
mcp-staging-smoke.mjs feat: add remote purchasing MCP to existing app 2026-10-05 02:46:36 +02:00
mcp-staging-smoke.test.mjs feat: add remote purchasing MCP to existing app 2026-10-05 02:46:36 +02:00
migrate-delivery-notes-ocr.py
migrate-dn-item-units.py chore: final review polish (trailing newlines, JSDoc, changelog tense) 2026-09-17 12:49:37 +02:00
migrate-plant-hours-backfill-vehicle.py refactor(plant): enhance PlantPage and PlantView for fuel log integration 2026-09-02 12:36:10 +02:00
patch-next-dev-blocker.cjs
pb-add-ask-collections.py fix(ask): migrate created/updated to autodate, sort ties by id 2026-09-27 03:05:23 +02:00
pb-add-dn-alias-keys.py fix(dn-pipeline): key aliases on what actually identifies a product 2026-09-17 22:47:55 +02:00
pb-add-dn-batch-uploaded-at.py fix(scripts): backfill uploaded_at from real sources, add a dry run 2026-09-17 21:25:33 +02:00
pb-add-dn-batches.py fix(dn-batches): heal created/updated fields on existing live collections 2026-09-17 15:17:17 +02:00
pb-add-dn-dates.py fix(dn): date deliveries by the slip and orders by the PO's order date 2026-10-11 00:35:00 +02:00
pb-add-dn-doc-type.py feat(dn-pipeline): classify document type instead of assuming delivery note 2026-09-17 21:45:08 +02:00
pb-add-dn-item-aliases.py feat(dn-pipeline): add the remembered product alias table 2026-09-17 21:34:37 +02:00
pb-add-dn-item-units.py feat(delivery-notes): add qty_raw/unit_raw/unit_converted to line items 2026-09-17 12:07:59 +02:00
pb-add-dn-note-dismissed.py feat(dn-batches): dismiss a single duplicate note, and stop erasing promoted counts 2026-09-18 00:44:57 +02:00
pb-add-dn-open-pages.py fix(delivery-notes): a stray page no longer condemns good notes 2026-09-17 21:49:16 +02:00
pb-add-dn-staged-ingestion.py Integrate agent work and add dashboard attention indicators 2026-10-04 21:53:32 +02:00
pb-add-employee-rates.py feat(workforce): add rate history and missing-rate editor 2026-10-07 13:19:50 +02:00
pb-add-employers.py feat(workforce): add employer and broker management 2026-10-15 15:58:06 +02:00
pb-add-fuel-import-dedup.py fix: harden workforce, plant and financials 2026-10-19 13:18:31 +02:00
pb-add-fuel-prices.py feat(dashboard): enhance operations dashboard with rain outlook and coordinate support 2026-09-06 19:59:52 +02:00
pb-add-management.py feat(management): store planning data in PocketBase with editable income, add job and forecast vs actual chart 2026-10-20 03:04:01 +02:00
pb-add-sick-note-ranges.py feat(workforce): add timesheet exports and duplicate protection 2026-10-07 23:53:47 +02:00
pb-add-sick-notes.py feat(workforce): add timesheet exports and duplicate protection 2026-10-07 23:53:47 +02:00
pb-add-site-coordinates.py feat(dashboard): enhance operations dashboard with rain outlook and coordinate support 2026-09-06 19:59:52 +02:00
pb-add-site-job-start-date.py feat(dashboard): enhance operations dashboard with rain outlook and coordinate support 2026-09-06 19:59:52 +02:00
pb-add-worker-status.py feat(workforce): add active and inactive workers 2026-10-07 13:41:05 +02:00
pb-backup-collection.py feat(dashboard): enhance operations dashboard with rain outlook and coordinate support 2026-09-06 19:59:52 +02:00
pb-bootstrap-schema.py feat(sites): import payment certificates into Inflows with cumulative chart 2026-10-27 10:53:54 +02:00
pb-deduplicate-timesheets.py feat(workforce): add timesheet exports and duplicate protection 2026-10-07 23:53:47 +02:00
pb-delete-fixed-costs.py feat(dashboard): enhance operations dashboard with rain outlook and coordinate support 2026-09-06 19:59:52 +02:00
pb-enable-batch-api.py fix(dn): let staged ingestion run against the real PocketBase schema 2026-09-20 23:49:58 +02:00
pb-relax-dn-zero-fields.py fix(dn): let staged ingestion run against the real PocketBase schema 2026-09-20 23:49:58 +02:00
pb-relax-rules.py feat(clock): review missed scan-outs without changing phone flow 2026-09-25 07:27:12 +02:00
pb-show-fixed-costs.py feat(dashboard): enhance operations dashboard with rain outlook and coordinate support 2026-09-06 19:59:52 +02:00
pb-show-sites.py feat(dashboard): enhance operations dashboard with rain outlook and coordinate support 2026-09-06 19:59:52 +02:00
pb_env.py feat(dashboard): enhance operations dashboard with rain outlook and coordinate support 2026-09-06 19:59:52 +02:00
po_email_intake.py fix(po-email): book a PO against the site name, not the cost code 2026-11-06 10:25:34 +02:00
randomize-site-coords.py feat: add employee search and save pending fleet updates 2026-09-30 00:42:38 +02:00
test_po_email_intake.py fix(po-email): book a PO against the site name, not the cost code 2026-11-06 10:25:34 +02:00
tmp-w.mts feat: add employee search and save pending fleet updates 2026-09-30 00:42:38 +02:00