Unit Claiming · Low Volume Claiming · step 4 / 6

Step 4 — Serial Number

Low-volume flow with conditional license-plate branch.

1. Employee Auth2. Part Number3. License Plate*4. Serial Number5. Pallet Qty6. Complete
flowchart LR
    T1[Employee Auth]
    T2[Part Number]
    T3[License Plate*]
    T4[Serial Number]
    T5[Pallet Qty]
    T6[Complete]
    T1 --> T2 --> T3 --> T4 --> T5 --> T6
    style T4 fill:#0f5e8a,color:#fff
    click T1 "./01-employee-auth.html" "Open step"
    click T2 "./02-part-number.html" "Open step"
    click T3 "./03-license-plate.html" "Open step"
    click T4 "./04-serial-number.html" "Open step"
    click T5 "./05-pallet-quantity.html" "Open step"
    click T6 "./06-skid-complete.html" "Open step"

Scan serial

Sample Serial #'s (for testing)
7159D60100 · …
Invalid format shows 'This is an invalid serial number.' Next is blocked until valid (IsValid gate).

Skid summary (live)

Employee Badge #:
11111
Model #:
M100-A
Pallet Id:
—
Pallet Qty / Claimed:
—
Unit Weight:
2.50
Packaging Mat. Wt:
18.0
Est. Skid Wt (no top):
—
Actual Skid Weight:
—
Variance Allowed:
—
FAS Cell:
—

Double-clicking a value jumps back to its step (SkipToCollectionStep).

Serial decoded for julian production date + line code in the real app; the mock shows the scan state.

API layer

HAVEGET /api/lookups/serial/{serial}/valid
DB ▸ pure logic — no tables
HAVEGET /api/lookups/serial/{serial}/found
DB ▸ UnitGenealogy.UnitClaimingSkids (15 rows)
HAVEGET /api/lookups/serial/{serial}/duplicate-warning
DB ▸ UnitGenealogy.UnitClaimingSkids (15 rows)
HAVEGET /api/lookups/serial/{serial}/production-date
DB ▸ pure logic — no tables
HAVEGET /api/lookups/serial/{serial}/fas-cell
DB ▸ ProductionLine.ProductionLineCodeInfo (2 rows)

Validation

V-SER-01Serial format — 6 regexes + length ≤ 12 (SerialNumberIsValid). Invalid → “This is an invalid serial number.”, Next refused. Skipped when EnforceSerialNumberValidation=false. Standard, Combo, LowVolume, Kit.
V-SER-022D/scan preprocessing — strip spaces/special chars, parse serial out of 2D label before any check (ParseSerialFrom2DIf2DFound).
V-SER-03FAS cell resolvable from prod-line code (GetFASCellFromSerial). Unresolvable → “No FAS Cell could be found…”, Next refused. Standard, Combo, LowVolume.
V-SER-04Duplicate serial → blue warning with skid id, model, qty, prev claim date (SerialNumberIsFound + GetDuplicateSerialWarningMessage). Next allowed.
V-SER-05Reprint only — skid ID must exist (Standard/Combo origin, ~10-yr lookback; leading S/s trimmed). Missing → “...cannot be found in the database.”, Next refused.
V-SER-06LowVolume only — julian age > 1 day → Yes/No confirm; No returns to Main Menu.
V-SER-07Combo 2nd half only — serial must be on the skid license plate (SkidLicensePlateWiz.isSerialFoundOnSkid). ❌ No web endpoint yet.
V-SER-08Scanner-only entry where keyboard entry is disallowed (TextBoxScannerFilter).
V-SER-09BoxLabel bypass — any serial accepted, even blank; no validation runs.