# 自訂欄位加了限制，舊商品哪些要覆核？

把有效、超範圍、錯類型及未填分清，逐項留待覆核。

## 按已訂定義核原有值

本例商品欄位必填 1 至 12 整數，兩端包括。P1 是 6，P2 是 0，P3 是文字 six，P4 是 null。這只是本地必填約定，不模擬供應商移轉，也不把文字自動變數字。

已填原有值覆核表

| 商品 | 原值 | 分類 | 下一步 |
| --- | --- | --- | --- |
| P1 | 6 | 有效 | 保留 |
| P2 | 0 | 超範圍 | 取得正確值 |
| P3 | six | 錯類型 | 核數值事實 |
| P4 | null | 未填 | 保留必填缺口 |

## 加新定義不會修好舊記錄

一筆有效、兩筆無效、一筆未填。只改 P2 不會解決 P3、P4。未填另行報，不計有效，也不當空格而略過。

1. 列類型及包括兩端的範圍
2. 逐項查看原有值
3. 錯值與未填分開
4. 逐項覆核更正事實

更正須有自己已提供的值，不為通過便夾到範圍邊或補數。

P2 改 1、P3 改 6、P4 改 12，全部有依據後，哪些通過？

四筆都通過，包括原 P1。1、12 都在已訂包括兩端範圍內。

## 定義錯誤與資料錯誤分開

下載檔含四筆原值及完整更正個案。這是覆核工作表，不是更新檔，也不證明網店存檔成功。批次寫入結果請用現有逐項結果教材。

下限 13 而上限 12，便以 DEFINITION_INPUT 拒絕，不按不可能的定義分資料。範圍為 0 至 1,000 整數，記錄編號不重複；null 是未填，錯類型仍保留原值依據。

資料管理流程應有可見未解清單及受控更正範圍，不能見無效值便全自動換掉。

## 完整本地記錄與逐項結果

```json
{
  "issuer": "Astera Technology",
  "resource": "ops-product-invalid-field-review",
  "locale": "zh-HK",
  "contract": "本例商品欄位必填 1 至 12 整數，兩端包括。P1 是 6，P2 是 0，P3 是文字 six，P4 是 null。這只是本地必填約定，不模擬供應商移轉，也不把文字自動變數字。",
  "input": {
    "minimum": 1,
    "maximum": 12,
    "records": [
      {
        "id": "P1",
        "value": 6
      },
      {
        "id": "P2",
        "value": 0
      },
      {
        "id": "P3",
        "value": "six"
      },
      {
        "id": "P4",
        "value": null
      }
    ]
  },
  "output": {
    "ok": true,
    "state": "unknown",
    "result": {
      "valid": [
        "P1"
      ],
      "invalid": [
        "P2",
        "P3"
      ],
      "missing": [
        "P4"
      ]
    },
    "trace": [
      {
        "id": "P1",
        "value": 6,
        "decision": "valid"
      },
      {
        "id": "P2",
        "value": 0,
        "decision": "out-of-range"
      },
      {
        "id": "P3",
        "value": "six",
        "decision": "wrong-type"
      },
      {
        "id": "P4",
        "value": null,
        "decision": "missing"
      }
    ]
  },
  "verificationCases": [
    {
      "name": "baseline",
      "input": {
        "minimum": 1,
        "maximum": 12,
        "records": [
          {
            "id": "P1",
            "value": 6
          },
          {
            "id": "P2",
            "value": 0
          },
          {
            "id": "P3",
            "value": "six"
          },
          {
            "id": "P4",
            "value": null
          }
        ]
      },
      "expected": {
        "ok": true,
        "state": "unknown",
        "result": {
          "valid": [
            "P1"
          ],
          "invalid": [
            "P2",
            "P3"
          ],
          "missing": [
            "P4"
          ]
        }
      }
    },
    {
      "name": "material-edit",
      "input": {
        "minimum": 1,
        "maximum": 12,
        "records": [
          {
            "id": "P1",
            "value": 6
          },
          {
            "id": "P2",
            "value": 1
          },
          {
            "id": "P3",
            "value": 6
          },
          {
            "id": "P4",
            "value": 12
          }
        ]
      },
      "expected": {
        "ok": true,
        "state": "complete",
        "result": {
          "valid": [
            "P1",
            "P2",
            "P3",
            "P4"
          ],
          "invalid": [],
          "missing": []
        }
      }
    },
    {
      "name": "fresh-boundary",
      "input": {
        "minimum": 13,
        "maximum": 12,
        "records": [
          {
            "id": "P1",
            "value": 6
          },
          {
            "id": "P2",
            "value": 0
          },
          {
            "id": "P3",
            "value": "six"
          },
          {
            "id": "P4",
            "value": null
          }
        ]
      },
      "expected": {
        "ok": false,
        "error": "DEFINITION_INPUT"
      }
    }
  ],
  "meaningOfNull": "該欄位未知或沒有已建立的值；請按逐項結果判斷。",
  "businessSideEffects": false
}
```
