Cirro B2B by Vendor — Overview¶
What this section is: for each B2B retailer, the real inbound 850, the real inbound 940, and exactly what we send Cirro in label_template — built from one real production order and reconciled against the authoritative Cirro Label Detail spec. One page per vendor.
Ground-truth rebuild — real order data, nothing wired
These pages were rebuilt from scratch on 2026-06-02 from real prod EDI plus the authoritative Cirro Label Detail spec, replacing the earlier field-matrix pages (which carried transcription errors). POs and SKUs are real — this is an internal page. Nothing here is wired yet. Part of CI-240 (XB → Cirro B2B migration).
The vendors¶
| Vendor | Partner ID | PO | OMS order | Hard data gap |
|---|---|---|---|---|
| Amazon | 080* |
89GQASZX |
ORD225299 | 🔴 UPC |
| Walmart | 529 |
6736452611 |
ORD222519 | 🔴 ShipmentID |
| Best Buy | 552 |
VJCCKL |
ORD224889 | 🔴 GTIN-14 |
| Target | 009 |
10001912470-0594 |
ORD225332 | ✅ none |
| Superior | 005 |
PO264566 |
ORD221273 | ✅ none |
Partner ID = the TradingPartnerId prefix on the inbound 850 (constant per retailer). It's the key the build logic uses to decide which labels a vendor needs and what platform_sku means.
How label_template is structured¶
label_template is four named sub-objects, one per physical label — not a single label:
| Sub-object | Physical label |
|---|---|
ucc_label |
UCC / carton label |
packing_slip_label |
Packing slip |
pallet_label |
Pallet label |
gtin14_label |
Walmart GTIN / ITF-14 label |
Each carries a header (type / dept / dc / store) plus its own items[]. A vendor includes only the sub-objects its labels need — Walmart uses all four; Amazon uses two (ucc_label + pallet_label); Target, Best Buy, and Superior use three. And the fields differ per label — e.g. Walmart's UPC rides only on the packing slip, its GTIN-14 only on the dedicated GTIN label; Best Buy carries GTIN-14 on the packing slip with no separate GTIN label.
Per-label field split — decided
Each sub-object carries only its own label's required Order-Push fields — no union, no extraneous data. We follow the Cirro label spec per label. (Previously flagged as the open build question; now settled on our side.)
Mixed vs single-ASIN — decided (Cirro-derived)
Mixed vs single-ASIN designation is derived by Cirro from the carton SKU mix — PopSockets does not send a flag.
Ship From / Ship To ride in consignee_info, not label_template
They print on the labels but are not in label_template — they're sent at the order level in consignee_info. So an empty items: [] on a label means "this label's only Order-Push content is the address (sent elsewhere) — nothing item-level is ours."
The three data gaps¶
Every other Order-Push field comes straight off the 940. Three do not — there's no source for them in our EDI, so they surface as null. Amazon's upc ownership is now settled — it's ours (see below); the other two still need a decision from Cirro (the two open questions below):
- Amazon —
upc. Ours to push (settled 2026-06-08). Cirro cannot supply it — they hold multiple UPCs per item and can't pick the right one — so despite the spec marking it auto-gen (3rd-party barcode from the product), the UPC is ours. It's on neither the 850 nor the 940 (both carry only our SKU), so the plan is for NAV to populate<ConsumerPackageCode>on the Amazon 940 — the same pattern as Walmart, whose 940 already carries UPC, so Camel reads it uniformly. (Alternative: a product-master lookup.) - Walmart —
shipment_id(packing slip). Order-Push, but no shipment-ID field exists on the 850 or 940. Is it the OMS order number (SI=ORD222519), or assigned at ship time like the SSCC? - Best Buy —
gtin14(packing slip). No GTIN tag anywhere on the EDI — onlyConsumerPackageCode(UPC). It lives in the product master (Arena/NAV). Do not auto-derive00+UPC — consumer-unit vs case-pack GTIN-14 is unknown and that guess can be wrong.
Walmart is the one vendor whose GTIN-14 is native in the 940 (00840173715055); Best Buy's is absent. The two are different situations — don't generalize one to the other.
Open questions for Cirro¶
What's left for Cirro — everything else is decided on our side (we follow the label spec: required Order-Push fields per label, and we don't send what Cirro auto-generates), with the rest low-stakes format to settle in implementation. (Amazon's upc ownership is no longer on this list — Cirro confirmed 2026-06-08 they can't supply it, so it's ours; see the data gaps above.)
- Walmart
shipment_id— Order-Push on the packing slip, but no shipment-ID on the 850 or 940. Our order number (SI= OMS order id), or assigned at ship time like the SSCC? - Best Buy
gtin14— consumer-unit (00+UPC, do not assume) or case-pack? No GTIN on the 850/940; it's a product-master lookup, not an EDI field.
Scope¶
Covers the 5 vendors in the Cirro label spec. Prod 850s show ~6 more live B2B retailers with undefined label requirements — Office Depot / Veyer (644), AutoZone (524), Hobby Lobby (7DJ), Meijer (522), a Terre Haute DC (549), FSC-ADS (0NO). If those need B2B labels, their required fields are still unmapped.
Related¶
- Design: Cirro B2B
label_template— config-driven build (CI-433) — the send-side build design for these payloads (proposed, Phase 1.5). - Design: Cirro B2B — enriched ship confirmation & 856/945 (CI-434) — the receive-side design (ship-confirm + 856/945 + B2B/B2C flag), the sibling half of Phase 1.5.
- Cirro B2B API — Proposed Field Adjustments — the full proposed
request_data/label_template/carton_list[]API shape these payloads instantiate. - EDI Pipeline — full 850→810 lifecycle context.
Built from real prod EDI pulled 2026-06-02. Raw 850/940 archived in the camel repo at reference/cirro/edi-samples/.