概要

項目内容
案件 IDMAS-049
カテゴリシミュレーション
優先度P2 ★★
対象ファイル(変更あり)400_domain/414_wage_tax_credit_simulator.js(新規・namespace WageTaxCreditSimulator
000_infra/002_constants.jsMENU_DEFINITION に 1 項目追加)
templates/wage_tax_credit_sidebar.html(新規 or MAS-048 サイドバーに統合)
出力先93_kpi_dashboard に「税額控除シミュレーション」セクション追加(DDL 管理外・動的上書き)
前提案件MAS-048(採用 TCO シミュレーター・入力源として使用)
関連案件MAS-041(繰越欠損金・別税制)、MAS-010(5 カ年財務モデル・税額控除後 CF 反映の可能性)

中小企業向けの 賃上げ促進税制(令和 8 年度改正後の最大控除率 45%)の税額控除額を、前年度給与支払総額(創業期なら役員報酬のみ)と採用者想定給与から即時計算する。創業初期の採用が税額控除 100 万円超に繋がる可能性を可視化し、採用タイミングの最適化判断をデータで支援する。

D.9「一人法人 1 人目採用」§9.1 の税制要件を実装する位置付け。

目的

  • 創業初期採用の税制メリット定量化: 前期役員報酬のみ(例: 600 万円)→ 今期従業員採用で増加率 100% 超のシナリオで税額控除 126 万円(上限内)
  • 採用タイミングの最適化: 税額控除を織り込んだ実質採用コスト = MAS-048 TCO − MAS-049 税額控除の計算を可能にする
  • 税制改正追従の基盤: 03_sys_params で控除率・控除上限を管理し、改正時はマスタ更新のみで対応(ハードコード禁止原則)
  • MAS-041(繰越欠損金)との棲み分け: MAS-041 は過去赤字の活用、MAS-049 は給与増加に伴う新規控除。両者併用で税額を複合最適化

現在のコード

賃上げ促進税制の要件(令和 8 年度改正後・中小企業版)

要件控除率
前年度比 1.5% 以上増15%
前年度比 2.5% 以上増30%
教育訓練費 5% 以上増 + 給与の 0.05% 以上+10%
くるみん / えるぼし二段階目以上+5%
最大控除率45%(控除上限 = 法人税額の 20%)
  • 5 年繰越可能(赤字で控除しきれない場合、中小企業限定、令和 6 年度改正)
  • 国内雇用者の範囲: 役員の特殊関係者は除外(配偶者・6 親等血族・3 親等姻族等を雇う場合は対象外)
  • 適用期限: 令和 9 年 3 月 31 日(2027/3/31)

03_sys_params で管理するパラメータ(新規投入)

キーデフォルト根拠
WTC_INCREASE_RATE_TIER10.0151.5% 以上増の閾値
WTC_INCREASE_RATE_TIER20.0252.5% 以上増の閾値
WTC_CREDIT_RATE_TIER10.15Tier 1 控除率 15%
WTC_CREDIT_RATE_TIER20.30Tier 2 控除率 30%
WTC_TRAINING_CREDIT_RATE0.10教育訓練費加算 10%
WTC_DIVERSITY_CREDIT_RATE0.05くるみん / えるぼし加算 5%
WTC_UPPER_LIMIT_RATE0.20法人税額の 20% 上限
WTC_CARRYOVER_YEARS5繰越年数
WTC_TRAINING_INCREASE_THRESHOLD0.05教育訓練費 5% 以上増の閾値
WTC_TRAINING_RATIO_THRESHOLD0.0005給与の 0.05% 以上の閾値

400_domain/ の採番状況

400/401/402/403/404/405/406/407/410/412(MAS-048)/413/420/430 が使用中または予定。本案件は 414_wage_tax_credit_simulator.js を採用。

22_bud_headcountBUD_HC schema、L943)

月額給与・報酬 列 × 12 で従業員別年間給与を算出。雇用形態='役員' の行は国内雇用者範囲外(役員本人)として除外するが、一般従業員(雇用形態='正社員' 等)は対象。BUD_HC には 雇用形態 列が存在するため判別可能。

役員の特殊関係者(配偶者等)は現状のシステムでは別フラグなし。「人間が検討すべき事項」で仕様書記載。

42_trn_journal科目名='法人税、住民税及び事業税'

法人税額の取得は現行 GAS では未実装(月次決算後の確定値は 42_trn_journal の法人税仕訳から読める)。MVP では 03_sys_params.WTC_ESTIMATED_CORPORATE_TAX_AMOUNT にユーザー手動入力値を格納する方式を採用し、将来 MAS-010 / MAS-011 の予測値と連携する拡張余地を残す。

93_kpi_dashboard(DDL 管理外)

既存 KPI セクションの末尾に「税額控除シミュレーション」セクションを追加。MAS-051(PSF KPI ダッシュボード、未着手)との統合運用を考慮し、追加セクションの行開始位置を 03_sys_params で管理(衝突回避)。

修正方針

Step 1: 03_sys_params パラメータ投入

10 パラメータキーの初期値を 03_sys_params に投入(MCP update_cells or 手動)。

Step 2: 計算エンジン(414_wage_tax_credit_simulator.js 新規)

var WageTaxCreditSimulator = (function() {
  /**
   * @param {Object} input
   * @param {number} input.previousTotalSalary     前年度給与支払総額(円、国内雇用者のみ)
   * @param {number} input.currentTotalSalary      今年度給与支払総額(円、想定値)
   * @param {number} input.corporateTaxAmount      法人税額(円、実績 or 予測)
   * @param {number} [input.trainingCostCurrent]   今期教育訓練費(円、加算要件判定用)
   * @param {number} [input.trainingCostPrevious]  前期教育訓練費(円)
   * @param {boolean} [input.diversityCertified]   くるみん / えるぼし認定有無
   * @returns {Object} { increaseRate, creditRate, creditAmount, upperLimit, finalCredit, carryover }
   */
  function simulate(input) {
    var prev = Number(input.previousTotalSalary) || 0;
    var curr = Number(input.currentTotalSalary) || 0;
    var tax = Number(input.corporateTaxAmount) || 0;

    // 増加率
    var increaseRate = prev > 0 ? (curr - prev) / prev : (curr > 0 ? Infinity : 0);

    // 基本控除率判定
    var baseCreditRate = 0;
    if (increaseRate >= Constants.getParam('WTC_INCREASE_RATE_TIER2', 0.025)) {
      baseCreditRate = Constants.getParam('WTC_CREDIT_RATE_TIER2', 0.30);
    } else if (increaseRate >= Constants.getParam('WTC_INCREASE_RATE_TIER1', 0.015)) {
      baseCreditRate = Constants.getParam('WTC_CREDIT_RATE_TIER1', 0.15);
    }

    // 加算判定
    var trainingBonus = 0;
    if (_checkTrainingIncrease(input, curr)) {
      trainingBonus = Constants.getParam('WTC_TRAINING_CREDIT_RATE', 0.10);
    }
    var diversityBonus = input.diversityCertified
      ? Constants.getParam('WTC_DIVERSITY_CREDIT_RATE', 0.05)
      : 0;

    var totalCreditRate = baseCreditRate + trainingBonus + diversityBonus;

    // 控除額計算
    var increaseAmount = Math.max(curr - prev, 0);
    var creditAmount = Math.round(increaseAmount * totalCreditRate);

    // 控除上限
    var upperLimitRate = Constants.getParam('WTC_UPPER_LIMIT_RATE', 0.20);
    var upperLimit = Math.round(tax * upperLimitRate);

    // 最終控除額
    var finalCredit = Math.min(creditAmount, upperLimit);
    var carryover = Math.max(creditAmount - upperLimit, 0);  // 5 年繰越分

    return {
      increaseRate: increaseRate,
      increaseAmount: increaseAmount,
      baseCreditRate: baseCreditRate,
      trainingBonus: trainingBonus,
      diversityBonus: diversityBonus,
      totalCreditRate: totalCreditRate,
      creditAmount: creditAmount,
      upperLimit: upperLimit,
      finalCredit: finalCredit,
      carryover: carryover,
      carryoverMaxYears: Constants.getParam('WTC_CARRYOVER_YEARS', 5),
    };
  }

  function _checkTrainingIncrease(input, currentSalary) {
    var trainingIncreaseThreshold = Constants.getParam('WTC_TRAINING_INCREASE_THRESHOLD', 0.05);
    var trainingRatioThreshold = Constants.getParam('WTC_TRAINING_RATIO_THRESHOLD', 0.0005);
    var prev = Number(input.trainingCostPrevious) || 0;
    var curr = Number(input.trainingCostCurrent) || 0;
    if (prev === 0 && curr > 0) return curr / currentSalary >= trainingRatioThreshold;
    var increaseRate = prev > 0 ? (curr - prev) / prev : 0;
    return increaseRate >= trainingIncreaseThreshold && curr / currentSalary >= trainingRatioThreshold;
  }

  /**
   * 22_bud_headcount の有効行から前年度・今年度給与支払総額を算出
   * @param {number} targetYear    今年度の西暦
   * @returns {{previousTotal, currentTotal}}
   */
  function loadSalaryFromHeadcount(targetYear) { /* ... */ }

  /**
   * F-48 の TCO 計算結果を入力として受取り、採用者 1 名の税額控除寄与を計算
   * @param {Object} tcoResult   HiringTcoSimulator.simulate の戻り値
   * @param {number} previousTotal 前年度給与支払総額
   * @param {number} corporateTax 法人税額
   * @returns {Object}           F-48 連携版の税額控除結果
   */
  function simulateFromTco(tcoResult, previousTotal, corporateTax) { /* ... */ }

  function runWageTaxCreditSimulation(input) { /* 統合 */ }

  return {
    simulate: simulate,
    loadSalaryFromHeadcount: loadSalaryFromHeadcount,
    simulateFromTco: simulateFromTco,
    runWageTaxCreditSimulation: runWageTaxCreditSimulation,
  };
})();

function openWageTaxCreditSidebar() {
  var html = HtmlService.createHtmlOutputFromFile('wage_tax_credit_sidebar')
    .setTitle('💰 賃上げ促進税制 効果試算');
  SpreadsheetApp.getUi().showSidebar(html);
}

Step 3: サイドバー UI(templates/wage_tax_credit_sidebar.html

入力セクション冒頭に常時表示の注意喚起ヒント(Gemini レビュー 🟡 Major 指摘反映):

<div class="note" style="background: #fff2cc; border: 1px solid #b45f06; padding: 6px 8px; font-size: 11px; margin-bottom: 10px;">
  ⚠️ <strong>「国内雇用者」の定義に注意</strong>: 役員の特殊関係者(配偶者、6 親等内の血族、3 親等内の姻族等)の給与は<strong>対象外</strong>です。該当する場合は前年度・今年度の給与支払総額から<strong>手動で除外して入力</strong>してください。
</div>

入力:

  • 前年度給与支払総額(自動プリロード可: loadSalaryFromHeadcount(targetYear - 1)、役員は自動除外、特殊関係者は手動除外)
  • 今年度給与支払総額(自動プリロード可: loadSalaryFromHeadcount(targetYear)、同上)
  • 法人税額(手動入力、将来 MAS-010 予測値連携)
  • 今期教育訓練費(任意)
  • 前期教育訓練費(任意)
  • くるみん / えるぼし認定チェック
  • MAS-048 連携モード(toggle)

出力:

  • 増加率(%)
  • 基本控除率(0% / 15% / 30%)
  • 加算: 教育訓練 / 多様性
  • 合計控除率(最大 45%)
  • 控除額(ハイライト表示)
  • 控除上限(法人税額の 20%)
  • 最終控除額
  • 5 年繰越可能額(超過分)
  • MAS-048 連携時: 採用者 1 名の税額控除寄与 = 最終控除額 × (採用者給与 / 今年度給与総額)

結果表示エリアの動的メッセージ(Gemini レビュー 🟢 Minor 指摘反映):

  • 基本控除 0(増加率 1.5% 未満)かつ加算要件(教育訓練費増 or 多様性認定)が満たされている場合:
    ⚠️ 給与増加率が基準(1.5%)未満のため、教育訓練費加算・多様性加算の要件を満たしていても税額控除は適用されません。加算は基本控除(15% / 30%)成立時のみ有効です。
    
  • 控除上限を超過した場合:
    ℹ️ 控除額 {{creditAmount}} 万円のうち {{upperLimit}} 万円が今年度控除、残り {{carryover}} 万円は翌期以降 5 年間繰越可能です。
    

Step 4: MENU_DEFINITION 追記

{ label: '💰 賃上げ促進税制 効果試算', funcName: 'openWageTaxCreditSidebar', description: '前年度比増加率と法人税額から税額控除額を試算(中小企業版)' },

Step 5: MAS-048 サイドバーとの統合(オプション)

MAS-048 の TCO 試算結果画面に「税額控除を考慮」toggle を追加 → ON 時に simulateFromTco を呼んで実質 TCO(TCO − 税額控除)を計算・併記表示。

影響範囲

ファイル変更種別内容
400_domain/414_wage_tax_credit_simulator.js新規namespace WageTaxCreditSimulator + 計算 / 書込 / 統合関数(約 250 行)
templates/wage_tax_credit_sidebar.html新規入力フォーム + 結果表示(約 200 行)
000_infra/002_constants.js追加のみMENU_DEFINITION に 1 エントリ追加
03_sys_paramsデータ追加10 パラメータキーの初期値投入
docs/_config.json追加のみnav 登録

既存動作への影響

  • MAS-048 採用 TCO: MAS-049 完成後、MAS-048 サイドバーに「税額控除考慮」toggle を追加する拡張余地(Phase 2)
  • MAS-041 繰越欠損金: 別税制のため独立。将来的に統合税額計算エンジンを検討する場合は、両者を呼ぶ上位 namespace を新設
  • MAS-010 5 カ年モデル: MAS-010 の法人税計算(computeCorporateTax_)で控除額を差し引く拡張は別案件(MAS-050 候補)

運用・デプロイ手順

  1. 03_sys_params に 10 パラメータ投入
  2. npm run push:dev → サイドバー 💰 賃上げ促進税制 起動
  3. 前期役員報酬 600 万(プリロード)+ 今期従業員採用で給与総額 1,020 万(+70% 増)→ 税額控除上限内計算確認
  4. npm run push:prod → 同手順

注意事項

  • ⚠️ failure_patterns #18-#20(命名造語禁止): namespace WageTaxCreditSimulator / ファイル名 414_wage_tax_credit_simulator.js / パラメータキー WTC_* を記述前に再確認
  • ⚠️ 税制改正追従ポリシー: 毎年 3 月法案成立 → 7 月運用反映の年次サイクルを仕様書に明記。更新責任者(代表者 + 顧問税理士レビュー) を運用ルールとして設定
  • ⚠️ 役員の特殊関係者除外: 現状 22_bud_headcount に「役員特殊関係者フラグ」列なし。本案件では通常従業員のみを対象と仮定し、特殊関係者を雇う場合は手動除外する運用。将来的に BUD_HC への列追加を検討
  • ⚠️ 法人税額の予測: MVP は手動入力。MAS-010 の 5 カ年予測値 / MAS-018 の連動エンジンから法人税額を取得する連携は Phase 2
  • ⚠️ 「国内雇用者」の厳格定義: 役員・役員の特殊関係者・使用人兼務役員は対象外。現案は 雇用形態='役員' のみ除外する簡易実装
  • ⚠️ 5 年繰越の管理: 超過分を保持する専用シート(96_wtc_carryover 等)は現案では実装しない(MVP)。次期決算時に手動管理
  • ⚠️ Human-in-the-Loop: 税額控除額はあくまで試算値。確定申告時に顧問税理士による検証が必須

エッジケース

#条件検知方法期待される挙動ログ出力
1前年度給与 0(創業期役員報酬のみ)prev === 0 && curr > 0増加率 Infinity → Tier 2 控除率 30% 適用Utils.logInfo('simulate', '前年度給与ゼロ・創業期シナリオ')
2今年度給与が前年度より減少curr < prev増加率負値 → 控除率 0%Utils.persistLog('WARN', 'simulate', '給与減少・控除対象外')
3法人税額 0(赤字期)tax === 0控除上限 0 → 最終控除 0 / 繰越分に全額算入Utils.logInfo(...)
4増加率 1.5% 未満increaseRate < 0.015基本控除 0 / 加算のみ適用可能ログ出力なし(正常系)
5教育訓練費データなしinput.trainingCostCurrent / input.trainingCostPreviousundefined加算判定 false(控除率加算なし)ログ出力なし
6教育訓練費の増加率計算でゼロ除算prev === 0 && curr > 0 in training割合判定(給与比 0.05% 以上)のみで加算可否判断ログ出力なし
7控除額が控除上限を超過creditAmount > upperLimit最終控除 = 上限、超過分 = 繰越分(5 年繰越)Utils.logInfo('simulate', '繰越分発生: ' + carryover)
822_bud_headcount が空(プリロード不可)loadSalaryFromHeadcount で有効行 0プリロード値 0 → ユーザー手動入力Utils.logInfo('loadSalaryFromHeadcount', 'no active rows')
9役員のみ有効行(雇用形態='役員'全行除外 → 給与総額 0前年度給与 0 として扱う(エッジケース #1 と合流)Utils.logInfo(...)
10今年度給与が前年度同額increaseRate = 0控除率 0 / 最終控除 0ログ出力なし(正常系)
11多様性認定チェックのみ ON(基本控除 0)baseCreditRate = 0 && diversityBonus = 0.05制度上、基本控除 0 の場合加算も適用不可 → totalCreditRate = 0Utils.persistLog('WARN', 'simulate', '基本控除 0 のため加算不適用')
1203_sys_params 未投入Constants.getParam がデフォルト値返却デフォルト値で計算 + UI に「03_sys_params 要投入」ヒントUtils.logInfo('simulate', 'using default params')
13MAS-048 連携時の TCO 入力が不正tcoResult.annualSalary が nullエラー表示「MAS-048 試算結果を先に実行してください」Utils.persistLog('WARN', 'simulateFromTco', 'invalid tcoResult')
14Web アプリから実行SpreadsheetApp.getUi() throw_notifyUser_ フォールバック(MAS-013 パターン)ログなし
15同時実行LockService.tryLock(5000) 失敗「別処理実行中」ToastUtils.persistLog('WARN', ...)

Human-in-the-Loop

  • 試算値はあくまで目安であり、確定申告時の最終計算は顧問税理士による検証が必須(UI に明記)
  • 5 年繰越管理は現状手動(マスタ未実装)、代表者 + 顧問税理士で年次レビュー

テスト要件

テスト関数合格基準
test_simulate_tier1前期 600 万 / 今期 610 万(+1.67%)→ 基本控除率 15%
test_simulate_tier2前期 600 万 / 今期 620 万(+3.33%)→ 基本控除率 30%
test_simulate_zero_previous前期 0 / 今期 420 万 → Infinity 増加率で Tier 2 適用、D.9 §9.1 例示の 126 万控除と誤差 1% 未満
test_simulate_upper_limit控除額 200 万 / 法人税 500 万(上限 100 万)→ 最終控除 100 万、繰越 100 万
test_simulate_training_bonus教育訓練費増加 + 給与比 0.05% 以上 → +10% 加算
test_simulate_diversity_bonusくるみん認定 ON → +5% 加算
test_simulate_base_zero_no_bonus増加率 1% → 基本 0 / 加算不適用 / 合計 0%

実データ検証

  1. 03_sys_params の既存キー一覧: WTC_* プレフィックスの 10 キーが未登録であること
  2. 22_bud_headcount雇用形態 列値域: 「役員」判別用の現行値確認
  3. 42_trn_journal の法人税仕訳の科目名: '法人税、住民税及び事業税' / '法人税等' の揺れ確認(将来の自動取得機能実装時)
  4. 令和 8 年度税制改正大綱の最新版: 控除率・上限の 2026 年時点最新値の照合(実装時点の施行済税制に準拠)
  5. MAS-048 サイドバー UI の現状(MAS-048 完成後): 統合 toggle 実装位置の確定

関連ドキュメント

仕様書・ドキュメント関連箇所
dev_mas-048_hiring_tco_bep_simulator.md本案件の主入力源。MAS-048 の TCO 結果から採用者 1 名の税額控除寄与を simulateFromTco で計算
dev_mas-041_loss_carryforward.md繰越欠損金(別税制)。MAS-049 と MAS-041 を両方使って税額最適化を行う運用
dev_mas-010_financial_modeling.md5 カ年財務モデル。将来 MAS-010 の法人税計算に MAS-049 控除を反映する拡張候補
ref_boutique_first_hire_simulation.mdD.9 §9.1 が本案件の根拠(賃上げ促進税制・令和 8 年度改正後・最大 45% / 法人税額 20% 上限 / 5 年繰越)
CLAUDE.mdコーディング規約・ハードコード禁止原則

人間が検討すべき事項

  1. 法人税額取得の自動化: MVP は手動入力。MAS-010 5 カ年予測 or MAS-018 連動エンジンから自動取得する拡張の優先度
  2. 教育訓練費の加算要件のスコープ: 教育訓練費の定義(社外研修費 / 書籍費 / オンラインコース)を実務で曖昧にしがち。顧問税理士との運用範囲の切り分け
  3. 女性活躍加算(えるぼし)認定の取得方針: 1 人法人では該当せず、採用後 Phase 2 で検討
  4. 5 年繰越管理シート: 96_wtc_carryover 新設 or 03_sys_params で持つか。決算毎に更新が必要で自動化が望ましい
  5. 税制改正への追従タイミングの責任者: 毎年 3 月大綱 → 4 月施行 → 7 月料率更新のサイクル。代表者 or 顧問税理士が 03_sys_params を更新する運用ルール
  6. 役員の特殊関係者除外の実装: BUD_HC に「役員特殊関係者フラグ」列追加 or 現状通り手動除外運用
  7. MAS-041(繰越欠損金)との統合税額計算: 複数税制を組み合わせた「税額最適化エンジン」を上位 namespace として新設するか
  8. 国内雇用者の範囲確認: 「使用人兼務役員」の扱い。税法上は微妙な区分であり、顧問税理士確認が必要
  9. MAS-048 との UI 統合度: 別サイドバー独立 or MAS-048 内に toggle で統合。UX のシンプルさと開発コストのトレードオフ
  10. 確定申告連携: 試算値と確定申告書別表 6 との整合性確認フロー(税理士レビュー必須)

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

あなたは GAS 会計システム (bizlp-gas-accounting) のシニア開発者です。
案件 MAS-049「賃上げ促進税制効果シミュレーター」を以下の 5 Step で実装してください。

## 実行前タスク(必須・4 件)
1. `docs/arch/ref_boutique_first_hire_simulation.md`(D.9)§9.1 を Read し税制要件を確認
2. `100_config/101_sys_config.js` の `BUD_HC` schema(L943)を Read し `22_bud_headcount` の `雇用形態` 列の値域を確認
3. `docs/dev/dev_mas-048_hiring_tco_bep_simulator.md` を Read し `HiringTcoSimulator.simulate` の戻り値構造を確認
4. MCP で `03_sys_params` に `WTC_*` キー未登録を確認

## Step 1: `03_sys_params` パラメータ投入(推奨モデル: Haiku)
- 10 キー(`WTC_INCREASE_RATE_TIER1`〜`WTC_TRAINING_RATIO_THRESHOLD`)を MCP `update_cells` で投入

## Step 2: `414_wage_tax_credit_simulator.js` 新設(推奨モデル: Sonnet)
- namespace `WageTaxCreditSimulator` を IIFE で定義
- `simulate(input)` / `loadSalaryFromHeadcount(year)` / `simulateFromTco(tcoResult, prev, tax)` / `runWageTaxCreditSimulation(input)` の 4 公開関数
- `openWageTaxCreditSidebar()` グローバル関数
- 税制改正追従のため控除率・閾値は `Constants.getParam` 経由取得(ハードコード禁止)
- 増加率 `Infinity`(前期 0)/ 控除上限超過 / 基本控除 0 の加算不適用 等の分岐を実装

## Step 3: サイドバー UI(`templates/wage_tax_credit_sidebar.html` 新規、推奨モデル: Sonnet)
- 入力: 前年度給与 / 今年度給与 / 法人税額 / 教育訓練費(任意)/ 多様性認定(checkbox)/ MAS-048 連携 toggle
- 出力: 増加率 / 基本控除率 / 加算 / 合計控除率 / 控除額 / 上限 / 最終控除額 / 繰越分
- MAS-048 連携時: 採用者 1 名の税額控除寄与を併記

## Step 4: MENU_DEFINITION 追記(推奨モデル: Haiku)
- `📋 サイドバー: 📊 マート更新` カテゴリに 1 エントリ追加
- `funcName: 'openWageTaxCreditSidebar'` と Step 2 のグローバル関数名一致確認

## Step 5: テスト追加(`900_test/901_test_runner.js`、推奨モデル: Sonnet)
- 7 テスト関数(Tier1 / Tier2 / 前期 0 / 控除上限超過 / 訓練加算 / 多様性加算 / 基本 0 加算不適用)
- 合格基準: D.9 §9.1 の数値例(126 万円控除)と誤差 1% 未満

## 制約
- `appsscript.json` の `oauthScopes` を変更しない
- 架空の関数名・シート名を使わない
- `_notifyUser_` パターンで Web アプリ対応
- 税制改正時は `03_sys_params` 更新のみで対応可能な設計(ハードコード禁止)

## 動作確認
1. 前期役員報酬 600 万(プリロード or 手動)
2. 今期従業員採用で給与総額 1,020 万
3. 法人税額 300 万
4. 増加率 +70% → Tier 2 控除率 30%
5. 控除額 = (1,020 - 600) × 0.30 = 126 万
6. 上限 = 300 × 0.20 = 60 万
7. 最終控除 = 60 万、繰越分 = 66 万
8. Web アプリから実行可能

推奨実行モデル

工程推奨モデル理由
Step 1: パラメータ投入Claude Haiku 4.5定型作業
Step 2: 計算エンジンClaude Sonnet 4.6税制要件の忠実実装 + 分岐判定
Step 3: サイドバー UIClaude Sonnet 4.6HTML + JS + MAS-048 連携
Step 4: MENU_DEFINITIONClaude Haiku 4.51 行追加
Step 5: テスト追加Claude Sonnet 4.6D.9 §9.1 との数値一致検証

変更履歴

日付変更内容
2026-04-23初版作成。D.9「一人法人 1 人目採用」§9.1 の賃上げ促進税制(令和 8 年度改正後・中小企業版、最大 45% / 法人税額 20% 上限 / 5 年繰越)を実装する仕様。namespace WageTaxCreditSimulator400_domain/414_wage_tax_credit_simulator.js 新規)で simulate(input) / loadSalaryFromHeadcount(year) / simulateFromTco(tcoResult, prev, tax) / runWageTaxCreditSimulation(input) の 4 公開関数。10 パラメータ(WTC_*)を 03_sys_params で管理し税制改正時はマスタ更新のみで対応。MAS-048 の TCO 結果を入力とした採用者 1 名税額控除寄与計算機能を装備。創業期シナリオ(前期役員報酬のみ → 今期従業員採用で +100% 超増加率)で D.9 §9.1 例示の 126 万円控除と一致する設計。エッジケース 15 件・人間検討事項 10 件・推奨実行モデル 5 工程(Haiku×2 / Sonnet×3)を定義
2026-04-23Gemini レビュー(PR #335)指摘を反映。🟡 Major 対応: サイドバー UI 入力セクション冒頭に「役員の特殊関係者(配偶者・6 親等内血族・3 親等内姻族)の給与は手動除外」の常時表示注意喚起ヒントを追加。ユーザーが税制要件を知らずに誤った控除額を信頼するリスクを低減。🟢 Minor 対応: 基本控除 0(増加率 1.5% 未満)かつ加算要件を満たしている場合の動的メッセージ「加算は基本控除成立時のみ有効です」を結果表示エリアに追加。控除上限超過時の繰越分表示メッセージも併記