1. 概要・目的
1.1 概要表
| 項目 | 内容 |
|---|
| 案件 ID | MAS-355 |
| カテゴリ | 🧠 Domain (FP&A・MAS-057 Solo CEO Cockpit 拡張) |
| Phase | P2.5 |
| 優先度 | ★★ |
| 所要時間 | 推定 1.5-2 週間 |
| 対象ファイル (新規) | 400_domain/447_capital_allocation_engine.js (Pure Function ドメインエンジン)
webapp_client/src/cockpit/CapitalAllocationPanel.tsx (cockpit パネル)
800_ops/822_migration_mas355_seed.js (sys_params シード) |
| 対象ファイル (変更) | webapp_client/src/cockpit-main.tsx (副作用 import 追加・failure_patterns #33 対策)
webapp_client/scripts/sync-engines.mjs (ENGINES_TO_SYNC に 447 追加)
100_config/101_sys_config.js (sys_params に MAS355_* キー追加・MENU_DEFINITION に 1 項目追加)
200_data/202_repository.js (将来: シナリオ保存統合時) |
| 前提案件 | MAS-057 Solo CEO Cockpit v2.4 (UI 統合先) / MAS-058 健全性診断 v2.1 (本案件は v2 拡張的位置づけ・上限警告を担当) / MAS-071 役員報酬戦略 v1.1 (Rule of 40 営業利益率の供給元) |
| 後続案件・連携余地 | MAS-067 マルチイヤー v1.9 (Rule of 40 推移・5 年累積機会損失) / MAS-002 期末スナップショット (Rule of 40 履歴記録) / MAS-066 配当ミックス (アロケーション提案 #2 連動) / MAS-141 節税共済 (役員退職金原資の確保) / MAS-013 投資シミュレーション + MAS-042 ハードルレート (アロケーション提案 #1 連動) |
1.2 背景・課題 (Why Now?)
bizlp の MAS-058 健全性診断は**「下限警告」専門** (ランウェイ < 12 ヶ月 / 自己資本比率 < 30% 等で警告)。「上限警告」(過剰内部留保 → 資本効率悪化) の判定機能は現状未実装で、設立年度大幅黒字想定の Solo CEO 法人 (限界利益 1,500-2,000 万円規模) には機会損失が見えない盲点となっている。
具体的な構造的課題 (Deep Research 調査結果より):
| 構造的課題 | 定量影響 |
|---|
| 資本の死蔵による機会損失 | 余剰現預金 1,000 万円 × 機会費用 5%/年 = 年 50 万円の見えない損失 (P/L に出ない) |
| ROE / ROA の悪化 | 自己資本比率 100% 近接 = 財務レバレッジ完全放棄・伊藤レポート最低基準 ROE 8% 割れリスク |
| 黒字維持バイアス | 「今期黒字着地」KPI 化で本来 200% リターン投資が見送られる構造 |
| 将来出口戦略のコスト増 | 利益剰余金累積 → 自社株評価額高騰 → 相続・M&A 時に多額税負担 |
| 税務上の罠 (中小企業は適用除外) | 留保金課税は資本金 1 億円以下適用除外 → 税務ペナルティがないため貯め込みやすい構造 |
1.3 目的: 「攻めのバランスシート」設計支援
cockpit に**「資本の使われ方」可視化レイヤー**を追加し、以下を実現:
- 3 バケツモデル: 現預金を「防衛・戦略投資・純余剰」に強制分類 → 余剰の存在を可視化
- ROE 指標: 8% 下回りで「資本の怠慢」フラグ → 怠慢な資本配置を警告
- Rule of 40 (SaaS 業界標準): 成長率 + 営業利益率の合計が 40% 未満で「成長投資不足」診断 → 黒字維持バイアス対抗
1.4 User Story
- Solo-CEO: 「現預金 1,500 万円のうち、いくらが本当に余剰なのか・年いくらの機会損失を出しているのか」を 1 画面で確認したい
- Solo-CEO: 「ROE が低いと言われても、何 % が目安・自社の数値はどうなのか」を直感的に把握したい
- Solo-CEO: 「成長率 6% / 利益率 34%」のような自社数値が、業界標準 (Rule of 40) ベンチマークに照らしてどこに位置するか知りたい
- Solo-CEO: 「余剰資金がある」と言われた後、次に何にいくら振り向ければよいかまで提示してほしい
- 税理士・会計監査: 「内部留保が積み上がっている法人ですが、資本効率を意識して経営している」と説明できる定量根拠が欲しい
2. ビジネスロジック・計算式定義
すべてのロジックは Pure Function として 400_domain/447_capital_allocation_engine.js に実装。クライアントサイド (React) で同期実行。GAS の通信レイテンシゼロ。
2.1 3 バケツモデル (Three Buckets)
口座にある現預金残高を 3 種類の資金性格に強制的に切り分けるロジック。
計算式
■ 入力
cashBalance : 現在の現預金残高 (円)
monthlyFixedCost : 月間固定費 (円・役員報酬込み or 別の選択可・Q1)
taxBuffer : 納税バッファ (未払法人税 + 未払消費税 + 未払社保の想定額・円)
marginAnnual : 年間限界利益 (= 売上 - 変動費・円)
opportunityRate : 機会費用率 (default 0.05 = 年率 5% ・sys_params)
■ 計算
defenseCash = monthlyFixedCost * 6 + taxBuffer // バケツ 1: 防衛資金
strategicCash = max(0, marginAnnual * 0.20) // バケツ 2: 戦略的投資資金
surplusCash = max(0, cashBalance - (defenseCash + strategicCash)) // バケツ 3: 純余剰
shortfall = max(0, (defenseCash + strategicCash) - cashBalance) // 防衛+投資不足額
■ 機会損失額
annualOpportunityLoss = surplusCash * opportunityRate // 年間機会損失 (円)
■ 構成比 (UI 表示用)
defenseRatio = defenseCash / cashBalance
strategicRatio = strategicCash / cashBalance
surplusRatio = surplusCash / cashBalance
各バケツの性格
| バケツ | 名称 | 性格 | 管理ルール |
|---|
| 1 | 防衛資金 (Survival Cash) | 売上ゼロでも 6 ヶ月持ちこたえる絶対死守ライン | 別口座 or 定期で隔離・この残高を割る投資は禁止 |
| 2 | 戦略的投資資金 (Opportunity Cash) | 限界利益の 20%・期末までに使い切るべき枠 | マーケ/IT/外注/R&D/研修等に投下・期末残は「投資不履行」 |
| 3 | 純余剰資金 (Surplus Cash) | 機会損失を生んでいる「死蔵」資金 | 個人還元 / 共済追加拠出 / 金融資産運用 / 繰上返済の優先順位で速やかに処理 |
警告閾値
if (surplusCash > 0):
flag = "SURPLUS_DETECTED"
severity = if (surplusCash > marginAnnual * 0.5): "HIGH" else "MEDIUM"
if (shortfall > 0):
flag = "DEFENSE_SHORTFALL"
severity = "HIGH" // 防衛資金不足は最優先警告 (MAS-058 連動)
v1.1 拡張案: 自己時間投資控除 (Q6 推奨案 A・実装は v1.1 以降)
bizlp 代表のようにプロダクト開発スキルを保有する Solo CEO は、戦略投資を外部支出 (キャッシュアウト) ではなく自己時間振り分けで代替できる。MAS-071 の R_i (投資業務稼働率) を取り込んで strategicCash から自己時間投資相当を控除する拡張案を Q6 で論点化。v0.1 (現行) では外部支出ベースのまま動作・v1.1 で実装着手判断。
■ 追加入力 (v1.1 で導入予定)
rInvestment : 投資業務稼働率 (0..1・MAS-071 から取得)
directorMonthlyRate : 代表取締役 月額単価 (円・前提条件から取得)
■ 拡張計算 (v1.1)
selfInvestmentAnnual = directorMonthlyRate × rInvestment × 12 // 自己時間機会費用換算
strategicCashExternal = max(0, marginAnnual × 0.20 − selfInvestmentAnnual)
surplusCash = max(0, cashBalance − (defenseCash + strategicCashExternal))
注意: 自己時間投資は会計上の資産計上不可・BS には現れない・税務中立。詳細は §10 Q6 参照。
2.2 資本効率スコア (ROE)
伊藤レポート (経済産業省 2014) ベンチマーク 8% を基準に、自社 ROE を判定。
計算式
■ 入力
netIncome : 当期純利益 (円)
equity : 自己資本 (純資産・円)
totalAssets : 総資産 (円)
■ 計算
roe = netIncome / equity // 自己資本利益率
equityRatio = equity / totalAssets // 自己資本比率
roa = netIncome / totalAssets // 総資産利益率 (補助指標)
■ 判定 (sys_params で閾値変更可)
ROE_HEALTHY_MIN = 0.08 // ROE 8% 以上なら健全 (伊藤レポート)
EQUITY_RATIO_BLOAT = 0.80 // 自己資本比率 80% 超で「肥大」
if (roe < ROE_HEALTHY_MIN):
capitalLazyFlag = true
reason = "ROE が伊藤レポート最低基準 8% を下回る"
if (equityRatio > EQUITY_RATIO_BLOAT):
capitalLazyFlag = true
reason += " / 自己資本比率 80% 超 (財務レバレッジを完全放棄)"
if (capitalLazyFlag):
diagnosis = "資本の怠慢 (現預金の持ちすぎ・自己資本肥大)"
suggestedAction = ["役員報酬上振れ検討", "配当 (MAS-066)", "事業再投資", "退職金原資確保 (MAS-141 / 共済)"]
ROE / 自己資本比率 / ROA の見方
| 指標 | 計算式 | 健全圏 | 過多警告 | 解釈 |
|---|
| ROE | 純利益 / 自己資本 | 8% 以上 | < 8% で「資本の怠慢」 | 伊藤レポート (経済産業省 2014) 最低基準 |
| 自己資本比率 | 自己資本 / 総資産 | 40-60% | > 80% で「肥大」 | 100% = 財務レバレッジ完全放棄 |
| ROA | 純利益 / 総資産 | 5% 以上 | < 3% | 補助指標・現預金過多時に下がる |
2.3 成長と利益のバランス (Rule of 40)
SaaS 業界標準の成長 vs 利益バランス指標。赤字でも成長率が高ければクリアできる構造のため、「黒字維持バイアス」対抗フレームワーク。
計算式
■ 入力
revenuePrev : 前期年商 (円)
revenueCurr : 当期年商 (円)
operatingProfit : 営業利益 (円・MAS-071 から取得可)
■ 計算
growthRate = (revenueCurr - revenuePrev) / revenuePrev * 100 // 売上成長率 (%)
opMargin = operatingProfit / revenueCurr * 100 // 営業利益率 (%)
ruleOf40Score = growthRate + opMargin
■ 判定 (sys_params で閾値変更可)
RULE_OF_40_THRESHOLD = 40
if (ruleOf40Score >= RULE_OF_40_THRESHOLD):
status = "HEALTHY" // 緑 (UI 後述)
color = "#4CAF50"
else if (ruleOf40Score >= 30):
status = "WARNING" // 黄
color = "#FFC107"
else:
status = "CRITICAL" // 赤
color = "#F44336"
diagnosis = "利益偏重で成長投資 (マーケ・R&D・外注化) が不足"
suggestedAction = ["マーケティング投資増額", "外部委託拡大", "R&D 加速", "新サービス開発"]
Rule of 40 の解釈
| 区分 | スコア | 解釈 |
|---|
| 🟢 健全 | ≧ 40% | 成長と利益のバランス良好 |
| 🟡 警告 | 30-40% | バランスにやや偏り・要注視 |
| 🔴 危機 | < 30% | 成長停止・利益偏重・黒字維持バイアス疑い |
bizlp 適用時の注意
| 項目 | 内容 |
|---|
| 業種 | コンサル業は SaaS 標準と異なる収益モデル → 40% は参考値として扱い、自社推移を重視 |
| 設立年度 (Y0) | 前期データ無しで growthRate 計算不可 → Y0 は ruleOf40Score = null 扱い + 「次期から判定可」表示 |
| 営業利益供給元 | MAS-071 の OP_pre または MAS-057 cockpit の Step 7 集約値 |
2.4 アロケーション提案ロジック (純余剰資金が発生時)
■ 純余剰資金 (surplusCash) > 0 の場合の優先順位リスト生成
priority = [
{
rank: 1,
label: "自社事業への再投資",
detail: "マーケ・外部委託・ツール・R&D・新サービス開発",
rationale: "1 人社長事業で時間ボトルネック解消が最高 ROI (LTV/CAC 健全な事業で年率 100%+ も)",
relatedMAS: ["MAS-013 投資シミュレーション", "MAS-042 ハードルレート"]
},
{
rank: 2,
label: "役員退職金原資の確保 (法人内・節税効果)",
detail: "経営セーフティ共済 (年 240 万まで) + 小規模企業共済 (年 84 万まで) 満額拠出",
rationale: "損金算入で当期利益圧縮 + 解約時に退職金原資化 = 二重メリット",
relatedMAS: ["MAS-141 節税共済"]
},
{
rank: 3,
label: "金融資産運用 (法人 or 個人 NISA 経由)",
detail: "全世界株式インデックス・S&P500 ETF (法人税引後 5% 想定)",
rationale: "法人運用は税効率劣・**事前確定届出給与で個人化 + NISA 枠最大活用**が長期最適",
relatedMAS: []
},
{
rank: 4,
label: "借入レバレッジ準備 (枠確保のみ)",
detail: "公庫・信用保証協会の枠を未使用でも事前申請",
rationale: "明確な投資案件が立った時の追加燃料・**いま借りるな・枠だけ取れ**",
relatedMAS: ["MAS-337 融資審査スコアリング"]
}
]
3. UI/UX設計
3.1 全体配置 (cockpit パネル位置)
MAS-057 cockpit v2.4 の配置順序を踏襲しつつ、Step 7-D 直後に新規パネル追加 (MAS-058 健全性診断の上限版として近接配置):
1. GuardrailBanners
2. MAS-071 戦略シナリオ
3. Step 7-A ApproachComparisonPanel
4. Step 7-B SoloFinancialStatementsPanel
5. AssumptionsBar / ScenarioBar / CompensationDropdowns
6. MAS-058 RequiredRevenuePanel (健全性診断・下限警告)
7. ★ MAS-355 CapitalAllocationPanel (本案件・上限警告 + アロケーション)
3.2 3 バケツビジュアルメーター
形式: 横棒積み上げグラフ + 上部数値表示
┌──────────────────────────────────────────────────────────────────┐
│ 💰 現預金 1,500 万円 の使われ方診断 │
├──────────────────────────────────────────────────────────────────┤
│ │
│ ┌──── 防衛 ────┐┌── 戦略投資 ──┐┌──── 純余剰 ────┐ │
│ ████████████████░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ 100% │
│ 600 万 (40%) 400 万 (27%) 500 万 (33%) │
│ 🟢 防衛確保 🟡 期末まで ⚠️ 機会損失 25 万円/年 │
│ に使い切り │
│ │
│ ⚠️ 純余剰 500 万 → 年率 5% で年 25 万円の機会損失 │
│ 💡 おすすめの使い道 (優先順位順) ▼ │
└──────────────────────────────────────────────────────────────────┘
配色
| バケツ | 色 (CSS) | アクセシビリティ |
|---|
| 1 防衛 | #2E7D32 (深緑・安定) | WCAG AAA 対応コントラスト |
| 2 戦略投資 | #FFA726 (オレンジ・行動) | "使い切り対象"を視覚で訴求 |
| 3 純余剰 | #EF5350 (赤・機会損失) | 「死蔵」の負感情を喚起 |
| 防衛不足時 | 全体に赤縁 + 警告アイコン | MAS-058 健全性診断と整合 |
インタラクション
- バケツをクリック → ツールチップで詳細展開 (例: 防衛をクリックすると「月固定費 100 万 × 6 ヶ月 + 納税バッファ 0」の内訳)
- 「現預金残高」入力フォーム → リアルタイムで再計算 (debounce 200ms)
- スライダーで月固定費調整 → リアルタイム更新
3.3 アロケーション提案カード (純余剰時のみ表示)
┌──────────────────────────────────────────────────────────────────┐
│ 💡 純余剰 500 万円のおすすめの使い道 │
├──────────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ 🥇 #1 自社事業への再投資 (推奨配分: 250-300 万円) │ │
│ │ マーケ / 外部委託 / ツール / R&D │ │
│ │ ROI: 100%+ (LTV/CAC 健全時) │ │
│ │ [📈 MAS-013 投資シミュレーションを開く] │ │
│ └─────────────────────────────────────────────────────────┘ │
│ │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ 🥈 #2 役員退職金原資の確保 (推奨配分: 100-150 万円) │ │
│ │ セーフティ共済 + 小規模企業共済 満額拠出 │ │
│ │ 効果: 損金算入 + 退職金原資化 │ │
│ │ [💼 MAS-141 節税共済シミュレーターを開く] │ │
│ └─────────────────────────────────────────────────────────┘ │
│ │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ 🥉 #3 金融資産運用 (推奨配分: 50-100 万円) │ │
│ │ 全世界株式 ETF or 個人 NISA 経由 │ │
│ │ 実効リターン 約 5% (法人税引後) │ │
│ └─────────────────────────────────────────────────────────┘ │
│ │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ 🏅 #4 借入レバレッジ準備 (枠確保のみ・今は借りない) │ │
│ │ 公庫・信用保証協会の融資枠を事前申請 │ │
│ │ [🏦 MAS-337 融資審査スコアリングを開く] │ │
│ └─────────────────────────────────────────────────────────┘ │
│ │
└──────────────────────────────────────────────────────────────────┘
3.4 ROE 信号機 + 自己資本比率ゲージ
┌────────────────────────────────────────┐
│ 📊 資本効率スコア │
├────────────────────────────────────────┤
│ │
│ ROE: 27% 🟢 健全 (≥ 8%) │
│ ├─────────────────────────┤ │
│ 0% 8% 50% │
│ │
│ 自己資本比率: 85% 🔴 肥大 (> 80%) │
│ ├─────────────────────────┤ │
│ 0% 30% 80% 100% │
│ │
│ ⚠️ 診断: 「資本の怠慢」 │
│ 理由: 自己資本比率 85% で財務レバレ │
│ ッジ完全放棄状態 │
│ │
│ 推奨アクション: │
│ • 役員報酬の見直し (MAS-071) │
│ • 配当検討 (MAS-066) │
│ • 退職金原資化 (MAS-141) │
│ │
└────────────────────────────────────────┘
3.5 Rule of 40 スピードメーター (ゲーミフィケーション)
┌────────────────────────────────────────┐
│ 🚀 Rule of 40 スコア │
├────────────────────────────────────────┤
│ │
│ ╭───── 40 ─────╮ │
│ 30 ┃ ┃ 50 │
│ / ┃ ┃ \ │
│ 20 ┃ 🎯 ┃ 60 │
│ | ┃ 40% ┃ | │
│ 10 ┃ ┃ 70 │
│ \ ┃ ┃ / │
│ 0╰───────────╯ 80 │
│ │
│ 現在: 40% 🟢 (ぎりぎり健全) │
│ 内訳: 成長率 6% + 営業利益率 34% │
│ │
│ 💡 ヒント: 成長率を 10% 以上にすると │
│ 「優良」レベルに昇格 │
│ │
└────────────────────────────────────────┘
スピードメーターのゲーミフィケーション
| ゾーン | スコア | 色 | 演出 |
|---|
| 🔴 危機 | < 20 | 赤 | アイコンが落ち込みアニメ |
| 🟠 注意 | 20-30 | オレンジ | アイコン中立 |
| 🟡 警告 | 30-40 | 黄 | 針が振動 (もう少し!) |
| 🟢 健全 | 40-60 | 緑 | 針が安定・✨エフェクト |
| ✨ 優秀 | > 60 | 濃緑 | 「Excellent!」表示 + 紙吹雪エフェクト |
スコアが 40 を越えた瞬間に色変化アニメーション + トースト通知 (Rule of 40 達成! 成長と利益のバランス◎)。
3.6 履歴トレンド (将来 v2 拡張)
MAS-002 期末スナップショット連携で過去 N 期の推移グラフ表示 (本仕様では UI のみプレースホルダ・実装は v2):
- ROE 過去 5 期推移 (折れ線)
- Rule of 40 過去 5 期推移 (折れ線)
- 純余剰資金 過去 5 期推移 (棒グラフ)
4. システムアーキテクチャ (ファイル構成・API)
4.1 ファイル構成
400_domain/
└── 447_capital_allocation_engine.js [新規・~400 行]
名前空間: CapitalAllocationEngine
Pure Function 純粋関数のみ (DOM/GAS API 非依存)
webapp_client/
├── src/
│ ├── cockpit/
│ │ └── CapitalAllocationPanel.tsx [新規・~600 行]
│ ├── cockpit-main.tsx [変更・副作用 import 追加]
│ └── engines/
│ └── 447_capital_allocation_engine.js [sync で自動配置]
└── scripts/
└── sync-engines.mjs [変更・ENGINES_TO_SYNC に 447 追加]
100_config/
└── 101_sys_config.js [変更]
- schemas: 変更なし
- sys_params: MAS355_* 6 キー追加
- MENU_DEFINITION: 「📊 サイドバー → 資本効率診断」1 項目追加 (任意)
800_ops/
└── 8XX_migration_mas355_seed.js [新規・実装着手時に番号確定]
- sys_params 6 キー冪等シード
900_test/
└── 901_test_runner.js [変更・テスト 15 件追加 F355-01〜F355-15]
4.2 公開 API (CapitalAllocationEngine 名前空間)
// 400_domain/447_capital_allocation_engine.js
var CapitalAllocationEngine = (function () {
'use strict';
/**
* 3 バケツモデル: 現預金を防衛・戦略投資・純余剰に切り分ける
* @param {Object} input
* @param {number} input.cashBalance 現預金残高 (円)
* @param {number} input.monthlyFixedCost 月間固定費 (円・役員報酬込み or 別: Q1 で確定)
* @param {number} input.taxBuffer 納税バッファ (円・未払法人税+消費税+社保)
* @param {number} input.marginAnnual 年間限界利益 (円)
* @param {number} [input.opportunityRate] 機会費用率 (default 0.05)
* @returns {ThreeBucketsResult}
*/
function calcThreeBuckets(input) { /* ... */ }
/**
* 資本効率スコア (ROE) 評価
* @param {Object} input
* @param {number} input.netIncome 当期純利益 (円)
* @param {number} input.equity 自己資本 (純資産・円)
* @param {number} input.totalAssets 総資産 (円)
* @returns {RoeAssessmentResult}
*/
function assessRoe(input) { /* ... */ }
/**
* Rule of 40 スコア
* @param {Object} input
* @param {number} input.revenuePrev 前期年商 (円・null 可・Y0 時)
* @param {number} input.revenueCurr 当期年商 (円)
* @param {number} input.operatingProfit 営業利益 (円)
* @returns {RuleOf40Result}
*/
function calcRuleOf40(input) { /* ... */ }
/**
* アロケーション提案を生成
* @param {number} surplusCash 純余剰資金 (円・>0 時に呼出)
* @returns {AllocationRecommendation[]}
*/
function suggestAllocation(surplusCash) { /* ... */ }
/**
* 全体診断 (3 ロジック統合)
* @param {ConsolidatedInput} input
* @returns {CapitalAllocationDiagnosis}
*/
function diagnose(input) {
return {
threeBuckets: calcThreeBuckets(input),
roe: assessRoe(input),
ruleOf40: calcRuleOf40(input),
allocation: surplusCash > 0 ? suggestAllocation(surplusCash) : []
};
}
// Pure Function 公開
return {
calcThreeBuckets: calcThreeBuckets,
assessRoe: assessRoe,
calcRuleOf40: calcRuleOf40,
suggestAllocation: suggestAllocation,
diagnose: diagnose
};
})();
if (typeof window !== 'undefined') window.CapitalAllocationEngine = CapitalAllocationEngine;
4.3 GAS 側 API (将来 v2)
cockpit パネルへの初期値供給用 (300_ui/302_spa_bridge.js に追加・任意):
function getMAS355Params() {
// 03_sys_params から MAS355_* 6 キーを取得
return {
opportunityRate: 0.05,
roeHealthyMin: 0.08,
equityRatioBloat: 0.80,
ruleOf40Threshold: 40,
strategicCashRatio: 0.20,
defenseCashMonths: 6
};
}
function getMAS355CurrentSnapshot() {
// 71_bs / 92_fs_pl / 64_pl_ytd_plan から自動入力値を集約
return {
cashBalance: ..., // 71_bs 現預金
monthlyFixedCost: ..., // 92_fs_pl 固定費 / 12
netIncome: ..., // 92_fs_pl 当期純利益
equity: ..., // 71_bs 純資産
totalAssets: ..., // 71_bs 資産合計
revenuePrev: ..., // 91_fs_bs / 92_fs_pl 前期 (MAS-177 多年度基盤連携時)
revenueCurr: ..., // 92_fs_pl 当期年商
operatingProfit: ... // 92_fs_pl 営業利益
};
}
4.4 sys_params (03_sys_params・MAS355_* 6 キー)
| キー | default | 説明 |
|---|
MAS355_OPPORTUNITY_RATE | 0.05 | 機会費用率 (年率)・純余剰資金にかける |
MAS355_ROE_HEALTHY_MIN | 0.08 | ROE 健全圏下限 (伊藤レポート) |
MAS355_EQUITY_RATIO_BLOAT | 0.80 | 自己資本比率「肥大」閾値 |
MAS355_RULE_OF_40_THRESHOLD | 40 | Rule of 40 健全閾値 (%) |
MAS355_STRATEGIC_CASH_RATIO | 0.20 | 戦略投資資金 = 限界利益 × この値 |
MAS355_DEFENSE_CASH_MONTHS | 6 | 防衛資金 = 月間固定費 × この値 |
4.5 React コンポーネント構造
CapitalAllocationPanel.tsx
├── ThreeBucketsBar (積み上げ棒グラフ)
│ └── BucketTooltip (各バケツ詳細)
├── RoeIndicator (ROE 信号機 + 自己資本比率ゲージ)
├── RuleOf40Speedometer (スピードメーター + ゲーミフィケーション)
├── AllocationSuggestions (純余剰時のみ表示)
│ └── AllocationCard × 4 (#1-#4 優先順位)
└── (v2) HistoryTrend (過去推移・MAS-002 連携)
4.6 シナリオ保存 (将来 v2・MAS-067 / MAS-071 と統合)
将来的に MAS-067 / MAS-071 / MAS-002 のシナリオ保存基盤と統合し、MAS355_SC_xxxx ID で前提値 (機会費用率 / 防衛月数 / 閾値等) を保存可能化。v1 ではローカル state のみ。
5. エッジケースとバリデーション
5.1 入力バリデーション
| フィールド | バリデーション | エラー時の挙動 |
|---|
cashBalance | 数値 ・ ≥ 0 | 0 未満 → 0 にクランプ + 警告 |
monthlyFixedCost | 数値 ・ > 0 | ≤ 0 → エラー表示・計算停止 (固定費なしの法人は想定外) |
taxBuffer | 数値 ・ ≥ 0 | < 0 → 0 にクランプ |
marginAnnual | 数値 ・ ≥ 0 | < 0 → 0 にクランプ + 「赤字事業」警告 (戦略投資資金 = 0 で動作) |
netIncome | 数値 (任意符号) | NaN → エラー |
equity | 数値 ・ > 0 | ≤ 0 → エラー (債務超過状態は ROE 計算不能) |
totalAssets | 数値 ・ > 0 | ≤ 0 → エラー |
revenuePrev | 数値 | null | null → Rule of 40 = null (Y0 想定) |
revenueCurr | 数値 ・ > 0 | ≤ 0 → エラー |
operatingProfit | 数値 (任意符号) | 赤字 (negative) も許容 |
opportunityRate | 0 ≤ x ≤ 1 | 範囲外 → default 0.05 |
5.2 エッジケース (12 件)
| # | 条件 | 期待挙動 |
|---|
| E1 | 設立年度 (Y0)・前期データなし | revenuePrev = null → Rule of 40 = null + 「次期から判定可」表示 |
| E2 | 限界利益 0 or 負 (赤字事業) | strategicCash = 0 で計算継続・「赤字事業」警告 |
| E3 | 現預金 < 防衛資金 (DEFENSE_SHORTFALL) | バケツ表示は防衛のみ赤縁 + shortfall 額表示・MAS-058 連動警告 |
| E4 | 現預金 = 防衛資金 + 戦略投資資金 (純余剰 0) | 「適正水準」表示・アロケーション提案非表示 |
| E5 | 純余剰 > 限界利益 × 50% | 高重要度警告 + 「機会損失額が著しく大きい」アラート |
| E6 | ROE 100% 超 (高利益・低自己資本) | 健全表示・但し「事業 ROE 過大」注記 (再投資余力示唆) |
| E7 | 自己資本比率 100% (無借金) | 「肥大」フラグ + 「財務レバレッジ完全放棄」診断 |
| E8 | 純利益 マイナス (当期赤字) | ROE = 負値・「赤字決算」表示・Rule of 40 で利益率 < 0 として計算 |
| E9 | 自己資本 マイナス (債務超過) | ROE 計算不能 → エラー + 「債務超過状態」最重要警告 |
| E10 | Rule of 40 スコア > 80 (超優秀) | 「Excellent!」演出 + 「過剰投資の可能性検証」注記 |
| E11 | 月固定費に役員報酬を含むか否か | sys_params MAS355_INCLUDE_OFFICER_COMP_IN_FIXED (Q1 で確定) で切替 |
| E12 | 機会費用率の取り方 | sys_params MAS355_OPPORTUNITY_RATE で個社調整 (default 5%・株式市場期待リターン基準) |
5.3 警告レベル統一
MAS-058 既存警告との整合 + 重大度区分:
| Severity | 色 | 例 |
|---|
| 🔴 CRITICAL | 赤 | 防衛資金不足 / 債務超過 / Rule of 40 < 20 |
| 🟡 HIGH | オレンジ | 純余剰 > 限界利益 50% / ROE < 5% / Rule of 40 < 30 |
| 🟢 MEDIUM | 黄 | 自己資本比率 > 80% / Rule of 40 30-40 |
| ⚪ INFO | 灰 | 純余剰検出 (機会損失あり・但し許容範囲) |
6. テスト要件 (実データ検証の期待値含む)
6.1 単体テスト (900_test/901_test_runner.js・F355-01〜F355-15)
| テスト ID | 検証対象 | 入力 | 期待値 |
|---|
| F355-01 | calcThreeBuckets 正常系 | cash=1500万 / fixed=100万 / tax=0 / margin=2000万 | defense=600万・strategic=400万・surplus=500万・oppLoss=25万 |
| F355-02 | calcThreeBuckets 防衛不足 | cash=300万 / fixed=100万 / tax=0 / margin=2000万 | defense=600万・shortfall=300万・surplus=0 |
| F355-03 | calcThreeBuckets 純余剰 0 | cash=1000万 / fixed=100万 / tax=0 / margin=2000万 | defense=600万・strategic=400万・surplus=0 |
| F355-04 | calcThreeBuckets 赤字事業 | margin=0 | strategic=0・defense は通常通り |
| F355-05 | assessRoe 健全 | net=400万 / equity=1500万 | roe=0.267・lazy=false |
| F355-06 | assessRoe 怠慢 (ROE<8%) | net=80万 / equity=1500万 | roe=0.053・lazy=true |
| F355-07 | assessRoe 自己資本比率肥大 | equity=850万 / total=1000万 | equityRatio=0.85・lazy=true |
| F355-08 | assessRoe 債務超過 | equity=-100万 | エラー: "債務超過状態" |
| F355-09 | calcRuleOf40 健全 | growth=10% / margin=35% | score=45・status=HEALTHY |
| F355-10 | calcRuleOf40 警告 | growth=5% / margin=30% | score=35・status=WARNING |
| F355-11 | calcRuleOf40 危機 | growth=2% / margin=15% | score=17・status=CRITICAL |
| F355-12 | calcRuleOf40 Y0 | revenuePrev=null | score=null・"前期データなし" |
| F355-13 | suggestAllocation 純余剰 500 万 | 500万 | 4 件の提案 (#1-#4) |
| F355-14 | diagnose 統合 | bizlp 現状値 (後述) | 全 3 ロジック結果が整合 |
| F355-15 | エッジケース集約 | E1-E12 各シナリオ | 各 expected 通り |
6.2 統合テスト (cockpit パネル)
| ケース | 検証 |
|---|
| INT-01 | 入力フォームの値変更 → リアルタイム再計算 (debounce 200ms) |
| INT-02 | 純余剰 0 時のアロケーション提案非表示 |
| INT-03 | Rule of 40 スコアが 39 → 40 に変化したときの色アニメーション |
| INT-04 | MAS-013 / MAS-141 / MAS-337 へのリンクボタン動作 |
| INT-05 | sys_params の値変更時の即時反映 (script reload 後) |
6.3 実データ検証 (bizlp 現状値での期待値)
シナリオ A: bizlp 現状想定値 (限界利益 2,000 万・現預金 1,500 万)
| 入力 | 値 |
|---|
| cashBalance | 1,500 万 |
| monthlyFixedCost | 100 万 |
| taxBuffer | 0 (引当金別管理想定) |
| marginAnnual | 2,000 万 |
| netIncome | 400 万 |
| equity | 1,500 万 |
| totalAssets | 1,800 万 |
| revenuePrev | (Y0 想定) null |
| revenueCurr | 2,500 万 |
| operatingProfit | 850 万 |
| 期待結果 | 値 |
|---|
| 3 バケツ | 防衛 600 万 (40%) / 戦略投資 400 万 (27%) / 純余剰 500 万 (33%) |
| 年間機会損失 | 25 万円 (5% × 500 万) |
| ROE | 26.7% (健全) |
| 自己資本比率 | 83.3% (🔴 肥大警告) |
| 総合判定 | "資本の怠慢" (自己資本比率超過) + アロケーション提案表示 |
| Rule of 40 | null (Y0 想定で前期データなし) |
| アロケーション提案 | #1 自社事業再投資 250-300 万 / #2 退職金原資確保 100-150 万 / #3 金融資産運用 50-100 万 / #4 借入枠準備 |
シナリオ B: 設立 2 期目想定 (前期データあり・成長率 10%)
| 入力差分 | 値 |
|---|
| revenuePrev | 2,272 万 (= 2,500/1.10) |
| 期待結果 | 値 |
|---|
| Rule of 40 | 成長率 10% + 営業利益率 34% = 44% (🟢 HEALTHY) |
| Rule of 40 演出 | 緑色 + ✨エフェクト |
シナリオ C: 防衛資金不足 (現預金 300 万)
| 期待結果 | 値 |
|---|
| 3 バケツ | 防衛 600 万 / shortfall 300 万 (🔴 CRITICAL) / 戦略投資・純余剰なし |
| アロケーション提案 | 非表示 (まず防衛優先) |
| MAS-058 連動警告 | "ランウェイ < 推奨" として既存 MAS-058 警告と統合 |
7. 影響範囲
7.1 既存案件への影響
| 既存案件 | 影響 |
|---|
| MAS-057 cockpit | パネル 1 つ追加・配置順 7 番目・他パネル動作不変 |
| MAS-058 健全性診断 | 役割分担の明確化 = MAS-058 は下限警告 / MAS-355 は上限警告 + アロケーション・両者は cockpit 上で隣接配置 (経営判断の表裏一体表現) |
| MAS-071 役員報酬戦略 | operatingProfit の供給元として参照・MAS-071 自体は変更なし |
| MAS-067 マルチイヤー | 将来 v2 で 5 年累積機会損失グラフ追加余地 (本仕様 v1 では対象外) |
| MAS-002 期末スナップショット | 将来 v2 で Rule of 40 / ROE 履歴を Snapshot に保存 (本仕様 v1 では対象外) |
| MAS-013 投資シミュレーション | アロケーション提案 #1 のリンク先 (MAS-013 は変更なし) |
| MAS-141 節税共済 | アロケーション提案 #2 のリンク先 (MAS-141 は変更なし) |
| MAS-337 融資審査スコアリング | アロケーション提案 #4 のリンク先 (MAS-337 は変更なし) |
7.2 失敗パターン対策
| failure_patterns | 対策 |
|---|
| #25 並列実装対称性 | 4 つのアロケーション提案 (#1-#4) を同一インターフェース (AllocationCard) で実装 |
| #29 V8 → Java Infinity null | ROE 計算で 0 除算防止 + Number.isFinite ガード必須 |
| #31 ID 採番衝突 | MAS-355 / 447 の事前確認済 |
| #33 SPA 副作用 import 漏れ | cockpit-main.tsx に import './engines/447_capital_allocation_engine.js' 必須 |
8. 注意事項
- Pure Function 必須:
400_domain/447_capital_allocation_engine.js は GAS API / SpreadsheetApp / DOM 等の副作用呼出禁止 (sync-engines.mjs で SPA に転送される前提)
- Number.isFinite ガード: ROE / Rule of 40 で 0 除算・NaN・Infinity 発生防止 (failure_patterns #29)
- sys_params 6 キーの初期値はリサーチ結果から導出: 機会費用率 5% (株式市場期待リターン下限)・ROE 8% (伊藤レポート)・Rule of 40 40% (SaaS 業界標準) で業種特性に応じた調整余地あり (Q4)
- コンサル業の特殊性: Rule of 40 は元々 SaaS 向け指標・コンサル業に厳密適用は議論あり (Q5・自社過去推移を主軸とする運用)
- 設立年度 (Y0) 制約: 前期データなしで Rule of 40 / ROE が一部計算不能・「次期から判定可」UI で明示 (E1)
- 黒字維持バイアス対抗: Rule of 40 の意義は「赤字でも成長率高ければクリア」構造で意図的な利益削減 + 投資増額を正当化するフレームワーク・利用時の説明が UX 上重要
- 役員報酬の含み方 (Q1):
monthlyFixedCost に役員報酬を含むか別建てかで防衛資金 600 万円が大きく変動する設計判断が必要
- 税務上の留意: 留保金課税は中小企業 (資本金 1 億円以下) 適用除外 (税務ペナルティなし)・だからこそ自己責任で資本効率最適化が必要・本案件はその「セルフ規律」基盤
- MAS-058 既存実装との整合: cap of margin / runway / healthy 判定は MAS-058・本案件は ROE / 純余剰 / Rule of 40 で異なるレイヤーを担当・両者の警告メッセージが重複しないようコピーライティング調整必要
- ゲーミフィケーション要素のさじ加減: スピードメーター + 紙吹雪エフェクトは Solo CEO のモチベーション維持に寄与・但し過度な演出は経営判断の真剣味を削ぐため UX レビュー必須 (Q3)
- CFO 不在環境想定: bizlp は Solo CEO で CFO 不在 → 本案件が事実上の「セルフ CFO ダッシュボード」として機能・診断結果の言葉遣いは経営者向けに簡明化必須
- アロケーション提案の優先順位は教義依存: バフェット・マンガー流 (再投資 → 還元) を採用・但し業種・成長フェーズで順序入替え余地あり (Q5)
9. 関連ドキュメント
10. 人間が検討すべき事項 (Q1-Q6・推奨 + トレードオフ + 推奨理由)
Q1. 月固定費に役員報酬を含めるか
- 案 A: 含める (= 役員報酬込みの広義固定費を 6 ヶ月分防衛資金として確保)
- 案 B: 含めない (= 純粋な事業固定費のみで 6 ヶ月・役員報酬は別個人ストック前提)
- 推奨: 案 A (含める)
- 理由: 売上ゼロ時の最悪ケースでも社長の生活基盤が必要 + 厚生年金保険料は法人経費として支払必須 + 「役員報酬を一時停止できる」想定は心理的負担大・案 B は MAS-071 アプローチ A (生活防衛) との重複定義のリスク
- ただし業種・状況により案 B が望ましいケースあり → sys_params
MAS355_INCLUDE_OFFICER_COMP_IN_FIXED で切替可 (default true)
Q2. 戦略的投資資金 = 限界利益 × 20% の妥当性
- 推奨: 20% は妥当な初期値として採用
- 理由: 中小企業庁・経産省の R&D / マーケティング投資ベンチマークが 10-25% / 限界利益・SaaS 業界では 30%+ も見られるがコンサル業で 20% は中央値
- 業種別調整余地: SaaS 30% / コンサル 20% / 製造 15% / 小売 10% 等を sys_params で個社調整可能化 (将来 v2 拡張)
Q3. ゲーミフィケーション要素の強度
- 案 X: 強め (色変化アニメ + 紙吹雪 + トースト + 音 等)
- 案 Y: 弱め (色変化のみ・控えめエフェクト)
- 案 Z: なし (純粋に数値表示のみ)
- 推奨: 案 Y (弱め)
- 理由: Solo CEO は経営者として真剣な判断が求められる + 過度な演出は意思決定の真剣味を削ぐ・但し「達成感」を与える最低限の演出 (色変化 + 軽いトースト) は心理的継続使用に寄与
- 段階的導入: v1 で案 Y → ユーザー反応見て案 X 拡張 / 案 Z 縮小
Q4. 機会費用率 (default 5%) の意味付け
- 案 X: 株式市場期待リターン (5-7%) = 機会損失 = 「個人 NISA で運用していたら得られたリターン」基準
- 案 Y: 事業 ROIC = 機会損失 = 「自社事業に再投資したら得られたリターン」基準 (より高い値・10-30%)
- 案 Z: WACC = 加重平均資本コスト・無借金法人では実質個人期待リターンに収束
- 推奨: 案 X (5%) を default・sys_params で個社上書き可
- 理由: (a) 一般的に最も保守的で説明しやすい・(b) 「最低限ここまでは稼げたはず」基準の明示・(c) 案 Y の事業 ROIC は循環論法 (自社事業ベンチマークと比較するのは自社事業) になりがち
Q5. アロケーション提案の優先順位 (バフェット・マンガー流 vs 業種別)
- 案 X: バフェット・マンガー流固定 (再投資 → 還元 → 運用 → 借入)
- 案 Y: 業種別カスタマイズ (SaaS は再投資強・コンサルは還元強・製造は設備投資強等)
- 推奨: 案 X (固定) を v1 採用・将来 v2 で業種別フィルタ
- 理由: Solo CEO ファーストの bizlp 想定ユーザーには普遍原則を提示する方が判断軸が明確・業種別カスタマイズは「言い訳」を生みやすい (バフェット曰く「シンプルに勝るものなし」)
Q6. 自己時間振り分けによる戦略投資の取扱い (v0.1.1 追加・bizlp 代表のプロダクト開発スキル前提)
課題
bizlp 代表 (齋藤) は プロダクト開発スキルを保有しているため、戦略投資は必ずしも「外部支出 (外注費 / マーケ費 / IT 費 / R&D 費)」として現預金キャッシュアウトする必要がない。自分の稼働時間の一部を投資業務 (R_i) に振り分ける ことで、同等の投資効果を実現できる。
MAS-071 の 4 軸稼働率モデル (R_d デリバリー / R_s 営業マーケ / R_i 投資業務 / R_m 管理業務) には既に 投資業務稼働率 R_i が組み込まれている (Solo CEO の時間配分のうち「自社プロダクト開発 / R&D / 自動化スクリプト構築 / SEO 記事執筆 / 研修・学習」等に充てる比率)。
しかし現行 MAS-355 v0.1 は strategicCash = marginAnnual × 0.20 という 外部支出ベースの単一計算式しか持たないため、以下の問題が発生する:
| ケース | 実態 | MAS-355 現行判定 (誤動作) |
|---|
| 外注ゼロ・自己時間 R_i = 20% で 100% 自前投資 | キャッシュアウトなし・実質「自前で R&D 実施中」 | strategicCash バケツ未消費 = 「投資不履行」誤警告 + 純余剰大 = 「機会損失 (死蔵)」誤警告 |
| 外注 10%・自己時間 R_i = 10% で半々ハイブリッド | キャッシュアウト 半額・残りは時間投下 | strategicCash バケツ消費が「未達」になる (本来適正なのに不足扱い) |
| 外注 100%・自己時間 R_i = 0% で全額外注 | 想定通り | 適正判定 (現行で OK) |
「自己時間で代替している分」を MAS-355 の strategicCash 計算から控除しないと、プロダクト開発能力を持つ Solo CEO に対して誤った警告を出してしまう。
案 A: 自己時間投資を strategicCash 算出式から控除する (推奨)
■ 追加入力
rInvestment : 投資業務稼働率 (0..1・MAS-071 から取得)
directorMonthlyRate : 代表取締役 月額単価 (円・前提条件から取得)
■ 拡張計算
// 自己時間を「投資業務」に振り分けた分の機会費用換算 (年間)
selfInvestmentAnnual = directorMonthlyRate × rInvestment × 12
// 戦略投資バケツの「外部支出として確保すべき残額」
strategicCashExternal = max(0, marginAnnual × 0.20 − selfInvestmentAnnual)
// 表示・警告判定は strategicCashExternal をベースに
surplusCash = max(0, cashBalance − (defenseCash + strategicCashExternal))
意味: 自己時間 R_i = 20% で月単価 150 万円なら年間 360 万円相当の自己投資 → 限界利益 1,500 万 × 20% = 300 万円の戦略投資ベンチマークは既にクリア済とみなし、外部支出は 0 円でも適正と判定。
案 B: 別バケツとして並列管理 (4 バケツ化・非推奨)
defenseCash : 月固定費 × 6 ヶ月 + 納税バッファ
strategicCash : marginAnnual × 0.20 (外部支出枠・現行のまま)
selfInvestmentCash : directorMonthlyRate × R_i × 12 (新規・自己時間枠・仮想バケツ)
surplusCash : cashBalance − defenseCash − strategicCash − selfInvestmentCash
意味: 4 バケツ化。自己時間枠は現預金から物理的に引かれない仮想バケツ。3 バケツモデルの単純さが崩れるデメリット。
推奨: 案 A
理由:
- (a) 既存 3 バケツモデルの単純さを維持できる
- (b) 「自己時間で代替できた金額分は外部支出から免除」という直感に合う
- (c) UI 表示も
strategicCashExternal の説明文に「(R_i = 20% 相当の自己時間投資 360 万円を控除済)」と注記すれば理解しやすい
- (d) MAS-071 の既存 4 軸稼働率モデルと直接接続可能 (再計算不要)
注意点 (実装時 v1.1 で必須記載)
- 限界利益の自己強化ループ: R_i を上げると R_d (デリバリー稼働率) が下がる → revenue 低下 → marginAnnual 低下 → 戦略投資ベンチマーク (20%) も自動的に低下する。「自前で R&D してるから投資ベンチマーク達成」と「売上が減ったから投資ベンチマークも下がっただけ」が区別できないため、過去年比較・絶対水準ベンチマークが必要 (例:
selfInvestmentAnnual の絶対値推移グラフ・MAS-002 期末スナップショット連携 v2 で記録)
- 無形資産化されない: 自己時間投資の成果物 (プロダクト・自動化スクリプト) は会計上の資産計上が難しいため、BS には現れない。MAS-355 でも「BS 上の見た目は変わらない」ことを UI で明示する必要あり (注記「自己時間投資はキャッシュ・BS に反映されません」)
- 税務上: 自己時間振り分けは P/L · 現預金 · 税務に影響を与えない (給与で取って外注すると損金にできるが、自己時間なら損金・課税どちらにも該当しない)。結果的に役員報酬戦略 (MAS-071) の最適点を変えない (R_i を上げても税効率は中立)
- MAS-058 連動: R_i を上げて R_d を下げすぎると、ランウェイ・営業利益率の MAS-058 健全性下限を割る可能性あり。MAS-058 が下限警告 / MAS-355 が上限警告の役割分担は維持・両者が同時に発動するケースに UI 上で警告併記
- 外部参照: バフェット・マンガー流アロケーションの「① 既存事業再投資」は本来「現預金の事業内再投入」を指すが、Solo CEO の自己時間投資も実質的に①の最も純度の高い形と解釈可能 (CFO 不在環境ならではの強み)。本案件のアロケーション提案 #1 (自社事業再投資) の説明文に「自己時間投資 (MAS-071 R_i) も含む」と明示
実装方針
- v0.1 v1.0 (現行・本仕様書): 外部支出ベースの strategicCash 計算式のみ・Q6 は論点として記録
- v1.1 (将来):
assessThreeBuckets(input) の input に rInvestment / directorMonthlyRate を追加・案 A の strategicCashExternal を返却・UI で注記表示
- v2.0 (更先): 過去年比較 (MAS-002 期末スナップショット連携) で
selfInvestmentAnnual 絶対値推移を可視化・自己強化ループへの注意喚起 UI
11. 実装プロンプト (Claude Code 用・Step 1-6)
## Step 1: ドメインエンジン (Pure Function) 実装 (推奨モデル: Opus)
**ファイル**: `400_domain/447_capital_allocation_engine.js` 新規
- 名前空間: `CapitalAllocationEngine` (IIFE パターン)
- 公開 API: `calcThreeBuckets` / `assessRoe` / `calcRuleOf40` / `suggestAllocation` / `diagnose`
- すべて Pure Function (引数のみ参照・外部 IO 一切なし)
- Number.isFinite ガード徹底 (failure_patterns #29)
- 行数: 約 400 行
- 単体テスト F355-01〜F355-12 (`900_test/901_test_runner.js`)
## Step 2: sys_params シーダー (推奨モデル: Sonnet)
**ファイル**: `800_ops/8XX_migration_mas355_seed.js` 新規
- 6 キーを冪等シード (実装着手時に最新番号確認)
- 既存値があれば上書きしない
## Step 3: SPA 同期設定 + 副作用 import (推奨モデル: Sonnet)
**ファイル**: `webapp_client/scripts/sync-engines.mjs` 変更
- ENGINES_TO_SYNC に `447_capital_allocation_engine.js` 追加
**ファイル**: `webapp_client/src/cockpit-main.tsx` 変更
- `import './engines/447_capital_allocation_engine.js'` 副作用 import 追加 (failure_patterns #33)
## Step 4: cockpit パネル React コンポーネント (推奨モデル: Opus)
**ファイル**: `webapp_client/src/cockpit/CapitalAllocationPanel.tsx` 新規
- 配下コンポーネント: ThreeBucketsBar / RoeIndicator / RuleOf40Speedometer / AllocationSuggestions
- リアルタイム再計算 (debounce 200ms)
- bootstrap データ (sys_params + 71_bs / 92_fs_pl 集約) を CockpitApp から props 受領
- 行数: 約 600 行
- 統合テスト INT-01〜INT-05
## Step 5: cockpit 統合 + メニュー (推奨モデル: Sonnet)
**ファイル**: `webapp_client/src/cockpit/CockpitApp.tsx` 変更
- Step 7 と MAS-058 の間に CapitalAllocationPanel 配置
**ファイル**: `100_config/101_sys_config.js` 変更
- MENU_DEFINITION に「📊 サイドバー → 資本効率診断」追加 (任意)
## Step 6: dev 検証 + 統合テスト (推奨モデル: Haiku)
- 単体テスト全件 PASS
- 統合テスト 5 件 PASS
- 実データ検証 シナリオ A/B/C で期待値一致
- ブラウザでパネル動作確認 + ゲーミフィケーション要素の UX レビュー
- dev デプロイ → ユーザー操作確認 → PR
## ⚠️ 重要
- Step 1 の Pure Function 完成 + 単体テスト PASS が他 Step の前提条件
- Step 4 React コンポーネントは Step 1 の API に依存
- Step 5 統合は Step 4 完成後
- 各 Step は独立 PR 推奨 (失敗時の rollback 容易)
12. 推奨実行モデル
| Step | 推奨モデル | 理由 |
|---|
| Step 1 ドメインエンジン | Opus | 3 ロジック統合 + Pure Function 設計 + Number.isFinite ガード判断 |
| Step 2 sys_params シーダー | Sonnet | 既存パターン応用 (機械的) |
| Step 3 SPA 同期設定 | Sonnet | 既存 sync-engines.mjs パターン応用 |
| Step 4 React パネル | Opus | UI/UX 設計判断 (配色 / アニメ / アクセシビリティ) + 4 提案カードの並列実装対称性 |
| Step 5 cockpit 統合 | Sonnet | 既存 CockpitApp 配置パターン応用 |
| Step 6 検証 | Haiku | テスト実行 + ブラウザ確認 (機械的) |
13. 変更履歴
| 日付 | 変更内容 |
|---|
| 2026-05-03 | v1.0 実装完了 (PR #489) — Step 1: 447_capital_allocation_engine.js (3 バケツ / ROE / Rule of 40 純関数・単体テスト F355-01〜13 追加) / Step 2: 822_migration_mas355_seed.js (migrationMAS355Seed() で MAS355_* 6 キー冪等投入・MENU_DEFINITION 登録済み) / Step 3-5: CapitalAllocationPanel.tsx (~640 行・入力フォーム + 3 バケツバー + ROE インジケーター + capitalLazyFlag バッジ + Rule of 40 スピードメーター + アロケーション提案リスト) + CockpitApp.tsx 統合 + cockpit.css .mas355-* スタイル追加。仕様書 v0.1.1 からの実装差分なし。 |
| 2026-05-02 | v0.1.1 (Q6 自己時間振り分け論点追加 + 2.1 v1.1 拡張案 + 関連ドキュメント R_i 参照) — main 側起票依頼を受け、bizlp 代表のプロダクト開発スキルを前提とした「自己時間振り分けによる戦略投資の取扱い」を Q6 として追加。課題: 現行 v0.1 の strategicCash = marginAnnual × 0.20 は外部支出ベースで、プロダクト開発できる Solo CEO に対し「外注ゼロ・R_i = 20% で 100% 自前投資」のケースで「投資不履行 + 純余剰過大」の誤警告を出してしまう。推奨案 A: strategicCashExternal = max(0, marginAnnual × 0.20 − directorMonthlyRate × R_i × 12) で自己時間投資を控除 (3 バケツ単純さを維持)。案 B (4 バケツ並列) は仮想バケツで複雑化のため非推奨。注意点 5 件明記: (1) 限界利益自己強化ループ (R_i ↑ → R_d ↓ → marginAnnual ↓ で自動的に benchmark も低下するため過去年比較必要) / (2) 自己時間投資は BS 無形資産化されない (UI 注記必要) / (3) 税務中立 (MAS-071 最適点を変えない) / (4) MAS-058 下限警告との同時発動時の UI 併記 / (5) バフェット流「① 既存事業再投資」の最も純度の高い形と解釈可能。実装方針: v0.1 (現行) は外部支出ベースのまま動作・v1.1 で assessThreeBuckets の input 拡張 + strategicCashExternal 返却・v2.0 で MAS-002 期末スナップショット連携で過去年絶対値推移可視化。変更箇所: §2.1 末尾に「v1.1 拡張案: 自己時間投資控除」サブセクション新設 / §10 タイトルを Q1-Q5 → Q1-Q6 に変更し Q6 新設 (推奨案 + トレードオフ + 注意点 5 件 + 実装方針) / §9 関連ドキュメントの MAS-071 行に R_i 連携を追記 (v1.1 → v1.2 へ更新)。ID 衝突なし (failure_patterns #31 確認・本変更は MAS-355 spec 内追記のみで新規 ID 不要)。docs-only PR で prod 自動デプロイへの影響なし。 |
| 2026-05-01 | v0.1 起票(Solo CEO Financial Navigator の「資本効率の通信簿」として MAS-355 を新規起票・MAS-058 v2 拡張的位置づけで上限警告 + アロケーション提案担当・3 バケツモデル + ROE + Rule of 40 の 3 ロジック Pure Function 実装方針確定・Q1-Q5 推奨判断提示・Step 1-6 段階リリース計画・Deep Research 2 件 (Gemini + Claude 内部検討) を統合した SSoT 起草) |
14. 仕様書作成プロンプト
展開して表示
あなたは、1人社長向けの財務シミュレーションシステム(GAS + Vite/React SPA構成)のリードアーキテクトです。
既存の「MAS-057 Solo-CEO Financial Navigator」の拡張機能として、「資本効率&キャピタル・アロケーション最適化ダッシュボード」を実装するための開発仕様書(Markdown形式)を作成してください。
【1. 機能の目的】
1人社長が陥りがちな「過剰な内部留保(現預金の貯めすぎ)」による資本効率の悪化を防ぐ。口座にある現預金を「防衛資金」と「余剰資金」に明確に切り分け、ROE(自己資本利益率)やRule of 40といった指標を用いて、自社事業への再投資や適切な還元(キャピタル・アロケーション)を促す「攻めの財務ダッシュボード」を提供する。
【2. 実装すべきビジネスロジック】
■ 1. 資金の切り分け(3つのバケツ・モデル)
入力された「現在の現預金残高」を以下の3つに分類する。
- 防衛資金(絶対死守ライン) = (月間固定費 × 6ヶ月) + 納税バッファ(未払法人税・消費税・社保の想定額)
- 戦略的投資資金(使い切る枠) = 年間限界利益 × 20%
- 純余剰資金(機会損失を生んでいる資金) = 現預金残高 - (防衛資金 + 戦略的投資資金)
※純余剰資金がプラスの場合、年率5%(機会費用)を掛けた金額を「年間機会損失額」として算出する。
■ 2. 資本効率スコア(ROE)
- ROE = 当期純利益 / 自己資本(純資産)
※ROEが8%を下回る、または自己資本比率が80%を超える場合、「資本の怠慢(現預金の持ちすぎ)」として警告フラグを立てる。
■ 3. 成長と利益のバランス(Rule of 40)
- Rule of 40スコア = 売上高成長率(%) + 営業利益率(%)
※スコアが40%未満の場合、「利益偏重で成長投資(マーケティング・R&D・外注化)が不足している」という診断結果を返す。
【3. アーキテクチャと技術制約】
- 計算ロジックは `400_domain/` 配下に新しいエンジン(例: `447_capital_allocation_engine.js`)として Pure Function で実装すること。
- GASの通信レイテンシを排除するため、計算はすべてクライアントサイド(React)で実行すること。
【4. UI/UX設計の要件】
- 「現在の現預金残高」を入力すると、リアルタイムに「3つのバケツ」に色分けされるビジュアルメーター(積み上げ棒グラフなど)を設計すること。
- 純余剰資金が発生している場合、その資金の「おすすめの使い道(アロケーション提案)」を優先順位順(1. 自社事業への再投資、2. 役員退職金原資の確保、3. 金融資産運用)で提示するUIを含めること。
- Rule of 40のスコアをスピードメーターのようなUIで表示し、40%を超えると緑色になるようなゲーミフィケーション要素を取り入れること。
【出力形式】
Markdown形式で、見出し構成は以下の通りとすること。
1. 概要・目的
2. ビジネスロジック・計算式定義
3. UI/UX設計
4. システムアーキテクチャ(ファイル構成・API)
5. エッジケースとバリデーション
6. テスト要件(実データ検証の期待値含む)
# Deep Research 結果 (Gemini)
[添付: 「1人社長のマイクロ法人における資本効率の最適化と攻めの財務戦略——過剰内部留保の解体とキャピタル・アロケーションの極意」全文・3 バケツモデル + ROE/ROA + Rule of 40 + Buffett/Munger 流アロケーション + 留保金課税中小特例除外 + 投資 ROI 評価 + WACC + 自社株評価増 + LTV/CAC 等を網羅]
# Deep Research 結果 (Claude 内部検討)
[添付: 「過剰内部留保と資本効率の最適化ガイド——1人社長のための『攻めのバランスシート』設計」全文・3 層防衛資金 + ROE/ROIC + Rule of 40 (SaaS 起源・40% 閾値) + 留保金課税適用除外 + バフェット/マンガー流優先順位 + LTV/CAC ペイバック + 月次レビュー習慣等を網羅]
(本仕様書 v1.0 終わり・MAS-355 実装完了 2026-05-03 PR #489)