如何用 AI 提取發票行項目:先保留原值,再重算總額

如何用 AI 提取發票行項目:先保留原值,再重算總額

Olivia Park
2026年9月6日· 10 分鐘讀完

要用 AI 提取發票行項目,先在處理單據之前界定一行輸出的模樣,保留每個原始值和頁面定位,然後以確定性的公式核實金額。AI 可以提出結構化的行;但它絕不應判定缺行、來歷不明的收費、幣種衝突或總額不符是無關痛癢的。

對發票而言,負責任的 AI 流程尤其重要,因為整齊的 JSON 並不能證明單據被正確讀取。把提取、計算和會計審批視為三個獨立的階段。

關鍵要點

  • 為每張發票和每條可見的行編配穩定的身份識別和來源定位。
  • 原始文字與標準化欄位並列存放;切勿覆寫證據。
  • 把數量、單位淨價、折讓、附加費、稅項和捨入分開。
  • 在模型以外重算行金額和單據控制總額。
  • 把缺失、重複、含糊或不符的紀錄交給人處理。

甚麼是用 AI 提取發票行項目?

發票行項目是你的流程打算審批、核對、入帳或提出異議的最小計費單位。它通常是一行可見的產品或服務,但續行、組合描述、貸項行、小計、運費或稅額匯總在頁面上可能看來相似。提取之前先界定粒度,以免模型只為令表格整齊而合併或拆分行。

Peppol 帳單規則區分了單據總額、發票行、折讓、附加費、稅項類別和捨入關係。[1]歐盟委員會把歐洲電子發票標準形容為一個語意資料模型,旨在支援可互通的發票資料。[2]OASIS UBL 同樣為發票行、價格、數量、折讓或附加費、稅項和貨幣總額提供各自的結構。[3]這些是設計欄位時有用的參考,而不是普遍適用的稅務或記帳指引。

為你實際處理的單據集寫一份行政策:

頁面物件輸出處理方式
產品或服務行一條候選行,有自己的行 ID
換行的描述只有在版面位置和覆核都確認時,才併入上一行
頁首或頁尾作為單據詮釋資料存放,而不是計費行
折讓或附加費按顯示內容原樣記錄在行級或單據級
稅額匯總與貨品或服務行分開存放
小計或應付金額作為控制總額,而不是另一項購買的貨品

如果發票是 PDF,先依循 PDF 表格提取流程處理。即使在同一個檔案中,含可選取文字、掃描像素、多張表格或旋轉版面的頁面,亦可能需要不同的提取方法。

如何準備證據與行結構?

步驟 1:凍結來源包與控制總額

為原始檔案編配一個不可更改的匯入 ID,並記錄檔案名稱、接收時間戳、頁數、印在單據上的供應商身份、發票號碼、發票日期、標明的幣種,以及任何已批准的查重鍵。原件留在受管治的來源系統;不要讓 AI 充當檔案庫。

提取各行之前,先從單據記錄可見的控制數,不作任何詮釋:

  • 標明的行金額小計;
  • 單據級的折讓和附加費;
  • 按標明的稅項類別或稅率列出的稅額小計;
  • 不含稅總額和含稅總額;
  • 預付金額、捨入金額和應付金額;
  • 每個相關金額旁標示的幣種;
  • 版面看得出時,每頁的行數。

欄位欠缺時記為 Not shown,而不是零。零是一個財務數值;欠缺是一種證據狀態。如果兩頁標明的幣種或發票號碼不同,便把兩項觀察都保留並開立一項異常,而不是揀選看來較合理的那個。

步驟 2:建立保留來源的行結構

使用一種能還原提取器看到甚麼、標準化又改了甚麼的結構。實用的最低要求是:

欄位用途
匯入 ID/發票 ID把每一行連繫到已凍結的來源
候選行 ID發票內穩定的行身份
頁面與區域定位頁碼加邊界框、表格/行號或同等位置資料
原始行文字為覆核而保留的逐字證據
供應商行號印出的行號,或 Not shown
描述/貨品識別碼文字與識別碼分開,不作猜測
數量/單位代碼原始值和標準化值
單位淨價/價格基數價格以及單據所用的任何基數數量
行級折讓/附加費金額、原因和層級
稅項類別/稅率嚴格按標明內容;不推斷司法管轄區
報告的行金額該行印出的金額
計算的行金額確定性的重新計算結果
提取可信度分流訊號,絕不是正確性的證據
異常/覆核人/狀態人手處置和審計軌跡

數值欄位要把 raw_value、normalized_value 和 normalization_rule 分開存放。小數分隔符、千位分隔符、括號、後置負號以及因地區而異的幣種寫法,都必須按明確的單據政策解析。提取完成後,可參考表格清理指南,但不要改動來源紀錄。

AI 應如何提取並規範行項目?

步驟 3:只提取可見值,不補空白

每次只處理一頁或一個有邊界的表格。要求模型傳回符合結構的行,另加未能對應的文字和結構警告。它不應為令發票平帳而加入一件可能欠缺的產品、從上一行複製數值,或把無法辨認的字元變成一個方便的數字。

只提取這個有邊界的頁面區域中可見的發票行證據。
傳回原始行文字、頁面與區域定位、候選行身份,以及
所要求的欄位。保留標點、正負號、小數分隔符、幣種、
單位和欠缺狀態。不要合併行、推斷稅務處理、修正總額,
或創造數值。把不確定的分段和未對應的文字放入異常。

有用的結構警告包括:跨頁的行、表格內重複出現的標題列、孤立的金額、沒有數字儲存格的描述、遮蓋文字的圖片,以及同一欄位可能對應兩欄。可信度分數可協助排定覆核優先次序,但分數再高也不能取代與來源比對。

步驟 4:按明確規則規範數值

只有在保留原始值之後才作標準化。按已記錄的地區和供應商規則,解析正負號、小數符號、分組符號、百分比、單位和幣種代碼。遇到含糊的形式便拒絕,而不是悄悄強制轉換。

例如,1.250,00 在一種慣例下可能代表 1,250.00,而 1.250 在其他地方既可能是分組整數,亦可能是小數。模型無法單憑格式解決這種歧義,需要有佐證的單據詮釋資料或人手確認。

按適用的發票規範和機構政策所要求的精度,以十進制算術處理金額。審批計算不要使用二進制浮點數。不要只因印出的總額有兩位小數,便把每個中間值都捨入;容許捨入的環節必須來自適用的規則和發票背景。

步驟 5:確定性重算每行

先界定公式,才套用。一條簡化的行金額公式可以是:

計算的行金額 = 數量 × 單位淨價 ÷ 價格基數 − 行級折讓 + 行級附加費

這是一條控制公式,而不是普遍適用的稅務規則。有些單據對價格基數、折扣、附加費、稅項、貸項或捨入的表達方式不同。Peppol 為採用其規範的發票公佈了明確的計算和捨入規則。[1]只有當發票和流程確實屬該規範範圍時,才套用這些規則。

存放所有公式輸入、規則版本、未捨入的結果、捨入操作、計算結果、報告結果和差額。然後按已批准的容差為差額分類。AI 可以解釋是哪項輸入造成差異,但計算應由確定性程式碼或經覆核的試算表完成。

使用資料驗證清單測試必填欄位、數值範圍、正負號慣例、容許的幣種狀態和定位是否完整。

如何驗證總額與完整性?

步驟 6:逐層勾稽單據總額

分層計算總額,令差額一直可以診斷:

  1. 按幣種加總計算出的行金額。
  2. 把該總和與報告的行金額小計比較。
  3. 加上經核實的單據級折讓和附加費。
  4. 按適用規則和標明的稅項類別重新計算稅額小計。
  5. 比較不含稅總額和含稅總額。
  6. 加上經核實的預付款和捨入,得出應付金額。
  7. 把每個計算出的控制數與印出的控制數比較。

切勿把不同幣種的金額加成一個數。如果單據除發票幣種外亦使用稅務記帳幣種,便分開存放兩者的角色,只套用獲授權的換算規則。欠缺匯率並不代表可以去取得現時的市場匯率。

對帳表應列出 control name、reported amount、calculated amount、currency、difference、tolerance rule、status 和 reviewer。雙表核對流程有助把提取出的行與採購訂單或總帳匯出資料比較,但單據本身的算術應先獨立通過。

步驟 7:檢查缺行和重複行

單靠總額無法證明完整。一條欠缺的行和一條重複的等值行可能互相抵銷。把算術檢查與結構檢查結合起來:

  • 按頁比較可見行數與提取出的候選行數;
  • 保留印出的行號,並標示缺號或重號;
  • 偵測重複的原始文字和相同的來源區域;
  • 確保每個含金額的區域都對應到某一行,或明確標為非行物件;
  • 比較跨頁續行和重複的標題列;
  • 覆核零值、負數、異常大的金額以及只有描述的行;
  • 分辨真正的貸項行與提取時的正負號錯誤。

不要自動刪除重複項目。兩條相同的服務行可能屬合法,而從重疊頁面區域中被提取兩次的同一行則不是。由來源定位和人手覆核決定如何處置。

如何覆核異常與維護?

步驟 8:把問題送入異常佇列

建立一個發票異常佇列,包含嚴重程度、發票 ID、候選行 ID、來源定位、原始證據、未通過的規則、計算出的差額、負責人、決定、理由和修訂版本。典型類別包括 unreadable、segmentation conflict、missing line、possible duplicate、currency conflict、formula mismatch、tax review 和 control-total mismatch。

訂立停止規則。例如,當發票身份含糊、幣種衝突、必需的行欠缺定位,或應付金額在已批准規則下無法對平時,阻止入帳。可信度較低的描述或可在不阻斷算術的情況下覆核,但這條界線由政策而非模型訂定。

步驟 9:抽樣核驗並持續維護

推出初期,就按風險抽取的樣本逐個欄位、就所有異常,獨立地與來源影像比對。量度欄位層面的準確率、行分段錯誤、欠缺率和重複率、算術不符、按供應商/版面分佈的失誤模式,以及覆核人的更正。單一的單據層面準確率可能掩蓋最關鍵的欄位。

在 OCR、模型、提示、供應商範本或標準化規則改變後重新測試。存放來源、提取器版本、結構版本、計算版本、覆核人決定和更正紀錄。NIST 把虛構內容、私隱、資訊完整性和人機配置列為生成式 AI 的風險範疇。[4]模型接觸之前盡量減少發票資料,並使用已批准的環境。

核對清單

  • 原始檔案、頁數、身份和標明的幣種都已凍結。
  • 已界定行粒度,以及標題列、總額、折讓和附加費的處理方式。
  • 每條候選行都保留了原始文字和頁面/區域定位。
  • 欠缺值保持欠缺,沒有變成零或猜測值。
  • 數量、價格基數、折扣、附加費、稅項和捨入互相分開。
  • 小數解析和捨入規則都有版本號。
  • 行金額和單據總額都以十進制算術重新計算。
  • 完整性檢查並不只依賴總額平衡。
  • 異常都有負責人、理由和有證據支持的處置。
  • 入帳或審批仍由獲授權的財務人員負責。

總結

  • 提取之前先界定行粒度和控制數。
  • 把來源定位和原始值與標準化欄位並列存放。
  • 讓 AI 整理可見的證據,而不是填補空白或修正總額。
  • 以確定性方法重算金額,並逐層對帳。
  • 把結構和金額方面的異常交給負責的人覆核。
  • 為來源、結構、公式和決定建立版本紀錄。

常見問題

AI 的準確率足以自動入帳嗎?

準確率因版面、掃描質素、語言和欄位而異。使用欄位層面的驗證、確定性的總額計算和基於風險的人手審批;不要把流暢的輸出或某一項基準測試當作入帳的依據。

發票小計應該當作行項目嗎?

不應該。除非已批准的結構明確訂明其他角色,否則把可見的小計作為控制總額存放。把它們計作購買項目通常會令金額重複。

空欄位怎麼辦?

使用明確的欠缺狀態,例如 Not shown、Unreadable 或 Not applicable。不要把欠缺轉為零,亦不要複製附近的數值。

AI 能決定正確的發票稅率嗎?

它可以轉錄標明的稅率並標示衝突。確定適用的稅務處理,需要相關司法管轄區、交易事實、現行規則,以及合資格的稅務或會計人員審核。

為甚麼平帳仍可能提取錯誤?

一條欠缺的行和一條重複的行可能互相抵銷,錯誤的數量亦可能被錯誤的價格掩蓋。除總額以外,還要檢查來源涵蓋、行身份和欄位值。

貸項和負數行如何處理?

保留印出的正負號和單據角色,然後套用已批准的發票規則。不要只為令控制總額平衡便把正負號反轉。

能用當前匯率修復幣種差異嗎?

預設不能。保留每個標明的幣種和單據中的換算證據。把欠缺或不一致的匯率交給獲授權的覆核人。

多久重測一次?

在模型、OCR、提示、結構、供應商版面或計算方式有重大改變後重新測試,並持續監察更正情況。

免責聲明: 本文提供的是有關單據處理和控制的一般資訊,不構成會計、稅務、法律或審計意見。請套用適用的發票規範,並由合資格的財務和稅務專業人員批准重要的處理和入帳決定。

來源

  1. OpenPeppol — Peppol BIS Billing 3.0 — https://docs.peppol.eu/poacc/billing/3.0/bis/
  2. European Commission — Compliance with the European eInvoicing standard — https://ec.europa.eu/digital-building-blocks/sites/display/DIGITAL/Compliance%2Bwith%2BeInvoicing%2Bstandard
  3. OASIS — Universal Business Language Version 2.1 — https://docs.oasis-open.org/ubl/os-UBL-2.1/UBL-2.1.pdf
  4. NIST — Artificial Intelligence Risk Management Framework: Generative AI Profile — https://www.nist.gov/publications/artificial-intelligence-risk-management-framework-generative-artificial-intelligence

Sources checked 2026 年 9 月 6 日。

延伸閱讀

開啟 3 天免費試用

註冊即可免費體驗全部高級功能。

*只限新用戶;每位用戶只可獲得一次試用。

如何用 AI 提取發票行項目:先保留原值,再重算總額 | AethoVPN