PASS UPC-A check digit
PASS Bad check digit rejected
PASS Equivalent UPC-A and EAN-13 share canonical ID
PASS Leading zeros survive
PASS EAN-13 validation
PASS EAN-8 validation
PASS Eight digits require symbology
PASS UPC-E expansion
PASS UPC-E resolves to expanded UPC-A
PASS Expanded UPC-E is not expanded twice
PASS Wrong declared barcode length rejected
PASS Marketing QR is not a product identifier
PASS PLU stored separately without GTIN check-digit logic
PASS Organic PLU is not silently conventional
PASS PLU syntax does not assert origin
PASS Bad PLU length rejected
PASS Retailer namespace required
PASS Retailer codes retain zeros
PASS Retailer namespace normalization
PASS Unknown baseline suppresses purchase advice
PASS Absent rule suppresses purchase advice
PASS Low stock replenishes to target
PASS Exactly at minimum is not low
PASS Confirmed zero can recommend restock
PASS Over-target stock does not suggest buying
PASS Target below minimum rejected
PASS Whole count accepted
PASS Zero physical count accepted
PASS Zero receipt rejected
PASS Invalid quantity "-1"
PASS Invalid quantity "1.5"
PASS Invalid quantity "1e3"
PASS Invalid quantity "NaN"
PASS Invalid quantity true
PASS Invalid quantity null
PASS Invalid quantity 1.5
PASS Invalid quantity "100000000"
PASS Date-only leap day accepted
PASS Impossible date rejected
PASS Blank origin/date stays unknown
PASS UUID v4 generation and validation
PASS Malformed request ID rejected
PASS Canonical payload ignores object key order
PASS Control characters rejected
PASS CSV aliases and retailer-row exclusion
PASS CSV import does not create origin data
PASS CSV invalid header rejected
PASS CSV malformed code rejected

48 tests; 0 failed.
