訂明本例驗收任務
假設申請表每項剔選位已標為 marked、empty 或 obscured,且此表只容許一項。empty 是看到空白,obscured 是看不清。有看不清便未確認;全部清楚時才核對恰好一個剔選。
- 讀已標明的剔選狀態
- 有遮擋先待覆核
- 再核對恰好一個清楚剔選
無效標籤或看不清須覆核,不能預設為未選。
使用已填個案
| 個案 | 已提供輸入 | 預期結構化結果 | 判斷及原因 |
|---|---|---|---|
| 一個清楚剔選 | {"options":[{"id":"delivery","state":"empty"},{"id":"collection","state":"marked"}]} | {"status":"accepted","selected":["collection"],"unknown":[]} | 只剔 collection;印有 delivery 文字不代表選了。 |
| 另一格看不清 | {"options":[{"id":"collection","state":"marked"},{"id":"courier","state":"obscured"}]} | {"status":"review","selected":["collection"],"unknown":["courier"]} | courier 可能影響只可一項的要求,看到 collection 也未能定案。 |
| 全部格都看到空白 | {"options":[{"id":"delivery","state":"empty"},{"id":"collection","state":"empty"}]} | {"status":"count-error","selected":[],"unknown":[]} | 已確認沒有選項,屬零項錯誤,與看不清分開。 |
逐步處理 nothing-selected 個案,須得到甚麼結果?原因是甚麼?
查看參考答案
{"status":"count-error","selected":[],"unknown":[]}。已確認沒有選項,屬零項錯誤,與看不清分開。
執行完整本機驗算
import assert from 'node:assert/strict';
function evaluate(x){
if(x.options.some(o=>!['marked','empty','obscured'].includes(o.state)))return {status:'invalid',selected:[]};
const selected=x.options.filter(o=>o.state==='marked').map(o=>o.id),unknown=x.options.filter(o=>o.state==='obscured').map(o=>o.id);
return {status:unknown.length?'review':selected.length===1?'accepted':'count-error',selected,unknown};
}
const cases = [
{
"id": "one-observed-mark",
"input": {
"options": [
{
"id": "delivery",
"state": "empty"
},
{
"id": "collection",
"state": "marked"
}
]
},
"expected": {
"status": "accepted",
"selected": [
"collection"
],
"unknown": []
}
},
{
"id": "obscured-second",
"input": {
"options": [
{
"id": "collection",
"state": "marked"
},
{
"id": "courier",
"state": "obscured"
}
]
},
"expected": {
"status": "review",
"selected": [
"collection"
],
"unknown": [
"courier"
]
}
},
{
"id": "nothing-selected",
"input": {
"options": [
{
"id": "delivery",
"state": "empty"
},
{
"id": "collection",
"state": "empty"
}
]
},
"expected": {
"status": "count-error",
"selected": [],
"unknown": []
}
}
];
for (const c of cases) assert.deepEqual(evaluate(c.input), c.expected, c.id);
console.log(JSON.stringify({checked:cases.length,caseIds:cases.map(c=>c.id)}));
剔選觀察與選項一起保留。本例由同事提供觀察狀態,沒有聲稱圖片辨識準確度。