把過去的預算與合約金額換算成現行價格

如果報告要把過去的預算或合約金額與目前金額做比較,就必須把它們換算到同一個月的價格水準。選定基準月份,寫明所用的物價指數,並為結果加上標註。Narwhal 會回傳任意月份的消費者物價指數以及最新公布的一期,所以每筆金額都乘以最新指數,再除以它所屬月份的指數。

每份換算報告都要做出的三項選擇

把幾年前簽訂的租約和今年的預算放在一起的報告,比較的是價值不同的錢。財務規劃人員與合約負責人的做法,是把每筆金額換算到同一個月的價格水準,而結果是否站得住腳,取決於三項選擇。基準月份是所有金額換算到的那個月。指數是在月份之間換算時使用的價格序列。標註是告訴讀者這兩點的那句話。API 提供指數數值,報告負責寫明這些選擇。

觀測值端點按月回傳一個國家的整體消費者物價指數。這個請求讀取的是 2012 年 3 月的指數,也就是一份辦公室租約所在的月份。

curl,租約定價當月的指數
curl -s -H "Authorization: Bearer $NARWHAL_API_KEY" \
  "https://api.narwhalapi.com/v1/economics/USA/cpi/observations?start=2012-03&end=2012-03"
回應
{
  "country": "USA",
  "as_of": "2026-10-14T00:00:00Z",
  "index_base": "1982-84=100",
  "observations": [
    {
      "period": "2012-03",
      "value": "229.392"
    }
  ],
  "next_cursor": null
}

start 和 end 的格式為 YYYY-MM。value 是十進位字串,index_base 表示該指數序列的基期,對同一序列中兩個月份之間的比值沒有影響。

以最新公布的月份作為基準月份

不帶 period 的 CPI 端點會回傳最新公布的指數。把它的月份用作整份報告的基準月份,每一列就都會換算到同樣的價格水準。

curl,最新指數
curl -s -H "Authorization: Bearer $NARWHAL_API_KEY" \
  "https://api.narwhalapi.com/v1/economics/USA/cpi"
回應
{
  "country": "USA",
  "period": "2026-09",
  "value": "336.940",
  "index_base": "1982-84=100",
  "released_on": "2026-10-14"
}

period 是基準月份,value 是指數,released_on 是公布日期。換算後的金額以該月的價格表示,而不是以執行報告當天的價格表示,請在報告中寫明這一點。

一次換算一批合約與預算

  1. 列出每筆金額及其定價月份 要用價格適用的月份,對合約來說通常是簽約月份或指數調整月份,而不是報告所屬的年度。
  2. 只讀取一次序列 一次觀測值請求就能涵蓋全部月份。腳本請求 2012-01 至 2024-12,把 limit 設為 1000,並依 period 建立字典。
  3. 用 Decimal 做乘除 每筆金額乘以基準月份的指數,再除以它所屬月份的指數。只在最後做一次四捨五入到分。
  4. 把標註和表格一起列印 輸出的第一列寫明基準月份、國家和指數基期,因此表格離開這行說明就無法被單獨解讀。
    Python,換算後的金額表
    import json
    import os
    import urllib.request
    from decimal import Decimal, ROUND_HALF_UP
    
    def get(path):
        req = urllib.request.Request(
            "https://api.narwhalapi.com" + path,
            headers={"Authorization": "Bearer " + os.environ["NARWHAL_API_KEY"]},
        )
        with urllib.request.urlopen(req, timeout=30) as r:
            return json.load(r)
    
    latest = get("/v1/economics/USA/cpi")
    base_month, cpi_base = latest["period"], Decimal(latest["value"])
    series = get("/v1/economics/USA/cpi/observations?start=2012-01&end=2024-12&limit=1000")
    cpi = {o["period"]: Decimal(o["value"]) for o in series["observations"]}
    
    lines = [
        ("Office lease", "2012-03", "480000"),
        ("Software contract", "2018-06", "120000"),
        ("Equipment purchase", "2022-01", "75000"),
    ]
    print(f"All amounts in {base_month} prices, US CPI {cpi_base}, base {latest['index_base']}")
    for name, month, amount in lines:
        restated = (Decimal(amount) * cpi_base / cpi[month]).quantize(Decimal("0.01"), ROUND_HALF_UP)
        print(f"{name:20} {month}  {Decimal(amount):>10,}  index {cpi[month]}  restated {restated:>12,}")

2012 年 3 月的租約金額 480,000,按 2026 年 9 月的價格水準換算後為 705,042.90。用基準指數除以租約月份的指數得到 1.469,說明這一序列的價格在該期間上漲了 46.9%。軟體合約上漲 33.7%,設備採購上漲 19.8%。

腳本輸出
All amounts in 2026-09 prices, US CPI 336.940, base 1982-84=100
Office lease         2012-03     480,000  index 229.392  restated   705,042.90
Software contract    2018-06     120,000  index 251.989  restated   160,454.62
Equipment purchase   2022-01      75,000  index 281.148  restated    89,883.26

如何標註換算後的欄位

項目報告中的措辭
基準月份按 2026 年 9 月的價格計,即執行報告時已公布的最新月份
指數美國消費者物價指數,整體,基期 1982-84=100
原始月份在換算後那一欄的旁邊,顯示每筆原始金額的定價月份
捨入最後只四捨五入到分一次,並加以說明

把原始金額和換算後的金額並排保留,審閱者就能用一次乘法核對任何一列。

年度預算沒有唯一的價格月份。請選該年的某一個月,例如預算核定的月份,把它用於這份預算的每一列,並在標註中寫明這個月。另一種做法是取該年十二個月觀測值的平均數,無論用哪種,報告都應當寫明。

合約應該使用哪個物價指數?

請使用合約中指明的指數。API 回傳的是一個國家的整體消費者物價指數。如果租賃或供貨合約掛鉤的是核心指數、地區指數或產業指數,換算出的數字就會與合約上的數字不同,所以在報告發出前請先確認指數。

一份報告可以換算多個國家的金額嗎?

請一次只在一個國家內部換算,因為每個序列都有自己的基期,一個國家的指數值並不能說明另一個國家的物價。如需用同一種貨幣呈現結果,請在單獨的一步中,按你指明日期的匯率轉換換算後的金額。

如果我需要的月份還沒有公布怎麼辦?

請求一個尚無已公布數值的期間,會回傳 404 問題回應,代碼為 series_not_found。對美國來說,撰寫本文時請求 2026 年 10 月就是這種情況。請使用 CPI 端點回傳的 period 作為基準月份,並在標註中說明。

發布於 。

後續步驟