- 22 files renamed to <invoice_no>.pdf (154923.pdf, 151778.pdf, etc.)
- 5 duplicate files moved to invoices/_non_jei/
- 7 files left as-is (multi-invoice PDFs or unscannable:
1.Invoice_29.05.pdf, Invoice.pdf, JEI Drilling Invoices.pdf,
JEI SA Invoice 147842.pdf, JEI SA Proforma 148931.pdf,
newdoc10018920260413143327_001.pdf, Supplier Invoice.pdf,
Supplier Invoices.pdf)
- Installed Tesseract OCR via winget
- Added scripts/ocr_invoices.py to OCR all PDFs via PyMuPDF
- Updated extract_invoices.py to fall back to OCR text for scanned pages
- Fixed stock-code regex to match "qty + code" pairs only (avoids spurious
matches like bare TCT in invoice headers)
- Added merge step to combine multi-page proformas into single invoice records
- All 11 previously-missing codes now in PB:
JEITCS12, JEITCS18, JEITCS22, JEITCL22, JEITCL92,
JEICS17, JEICS19, JEICS27, JEICS30, JEICS34, JEICS14-P1
- Only JEITCS50 remains unlisted (genuinely never ordered)
PB now: 19 invoices, 158 stock codes, 281 line items
- Removed 424 duplicate invoice lines from re-running the import
- Deleted JEISA000 stock code (it was actually your Account Ref)
- Made create_line idempotent in import_to_pb.py so re-runs skip existing
- Removed debug prints from extract_invoices.py
Next.js patches the global fetch with a cache layer that was returning
stale PB responses (showing description_goods as the code itself because
the snapshot was from before the import fixed the descriptions).
Wrap the SDK with a custom fetch using cache: no-store so every page
request gets fresh data from PocketBase.
- Two PDF layouts supported: description-before-stock-code and description-after
- Clean up trailing inch-quote artifacts and multiple-comma noise
- Importer PATCHes existing records when new description is better
- Stock codes tab now shows real goods descriptions, not just codes
The PB JS SDK serializes `filter: undefined` as the literal string
undefined in the URL, which PB rejects with 400 Bad Request.
Switched to conditionally including filter only when non-empty.