MAS-060: 組織構成シミュレーター(役員 / 従業員 / 業務委託の比率最適化)
概要
| 項目 | 内容 |
|---|---|
| 案件 ID | MAS-060 |
| 案件名 | 組織構成シミュレーター(役員 / 従業員 / 業務委託の比率最適化) |
| カテゴリ | シミュレーション・組織 |
| 優先度 | P2 ★★(SZ-1 → SZ-2 → SZ-3 遷移期の組織ミックス最適化) |
| 所要時間 | 約 1.5 ヶ月(週 10h 前提) |
| 実装ステータス | 📝 仕様書段階・実装未着手 (2026-04-28 監査時点) |
| 対象ファイル(新規) | 400_domain/447_workforce_mix_optimizer.js(純粋関数・組合せ最適化) |
| 対象ファイル(変更) | 000_infra/002_constants.js(MENU_DEFINITION 追加 + WORK_TYPES 定数)/ 400_domain/444_position_template.js(MAS-044 既存・「役職タイプ」次元追加) |
| 新規シート | なし(既存 18_tmpl_hc_position に「役職タイプ」列追加のみ) |
新規 03_sys_params キー | F60_CONTRACTOR_RATIO_MAX(default 0.50 = 業務委託比率上限 50%)/ F60_OFFICER_COMP_MAX_RATIO(default 0.50 = 役員報酬の粗利比上限)/ F60_WAGE_TAX_CREDIT_MIN_HEADCOUNT(default 1 = 賃上げ税制適用最小社員数)/ F60_DISGUISED_CONTRACT_RISK_THRESHOLD(default 3 = 偽装請負リスクスコア上限)/ F60_DEFAULT_BUSINESS_TYPE(default consulting)/ F60_TARGET_HEADCOUNT_DEFAULTS(default 5,10,30)の計 6 キー |
| 前提案件 | MAS-012 必要 HC 総数(📝 仕様書段階・未着手 / 2026-04-28 訂正・実装着手前に MAS-012 完了が必須)/ MAS-044 ポジションテンプレ(✅ 完了)/ MAS-048 採用 TCO(✅ 完了)/ MAS-049 賃上げ税制(✅ 完了)/ MAS-058 必要年商シミュレーター(✅ 完了 v2.1)/ MAS-143 フリーランス新法(📝 仕様書完了) |
| 後続連携 | MAS-057 Solo-CEO Cockpit(代表役員報酬は委譲)/ MAS-059 意思決定ツリー(Tool 登録)/ MAS-061 Cash ETR(税務最適化指数で連携) |
| 吸収・再定義対象 | なし(既存個別役職管理 MAS-012/MAS-044/MAS-048/MAS-049/MAS-057 の比率最適化軸の独立領域) |
目的
企業規模拡大時(SZ-1 → SZ-2 → SZ-3)の組織ミックス最適化を提供する。
既存の MAS-012(人員逆算)/ MAS-044(ポジションテンプレ)/ MAS-048(採用 TCO)/ MAS-049(賃上げ税制)/ MAS-057(社保ロジック・代表役員のみ)はいずれも「個別の役職を扱う」前提で、「役員 / 従業員 / 業務委託の比率最適化」を扱う仕様は空白領域。
世界の海外 FP&A SaaS(Pigment / Causal / Runway)は HC 配分を扱うが、日本の業務委託(インボイス影響・フリーランス新法)と社員(社保適用拡大)の非対称性を扱える製品は不在。本案件は bizlp の差別化機会の追加カードとなる。
SZ-1 → SZ-2 遷移期の経営者が「初採用は正社員 vs 業務委託どちらか / 業務委託 1 名 + 正社員 1 名のミックス効果 / 5 名体制での最適配分」を即座に試算できる体験を提供する。
現在のコード
本案件は MAS-012 で総人員数を、MAS-044 で個別ポジション設計を、MAS-048 で TCO を、MAS-049 で税制控除をそれぞれ計算する既存基盤の 比率最適化レイヤー として実装する。新規ロジックは 7 役職タイプの差分計算 + 組合せ最適化 + リスクスコアリングのみ。
MAS-012 必要 HC 総数(📝 仕様書段階・未着手 / 2026-04-28 訂正)の利用関数
| 関数 | 定義ファイル | 用途 |
|---|---|---|
TargetHeadcount.calc(input) | 400_domain/411_target_headcount.js(未作成・MAS-012 実装着手後に新設) | 売上目標から必要総 HC を逆算 |
⚠️ 2026-04-28 訂正: v1.0 spec で「MAS-012 ✅ 完了」と記載したが、実装監査の結果 400_domain/411_target_headcount.js は未作成・TargetHeadcount 名前空間も未実装と判明。本案件 (MAS-060) 着手前に MAS-012 の実装完了が必須前提となる。MAS-058 は v2.1 で実装完了済のため前提 OK。
MAS-044 ポジションテンプレ(✅ 完了)の利用関数
| 関数 | 定義ファイル | 用途 |
|---|---|---|
PositionTemplateRepository.findAll() | 200_data/202_repository.js(既存) | 18_tmpl_hc_position の全行取得 |
PositionTemplateRepository.findByWorkType(type) | 同(本案件で新設) | 役職タイプフィルタ取得 |
MAS-048 採用 TCO(✅ 完了)の利用関数
| 関数 | 定義ファイル | 用途 |
|---|---|---|
HiringTcoSimulator.calc(input) | 400_domain/412_hiring_tco_simulator.js(既存) | 1 ポジションの採用 TCO 計算 |
HiringTcoSimulator.calcBep(input) | 同 | 1 ポジションの BEP 計算 |
MAS-049 賃上げ税制(✅ 完了)の利用関数
| 関数 | 定義ファイル | 用途 |
|---|---|---|
WageTaxCreditSimulator.calc(input) | 400_domain/414_wage_tax_credit_simulator.js(既存) | 給与増加額の控除算出(業務委託除外) |
MAS-057 Solo-CEO Cockpit / MAS-058 必要年商(前提)
代表役員の社保ロジックは MAS-057 SocialInsuranceTierEngine に委譲。コスト合計から必要年商再計算は MAS-058 RequiredRevenueSolver を呼出。
MAS-143 フリーランス新法(📝 仕様書完了)
業務委託のリスクスコア(労務管理研究所等のチェックリストベース)を MAS-143 から参照。実装着手前に MAS-143 の RiskScoreEngine 関数シグネチャを確認。
修正方針
Step 1 — 役職タイプ 7 種データモデル
| # | 役職タイプ | 識別子 | コスト構造 | リスク要素 |
|---|---|---|---|---|
| 1 | 代表役員 | representative_officer | 役員報酬 + 法人社保 + 法定福利費 | 過大役員給与認定 |
| 2 | その他役員 | other_officer | 同上 + 取締役会対応・株主総会 | 同上 |
| 3 | 正社員 | full_time_employee | 給与 + 社保 + 雇保 + 退職金引当 + 採用 | 解雇規制 |
| 4 | 契約社員 | contract_employee | 同上短期 + 5 年無期転換ルール | 5 年無期転換 |
| 5 | 業務委託(個人) | contractor_individual | 外注費(社保なし)+ インボイス影響 | 偽装請負・フリーランス新法 MAS-143 |
| 6 | 業務委託(法人) | contractor_corporate | 同上 + インボイス T 番号控除 | 同上(軽減) |
| 7 | アルバイト・パート | part_time | 時給 × 時間 + 130/106 万の壁 | 社保適用拡大 |
Constants.WORK_TYPES に 7 値を定数化し、18_tmpl_hc_position に「役職タイプ」列追加。マイグレーション 8XX_migration_f60_work_type.js で既存ポジションを full_time_employee で初期化。
Step 2 — 役職別コスト構造の差分計算
// 400_domain/447_workforce_mix_optimizer.js (純粋関数 + IIFE 名前空間)
var WorkforceMixOptimizer = (function () {
/**
* @param {string} workType 役職タイプ識別子
* @param {number} grossComp 額面報酬(年額)
* @param {Object} options 業態・年齢等の追加パラメータ
* @returns {{totalCost, breakdown, taxCreditEligible, riskFactors}}
*/
function computeRoleCost(workType, grossComp, options) {
switch (workType) {
case 'representative_officer':
case 'other_officer':
return _computeOfficerCost_(grossComp, options);
case 'full_time_employee':
case 'contract_employee':
return _computeEmployeeCost_(workType, grossComp, options);
case 'contractor_individual':
case 'contractor_corporate':
return _computeContractorCost_(workType, grossComp, options);
case 'part_time':
return _computePartTimeCost_(grossComp, options);
default:
throw new Error('Unknown workType: ' + workType);
}
}
return { computeRoleCost: computeRoleCost /* 他 */ };
})();
各 _compute*Cost_ は MAS-048 HiringTcoSimulator / MAS-057 SocialInsuranceTierEngine を順呼び出し。業務委託のインボイス控除と社員の社保負担の非対称性を spec 内テーブル化(spec §実データ検証 §1)。
Step 3 — 組合せ最適化アルゴリズム
7 役職タイプ × N 名 × Y1-Y5 各年の組合せは指数的に膨らむため、現実的な制約付き最適化を採用:
| アプローチ | 探索範囲 | 計算量 | 採用判断 |
|---|---|---|---|
| 探索的(全パターン総当たり) | 7^N(N=5 で 16,807 / N=10 で 282 億) | O(7^N)・GAS 6 分制限突破 | N≤5 のみ |
| 発見的(ヒューリスティック) | 業態別 default ミックス + ローカル探索 | O(N²) | N>5 で採用 |
| MIP ソルバー | 線形整数計画 | 外部ライブラリ必須 | 外部 SaaS 化(PH-4) |
v1 では発見的アプローチ採用: 業態別 default ミックス(コンサル / SaaS / 物販)からスタートし、各役職を ±1 名スライドして制約充足を確認するローカル探索。N≤5 の場合のみ全パターン総当たり(網羅性検証用)。
Step 4 — 3 段階推奨ミックス出力
MAS-058 spec の「3 段階出力(Min/Healthy/Buffered)」と並列対称な構造(failure_patterns #25)。
| レベル | 定義 | 特徴 | 推奨ペルソナ |
|---|---|---|---|
| 保守型 | 社員多め・固定費高・低リスク | 解雇規制で雇用安定 / 賃上げ税制活用 / 業務委託 ≤ 20% | 法令遵守重視・採用重視 |
| バランス型(推奨) | 業態 default + リスク制約遵守 | 業務委託 30-40% / 賃上げ税制適用範囲確保 | 標準パターン |
| アグレッシブ型 | 業務委託多め・変動費高・スピード優先 | 業務委託 ≥ 50%(F60_CONTRACTOR_RATIO_MAX)/ 偽装請負リスク警告併発 | スタートアップ・短期スパート |
各レベルで以下を出力:
| 出力項目 | 内容 |
|---|---|
| コスト合計 | 年間総コスト(社保・退職金・賃上げ控除考慮後) |
| 月別 CF 影響 | 採用月別の CF impact(MAS-048 連携) |
| 税務最適化指数 | MAS-049 賃上げ控除額 + MAS-061 連携時の Cash ETR 改善幅 |
| リスクスコア | 偽装請負 + 解雇規制 + 社保適用拡大の合算スコア |
| 必要売上 | MAS-058 連携で再計算(コスト合計 → 必要年商) |
Step 5 — リスクスコア(偽装請負 + フリーランス新法 + 解雇規制)
| リスク要素 | 計算式 | 重み |
|---|---|---|
| 偽装請負(個人業委) | MAS-143 RiskScoreEngine.calc(role) の労働者性 6 要素スコア | 3.0 |
| フリーランス新法違反 | 契約書未締結 / 60 日超支払 / ハラスメント等 | 2.5 |
| 解雇規制(正社員) | 解雇 4 要件不充足の蓋然性 | 1.5 |
| 社保適用拡大(パート) | 週 20h 超 / 月給 8.8 万円超 / 学生除外 | 1.0 |
合算スコア > F60_DISGUISED_CONTRACT_RISK_THRESHOLD(default 3.0)で アグレッシブ型から自動除外 + UI 警告表示。
影響範囲
| 対象 | 種別 | 変更内容 | リスク |
|---|---|---|---|
400_domain/447_workforce_mix_optimizer.js | 追加 | WorkforceMixOptimizer.optimize() + 内部ヘルパ群(純粋関数・約 300 行) | MAS-012/MAS-044/MAS-048/MAS-049/MAS-057/MAS-058 を呼出するのみ・既存ロジックへの影響なし |
400_domain/444_position_template.js | 変更 | PositionTemplateRepository.findByWorkType(type) 追加 | 既存 findAll() はそのまま・後方互換 |
100_config/101_sys_config.js | 変更 | 18_tmpl_hc_position DDL に「役職タイプ」列追加(7 値 enum) | 既存ポジションは default full_time_employee で初期化 |
000_infra/002_constants.js | 変更 | MENU_DEFINITION に「👥 組織構成シミュレーション」追加 + WORK_TYPES 定数追加 | 既存メニューに影響なし |
03_sys_params | 変更 | 6 キー追加(F60_*)。Constants.getParam 経由で読込・default fallback あり | シード未実行でも default 値で動作 |
8XX_migration_f60_work_type.js | 追加 | 既存 18_tmpl_hc_position 行を full_time_employee で初期化(冪等) | 一度実行すればスキップ |
98_sim_workforce_mix(新設・DDL 外) | 追加 | 実行時に動的生成・3 段階推奨ミックス結果を書き出す出力シート | 既存シートに影響なし |
900_test/901_test_runner.js | 変更 | MAS-060 単体テスト F60-01〜F60-13 追加 | 既存テストへの影響なし |
| MAS-044 PositionTemplate | 後方互換性維持 | 「役職タイプ」列追加はマイグレーションで初期化 | MAS-044 既存 UI / 計算ロジックは default 値で動作 |
| appsscript.json | 変更なし | OAuth スコープ追加不要 | failure_patterns #26 遵守 |
注意事項
業務委託の偽装請負リスクは法令違反リスク: 労働者性 6 要素(指揮命令・専属性・代替性・場所拘束・時間拘束・報酬性質)で偽装請負認定されると 労働基準監督署の是正勧告 + 過去 2 年分の社保追徴 + 損害賠償責任。spec はリスクスコア化で警告するが、最終判断は社労士相談を必須として UI 上に明記。
フリーランス新法 MAS-143 連携必須: 2024-11 施行。契約書面交付義務 / 60 日以内支払義務 / ハラスメント禁止 / 育児介護配慮義務 等。MAS-143 の RiskScoreEngine を直接呼出。MAS-143 未実装時は spec 上で警告メッセージのみ表示(計算ロジックは MAS-143 完了後)。
賃上げ税制適用範囲(業務委託除外): 賃上げ控除の分母分子は 正社員 + 契約社員のみ。業務委託は除外。MAS-049 既存ロジックの集計境界を本案件で再確認 + 単体テスト F60-09 で検証。
MAS-044 PositionTemplate の後方互換性: 「役職タイプ」列追加で既存 MAS-044 UI が壊れないことを確認。マイグレーション実行後に MAS-044 の何も入力されていないポジションが
full_time_employeeで表示されることを実機検証。アルバイト・パートの 130/106 万の壁: 配偶者特別控除の壁(130 万)と社保適用拡大の壁(106 万)は spec 上で明示。「壁を超えるとパート本人 + 雇用主の双方に税・社保コスト追加」を UI 警告で表示。
5 年無期転換ルール(労契法 18 条): 契約社員 5 年経過時の無期転換申込権発生。spec は契約開始日から 5 年マイナス 6 ヶ月で警告アラートを出す。
8XX_migration_f60_work_type.jsで既存契約社員の契約開始日を取得できるかは要確認。役員報酬上限率の根拠:
F60_OFFICER_COMP_MAX_RATIO(default 50% of 粗利)は MAS-058 注意事項 #6 の「労働分配率 65% 上限・コンサル業」と整合。役員報酬は粗利の 50% を超えると過大役員給与認定リスク段階に入る spec 整合性。failure_patterns #25 遵守(並列実装対称性): MAS-058 の 3 段階出力(Min/Healthy/Buffered)と並列対称な構造(保守型/バランス型/アグレッシブ型)。MAS-058 の
RequiredRevenueSolver↔WorkforceMixOptimizerの Repository パターンも対称。failure_patterns #18-#20 遵守(命名造語禁止): 関数名
optimize/computeRoleCostは既存命名と整合(動詞 + 目的語)。workTypeは「役職タイプ」の英訳・既存 enum パターン。Read で既存ファイルに同名関数がないことを着手時に裏取り。failure_patterns #26 遵守:
appsscript.jsonの OAuth スコープは変更不要(既存スコープ内で完結)。MAS-012 必要 HC 総数との整合: MAS-012 で算出した必要総 HC を本案件の総人数制約として受け取る。MAS-012 が
5 名を返したら本案件は合計 5 名のミックスを最適化する。MAS-012 と本案件の入力次元の境界を spec で明示。MAS-058 必要年商との往復: コスト合計 → MAS-058 に渡し → 必要年商再計算 → MAS-012 で必要 HC 再算出 → 本案件で再ミックス、という反復ループの収束保証。通常 2-3 反復で収束を期待値とし、5 反復超で警告 + 手動介入を促す。
アグレッシブ型のデフォルト無効化判断: リスクスコア > 閾値で自動除外する仕様だが、ユーザーが「リスクを承知で見たい」場合の override 機構を
F60_FORCE_AGGRESSIVE_MODEで提供するか、UI 上の手動 override に留めるか(spec は後者・UI 上の警告承諾チェックボックス)。ID 採番の整合性: 役職タイプ 7 値の enum 識別子は
Constants.WORK_TYPESで集中管理。今後の拡張(例: 顧問・社外取締役)時は enum を破壊的変更せず追加で対応。賃上げ税制適用閾値:
F60_WAGE_TAX_CREDIT_MIN_HEADCOUNT(default 1)= 適用最小社員数。1 名でも社員がいれば賃上げ税制が適用可能(中小企業向け)。業務委託のみの組織は賃上げ税制適用不可を spec で明示。
エッジケース
| # | 条件 | 期待される挙動 | 理由・ログ出力 |
|---|---|---|---|
| 1 | 業務委託 100%(全員 contractor_individual) | アグレッシブ型のみ提示・偽装請負リスク警告 + 賃上げ税制適用不可コメント | MAS-049 控除ゼロ・組織継続性リスク |
| 2 | アルバイト 130 万の壁ジャスト | 「壁を超えると配偶者特別控除消失 X 円」警告 + 106 万の壁との比較 | 配偶者税制連動 |
| 3 | アルバイト 106 万の壁ジャスト + 週 20h 超 | 社保適用拡大対象 + 雇用主負担追加コメント | パート社保適用拡大対応 |
| 4 | 契約社員 5 年経過直前(契約開始日 - 5 年 - 6 ヶ月) | 「無期転換申込権発生 X ヶ月後」警告 | 労契法 18 条対応 |
| 5 | 役員報酬上限率(粗利 50%)超過提案 | 提案リストから自動除外 + WARN ログ | 過大役員給与認定リスク |
| 6 | MAS-058 必要年商再計算で発散(5 反復超) | 警告 + 手動介入 UI | 注意事項 #12 の収束保証 |
| 7 | MAS-143 未実装時の業務委託提案 | リスクスコア計算スキップ + 「MAS-143 実装後に詳細スコア提供」コメント | 段階的実装対応 |
| 8 | MAS-012 必要 HC が 0(赤字フェーズで採用不可) | 「現状維持(代表 1 名のみ)」のみ提示 | MAS-012 連動の自然な挙動 |
| 9 | 賃上げ税制集計境界の業務委託混入チェック | 業務委託は分母分子から除外 + テスト F60-09 で網羅 | MAS-049 既存ロジック整合 |
| 10 | アグレッシブ型でリスクスコア > 閾値 | 自動除外 + UI 上の警告承諾チェックボックスで override 可 | 注意事項 #13 のリスク承諾フロー |
| 11 | 03_sys_params の F60_* キーが範囲外 | 起動時バリデーション: 範囲外なら default で上書き + WARN ログ | ユーザー誤設定対策 |
| 12 | 役職タイプ未割当の既存 18_tmpl_hc_position 行 | full_time_employee 扱いに fallback + 1 行 WARN ログ | 防御的プログラミング・後方互換性 |
| 13 | フリーランス新法発効前の旧契約 | spec は新法準拠で警告・既存契約は移行猶予期間表示 | 法令施行日との整合 |
実データ検証
1. 齋藤現状 1 名 → SZ-2 5 名遷移期の試算
実装完了後に以下を 901_test_runner.js で自動検証し、±10% 以内で一致を合格基準とする(組織ミックスは推計幅が広いため許容)。
| 規模 | 業態 | 保守型 | バランス型(推奨) | アグレッシブ型 |
|---|---|---|---|---|
| 5 名 | コンサル | 代 1 + 正 4(業務委託 0%) | 代 1 + 正 3 + 業委 1(業務委託 20%) | 代 1 + 正 2 + 業委 2(業務委託 40%) |
| 10 名 | コンサル | 代 1 + 正 7 + 契 2(業委 0%) | 代 1 + 正 6 + 業委 3(業委 30%) | 代 1 + 正 4 + 業委 5(業委 50%) |
| 30 名 | SaaS | 代 2 + 正 25 + 契 3(業委 0%) | 代 2 + 正 18 + 業委 10(業委 33%) | 代 2 + 正 12 + 業委 16(業委 53% ← 警告) |
2. 役職別コスト構造の差分検証
齋藤 Baseline(年額 800 万コスト相当)で各役職タイプの実コストを算出:
| 役職タイプ | 額面 | 法人負担社保 | インボイス影響 | 実コスト |
|---|---|---|---|---|
| 正社員 | 580 万 | +14% (81 万) | — | 661 万 + 採用 100 万 = 761 万 |
| 業委個人 | 800 万 | 0 | -2% (16 万 / インボイス未対応時) | 784 万 |
| 業委法人 | 800 万 | 0 | 0% (T 番号控除) | 800 万 |
| パート | 130 万 | -1% (1 万) | — | 129 万 + 雇保 1 万 = 130 万 |
3. MAS-058 必要年商再計算の整合性
5 名コンサル組織のバランス型コスト(代 1: 800 + 正 3: 580×3 + 業委 1: 800 = 3,340 万)+ 固定費 240 万 → MAS-058 で必要年商 Healthy = 約 4,500 万を期待。
4. 賃上げ税制適用範囲の検証(MAS-049 整合)
正社員 3 名の給与増加 30 万 → MAS-049 控除 4.5 万。業務委託 1 名の業務委託料増加 30 万は控除対象外(MAS-049 集計範囲確認)。
5. エッジケース検証(単体テスト F60-01〜F60-13)
エッジケースセクションの 13 項目それぞれを 1 テストケースとして 901_test_runner.js に追加。
関連ドキュメント
| カテゴリ | ドキュメント | 関係 |
|---|---|---|
| MAS-012 必要 HC 総数 | dev_mas-012_headcount_simulation.md | 必要総 HC を本案件の総人数制約として受け取る |
| MAS-044 ポジションテンプレ | dev_mas-044_hc_template_master.md | 「役職タイプ」次元追加・後方互換性維持 |
| MAS-048 採用 TCO | dev_mas-048_hiring_tco_bep_simulator.md | 役職別 TCO 計算を委譲 |
| MAS-049 賃上げ税制 | dev_mas-049_wage_increase_tax_credit_simulator.md | 賃上げ控除算出(業務委託除外) |
| MAS-057 Solo-CEO Cockpit | dev_mas-057_solo_ceo_cockpit.md | 代表役員社保ロジックを委譲 |
| MAS-058 必要年商シミュレーター | dev_mas-058_required_revenue_solver.md | 3 段階出力の並列対称構造手本 + コスト合計 → 必要年商再計算 |
| MAS-059 意思決定ツリー | dev_mas-059_growth_planning_workspace.md | MAS-060 を Tool として呼び出し連鎖オーケストレーション |
| MAS-061 Cash ETR | dev_mas-061_cash_etr_tracking.md | 税務最適化指数の連携先 |
| MAS-143 フリーランス新法 | dev_mas-143_*.md | 業務委託リスクスコア参照 |
| use_cases.md BZ-1〜BZ-5 | use_cases.md | 業態別 default ミックスの根拠 |
| use_cases.md SZ-1〜SZ-3 | use_cases.md | 規模遷移期のシミュレーションシナリオ |
| PRD プロダクトポリシー | prd.md | Human-in-the-Loop 原則(最終採用判断はユーザー) |
| 失敗パターン | failure_patterns.md | 特に #18-#20(命名造語)/ #25(並列実装対称性)/ #26(oauthScopes) |
| CLAUDE.md | CLAUDE.md | プロジェクトルール・GAS ファイル番号体系・コーディング規約 |
人間が検討すべき事項
役職タイプ 7 種の細分化粒度: アルバイトは含めるか・契約社員と正社員を分けるか。spec は 7 種採用したが、「顧問」「社外取締役」を将来追加する際の拡張性。
業務委託の偽装請負リスクスコアの定量化方法: 労務管理研究所等のチェックリストをスコア化するか。MAS-143 の RiskScoreEngine 仕様確定後に整合性再検証必須。
最適化アルゴリズム(探索的 vs 発見的): spec は N≤5 で探索的・N>5 で発見的。実装時に GAS 6 分制限の境界を実機検証して閾値調整。
MAS-044 ポジションテンプレへの「役職タイプ」次元追加の後方互換性: マイグレーション実行で既存 MAS-044 UI が壊れないか実機検証。default
full_time_employeeの妥当性。賃上げ税制適用範囲の集計境界(業務委託除外明示): spec で明示したが MAS-049 実装側との整合性チェックを単体テスト F60-09 で必須化。
フリーランス新法(MAS-143)の発効日と仕様反映タイミング: 2024-11 施行済。MAS-143 仕様書完了済だが実装は未。本案件着手時点で MAS-143 が実装完了しているか前提確認。
MAS-059 意思決定ツリーへの Tool 登録時の HITL 強制条件: 採用 1 名以上で強制 HITL 維持か。MAS-059 spec の HITL 設計と整合性確認。
商用化時のマルチテナント対応: テナント別の業種・規模プリセット(MAS-219 ADR-0009 連携)。SaaS / 物販 / 製造業の業態追加時のテンプレート設計。
アグレッシブ型のリスク承諾フロー: UI 上の警告承諾チェックボックスで override 可とするか、
F60_FORCE_AGGRESSIVE_MODEflag で制御するか。5 年無期転換ルールの判定精度: 契約開始日が 18_tmpl_hc_position に保存されているか確認。未保存なら DDL 拡張が追加で必要。
役員報酬上限率(粗利 50%)の業態別調整: コンサル業前提。SaaS / 物販等で異なる可能性。
03_sys_paramsのテナント別オーバーライド機構を v2 で検討。MENU 配置カテゴリ: 「📊 マート更新」配下 vs 新規カテゴリ「🎯 組織設計」。MAS-012/MAS-048 の他シミュレーション系との並びで要判断。
実装プロンプト(Claude Code 用)
Claude Opus 4.7(1M context)推奨。組合せ最適化アルゴリズム + 6 既存エンジン結合 + リスクスコア法的設計の複合判断。
## 案件
MAS-060 — 組織構成シミュレーター(役員 / 従業員 / 業務委託の比率最適化)
## 事前調査(必ず Read する)
1. `docs/dev/dev_mas-060_workforce_mix_optimizer.md` 全文(本仕様書)
2. `docs/dev/dev_mas-012_headcount_simulation.md` 全文
3. `docs/dev/dev_mas-044_hc_template_master.md` 全文
4. `docs/dev/dev_mas-048_hiring_tco_bep_simulator.md` 全文
5. `docs/dev/dev_mas-049_wage_increase_tax_credit_simulator.md` 全文
6. `docs/dev/dev_mas-057_solo_ceo_cockpit.md` Phase 1/1.5 関数シグネチャ
7. `docs/dev/dev_mas-058_required_revenue_solver.md` 3 段階出力パターン
8. `docs/dev/dev_mas-143_freelance_law.md` RiskScoreEngine 仕様
9. `400_domain/411_target_headcount.js` / `412_hiring_tco_simulator.js` /
`414_wage_tax_credit_simulator.js` / `442_social_insurance_tier_engine.js`
10. `200_data/202_repository.js` PositionTemplateRepository 実装
11. `docs/_internal/failure_patterns.md` #18-#20 / #25 / #26
## 実装対象
1. `400_domain/447_workforce_mix_optimizer.js` 新規(IIFE 名前空間 WorkforceMixOptimizer):
- optimize(input) — メイン API(3 段階推奨ミックス出力)
- computeRoleCost(workType, grossComp, options) — 役職別コスト計算
- calcRiskScore(mix) — リスクスコア合算
- 内部ヘルパ群(_computeOfficerCost_ / _computeEmployeeCost_ /
_computeContractorCost_ / _computePartTimeCost_ / _heuristicSearch_ / _bruteForceSearch_)
2. `400_domain/444_position_template.js` 拡張:
- PositionTemplateRepository.findByWorkType(type) 追加
3. `100_config/101_sys_config.js` 拡張:
- 18_tmpl_hc_position DDL に「役職タイプ」列追加(7 値 enum)
4. `8XX_migration_f60_work_type.js` 新規(番号は `ls 800_ops/` で次番取得):
- 既存 18_tmpl_hc_position 行を「役職タイプ」= full_time_employee で初期化(冪等)
5. `000_infra/002_constants.js` 拡張:
- WORK_TYPES 定数追加(7 値 enum)
- MENU_DEFINITION に「👥 組織構成シミュレーション」追加
6. `03_sys_params` の 6 キー追加(default は Constants.getParam の第 2 引数)
7. `900_test/901_test_runner.js` に F60-01〜F60-13 単体テスト
## 動作確認
1. 5/10/30 名規模 × 3 業態で 3 段階推奨ミックスが ±10% 以内
2. 役職別コスト構造の差分(社員 vs 業委 vs パート)が期待値一致
3. MAS-058 必要年商再計算の整合性(収束 2-3 反復)
4. MAS-049 賃上げ税制適用範囲(業務委託除外)の整合性
5. エッジケース 13 項目すべて想定通り
## デプロイ
1. dev で push:dev → メニュー「👥 組織構成シミュレーション」実行 → 98_sim_workforce_mix 確認
2. Go なら push:prod
3. コミット: feat(MAS-060): 組織構成シミュレーター (3 段階推奨ミックス + 偽装請負リスクスコア)
## failure_patterns チェック
- #18-#20: WorkforceMixOptimizer / computeRoleCost を Read で裏取り
- #25: MAS-058 3 段階出力と並列対称(保守/バランス/アグレッシブ)+ Repository パターン対称
- #26: appsscript.json は変更なし
推奨実行モデル
| 工程 | 推奨モデル | 根拠 |
|---|---|---|
| Phase 1 WorkforceMixOptimizer コア(役職別コスト + 発見的最適化) | Claude Opus 4.7 (1M context) | 6 既存エンジン結合 + 組合せ最適化アルゴリズム設計 |
| Phase 2 リスクスコア(偽装請負・フリーランス新法・解雇規制) | Claude Opus 4.7 (1M context) | 法的設計の複合判断 |
| Phase 3 MAS-044 PositionTemplate 後方互換性 + マイグレーション | Claude Sonnet 4.6 | 800_ops 既存パターン流用 |
| Phase 4 3 段階推奨ミックス出力 + 98_sim_workforce_mix | Claude Sonnet 4.6 | MAS-058 パターン流用 |
| Phase 5 MAS-058 必要年商再計算ループ + 収束保証 | Claude Opus 4.7 (1M context) | 反復ループの収束判定 |
| 単体テスト実装(F60-01〜F60-13) | Claude Sonnet 4.6 | パターン化された期待値検証 |
| 仕様書レビュー | Gemini 3 Pro Preview + Deep Think | 第三者視点での法的リスク検証 + 組合せ最適化アルゴリズム検証 |
変更履歴
| 日時 | バージョン | 変更内容 |
|---|---|---|
| 2026-04-27 | v0.1 (骨組み) | 初版骨組み作成。全セクション見出し + 概要テーブルのみ。ai_agent_tips.md §6 の章単位生成方針を準用。 |
| 2026-04-27 | v0.2 (本体) | 現在のコード(MAS-012/MAS-044/MAS-048/MAS-049/MAS-057/MAS-058/MAS-143 利用関数 8 個)+ 修正方針 5 Step 本文(Step 1 役職タイプ 7 種データモデル / Step 2 役職別コスト構造の差分計算 / Step 3 組合せ最適化アルゴリズム(探索的 vs 発見的) / Step 4 3 段階推奨ミックス出力 / Step 5 リスクスコア(偽装請負 + フリーランス新法 + 解雇規制))。JavaScript 疑似コードで WorkforceMixOptimizer の computeRoleCost を提示。 |
| 2026-04-27 | v0.3 (堅牢化) | 影響範囲テーブル(新規 2 / 変更 6 / 変更なし 2)+ 注意事項 15 項目(偽装請負法令違反 / フリーランス新法 MAS-143 連携 / 賃上げ税制 業委除外 / MAS-044 後方互換 / 130/106 万の壁 / 5 年無期転換 / 役員報酬上限率 / failure_patterns #25/#26 / MAS-012 整合 / MAS-058 往復収束 / アグレッシブ承諾フロー / ID 採番 / 賃上げ税制最小社員数)+ エッジケース 13 パターン(業委 100% / 130 万境界 / 106 万境界 / 5 年経過直前 / 役員報酬超過 / MAS-058 発散 / MAS-143 未実装 / MAS-012 ゼロ / 業委混入 / リスク承諾 等)+ 実データ検証 5 本(5/10/30 名 × 3 業態 / 役職別コスト差分 / MAS-058 必要年商整合 / MAS-049 適用範囲 / F60-01〜F60-13)。 |
| 2026-04-27 | v1.0 (仕様書完了) | 関連ドキュメント 14 件(MAS-012 / MAS-044 / MAS-048 / MAS-049 / MAS-057 / MAS-058 / MAS-059 / MAS-061 / MAS-143 / use_cases.md BZ/SZ / PRD / failure_patterns / CLAUDE.md)+ 人間検討事項 12 項目(役職タイプ細分化 / 偽装請負スコア / 最適化アルゴ / MAS-044 後方互換 / 賃上げ集計境界 / MAS-143 発効日 / MAS-059 HITL / マルチテナント / アグレッシブ承諾 / 5 年判定精度 / 役員報酬業態別 / MENU 配置)+ 実装プロンプト(Claude Opus 4.7 向け・事前調査 11 / 実装対象 7 / 動作確認 5 / failure_patterns チェック)+ 推奨実行モデル(Phase 1-5 + テスト + レビュー)。仕様書完了(v1.0)として昇格。前提案件は揃っているため MAS-058 実装後に着手可能。MAS-059 意思決定ツリーとは並行起草可能(MAS-059 が MAS-060 を Tool として呼び出す関係)。 |
| 2026-04-28 | v1.1 (前提案件ステータス訂正・MAS-067 v2 統合判断追記) | 実装監査の結果、v1.0 で「MAS-012 ✅ 完了」と記載していたが MAS-012 は仕様書段階・未着手 (400_domain/411_target_headcount.js 未作成・TargetHeadcount 名前空間未実装) と判明したため訂正。概要表 + 「MAS-012 利用関数」セクションのステータスを「📝 仕様書段階・未着手」に修正 + ⚠️ 警告コメント追加。MAS-058 は v2.1 で実装完了済のため「📝 仕様書完了 v1.1」→「✅ 完了 v2.1」に修正。実装着手前に MAS-012 の実装完了が必須前提となる旨を明記。併せて MAS-067 v2 (正社員採用ステージ判定) との統合判断: MAS-067 spec 人間検討事項 #15 (PR #405) で 分離パス を推奨確定済 — MAS-060 は単年内のミックス最適化、MAS-067 v2 は年次連結のステージ判定で住み分け。MAS-067 v2 が MAS-060 を年次で呼出すアグリゲータ構造とする (MAS-067 v1 が MAS-058 を年次で呼ぶ構造と対称)。docs-only 改訂で prod 自動デプロイへの影響なし。 |