遷移規格書生成:舊函式轉新型別
用途
讓 AI 把舊語言的函式邏輯讀懂、白話翻譯,然後依照你的標準模板產出一份遷移規格初稿——包含目標型別、精度規則與 rounding 方式——讓人工審核後才進入實作。
何時用
- 適合:遷移前需要一份人工可審核的規格書,確保新舊業務邏輯(尤其是金額計算、稅務規則)完全一致時。
- 不要用:已有核可規格書且要直接開始寫程式的時候,那時請用「Stage 2 實作指令」;若尚未做風險掃描,請先跑「前置風險分析」。
Prompt
text
讀取舊程式碼:{{舊程式碼路徑或貼上程式碼}}
目標函式:{{函式名稱}}
請做兩件事,且只做這兩件事:
第一步:白話說明
- 這個函式接受什麼輸入(型別、範圍、可否為 null)
- 它怎麼處理累加與中間計算(是否有精度截斷)
- 它輸出什麼結果(型別、單位、可能值域)
第二步:依照規格模板 {{規格模板路徑}} 產出遷移規格初稿,寫入 {{輸出路徑}}
規格初稿需涵蓋:
- 目標語言型別對應(例:VB6 Currency → Python Decimal)
- Rounding 方式(四捨五入 / 無條件捨去 / 銀行家捨入)
- 邊界條件清單(零值、負值、超大數)
- 預期測試案例(至少 3 組 input→output)
完成後停下來,不要修改任何現有程式碼,等待我審核。範例 / 變體
- 填好變數:舊程式碼填
src/legacy/tax/CalcInvoiceTax.vb、函式名稱填CalcInvoiceTax、規格模板填docs/migration-spec-template.md、輸出路徑填docs/specs/CalcInvoiceTax-spec.md。 - 變體(多函式批次):把函式名稱改成清單,在 prompt 後加「逐一處理,每個函式各自一份規格檔,檔名用函式名稱」。
- 變體(附差異比對):加一行「若發現新舊型別在邊界條件有潛在差異,請特別標注 ⚠️ 差異風險」,讓審核者一眼找到高風險點。
🎯 範例輸出(實測)
在 Claude Code 跑這句、舊程式碼填「src/legacy/tax/CalcInvoiceTax.vb」、函式名稱填「CalcInvoiceTax」、規格模板填「docs/migration-spec-template.md」、輸出路徑填「docs/specs/CalcInvoiceTax-spec.md」的結果:
點開看 AI 實際輸出
Claude Code 先輸出白話說明,再產出規格初稿:
第一步:白話說明
- 輸入:
invoiceAmt As Currency(稅前金額,非負,允許 0,最大 9,999,999.9999)、taxType As Integer(1=應稅 5% / 2=零稅率 / 3=免稅) - 處理邏輯:應稅時以
invoiceAmt * 0.05計算稅額,VB6 Currency 型別固定截到 4 位小數(非四捨五入,是截斷);零稅率與免稅回傳 0 - 輸出:
taxAmt As Currency(稅額,單位:新台幣)
第二步:遷移規格初稿(寫入 docs/specs/CalcInvoiceTax-spec.md)
text
# CalcInvoiceTax 遷移規格書
更新日期:2026-06-04
狀態:草稿(待審核)
## 型別對應
| VB6 | Python 3.12 |
|-----|-------------|
| Currency | decimal.Decimal |
| Integer (taxType) | Literal[1, 2, 3] (TypeAlias) |
## Rounding 方式
- 應稅計算:Decimal(str(invoice_amt)) * Decimal("0.05")
- 捨入:ROUND_DOWN(模擬 VB6 Currency 截斷行為,⚠️ 非四捨五入)
## 邊界條件清單
| 情境 | 輸入 | 預期輸出 |
|------|------|----------|
| 零值 | 0, taxType=1 | 0.00 |
| 負值 | -100, taxType=1 | ValueError(業務規則:不允許負數) |
| 超大數 | 9999999.9999, taxType=1 | 499999.9999(截斷而非進位) |
| 零稅率 | 50000, taxType=2 | 0.00 |
| 免稅 | 50000, taxType=3 | 0.00 |
## 預期測試案例
1. calc_invoice_tax(Decimal("1000"), 1) → Decimal("50.00")
2. calc_invoice_tax(Decimal("1001"), 1) → Decimal("50.05")(⚠️ 非50.0500...進位)
3. calc_invoice_tax(Decimal("0"), 1) → Decimal("0.00")已停止,等待審核。
💡 實測心得:VB6 Currency 型別的截斷行為(不是四捨五入)是這個規格最容易踩的雷——Claude Code 主動標注了 ⚠️ 差異,但你要確認業務上是要「保留截斷行為」還是「改成正確四捨五入」,這是人工審核最值錢的那一刀。
延伸
簡單來說,規格書這一步的價值在於把「AI 看懂的邏輯」和「人類確認過的意圖」放進同一份文件。審核通過後,Stage 2 實作時就可以直接引用這份規格,Claude Code 不會自己猜業務規則,而是有據可查。如果你的遷移涉及多個函式,可以把規格書生成和風險分析同時用在不同模組,平行產出再統一審核。