概要

項目内容
案件 IDMAS-141
案件名節税・共済効果シミュレーター(小規模企業共済 + 経営セーフティ共済・D.8 派生)
カテゴリシミュレーション・節税
優先度P1.5 ★★★(一人法人の最重要節税手段の定量化・MAS-057 BRD 必須サブコンポーネント)
所要時間約 1.0 ヶ月(週 10h 前提)
実装ステータス📝 仕様書段階・実装未着手 (2026-04-28 監査時点)
対象ファイル(新規)400_domain/451_tax_saving_simulator.js(純粋関数・TaxSavingSimulator 名前空間)
対象ファイル(変更)000_infra/002_constants.jsMENU_DEFINITION 追加)/ 300_ui/301_ui_assist.js(サイドバーエントリ追加)
新規シートなし(既存 03_sys_params にキー追加のみ)
新規 03_sys_params キーS69_KYOSAI_PERSONAL_MIN_MONTHLY(default 1,000 = 月 1 千円)/ S69_KYOSAI_PERSONAL_MAX_MONTHLY(default 70,000 = 月 7 万)/ S69_KYOSAI_PERSONAL_STEP(default 1,000 = 千円刻み)/ S69_KYOSAI_BIZ_MIN_MONTHLY(default 5,000 = 月 5 千円)/ S69_KYOSAI_BIZ_MAX_MONTHLY(default 200,000 = 月 20 万)/ S69_KYOSAI_BIZ_TOTAL_CAP(default 8,000,000 = 積立上限 800 万)/ S69_BIZ_REJOIN_RESTRICTION_YEARS(default 2 = 2024-10 改正の解約後再加入制限)/ S69_DEFAULT_RECOMMENDATION_MODE(default balanced)の計 8 キー
前提案件MAS-057 Phase 1/1.5(✅ 完了・PersonalTaxEngine 利用)/ Constants.TAX_RATES(既存・法人税ブラケット)/ Constants.INCOME_TAX_BRACKETS(MAS-057 Phase 1 で新設済)
後続連携MAS-061 Cash ETR(合法節税優先順位サジェストに統合)/ MAS-058 必要年商シミュレーター(共済掛金を固定費に算入してリトライ)/ MAS-056 対話 UI(Tool 登録)
吸収・再定義対象なし(個別節税案件 MAS-041 繰越欠損金 / MAS-049 賃上げ税制と並列の独立領域)

目的

1 人法人の最重要節税手段を定量化し、最適掛金設定を支援する。

小規模企業共済(掛金上限月 7 万円・年 84 万円・全額所得控除)と経営セーフティ共済(月 20 万円・年 240 万円・全額損金算入・積立上限 800 万円)を対象に、想定当期利益・役員報酬・掛金から法人税・所得税の軽減額を計算する。掛金 0 〜上限のスキャンで「限界節税額」一覧を提示し、ユーザーが手元資金の最大化と現預金拘束のトレードオフを即座に判断できる。

MAS-041(繰越欠損金)/ MAS-049(賃上げ税制)は法人税額控除、本案件は役員個人の所得控除を含む複合節税シミュレーションで、より包括的な「税引後キャッシュ最大化」を扱う。MAS-057 BRD §6 UX 戦略の「共済積立額スライダー」を実装する基盤となる。

現在のコード

本案件は MAS-057 Phase 1/1.5 で確立した PersonalTaxEngine を順呼び出して、共済掛金を所得控除(個人)/ 損金算入(法人)に算入した状態の税額差分を算出するアグリゲータ。新規ロジックは共済 2 種の制度パラメータ管理 + スキャン + 出口リスク警告のみ。

MAS-057 Phase 1(✅ 完了)の利用関数

関数定義ファイル用途
PersonalTaxEngine.calcIncomeTax(taxableIncome)400_domain/442_social_insurance_tier_engine.js:280個人所得税(累進・1000/100 円 floor)
PersonalTaxEngine.calcResidentTax(taxableIncome)同:306住民税 10%
Constants.INCOME_TAX_BRACKETS.brackets000_infra/002_constants.js個人所得税ブラケット(5-45%)
Constants.TAX_RATES.brackets同:22法人税累進(軽減 15% / 標準 23.2%)
Constants.getParam(key, default)同:167S69_* パラメータ取得

法定実効税率(既存・本案件で参照)

法人税合算実効税率は約 34%(軽減区分は約 22%)。本案件は実際の課税所得ベースで Constants.TAX_RATES を順呼び出して個別計算する(平均実効税率近似ではなく累進ベース正確算出)。

MAS-061 Cash ETR(仕様書完了・本案件と相互参照)

MAS-061 の「合法節税優先順位サジェスト」が本案件の simulateScan 結果を呼び出して優先順位リストに統合。MAS-141 が共済 2 種の効果を spec の責任範囲、MAS-061 が複数節税策の統合スコアリング という役割分担。

修正方針

Step 1 — 共済 2 種の制度パラメータ集中管理

制度掛金範囲上限損金/控除区分解約時税務
小規模企業共済月 1,000 〜 70,000 円(千円刻み)年 84 万個人所得控除(全額・所得税 + 住民税)退職所得 or 一時所得(受取時課税)
経営セーフティ共済月 5,000 〜 200,000 円(5,000 円刻み)年 240 万 / 積立 800 万法人損金算入(全額・法人税)解約手当金が益金算入(出口リスク)

2024-10 改正の重要ポイント: 経営セーフティ共済を解約後 2 年以内に再加入した場合は損金算入不可S69_BIZ_REJOIN_RESTRICTION_YEARS = 2)。spec 上で警告表示必須。

// 03_sys_params 経由で読込(年次更新時に変更可能)
var KYOSAI_PERSONAL = {
  minMonthly: Constants.getParam('S69_KYOSAI_PERSONAL_MIN_MONTHLY', 1000),
  maxMonthly: Constants.getParam('S69_KYOSAI_PERSONAL_MAX_MONTHLY', 70000),
  step:        Constants.getParam('S69_KYOSAI_PERSONAL_STEP', 1000),
};
var KYOSAI_BIZ = {
  minMonthly: Constants.getParam('S69_KYOSAI_BIZ_MIN_MONTHLY', 5000),
  maxMonthly: Constants.getParam('S69_KYOSAI_BIZ_MAX_MONTHLY', 200000),
  totalCap:   Constants.getParam('S69_KYOSAI_BIZ_TOTAL_CAP', 8000000),
};

Step 2 — 単点シミュレーション(指定掛金での税額差分)

// 400_domain/451_tax_saving_simulator.js (純粋関数 + IIFE 名前空間)

var TaxSavingSimulator = (function () {

  /**
   * @param {Object} input
   * @param {number} input.corporateTaxablePretax  共済掛金算入前の法人税課税所得
   * @param {number} input.officerCompAnnual       役員報酬年額
   * @param {number} input.kyosaiPersonalMonthly   小規模企業共済の月額掛金
   * @param {number} input.kyosaiBizMonthly        経営セーフティ共済の月額掛金
   * @param {number} input.kyosaiBizCumulative     経営セーフティ共済 既積立額
   * @param {boolean} [input.isOver40]             40 歳以上(介護保険料)
   * @returns {{
   *   corporateTaxBefore, corporateTaxAfter, corporateTaxSaving,
   *   personalTaxBefore, personalTaxAfter, personalTaxSaving,
   *   totalSaving, netCashBefore, netCashAfter,
   *   warnings: Array<string>
   * }}
   */
  function simulatePoint(input) {
    var p = _loadParams_();

    // (a) 入力バリデーション + 上限到達チェック
    var warnings = [];
    var bizMonthly = _clampBizMonthly_(input.kyosaiBizMonthly, input.kyosaiBizCumulative, p, warnings);
    var personalMonthly = _clampPersonalMonthly_(input.kyosaiPersonalMonthly, p, warnings);

    // (b) 法人税: セーフティ共済を損金算入した場合の課税所得差分
    var bizAnnual = bizMonthly * 12;
    var corporateTaxableAfter = input.corporateTaxablePretax - bizAnnual;
    var corporateTaxBefore = _calcCorporateTax_(input.corporateTaxablePretax);
    var corporateTaxAfter  = _calcCorporateTax_(corporateTaxableAfter);
    var corporateTaxSaving = corporateTaxBefore - corporateTaxAfter;

    // (c) 個人税: 小規模企業共済を所得控除に算入した場合の差分
    var personalAnnual = personalMonthly * 12;
    var taxableIncomeBefore = _calcTaxableIncomeFromGrossComp_(input.officerCompAnnual, input.isOver40);
    var taxableIncomeAfter  = taxableIncomeBefore - personalAnnual;
    var personalTaxBefore = PersonalTaxEngine.calcIncomeTax(taxableIncomeBefore) +
                            PersonalTaxEngine.calcResidentTax(taxableIncomeBefore);
    var personalTaxAfter  = PersonalTaxEngine.calcIncomeTax(taxableIncomeAfter) +
                            PersonalTaxEngine.calcResidentTax(taxableIncomeAfter);
    var personalTaxSaving = personalTaxBefore - personalTaxAfter;

    return {
      corporateTaxBefore: corporateTaxBefore,
      corporateTaxAfter: corporateTaxAfter,
      corporateTaxSaving: corporateTaxSaving,
      personalTaxBefore: personalTaxBefore,
      personalTaxAfter: personalTaxAfter,
      personalTaxSaving: personalTaxSaving,
      totalSaving: corporateTaxSaving + personalTaxSaving,
      netCashBefore: -bizAnnual - personalAnnual + 0,
      netCashAfter:  -bizAnnual - personalAnnual + (corporateTaxSaving + personalTaxSaving),
      warnings: warnings,
    };
  }

  return { simulatePoint: simulatePoint /* 他 */ };
})();

Step 3 — スキャンシミュレーション(掛金 0 〜上限の限界節税額一覧)

function simulateScan(input, options) {
  var p = _loadParams_();
  var bizSteps = _generateSteps_(p.bizMin, p.bizMax, p.bizStep);             // 例: 0, 5000, 10000, ..., 200000
  var personalSteps = _generateSteps_(p.personalMin, p.personalMax, p.personalStep); // 例: 0, 1000, ..., 70000

  var results = [];
  for (var i = 0; i < bizSteps.length; i++) {
    for (var j = 0; j < personalSteps.length; j++) {
      var single = simulatePoint(_extend_(input, {
        kyosaiBizMonthly: bizSteps[i],
        kyosaiPersonalMonthly: personalSteps[j],
      }));
      results.push({
        bizMonthly: bizSteps[i],
        personalMonthly: personalSteps[j],
        totalSaving: single.totalSaving,
        netCashEffect: single.netCashAfter,  // 共済掛金支出 - 節税額 = 実質キャッシュアウト
        warnings: single.warnings,
      });
    }
  }
  // 「限界節税額」=「掛金 1 円増やしたときの節税効果」
  var marginalEffect = _calcMarginalEffect_(results);
  return { scan: results, marginalEffect: marginalEffect };
}

スキャン結果の出力先: 98_sim_tax_savingDDL 外・動的生成)に表形式で書出し。ヒートマップ的に視認しやすい配置(行 = セーフティ掛金 / 列 = 小規模共済掛金 / セル = 総節税額)。

Step 4 — 限界節税額の算出(最適掛金設定の判断材料)

marginalEffect = 「掛金 1 円増やしたときの節税効果」。これが 0.40 を下回ったら効率低下(個人累進税率が下がるブラケット境界・法人軽減税率と標準税率の境界 等)。UI 上で限界節税効率の落ち込みポイントを視覚的にハイライト。

例: 役員報酬 600 万 + 想定法人課税所得 800 万のケース:

  • 小規模共済 月 0 → 月 1 万: 限界節税効率 0.42(個人 23% + 住民 10% = 33% × 控除)
  • 小規模共済 月 7 万: 限界節税効率 0.40 程度(同ブラケット内)
  • セーフティ共済 月 0 → 月 5 万: 限界節税効率 0.34(軽減 15% + 地方 7% = 22%)
  • セーフティ共済 月 20 万: 限界節税効率 0.34(800 万境界以下なら同水準)
  • セーフティ共済 月 33.3 万(年 400 万): 軽減税率境界突破で限界効率 0.40 へジャンプ

Step 5 — 出口リスク警告(解約時税務)

制度出口課税spec 上の警告タイミング
小規模企業共済退職所得 / 一時所得(一括受取は退職所得控除有利)「20 年加入 + 一括受取で X 円控除」算出案内
経営セーフティ共済解約手当金が益金算入スキャン時に「将来解約時に法人税課税が戻ってくる(節税ではなく課税繰延)」明示

2024-10 改正の重要警告: 経営セーフティ共済を 解約後 2 年以内に再加入した場合は損金算入不可S69_BIZ_REJOIN_RESTRICTION_YEARS)。spec 上で「過去 2 年以内に解約していないか」のチェックボックスを入力 UI に必須配置。チェック時は警告表示 + シミュレーション結果に「再加入制限該当: 損金算入不可」コメント追加。

Step 6 — メニュー統合 + サイドバー連携

000_infra/002_constants.jsMENU_DEFINITION:

📊 マート更新 カテゴリに追加:

{ label: '💰 共済節税シミュレーション (MAS-141)', funcName: 'openTaxSavingSimulator', description: '小規模企業共済 + 経営セーフティ共済の節税効果スキャン (MAS-141)' },

300_ui/301_ui_assist.js のサイドバーエントリ:

サイドバー UI に「共済シミュレーション」タブを追加。入力フォーム(想定法人課税所得・役員報酬・既積立額・40 歳以上フラグ・再加入制限チェック)→ simulateScan 呼出 → 結果ヒートマップ表示。

影響範囲

対象種別変更内容リスク
400_domain/451_tax_saving_simulator.js追加TaxSavingSimulator.simulatePoint() + simulateScan() + 内部ヘルパ群(純粋関数・約 250 行)MAS-057 エンジン呼出のみ・既存ロジックへの影響なし
000_infra/002_constants.js変更MENU_DEFINITION📊 マート更新 カテゴリに 1 行追加既存メニューに影響なし
300_ui/301_ui_assist.js変更サイドバーに「共済シミュレーション」タブ追加既存タブに影響なし
03_sys_params変更8 キー追加(S69_*)。Constants.getParam 経由で読込・default fallback ありシード未実行でも default 値で動作
98_sim_tax_saving(新設・DDL 外)追加実行時に動的生成・スキャン結果を書き出す出力シート既存シートに影響なし
8XX_migration_s69_sys_params.js追加(任意)S69_* キーのシーダー(MAS-232 Stage 2 の 813 と同パターン)シード未実行でも default で動作するため optional
900_test/901_test_runner.js変更MAS-141 単体テスト S69-01〜S69-13 追加既存テストへの影響なし
MAS-061 Cash ETR連携拡張simulateScan 結果を合法節税優先順位サジェストに統合MAS-061 既存ロジック変更不要
MAS-057 PersonalTaxEngine変更なし(並行稼働)MAS-057 側のエンジンには手を入れない・MAS-141 は純粋呼出側failure_patterns #25 遵守
appsscript.json変更なしOAuth スコープ追加不要failure_patterns #26 遵守

注意事項

  1. 2024-10 改正の解約後再加入制限: 経営セーフティ共済を解約後 2 年以内に再加入した場合は損金算入不可。spec 上で「過去 2 年以内に解約していないか」の UI チェックボックスを必須配置。チェック時は損金算入不可フラグで再計算 + 警告表示。S69_BIZ_REJOIN_RESTRICTION_YEARS で年数管理。

  2. 解約時益金算入リスク(経営セーフティ共済): 解約手当金は法人の益金として課税対象。spec は「節税ではなく課税繰延」を明示し、UI 上で「将来の解約時に法人税課税が戻る」コメント自動付加。MAS-058 連携時は将来年度の課税所得増を見込む warning。

  3. 小規模企業共済の出口課税最適化: 一括受取(退職所得)vs 分割受取(雑所得)で税負担が大きく変わる。spec v1 では一括受取(退職所得控除有利)を default 算出。分割受取の選択肢は v2 で追加。20 年加入で退職所得控除 800 万を案内コメントで提示。

  4. 個人所得税ブラケットの境界効果: 課税所得が 195 万 / 330 万 / 695 万 / 900 万 / 1,800 万 / 4,000 万のブラケット境界で限界節税効率が変化。PersonalTaxEngine.calcIncomeTax の累進計算結果をそのまま使い、spec 内で再計算しない(DRY 原則)。

  5. 法人税軽減税率の 800 万境界: 法人課税所得 800 万以下は 15% / 超は 23.2%(地方税合算で実効率 22% / 34%)。セーフティ共済掛金で 800 万を切るかどうかが大きな分岐点。スキャン結果でこの境界を視覚的にハイライト。

  6. 掛金支払のキャッシュフロー影響: 共済掛金は実支払が発生する(節税ではなく現預金の制度内拘束)。netCashEffect フィールドで「掛金支払 - 節税額」= 実質キャッシュアウトを併記し、UI 上で「キャッシュは X 円減るが税負担は Y 円減る」を明示。

  7. failure_patterns #25 遵守(並列実装対称性): MAS-057 SocialInsuranceTierEngine / MAS-058 RequiredRevenueSolver と純粋関数 + Constants.getParam パターンで対称。simulatePoint / simulateScan は MAS-057 既存メソッド命名と整合(動詞 + 目的語)。

  8. failure_patterns #18-#20 遵守(命名造語禁止): 関数名 simulatePoint / simulateScan / TaxSavingSimulator は既存命名と整合。「共済」「Kyosai」を変数名に使うが、これは制度名(既存業界用語)で新語ではない。Read で既存ファイルに同名関数がないことを着手時に裏取り。

  9. failure_patterns #26 遵守: appsscript.json の OAuth スコープは変更不要(既存スコープ内で完結)。

  10. 法令変更時の年次更新フロー: 共済掛金上限は法令で変動可能性あり(2025/2026 改正動向は要 watch)。03_sys_params の S69_* キーを年次更新するだけで対応できる構造を維持。Constants 直接書き換えは禁止(テナント別オーバーライドを将来許可するため)。

  11. 小規模企業共済加入資格の制約: 個人事業主または小規模企業の役員のみ加入可能(従業員 20 名以下の業種制限あり)。spec は加入資格 OK 前提(一人法人前提)。商用化時の加入資格チェックロジックは v2 で追加。

  12. MAS-061 Cash ETR 統合時の優先順位ロジック: MAS-061 が複数節税策を統合スコアリングする際、本案件の simulateScan 結果から 限界節税効率の高い掛金 + 残予算 をサジェスト候補として渡す。MAS-061 spec の「節税優先順位サジェスト」アルゴリズムと整合。

  13. 「税引後キャッシュ最大化」の評価軸: 単純な税額削減額ではなく、「(税額削減 - 掛金支払) + 退職時受取の現在価値」 で評価するのが本質。spec v1 では現在価値割引なしの単純差分を採用、v2 で NPV ベース評価を検討(F58_NPV_DISCOUNT_RATE キーで割引率管理)。

エッジケース

#条件期待される挙動理由・ログ出力
1法人課税所得 ≤ 0(赤字法人)セーフティ共済の節税効果ゼロ + 「赤字期は損金算入してもキャッシュ流出のみ」警告赤字期は将来の繰越欠損金活用と MAS-041 連携検討のサジェスト
2役員報酬 0(個人税ゼロ)小規模共済の節税効果ゼロ + 「個人収入ゼロでは所得控除メリットなし」警告役員給与なしの起業初期パターン
3セーフティ共済 既積立 ≥ 800 万月額掛金 = 0 にクランプ + 「積立上限到達」警告上限超過の物理的不可能性を ガード
4セーフティ共済 残予算 < 月額入力値月額を残予算 ÷ 12 にクランプ + 警告期途中の上限到達への対応
5過去 2 年以内に解約済(チェックボックス ON)セーフティ共済の損金算入不可で再計算 + 「再加入制限該当」警告2024-10 改正対応
6課税所得が法人税軽減税率境界を跨ぐスキャン結果で境界点を視覚的にハイライト限界節税効率のジャンプを UI で明示
7課税所得が個人累進ブラケット境界を跨ぐ同上(個人税側)限界節税効率の段階変化を UI で明示
840 歳以上フラグ ON介護保険料が個人税計算に反映(MAS-057 既存ロジック)MAS-057 注意事項と整合
903_sys_params の S69_* キーが範囲外起動時バリデーション: 範囲外なら default で上書き + WARN ログユーザー誤設定対策
10個人税課税所得が 1,000 円未満(floor 丸め)MAS-057 既存 PersonalTaxEngine の floor ロジックを流用MAS-057 spec v1.7 準拠
11スキャン結果が膨大(71 × 41 = 2,911 セル)GAS 6 分制限を超えないよう simulatePoint の inner loop を最適化(pure JS 計算のみで 1 回 1ms 想定)計算量見積もり
12MAS-058 必要年商連動時に共済掛金が固定費に追加MAS-058 solveRequiredRevenuefixedCostAnnual に共済掛金合計を加算してリトライMAS-058 注意事項 #2 の単調性前提と整合
13MAS-061 Cash ETR 統合時に重複算入MAS-061 側で「MAS-141 節税策は所得控除/損金算入」、MAS-049 は「税額控除」と種別分けし二重カウント回避MAS-061 spec の優先順位アルゴリズム整合

実データ検証

1. 齋藤 Baseline での期待値(役員報酬 600 万 / 想定法人課税所得 800 万 / 40 歳未満)

実装完了後に以下を 901_test_runner.js で自動検証し、±5% 以内で一致を合格基準とする。

共済掛金パターン法人税節税個人税節税合計節税実質キャッシュアウト
小規模 0 / セーフティ 00000
小規模 月 7 万 / セーフティ 00約 28 万(84 万 × 33%)約 28 万84 - 28 = 約 56 万
小規模 0 / セーフティ 月 20 万約 53 万(240 万 × 22%)0約 53 万240 - 53 = 約 187 万
小規模 月 7 万 / セーフティ 月 20 万約 53 万約 28 万約 81 万324 - 81 = 約 243 万

2. 限界節税効率の境界点検証

役員報酬 1,200 万(個人課税所得 約 900 万・税率 23%)→ 小規模共済 7 万まで限界効率 33% で一定。役員報酬 1,800 万(個人課税所得 約 1,500 万・税率 33%)→ 限界効率 43% にジャンプ。これらの境界が spec の _calcMarginalEffect_ 出力で正確にトラックされることを単体テスト S69-06/S69-07 で検証。

3. 法人税軽減税率境界(800 万)の検証

想定法人課税所得 1,000 万 + セーフティ共済 月 17 万(年 204 万)→ 課税所得 796 万に圧縮 → 軽減税率適用で節税効果ジャンプ。スキャン結果のヒートマップでこの境界が視認できることを実機確認。

4. MAS-057 PersonalTaxEngine との数値整合

MAS-141 が呼び出した calcIncomeTax / calcResidentTax の戻り値を MAS-057 単体テストの期待値と照合し、±1 円一致を合格基準とする(spec 同一ライブラリ呼出のため)。

5. エッジケース検証(単体テスト S69-01〜S69-13)

エッジケースセクションの 13 項目それぞれを 1 テストケースとして 901_test_runner.js に追加。

関連ドキュメント

カテゴリドキュメント関係
MAS-057 Solo-CEO Cockpit BRDbrd_solo_ceo_financial_navigator.md §4.3「共済積立額スライダー」の実装基盤として MAS-141 を位置付け
MAS-057 Solo-CEO Cockpitdev_mas-057_solo_ceo_cockpit.mdPersonalTaxEngine.calcIncomeTax/calcResidentTax を直接呼出
MAS-058 必要年商シミュレーターdev_mas-058_required_revenue_solver.md共済掛金を固定費に算入してリトライ可能性
MAS-056 意思決定対話 UIdev_mas-056_conversational_scenario_ui.mdPhase 2+ で Tool 登録(「セーフティ共済 月 20 万入れたら?」)
MAS-061 Cash ETR トラッキングdev_mas-061_cash_etr_tracking.md合法節税優先順位サジェストに simulateScan 結果を統合
MAS-049 賃上げ税制dev_mas-049_wage_increase_tax_credit_simulator.md並列の独立節税案件(税額控除軸)
MAS-041 繰越欠損金dev_mas-041_loss_carryforward.md並列の独立節税案件(過去欠損金活用軸)
MAS-059 意思決定ツリーdev_mas-059_growth_planning_workspace.mdMAS-059 が MAS-141 を Tool として呼出
R&D 税制試算 SSoTrd_tax_credit_estimation_2026.md共済 + R&D 税制 + 賃上げの複合シミュレーション参考
PRD プロダクトポリシーprd.mdHuman-in-the-Loop 原則 + 税理士助言代替不可 Disclaimer
失敗パターンfailure_patterns.md特に #18-#20(命名造語)/ #25(並列実装対称性)/ #26(oauthScopes)
CLAUDE.mdCLAUDE.mdプロジェクトルール・GAS ファイル番号体系・コーディング規約

人間が検討すべき事項

  1. 小規模企業共済の出口受取方式 default: 一括受取(退職所得・spec 採用)vs 分割受取(雑所得)。20 年加入後の試算で一括受取が有利だが、ユーザー意向で切替可能にするか。

  2. 限界節税効率 0.40 の閾値妥当性: 個人 33% + 法人 22% を境にする数値だが、住民税均等割や事業税の細部で異なる。現行 spec はざっくり 0.40 採用、業界税理士レビューで再評価。

  3. 掛金スキャン粒度: 千円刻み(小規模共済)/ 5,000 円刻み(セーフティ共済)の現行設定で 71 × 41 = 2,911 セル。GAS 6 分制限と UI 視認性のバランス。粗くするか / 動的にスキャン範囲を絞るか。

  4. 2024-10 改正の解約後再加入制限の警告 UI: チェックボックスでの自己申告のみで OK か / 過去解約履歴を別マスタで管理するか。商用化時のテナント別履歴管理が必要になる可能性。

  5. NPV ベース評価への拡張(v2 候補): 現在価値割引率(F58_NPV_DISCOUNT_RATE)の default 値(5% / 3% / 0%)。共済 20 年積立の長期評価で大きな差が出る。MAS-058 と共有定数化する設計。

  6. MAS-058 必要年商連動の実装タイミング: MAS-058 spec で共済掛金を固定費に算入するロジックは v2 候補。MAS-141 単体実装後に MAS-058 連携を別 PR で追加するか、同時実装するか。

  7. MAS-061 Cash ETR 優先順位サジェストへの統合タイミング: MAS-061 実装と本案件実装の前後関係。本案件先行 → MAS-061 が MAS-141 結果を呼出する形が筋。

  8. MAS-056 対話 UI Tool 登録タイミング: MAS-056 Phase 2 で Tool 登録するか、Phase 3 で個人 B/S 統合と合わせて統合するか。MAS-058 注意事項 #5 と同じ判断軸。

  9. 業務委託・アルバイト等への加入資格チェック: 商用化時のマルチテナント対応で「小規模企業共済加入資格 OK ですか?」を初期セットアップウィザードで確認するか、運用前提として spec 外とするか。

  10. 共済以外の節税策(iDeCo / NISA / ふるさと納税)の追加判断: spec v1 は共済 2 種のみ、v2 で iDeCo(月 6.8 万・全額所得控除)/ NISA / ふるさと納税の併設検討。一人法人の最重要節税は共済 2 種で完結するため v1 はスコープ絞り推奨。

  11. 税率パラメータの年次更新運用: 法人税・個人税ブラケットは年次税制改正で変動。Constants.TAX_RATES / Constants.INCOME_TAX_BRACKETS の更新フロー(毎年 3 月税制改正後に直接更新)を spec で明示。

実装プロンプト(Claude Code 用)

Claude Sonnet 4.6 推奨。MAS-057 エンジン結合 + スキャンアルゴリズム + 出口リスク警告の中難易度。

## 案件
MAS-141 — 節税・共済効果シミュレーター(小規模企業共済 + 経営セーフティ共済)

## 事前調査(必ず Read する)
1. `docs/dev/dev_mas-141_tax_saving_simulator.md` 全文(本仕様書)
2. `docs/brd_solo_ceo_financial_navigator.md` §4.3(共済積立額スライダー)
3. `400_domain/442_social_insurance_tier_engine.js` 全文
   — PersonalTaxEngine.calcIncomeTax/calcResidentTax の関数シグネチャ確認
4. `docs/dev/dev_mas-057_solo_ceo_cockpit.md` §実データ検証(数値整合)
5. `docs/dev/dev_mas-058_required_revenue_solver.md` 純粋関数 + Constants.getParam パターン手本
6. `docs/dev/dev_mas-061_cash_etr_tracking.md` 統合先のサジェストアルゴリズム
7. `000_infra/002_constants.js` — Constants.TAX_RATES.brackets / INCOME_TAX_BRACKETS / getParam
8. `300_ui/301_ui_assist.js` サイドバー実装パターン
9. `docs/_internal/failure_patterns.md` #18-#20 / #25 / #26

## 実装対象

1. `400_domain/451_tax_saving_simulator.js` 新規(IIFE 名前空間 TaxSavingSimulator):
   - simulatePoint(input) — 単点シミュレーション
   - simulateScan(input, options) — スキャン(71 × 41 セル)
   - 内部ヘルパ: _loadParams_ / _clampBizMonthly_ / _clampPersonalMonthly_ /
     _calcCorporateTax_ / _calcTaxableIncomeFromGrossComp_ / _calcMarginalEffect_

2. `000_infra/002_constants.js` の MENU_DEFINITION:
   - 「📊 マート更新」カテゴリに「💰 共済節税シミュレーション (MAS-141)」追加

3. `300_ui/301_ui_assist.js` 拡張:
   - サイドバーに「共済シミュレーション」タブ追加
   - 入力フォーム + ヒートマップ表示

4. `03_sys_params` の 8 キー追加(default は Constants.getParam の第 2 引数)

5. `8XX_migration_s69_sys_params.js` 新規(任意・番号は `ls 800_ops/` で次番取得):
   - S69_* キーのシーダー(MAS-232 Stage 2 の 813 と同パターン)

6. `900_test/901_test_runner.js` に S69-01〜S69-13 単体テスト

## 動作確認
1. 齋藤 Baseline 4 ケース(共済 0/0, 7/0, 0/20, 7/20)の合計節税 ±5% 一致
2. 限界節税効率の境界点検出(役員報酬 1,200 万 → 1,800 万)
3. 法人税軽減税率 800 万境界のヒートマップ表示
4. MAS-057 PersonalTaxEngine との数値整合 ±1 円一致
5. エッジケース 13 項目すべて想定通り

## デプロイ
1. dev で push:dev → メニュー「💰 共済節税シミュレーション」実行 → 98_sim_tax_saving 確認
2. Go なら push:prod
3. コミット: feat(MAS-141): 節税・共済効果シミュレーター (小規模 + セーフティ + 限界節税効率)

## failure_patterns チェック
- #18-#20: TaxSavingSimulator / simulatePoint / simulateScan を Read で裏取り
- #25: MAS-057 PersonalTaxEngine と純粋関数 + Constants.getParam パターン対称
- #26: appsscript.json は変更なし

推奨実行モデル

工程推奨モデル根拠
Phase 1 TaxSavingSimulator コア(simulatePoint)Claude Sonnet 4.6MAS-058 純粋関数パターン適用・中程度の判断
Phase 2 simulateScan(71 × 41 ヒートマップ)+ 限界節税効率Claude Sonnet 4.6スキャンアルゴリズム + 境界点検出
Phase 3 サイドバー UI 統合Claude Sonnet 4.6既存 UxAssist パターン流用
Phase 4 MAS-061 Cash ETR 統合Claude Opus 4.7 (1M context)多策統合スコアリングの判断
Phase 5 MAS-058 連携(共済掛金を固定費算入)Claude Opus 4.7 (1M context)MAS-058 単調性前提との整合判断
単体テスト実装(S69-01〜S69-13)Claude Haiku 4.5パターン化された期待値検証
仕様書レビューGemini 3 Pro Preview + Deep Think第三者視点での税務妥当性 + 2024-10 改正反映確認

変更履歴

日時バージョン変更内容
2026-04-30v1.1 (ファイル名 + 内部参照を MAS-141 に整合化)2026-04-30 セッションで legacy prefix MAS-141 から MAS- prefix への整合作業を実施変更内容: (1) ファイル名 dev_mas-141_tax_saving_simulator.mddev_mas-141_tax_saving_simulator.md にリネーム / (2) Constants.MENU_DEFINITION の label / description 内の (S-69)(MAS-141) に更新 / (3) 関連ドキュメントセクションの自己参照パスを更新 / (4) 他 spec (dev_F-66_* / dev_F-67_* / dev_N-42_* / financial_metrics_guide.md) からの引用パスを一括置換 / (5) docs/_config.json nav エントリの file 欄を更新 / (6) id_mapping_table.csv の source_file カラムを更新。aliases ["S-069", "S-69"] はマッピング保持のため維持 (frontmatter)。変更履歴の旧 entry の "S-69" 表記は履歴用に維持 (時系列の事実保全)。実装内容には変更なし (v1.0 仕様書完了状態を維持)。docs-only PR で prod 自動デプロイへの影響なし。今後の参照は dev_mas-141_*.md で統一。
2026-04-27v0.1 (骨組み)初版骨組み作成。全セクション見出し + 概要テーブルのみ。ai_agent_tips.md §6 の章単位生成方針を準用。
2026-04-27v0.2 (本体)現在のコード(MAS-057 PersonalTaxEngine 関数 + Constants.TAX_RATES + 法定実効税率参照 + MAS-061 連携)+ 修正方針 6 Step 本文(共済 2 種制度パラメータ集中管理 / 単点シミュレーション / スキャンシミュレーション 71×41 / 限界節税効率 / 出口リスク警告 / メニュー + サイドバー統合)。JavaScript 疑似コードで TaxSavingSimulator の simulatePoint / simulateScan を提示。
2026-04-27v0.3 (堅牢化)影響範囲テーブル(新規 2 / 変更 4 / 変更なし 2)+ 注意事項 13 項目(2024-10 改正の解約後再加入制限 / 解約時益金算入リスク / 出口課税最適化 / 個人累進ブラケット境界 / 法人税軽減税率 800 万境界 / キャッシュフロー影響 / failure_patterns #25/#26 / 法令変更年次更新 / 加入資格 / MAS-061 統合優先順位 / 税引後キャッシュ最大化評価軸)+ エッジケース 13 パターン(赤字法人 / 役員報酬ゼロ / 積立上限到達 / 残予算不足 / 過去 2 年解約 / 軽減税率境界 / 個人累進境界 / 40 歳以上 / 03_sys_params 範囲外 / 1000 円 floor / スキャン計算量 / MAS-058 連動 / MAS-061 二重カウント回避)+ 実データ検証 5 本(齋藤 Baseline 4 ケース / 限界節税効率境界 / 軽減税率境界 / MAS-057 数値整合 / S69-01〜S69-13)。
2026-04-27v1.0 (仕様書完了)関連ドキュメント 12 件(MAS-057 BRD / MAS-057 / MAS-058 / MAS-056 / MAS-061 / MAS-049 / MAS-041 / MAS-059 / R&D 税制 SSoT / PRD / failure_patterns / CLAUDE.md)+ 人間検討事項 11 項目(出口受取方式 / 限界効率閾値 / スキャン粒度 / 2024-10 改正 UI / NPV 拡張 / MAS-058 連携時期 / MAS-061 統合時期 / MAS-056 Tool 登録時期 / 加入資格チェック / 他節税策追加 / 税率年次更新)+ 実装プロンプト(Claude Sonnet 4.6 向け・事前調査 9 / 実装対象 6 / 動作確認 5 / failure_patterns チェック)+ 推奨実行モデル(Phase 1-5 + テスト + レビュー)。仕様書完了(v1.0)として昇格。前提案件 MAS-057 Phase 1/1.5 揃っているため即時着手可能。MAS-061 Cash ETR / MAS-058 連携は本案件実装後に別 PR で追加。