{
  "synthetic": true,
  "checkedOn": "2026-10-23",
  "title": "Six-row supplier mapping risk report",
  "scope": "Teaching report for shopify-held-candidate.csv, cross-referenced to supplier-source.csv and demo-rules.json. Not a customer engagement or live Shopify import.",
  "rowNumbering": "CSV record numbers including the header as row 1; these fixtures contain no multiline cells.",
  "localResult": { "rows": 6, "columns": 12, "verdict": "blocked", "errors": 2, "warnings": 3 },
  "reviewedResult": { "rows": 4, "columns": 12, "verdict": "clear", "findings": 0 },
  "findings": [
    {
      "id": "R01",
      "priority": "P1",
      "origin": "scanner",
      "code": "INVALID_PRICE",
      "severity": "error",
      "file": "shopify-held-candidate.csv",
      "row": 2,
      "field": "Price",
      "evidence": "Price is $19.90, not a plain decimal.",
      "risk": "The local numeric rule blocks this value.",
      "action": "Use 19.90 only under the explicit USD selling-price rule in demo-rules.json.",
      "question": "Does this amount mean selling price in the target store currency?",
      "recheck": "Reviewed row 2 has Price=19.90; the local INVALID_PRICE finding is absent."
    },
    {
      "id": "R02",
      "priority": "P1",
      "origin": "scanner",
      "code": "INVALID_INVENTORY",
      "severity": "error",
      "file": "shopify-held-candidate.csv",
      "row": 3,
      "field": "Inventory quantity",
      "evidence": "Inventory quantity is 6 pcs, not an integer.",
      "risk": "The local inventory rule blocks this value.",
      "action": "Use 6 only under the confirmed single-item count rule; keep multi-location inventory outside this example.",
      "question": "Are these single-item counts for one location, rather than cases or available-to-promise quantities?",
      "recheck": "Reviewed row 3 has Inventory quantity=6; the local INVALID_INVENTORY finding is absent."
    },
    {
      "id": "R03",
      "priority": "P1",
      "origin": "scanner",
      "code": "DUPLICATE_VARIANT_KEY",
      "severity": "warning",
      "file": "shopify-held-candidate.csv",
      "row": 4,
      "field": "Handle / options",
      "previousRow": 2,
      "evidence": "dp-demo-tee + Size=S repeats row 2 because the mapping omitted Color.",
      "risk": "Different SKUs do not make the represented option combination unique.",
      "action": "Represent the confirmed Color and Size options; do not delete a row to hide the collision.",
      "question": "Are Red S and Blue S distinct variants of the same product?",
      "recheck": "Reviewed rows 2 and 4 have distinct Color+Size keys: Red/S and Blue/S."
    },
    {
      "id": "R04",
      "priority": "P1",
      "origin": "scanner",
      "code": "DUPLICATE_VARIANT_KEY",
      "severity": "warning",
      "file": "shopify-held-candidate.csv",
      "row": 5,
      "field": "Handle / options",
      "previousRow": 3,
      "evidence": "dp-demo-tee + Size=M repeats row 3 because the mapping omitted Color.",
      "risk": "The same mapping omission also affects medium variants.",
      "action": "Apply the approved two-option mapping consistently across the product group.",
      "question": "Are Red M and Blue M separate variants, using the same option names?",
      "recheck": "Reviewed rows 3 and 5 have distinct Color+Size keys: Red/M and Blue/M."
    },
    {
      "id": "R05",
      "priority": "P1",
      "origin": "scanner",
      "code": "DUPLICATE_VARIANT_KEY",
      "severity": "warning",
      "file": "shopify-held-candidate.csv",
      "row": 6,
      "field": "Handle / options",
      "previousRow": 2,
      "evidence": "dp-demo-tee + Size=S repeats row 2; the Green row also has an unresolved selling price in the source.",
      "risk": "Correcting option columns alone would not approve this row's selling price.",
      "action": "Keep this record on hold for R06 instead of exporting it as a reviewed variant.",
      "question": "What selling price is approved for DP-GREEN-S?",
      "recheck": "DP-GREEN-S remains in the source and is absent from the four-row reviewed candidate."
    },
    {
      "id": "R06",
      "priority": "P1",
      "origin": "manual",
      "code": null,
      "severity": null,
      "file": "supplier-source.csv",
      "row": 6,
      "field": "amount_kind / amount",
      "evidence": "DP-GREEN-S has amount_kind=cost and amount=8.20, while the held target copied 8.20 into Price.",
      "risk": "8.20 is syntactically valid, so the local scanner cannot know it is a supplier cost rather than an approved selling price.",
      "action": "Leave the row on hold. Do not add a margin, fill zero, or assume cost equals selling price.",
      "question": "Which selling price and currency does the buyer approve?",
      "recheck": "Still unresolved: source row 6 is held; no invented selling price is present in the reviewed candidate."
    },
    {
      "id": "R07",
      "priority": "P1",
      "origin": "manual",
      "code": null,
      "severity": null,
      "file": "supplier-source.csv",
      "row": 7,
      "field": "group_code",
      "evidence": "DP-BLACK-M has a blank group_code. Its held target has a Title but no URL handle.",
      "risk": "A title prevents the local missing-identity rule from firing; it does not establish the intended product or variant relationship.",
      "action": "Leave the row on hold. Do not infer its parent from the SKU, name, color, or neighboring row.",
      "question": "Is this a separate new product, a variant of TEE, or an update to an existing product?",
      "recheck": "Still unresolved: source row 7 is held; no guessed handle is present in the reviewed candidate."
    }
  ],
  "importGate": "Buyer must confirm the actual store currency, product identity, create/update intent, inventory setup and overwrite settings, then test a small subset in a development store. No live import was performed.",
  "commercialBoundary": "$49 covers one agreed file up to 10,000 rows: annotated issues and a priority repair plan. These multiple public teaching files do not imply that conversion, cleaned CSV delivery, store access or importing is included."
}
