mcpField
C
cash-flow-forecaster

cash-flow-forecaster

github.com/lyndonklデータ・データベース18752 回インストール10 週間前に更新
リポジトリ

cash-flow-forecaster について

現在残高、予定された定期収支、直近の裁量的支出を基に、指定期間の現金口座残高を日次で予測するスキルです。安全下限を割る日を示し、残高の底と予測の幅も算出します。

主な機能

  1. 01現金口座ごとの日次残高予測
  2. 02定期収入と支出の予測
  3. 03裁量的支出の推定
  4. 04安全下限割れ日の検出
  5. 05残高の底と予測幅の提示

活用シーン

  1. 01口座残高が安全下限を割る可能性の確認
  2. 02給与入金や定期請求を踏まえた計画
  3. 03直近の裁量的支出に基づく現金需要の推定

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/lyndonkl/claude --skill cash-flow-forecaster

インストール後、Claude Code で/cash-flow-forecasterを入力して読み込まれたか確認します。

詳細

キャッシュフロー予測

目次

概要

月平均だけでは、給料が振り込まれるのが5日なのに、家賃の引き落としが3日に行われるかどうかは分かりません。このスキルでは、次の情報を組み合わせ、予測期間における各現金口座の日次の期末残高を予測します。

  • 今日の実際の残高。
  • 予測期間内に next_expected_date がある、予定済みの定期的な入出金すべて。
  • 過去6か月の非定期支出から算出した、推定裁量支出分。

残高が設定可能な安全下限を下回ると予測される日と、口座ごとの残高の底を明らかにします。

入力仕様

呼び出し元は次の情報を渡します。

  • accounts — 現金口座の配列:{id, type, current_balance_cents, safety_floor_cents}。
  • recurring — status: active でフィルタリングした recurring.json。
  • transactions — 各現金口座の過去180日分のカテゴリ分類済み取引。
  • today — ISO形式の日付。
  • horizon_days — デフォルトは60です。
  • category_overrides(任意)— ユーザーが把握している明示的な一時支出(例:予定されている旅行の予約金)。

ワークフロー

Forecast Progress:
- [ ] Step 1: Initialize daily ledger per account with current balance
- [ ] Step 2: Project recurring flows in the horizon window
- [ ] Step 3: Compute discretionary tail (rolling 6-month average)
- [ ] Step 4: Spread discretionary across days
- [ ] Step 5: Apply category_overrides
- [ ] Step 6: Compute daily ending balance
- [ ] Step 7: Flag below-floor days; identify trough
- [ ] Step 8: Compute confidence interval around projection
ステップ1 — 初期化

各口座について、[today, today + horizon_days] の各日に対して ledger[account_id][day] = 0 を作成します。ledger[account_id][today].opening = current_balance_cents を設定します。

ステップ2 — 定期的な入出金を予測

有効な定期エントリごとに、next_expected_date から cadence を加算しながら予測期間を過ぎるまで進めます。各発生日について、amount_cents_typical を ledger[recurring.account_id][occurrence_date].flows に追加します。

給与について、週末と祝日を処理します。ほとんどの給与振込は平日に行われます。next_expected_date が週末の場合、入金は次の平日に繰り延べます。出金は暦日どおりに処理します。

ステップ3 — 裁量支出分を算出

各口座について、次の値を算出します。

discretionary_total_180d = Σ amount_cents over last 180 days
                            where category NOT IN
                            { financial.transfers_internal, savings_investment.*,
                              income.* }
                            and tx_id not in any recurring cluster

discretionary_daily_avg = discretionary_total_180d / 180(これは裁量支出を表すため、負の値です)。

ステップ4 — 裁量支出を分散

最もシンプルな方法は、その口座の予測期間中の各日から discretionary_daily_avg を差し引くことです。

曜日ごとの傾向が重要な場合は、曜日別の平均(たとえば月曜日と金曜日の違い)を算出し、曜日に応じて適用する方法がより適切です。transactions に少なくとも90日分のデータがあり、曜日ごとの分散に実質的な差がある場合を除き、シンプルな方法をデフォルトとします。

ステップ5 — 上書きを適用

category_overrides の各エントリについて、明示的な {date, account_id, amount_cents, reason} を該当日のフローに追加します。

ステップ6 — 残高を順次計算
balance[t] = balance[t-1] + Σ flows on day t

口座ごとに実行残高を追跡します。

ステップ7 — 安全下限を下回る日を特定

各口座について、balance[t] < safety_floor_cents となる日を特定します。次の値を識別します。

  • trough_balance_cents — 予測期間中の最低残高。
  • trough_date — 最低残高になる日。
  • first_breach_date — 初めて安全下限を下回る日。
  • breach_days — 安全下限を下回る日数。
ステップ8 — 信頼区間

裁量支出の分散にはばらつきがあります。裁量支出の30日間のローリング標準偏差を算出し、予測を balance ± 1.5σ × √days_from_today の幅で示します。ユーザーが過度に正確な単一の推定値ではなく範囲を確認できるよう、残高の底となる日に lower_balance_cents と upper_balance_cents を提示します。

任意支出のモデル化

デフォルト:過去180日間の単純な日平均。定期支出にも、振替・投資・収入にも該当しないすべての支出が対象です。

改善策(データで裏付けられる場合にのみ適用してください):

  • 曜日。 土曜日と日曜日は支出が多くなる傾向があります。曜日ごとの係数を適用してください。
  • 月初と月末。 任意支出は給料日の前後に急増する傾向があります。定期的な入金が1日と15日にある場合は、給料日後に小幅な増加を見込むことを検討してください。
  • 季節性。 11~12月の休暇シーズンの支出増加は実際にあります。予測期間がこれらの月にまたがる場合は、+20%の倍率を適用し、その旨を記録してください。

適用した改善策はすべて、出力のmethodologyフィールドに記録し、ユーザーが前提を正確に確認できるようにしてください。

出力仕様

{
  "horizon": { "start": "2026-04-25", "end": "2026-06-24", "days": 60 },
  "accounts": [
    {
      "account_id": "acc_chk_001",
      "starting_balance_cents": 1247500,
      "ending_balance_cents": 932100,
      "trough_balance_cents": 124300,
      "trough_date": "2026-05-30",
      "trough_band_cents": [82100, 166500],
      "first_breach_date": null,
      "breach_days": 0,
      "safety_floor_cents": 100000
    }
  ],
  "daily": [
    { "date": "2026-04-25", "balances": { "acc_chk_001": 1247500 }, "flows": [] },
    { "date": "2026-05-01", "balances": { "acc_chk_001": 1093200 },
      "flows": [
        { "account_id": "acc_chk_001", "amount_cents": -273500, "label": "Mortgage P&I", "type": "recurring" },
        { "account_id": "acc_chk_001", "amount_cents": -78000,  "label": "Mortgage escrow", "type": "recurring" }
      ]
    }
  ],
  "alerts": [],
  "methodology": "Daily discretionary derived from 180-day rolling average across 23 non-recurring categories; 1.5σ confidence band; weekend-adjusted paychecks; no seasonal multiplier in this horizon."
}

違反が検出された場合:

{
  "alerts": [
    {
      "severity": "high",
      "type": "projected_below_floor",
      "account_id": "acc_chk_001",
      "first_breach_date": "2026-05-15",
      "trough_balance_cents": -42000,
      "trough_date": "2026-05-30",
      "drivers": [
        { "date": "2026-05-15", "amount_cents": -350000, "label": "Property tax (annual)" }
      ],
      "suggested_actions": [
        "Move $50,000 from savings before 2026-05-14",
        "Defer discretionary spend by $20,000 across the next 3 weeks"
      ]
    }
  ]
}

ガードレール

  • 現金以外の口座については、決して予測しないでください。 証券口座、401k、HSAの残高はキャッシュフローではなく、保有資産です。対象から除外してください。
  • 住宅ローンの繰り上げ返済は明示的に扱い、暗黙に含めないでください。 ユーザーの通常の住宅ローン返済は定期支出ですが、元本の追加返済はcategory_overrideです。元本の追加返済は予測しないでください。
  • 任意支出の平均は予測ではなく、余裕分です。 この幅は、ユーザーにあくまで推定値だと思い出してもらうためのものです。計画に用いる数値は中央値ではなく、下限値です。
  • 二重計上しないでください。 定期支出は定義上、任意支出の計算から除外されます(定期支出のクラスタに関連付けられた取引は、任意支出の対象には含まれません)。
  • 頻繁に更新してください。 60日間の予測も、新しい取引が入ると数日で古くなります。エージェント層では、新たなデータが取り込まれるたびに再実行してください。

コメント