MAS-067: マルチイヤー計画ワークスペース + ステージ準備度ダッシュボード(人間駆動・MAS-057 派生)
概要
| 項目 | 内容 |
|---|---|
| 案件 ID | MAS-067 |
| 案件名 | マルチイヤー計画ワークスペース + ステージ準備度ダッシュボード(人間駆動・MAS-057 派生) |
| カテゴリ | シミュレーション・UX |
| 優先度 | P2 ★★★(MAS-057 BRD Vision の単年スコープを複数年に拡張・商用化時の主要 UI レイヤー候補) |
| 所要時間 | 約 2.0 ヶ月(Phase A-D 計・週 10h 前提・Phase A だけでも価値あり段階リリース可) |
| 実装ステータス | ✅ Phase A 完了 (PR #418・2026-04-30) / ✅ Phase B-1 完了 (PR #423・2026-04-30・5 軸ステージ準備度ダッシュボード + 最優先ポリシー A/B/C セレクター + プログレッシブ・ディスクロージャー S1-S4 + sticky bar) / ✅ Phase B-2 完了 (PR #425・2026-04-30・行為計算否認ガードレール 10 件 UI 表示・GuardrailPanel + GUARDRAILS 定数 + _evaluateGuardrails_) / ✅ Phase B-3 完了 (PR #426・2026-04-30・Deep Think 独自機能 3 件: Burnout メーター + フリーランス新法サイト負け検知 + インボイス 2 割特例終了崖検知・SectionGPanel + Section G ヘルパ 3 件) / Phase B-4 (MAS-066 配当連携) / C / D 未着手 |
| 対象ファイル(新規) | 400_domain/451_multiyear_planner.js(純粋関数・年次連結 PL/BS/CF + 5 軸ステージ判定 + サジェスト + ガードレール 10 件 + Section G 5 機能・v1.2 で約 400 行 → 約 600 行に拡張)/ webapp_client/multiyear_cockpit.html / webapp_client/src/MultiyearApp.tsx / webapp_client/src/multiyear/{YearTabs,BSCarryover,StageDashboard,SuggestPanel,GuardrailPanel,BurnoutMeter}.tsx(v1.2 で 5 → 7 React コンポーネント・約 800 行 → 約 1,200 行に拡張・GuardrailPanel と BurnoutMeter を Phase B で追加) |
| 対象ファイル(変更) | 300_ui/302_spa_bridge.js(cockpit view = multiyear_spa 追加 + bootstrap + runMultiyearSimulation API)/ webapp_client/scripts/sync-engines.mjs(451 を sync 対象に追加)/ webapp_client/vite.config.ts(multiyear_spa entry 追加)/ templates/financial_cockpit.html(ヘッダに「📅 マルチイヤー計画」リンク追加) |
| 新規シート | なし(既存 03_sys_params にキー追加のみ) |
新規 03_sys_params キー | v1.7 で Phase D の 5 キー追加で 19 キーに拡張: F67_PLAN_HORIZON_YEARS(default 5)/ F67_DEBT_REDEMPTION_YEARS_MAX(default 10.0・A9 公庫融資の閾値・旧 EQUITY_RATIO 0.30 から修正)/ F67_CASH_RUNWAY_MONTHS_MIN(default 3.0・A9 補助閾値)/ F67_A1_CF_MONTHS_MIN (6) / F67_A4_JOB_EVIDENCE_MIN (3) / F67_A5_OP_PROFIT_MIN (840000) / F67_A6_OP_PROFIT_MIN (2400000) / F67_A7_CAPEX_LIMIT (3000000) / F67_A8_RUNWAY_MIN (3) / F67_A8_GROSS_MARGIN_MIN (8000000) / F67_A10_TENURE_MIN (5) / F67_OPTIMIZATION_POLICY_DEFAULT ('A'・最優先ポリシー) / F67_BURNOUT_OCCUPANCY_RED_THRESHOLD (100・社長稼働限界) / F67_INVOICE_TRANSITION_END_DATE ('2026-09-30'・インボイス特例終了) / F67_DIVIDEND_INTEGRATION_ENABLED (false) / 【Phase D で追加・PR #448】 F67_AI_SUGGEST_ENABLED (default false・true で AI 提案ボタン表示) / F67_AI_SUGGEST_MODEL (default GEMINI_PRO・GEMINI_PRO/GEMINI_FLASH/CLAUDE_SONNET 選択肢) / F67_GEMINI_MODEL_OVERRIDE_PRO (default gemini-2.5-pro・3.x 系有効化後に gemini-3.1-pro-preview 等へ) / F67_GEMINI_MODEL_OVERRIDE_FLASH (default gemini-2.5-flash) / F67_AI_TEMPERATURE (default 0.3・経営アドバイスは具体数値含むため低温で一貫性確保) |
| 前提案件 | MAS-057 Phase 3(✅ PR #379)/ MAS-008 Cash Runway(✅)/ MAS-011 What-If(✅)/ MAS-013 投資分析(✅)/ MAS-058 Step 1-4(✅・Step 5 UI/SPA 連携完了待ち)/ MAS-057 Step 6 完了待ち(3 区分テーブル UI・B/S 引継ぎ表示で再利用) ※ MAS-048 採用 TCO は v1.2 で正社員採用判定が v2+ 延期となったため v1 スコープでは未使用(将来 v2+ で再利用予定) |
| 後続連携 | MAS-066 配当ミックス(任意・Phase B 以降で各年配当ドロップダウン追加)/ MAS-017 資金調達(融資準備度判定の精度向上)/ MAS-009 アラート(ステージ準備度 🟢 達成時の通知)/ MAS-060 組織構成シミュレーター(v2+ で正社員採用ステージ判定 A11 を再導入する際に年次呼出・分離パス推奨・人間検討事項 #15 参照) |
| 吸収・再定義対象 | なし(MAS-059 AI 自動オーケストレーションとは完全分離・3 cockpit 並列提供) |
目的
MAS-057 Phase 3 実装完了 (PR #379) 後の振り返りで派生した案件。MAS-057 は単年スコープのため、複数年計画の俯瞰と「次のアクション準備度」可視化が空白。MAS-008 (単年ランウェイ)・MAS-011 (単一ドライバー What-If)・MAS-058 (単年必要年商) では複数年自由入力 + B/S 引継ぎ + ステージ可視化を扱えない。
MAS-059 (AI 自動オーケストレーション・LangGraph) とは別物で、本案件は人間が手動で 5 年分の計画を入力する静的・俯瞰的ワークスペース。海外 FP&A SaaS (Pigment / Causal / Runway) は複数年予測機能を持つが、「ライフステージ S1-S4 + アクション準備度 3 種」の 2 軸ステージ判定は世界空白で差別化機会。
経営者ユーザーの直接要望(2026-04-27 振り返り会話):
「入力を 1 年目・2 年目みたいに増やして、2 年目は 1 年目の計画 PL/BS/CF を引き継ぎ、各年でランウェイなど評価して、人を雇う準備ができたのか・融資を申し込める準備ができたのか・SaaS ビジネスのためのプロジェクト開発に投資する準備ができたのか等を可視化したい」
この要望を 4 機能(マルチイヤー入力 / B/S 引継ぎ / ステージ準備度ダッシュボード / サジェストエンジン)× 4 Phase(A-D 段階リリース)に分解して実現する。
現在のコード
本案件は既存 5 案件(MAS-008 / MAS-011 / MAS-013 / MAS-058 / MAS-057)の計算エンジンを順次呼び出して年次連結 PL/BS/CF を構築するアグリゲータレイヤー。新規ロジックは年次連結 + 5 軸ステージ判定 + ガードレール + Section G 5 機能 + サジェストエンジンのみ。MAS-048 HiringTcoSimulator は v1.2 改訂で正社員採用判定が v2+ 延期となり v1 スコープでは未呼出(v2+ で 11 軸目アクション追加時に再利用予定)。
連携先 6 案件の利用関数
| 案件 | 関数・名前空間 | 状態 | MAS-067 連携時の用途 |
|---|---|---|---|
| MAS-057 Phase 3 | templates/financial_cockpit.html + webapp_client/src/cockpit/*.tsx | ✅ 実装済 PR #379 | UI フレーム参考・「📅 マルチイヤー計画」リンク導線追加 |
| MAS-058 RequiredRevenueSolver | solveRequiredRevenue(input)(400_domain/445_required_revenue_solver.js) | ✅ 実装済 PR #376 | 各年で必要年商逆算 |
| MAS-011 WhatIfSimulator | WhatIfSimulator.run(drivers, opts)(400_domain/430_what_if_simulator.js) | ✅ 実装済 PR #315/#320 | 5 カ年予測エンジン継承 |
HiringTcoSimulator.runHiringTcoSimulation(input)(400_domain/412_hiring_tco_simulator.js) | ✅ 実装済 PR #334/#341 | v1.2 で v1 スコープから除外(正社員採用は v2+ 延期・v1 は A8 業務委託活用が代替) | |
| MAS-013 InvestmentAnalyzer | runInvestmentAnalysis()(400_domain/431_investment_analyzer.js) | ✅ 実装済 PR #329 | SaaS 投資準備度判定 |
| MAS-008 Cash Runway | 既存ランウェイ計算(仕様書未確定の場合は単年ランウェイ式 = 現預金 ÷ 月平均固定費) | ✅ 既存 | 各年で算出 |
| MAS-017 FundingSimulator | 仕様書未着手(FundingSimulator.calc({targetAmount, type}) 仮置き) | 📝 P3 | 融資申込準備度判定(任意連携) |
| MAS-066 DividendMixOptimizer | 仕様書未起草(TODO 起票済 PR #382) | 📝 起票済 | 配当ミックスを各年で組込(任意・Phase B 以降) |
400_domain/ 採番状況(2026-04-27 時点)
既使用: 442(MAS-057 Phase 1)/ 443(MAS-057 Phase 2)/ 444(MAS-057 Phase 2)/ 445(MAS-058)/ 449(MAS-066 想定)/ 450(MAS-063 想定)。本案件は 451 を新規採番(MAS-066 449 / MAS-063 450 と並列・連番継続)。
MAS-057 Phase 3 SPA 基盤の流用
webapp_client/scripts/sync-engines.mjs(PR #379 で確立)が 400_domain/{442,443,444,445}*.js を webapp_client/src/engines/ にコピー + window 露出する仕組み。本案件で 451 を sync 対象に追加するだけで MAS-067 ドメインエンジンも同じ SSoT 共有方式が適用される(TypeScript 複製ゼロ)。
webapp_client/vite.config.ts の multi-page entry に multiyear_spa を追加することで、MAS-057 cockpit と並列で独立 cockpit ビルドが可能。
修正方針
Step 1: マルチイヤー入力 UI(4 機能の (a)・Phase A)
Y1-Y5 の各年で全パラメータを設定する year-tab UI:
[ Y1 ][ Y2 ][ Y3 ][ Y4 ][ Y5 ] ← タブで年切替
─────────────────────────────────
役員報酬月額: [50 万 ▾] ← A1 役員報酬最適化
賞与年額: [0 万 ▾]
社宅負担率: [0% ▾] ← A2 役員社宅
出張頻度: [月 0 回 ▾] ← A3 出張日当
親族役員: [なし ▾] ← A4 親族役員化(業務実態 score 入力)
共済掛金: [0 万 ▾] ← A5 小規模企業共済 / A6 セーフティ共済
配当年額: [0 万 ▾] ← F-66 連携・F67_DIVIDEND_INTEGRATION_ENABLED で表示切替
─────────────────────────────────
年商: [1,680 万 ▾]
固定費: [240 万 ▾]
業務委託費: [0 万 ▾] ← A8 業務委託活用(v1 で正社員採用の代替・S3-S4 のみアンロック)
└ 元請支払サイト: [60 日 ▾] ← Section G-1 サイト負け検知用
└ 委託支払サイト: [60 日 ▾]
少額減価償却: [0 万 ▾] ← A7 少額減価償却特例(年 300 万枠)
公庫融資申込: [なし ▾] ← A9 公庫融資準備(債務償還年数 ≤ 10 年判定)
退職金プラン: [なし ▾] ← A10 退職金制度設計(S4 でアンロック)
インボイス登録日: [— ▾] ← Section G-5 インボイス特例終了崖検知用
v1.2 削除項目 (移行注記): 「採用計画 (正社員 1 名)」と「SaaS 開発 600 万」の入力フィールドは v1.0/1.1 案では存在したが、v1.2 で正社員採用は v2+ 延期 / SaaS 開発は A7 少額減価償却に置換されたため UI から削除。v2+ で正社員採用が再導入される際は MAS-048 連携の「採用計画」フィールドを復活する。
webapp_client/src/multiyear/YearTabs.tsx で実装。F67_PLAN_HORIZON_YEARS で年数可変(default 5・10 まで拡張可・内部実装は N 年汎用ループ)。各ドロップダウンは ai_agent_tips.md §7 準拠の離散単位選択。
Step 2: 計画 P/L・B/S・CF 引継ぎ(4 機能の (b)・Phase A)
各年の P/L → B/S → CF 計算を年次連結で実行:
// 400_domain/451_multiyear_planner.js (純粋関数 + IIFE 名前空間)
var MultiyearPlanner = (function () {
/**
* @param {Object[]} yearInputs Y1-Y5 の各年入力 (5 要素)
* @param {Object} initialBS 初期 B/S(資本金 + 現預金)
* @param {Object} [params] 03_sys_params override
* @returns {Object[]} 各年の {pl, bs, cf, runway, stages, suggestions}
*/
function simulateMultiyear(yearInputs, initialBS, params) {
// v1.1: _loadParamsFromSysParams_ ヘルパは廃止 (Gemini レビュー Major 1 反映)
// → 既存 Constants.getParam を直接呼び出す形に変更
// v1.2: 5 軸モデル + 10 アクション + Section G で 14 キーに拡張 (旧 v1.0/1.1 の hiring/funding/saas 系 8 キーを廃止)
var p = params || {
planHorizonYears: Constants.getParam('F67_PLAN_HORIZON_YEARS', 5),
// A9 公庫融資準備 (旧: 自己資本比率 ≥ 30% から RQ-036 反映で変更)
debtRedemptionYearsMax: Constants.getParam('F67_DEBT_REDEMPTION_YEARS_MAX', 10.0),
cashRunwayMonthsMin: Constants.getParam('F67_CASH_RUNWAY_MONTHS_MIN', 3.0),
// A1-A10 個別閾値
a1CfMonthsMin: Constants.getParam('F67_A1_CF_MONTHS_MIN', 6),
a4JobEvidenceMin: Constants.getParam('F67_A4_JOB_EVIDENCE_MIN', 3),
a5OpProfitMin: Constants.getParam('F67_A5_OP_PROFIT_MIN', 840000),
a6OpProfitMin: Constants.getParam('F67_A6_OP_PROFIT_MIN', 2400000),
a7CapexLimit: Constants.getParam('F67_A7_CAPEX_LIMIT', 3000000),
a8RunwayMin: Constants.getParam('F67_A8_RUNWAY_MIN', 3),
a8GrossMarginMin: Constants.getParam('F67_A8_GROSS_MARGIN_MIN', 8000000),
a10TenureMin: Constants.getParam('F67_A10_TENURE_MIN', 5),
// Section G + 最優先ポリシー
optimizationPolicyDefault: Constants.getParam('F67_OPTIMIZATION_POLICY_DEFAULT', 'A'),
burnoutOccupancyRedThreshold: Constants.getParam('F67_BURNOUT_OCCUPANCY_RED_THRESHOLD', 100),
invoiceTransitionEndDate: Constants.getParam('F67_INVOICE_TRANSITION_END_DATE', '2026-09-30'),
// 既存 flag
dividendIntegrationEnabled: Constants.getParam('F67_DIVIDEND_INTEGRATION_ENABLED', 'false') === 'true',
aiSuggestEnabled: Constants.getParam('F67_AI_SUGGEST_ENABLED', 'false') === 'true',
};
// v1.1: 計算エンジンの多重ロード回避 (Gemini レビュー Major 2 反映)
// → マスタ・パラメータを冒頭で一度キャッシュし各エンジンへ Context 注入
var ctx = {
socialInsuranceTierMap: SocialInsuranceTierRepository.findAsMap(),
perDiemPolicyMap: PerDiemPolicyRepository.findAsMap(),
taxBrackets: { income: Constants.INCOME_TAX_BRACKETS, corp: Constants.TAX_RATES },
};
var results = [];
var carryoverBS = initialBS;
for (var i = 0; i < yearInputs.length; i++) {
var year = i + 1;
var pl = _computePL_(yearInputs[i]);
var bs = _computeBS_(carryoverBS, pl, yearInputs[i]);
var cf = _computeCF_(carryoverBS, bs, pl, yearInputs[i]);
var runway = _computeRunway_(bs.cashBalance, pl);
// v1.2: 5 軸 (Liquidity / Tax & Social / Scale / Accumulation / Exit) × A1-A10 評価
var lifeStage = _evaluateLifeStage_(year, pl, bs, runway, p);
var stages = _evaluateStages_(year, pl, bs, cf, runway, lifeStage, p);
// v1.2: ガードレール 10 件 + Section G 5 機能
var guardrails = evaluateGuardrails(yearInputs[i], stages, p);
var sectionG = {
siteGap: detectFreelanceLawSiteGap(yearInputs[i]),
burnout: calcBurnoutMeter(yearInputs[i]),
invoiceCliff: detectInvoiceTransitionCliff({ ...yearInputs[i], year: year }),
// 退職控除 5 年ルール / セーフティ共済出口パズルは plan 全体スコープなのでループ外で評価
};
var suggestions = _generateSuggestions_(stages, yearInputs[i], p);
results.push({
year: year,
pl: pl,
bs: bs,
cf: cf,
runway: runway,
lifeStage: lifeStage,
stages: stages, // { liquidity, taxSocial, scale, accumulation, exit, actions: { A1..A10 } }
guardrails: guardrails,
sectionG: sectionG,
suggestions: suggestions,
});
carryoverBS = bs; // 翌年期首 B/S = 当年期末 B/S
}
// plan 全体スコープの Section G (G-2 / G-3) は results 構築後に追加評価
var planScopeG = {
retirementConflict: detectRetirementDeductionConflict(yearInputs),
safetyNetExit: evaluateSafetyNetExitPuzzle({ years: results, ...yearInputs[0] }),
};
return { years: results, planScopeG: planScopeG };
}
return { simulateMultiyear: simulateMultiyear /* 他 */ };
})();
B/S 引継ぎ項目(会計仕訳と整合)
| 項目 | 計算式 | 注記 |
|---|---|---|
| 利益剰余金(翌年期首) | 前年末利益剰余金 + 前年税引後利益 − 前年配当決議額 | 配当は MAS-066 連携時のみ |
| 現預金(翌年期首) | 前年末現預金 + 前年営業 CF + 前年投資 CF + 前年財務 CF | MAS-008 ランウェイ計算と整合 |
| 純資産(翌年期首) | 資本金 + 利益剰余金(自己株式控除前) | 資本金は固定(増資なしの前提・将来拡張で増資対応) |
| 共済積立金(資産) | 前年末積立 + 当年掛金 | MAS-141 連携時のみ計上・損金算入は P/L 側 |
webapp_client/src/multiyear/BSCarryover.tsx で各年の繰越状況をビジュアル表示(前年末 → 翌年期首の矢印 + 数値変動)。
MAS-058 必要年商の各年逆算
各年で RequiredRevenueSolver.solveRequiredRevenue() を呼出し、その年の希望役員報酬で必要年商 Healthy を逆算。実際の年商入力値が Healthy を下回ると「年商不足」警告を該当年タブに表示。
Step 3: 5 軸ステージ準備度ダッシュボード(4 機能の (c)・Phase B・v1.2 で 3 アクション → 5 軸 10 アクションに再編 / MAS-334 Gemini Deep Think 精緻化反映)
v1.2 改訂: 当初 v1.0/1.1 の「アクション準備度 3 種 (採用 / 融資 / SaaS 投資)」を、MAS-334 Gemini 3 Pro Preview Deep Think 精緻化により 5 軸モデル + 10 アクション + プログレッシブ・ディスクロージャー に再編。退職金が「投資」と「出口」で重複していた 6 軸モデルを 5 軸に整理し、1 人社長メンタルモデルに直結。
5 軸モデル (BRD §5.3 v2.3 / MAS-334 Section B 整合)
🏦 Liquidity (流動性・防衛) — 公庫融資・Runway 確保 [A9]
🛡️ Tax & Social (節税・社保) — 役員報酬・社宅・出張日当・親族役員化 [A1-A4]
⚔️ Scale (事業拡張) — 業務委託・少額減価償却特例 [A7-A8]
💰 Accumulation (蓄積) — 小規模企業共済・経営セーフティ共済 [A5-A6]
🚪 Exit (出口・承継) — 退職金制度 [A10]
v1 採用 10 アクション (Gemini 精緻化版・MAS-334 Section A 反映)
| ID | アクション | 軸 | 連携元 | 評価順序ハードロック |
|---|---|---|---|---|
| A1 | 役員報酬最適化 (定期同額給与) | 🛡️ Tax & Social | MAS-057 PersonalTaxEngine | 1 (社保等級境界が他軸の起点) |
| A2 | 役員社宅 (法定家賃徴収) | 🛡️ Tax & Social | MAS-057 / MAS-144 規程ジェネレーター | 2 (A1 標準報酬月額を直接引下) |
| A3 | 出張日当 (旅費規程準拠) | 🛡️ Tax & Social | MAS-057 / MAS-144 規程ジェネレーター | 3 (A1 標準報酬月額を直接引下) |
| A4 | 親族役員化 (税引前損金) | 🛡️ Tax & Social | MAS-067 単独 (MAS-066 配当とは独立) | 4 (配偶者・両親への報酬・即効性最強) |
| A5 | 小規模企業共済 (個人所得控除) | 💰 Accumulation | MAS-141 TaxSavingSimulator | 5 |
| A6 | 経営セーフティ共済 (法人損金) | 💰 Accumulation | MAS-141 TaxSavingSimulator | 6 (2024.10 改正出口パズル要対応) |
| A7 | 少額減価償却特例 (年 300 万枠) | ⚔️ Scale | MAS-013 InvestmentAnalyzer (拡張) | 7 (1 個 30 万円未満を即時償却) |
| A8 | 業務委託活用 | ⚔️ Scale | MAS-011 / MAS-008 + フリーランス新法サイト負け検知 (Step 6 MAS-236) | 8 |
| A9 | 公庫融資準備 | 🏦 Liquidity | MAS-013 / MAS-008 | 9 (閾値変更: 自己資本比率 → 債務償還年数 ≤ 10 年 + 現預金 ≥ 3 ヶ月) |
| A10 | 退職金制度設計 | 🚪 Exit | MAS-141 + MAS-144 規程ジェネレーター | 10 (5 年/19 年ルール対応・Step 6 MAS-237) |
+ 表示のみ A11: 賃上げ促進税制 (MAS-049)・1 人法人は構造的に対象外を 🔴 明示 ("適用できないことを知る" UX 価値)
v1 で除外したアクション
- インボイス・電帳法 (Day 1 法定要件・オンボーディングチェックリストへ移譲)
- SaaS 開発投資 (v1 スコープ重い・A7 少額減価償却に置換)
- 正社員採用 (S3-S4 のみ・v2+)
- 補助金マッチング (MAS-068・P3 降格)
- HD/M&A (MAS-069・P3)
- マイクロ法人 (MAS-070 棄却・実質所得者課税で否認)
- サイバーセキュリティ等
プログレッシブ・ディスクロージャー (S1-S4 で軸を順次アンロック・MAS-334 Section B)
| ライフステージ | 判定式 | アンロックされる軸 | 理由 |
|---|---|---|---|
| S1 Survival | Runway < 6 ヶ月 (financial 動的判定が機械的判定に優先) | 🏦 Liquidity のみ | 生存確保が最優先・他軸は雑音 |
| S2 Optimization | Runway ≥ 6 ヶ月 | + 🛡️ Tax & Social + 💰 Accumulation | 安定後に節税・蓄積を開始 |
| S3 Expansion | 利益剰余金 ≥ F67_STAGE_S3_RETAINED_EARNINGS_MIN (default 1,000 万円) | + ⚔️ Scale | 事業拡大・業務委託・設備投資の局面 |
| S4 Exit | directorTenure ≥ 5 ∧ retainedEarnings ≥ 1,000 万 | + 🚪 Exit | 退職金準備・出口戦略 |
Y1 Y2 Y3 Y4 Y5
─────────────────────────────────────────────────────────
ライフステージ S1 S2 S2 S3 S3
─────────────────────────────────────────────────────────
🏦 Liquidity (A9) 🔴 🟡 🟢 🟢 🟢
🛡️ Tax & Social — 🟡 🟢 🟢 🟢 ← S2 でアンロック
├─ A1 役員報酬最適化 — 🟡 🟢 🟢 🟢
├─ A2 役員社宅 — 🔴 🟡 🟢 🟢
├─ A3 出張日当 — 🔴 🟡 🟢 🟢
└─ A4 親族役員化 — 🔴 🔴 🟡 🟢
💰 Accumulation — 🔴 🟡 🟢 🟢 ← S2 でアンロック
├─ A5 小規模企業共済 — 🔴 🟡 🟢 🟢
└─ A6 セーフティ共済 — 🔴 🔴 🟡 🟢
⚔️ Scale — — — 🟡 🟢 ← S3 でアンロック
├─ A7 少額減価償却 — — — 🟢 🟢
└─ A8 業務委託 — — — 🟡 🟢
🚪 Exit (A10) — — — — 🔴 ← S4 でアンロック (Y5 で初表示)
A11 賃上げ税制 (表示のみ) 🔴 (常時) 1人法人は構造的に対象外
判定ロジック (アクションごと・閾値は F67_STAGE_THRESHOLDS_* で運用上書き可)
| アクション | 判定式 | 閾値パラメータ (default) | 連携 |
|---|---|---|---|
| A1 役員報酬最適化 | 月次 CF 連続黒字 ≥ 6 ヶ月 ∧ 期首改定 3 ヶ月以内 | F67_A1_CF_MONTHS_MIN (6) | MAS-057 |
| A2 役員社宅 | A1🟢 ∧ 賃貸契約あり | — | MAS-057 / MAS-144 |
| A3 出張日当 | A1🟢 ∧ 月次出張頻度 ≥ 1 回 | — | MAS-057 / MAS-144 |
| A4 親族役員化 | 親族の業務実態あり (job_evidence_score ≥ 3) | F67_A4_JOB_EVIDENCE_MIN (3) | MAS-067 単独 |
| A5 小規模企業共済 | 営業利益 (税引前) ≥ 84 万 | F67_A5_OP_PROFIT_MIN (840000) | MAS-141 |
| A6 経営セーフティ共済 | 営業利益 (税引前) ≥ 240 万 | F67_A6_OP_PROFIT_MIN (2400000) | MAS-141 |
| A7 少額減価償却特例 | 当期 CAPEX 計画あり ∧ < 300 万 | F67_A7_CAPEX_LIMIT (3000000) | MAS-013 拡張 |
| A8 業務委託活用 | ランウェイ ≥ 3 ヶ月 ∧ 粗利 ≥ 800 万 | F67_A8_RUNWAY_MIN (3) / F67_A8_GROSS_MARGIN_MIN (8000000) | MAS-011 / MAS-008 |
| A9 公庫融資準備 | 債務償還年数 ≤ 10 年 ∧ 現預金 ≥ 3 ヶ月 (旧: 自己資本比率 ≥ 30% から MAS-334 反映で修正) | F67_DEBT_REDEMPTION_YEARS_MAX (10.0) / F67_CASH_RUNWAY_MONTHS_MIN (3.0) | MAS-013 / MAS-008 |
| A10 退職金制度設計 | 役員勤続年数 ≥ 5 年 ∧ 利益剰余金 ≥ 1,000 万 | F67_A10_TENURE_MIN (5) / F67_A10_RETAINED_EARNINGS_MIN (10000000) | MAS-141 / MAS-144 |
A9 GAS 実装制約: 営業 CF ≤ 0 で debtRedemptionYears = totalDebt / operatingCF = Infinity / NaN 発生 → Math.min(val, 999) サニタイズ必須 (failure_patterns #29 V8→Java silent null 対策)。
function _calcDebtRedemptionYears_(totalDebt, operatingCF) {
if (operatingCF <= 0) return 999; // 営業 CF が赤字なら理論上返済不能 = 999 年でサニタイズ
var raw = totalDebt / operatingCF;
return Math.min(raw, 999); // Infinity 防衛
}
webapp_client/src/multiyear/StageDashboard.tsx で Y1-Y5 × (1 ステージ + 5 軸 + 10 アクション展開) の信号機マトリクス表示。プログレッシブ・ディスクロージャーで アンロック前の軸は — 表示 (経営者のメンタルモデル負荷を最小化)。各セルクリックで判定根拠 (充足/未充足の指標一覧 + 評価順序ハードロックの説明) を expand 表示。
達成予定年バッジ (MAS-334 Section E): array.findIndex(s => s === '🟢') で最初の 🟢 年を検出 → 「🟡 業務委託活用 🎯 計画通りなら Y3 (2028 年) に実行可能ライン到達見込」型の未来道標を表示。
循環参照解消: 最優先ポリシー A/B/C セレクター (MAS-334 Section D)
5 軸間の相互依存 (例: 役員報酬 ↔ 公庫融資枠 ↔ 退職金限度額) で発生する 3↔6↔9 の三すくみ は、DAG エッジカット (循環検知時に Y-1 値または固定値にフォールバック・1 パスで強制終了) + 「最優先ポリシー」3 択 UI セレクター で解消する。
| ポリシー | 設計意図 | 動作 | 想定ユーザー |
|---|---|---|---|
| A. 手取り・節税優先 | 役員報酬と共済を最大化・利益圧縮で融資枠縮小 | A1 / A5 / A6 を最大化・A9 公庫融資は副次評価 | 齋藤 Baseline default (大型設備投資なし・個人キャッシュ最大化が正義) |
| B. 信用・融資優先 | 目標融資枠から逆算・役員報酬上限キャップ | A9 公庫融資を最優先・A1 役員報酬を逆算 | 設備投資・店舗展開等で借入必須の経営者 |
| C. 出口・退職金優先 | Y4-Y5 退職金限度額確保・手前で役員報酬段階的引上げ | A10 退職金を最大化・A1 役員報酬を Y3 以降逓増 | M&A or 事業承継準備の S4 期経営者 |
UI: MAS-067 cockpit ヘッダに「🎯 最適化ポリシー: [A 手取り優先 ▼]」ドロップダウン (ポリシー切替 = 全年再計算)。F67_OPTIMIZATION_POLICY_DEFAULT = A で default 確定。
ライフステージ S1-S4 自動判定(BRD §5.3 v2.3 整合・財務指標動的判定 + 年数機械的判定の併用)
| Stage | 自動判定式(v1) |
|---|---|
| S1 Survival | runway < 6 (財務指標が優先) ∨ year ≤ 2 ∧ 利益剰余金 < 200 万 |
| S2 Optimization | runway ≥ 6 ∧ 営業 CF 連続黒字 ≥ 12 ヶ月 |
| S3 Expansion | 利益剰余金 ≥ 1,000 万 ∨ (5 < year ≤ 10 ∧ 役員月額 ≥ 65 万) |
| S4 Exit | directorTenure ≥ 5 ∧ 利益剰余金 ≥ 1,000 万 (年数 + 蓄積の併用) |
Step 4: サジェストエンジン(4 機能の (d)・Phase C/D)
「Y3 で公庫融資準備 (A9) 完了するには Y2 までに営業 CF +X 万」型の自動アドバイス。v1.2 改訂で v1.0/1.1 の 3 アクション (採用 / 融資 / SaaS 投資) → 10 アクション (A1-A10) ルールベースに拡張。
function _generateSuggestions_(stages, yearInput, p) {
var suggestions = [];
// A9 公庫融資準備 (旧: 採用準備度 → v1.2 で正社員採用は v2+ 延期)
if (stages.actions.A9 === 'red') {
var debtRedemptionDeficit = stages.actions.A9Deficit.debtRedemptionYearsExcess; // 10 年閾値超過
var cashRunwayDeficit = stages.actions.A9Deficit.cashRunwayMonthsShortage; // 3 ヶ月閾値不足
if (debtRedemptionDeficit > 0) {
suggestions.push({
type: 'op_cf_increase',
target: 'A9 公庫融資準備 🟢',
action: '前年までに営業 CF +' + Math.ceil(debtRedemptionDeficit * yearInput.totalDebt / 100) + ' 万 (債務償還年数を 10 年以下に)',
severity: 'high',
});
}
if (cashRunwayDeficit > 0) {
suggestions.push({
type: 'cash_reserve_buildup',
target: 'A9 公庫融資準備 🟢',
action: '前年までに現預金 +' + Math.ceil(cashRunwayDeficit * (yearInput.monthlyFixedCost || 0) / 10000) + ' 万 (現預金 ≥ 3 ヶ月分確保)',
severity: 'high',
});
}
}
// A8 業務委託活用 (v1 で正社員採用判定の代替・S3-S4 でアンロック)
if (stages.actions.A8 === 'red') {
var grossMarginShortage = p.a8GrossMarginMin - (yearInput.grossMargin || 0);
if (grossMarginShortage > 0) {
suggestions.push({
type: 'gross_margin_increase',
target: 'A8 業務委託活用 🟢',
action: '前年までに粗利 +' + Math.ceil(grossMarginShortage / 10000) + ' 万 (800 万閾値到達)',
severity: 'medium',
});
}
suggestions.push({
type: 'outsource_postpone',
target: 'A8 業務委託活用 🟢',
action: '業務委託開始を翌年(Y' + (stages.year + 1) + ')に後ろ倒し',
severity: 'low',
});
}
// A1 役員報酬最適化 / A5 / A6 共済 / A7 少額減価償却 / A10 退職金 も同様パターンで生成
// (10 アクション分のルール定義は _RULES_ 定数に集約)
return suggestions;
}
Phase C: ルールベース実装
上記のような決定論的ルールで A1-A10 各アクションごとに 1-3 件のサジェストを生成(最大 10-30 件 / 年)。ルール定義は 400_domain/451_multiyear_planner.js 内の _RULES_ 定数で集中管理。F67_AI_SUGGEST_ENABLED = false でルールベースのみ動作。プログレッシブ・ディスクロージャー (S1=Liquidity のみ → S4=+Exit) で アンロック前の軸はサジェスト生成スキップ (経営者メンタルモデル負荷を最小化)。
Phase D: AI 提案統合 (✅ 完了 PR #448・2026-04-30)
F67_AI_SUGGEST_ENABLED = true で Vertex Gemini 連携を有効化。300_ui/302_spa_bridge.js に generateF67Suggest 関数追加(MAS-057 Phase 3 の generateF57Insight パターン流用)。Gemini Pro モデル + Deep Think で「自然言語でユーザーに最適な経路を提案」。buildSuggestPrompt_(currentPlan, stageEvaluations) で構造化プロンプト生成(純粋関数として MAS-057 spec の buildInsightPrompt_ と並列対称)。
実装済 sys_params キー 5 件 (800_ops/820_migration_f67_phase_d_seed.js で冪等投入): (a) F67_AI_SUGGEST_ENABLED (default false) / (b) F67_AI_SUGGEST_MODEL (default GEMINI_PRO・GEMINI_PRO/GEMINI_FLASH/CLAUDE_SONNET 選択肢) / (c) F67_GEMINI_MODEL_OVERRIDE_PRO (default gemini-2.5-pro) / (d) F67_GEMINI_MODEL_OVERRIDE_FLASH (default gemini-2.5-flash) / (e) F67_AI_TEMPERATURE (default 0.3・経営アドバイスは具体数値含むため低温で一貫性確保)。
SuggestPanel UI: AI モデル selector (GEMINI_PRO/GEMINI_FLASH/CLAUDE_SONNET/CUSTOM) + Custom Model ID 入力 (default gemini-3.1-pro-preview — Custom 選択時のフォールバック値) + 🧠 Deep Think + temperature 入力 + 「💡 AI に統合提案を依頼」ボタン。F67_AI_SUGGEST_ENABLED=false 時は無効化メッセージ + 有効化方法の案内を表示・ルールベースサジェスト (Phase C-1) は AI OFF でも引き続き動作。
Vertex AI quota 状況 (2026-04-30 時点): Gemini Pro/Flash は dev で動作確認済。Anthropic Claude (Vertex 経由) は dev quota escalation 申請中のため初期 default は GEMINI_PRO。
LLM ハルシネーション対策(MAS-058 注意事項 #12 / MAS-333 反映): 数値はサジェストオブジェクトから直接取得・LLM テキスト応答中で復唱させない。Air Canada v. Moffatt 型責任回避を継承。
Step 5: 行為計算否認ガードレール 10 件 UI 表示(v1.2 追加・MAS-334 Section C・Phase B)
各アクションの実行時に税務否認リスクが発生し得る。spec § 注意事項に文言ハードコードし、webapp_client/src/multiyear/GuardrailPanel.tsx(新規・Phase B で追加)で常時表示・🟢 到達時表示・変更時警告・超過時警告のいずれかで提示する。
| # | アクション | リスク | UI 文言 (ハードコード) | 表示優先度 |
|---|---|---|---|---|
| 1 | A1 役員報酬最適化 | 定期同額給与逸脱 (法人税法 34 条) | 「期首から 3 ヶ月以内の改定が必須です。期中の変動は『全額損金不算入』となる重大なリスクがあります。」 | 変更時警告 |
| 2 | A2 役員社宅 | 法定家賃徴収不足・現物給与課税 | 「国税庁算式の『法定家賃』を毎月徴収しない場合、会社負担分が全額給与として課税されます。」 | 🟢到達時 |
| 3 | A3 出張日当 | カラ出張・社会通念上過大 | 「同業他社水準を逸脱する過大な日当は給与認定されます。旅費規程と都度の出張報告書が必須です。」 | 超過時警告 |
| 4 | A4 親族役員化 | 名板貸し・職務実態なし | 「勤務実態がない親族への報酬は過大役員給与として否認されます。議事録や業務記録を必ず残してください。」 | 常時表示 |
| 5 | A5 小規模企業共済 | 加入要件誤認・短期前払特例 | 「掛金は法人の経費ではなく『個人の所得控除』です。年払いの特例適用には要件があります。」 | 🟢到達時 |
| 6 | A6 経営セーフティ共済 | 2024.10 法改正 短期解約制限 | 「⚠️ 法改正により、解約後 2 年間は再加入しても掛金が損金算入されません。短期解約スキームは通用しません。」 | 常時表示 |
| 7 | A7 少額減価償却特例 | 30 万円未満・年間 300 万円限度 | 「1 個 30 万円未満の資産の即時償却は年間 300 万までです。超過分は通常の減価償却計算が必要です。」 | 超過時警告 |
| 8 | A8 業務委託活用 | 2024.11 施行 フリーランス新法 | 「⚠️ 指揮命令下にあると雇用認定されます。新法の書面交付義務と、原則 60 日以内の支払義務を遵守してください。」 | 常時表示 |
| 9 | A9 公庫融資準備 | 資金使途違反・一括返済リスク | 「運転資金として借り入れたものを、個人の生活費や投資信託 (NISA 等) へ流用することは規約違反です。」 | 🟢到達時 |
| 10 | A10 退職金制度設計 | 功績倍率過大・分掌変更否認 | 「功績倍率 (最終報酬 × 年数 × 通常 3.0) の逸脱や、代表権を持ったままの退職金支給は否認リスク大です。」 | 数値超過時 |
実装: 400_domain/451_multiyear_planner.js 内に GUARDRAILS 定数を定義し、evaluateGuardrails(plan) 純粋関数で各アクションのトリガー条件 (常時 / 🟢到達時 / 超過時 / 変更時 / 数値超過時) を判定 → DTO に含めて runMultiyearSimulation 戻り値で返却。GuardrailPanel.tsx は DTO の guardrails 配列を表示するだけのプレゼンテーション層。
var GUARDRAILS = [
{ id: 1, action: 'A1', trigger: 'on_change', message: '期首から 3 ヶ月以内の改定が必須です...' },
{ id: 2, action: 'A2', trigger: 'on_green', message: '国税庁算式の『法定家賃』を毎月徴収しない場合...' },
// ... 計 10 件
];
Step 6: Deep Think 独自必須機能 5 件(v1.2 追加・MAS-334 Section G・Phase B/C)
Gemini 3 Pro Preview Deep Think で発見された Claude 合成見落とし 5 件。海外 FP&A SaaS でも空白の差別化機能。
MAS-236. フリーランス新法 60 日支払義務 vs 元請 90 日サイトのキャッシュ枯渇 (Phase B)
A8 業務委託活用で外注費先行・受領遅延でワーキングキャピタルギャップ → 🔴 アラートロジック必須。
function detectFreelanceLawSiteGap(yearInput) {
if (yearInput.outsourcePaymentDays > 60) {
return { level: 'red', reason: 'フリーランス新法違反: 60 日超過 (法令違反 → 50 万以下罰金 + 公表)' };
}
if (yearInput.clientPaymentDays - yearInput.outsourcePaymentDays > 30) {
return {
level: 'yellow',
reason: 'ワーキングキャピタルギャップ: 元請 ' + yearInput.clientPaymentDays + '日 vs 外注 ' + yearInput.outsourcePaymentDays + '日',
cashGapMonths: (yearInput.clientPaymentDays - yearInput.outsourcePaymentDays) / 30,
};
}
return { level: 'green' };
}
UI: 業務委託 (A8) のドロップダウンに「元請支払サイト (日)」「委託先支払サイト (日)」入力 + サイト負け検知結果を信号機表示。
MAS-237. 退職所得控除「枠の食い合い」5 年/19 年ルール (Phase C)
共済 + 役員退職金を近接時期に受け取ると控除枠相殺 → タイムライン上で「受取時期 5 年ズラす」ガードレール必須。
function detectRetirementDeductionConflict(plan) {
var smallEnterpriseExitYear = plan.smallEnterpriseExitYear; // 小規模企業共済受取年
var directorRetirementYear = plan.directorRetirementYear; // 役員退職金受取年
if (!smallEnterpriseExitYear || !directorRetirementYear) return { level: 'green' };
var diff = Math.abs(directorRetirementYear - smallEnterpriseExitYear);
if (diff < 5) {
return {
level: 'yellow',
reason: '退職所得控除「5 年ルール」違反リスク: ' + diff + '年差 (5 年以上空ける必要あり・控除枠重複)',
suggestion: '一方を ' + (5 - diff) + '年後ろ倒しに変更',
};
}
return { level: 'green' };
}
UI: A10 退職金 + A5/A6 共済の各受取年をユーザーがタイムライン上に配置 → 5 年ルール違反時に🟡 + ズラし提案表示。
MAS-238. 2024.10 法改正セーフティ共済「出口パズル」(Phase C)
短期解約ループ死滅 → 「いつ解約・どの年に益金 vs 退職金/赤字とぶつけるか」マッピング設計が MAS-067 コアバリュー。
UI: Y1-Y5 タイムライン上に「セーフティ共済解約フラグ」をユーザーが立てる → 解約年の益金計上額 (積立額全額) を退職金支給年や赤字年と相殺できるか自動判定 → 🟢 (相殺成功・益金 ≤ 損金) / 🟡 (一部相殺) / 🔴 (相殺不能・課税発生) で評価。
function evaluateSafetyNetExitPuzzle(plan) {
var exitYear = plan.safetyNetExitYear; // 解約年
if (!exitYear) return { level: 'green', skipped: true };
var accumulatedAmount = plan.safetyNetAccumulated; // 積立済額 (益金計上)
var offsetYearLoss = plan.years[exitYear].operatingLoss || 0;
var offsetYearRetirement = plan.years[exitYear].retirementPayment || 0;
var totalOffset = offsetYearLoss + offsetYearRetirement;
if (totalOffset >= accumulatedAmount) return { level: 'green', message: '相殺成功: 益金 ' + accumulatedAmount + ' ≤ 損金 ' + totalOffset };
if (totalOffset >= accumulatedAmount * 0.5) return { level: 'yellow', message: '一部相殺: 益金の ' + Math.round((totalOffset / accumulatedAmount) * 100) + '% を相殺' };
return { level: 'red', message: '相殺不能: 課税発生 ' + (accumulatedAmount - totalOffset) + ' 円・解約年見直し推奨' };
}
MAS-239. 社長稼働限界 (Burnout) メーター (Phase B)
ナレッジワーカー売上増 ∝ 労働時間 → 売上 2 倍計画で稼働 200% の物理破綻を 稼働率 (%) で計算・100% 超で🔴 + 業務委託強制サジェスト。
function calcBurnoutMeter(yearInput) {
var monthlyHourlyRate = yearInput.monthlyHourlyRate; // 例: 10000 円/h
var monthlyTargetRevenue = yearInput.monthlyRevenue;
var monthlyMaxHours = 160; // 月 160 時間 = 100% 稼働
var requiredHours = monthlyTargetRevenue / monthlyHourlyRate;
var occupancyRate = (requiredHours / monthlyMaxHours) * 100;
if (occupancyRate > 100) {
return {
level: 'red',
occupancy: occupancyRate,
message: 'Burnout 警告: ' + occupancyRate.toFixed(1) + '% 稼働 → 業務委託 (A8) を強制サジェスト',
suggestedOutsourceHours: requiredHours - monthlyMaxHours,
};
}
if (occupancyRate > 80) return { level: 'yellow', occupancy: occupancyRate, message: '稼働率高: ' + occupancyRate.toFixed(1) + '%・余力低下' };
return { level: 'green', occupancy: occupancyRate };
}
UI: webapp_client/src/multiyear/BurnoutMeter.tsx(新規・Phase B)で各年の稼働率を progress bar 表示・100% 超で 🔴 + A8 サジェストポップアップ。
MAS-240. インボイス 2 割特例 2026/9 終了の崖 (Phase B)
2023/10 登録法人は 2026/9 含む課税期間で特例終了・消費税キャッシュアウト跳ね上がり → 5 年計画 Y2-Y3 で織込み必須。
function detectInvoiceTransitionCliff(plan) {
var registrationDate = plan.invoiceRegistrationDate;
var fiscalYearEndMonth = plan.fiscalYearEndMonth;
if (!registrationDate || registrationDate >= new Date('2023-10-01')) return { level: 'green' };
var transitionEndDate = new Date('2026-09-30');
var firstFullCostFiscalYear = _calcFirstFullCostFiscalYear_(registrationDate, fiscalYearEndMonth, transitionEndDate);
return {
level: 'yellow',
cliffYear: firstFullCostFiscalYear,
message: 'Y' + firstFullCostFiscalYear + ' (' + (2026 + firstFullCostFiscalYear) + ' 年) からインボイス 2 割特例終了・消費税キャッシュアウト本則計上',
expectedCashOutDelta: plan.years[firstFullCostFiscalYear].consumptionTax * 0.8,
};
}
UI: A8 業務委託活用ドロップダウンに「インボイス登録日」入力 + 2 割特例終了崖年を 5 カ年タイムライン上に🟡マーカー表示。
影響範囲
| 対象 | 種別 | 変更内容 | リスク |
|---|---|---|---|
400_domain/451_multiyear_planner.js | 追加 | MultiyearPlanner 名前空間(simulateMultiyear / 5 軸 evaluateStages / evaluateGuardrails / Section G 5 関数 / 内部ヘルパ群・約 600 行) | MAS-008/MAS-011/MAS-013/MAS-058 を呼出のみ・既存ロジックへの影響なし(MAS-048 は v1 未使用・v2+ 再利用予定) |
webapp_client/multiyear_cockpit.html | 追加 | MAS-067 独立 cockpit エントリ HTML(?view=multiyear_spa) | MAS-057 cockpit と並列稼働 |
webapp_client/src/MultiyearApp.tsx | 追加 | MAS-067 React ルートコンポーネント | MAS-057 CockpitApp と並列 |
webapp_client/src/multiyear/YearTabs.tsx | 追加 | year-tab 入力 UI(Phase A) | v1.2 で 7 React コンポーネント 中 1 |
webapp_client/src/multiyear/BSCarryover.tsx | 追加 | B/S 引継ぎビジュアル(Phase A) | 同上 |
webapp_client/src/multiyear/StageDashboard.tsx | 追加 | v1.2: 5 × (1 ステージ + 5 軸 + 10 アクション展開) 信号機マトリクス + プログレッシブ・ディスクロージャー + 達成予定年バッジ + 最優先ポリシー A/B/C セレクター(Phase B) | 同上 |
webapp_client/src/multiyear/GuardrailPanel.tsx | 追加 (v1.2 新設) | 行為計算否認ガードレール 10 件 UI 表示(常時 / 🟢到達時 / 超過時 / 変更時 / 数値超過時)(Phase B) | MAS-334 Section C 反映 |
webapp_client/src/multiyear/BurnoutMeter.tsx | 追加 (v1.2 新設) | 社長稼働限界メーター・各年の稼働率を progress bar 表示・100% 超で 🔴 + A8 サジェスト(Phase B) | MAS-334 Section MAS-239 反映 |
webapp_client/src/multiyear/SuggestPanel.tsx | 追加 | サジェスト表示 + 退職控除 5 年ズラし + セーフティ共済出口パズル(Phase C/D) | 同上 |
webapp_client/src/multiyear/calc.ts | 追加 | クライアント側計算ロジック(MAS-057 cockpit/calc.ts と並列対称) | 同上 |
webapp_client/scripts/sync-engines.mjs | 変更 | sync 対象に 451 追加(既存 442-445 と並列) | 既存 sync に影響なし |
webapp_client/vite.config.ts | 変更 | multiyear_spa entry 追加 | MAS-057 cockpit ビルドに影響なし |
300_ui/302_spa_bridge.js | 変更 | multiyear_spa view 追加 + bootstrap + runMultiyearSimulation API + generateF67Suggest AI 呼出(Phase D) | MAS-057 cockpit ロジックに影響なし |
templates/financial_cockpit.html | 変更 | ヘッダに「📅 マルチイヤー計画」リンク追加 | MAS-057 既存 UI への影響最小 |
03_sys_params | 変更 | F67_ 14 キー追加* (v1.2 拡張: F67_DEBT_REDEMPTION_YEARS_MAX / F67_CASH_RUNWAY_MONTHS_MIN / F67_A1_CF_MONTHS_MIN / F67_A4_JOB_EVIDENCE_MIN / F67_A5_OP_PROFIT_MIN / F67_A6_OP_PROFIT_MIN / F67_A7_CAPEX_LIMIT / F67_A8_RUNWAY_MIN / F67_A8_GROSS_MARGIN_MIN / F67_A10_TENURE_MIN / F67_OPTIMIZATION_POLICY_DEFAULT / F67_BURNOUT_OCCUPANCY_RED_THRESHOLD / F67_INVOICE_TRANSITION_END_DATE / F67_PLAN_HORIZON_YEARS) + 既存 F67_DIVIDEND_INTEGRATION_ENABLED / F67_AI_SUGGEST_ENABLED | default 動作・シード未実行でも動作 |
8XX_migration_f67_multiyear_seed.js | 追加(任意) | F67_* キーシーダー(MAS-232 / MAS-057 Phase 3 同パターン) | optional |
900_test/901_test_runner.js | 変更 | F67-01〜F67-20 単体テスト追加(B/S 引継ぎ + ステージ判定 + サジェスト) | 既存テストへの影響なし |
| MAS-057 Phase 3 cockpit | 変更(最小) | ヘッダリンク 1 行追加のみ | 既存ロジック変更なし |
| MAS-058 RequiredRevenueSolver | 変更なし | 各年で純粋呼出するのみ | 既存ロジック保護 |
| appsscript.json | 変更なし | OAuth スコープ追加不要 | failure_patterns #26 遵守 |
注意事項
MAS-059 との完全分離: MAS-067 = 人間駆動(手動入力 + 静的・俯瞰)/ MAS-059 = AI 自動オーケストレーション(LangGraph)。両者の UI / バックエンド・実装パイプラインは完全独立。3 cockpit(MAS-057 単年 / MAS-067 マルチイヤー / MAS-059 AI 自動)は BRD §6.1 v2.2 で並列提供方針確定。
B/S 引継ぎの会計的正確性: 利益剰余金繰越 + 配当決議減少 + 共済積立資産化 を会計仕訳と整合させる。実装時に顧問税理士確認必須。特に配当決議のタイミング(株主総会決議日 vs 配当支払日)は B/S 影響期間と整合させる。
ステージ判定閾値の妥当性: v1.2 の A1-A10 個別閾値 (default: A1 月次 CF 連続黒字 ≥ 6 ヶ月 / A5 営業利益 ≥ 84 万 / A6 営業利益 ≥ 240 万 / A7 CAPEX < 300 万 / A8 ランウェイ ≥ 3 ヶ月 + 粗利 ≥ 800 万 / A9 債務償還年数 ≤ 10 年 + 現預金 ≥ 3 ヶ月 / A10 役員勤続 ≥ 5 年 + 利益剰余金 ≥ 1,000 万) は税理士 / 銀行員 / VC との突合で実装時に確定(人間検討事項 #2)。
F67_A1_CF_MONTHS_MIN〜F67_A10_TENURE_MIN等の個別キーで運用時上書き可能。計画期間の汎用化:
F67_PLAN_HORIZON_YEARSで 5-10 年可変・内部実装は N 年汎用ループ(30 年退職金計画等の将来拡張余地)。UI の year-tab も動的生成(Array.from({length: N}, ...)パターン)。MAS-066 配当ミックスの任意連携:
F67_DIVIDEND_INTEGRATION_ENABLEDflag で切替・MAS-066 仕様書完成後の Phase B 以降で本格統合。Phase A では配当ドロップダウン非表示(給与系のみで動作)。failure_patterns #18-#20 遵守(命名造語禁止): 関数名(
simulateMultiyear/_evaluateStages_/_generateSuggestions_)は既存命名規則と整合(動詞 + 目的語)。「multiyear」「stage」は業界標準英語で新語ではない。Read で既存ファイルに同名関数なきこと裏取り。failure_patterns #25 遵守(並列実装対称性): MAS-057 / MAS-066 と純粋関数 + Constants.getParam パターンで対称。3 cockpit(MAS-057/MAS-066/MAS-067)は API 設計を統一(
bootstrap/runXSimulation/generateXInsightの 3 関数構成)。failure_patterns #26 遵守(oauthScopes):
appsscript.jsonは変更なし。failure_patterns #29 遵守(V8→Java Infinity null・v1.1 で対策方式を境界処理に修正・Gemini レビュー Critical 2 反映): 5 カ年配列の各要素で多重発生リスクあり。❌ NG(v1.0 案): 「
Constants.INCOME_TAX_BRACKETS.brackets[6].upTo = Infinity等の定数自体をNumber.MAX_SAFE_INTEGERに書換える」→ 法人税計算等の他モジュールの挙動を破壊するため不可。✅ 採用方式(v1.1): 「runMultiyearSimulationがクライアントへレスポンスを返す直前に、DTO 内のInfinityをNumber.MAX_SAFE_INTEGERに置換する境界処理」を300_ui/302_spa_bridge.jsの_scrubInfinityForJSON_(dto)純粋関数で実装。MAS-057 Phase 3 の同パターンと整合。MultiyearPlannerの戻り値も全要素をNumber.isFinite()でチェックし、境界処理でクライアント送信時のみ scrub。failure_patterns #31 適用: 本案件起票時に Phase 1-A-pre(番号衝突チェック)を適用済(PR #384・MAS-067 が次空きであることを
git fetch+ grep で事前確認)。dev_spec_prompt_template v1.10 の初回適用事例。税理士助言代替不可 Disclaimer: MAS-058 / MAS-061 / MAS-066 と同パターンで全画面常時表示。「本提案は税理士・社労士・銀行員・VC の個別助言に代わるものではありません」を画面下部固定。
計画 vs 実績の乖離: 本案件は計画作成支援に専念し、実績マートとの比較タブは v2 候補(人間検討事項 #11)。Phase A-D では計画機能のみ提供。
AI サジェストの届出期限警告(Phase D): 事前確定届出給与の届出期限(株主総会決議日から 1 ヶ月以内 or 事業年度開始日から 4 ヶ月以内)を AI 提案時に併記。BRD §6 / MAS-057 注意事項 #15 と整合。
マトリクスの視認性: v1.2 で 5 年 × (1 ライフステージ + 5 軸 + 10 アクション展開) = 約 80 セル に拡大。プログレッシブ・ディスクロージャーで未アンロック軸は
—表示するため実効セル数は S1 で 5 × 2 ≈ 10、S4 で 5 × 17 ≈ 85 と段階的増加。モバイル(< 768px)では年次方向に横スクロール、軸 / アクション方向は固定列でスクロール追従。各軸は折り畳み可能(default 閉・🟡 🔴 がある軸のみ開)で初期視認性を確保。
エッジケース
実装時に必ず以下 18 件を単体テストでカバーする。
| # | 条件 | 検知方法 | 期待される挙動 | ログ出力 |
|---|---|---|---|---|
| 1 | Y1 期首 B/S 未入力(資本金のみ) | initialBS に資本金フィールドのみ | 資本金 = 現預金 + 純資産で初期化・利益剰余金ゼロ | INFO |
| 2 | ある年の純利益がマイナス | pl.netProfit < 0 | 利益剰余金から控除(マイナス可・債務超過警告) | WARN |
| 3 | 5 年連続赤字(債務超過進行) | 各年 bs.netAssets < 0 | 全年で 🔴 表示 + 「事業継続困難・計画見直し必須」アラート | ERROR |
| 4 | 配当決議額 > 分配可能額 | MAS-066 連携時のバリデーション(Phase B 以降) | 該当年で 🔴 + 「会社法 461 条違反」警告 | ERROR |
| 5 | MAS-058 Healthy 解なしで必要年商不明 | solveRequiredRevenue 戻り値が null | 「Y3 達成困難」赤信号 + サジェスト「Y4 に後ろ倒し」 | WARN |
| 6 | 業務委託 (A8) 計画なしの年 | yearInput.outsourceCost === 0 || null | A8 業務委託活用判定スキップ(🟢/🟡/🔴 ではなく「—」表示) | なし |
| 7 | MAS-066 配当ミックス無効化(default) | F67_DIVIDEND_INTEGRATION_ENABLED = false | 配当ドロップダウン非表示・各年計算は給与系のみ | なし |
| 8 | F67_PLAN_HORIZON_YEARS = 10 設定 | year-tab が Y1-Y10 に拡張 | 初期描画パフォーマンス確認(< 200ms 目標) | なし |
| 9 | サジェストエンジンが解なし返却 | _generateSuggestions_ 戻り値が空配列 | 「達成困難・計画見直し推奨」表示 | INFO |
| 10 | 03_sys_params の F67_* キーが範囲外 | 起動時バリデーション | default で上書き + WARN ログ | WARN |
| 11 | 5 カ年配列の途中要素に Infinity / NaN | 境界処理 _scrubInfinityForJSON_(dto)(v1.1 修正・定数 mutate 禁止) | クライアント送信直前に Number.MAX_SAFE_INTEGER に置換・サーバー側ロジックは Infinity のまま動作 | WARN |
| 12 | 役員月額 < 月 8 万円(厚年資格喪失境界) | MAS-066 注意事項と整合 | 警告 + 国民健康保険シミュレーション併記 | WARN |
| 13 | 1 期目(Y1)で配当決議 | year === 1 && yearInput.dividend > 0 | エラー + 「1 期目決算前は配当不可」案内 | ERROR |
| 14 | A8 業務委託活用バッファ不足 | bs.cashBalance / monthlyFixedCost < p.a8RunwayMin ∨ pl.grossMargin < p.a8GrossMarginMin | 🔴 + 「ランウェイ X ヶ月不足 / 粗利 Y 万不足」サジェスト | INFO |
| 15 | A9 公庫融資準備で営業 CF ≤ 0(債務償還年数ゼロ除算) | _calcDebtRedemptionYears_(totalDebt, operatingCF) で operatingCF ≤ 0 | 999 でサニタイズ + 🔴 + 「営業 CF 赤字につき融資不可」警告 (failure_patterns #29 V8→Java silent null 対策) | ERROR |
| 16 | A7 少額減価償却で CAPEX 入力なし | yearInput.capex === 0 | 判定スキップ(「—」表示) | なし |
| 17 | LLM サジェスト(Phase D)タイムアウト | Utils.callGeminiForReasoningOnVertex_(既存・v1.1 で造語廃止・Gemini レビュー Critical 1 反映)タイムアウト 30 秒 | ルールベースサジェストにフォールバック + 「AI 提案生成失敗」表示 | ERROR |
| 18 | 同時編集 race condition(複数タブ) | LockService.getDocumentLock().tryLock(1000) 失敗 | 後勝ちせず警告ダイアログ | WARN |
実データ検証
1. 齋藤 Baseline + 5 カ年計画の期待値
実装完了後に以下を 901_test_runner.js で自動検証し、±10% 以内で一致を合格基準とする(マルチイヤーは複利的に誤差累積するため MAS-058/MAS-066 より広め):
v1.2 改訂: 旧 v1.0/1.1 の「採用 / 融資 / SaaS 準備度」3 列ヘッダを 5 軸モデル + 代表アクションに置換。Y3 の「正社員採用 +580 万」は v2+ 延期のため A8 業務委託活用 +200 万に置換、Y5 の「SaaS 投資 600 万」は A7 少額減価償却 +280 万に置換。
| 年 | 役員報酬 (A1) | A8 業務委託 | A7 少額減価償却 | 期末純資産 | 🏦 Liquidity (A9) | 🛡️ Tax & Social | 💰 Accumulation | ⚔️ Scale | ライフステージ |
|---|---|---|---|---|---|---|---|---|---|
| Y1 | 600 万 | — | — | 約 350 万 | 🔴 | — | — | — | S1 |
| Y2 | 600 万 | — | — | 約 700 万 | 🟡 | 🟡 | 🔴 | — | S2 |
| Y3 | 600 万 | — | — | 約 900 万 | 🟢 | 🟢 | 🟡 | — | S2 |
| Y4 | 700 万 | +200 万 | +50 万 | 約 1,100 万 | 🟢 | 🟢 | 🟢 | 🟡 | S3 |
| Y5 | 800 万 | (継続) | +280 万 | 約 1,300 万 | 🟢 | 🟢 | 🟢 | 🟢 | S3 |
プログレッシブ・ディスクロージャー: S1 (Y1) では Liquidity のみ表示・他軸は —。S2 (Y2-Y3) で Tax & Social + Accumulation アンロック。S3 (Y4-Y5) で Scale アンロック。Exit (A10) は S4 で初めてアンロックされるため Y5 までは未表示。
2. MAS-058 / MAS-066 / MAS-057 との連動整合
- 各年の Healthy 年商を MAS-058 で逆算 → MAS-067 入力年商と比較し「不足/充足」判定
- MAS-066 配当ミックス有効化時、各年の配当 → 利益剰余金減少 → 翌年期首 B/S への影響を検証
- MAS-057 Phase 3 の Step 6(3 区分テーブル UI)を MAS-067 各年タブ内に再利用(個人/法人/合計の縦展開)
3. ライフステージ S1-S4 自動判定の境界検証
| 境界 | 入力 | 期待 Stage |
|---|---|---|
| Y2 末・利益剰余金 199 万 | year=2, retainedEarnings=1,990,000 | S1 |
| Y3 期首・利益剰余金 200 万・営業 CF 連続黒字 11 ヶ月 | year=3, retainedEarnings=2,000,000, opCfMonths=11 | S1(CF 12 ヶ月未達) |
| Y3 期首・営業 CF 連続黒字 12 ヶ月 | year=3, retainedEarnings=2,000,000, opCfMonths=12 | S2 |
| Y6 期首・役員月額 70 万 | year=6, monthlySalary=700,000 | S3 |
| Y11 期首 | year=11 | S4 |
4. ステージ準備度信号機の境界検証 (v1.2: 5 軸 10 アクション)
A1 役員報酬最適化 🟢 達成境界:
- 月次 CF 連続黒字 5.99 ヶ月 → 🟡 / 6.0 ヶ月 → 🟢 (
F67_A1_CF_MONTHS_MIN = 6)
A8 業務委託活用 🟢 達成境界:
- ランウェイ 2.99 ヶ月 → 🔴 / 3.0 ヶ月 → 🟡 (
F67_A8_RUNWAY_MIN = 3) - 粗利 7,999,999 円 → 🟡 / 8,000,000 円 → 🟢 (
F67_A8_GROSS_MARGIN_MIN = 8000000)
A9 公庫融資準備 🟢 達成境界 (v1.2 で旧自己資本比率閾値から変更):
- 債務償還年数 10.01 年 → 🟡 / 10.0 年 → 🟢 (
F67_DEBT_REDEMPTION_YEARS_MAX = 10.0) - 現預金 2.99 ヶ月 → 🔴 / 3.0 ヶ月 → 🟡 (
F67_CASH_RUNWAY_MONTHS_MIN = 3.0) - 境界・サニタイズ: 営業 CF ≤ 0 →
_calcDebtRedemptionYears_が999を返却 (Infinity 回避)
これらを単体テスト F67-04〜F67-08 で網羅。
5. エッジケース検証(単体テスト F67-01〜F67-18)
エッジケースセクションの 18 項目それぞれを 1 テストケースとして 901_test_runner.js に追加。
関連ドキュメント
| カテゴリ | ドキュメント | 関係 |
|---|---|---|
| BRD(最重要) | brd_solo_ceo_financial_navigator.md §5.1 / §5.3 / §6.1 | シナリオ F-G + ライフステージ S1-S4 + マルチイヤー UI 戦略(v2.2) |
| MAS-057 Solo-CEO Cockpit | dev_mas-057_solo_ceo_cockpit.md v2.0 | 単年スコープ・MAS-067 から「📅 マルチイヤー計画」リンク導線・Step 6 3 区分テーブル UI 再利用 |
| MAS-058 必要年商シミュレーター | dev_mas-058_required_revenue_solver.md v1.2 | 各年で逆算・Step 5 UI/SPA 連携完了待ち |
| MAS-066 配当ミックス | dev_mas-066_*.md(仕様書未起草・TODO 起票済 PR #382) | 任意連携・Phase B 以降で各年配当ドロップダウン追加 |
| MAS-059 成長計画ワークスペース | dev_mas-059_growth_planning_workspace.md | AI 自動オーケストレーション・MAS-067 とは完全分離 |
| MAS-008 Cash Runway | dev_mas-008_cash_runway.md | 各年でランウェイ算出 |
| MAS-011 What-If | dev_mas-011_what_if_simulation.md | 5 カ年予測エンジン継承 |
| MAS-013 投資分析 | dev_mas-013_*.md | SaaS 投資準備度判定 |
| MAS-048 採用 TCO(v1 未使用・v2+ 再利用予定) | dev_mas-048_hiring_tco_bep_simulator.md | v1.2 で正社員採用判定が v2+ 延期 → v1 では未連携。v2+ で 11 軸目アクション(正社員採用)追加時に再連携 |
| MAS-017 資金調達(任意) | TODO_future.md MAS-017 行 | 融資申込準備度判定の精度向上 |
| MAS-061 Cash ETR | dev_mas-061_cash_etr_tracking.md v1.1 | 各年で節税効果反映 |
| MAS-177 多年度データ基盤 | dev_mas-177_multiyear_data_foundation.md | 本案件の実績側基盤。MAS-067 は計画値ベースの 5 年連結だが、MAS-177 で実績の多年度連結機能 (Y-1〜Y-3 過去実績ライン) を追加・MAS-067 v2 で Phase E v3 の Y0 着地見込みを Y-N まで延長する基盤 |
| MAS-002 期末スナップショット | dev_mas-002_period_end_snapshot.md | 各年度の期首 BS 安定化基盤。MAS-067 多年シミュレーションの Y0 期首 BS が動的再計算で変動する問題を MAS-002 確定スナップショットで解消・将来 v2 で SnapshotEngine.findPeriodEnd(targetYm) を初期値として参照 |
| MAS-141 節税共済 | dev_mas-141_tax_saving_simulator.md | 共済積立を各年で計上 |
| MAS-232 Sidebar SPA | dev_mas-232_sidebar_spa.md v1.4 | SPA 基盤・MAS-067 cockpit を multiyear_spa entry として追加 |
| 財務評価指標ガイド | financial_metrics_guide.md | 個人/法人/合計 3 区分 + フロー × ストック評価軸 |
| task_F-67.md(仕様書作成プロンプト) | tasks/prompts/task_F-67.md | 本仕様書を生成した手動骨格プロンプト(PR #384) |
| Gemini レビュー結果(v1.1 反映元) | tasks/reviews/2026-04-27T11-34-00_gemini_review_f-67.md | scripts/4_review_specs_by_gemini.js で実施。CONDITIONAL GO + 5 件指摘 (Critical 2 + Major 2 + Minor 1) のうち修正完了基準 3 件を v1.1 で反映 |
| MAS-334 Deep Research + Gemini Deep Think 精緻化(v1.2 反映元) | RQ-036_F67_actions_result.md | Claude Opus 4.7 暫定合成 + Gemini 3 Pro Preview Deep Think 精緻化を統合。5 軸モデル + 10 アクション + ガードレール 10 件 + Section G 5 機能 + MAS-144 規程ジェネレーター P1 起票 / MAS-068 P3 降格 / MAS-069 P3 / MAS-070 棄却 |
| MAS-144 規程ジェネレーター(並列起票) | TODO_future.md MAS-144 行 (旧提案 MAS-142 から ID 衝突回避で振直し) | MAS-067 信号機 🟢 到達時に役員社宅 / 出張日当 / 退職金 規程の PDF 自動生成 |
| failure_patterns | failure_patterns.md | 特に #18-#20 / #25 / #26 / #29 / #31 |
| dev_spec_prompt_template | dev_spec_prompt_template.md v1.10 | Phase 1-A-pre 番号衝突チェックの初回適用事例 |
| PRD | prd.md | Human-in-the-Loop 原則 + Disclaimer |
| CLAUDE.md | CLAUDE.md | プロジェクトルール |
人間が検討すべき事項
計画期間 default: 5 年 vs 10 年 vs 30 年の根拠(退職金見込み年・出口戦略タイミング・経営者の人生観で異なる)。
F67_PLAN_HORIZON_YEARSで運用時切替可だが default 値の選定。ステージ判定閾値の妥当性 (v1.2): A1 月次 CF 連続黒字 ≥ 6 ヶ月 / A5 営業利益 ≥ 84 万 / A6 営業利益 ≥ 240 万 / A7 CAPEX < 300 万 / A8 ランウェイ ≥ 3 ヶ月 + 粗利 ≥ 800 万 / A9 債務償還年数 ≤ 10 年 + 現預金 ≥ 3 ヶ月 (v1.0/1.1 の自己資本比率 ≥ 30% から MAS-334 反映で変更) / A10 役員勤続 ≥ 5 年 + 利益剰余金 ≥ 1,000 万 は仮置き・税理士 / 銀行員 / VC の実務感覚と突合必要。Phase B 実装後に外部レビュー実施。
ライフステージ S1-S4 の境界判定: 年数で機械的判定(Step 3 で v1 採用)vs 財務指標で動的判定(v2 候補)。動的判定にすると判定逆転(一度 S2 になった後に S1 に戻る)の UX 設計が複雑化するため v1 は機械的を推奨。
B/S 引継ぎの粒度: 12 ヶ月単位(spec 採用)vs 四半期単位 vs 月次。月次粒度は計算量とデータ入力負荷が指数的に増加するため v1 は年次。
MAS-058 必要年商の連動: 各年で 3 段階(Min/Healthy/Buffered)表示するか・1 つだけ表示するか。3 段階表示は情報量過多のため v1 は Healthy 1 つを default、tooltip で Min/Buffered 表示。
MAS-066 配当ミックスの組込タイミング: MAS-066 仕様書完成前の Phase A では disabled、MAS-066 仕様書 v1.0 完成後の Phase B 以降で有効化。Phase A 完成のみで MAS-066 着手可能。
UI レイアウト: Y1-Y5 をタブ(spec 採用)vs 列並列(5 列同時表示)vs 折れ線連結のサンキー。タブが情報密度最低・列並列は視認性高いが横スクロール必須・サンキーは流量可視化に強い。Phase A は タブ default、Phase B で列並列モード追加検討。
サジェストエンジンのアルゴリズム: ルールベース(Phase C)vs LLM(Phase D)vs ハイブリッド。spec はハイブリッド採用(Phase C ルールベース基盤 + Phase D で AI 提案統合)。
「達成困難」シナリオの扱い: 赤信号で停止 vs 「次年に再挑戦」の自動繰越。spec は「達成困難・計画見直し推奨」表示で停止し、ユーザーに修正させる方針(自動繰越は計画意思の歪曲リスク)。
商用化時のテンプレート: BZ-1 コンサル / BZ-2 SaaS / BZ-5 ハイブリッドで業種別プリセット用意(PH-4 商用化期)。Phase A-D は bizlp 自身の運用検証に専念。
計画 vs 実績の乖離キャッチアップ UI: 本案件 v2 候補(実績マートとの比較タブ)。MAS-067 計画 vs MAS-003 KPI ダッシュボードの実績を月次で突合する機能(v2.0 で別 PR)。
AI サジェストの届出期限警告: 事前確定届出給与の届出期限を AI 提案時に併記。BRD §6 / MAS-057 注意事項 #15 整合。Phase D 実装時に必須。
MAS-008 / MAS-011 / MAS-013 / MAS-058 を呼び出す純粋関数集約レイヤーの設計責務: 本案件(MAS-067 MultiyearPlanner)に集約する案 vs MAS-059 DecisionTreeOrchestrator と統合する案。spec は MAS-067 独立を採用(MAS-059 とは別の設計哲学のため)。MAS-048 採用 TCO は v1.2 で v1 スコープから除外 (正社員採用は v2+) のため呼出対象外。
ステージ準備度の「1 つでも 🟢 になったら通知」のアラート機構: MAS-009 連携で「Y3 で A9 公庫融資準備 🟢 達成」「Y4 で ⚔️ Scale 軸 アンロック」のような前向き通知を経営者にプッシュ。Phase B 以降で検討(MAS-009 仕様書完成待ち)。v1.2: 達成予定年バッジ (Step 3) で先取り表示する仕組みは実装済のため、MAS-009 連携時は「達成確定通知」のみ追加。
MAS-067 v2 (正社員採用ステージ判定) と MAS-060 (組織構成シミュレーター) の統合判断タイミング (v1.3 追加): v1 で除外した「正社員採用判定 (S3-S4 のみ)」を v2 で A11 軸目アクションとして再導入する際、MAS-060 と統合する vs 分離するの判断は MAS-060 spec v1.0 完成後に行う。推奨は分離パス (MAS-060 = 単年内のミックス最適化 / MAS-067 v2 = 年次連結のステージ判定で住み分け・MAS-067 v2 が MAS-060 を年次で呼出すアグリゲータ構造とする・MAS-067 v1 が MAS-058 を年次で呼ぶ構造と対称)。実装順序: MAS-067 v1 (Phase A-D) → MAS-060 spec 起草 (MAS-058 Step 5 完了待ち) → MAS-060 実装 → MAS-067 v2 spec 起草 → MAS-067 v2 実装。統合パスを選ぶ場合は spec 規模 1.5-2 倍 + 5 軸 × 役職タイプ 7 種の二次元マトリクスで認知負荷増のため、強い UX 要件 (一画面で全部見たい等) が出てこない限り採用しない。判断主体・判断時期: MAS-060 spec v1.0 完成時の Gemini 第三者レビュー + main 側ユーザーの実務感覚で確定。連携先案件: MAS-048 採用 TCO (v2+ で再連携・既に実装済) / MAS-042 投資ハードルレート (v2+ で「業務委託→正社員化損益分岐アラート」残件と統合)。
Phase 分割計画(A-E・段階リリース可・v1.5 で Phase B を 4 サブフェーズに細分化・v1.8 で Phase E 追加)
| Phase | 内容 | 所要 | 状態 | 主要ファイル |
|---|---|---|---|---|
| A | マルチイヤー入力 + B/S 引継ぎのみ | 〜2 週間 | ✅ 完了 (PR #418・2026-04-30) | 400_domain/451_multiyear_planner.js (Step 1+2) / webapp_client/src/multiyear/{YearTabs,BSCarryover}.tsx |
| B-1 (v1.5 細分化) | 5 軸ステージ準備度ダッシュボード + プログレッシブ・ディスクロージャー S1-S4 + 最優先ポリシー A/B/C セレクター (UI + 視覚ハイライトのみ・計算連動は Phase C) | 〜1.5-2 週間 | ✅ 完了 (PR #423・2026-04-30) | webapp_client/src/multiyear/StageDashboard.tsx (182 行新規) / _evaluateStages_ 拡張 (~250 行追加) / 800_ops/817_migration_f67_phase_b_seed.js (F67_* 12 キー seed) / sticky policy bar CSS / 単体テスト F67-15 修正 + F67-16〜25 新規 10 件 |
| B-2 (v1.5 細分化) | 行為計算否認ガードレール 10 件 UI 表示 (Step 5) | 〜0.5 週間 | ✅ 完了 (PR #425・2026-04-30) | webapp_client/src/multiyear/GuardrailPanel.tsx (新規・年別ガードレール表示・折りたたみ可・severity 別色分け) / 400_domain/451_multiyear_planner.js に GUARDRAILS 定数 10 件 + _evaluateGuardrails_ 関数追加 / 単体テスト F67-26〜33 (8 件) |
| B-3 (v1.5 細分化) | Burnout メーター + Section G フリーランス新法サイト負け検知 + インボイス 2 割特例終了崖検知 (Step 6 抜粋・3/5 件実装) | 〜1 週間 | ✅ 完了 (PR #426・2026-04-30) | webapp_client/src/multiyear/SectionGPanel.tsx (新規・年別カードグリッド・Burnout progress bar 含む) / 800_ops/818_migration_f67_phase_b3_seed.js (F67_* 3 キー seed) / _calcBurnoutMeter_ / _detectFreelanceLawSiteGap_ / _detectInvoiceTransitionCliff_ ヘルパ追加 / YearTabs に Section G 入力 7 種追加 / 単体テスト F67-34〜43 (10 件) |
| B-4 (v1.5 細分化) | MAS-066 配当ミックス連携 (各年配当ドロップダウン追加・任意有効化フラグ F67_DIVIDEND_INTEGRATION_ENABLED) | 〜0.5 週間 | 未着手 | MultiyearApp.tsx 拡張 / simulateMultiyear で evaluateScenarioHealth({ dividendAmount }) 連携 |
| C (v1.2 拡張) | サジェストエンジン(ルールベース)+ 退職控除 5 年ズラしガードレール + セーフティ共済出口パズル + ポリシー駆動最適化 (役員報酬・公庫融資の DAG エッジカット) | 〜3 週間 (旧 2 週間から拡張) | 未着手 | webapp_client/src/multiyear/SuggestPanel.tsx / _generateSuggestions_ / detectRetirementDeductionConflict / evaluateSafetyNetExitPuzzle ヘルパ追加 |
| D | AI 提案統合(Vertex Gemini) | 〜1 週間 | ✅ 完了 (PR #448・2026-04-30) | 300_ui/302_spa_bridge.js に generateF67Suggest + buildSuggestPrompt_ 追加 / webapp_client/src/multiyear/SuggestPanel.tsx に AI モデル selector (GEMINI_PRO/GEMINI_FLASH/CLAUDE_SONNET/CUSTOM) + Custom Model ID + 🧠 Deep Think + temperature UI / 800_ops/820_migration_f67_phase_d_seed.js 新規 (5 sys_params 投入) / 単体テスト F67-70〜76 (7 件) |
| E (v1) | シナリオ保存・読込 (37_f67_scenarios タブ追加) | 〜0.5 週間 | ✅ 完了 (PR #451・2026-04-30) | 100_config/101_sys_config.js に F67_SCN スキーマ + flagTabs 登録 / Constants.ID_PREFIX_MAP に F67SCN_ プレフィックス追加 / 200_data/202_repository.js に F67ScenarioRepository (findAll/save/append) / 300_ui/302_spa_bridge.js に listF67Scenarios / saveF67Scenario / loadF67Scenario / deleteF67Scenario の 4 API (論理削除 = 有効フラグ false で履歴保持・新規/上書きは scenarioId の有無で判定) / docs/spec/sidebar_api.d.ts に F67ScenarioMeta / F67ScenarioSavePayload / F67ScenarioFull / webapp_client/src/multiyear/ScenarioPanel.tsx (myr-scenario-* CSS) / MultiyearApp でポリシーバー直下配置・applyScenario で yearInputs / initialBS / optimizationPolicy / exitPlan を全て上書きで state 完全復元 |
| E (v2) | プルダウン即時反映 + UX 統一 (F-57 と同一構造) | 〜0.5 週間 | ✅ 完了 (PR #454・2026-04-30) | listF67Scenarios を values 込みで返却するよう変更 (yearInputs / initialBS / optimizationPolicy / exitPlan の optional 4 フィールドを F67ScenarioMeta に追加) → ScenarioPanel.tsx で onSelect 即時反映 (sheet roundtrip なし・loadF67Scenario API 不要に) / 📂 読込 ボタン → 🔄 再取得 に役割変更 (他タブ更新取込用) / F-57 / F-67 両方で同パターン適用 (UX 統一) / myr-scenario-panel 緑色テーマ + インライン名前入力 + 4 ボタン (🔄 / 💾 / ➕ / 🗑️) で F-57 と同一構造 |
| E (v3) | ハードリロード後の前回選択自動復元 (PR #457 同梱) | 〜0.1 週間 | ✅ 完了 (PR #457・2026-05-01) | localStorage キー f67_last_selected_scenario_id_v1 で前回選択シナリオ ID を保存。ScenarioPanel 起動時に listF67Scenarios を呼出後、lastId を find して見つかれば applyScenario(record) を自動呼出して state 完全復元。onSelect / onSaveNew / onDelete で persistLastSelected(id) を呼び localStorage を最新化。MAS-071 ScenarioPanel と同一パターンで UX 統一 (MAS-071 は mas071_last_selected_scenario_id_v1 キー)。従来課題: ハードリロード時に毎回ドロップダウンが空状態に戻り、ユーザーが手動で選び直す必要があった ("前提 × シナリオのマトリクス試算" 中の作業中断時に体感が悪い)。v3 で解消: 前回作業状態を即座に復元・F-67 / MAS-071 / F-57 (将来適用候補) で同 UX が定着。 |
各 Phase で independent PR・Phase A だけでも価値ある(5 年計画作成支援ツール)ので段階リリースを優先。Phase B-1 完了で 5 軸 × 10 アクション信号機可視化が稼働済。MAS-066 配当ミックス連携は Phase B-4 で実装予定。
Phase B サブフェーズの分割理由(v1.5 で確定)
旧 v1.2-1.4 では「Phase B = 4 週間まとめて実装」だったが、PR レビュー単位での消化が大きすぎることと、ステージダッシュボードだけでも単独価値があることから 4 サブフェーズに分割。B-1 (5 軸 + プログレッシブ・ディスクロージャー) が単独で大きな価値 (信号機可視化) を生むため最優先で完了。残る B-2/B-3/B-4 は順次・並列実装可能。
実装プロンプト(Claude Code 用)
Claude Opus 4.7(1M context)推奨。MAS-008/MAS-011/MAS-013/MAS-058 の 4 エンジン統合 + B/S 引継ぎ会計ロジック + 5 軸ステージ判定 + ガードレール 10 件 + Section G 5 機能 + 7 React コンポーネント 設計の最高難易度(v1.2 で v1.0/1.1 の 5 エンジン → 4 エンジン / 5 React → 7 React に更新。MAS-048 は v2+ 延期)。
## 案件
MAS-067 — マルチイヤー計画ワークスペース + ステージ準備度ダッシュボード(人間駆動・MAS-057 派生)
## 事前調査(必ず Read する)
1. `docs/dev/dev_mas-067_multiyear_planning_workspace.md` 全文(本仕様書)
2. `docs/brd_solo_ceo_financial_navigator.md` §5.1 / §5.3 / §6.1(v2.2 改訂内容)
3. `tasks/prompts/task_F-67.md`(仕様書作成プロンプト・本仕様書の起源)
4. `docs/dev/dev_mas-057_solo_ceo_cockpit.md` v2.0 全文(Phase 3 SPA 実装パターン継承元)
5. `docs/dev/dev_mas-058_required_revenue_solver.md` v1.2(各年で逆算)
6. `400_domain/445_required_revenue_solver.js`(MAS-058 実装・solveRequiredRevenue API)
7. `400_domain/430_what_if_simulator.js`(MAS-011 5 カ年エンジン)
8. ~~`400_domain/412_hiring_tco_simulator.js`(MAS-048 採用 TCO)~~ **v1.2 で v1 スコープから除外** (正社員採用は v2+ 延期。v2+ で再連携時に Read 必要)
9. `400_domain/431_investment_analyzer.js`(MAS-013 投資分析)
10. `webapp_client/src/cockpit/calc.ts`(MAS-057 Phase 3 クライアント側計算パターン)
11. `webapp_client/scripts/sync-engines.mjs`(SSoT 共有方式・451 を sync 対象に追加)
12. `webapp_client/vite.config.ts`(multi-page entry パターン)
13. `300_ui/302_spa_bridge.js`(MAS-057 Phase 3 SPA bridge パターン継承元)
14. `docs/_internal/failure_patterns.md` #18-#20 / #25 / #26 / #29 / #31
## 実装対象(Phase A-D 段階リリース)
Phase A (~2 週間):
1. `400_domain/451_multiyear_planner.js` 新規(IIFE 名前空間 MultiyearPlanner):
- simulateMultiyear(yearInputs, initialBS, params) — メイン API
- 内部ヘルパ: _computePL_ / _computeBS_ / _computeCF_ / _computeRunway_
(※ v1.1 で _loadParamsFromSysParams_ は廃止・Constants.getParam を直接呼出・
Gemini レビュー Major 1 反映)
- MAS-058 / MAS-011 / MAS-013 / MAS-008 を順呼出 (v1.2 で MAS-048 削除・正社員採用は v2+ 延期)
2. `webapp_client/multiyear_cockpit.html` 新規
3. `webapp_client/src/MultiyearApp.tsx` 新規(React ルート)
4. `webapp_client/src/multiyear/{YearTabs,BSCarryover}.tsx` 新規(2 コンポーネント)
5. `webapp_client/src/multiyear/calc.ts` 新規(クライアント計算)
6. `webapp_client/scripts/sync-engines.mjs` 拡張(451 を sync 対象に追加)
7. `webapp_client/vite.config.ts` 拡張(multiyear_spa entry 追加)
8. `300_ui/302_spa_bridge.js` 拡張(multiyear_spa view + bootstrap +
runMultiyearSimulation API 追加)
9. `templates/financial_cockpit.html` 拡張(ヘッダに「📅 マルチイヤー計画」リンク追加)
10. `03_sys_params` の F67_PLAN_HORIZON_YEARS のみ追加(Phase A 段階)
Phase B (~4 週間・v1.2 拡張: ガードレール + Section G 追加で 3 → 4 週間):
11. _evaluateStages_ ヘルパ追加 + 5 軸 (Liquidity / Tax & Social / Scale / Accumulation / Exit) × A1-A10 判定
+ 14 キー追加 (F67_DEBT_REDEMPTION_YEARS_MAX / F67_CASH_RUNWAY_MONTHS_MIN / F67_A1-A10
個別閾値 / F67_OPTIMIZATION_POLICY_DEFAULT / F67_BURNOUT_OCCUPANCY_RED_THRESHOLD /
F67_INVOICE_TRANSITION_END_DATE)
12. webapp_client/src/multiyear/StageDashboard.tsx 新規 (5 軸 × 10 アクション展開・
プログレッシブ・ディスクロージャー・最優先ポリシー A/B/C セレクター・達成予定年バッジ)
13. webapp_client/src/multiyear/GuardrailPanel.tsx 新規 (v1.2・行為計算否認ガードレール 10 件 UI)
+ evaluateGuardrails(plan) 純粋関数 + GUARDRAILS 定数追加
14. webapp_client/src/multiyear/BurnoutMeter.tsx 新規 (v1.2・社長稼働限界・100% 超で 🔴 + A8 サジェスト)
+ calcBurnoutMeter ヘルパ追加
15. detectFreelanceLawSiteGap (MAS-236) + detectInvoiceTransitionCliff (MAS-240) ヘルパ追加
16. MAS-066 配当ミックス連携(F67_DIVIDEND_INTEGRATION_ENABLED で切替)
Phase C (~3 週間・v1.2 拡張: 退職控除 5 年ルール + セーフティ共済出口パズル追加で 2 → 3 週間):
17. _generateSuggestions_ ヘルパ追加(ルールベース・A1-A10 の 10 アクション分)
18. webapp_client/src/multiyear/SuggestPanel.tsx 新規
19. detectRetirementDeductionConflict (MAS-237) + evaluateSafetyNetExitPuzzle (MAS-238) ヘルパ追加
Phase D (~1 週間):
16. 300_ui/302_spa_bridge.js に generateF67Suggest 関数追加
+ F67_AI_SUGGEST_ENABLED で切替
+ 内部で **Utils.callGeminiForReasoningOnVertex_** (既存・000_infra/004_utils.js) を呼出
(v1.1 で造語 _callVertexGeminiForF67Suggest_ を廃止・Gemini レビュー Critical 1 反映)
17. buildSuggestPrompt_(currentPlan, stageEvaluations) 純粋関数追加
(MAS-057 buildInsightPrompt_ と並列対称)
18. 300_ui/302_spa_bridge.js に **_scrubInfinityForJSON_(dto)** 境界処理追加
(v1.1・Gemini レビュー Critical 2 反映・定数 mutate 禁止)
- runMultiyearSimulation がクライアントへ返すレスポンスを scrub
- サーバー側ロジック (MultiyearPlanner) は Infinity のまま動作
全 Phase 共通:
- 900_test/901_test_runner.js に F67-01〜F67-18 単体テスト追加
- 8XX_migration_f67_multiyear_seed.js(任意・F67_* 14 キーシーダー / v1.2 で 10 → 14 に拡張)
## 動作確認
1. 齋藤 Baseline + 5 カ年計画(Y1-Y5)で期末純資産・ステージ準備度が
実データ検証 §1 の期待値 ±10% 以内
2. MAS-058 各年逆算が `solveRequiredRevenue` の純粋呼出で正常動作
3. ライフステージ S1-S4 自動判定の境界検証(実データ検証 §3)
4. ステージ準備度信号機の境界検証(実データ検証 §4)
5. MAS-066 配当ミックス連携時の B/S 影響(Phase B 以降)
6. AI サジェスト Phase D で Vertex Gemini が正常応答 + null 安全フォールバック
7. エッジケース 18 項目すべて想定通り
## デプロイ手順(各 Phase 共通)
1. dev で push:dev → サイドバーから「📅 マルチイヤー計画」リンク経由で
multiyear_spa 起動 → 5 年計画入力 → ステージ準備度確認
2. Go なら push:prod
3. コミットメッセージ:
Phase A: feat(MAS-067 Phase A): MultiyearPlanner + B/S 引継ぎ + year-tab UI
Phase B: feat(MAS-067 Phase B): 5 軸ステージ準備度ダッシュボード (5 軸 × 10 アクション + ガードレール 10 件 + Burnout メーター + Section MAS-236/MAS-240)
Phase C: feat(MAS-067 Phase C): サジェストエンジン (ルールベース A1-A10 / 10 アクション + Section MAS-237/MAS-238 退職控除 5 年ルール / セーフティ共済出口パズル)
Phase D: feat(MAS-067 Phase D): AI 提案統合 (Vertex Gemini + Deep Think)
## failure_patterns チェック
- #18-#20: MultiyearPlanner / simulateMultiyear / _evaluateStages_ を Read で裏取り
- #25: MAS-057 / MAS-066 と純粋関数 + Constants.getParam パターン対称
- #26: appsscript.json は変更なし
- #29: 5 カ年配列の各要素で Infinity / NaN scrub 必須
- #31: 本仕様書起票時に Phase 1-A-pre 適用済(MAS-067 が次空き番号確認)
推奨実行モデル
Phase 別に推奨モデルを使い分け、トークン消費と応答品質を最適化する。
| Phase | 推奨モデル | 根拠 |
|---|---|---|
| Phase A(マルチイヤー入力 + B/S 引継ぎ) | Claude Opus 4.7 (1M context) | 4 エンジン統合 (MAS-008/MAS-011/MAS-013/MAS-058・MAS-048 は v1 未使用) + 会計仕訳整合性 + 2 React コンポーネント設計の複合判断 |
| Phase B(5 軸ステージ準備度ダッシュボード + ガードレール + Burnout + Section MAS-236/MAS-240) | Claude Opus 4.7 (1M context) | 5 軸 × 10 アクション信号機判定アルゴリズム + プログレッシブ・ディスクロージャー + 行為計算否認ガードレール 10 件 + 3 React コンポーネント新規設計(StageDashboard / GuardrailPanel / BurnoutMeter) |
| Phase C(サジェストエンジン・ルールベース A1-A10 + Section MAS-237/MAS-238) | Claude Sonnet 4.6 | パターン化された 10 アクション判定ロジック + 退職控除 5 年ルール / セーフティ共済出口パズルマッピング・Phase A/B のパターン適用 |
| Phase D(AI 提案・Vertex Gemini) | Claude Opus 4.7 (1M context) | MAS-057 Phase 3 の AI インサイトパターン流用 + LLM プロンプト設計 |
| 単体テスト実装(F67-01〜F67-18) | Claude Sonnet 4.6 | パターン化された期待値検証 |
| マイグレーション 8XX_migration_f67_multiyear_seed(任意) | Claude Haiku 4.5 | 800_ops 既存パターン流用 |
| 仕様書レビュー | Gemini 3 Pro Preview + Deep Think | 第三者会計 + UX 妥当性検証・銀行員 / VC 視点での閾値妥当性 |
変更履歴
| 日時 | バージョン | 変更内容 |
|---|---|---|
| 2026-05-02 | v2.0 (RetirementPanel 削除・4→3 パネル化 + cockpit 統合 — F-57 大規模 UI 再構成 dev @230 反映) | F-67 マルチイヤー計画ワークスペースが旧独立 SPA (?view=multiyear_spa) → MAS-057 cockpit (CockpitApp.tsx) に統合された (commit 6ad690b)。主要変更: (1) 4 パネル → 3 パネル化: 旧 4 パネル (Guardrail / Suggest / AiSuggest / Retirement) のうち RetirementPanel が削除 + 残り 3 パネル (GuardrailPanel / SuggestPanel hideAi / AiSuggestPanel Phase D) は MAS-057 cockpit に直接統合 / (2) AiSuggestPanel sticky 最上部 + 5 年計画ナビ ミニボタン (commits 32beca1 / 5e382e4): F-67 専用ワークスペースの role を AiSuggestPanel sticky に集約・5 年計画への遷移は cockpit 内のミニナビボタンに / (3) 多年系の表現は MAS-057 SoloFinancialStatementsPanel に統合: F-57 cockpit Step 7-B SoloFinancialStatementsPanel (multiyear_planner 流用) で 6 年連結 P/L · B/S · CF が表現可能 → F-67 ワークスペース独立稼働の必要性低下。RetirementPanel の廃止判断 (sub 側 draft・要相談): (b) 開発し直す・将来再開 推奨。理由: (a) Solo-CEO 段階では退職金計画を立てる優先度が低いため一旦削除 (ユーザー判断) ・(b) MAS-141 節税共済 / MAS-072 企業価値スコアボード / 出口戦略との連動が将来必要になる可能性大・(c) エンジン側 (F67ExitPlan { smallEnterpriseExitYear / directorRetirementYear / safetyNetExitYear }) は残存 (simulateMultiyearClient の引数として default null・現在は CockpitApp から渡されない)・(d) MAS-067 v3 候補として **「Solo CEO 5 年目以降の出口準備期に再開検討」**を section 末尾に保留メモ・(e) 復元コスト低 (型 + エンジンが残存しているため UI 再構築のみで復活可能)。MAS-067 spec の今後の扱い: (1) Engine API + 5 軸ステージ判定 + Phase A-D 機能 + Phase E シナリオ保存 + AI 提案統合 (Phase D・PR #448) は 本仕様書を SSoT として維持・(2) RetirementPanel UI 仕様は 「廃止 + 再開検討候補 (v3)」status を追記・(3) 多年系 Engine は MAS-057 SoloFS から流用継続。SectionGPanel 削除 (commit 0b70b53): 5 軸ステージダッシュボードは多年表に inline 化されたため redundant → (a) 完全削除。残存資産: F67 Phase A-E 機能 (B-2/B-3 ガードレール + Section G + B-4 配当 + C サジェスト + D AI 提案 + E シナリオ保存) は cockpit 統合後も維持・MAS-057 SoloFS から呼出可能。MAS-355 (資本効率ダッシュボード) との関係: 将来 MAS-067 v2 で「5 年累積機会損失」「Rule of 40 5 年推移」を追加する余地あり (SoloFS の多年表に inline できる構造)。docs-only PR で prod 自動デプロイへの影響なし。最終更新日 2026-05-02。 |
| 2026-05-01 | v1.9 (Phase E v3 ハードリロード後の前回選択自動復元 — PR #457 実装完了反映) | MAS-071 実装 PR #457 (commit 16fdffb) の同梱として F-67 ScenarioPanel にも前回選択自動復元機能が追加されたため spec を v1.9 として整合追従。v3 実装内容: (1) localStorage キー f67_last_selected_scenario_id_v1 で前回選択シナリオ ID を保存 / (2) ScenarioPanel 起動時に listF67Scenarios を呼出後、lastId を find して見つかれば applyScenario(record) を自動呼出して state 完全復元 / (3) onSelect / onSaveNew / onDelete で persistLastSelected(id) を呼び localStorage を最新化。MAS-071 ScenarioPanel と同一パターン (MAS-071 は mas071_last_selected_scenario_id_v1 キー) で UX 統一。従来課題: v1+v2 では list API + values prefetch + 即時反映までは整っていたが、ハードリロード時に毎回ドロップダウンが空状態に戻り、ユーザーが手動で選び直す必要があった ("前提 × シナリオのマトリクス試算" 中の作業中断時に体感が悪い)。v3 で解消: 前回作業状態を即座に復元・F-67 / MAS-071 で同 UX が定着 (F-57 への適用は将来候補)。spec 更新内容: (1) Phase 分割計画テーブルに Phase E v3 行を新設 (PR #457・2026-05-01・〜0.1 週間) / (2) 変更履歴 v1.9 entry 追加。「実装が spec を先行 → spec を整合追従」のパターン累計 11-12 例目 (MAS-071 v1.0 = 11 例目 + 本 v1.9 = 12 例目)。docs-only PR で prod 自動デプロイへの影響なし。 |
| 2026-04-30 | v1.8 (Phase E v1 + v2 実装完了反映・シナリオシート保存 + 即時反映 + UX 統一) | MAS-067 Phase E (シナリオ保存・読込) v1 + v2 の実装完了 (PR #451 + PR #454) を spec に整合追従。Phase E v1 (PR #451・commit 7c6cbe4): 37_f67_scenarios タブを追加し yearInputs / initialBS / optimizationPolicy / exitPlan を JSON シリアライズで保存。複数の名前付きシナリオを切り替え可能に。実装内容: (1) 101_sys_config.js に F67_SCN スキーマ + flagTabs 登録 / (2) Constants.ID_PREFIX_MAP に F67SCN_ プレフィックス追加 (4 桁連番発番) / (3) 202_repository.js に F67ScenarioRepository (findAll/save/append) / (4) 302_spa_bridge.js に listF67Scenarios / saveF67Scenario / loadF67Scenario / deleteF67Scenario の 4 API (論理削除 = 有効フラグ false で履歴保持・新規/上書きは scenarioId の有無で判定) / (5) docs/spec/sidebar_api.d.ts に F67ScenarioMeta / F67ScenarioSavePayload / F67ScenarioFull 型 / (6) webapp_client/src/multiyear/ScenarioPanel.tsx 新規 (myr-scenario-* CSS) / (7) MultiyearApp でポリシーバー直下に ScenarioPanel 配置・applyScenario で全 state 完全復元。Phase E v2 (PR #454・commit 3487562・F-57 シート移行と同 PR): listF67Scenarios を values 込みで返却するよう変更し SPA は初回 1 回の取得で全件 prefetch・プルダウン onSelect で即座に値反映(sheet roundtrip なし)。F67ScenarioMeta 型に optional の yearInputs? / initialBS? / optimizationPolicy? / exitPlan? を追加(値が prefetch される)。📂 読込 ボタン → 🔄 再取得 に役割変更(他タブ更新取込用)。loadF67Scenario API は使用箇所なくなり後方互換用として残置。F-57 / F-67 両方で同パターン適用 (UX 統一の実装裏付け・myr-scenario-panel 緑色テーマ + インライン名前入力 + 4 ボタン 🔄 / 💾 / ➕ / 🗑️ で F-57 と同一構造)。spec 更新内容: (1) Phase 分割計画テーブルを A-D → A-E に拡張 / Phase E v1 + v2 行を新設 / (2) タイトルから「v1.5 で Phase B を 4 サブフェーズに細分化」記載を「v1.5 + v1.8 で Phase E 追加」に拡張 / (3) 変更履歴 v1.8 entry 追加。残作業: B-4 配当連携 + C サジェストエンジン (ルールベース 5 件) は依然未着手 (本 PR 範囲外)。「実装が spec を先行 → spec を整合追従」のパターン累計 9-10 例目 (Phase E v1 = 9 例目 + v2 = 10 例目)。docs-only PR で prod 自動デプロイへの影響なし。 |
| 2026-04-30 | v1.7 (Phase D 実装完了反映 — F-67 全 Phase 完成) | MAS-067 Phase D AI 提案統合 (Vertex Gemini) 実装完了 (PR #448・commit 5b7dcc5) を spec に整合追従。これで F-67 マルチイヤー計画 Phase A〜D の全 8 サブフェーズ完成 (A / B-1 / B-2 / B-3 / B-4 / C-1 / C-2 / C-3 / D)。Phase D 実装内容: (1) 300_ui/302_spa_bridge.js に buildSuggestPrompt_(currentPlan, stageEvaluations) 純粋関数 + generateF67Suggest(payload) API 追加 (5 年計画サマリ + 各年ステージ + 高優先度サジェスト + ガードレール集計 + Section G 警告 + plan-level 検証 + 5 軸モデル/配置順序ガイドラインを統合・F67_AI_SUGGEST_ENABLED で切替・Gemini Pro/Flash/Custom/Claude 切替対応・Deep Think 有効化対応・null 安全フォールバック)。F-57 _callVertexGeminiForF57Insight_ ヘルパを再利用 (本質的に汎用 API 呼出)。(2) webapp_client/src/multiyear/SuggestPanel.tsx 拡張: 「💡 AI に統合提案を依頼」ボタン (F67_AI_SUGGEST_ENABLED=true 時のみ) + AI モデル selector (GEMINI_PRO / GEMINI_FLASH / CLAUDE_SONNET / CUSTOM) + Custom Model ID 入力 (default gemini-3.1-pro-preview) + 🧠 Deep Think + temperature。クリックで callApi('generateF67Suggest', payload) 呼出 → 自然言語提案を結果カードで表示 (model + tookMs メタ情報付き)。エラー時は「AI 提案生成失敗・ルールベースサジェストは引き続き有効」表示。F67_AI_SUGGEST_ENABLED=false 時は無効化メッセージ + 有効化方法の案内。(3) 800_ops/820_migration_f67_phase_d_seed.js 新規 で 5 キーを 03_sys_params に冪等投入: (a) F67_AI_SUGGEST_ENABLED (default false・true で AI 提案ボタン表示・Vertex AI quota 承認後 true へ) / (b) F67_AI_SUGGEST_MODEL (default GEMINI_PRO・GEMINI_PRO/GEMINI_FLASH/CLAUDE_SONNET 選択肢) / (c) F67_GEMINI_MODEL_OVERRIDE_PRO (default gemini-2.5-pro・3.x 系有効化後に gemini-3.1-pro-preview 等へ) / (d) F67_GEMINI_MODEL_OVERRIDE_FLASH (default gemini-2.5-flash) / (e) F67_AI_TEMPERATURE (default 0.3・経営アドバイスは具体数値含むため低温で一貫性確保)。F67_AI_SUGGEST_ENABLED は default 'false' (Vertex AI quota 承認後を想定)。Vertex AI Anthropic Claude quota は dev 側 escalation 申請中のため Gemini Pro が default 動作。(4) 単体テスト F67-70〜76 (7 件追加・buildSuggestPrompt_ 純粋関数のみテスト・Vertex Gemini API 呼出は実機テストで確認): 文字列 > 200 文字返却 / 最優先ポリシー文言含有 / 計画期間含有 / 5 軸モデル + ガイドライン含有 / 異常入力 (空オブジェクト) で例外なく文字列返却 / 純粋性 (同一入力で同一出力) / F67_AI_SUGGEST_ENABLED=false で error 返却。(5) SidebarApi 型定義に generateF67Suggest 追加 (gasRun の型安全性確保)。v1.6 から の差分強調: (a) temperature default 0.3 を sys_param で外出し — v1.6 spec では temperature 言及なし・本 PR で経営アドバイス向けの低温固定設定を採用 / (b) Custom Model ID default gemini-3.1-pro-preview — モデル selector の CUSTOM 選択時のフォールバック / (c) 5 sys_params キー (v1.6 spec 概要テーブル「F67_AI_SUGGEST_ENABLED」のみ言及 → 4 キー追加で計 5 キーに拡張)。spec 更新内容: (1) Phase 分割計画テーブル Phase D 行を「未着手」→ 「✅ 完了 (PR #448・2026-04-30)」 に変更・主要ファイル列を実装実態で書換 (820 マイグレーション + SuggestPanel 拡張 + 単体テスト F67-70〜76) / (2) 変更履歴 v1.7 entry 追加。残作業: B-4 配当連携のみ未着手 (〜0.5 週間・F67_DIVIDEND_INTEGRATION_ENABLED フラグ有効化で MAS-066 と統合)。「実装が spec を先行 → spec を整合追従」のパターン 8 例目 (累計 8 件・F-57 v2.1 PR #395 + 均等割修正 PR #399 + F-58 v2.0 PR #401 + F-66 v1.2 PR #403 + F-67 v1.5 PR #424 + F-67 v1.6 PR #427 + F-67 v1.7 本 PR で 8 例目)。docs-only PR で prod 自動デプロイへの影響なし。 |
| 2026-04-30 | v1.6 (Phase B-2 + Phase B-3 実装完了反映) | MAS-067 Phase B-2 (PR #425) + Phase B-3 (PR #426) を spec に整合追従。Phase B-2 実装内容 (PR #425・commit ca05cad): (1) webapp_client/src/multiyear/GuardrailPanel.tsx 新規 (年別ガードレール表示・折りたたみ可能・severity 別色分け) / (2) 400_domain/451_multiyear_planner.js に GUARDRAILS 定数 10 件 + _evaluateGuardrails_ 関数追加 / (3) MultiyearApp.tsx に GuardrailPanel 統合 / (4) 単体テスト F67-26〜F67-33 (8 件追加・全 33 件 PASS)。ガードレール 10 件: A1 役員報酬 (定期同額給与逸脱) / A2 役員社宅 (法定家賃) / A3 出張日当 (カラ出張) / A4 親族役員化 (名板貸し) / A5 小規模企業共済 / A6 セーフティ共済 (2024.10 改正) / A7 少額減価償却 (年 300 万限度) / A8 業務委託活用 (2024.11 フリーランス新法) / A9 公庫融資 (資金使途違反) / A10 退職金 (功績倍率)。重要設計判断: ステージ判定との独立性: ガードレールはステージ judgment と独立した安全網。always/on_overage/on_change トリガーはアクションが locked でも入力値で判定する (例: CAPEX 2000 万投入で S1 強制になっても A7 警告は発火)。on_green のみ「🟢 達成」が前提なので locked では不発火。Phase B-3 実装内容 (PR #426・commit 7cdae52): (1) webapp_client/src/multiyear/SectionGPanel.tsx 新規 (年別カードグリッド・Burnout progress bar 含む) / (2) 800_ops/818_migration_f67_phase_b3_seed.js 新規 (F67_* 3 キーシーダー) / (3) _calcBurnoutMeter_ + _detectFreelanceLawSiteGap_ + _detectInvoiceTransitionCliff_ ヘルパ追加 (~150 行) / (4) YearTabs に Section G 入力 7 種追加 (時間単価 / 業務委託費 / 委託先支払サイト / 元請支払サイト / インボイス登録日 / 親族役員 score / 出張頻度) / (5) 単体テスト F67-34〜F67-43 (10 件追加・全 43 件 PASS)。Section G 5 件のうち 3 件実装 (Deep Think 独自必須機能・MAS-334 Section G): ✅ MAS-239 Burnout メーター (ナレッジワーカー型売上分解で物理破綻検知・100% 超で🔴 + 業務委託サジェスト・80% 超で🟡 余力低下警告) / ✅ MAS-236 フリーランス新法サイト負け検知 (委託先 60 日超過で🔴新法違反・元請-委託 30 日超で🟡 WC ギャップ) / ✅ MAS-240 インボイス 2 割特例終了崖検知 (2023/10 以前登録で 2026/9 含む課税期間以降🟡 警告) / ❌ MAS-237 退職所得控除「枠の食い合い」5 年/19 年ルール → Phase C へ移動 / ❌ MAS-238 セーフティ共済「出口パズル」マッピング → Phase C へ移動。Burnout メーター閾値: 80% 超で🟡 (余力低下警告) / 100% 超で🔴 + suggestedOutsourceHours (= 必要時間 - 月最大時間 160h) を返却・A8 業務委託サジェストへ / F67_MONTHLY_MAX_HOURS で月最大時間カスタマイズ可 (default 160 = 1 日 8h × 月 20 日)。フリーランス新法判定: 委託先支払 60 日超過で🔴 (2024.11 施行・50 万以下罰金 + 公表) / 元請-委託先 > 30 日で🟡 (WC ギャップ算出) / 業務委託費 0 で na (判定対象外)。インボイス特例終了崖: 2023-10-01 以降登録で特例対象外 = green (本則計上・崖なし) / 2023-10-01 以前登録で 2026-09-30 含む年度以降 = yellow / 簡略: Y1 = 2026 年起点と仮置き (厳密な決算月対応は v2 候補)。spec 更新内容: (1) 概要テーブルの実装ステータス行を Phase B-2 + B-3 完了マーク追加 / (2) Phase 分割計画テーブルで B-2 / B-3 を「未着手」→「✅ 完了」に変更・主要ファイル列を実装実態で書換 / (3) 変更履歴 v1.6 entry 追加。残作業: Phase B-4 (MAS-066 配当ミックス連携・〜0.5 週) / Phase C (サジェストエンジン + 退職控除 5 年/19 年ルール + セーフティ共済出口パズル + ポリシー駆動最適化・〜3 週) / Phase D (AI 提案・Vertex Gemini・〜1 週)。docs-only PR で prod 自動デプロイへの影響なし。「実装が spec を先行 → spec を整合追従」のパターン 6・7 例目 (累計 7 件)。 |
| 2026-04-30 | v1.5 (Phase A + Phase B-1 実装完了反映・Phase B サブフェーズ細分化) | MAS-067 マルチイヤー計画ワークスペースの Phase A (PR #418) + Phase B-1 (PR #423) を spec に整合追従。Phase B-1 実装内容 (PR #423・commit e8dfaef): (1) webapp_client/src/multiyear/StageDashboard.tsx 新規 (182 行・5 軸 × 10 アクション信号機マトリクス) / (2) 400_domain/451_multiyear_planner.js のステージ判定エンジン拡張 (約 250 行追加・ライフステージ動的判定 + プログレッシブ・ディスクロージャー S1-S4 + ポリシー駆動視覚ハイライト) / (3) 800_ops/817_migration_f67_phase_b_seed.js 新規 (F67_* 12 キーシーダー) / (4) sticky policy bar CSS (sticky bar / ステージダッシュボード / ポリシー強調・約 88 行) / (5) MultiyearApp.tsx 拡張 (sticky policy bar + StageDashboard 統合) / (6) 単体テスト F67-15 修正 + F67-16〜25 新規 10 件・全 25 件 PASS / (7) _mergeParams_ ヘルパで partial params overlay 安全動作。主要設計判断: (a) ライフステージ動的判定: runway < 6 ヶ月で S1 強制 (財務指標が機械的判定に優先)・利益剰余金 ≥ 1000 万で S3・directorTenure ≥ 5 ∧ retainedEarnings ≥ 1000 万で S4 / (b) **A1 役員報酬簡略化**: spec の「月次 CF 連続黒字 ≥ 6 ヶ月」を「年次純利益 > 0」で判定 (Phase C で月次粒度拡張時に厳密化予定) / (c) A9 公庫融資: 債務償還年数 ≤ 10 年 ∧ 現預金 ≥ 3 ヶ月 (_calcDebtRedemptionYears_ で営業 CF ≤ 0 を 999 サニタイズ・failure_patterns #29 V8→Java silent null 対策) / (d) 最優先ポリシー A/B/C: B-1 では UI セレクター + 視覚ハイライト (オレンジ枠) のみ実装・実際のポリシー駆動最適化 (役員報酬と公庫融資枠の DAG エッジカット) は Phase C で実装予定 / (e) sticky bar 設計: ヘッダー直下に独立 sticky bar として配置・スクロールしても画面上部に追従・モバイル (< 768px) ではヒント文非表示。Phase B サブフェーズ細分化: 旧 v1.2-1.4 では「Phase B = 4 週間まとめて実装」だったが、PR レビュー単位での消化が大きすぎることと、ステージダッシュボードだけでも単独価値があることから B-1 / B-2 / B-3 / B-4 の 4 サブフェーズに分割。B-1 完了で残る B-2 (ガードレール 10 件・〜0.5 週) / B-3 (Burnout + Section G・〜1 週) / B-4 (MAS-066 配当連携・〜0.5 週) は順次・並列実装可能に。spec 更新内容: (1) 概要テーブルに「実装ステータス」行新設 (Phase A ✅ / Phase B-1 ✅ / 残 Phase B-2/3/4/C/D 未着手) / (2) Phase 分割計画テーブルを 4 → 7 行に拡張 (B 行を B-1/B-2/B-3/B-4 の 4 行に展開・各サブフェーズ独立リリース可) / (3) Phase B サブフェーズ分割理由を追記。動作確認 (dev Deployed @127): 齋藤 baseline (年商 1,680 万) で Y1=S2 / Y3=S3 / 5 軸全て信号機表示 / A5 共済 / A9 公庫融資 = 🟢 / 赤字シナリオで Y1=S1 強制 / Liquidity 以外の軸 locked / CAPEX 100 万投入で A7 少額減価償却 = 🟢 / ポリシー A/B/C 切替で対応軸が即時オレンジハイライト。docs-only PR で prod 自動デプロイへの影響なし。「実装が spec を先行 → spec を整合追従」のパターン 5 例目 (F-57 v2.1 PR #395 + 均等割修正 PR #399 + F-58 v2.0 PR #401 + F-66 v1.2 PR #403 に続く実例)。 |
| 2026-04-28 | v1.4 (v2+ 実装タイミング・MAS-060 統合判断の明文化) | v1.3 で v1 整合化を行った際、「正社員採用判定は v2+ 延期」と書きつつ v2 のスコープ・タイミング・MAS-060 組織構成シミュレーターとの統合判断を spec で未定義のまま残していたため、人間検討事項 #15 を新規追加して明文化。主要追加: (1) 推奨は分離パス: MAS-060 = 単年内のミックス最適化 / MAS-067 v2 = 年次連結のステージ判定で住み分け・MAS-067 v2 が MAS-060 を年次で呼出すアグリゲータ構造とする (MAS-067 v1 が MAS-058 を年次で呼ぶ構造と対称)。統合パスは spec 規模 1.5-2 倍 + 5 軸 × 役職タイプ 7 種の二次元マトリクスで認知負荷増のため、強い UX 要件が出てこない限り不採用。(2) 実装順序確定: MAS-067 v1 (Phase A-D) → MAS-060 spec 起草 (MAS-058 Step 5 完了待ち) → MAS-060 実装 → MAS-067 v2 spec 起草 → MAS-067 v2 実装。(3) 判断主体・判断時期: MAS-060 spec v1.0 完成時の Gemini 第三者レビュー + main 側ユーザーの実務感覚で確定。(4) 後続連携行に MAS-060 を追記 (v2+ で正社員採用ステージ判定 A11 を再導入する際の年次呼出先・分離パス推奨)。(5) MAS-048 採用 TCO (実装済) は v2+ で再連携、MAS-042 投資ハードルレート は「業務委託→正社員化損益分岐アラート」残件と統合する想定を記載。v1.3 から spec 本文ロジックは変更なし・v2+ の運用ルールを明文化したのみ。docs-only 改訂で prod 自動デプロイへの影響なし。 |
| 2026-04-27 | v1.3 (v1.2 内整合化・採用準備度残存記述の 5 軸モデル統一) | v1.2 改訂 (5 軸モデル + 10 アクション再編) が spec 全体に行き届いておらず、Step 4 サジェスト例 / エッジケース #6/#14/#15/#16 / 実データ検証 §1 表ヘッダ + §4 境界検証 / 注意事項 #3 + #14 / 人間検討事項 #2 + #13 + #14 / 影響範囲 03_sys_params キー数 / 実装プロンプト Phase B+C 期間 + キー数 + コミットメッセージ / Step 1 入力 UI イメージ / Step 2 simulateMultiyear params サンプルコード に v1.0/1.1 当時の「採用準備度 / 融資準備度 / SaaS 準備度 3 アクション」記述が残存していたため全面整合化。主要修正: (1) 「採用計画 (正社員 1 名)」UI 入力 → A8 業務委託費 + 元請/委託支払サイト + A7 少額減価償却に置換 (正社員採用は v2+ 延期と明記)。(2) Step 4 サジェスト例の stages.hiring === 'red' → stages.actions.A9 === 'red' (公庫融資準備) + A8 業務委託活用に書き換え・10 アクション分のルール集約方針を追記。(3) 実データ検証 §1 表ヘッダ「採用準備度 / 融資準備度 / SaaS 準備度」→ 「🏦 Liquidity (A9) / 🛡️ Tax & Social / 💰 Accumulation / ⚔️ Scale」+ プログレッシブ・ディスクロージャー注記追加。Y3 「正社員採用 +580 万」→ Y4 「A8 業務委託 +200 万」、Y5 「SaaS 投資 600 万」→ Y4-Y5 「A7 少額減価償却 +50/+280 万」。(4) §4 信号機境界検証を A1 (CF 連続黒字 ≥ 6) / A8 (ランウェイ ≥ 3 + 粗利 ≥ 800 万) / A9 (債務償還年数 ≤ 10 年 + 現預金 ≥ 3 ヶ月) に書き換え。(5) エッジケース #6「採用計画なし」→「業務委託 (A8) 計画なし」、#14「採用 TCO バッファ不足」→「A8 業務委託バッファ不足」、#15「自己資本比率ゼロ除算」→「A9 営業 CF ≤ 0 で _calcDebtRedemptionYears_ 999 サニタイズ」、#16「SaaS 開発費なし」→「A7 CAPEX なし」。(6) 注意事項 #3 default 閾値リストを A1-A10 個別閾値 + A9 v1.2 変更内容に書き換え、#14 マトリクス視認性を「5 × 4 = 20 セル」→「5 × (1+5+10) = 約 80 セル + プログレッシブ・ディスクロージャーで実効段階増加 + 折り畳み軸」に書き換え。(7) 人間検討事項 #2 閾値リストを v1.2 化、#13 集約レイヤー責務から MAS-048 削除 + v2+ 注記、#14 アラート例を A9/Scale 軸に書き換え。(8) 影響範囲 03_sys_params F67_* 10 キー → 14 キーに修正 + キー名列挙。(9) MAS-048 連携先表 / 関連ドキュメント表 / 事前調査リスト 8. / Phase A-3 「MAS-048 を順呼出」を全て v2+ 延期注記に書き換え (削除はせず将来再連携の意図を保存)。(10) 実装プロンプト Phase B 期間 3 → 4 週間 / 8 キー → 14 キー / GuardrailPanel + BurnoutMeter + MAS-236/MAS-240 ヘルパ追加項目明記、Phase C 期間 2 → 3 週間 / 5 種類アクション → A1-A10 10 アクション / MAS-237/MAS-238 ヘルパ追加項目明記。コミットメッセージ Phase B/C を v1.2 拡張内容に書き換え。(11) Step 2 simulateMultiyear ループに evaluateGuardrails / detectFreelanceLawSiteGap / calcBurnoutMeter / detectInvoiceTransitionCliff 呼出 + plan 全体スコープの detectRetirementDeductionConflict / evaluateSafetyNetExitPuzzle を追加。(12) 「現在のコード」セクション 6 案件 → 5 案件に修正 + MAS-048 v2+ 延期注記。v1.2 実装ロジック側 (Step 3 / 5 / 6) は変更なし・spec 内記述の整合性確保のみ・docs-only 改訂で prod 自動デプロイへの影響なし。実装着手準備完了状態は v1.2 と同等 (新規修正は記述整合化のみ)。 |
| 2026-04-27 | v1.2 (MAS-334 Claude 暫定合成 + Gemini Deep Think 精緻化反映) | main 側ユーザーが Gemini Advanced Deep Research → Claude Opus 4.7 暫定合成 → 手元 Gemini 3 Pro Preview Deep Think で批判的精緻化を実行し、当初 v1.0/1.1 の「アクション準備度 3 種 (採用 / 融資 / SaaS 投資)」を 5 軸モデル + 10 アクション + プログレッシブ・ディスクロージャー + ガードレール 10 件 + Section G 5 機能 に再編。レビュー結果保管: docs/_internal/research_prompts/RQ-036_F67_actions_result.md (Section 1: Deep Research 結果プレースホルダー / Section 2: Claude 合成プレースホルダー / Section 3: Gemini Deep Think 精緻化全文 A-G)。主要変更: (1) Step 3 全面書換: 3 アクション (採用/融資/SaaS 投資) → 🏦 Liquidity / 🛡️ Tax & Social / ⚔️ Scale / 💰 Accumulation / 🚪 Exit の 5 軸モデル + A1-A10 + 表示のみ A11 (賃上げ税制)。退職金が「投資」と「出口」で重複していた 6 軸案を 5 軸に整理。プログレッシブ・ディスクロージャー (S1=Liquidity のみ → S2=+Tax&Social+Accumulation → S3=+Scale → S4=+Exit) で経営者メンタルモデル負荷を最小化。最優先ポリシー A/B/C セレクター (A 手取り優先 = 齋藤 Baseline default / B 信用優先 / C 出口優先) で循環参照解消。(2) 新 Step 5 追加: 行為計算否認ガードレール 10 件 UI 表示・各アクションのリスク文言を spec § にハードコード (定期同額給与逸脱 / 法定家賃徴収不足 / カラ出張 / 名板貸し / 短期解約 / 30 万円超過 / フリーランス新法 / 資金使途違反 / 功績倍率過大)。evaluateGuardrails 純粋関数 + GuardrailPanel.tsx 新規。(3) 新 Step 6 追加: Gemini Deep Think 独自必須機能 5 件 — MAS-236 フリーランス新法 60 日支払義務 vs 元請 90 日サイトのキャッシュ枯渇検知 (detectFreelanceLawSiteGap) / MAS-237 退職所得控除「枠の食い合い」5 年/19 年ルール (detectRetirementDeductionConflict) / MAS-238 セーフティ共済 2024.10 改正後の「出口パズル」マッピング (evaluateSafetyNetExitPuzzle) / MAS-239 社長稼働限界 (Burnout) メーター (calcBurnoutMeter・100% 超で🔴+A8 サジェスト) / MAS-240 インボイス 2 割特例 2026/9 終了の崖検知 (detectInvoiceTransitionCliff)。海外 FP&A SaaS 空白で差別化機会大。BurnoutMeter.tsx 新規。(4) A9 公庫融資閾値変更: 自己資本比率 ≥ 30% → 債務償還年数 ≤ 10 年 + 現預金 ≥ 3 ヶ月 (公庫実務乖離を反映・小規模実務感覚に整合)。GAS 実装制約: 営業 CF ≤ 0 で Infinity / NaN 発生 → Math.min(val, 999) サニタイズ必須 (failure_patterns #29)。(5) 新規 03_sys_params キー 14 個に拡張 (旧 10 → 14): F67_DEBT_REDEMPTION_YEARS_MAX / F67_CASH_RUNWAY_MONTHS_MIN / F67_A1-A10 個別閾値 / F67_OPTIMIZATION_POLICY_DEFAULT / F67_BURNOUT_OCCUPANCY_RED_THRESHOLD / F67_INVOICE_TRANSITION_END_DATE。(6) React コンポーネント 5 → 7 に拡張: GuardrailPanel + BurnoutMeter 追加 (Phase B)。Phase 規模拡大: Phase B 3 週間 → 4 週間 / Phase C 2 週間 → 3 週間 (ガードレール + Section G で実装規模約 1.5 倍)。TODO_future.md 連動更新: MAS-067 行全面書換 + MAS-068/MAS-069 新規追加 (P3 降格・1 年後再評価) + MAS-144 規程ジェネレーター P1 起票 (旧提案 MAS-142 から ID 衝突回避で振直し・failure_patterns #31 適用) + MAS-070 マイクロ法人は棄却 (実質所得者課税で否認リスク激増・SaaS 機能として提供不可)。BRD §5.3 v2.3 改訂連動: 「アクション準備度 3 種」→ 5 軸モデル + 10 アクション + プログレッシブ・ディスクロージャー + 最優先ポリシー A/B/C。親族役員化 (A4) 帰属判断: 案 A 確定 = MAS-067 単独で扱う (MAS-066 配当 spec はスコープ外維持)。docs-only PR で prod 自動デプロイへの影響なし。 |
| 2026-04-27 | v1.1 (Gemini レビュー CONDITIONAL GO 反映) | scripts/4_review_specs_by_gemini.js で Gemini 3 Pro Preview + Deep Think レビューを実施し CONDITIONAL GO 指摘 5 件 (Critical 2 + Major 2 + Minor 1) のうち修正完了基準 3 件を反映。レビュー結果: tasks/reviews/2026-04-27T11-34-00_gemini_review_f-67.md (3,196 文字)。Critical 1 (架空関数名): エッジケース 17 / 実装プロンプト Phase D の _callVertexGeminiForF67Suggest_ を 既存の Utils.callGeminiForReasoningOnVertex_ (000_infra/004_utils.js) に修正・failure_patterns #18-#20 (命名造語禁止) 違反を解消。Critical 2 (Infinity scrub の誤認): 注意事項 #9 の「定数自体を Number.MAX_SAFE_INTEGER に書換える」アプローチを撤回 (法人税計算等の他モジュール挙動を破壊するため不可)。代わりに runMultiyearSimulation がクライアントへ返す直前の _scrubInfinityForJSON_(dto) 境界処理 に修正・実装プロンプトに 18 番目のタスクとして追加。サーバー側ロジック (MultiyearPlanner) は Infinity のまま動作させる。Major 1 (車輪の再発明): _loadParamsFromSysParams_ 内部ヘルパを廃止し、ドメインロジック内で直接 Constants.getParam('F67_...', defaultValue) を呼出。simulateMultiyear のサンプルコードを修正・実装プロンプト Phase A の内部ヘルパリストから削除。Major 2 (多重ロード懸念) も併せて反映: simulateMultiyear 冒頭で必要なマスタ・パラメータを一度キャッシュし ctx Context オブジェクトとして各エンジンへ DI する設計に修正 (SocialInsuranceTierRepository.findAsMap / PerDiemPolicyRepository.findAsMap / Constants.INCOME_TAX_BRACKETS / Constants.TAX_RATES を 1 度だけロード)。Minor (資本金固定の将来拡張) は v1.0 の制約として維持 (Phase A スコープ・将来 year-tab UI に増資フィールド追加候補・人間検討事項 v1.2 で正式起票検討)。合格判定: Gemini CONDITIONAL GO 修正完了基準 3 点を全て満たし、実装着手可能状態に昇格。関連ドキュメント: tasks/reviews/2026-04-27T11-34-00_gemini_review_f-67.md を関連ドキュメントセクションに追加 (本 v1.1 で対応)。docs-only 改訂で prod 自動デプロイへの影響なし。 |
| 2026-04-27 | v1.0 (仕様書完了) | 初版作成。task_F-67.md(PR #384 で起草・手動骨格 460 行)を input として Claude Opus 4.7 (1M context) で起草。14 セクション全網羅: 概要 + 目的 + 現在のコード(連携先 6 案件の利用関数表 + 400_domain 採番状況 + MAS-057 Phase 3 SPA 基盤の流用)+ 修正方針 4 Step(Step 1 マルチイヤー入力 + Step 2 B/S 引継ぎ + Step 3 ステージ準備度ダッシュボード + Step 4 サジェストエンジン)+ 影響範囲(新規 7 / 変更 5 / 変更なし 1)+ 注意事項 14 件(MAS-059 完全分離 / B/S 会計整合 / 閾値妥当性 / 計画期間汎用化 / MAS-066 任意連携 / failure_patterns #18-20/25/26/29/31 / Disclaimer / モバイル視認性)+ エッジケース 18 件(B/S 未入力 / 赤字 / 5 年連続赤字 / 分配可能額超過 / Healthy 解なし / 採用なし年 / 配当無効 / 10 年拡張 / サジェスト解なし / Infinity / 厚年資格喪失 / 1 期目配当 / TCO 不足 / 自己資本比率ゼロ除算 / 開発費なし / LLM タイムアウト / race condition)+ 実データ検証 5 本(齋藤 Baseline 5 カ年期待値 / MAS-058/MAS-066/MAS-057 連動整合 / S1-S4 境界判定 / 信号機境界 / F67-01〜F67-18 単体テスト)+ 関連ドキュメント 19 件(BRD / MAS-057/MAS-058/MAS-066/MAS-059 + 連携先 5 案件 + MAS-232 / 財務評価指標ガイド / failure_patterns / dev_spec_prompt_template / PRD / CLAUDE.md)+ 人間検討事項 14 件(計画期間 / 閾値妥当性 / S1-S4 境界判定 / B/S 粒度 / MAS-058 連動 / MAS-066 組込時期 / UI レイアウト / サジェストアルゴリズム / 達成困難扱い / 業種別テンプレート / 計画 vs 実績 / 届出期限 / 集約レイヤー責務 / アラート機構)+ Phase 分割計画 A-D(段階リリース可・Phase A 単独でも価値)+ 実装プロンプト(Claude Opus 4.7 向け・事前調査 14 / 実装対象 17 / 動作確認 7 / failure_patterns チェック 5)+ 推奨実行モデル(Phase A-D + テスト + マイグレーション + レビュー)。3 cockpit 並列提供方針確定(MAS-057 単年 / MAS-067 マルチイヤー / MAS-059 AI 自動)。failure_patterns #31 対策の初回適用事例として、本案件起票時に Phase 1-A-pre(番号衝突チェック・dev_spec_prompt_template v1.10)を適用済(MAS-067 が次空き番号であることを git fetch origin main + grep '| F-[0-9]+ |' で事前確認)。docs-only 改訂で prod 自動デプロイへの影響なし。実装着手は MAS-057 Step 6(3 区分テーブル)+ MAS-058 Step 5(UI/SPA 連携)+ MAS-066 仕様書 v1.0 完成後を推奨(UI フレーム安定 + 配当軸統合の判断材料が揃ってから)。 |