issue #234 整單作廢與發票狀態解耦決策鏈

這頁保留整單作廢與發票狀態的 issue source。它的重點是:不要用舊文字把發票 issued 狀態誤當成整單作廢硬阻擋。

最終結論

申請單資料狀態與發票/收據狀態是兩條軸。PM 後續決策推翻了「有發票就不能整單作廢」的簡化說法;整單作廢不應只因發票已開立就被硬擋。帳務狀態需要由發票/收據流程各自處理。

決策鏈

來源內容
#52早期作廢規則與發票狀態有混在一起的描述。
#195帳務/發票狀態轉移問題延伸。
#234明確整理整單作廢是否應檢發票 issued,結論轉向解耦。
#239per-item invoice/receipt flow 補強後,帳務確認與申請單作廢更不能混成單一狀態。

現行 code 錨點

目的錨點
整單作廢守門ApplicationVoidGuard.CheckErpVoidBlockersAsync
整單作廢執行ApplicationActionService.CancelAsync
單項發票/收據驗證Verify-ItemVoucher.cs
申請單狀態權威資產狀態機

注意事項

  • 不要把舊 issue body 的發票 issued gate 直接搬回 code。
  • 要回答「能不能作廢」先看申請單/資產狀態;要回答「帳務票據怎麼處理」另看票據 flow。
  • 這頁是 source 層,穩定規則應併入作廢/帳務 concept。