{
  "sample": "Invented Business Central-style export; all names and descriptions are fictional.",
  "client_confirmation": [
    "Six transformations are agreed for this sample; confirm scope and price before work starts.",
    "The semicolon export is UTF-8 with a BOM; its first row is the header.",
    "Trim only surrounding whitespace. Item identifiers are case-insensitive and should be uppercase.",
    "EA, each and Each all mean one each here. No pack-size conversions are approved.",
    "Unit Cost uses European notation and two decimal places. Currency is not inferred.",
    "Inventory notation is mixed: normalize only unambiguous numbers to two decimals; flag 1,234.",
    "Only identical duplicates may be removed. Conflicting duplicate rows must both be held.",
    "Valid identifiers are six digits beginning 000 or FX- plus three digits. Do not reconstruct lost zeros or scientific IDs.",
    "No., Description, Base Unit of Measure, Inventory and Unit Cost are required; stock and cost cannot be negative.",
    "Hold any row with an exception from the cleared-only file. Keep it unchanged except for logged approved transformations in the review file.",
    "Lead times such as 2W and open-order quantities are passed through, not converted or checked in this cleanup scope."
  ],
  "key": "No.",
  "input": {
    "encoding": "utf-8-sig",
    "delimiter": ";",
    "header_row": 1
  },
  "rules": [
    {
      "op": "trim_whitespace",
      "columns": "*"
    },
    {
      "op": "normalize_case",
      "columns": [
        "No."
      ],
      "case": "upper"
    },
    {
      "op": "map_values",
      "columns": [
        "Base Unit of Measure"
      ],
      "mapping": {
        "EA": "EA",
        "each": "EA",
        "Each": "EA"
      }
    },
    {
      "op": "normalize_number",
      "columns": [
        "Unit Cost"
      ],
      "format": "eu",
      "decimals": 2
    },
    {
      "op": "normalize_number",
      "columns": [
        "Inventory"
      ],
      "decimals": 2
    },
    {
      "op": "dedupe_exact",
      "key": "No."
    }
  ],
  "validation": {
    "required": [
      "No.",
      "Description",
      "Base Unit of Measure",
      "Inventory",
      "Unit Cost"
    ],
    "numeric_min": {
      "Inventory": 0,
      "Unit Cost": 0
    },
    "key_pattern": "(?:000\\d{3}|FX-\\d{3})"
  }
}
