這是長篇深入探討。如需更快、略讀的版本,請參閱 同伴部落格文章.
1. 為什麼我要構建這個
每家應稅營業額超過 VAT 註冊門檻的英國小型企業都必須透過 HMRC 的 Making Tax Digital (MTD) 服務計算並提交 VAT 申報表(通常每季度一次)。九個編號的盒子。輸出 VAT 減去輸入 VAT。支付淨額,或要求退款。理論上很容易;當您的發票位於 Postgres 中、您的費用收據是來自 20 個不同供應商的 PDF、您的銀行對賬單是來自 Wise 和 Revolut 的 CSV、您的外幣行必須以正確的每月匯率以英鎊重新表述時,這在實踐中是一種懲罰。
幾年來,我一直在應付一個巨大的電子表格、一個日曆提醒和一個小小的信仰飛躍。每個季度大約需要半天時間,其中大部分是資料整理 - 從發票資料庫匯出 CSV,貼上到 Excel,手動分類幾百行,仔細檢查公式,將九個數字複製到第三方 MTD 橋,然後單擊“提交”。審計線索是“相信我,我有一個電子表格”。季度中期的利率變化打破了這一局面。收據不見了。一個錯誤的分類可能會推動 Box 5 減少了數百英鎊。
我今年將管道重建為小型 Claude Code 我的專案直接與我的發票和費用資料庫對話,對每一行進行分類,使用確定性 Python 引擎計算 Box 1 到 Box 9,以 Markdown 報告的形式對報表進行空執行,只有在人工籤核後才提交到 HMRC MTD。現在整個季度大約需要我一個小時,其中大部分時間是與我的會計師一起審查預演。審計跟蹤是一個 git 儲存庫。數學是經過單元測試的。分類器是一個記錄的 Markdown 檔案。提交已被限制。
本文為長版。提示、Python、模式、HMRC OAuth 流程、邊緣情況。如果您首先想要簡短版本,請閱讀 同伴部落格.
2. HMRC MTD 底漆(及免責宣告)
VAT 的 Making Tax Digital 是 HMRC 的要求,即 VAT 註冊企業保留數字記錄並透過記錄的 API 透過相容軟體提交申報表,而不是在 gov.uk 網路表格中輸入數字。 API 是 OAuth2,需要識別原始裝置的防欺詐 HTTP 標頭,並且在您接觸現場製作之前可以在免費沙箱中使用。
回報本身是九個盒子:Box 1 是因銷售和其他產出而產生的 VAT; Box 2 是因從歐盟成員國採購商品而產生的 VAT(與 NI 協議下的北愛爾蘭企業相關); Box 3 是到期的 VAT 總額(Box 1 + Box 2); Box 4是購買時可回收的VAT(輸入VAT); Box 5為支付或回收的淨VAT(Box 3 - Box 4); Box 6 是不包括 VAT 的總銷售額; Box 7是不包括VAT的總購買量; Box 8 是供應給歐盟成員國的商品總價值(同樣僅限 NI); Box 9 是從歐盟成員國收購的總價值(僅限 NI)。有多種方案變體 - 統一費率方案、現金會計、年度會計 - 這些都會發生變化 如何 你得到了數字,但沒有得到盒子的形狀。
免責宣告。 我是一名軟體工程師,而不是一名特許會計師。這篇文章是 不是稅務建議。 VAT 分類、部分豁免、統一費率計劃、數字服務的供應地規則、英國脫歐後歐盟商品和服務的處理以及 NI 協議的確切規則都會隨著時間的推移而變化,並取決於您的具體情況。在針對真實的 HMRC 帳戶執行此類操作之前,請讓一位英國註冊會計師對您的第一份報表進行端到端稽核。有關任何特定邊緣情況的權威規則,請參閱 HMRC VAT 通知 700 以及 gov.uk 網站上的相關通知。會計師一小時的時間成本比一次錯誤提交的成本要小得多。
3. 資料模型
下游的一切都取決於兩個表的形狀:開具的發票(銷售)和記錄的費用(採購)。我將我的保留在 Postgres 中,但相同的形狀也適用於 MySQL 或 SQLite。最小有用模式:
CREATE TABLE invoices (
id BIGSERIAL PRIMARY KEY,
invoice_number TEXT NOT NULL UNIQUE,
issued_at DATE NOT NULL,
customer_name TEXT NOT NULL,
customer_vat_no TEXT,
customer_country CHAR(2) NOT NULL,
net_amount NUMERIC(14,2) NOT NULL,
vat_amount NUMERIC(14,2) NOT NULL,
gross_amount NUMERIC(14,2) NOT NULL,
currency CHAR(3) NOT NULL DEFAULT 'GBP',
fx_rate_to_gbp NUMERIC(18,8) NOT NULL DEFAULT 1,
vat_rate NUMERIC(5,2) NOT NULL,
vat_treatment TEXT NOT NULL,
status TEXT NOT NULL,
paid_at DATE,
notes TEXT,
created_at TIMESTAMPTZ NOT NULL DEFAULT now()
);
CREATE TABLE expenses (
id BIGSERIAL PRIMARY KEY,
supplier_name TEXT NOT NULL,
supplier_vat_no TEXT,
supplier_country CHAR(2) NOT NULL,
incurred_at DATE NOT NULL,
net_amount NUMERIC(14,2) NOT NULL,
vat_amount NUMERIC(14,2) NOT NULL,
gross_amount NUMERIC(14,2) NOT NULL,
currency CHAR(3) NOT NULL DEFAULT 'GBP',
fx_rate_to_gbp NUMERIC(18,8) NOT NULL DEFAULT 1,
vat_rate NUMERIC(5,2) NOT NULL,
vat_treatment TEXT NOT NULL,
category TEXT NOT NULL,
receipt_url TEXT,
notes TEXT,
created_at TIMESTAMPTZ NOT NULL DEFAULT now()
);
不明顯的列是 vat_treatment, fx_rate_to_gbp,以及國家/地區程式碼。 Treatment 是分類器和引擎都使用的一個小列舉;國家程式碼驅動反向收費和歐盟收購邏輯;匯率允許您將外幣發票保留為其原始貨幣,並仍以 GBP 重新說明箱內總計。
| 柱子 | 目的 | 使用者 |
|---|---|---|
vat_treatment | 標準/減少/零/豁免/範圍外/反向收費/歐盟商品/歐盟服務/推遲進口 | 分類器+引擎 |
vat_rate | 0.00、5.00、20.00(或方案特定利率) | 引擎+校驗和 |
currency + fx_rate_to_gbp | 多幣種重結單 | 標準化器 |
customer_country / supplier_country | 反向充電、NI 協議、供應地 | 分類器 |
paid_at | 現金會計計劃分行 | 引擎 |
將這些列回填到舊發票表中是專案中最慢的部分。 Claude Code可以生成遷移;您仍然需要對尷尬的邊緣情況進行手動分類。
4. 為什麼選擇 Claude Code(而不是 Xero / QuickBooks / FreeAgent)
對於大多數英國小型企業來說,答案是真正使用打包軟體。 Xero、QuickBooks、FreeAgent、Sage 都擁有經過 HMRC 認證的 MTD 提交、不錯的 UI 以及已經瞭解它們的會計師。除非有明確的理由,否則您不應該推出自己的 VAT 系統。
我的理由雖然狹隘但卻真實。我已經每天使用 Claude Code 進行軟體工作,因此將它用於 VAT 的邊際努力很小。我的發票資料庫位於我自己的機器上;我不希望將其映象到 SaaS 租戶中。我的供應商組合很尷尬(帶有反向收費的歐盟服務、延遲匯入 VAT、偶爾的零稅率邊緣情況),並且將規則編碼在單個 Markdown 檔案和 Python 模組中,結果比配置 SaaS 來處理它們更快。我從 git 儲存庫獲得的審計跟蹤 - 每個分類器提示、每個差異、每個簽名的週期快照 - 正是我想要的審計跟蹤。
Claude Code 非常適合於此,原因有三個。首先,它直接針對磁碟上的專案工作:它可以讀取我的架構、上一季度的試執行報告、規則檔案和 Python 引擎,並在上下文中提出編輯建議。其次,它擅長枯燥的腳手架——遷移指令碼、CSV 匯入器、協調報告、pytest 固定裝置。第三,當它對一行進行分類時,它會用簡單的英語解釋其推理,這正是我在簽署申報表之前想要檢視的內容。下面工作流程圖底部的決策矩陣是這種權衡的誠實版本。
5. 架構和工作流程
該管道有五個泳道。 來源 是對發票和費用表的只讀訪問許可權,以及來自 Stripe、Wise 和銀行源的 CSV 的放置資料夾。 攝取+標準化 是 Claude 生成的一個小型 Python 指令碼,它將每個源模式對映到一個規範檢視,以 HMRC 月匯率將外幣轉換為 GBP,應用日期範圍過濾器,並使用冪等標記每一行 run_key 所以重新執行是安全的。 分類+協調 是 Claude Code 分類器:它遍歷每個規範行,選擇一個 vat_treatment 使用規則從記錄的列舉中 vat-rules.md,核對發票與付款,並標記異常(負淨值、缺少供應商 VAT 編號、國家/地區程式碼不匹配、應註冊但未註冊的供應商)。 VAT發動機 是一個純Python模組,它讀取分類行並確定性地計算Box 1到Box 9;統一費率、現金和年度計劃分支是明確的程式碼路徑。 提交+稽核 是 HMRC MTD API 呼叫(OAuth2、欺詐預防標頭、沙箱優先),在人工批准步驟後面進行門控,將簽名的週期快照和完整的分類器日誌寫入僅附加稽核資料夾,保留六年。
6. 使用 Claude Code 逐步構建
這是我實際使用的工作流程。五個提示。我為這篇文章清理了它們;原件更加混亂。
提示 1 - 標準化器。 “看看 invoices 和 expenses 表在 schema.sql。生成Python模組 normalise.py 使用讀取兩個表 psycopg (只讀角色 vat_reader), 限制為日期範圍 2026-01-01 到 2026-03-31,併發出帶有鍵的規範字典列表: id, source, date, party, gross, net, vat_amount, vat_rate, vat_treatment, country, currency, fx_rate, run_key。使用 Decimal,不浮動。包括文件字串和 __main__ 列印摘要的塊。”
克勞德返回了一個乾淨的模組 Decimal,引數化 SQL,a build_run_key() 將(period_start、period_end、scheme、schema_version)雜湊成穩定的十六進位制字串和基於Click的CLI。我編輯了兩個欄位名稱並接受了其餘的。
提示 2 - 分類器。 “讀 vat-rules.md 並寫 classify.py。對於每個規範行 normalise.py, 放 vat_treatment 至以下之一: 標準, 減少, 零, 豁免, 範圍外, 反向充電, 歐盟商品, 歐盟服務, 推遲進口。如果該行已經有一個非空 vat_treatment,保留它並將其記錄為 保留。否則,從國家程式碼、供應商VAT編號、類別和金額中決定,並寫一句話 reason 在每一行上。異常情況(負淨值、英國供應商缺少供應商 VAT 高於註冊閾值、國家/地區不匹配)將轉至單獨的部門 anomalies.json 供人工審查。不要改變源資料庫。”
分類器本身是一個小型的、主要基於規則的函式,具有一個 LLM 支援的分支,用於處理不明確的費用類別。重要的是,它永遠不會寫入源資料庫 - 它會發出引擎讀取的分類 JSON 檔案。如果我不同意某個分類,我會編輯 JSON;下一次試執行就會發現這一點。
提示 3 - 引擎。 “寫 engine.py 作為純函式: def compute_boxes(rows: list[Row], scheme: Scheme) -> BoxTotals。無輸入/輸出。沒有 LLM。 BoxTotals 是一個凍結資料類,其中 Box 1 到 Box 9 為 Decimal 值為 2 dp。新增顯式分支 standard, flat_rate, cash, 和 annual 計劃。標準方案為權責發生制:銷售VAT貢獻Box 1,購買VAT貢獻Box 4。反向收費發票新增到 Box 1 和 Box 4 中。推遲匯入 VAT 會新增到 Box 1 和 Box 4 中。歐盟對 NI 業務的收購將納入 Box 2 和 Box 9。按框總數舍入,而不是按行舍入。編寫一個文件,將每個分支與其規則聯絡起來。”
提示 4 - 試執行報告。 “寫 dryrun.py 那個叫 compute_boxes() 併發出 Markdown 報告:帶有句點和方案的標題、帶有規範標籤的 Box 1 到 Box 9 的表格、每個分類器儲存桶的一個部分(按總數列出前 10 行)、異常部分以及帶有 run_key 以及分類 JSON 的 SHA-256。儲存到 ./audit/<period>/dryrun.md."
提示 5 - 提交者。 “寫 submit.py 與 HMRC MTD VAT API v1.0 對比。將 OAuth2 授權程式碼流程與 PKCE 結合使用。從中讀取訪問令牌 ~/.vat/token.json;如果過期就重新整理。 HMRC 記錄的必需的防欺詐標頭;把他們從 fraud_headers.py。預設為沙箱 https://test-api.service.hmrc.gov.uk。步驟: GET /organisations/vat/{vrn}/obligations?status=O,找到匹配的週期,透過顯示空執行摘要提示操作員確認,然後 POST /organisations/vat/{vrn}/returns 和 finalised: true。列印 receiptId。切勿致電現場直播,除非 HMRC_ENV=live 已設定並且運算子型別 提交."
五個提示、四個檔案和一個小的 Markdown 規則文件。總構建時間可能是一週的集中晚上,其中大部分是分類器規則和 HMRC OAuth 舞蹈。
7.VAT引擎
發動機是故意無聊的部分。它是一個純函式,帶有單元測試,沒有人工智慧。這是實際的形狀:
from dataclasses import dataclass
from decimal import Decimal, ROUND_HALF_UP
D2 = Decimal("0.01")
@dataclass(frozen=True)
class BoxTotals:
box1: Decimal
box2: Decimal
box3: Decimal
box4: Decimal
box5: Decimal
box6: Decimal
box7: Decimal
box8: Decimal
box9: Decimal
def _q(x: Decimal) -> Decimal:
return x.quantize(D2, rounding=ROUND_HALF_UP)
def compute_boxes(rows, scheme="standard", is_ni_business=False) -> BoxTotals:
box1 = box2 = box4 = Decimal(0)
box6 = box7 = box8 = box9 = Decimal(0)
for r in rows:
gbp_net = r.net * r.fx_rate
gbp_vat = r.vat_amount * r.fx_rate
if r.source == "invoice":
box6 += gbp_net
if r.vat_treatment in ("standard", "reduced"):
box1 += gbp_vat
elif r.vat_treatment == "eu-goods" and is_ni_business:
box8 += gbp_net
else:
box7 += gbp_net
if r.vat_treatment in ("standard", "reduced"):
box4 += gbp_vat
elif r.vat_treatment == "reverse-charge":
notional = gbp_net * (r.vat_rate / Decimal(100))
box1 += notional
box4 += notional
elif r.vat_treatment == "postponed-import":
notional = gbp_net * (r.vat_rate / Decimal(100))
box1 += notional
box4 += notional
elif r.vat_treatment == "eu-goods" and is_ni_business:
notional = gbp_net * (r.vat_rate / Decimal(100))
box2 += notional
box4 += notional
box9 += gbp_net
box3 = box1 + box2
box5 = box3 - box4
return BoxTotals(
_q(box1), _q(box2), _q(box3), _q(box4), _q(box5),
_q(box6), _q(box7), _q(box8), _q(box9),
)
有兩件事需要注意。首先,每個盒子的總數在最後被量化一次。每行舍入洩漏幾分,HMRC 對於不協調的總數是不可原諒的。其次,引擎是完全確定性的:每次都有相同的輸入、相同的輸出。這就是讓我對其進行單元測試並信任試執行的屬性。
def test_simple_quarter():
rows = [
Row("invoice", net=Decimal("24500.00"), vat_amount=Decimal("4900.00"),
vat_rate=Decimal("20"), vat_treatment="standard", fx_rate=Decimal(1), source="invoice"),
Row("expense", net=Decimal("3000.00"), vat_amount=Decimal("600.00"),
vat_rate=Decimal("20"), vat_treatment="standard", fx_rate=Decimal(1), source="expense"),
]
t = compute_boxes(rows)
assert t.box1 == Decimal("4900.00")
assert t.box4 == Decimal("600.00")
assert t.box5 == Decimal("4300.00")
assert t.box6 == Decimal("24500.00")
assert t.box7 == Decimal("3000.00")
有了這個,每個迴歸都會在觸及試執行報告之前被 CI 捕獲。 Claude可以幫我寫更多的測試;如果沒有透過這些測試,它就無法更改發動機。
8. 演示影片
下面是針對一個季度的真實(匿名)發票和費用資料庫端到端執行的管道的簡短演練:規範化、分類、試執行,然後提交沙箱 MTD。整個迴圈只需幾分鐘。
9. HMRC MTD提交
這是大多數文章所掩蓋的部分。 MTD VAT API 本身有詳細的文件記錄並且免費,但在致電之前您需要做好三件事 POST returns.
OAuth2 和代幣。 在 HMRC 開發者中心註冊應用程式;您將獲得一個客戶端 ID、一個客戶端金鑰和一個重定向 URI。流程是使用 PKCE 的授權程式碼:開啟瀏覽器到 HMRC 同意頁面,使用者使用其政府閘道器憑據登入,並根據其 VAT 註冊號 (VRN) 授權您的應用程式,HMRC 使用授權程式碼重定向回來,您將其交換為訪問令牌 + 重新整理令牌。使用合理的許可權將它們快取在磁碟上。訪問令牌是短暫的;重新整理令牌更長。
防欺詐標頭。 HMRC 需要一組記錄在案的 HTTP 標頭,用於識別每個 API 呼叫上的原始裝置:時區、螢幕幾何形狀、使用者 ID、公共 IP、MAC 地址、客戶端連線方法等。確切的列表和格式位於 HMRC 開發人員文件中(請參閱 HMRC VAT 通知 700 以及權威規則的相關防欺詐規範)。如果他們錯了,你就會得到一個 403 有一個模糊的錯誤。如果他們正確的話,電話就會接通。我把它們留在裡面 fraud_headers.py 並在測試中斷言它們的存在。
首先是沙盒。 HMRC 提供免費沙箱 test-api.service.hmrc.gov.uk 具有存根 VRN 和存根義務。針對沙箱端到端執行整個管道,直到您提交虛假退貨、收到虛假收據 ID 並確認您的義務轉移。只有這樣你才會翻轉 HMRC_ENV=live。我的提交者拒絕呼叫 live,除非設定了環境變數並且操作員鍵入 SUBMIT 在提示符下。沒有自動執行路徑。一次錯誤的實時提交的成本遠高於多一次沙箱迭代的成本。
實際的快樂路徑呼叫很短: GET obligations 和 status=O 找到開啟時間段,顯示試執行報告,提示操作人員確認,然後 POST returns 與九個盒子號碼, periodKey 來自義務,並且 finalised: true。儲存響應,將收據 ID 寫入稽核資料夾,然後就完成了。
10. 安全、審計和合規性
我不會繼續的三個規則。第一的, 克勞德不參加算術。分類器建議處理方法,LLM 可以編輯 Python 和規則,但框總數是由帶有單元測試的純函式生成的。 “人工智慧做到了”並不是 MTD 下的辯護理由。第二, 每個提交都由人類控制。試執行報告是簽字的事實來源。如果我無法解釋分類行和引擎程式碼中的數字,我不會提交。第三, 審計跟蹤僅是附加的。每個分類的 JSON、每個試執行報告、每個提示、每個差異以及該期間的最終 HMRC 收據 ID 都寫入 ./audit/<period>/ 並致力於私人 git 儲存庫。 HMRC需要六年的記錄;我的是簽名快照。
即使您不採用其餘的做法,我也會推薦另外兩種做法。以最低許可權只讀角色執行源資料庫連線:否 UPDATE, 不 DELETE, 不 DROP。使用機密管理器或主目錄中的 0600 檔案將 HMRC 客戶端機密和訪問令牌保留在儲存庫之外。重點是透過建設,而不僅僅是透過政策,來杜絕事故發生。
11. 邊緣情況
VAT 是一種受監管的稅種,自 1973 年以來歷屆英國政府都對其進行了編輯,其中包括英國脫歐後的疊加稅和北愛爾蘭協議。邊緣情況是真實的。我的引擎處理的非詳盡列表:
- 英國脫歐和北愛爾蘭。 英國企業不再填寫 Box 8 或 Box 9。 NI 企業仍然在 NI 協議下從事商品(而非服務)業務。發動機需要
is_ni_business作為引數並相應地分支。權威規則參見HMRC VAT公告700。 - 反向充電。 從英國境外的供應商購買的服務(以及某些國內建築行業服務)按反向收費進行會計處理:您將名義輸出 VAT 新增到 Box 1,並在 Box 4 中收回相同金額。對現金的淨影響為零;對回報的淨影響是兩個盒子一起移動。
- 推遲進口 VAT。 對於從英國境外進口的商品,您可以將進口 VAT 推遲到下次退貨,而不是在邊境付款。該處理看起來類似於退貨時的反向充電。
- 部分豁免。 如果您同時生產應稅供應品和免稅供應品,則您只能回收與應稅供應品相關的輸入 VAT。有標準方法和特殊方法;這是最經常需要會計的角落。不要嘗試在 Markdown 檔案中編碼部分豁免規則。
- 統一費率計劃。 您按標準費率收取 VAT,但按總營業額的固定百分比向 HMRC 支付費用,並且您通常無法收回投入的 VAT。引擎為此有一個單獨的分支,並忽略大部分每行分類。
- 多幣種發票。 按照相關日期有效的匯率將每一行轉換為 GBP。 HMRC公佈月平均費率;您也可以使用即期匯率。保持一致。這
fx_rate_to_gbp列儲存每行應用的實際費率。 - 信用票據。 貸方票據是負發票。它減少了 Box 1 和 Box 6(如果是購買積分,則減少 Box 4 和 Box 7)。確保您的
net_amount和vat_amount可能會變成負數並且引擎正確地求和它們。 - 定金和分期付款。 納稅點可能是收到押金時,而不是開具最終發票時。現金會計可以簡化這一過程。
- 季度中期利率變化。 歷史上罕見,但有可能。儲存每行的速率,而不是作為全域性常量。
12. 費用
誠實的數字。 構建時間 大約是一週的集中晚上——稱之為 25 到 30 個小時。其中大部分是模式規範化、分類器規則和編寫引擎測試; HMRC OAuth 舞蹈是第二大塊。 每季度執行成本 很小:我現有的 Claude Code 訂閱(已經為其他軟體工作付費),分類器令牌使用量只有幾美分,HMRC API 的費用為零。引擎和稽核日誌在我的 Mac 上本地執行。 每季度審稿人時間 大約一個小時,大部分時間都是和我的會計師一起閱讀試執行。與舊工作流程下大約半天的電子表格爭論相比,節省的時間可以在第一年內收回構建成本。
如果你將其定價為一個你付錢給別人建造的專案,那麼你的諮詢費大約會達到四位數——這就是為什麼每月 20 到 50 英鎊的打包 SaaS 幾乎總是大多數企業的正確答案。有趣的問題不是“這比 Xero 便宜嗎?” - 通常不是 - 但“它是否更準確、更可審計、更容易讓我推理?”。對我來說,答案是肯定的。
13. 接下來是什麼以及結論
我要新增的下一部分是:自動銀行饋送匯入(開放銀行 AISP)、供應商 PDF 的 OCR(使收據 URL 成為實際掃描行)、預定的 cron + Slack 批准流程(這樣我不必記住截止日期)以及市場賣家的自助計費擴充套件。這些都不會改變管道的核心形狀。它們都是同一張五車道圖上的裝飾。
至少對我來說,更大的教訓是,一個小型 Claude Code 專案如何很好地處理受監管工作流程中無聊的一半。無聊的一半是大部分工作:模式標準化、CSV 匯入器、協調報告、固定裝置、邊緣情況規則、審計日誌記錄。克勞德在這一切方面都很出色。確定性的一半——實際的數學、實際的提交——保留在帶有單元測試和人工審批門的普通 Python 中,這正是它所屬的地方。
再次免責宣告。 本文不是稅務建議。在您在真實的 HMRC 賬戶上進行此類操作之前,請讓一位英國註冊會計師對您的第一份報表進行端到端稽核。執行 HMRC MTD 沙箱,直到您和您的會計師都充滿信心。有關任何特定 VAT 治療的權威規則,請參閱 HMRC VAT 通知 700 以及 gov.uk 網站上的相關通知。如果您想要所有這些的簡短版本, 同伴部落格文章 五分鐘閱讀;否則,請訂閱,隨著堆疊的成熟,我將繼續寫作。
本文的 SEO 快照
- 搜尋引擎最佳化標題: 使用 Claude Code 構建 VAT 返回系統
- 元描述: 使用 Claude Code 讀取您的發票和費用資料庫,對 VAT 進行分類,將 HMRC Box 1 計算為 9,試執行,然後提交給 MTD - 確定性引擎,人工批准。
- 主要關鍵詞: claude-code、增值稅、hmrc、mtd、會計、自動化、python、ai-agent、finops、小型企業
- Twitter / X(280 個字元以下): 將我的英國 VAT 退貨重建為 Claude Code 專案:Postgres 發票 + 費用 DB 到 HMRC Box 1 到 9、確定性 Python 引擎、沙箱優先 MTD 提交、人工審批門。完整的文章 + 工作流程 SVG + 演示影片。不是稅務建議。 #ClaudeCode #VAT #HMRC #MTD
- 領英帖子: 今年,我將英國 VAT 季度回報重建為一個小型 Claude Code 專案。它以只讀方式讀取我的發票和費用資料庫,使用記錄的規則檔案按 VAT 處理對每一行進行分類,使用確定性 Python 引擎將 HMRC Box 1 計算為 9(算術中沒有 LLM),並且只有在我簽署試執行後,它才會透過 HMRC MTD API 提交 - 沙箱優先、防欺詐標頭、完整的 OAuth2 流程。現在整個季度大約需要一個小時。 Workstation 上有完整的文章,包括提示、模式、引擎程式碼、邊緣案例和誠實的成本故事。不是稅務建議;讓會計師審查您的第一份申報表。
