前一篇結尾我寫「0.8.5 還沒被排程 run 驗證過」。2026-10-03 的排程 run 在 16:14 UTC 跑完,所有步驟綠燈,issue #8 也被 workflow 自動關掉。排程 run 在 9/29、9/30、10/1、10/2 連紅四次,到這一次才算真的修好:https://github.com/tahodev/baodao-skill/actions/runs/37136136935
docs/roadmap.md 的新技能候選 24 項,打勾的只有 20 項,剩下:綜合所得稅試算、圖書館館藏查詢、國道即時路況、勞健保費率計算、其他縣市垃圾車。10/3 做完兩個:taiwan-income-tax 和 taiwan-labor-health-insurance,版本 0.9.0,倉庫現在 27 個技能。
這兩個和 taiwan-id-check 一樣是純本地計算,不呼叫任何 API。沒有網路請求,就沒有 HTTP 錯誤可以提醒我哪裡壞了。數字算錯是安靜的錯,所以驗收只能靠對照公告表。
健保的 115 年投保金額分級表有 58 級。我把公式(投保金額 × 5.17% × 30%,四捨五入,眷屬每人各一份)對每一級的本人、加 1 眷口、加 2 眷口、加 3 眷口金額,另外雇主負擔(× 60% × 1.56 人)都比一遍:全部一致。2026-10-04 重跑的結果:
| 投保金額 | 健保本人 | 本人加 3 眷口 | 勞保+就保(勞工負擔) |
|---|---|---|---|
| 29,500 | 458 | 1,832 | 738 |
| 30,300 | 470 | 1,880 | 758 |
| 45,800 | 710 | 2,840 | 1,145 |
| 150,000 | 2,327 | 9,308 | 不適用(勞保最高 45,800) |
| 313,000 | 4,855 | 19,420 | 不適用 |
要老實講的限制:這張對照表是別人轉載的公告表,我沒有直接打開健保署和勞保局的附件檔。健保署頁面從我這邊回 403,所以 check-urls.py 把 nhi.gov.tw 加進「已知會擋雲端 IP」清單,降成 WARN。勞保那一欄只拿 738、758 兩個轉載值核對過,45,800 的 1,145 是公式算出來的,沒有對照表,也沒有全表比對。
58 級裡只有一級不一致,不是技能的公式錯。我寫技能時就用了 Decimal,但驗證腳本裡順手拿 Python 內建 round 當對照,結果這一級對不上:
from decimal import Decimal, ROUND_HALF_UP
base = 150000
raw = base * 0.0517 * 0.3
print(raw, round(raw))
exact = Decimal(base) * Decimal('0.0517') * Decimal('0.3')
print(exact, int(exact.quantize(Decimal('1'), rounding=ROUND_HALF_UP)))
2026-10-04 實測輸出:
2326.5 2326
2326.50000 2327
剛好是 .5 的時候,round 取偶數(2326),公告表是四捨五入(2327)。29,500 那級的勞保 737.5 湊巧也是取偶數得到 738,所以其他級都沒露餡。技能裡的程式一直是 Decimal 加 ROUND_HALF_UP,並且有一條 assert premiums(150000)['health'] == 2327 擋住這件事。如果當初直接用 round,這個斷言會是紅的。
tisvcloud.freeway.gov.tw 從我的環境連線逾時,連回應都拿不到soa.tainan.gov.tw 和高雄的 data.kcg.gov.tw 從我這邊 curl 回 000,桃園我沒找到可下載的網址這是我這個環境連不上,不等於網站掛了。但這個倉庫的規則是只收實測過的來源,連不上就不能寫「已支援」,所以 roadmap 上這幾項維持沒打勾,國道那一行註明了原因。
CHANGELOG.md,版本 0.9.0