概要

項目内容
案件 IDMAS-363
カテゴリFP&A / 健全性診断
PhasePhase 2
優先度P2 (★★)
所要時間6-8 時間 (実装 + テスト + UI 統合)
対象ファイル600_report/613_health_diagnostic.js (新規)、600_report/609_datamart_kpi.js (信号機列の追加)、100_config/101_sys_config.js (03_sys_params パラメータ追加)、docs/spec/spec_bs.md §9 (仕様参照)
前提案件MAS-008 (Cash Runway)cashEnd / cfOp の月次配列を再利用
後続案件MAS-067 マルチイヤー計画ワークスペースとの連携、MAS-058 必要年商シミュレーターへの健全性制約フィード

目的

docs/spec/spec_bs.md §9 で確定した「財務健全性信号機判定」仕様を実装する。一人法人 IT/コンサル業向けに 5 段階信号機 (🔴 危険 / 🟠 警告 / 🟡 注意 / 🟢 健全 / 🔵 過剰) で 5 指標 (現預金比率・自己資本比率・流動比率・固定比率・ランウェイ) を判定し、KPI ダッシュボード (93_kpi_dashboard) または専用タブに月次の信号機ステータスを出力する。

MAS-008 の単一指標ランウェイ判定(赤/黄の 2 段階)から、5 指標 × 5 段階の総合健全性ダッシュボードへの昇格。

仕様参照

実装の閾値・ロジック・UI 出力ガイドラインは docs/spec/spec_bs.md §9 が唯一のソース・オブ・トゥルース。本 dev spec は実装手順のみを記述する。

spec_bs.md §9 参照内容
§9.1設計思想(U字型非対称リスクモデル)
§9.25 段階閾値マトリックス
§9.3補助ロジック(Tax-Adjusted Cash・MVS 監査)
§9.4総合判定ロジック
§9.5メッセージ設計指針
§9.603_sys_params パラメータ化対象

実装方針

Step 1: 健全性診断モジュールの新設 (613_health_diagnostic.js)

600_report/613_health_diagnostic.js
  ├ calcCashRatioMonths_(ctx)        # 現預金比率(対月商倍率)
  ├ calcEquityRatio_(ctx)            # 自己資本比率
  ├ calcCurrentRatio_(ctx)           # 流動比率
  ├ calcFixedRatio_(ctx)             # 固定比率
  ├ calcRunway_(ctx)                 # ランウェイ(既存 605 を再利用)
  ├ calcTaxAdjustedCash_(ctx)        # 実質現預金(納税予測控除後)
  ├ checkMvsAudit_(ctx)              # MVS(最低役員報酬)監査
  ├ classifySignal_(value, thresholds) # 値→信号機 5 段階分類
  ├ judgeOverallHealth_(signals)     # 5 指標 → 総合判定
  └ buildHealthDiagnosticOutput_(ctx) # 出力配列構築

入力: ctx.cashEnd[] / ctx.cfOp[] (605 から)、71_bs の月次残高 (604 から)、62_pl 月次売上 (603 から) 出力: 月次の信号機絵文字 + 数値 + 総合判定 + アクション提案メッセージ

Step 2: KPI ダッシュボード (609_datamart_kpi.js) への統合

93_kpi_dashboard タブに以下のセクションを追加:

🚦 財務健全性信号機 (B/S spec §9)
  現預金比率(対月商)   2.8 ヶ月  🟢 健全
  自己資本比率           78%       🟢 健全
  流動比率              420%       🟢 健全
  固定比率              12%        🟢 健全
  ランウェイ            22 ヶ月    🔵 過剰  ← MAS-363 で追加
  ─────────────────────────────────
  📊 総合判定          🔵 成長加速推奨
  💡 提案: 18 ヶ月超のランウェイ保有は資金過剰保蔵を示唆。外注化・生産性投資の検討を推奨。

Step 3: 03_sys_params パラメータ追加

100_config/101_sys_config.js に以下のキーを追加(spec_bs.md §9.6 参照):

// 現預金比率(対月商)
HEALTH_CASH_RATIO_DANGER_MONTHS:        1.0,
HEALTH_CASH_RATIO_WARNING_MONTHS:       1.5,
HEALTH_CASH_RATIO_CAUTION_MONTHS:       2.5,
HEALTH_CASH_RATIO_HEALTHY_MIN_MONTHS:   2.5,
HEALTH_CASH_RATIO_EXCESSIVE_MONTHS:     6.0,

// 自己資本比率(%)
HEALTH_EQUITY_RATIO_DANGER:             15,
HEALTH_EQUITY_RATIO_WARNING:            30,
HEALTH_EQUITY_RATIO_CAUTION:            55,
HEALTH_EQUITY_RATIO_EXCESSIVE:          95,

// 流動比率(%)
HEALTH_CURRENT_RATIO_DANGER:            150,
HEALTH_CURRENT_RATIO_WARNING:           250,
HEALTH_CURRENT_RATIO_CAUTION:           500,
HEALTH_CURRENT_RATIO_EXCESSIVE:         1000,

// 固定比率(%)— 「>X」が悪化方向、「<5」が過剰判定
HEALTH_FIXED_RATIO_DANGER:              100,
HEALTH_FIXED_RATIO_WARNING:             70,
HEALTH_FIXED_RATIO_CAUTION:             50,
HEALTH_FIXED_RATIO_UNDERINVEST:         5,

// ランウェイ(ヶ月)
HEALTH_RUNWAY_DANGER_MONTHS:            3,
HEALTH_RUNWAY_WARNING_MONTHS:           6,
HEALTH_RUNWAY_CAUTION_MONTHS:           12,
HEALTH_RUNWAY_HEALTHY_MIN_MONTHS:       12,
HEALTH_RUNWAY_EXCESSIVE_MONTHS:         18,

// 補助ロジック
HEALTH_TAX_RESERVE_RATE:                0.30,    // 法人税概算控除率
HEALTH_MVS_MONTHLY_JPY:                 300000,  // MVS 月額基準

Step 4: 総合判定ロジック

spec_bs.md §9.4 の通り、以下の優先順位で総合判定を行う:

function judgeOverallHealth_(signals) {
  // signals = { cashRatio: 'healthy', equity: 'excessive', currentRatio: ..., fixedRatio: ..., runway: 'excessive' }
  const counts = countByLevel_(signals);
  if (counts.danger >= 1)               return { level: 'danger',     msg: '即時対応' };
  if (counts.warning >= 2)              return { level: 'warning',    msg: '要改善 (3 ヶ月以内に経営戦略見直し)' };
  if (counts.caution >= 3)              return { level: 'caution',    msg: '要監視 (月次モニタリング強化)' };
  if (counts.excessive >= 2)            return { level: 'excessive',  msg: '成長加速推奨' };
  if (counts.healthy >= 3 && counts.danger === 0 && counts.warning === 0)
                                        return { level: 'healthy',    msg: '健全 (現状維持)' };
  return                                       { level: 'caution',    msg: '混在 (個別指標の改善検討)' };
}

Step 5: メッセージ生成(buildActionMessage_

spec_bs.md §9.5 の「称賛 → 機会損失指摘 → 具体提案」3 段構成に従い、🔵 過剰検知時のテンプレートを実装。複数指標のコンテキストを踏まえた条件分岐:

検知パターン提案メッセージ
ランウェイ🔵 + 固定比率🔵外注化(時間の買い戻し)+ PC・作業環境への投資
ランウェイ🔵 + 自己資本比率🔵マーケ・営業投資 + 配当検討(株主=本人なので個人課税最適化込み)
現預金比率🔵 単独余剰現金の中長期金融資産運用 or 共済(経営セーフティ・小規模企業)への振替

エッジケース

ケース条件処理
月商ゼロ月売上 = 0(休業月等)現預金比率の判定をスキップ(ゼロ除算回避)
純資産マイナス累積赤字で純資産 < 0自己資本比率は 0% 表示、固定比率は判定不能フラグ
バーンレート 0 or 正黒字定常で営業 CF > 0ランウェイは「∞」表示、🟢 健全扱い
設立初年度当期売上のみで月商計算が不安定直近 3 ヶ月平均 or 当期累計 ÷ 経過月数で代用
役員報酬未設定月創業直後で報酬 = 0MVS 監査をスキップ
期末月の納税予測未払法人税等が既に計上済みTax-Adjusted Cash の二重控除を防止

注意事項

  1. spec_bs.md §9 を唯一の真実とする: 閾値変更は spec 側で実施し、本 dev spec は追従するのみ。03_sys_params 値も spec の §9.6 と一致させる
  2. 指標値の Total 列は独自再計算: KPI ダッシュボードの Total 列は単純合算ではなく、年度末時点 or 加重平均で算出(MAS-008 の filterValues 規約を踏襲)
  3. 絵文字の互換性: 🔵 (U+1F535) は GASsetNumberFormat 経由で扱う際にエスケープが必要なケースあり。609_datamart_kpi.js の既存パターンに従う
  4. シナリオ別判定: isActualOnly フラグで実績 vs 予測を切り替え、予測月は健全性を「予測」マークで表示
  5. テスト: 900_test/test_health_diagnostic_* を追加(5 指標 × 5 段階 × エッジケース)

実装後の検証項目

  • 5 指標が 93_kpi_dashboard に正しく表示される
  • 信号機絵文字が条件付き書式なしでも視認可能
  • Tax-Adjusted Cash の控除が決算月直後で正しく機能(過剰な危険判定が出ない)
  • MVS 監査が役員報酬月額 < 30 万円のケースで「注意」上書きを発動
  • 総合判定の優先順位(🔴 > 🟠 > 🟡 > 🔵 > 🟢)が仕様通り
  • アクション提案メッセージが過剰検知パターン別に切り替わる

関連ドキュメント

  • 仕様: docs/spec/spec_bs.md §9(信号機判定の唯一のソース)
  • 親案件: docs/dev/dev_mas-008_cash_runway.md(ランウェイ単体の実装、本案件はその拡張)
  • 関連: docs/dev/dev_mas-003_kpi_dashboard.md(KPI ダッシュボード基盤)
  • 連携先: docs/brd_solo_ceo_financial_navigator.md §5 軸ステージ準備度モデル(MAS-067 マルチイヤー計画から本判定を呼び出し)

推奨実行モデル

Sonnet(仕様が spec_bs.md §9 で確定済みのため、実装は機械的。ただし KPI ダッシュボードの既存数式パターンとの整合性確認に注意)