NEEDSaveToDb gated by DataEntryComplete (spec/12-api/03-claim, granularity open)
DB ▸ UnitClaimingSkids (writes, 15 rows)
Validation
V-PRT-01Scan sanitize + 2D parse — strip spaces/special chars; 2D labels yield model + serial, and the serial is re-validated through the serial rules (V-SER-*) before the part check runs.
V-PRT-022D-scan required when Require2dBarcodeOnPartNumber (unless debugging, Kit, kit-style leading-7, or 20-char packaging-code format) → “Part Number must be scanned from a 2D barcode, unless it's a kit or a model number with a packaging code.”
V-PRT-03Part exists with weight — PalletInfoController.ModelNumberIsValid: “Information for this part could not be found in the database.” / “…no part weight was found.” Kit skips the weight requirement (Parts-table fallback). ✅ GET /api/lookups/model-number/{m}
V-PRT-04First-claim-of-shift alert — OK dialog asking for final-audit verification; skippable via DisableFirstClaimInShiftMessage. ✅ GET /api/lookups/model/{m}/first-claim-of-shift