# 出貨有兩個暫停原因，解決一個可以放行嗎？

每個暫停原因各留提出者及狀態，再核今次是否已無阻塞。

## 各個暫停原因各有處理結果

原創 F1 記錄有地址覆核人提出 H-address，以及訂單負責人提出 H-choice，兩項都 active。有任何 active 就暫停；沒有 active 但有未明則待核；全部 resolved 才是 clear。暫停原因已清，也不代表所有出貨前置工作都完成。

已填獨立暫停原因表

| 暫停項 | 提出者 | 狀態 | 影響 |
| --- | --- | --- | --- |
| H-address | 地址覆核人 | active | 阻塞 F1 |
| H-choice | 訂單負責人 | active | 阻塞 F1 |

## 解決一項，不刪掉另一項

原例兩項都令出貨暫停。H-address 解決後，H-choice 仍阻塞 F1。兩項都解決時，此暫停關卡才清；其他出貨準備仍各自核。本表不改預留存貨數量。

1. 列各暫停項及提出者
2. 逐項記處理結果
3. 保留未解及未明
4. 只報今個關卡

解決一項，不會取得權限去蓋過外部系統暫停。

H-address 解決但 H-choice 仍 active，暫停關卡清了嗎？

未清，H-choice 仍是阻塞的未解暫停項。

## 整理例外狀態需求

完整素材有兩項未解、解決一項及剩下一項未明。自訂營運需求可訂每項編號、負責決定及另行出貨準備關卡。

H-address 已解而 H-choice null，關卡待核，不是清了。最多 30 個不同原因編號及已提供提出者名稱，不判欺詐風險、批准權限、合約權利或可否蓋過系統暫停。

存貨數量請看預留解除教材；由其他服務控制已接工作是否停止時，可看外部取消要求例子。

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

```json
{
  "issuer": "Astera Technology",
  "resource": "ops-fulfillment-independent-holds",
  "locale": "zh-HK",
  "contract": "原創 F1 記錄有地址覆核人提出 H-address，以及訂單負責人提出 H-choice，兩項都 active。有任何 active 就暫停；沒有 active 但有未明則待核；全部 resolved 才是 clear。暫停原因已清，也不代表所有出貨前置工作都完成。",
  "input": {
    "fulfillment": "F1",
    "holds": [
      {
        "id": "H-address",
        "issuer": "Address reviewer",
        "state": "active"
      },
      {
        "id": "H-choice",
        "issuer": "Order owner",
        "state": "active"
      }
    ]
  },
  "output": {
    "ok": true,
    "state": "complete",
    "result": {
      "fulfillment": "F1",
      "active": [
        "H-address",
        "H-choice"
      ],
      "unknown": [],
      "gate": "held"
    },
    "trace": [
      {
        "id": "H-address",
        "issuer": "Address reviewer",
        "decision": "blocks"
      },
      {
        "id": "H-choice",
        "issuer": "Order owner",
        "decision": "blocks"
      }
    ]
  },
  "verificationCases": [
    {
      "name": "baseline",
      "input": {
        "fulfillment": "F1",
        "holds": [
          {
            "id": "H-address",
            "issuer": "Address reviewer",
            "state": "active"
          },
          {
            "id": "H-choice",
            "issuer": "Order owner",
            "state": "active"
          }
        ]
      },
      "expected": {
        "ok": true,
        "state": "complete",
        "result": {
          "fulfillment": "F1",
          "active": [
            "H-address",
            "H-choice"
          ],
          "unknown": [],
          "gate": "held"
        }
      }
    },
    {
      "name": "material-edit",
      "input": {
        "fulfillment": "F1",
        "holds": [
          {
            "id": "H-address",
            "issuer": "Address reviewer",
            "state": "resolved"
          },
          {
            "id": "H-choice",
            "issuer": "Order owner",
            "state": "active"
          }
        ]
      },
      "expected": {
        "ok": true,
        "state": "complete",
        "result": {
          "fulfillment": "F1",
          "active": [
            "H-choice"
          ],
          "unknown": [],
          "gate": "held"
        }
      }
    },
    {
      "name": "fresh-boundary",
      "input": {
        "fulfillment": "F1",
        "holds": [
          {
            "id": "H-address",
            "issuer": "Address reviewer",
            "state": "resolved"
          },
          {
            "id": "H-choice",
            "issuer": "Order owner",
            "state": null
          }
        ]
      },
      "expected": {
        "ok": true,
        "state": "unknown",
        "result": {
          "fulfillment": "F1",
          "active": [],
          "unknown": [
            "H-choice"
          ],
          "gate": "unknown"
        }
      }
    }
  ],
  "meaningOfNull": "該欄位未知或沒有已建立的值；請按逐項結果判斷。",
  "businessSideEffects": false
}
```
