Root cause (from support tickets #333382 and #775903): a one-off
integrity migration archived 40 Excel-imported carpenter task packages
(is_active=0, blocked) because their material lines couldn't be
auto-linked to the material database, and even a verified component
package had nowhere to appear since the quote flow only fetched
packageType=complete_offer.
- verifyPackage now reactivates a package (is_active=1) once its
materials/tasks pass integrity checks
- getPackageDetails/updatePackage can reach blocked-but-inactive
packages so admins can repair them, without exposing genuinely
deleted packages; fixes a latent bug where updatePackage's final
UPDATE still hardcoded is_active=1 and would have silently no-op'd
- new GET /api/smart-packages/review-queue + SmartPackageReviewQueue
admin panel to relink materials (with fuzzy-match suggestions) and
verify archived packages in one step
- InlineSmartPackage gains an "Enkelte opgaver" à la carte picker
(search-by-word, additive multi-select) for verified component
packages, alongside the existing single complete-offer picker;
geometry-based quantity/hours math extracted into
utils/smartPackageGeometryCalculations.js so both flows share it
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>