Fix update hook: recompute actuals when PAID entry amount/code changes
(not just on status transitions). 15/15 tests pass.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- PO confirm: require expectedDeliveryDate for direct POs, auto-create
lots+LotLines when confirming PO without any lots
- createLotsForPO: no longer skips items without requirementId, creates
PurchaseLotLine records for each lot
- generateFromTender: pre-fill expectedDeliveryDate from offerDeliveryDays
- Frontend: disable confirm button without delivery date set
- Planning: diamond size d=7 for PDL forecasts (visually distinct from
7×7 reception squares), fix empty status filter Validation error
- Backfill script: po-delivery-backfill.ts (2 POs fixed)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Two-pass backfill: cas 1 (non-consumed, origQty=qty) and cas 2
(consumed, origQty=qty+SUM(POLine.consumedQuantity) for active POs).
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
4-step migration: backfill originalQuantity, link POLines to PRs via lotLines,
create retro PRs for orphan POLines, merge residual PRs.
Dry-run by default, --apply for real execution. Idempotent.
Local DB results: 54 PRs backfilled, 4 retro PRs created, 4 residuals merged.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Added 8 specific service tags (LASER_CUTTING, TUBE_BENDING_SVC, etc.)
- Added PIPE_CUT to category_tag_mappings (was missing)
- Updated all 14 category mappings with both generic + specific tags
- Updated fallback categoryToTag in tenders.service.ts
- SQL migration script: scripts/fix-supplier-tags.sql
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>