Retail EDI X12 850 / 810 Quality
ASC_X12free16 data-quality rules for retail ASC X12 Purchase Order (850) and Invoice (810) transaction sets. Covers control-number linkage (ISA/GS/ST/SE), segment/element mandatory presence, purpose and transaction-type codes, UPC/GTIN check digit, quantity and unit-price ranges, line-item extended amount footing, invoice-to-total balancing, unit-of-measure and currency codes, ship/delivery date ordering, duplicate PO/invoice suppression, and trading-partner ID validity. Malformed interchanges are 997/999-rejected by the receiver's translator.
Checks included (16)
ST/SE Control Numbers Match
The transaction set trailer SE01 (segment count) and SE02 (control number) must reference the matching ST02 control number, and the counted segments must equal the actual count. Broken envelopes are rejected with a 999.
Requested Ship Date Before Cancel Date
The requested delivery/ship date (DTM 002/010) must be on or before the cancel-after date (DTM 001). An order that ships after its own cancel date is contradictory.
Line Extended Amount = Qty * Unit Price
For each IT1 line, the extended amount must equal quantity invoiced times unit price (within a small rounding tolerance). Footing errors cause payment disputes.
Invoice Total (TDS01) Equals Sum Of Lines
The TDS01 total monetary value must equal the sum of the line extended amounts (plus allowances/charges where applicable). An unbalanced invoice is rejected or short-paid.
Reported Line Count (CTT01) Matches Actual
The CTT01 transaction totals segment reports the number of line items; it must equal the actual PO1/IT1 line count in the transaction set.
PO Purpose Code (BEG01) Valid
BEG01 transaction-set purpose code must be a valid X12 value: 00 (Original), 01 (Cancellation), 04 (Change), 05 (Replace), 06 (Confirmation).
UPC / GTIN Check Digit Valid
Line-item UPC/GTIN (PO1 qualifier UP/UK) must pass the GS1 mod-10 check digit. Bad barcodes cause receiving mismatches and chargebacks.
Unit Of Measure (PO103) Valid
PO103 unit or basis for measurement must be a valid X12/UN-ECE code (e.g., EA, CA, BX, LB, KG, DZ, PK). Unknown UOM breaks pricing.
Interchange ID Qualifier (ISA05/07) Valid
The ISA05/ISA07 interchange ID qualifiers must be valid two-character X12 codes (e.g., 01 DUNS, 08 UCC/EAN, 12 phone, ZZ mutually defined). Bad qualifiers break partner routing.
PO Number (BEG03) Present
The 850 BEG segment must carry a purchase order number in BEG03. A PO with no number cannot be acknowledged or fulfilled.
Invoice Number (BIG02) Present
The 810 BIG segment must carry an invoice number in BIG02. Invoices with no number cannot be matched or paid.
Line Quantity (PO102) Positive
Each PO1 ordered quantity must be greater than zero; zero or negative quantities are invalid on an original order.
Unit Price (PO104) Non-Negative
The PO104 unit price must be non-negative; a negative unit price on a purchase-order line is a data error.
Invoice References A Known PO (BIG04)
The 810 BIG04 purchase-order number must reference an existing 850 PO. An invoice for an unknown PO cannot be three-way matched.
Currency Code (CUR) Is ISO 4217
When a CUR segment is present its currency code must be a valid ISO 4217 alpha-3 code from the reference table.
PO Number Unique Per Partner
A purchase-order number must be unique within a trading-partner/sender. Duplicate PO numbers cause double-shipment.