MAS-049: 賃上げ促進税制効果シミュレーター
概要
| 項目 | 内容 |
|---|---|
| 案件 ID | MAS-049 |
| カテゴリ | シミュレーション |
| 優先度 | P2 ★★ |
| 対象ファイル(変更あり) | 400_domain/414_wage_tax_credit_simulator.js(新規・namespace WageTaxCreditSimulator)000_infra/002_constants.js(MENU_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_TIER1 | 0.015 | 1.5% 以上増の閾値 |
WTC_INCREASE_RATE_TIER2 | 0.025 | 2.5% 以上増の閾値 |
WTC_CREDIT_RATE_TIER1 | 0.15 | Tier 1 控除率 15% |
WTC_CREDIT_RATE_TIER2 | 0.30 | Tier 2 控除率 30% |
WTC_TRAINING_CREDIT_RATE | 0.10 | 教育訓練費加算 10% |
WTC_DIVERSITY_CREDIT_RATE | 0.05 | くるみん / えるぼし加算 5% |
WTC_UPPER_LIMIT_RATE | 0.20 | 法人税額の 20% 上限 |
WTC_CARRYOVER_YEARS | 5 | 繰越年数 |
WTC_TRAINING_INCREASE_THRESHOLD | 0.05 | 教育訓練費 5% 以上増の閾値 |
WTC_TRAINING_RATIO_THRESHOLD | 0.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_headcount(BUD_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 候補)
運用・デプロイ手順
03_sys_paramsに 10 パラメータ投入npm run push:dev→ サイドバー💰 賃上げ促進税制起動- 前期役員報酬 600 万(プリロード)+ 今期従業員採用で給与総額 1,020 万(+70% 増)→ 税額控除上限内計算確認
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.trainingCostPrevious が undefined | 加算判定 false(控除率加算なし) | ログ出力なし |
| 6 | 教育訓練費の増加率計算でゼロ除算 | prev === 0 && curr > 0 in training | 割合判定(給与比 0.05% 以上)のみで加算可否判断 | ログ出力なし |
| 7 | 控除額が控除上限を超過 | creditAmount > upperLimit | 最終控除 = 上限、超過分 = 繰越分(5 年繰越) | Utils.logInfo('simulate', '繰越分発生: ' + carryover) |
| 8 | 22_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 = 0 | Utils.persistLog('WARN', 'simulate', '基本控除 0 のため加算不適用') |
| 12 | 03_sys_params 未投入 | Constants.getParam がデフォルト値返却 | デフォルト値で計算 + UI に「03_sys_params 要投入」ヒント | Utils.logInfo('simulate', 'using default params') |
| 13 | MAS-048 連携時の TCO 入力が不正 | tcoResult.annualSalary が null | エラー表示「MAS-048 試算結果を先に実行してください」 | Utils.persistLog('WARN', 'simulateFromTco', 'invalid tcoResult') |
| 14 | Web アプリから実行 | SpreadsheetApp.getUi() throw | _notifyUser_ フォールバック(MAS-013 パターン) | ログなし |
| 15 | 同時実行 | LockService.tryLock(5000) 失敗 | 「別処理実行中」Toast | Utils.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% |
実データ検証
03_sys_paramsの既存キー一覧:WTC_*プレフィックスの 10 キーが未登録であること22_bud_headcountの雇用形態列値域: 「役員」判別用の現行値確認42_trn_journalの法人税仕訳の科目名:'法人税、住民税及び事業税'/'法人税等'の揺れ確認(将来の自動取得機能実装時)- 令和 8 年度税制改正大綱の最新版: 控除率・上限の 2026 年時点最新値の照合(実装時点の施行済税制に準拠)
- 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.md | 5 カ年財務モデル。将来 MAS-010 の法人税計算に MAS-049 控除を反映する拡張候補 |
| ref_boutique_first_hire_simulation.md | D.9 §9.1 が本案件の根拠(賃上げ促進税制・令和 8 年度改正後・最大 45% / 法人税額 20% 上限 / 5 年繰越) |
| CLAUDE.md | コーディング規約・ハードコード禁止原則 |
人間が検討すべき事項
- 法人税額取得の自動化: MVP は手動入力。MAS-010 5 カ年予測 or MAS-018 連動エンジンから自動取得する拡張の優先度
- 教育訓練費の加算要件のスコープ: 教育訓練費の定義(社外研修費 / 書籍費 / オンラインコース)を実務で曖昧にしがち。顧問税理士との運用範囲の切り分け
- 女性活躍加算(えるぼし)認定の取得方針: 1 人法人では該当せず、採用後 Phase 2 で検討
- 5 年繰越管理シート:
96_wtc_carryover新設 or03_sys_paramsで持つか。決算毎に更新が必要で自動化が望ましい - 税制改正への追従タイミングの責任者: 毎年 3 月大綱 → 4 月施行 → 7 月料率更新のサイクル。代表者 or 顧問税理士が
03_sys_paramsを更新する運用ルール - 役員の特殊関係者除外の実装:
BUD_HCに「役員特殊関係者フラグ」列追加 or 現状通り手動除外運用 - MAS-041(繰越欠損金)との統合税額計算: 複数税制を組み合わせた「税額最適化エンジン」を上位 namespace として新設するか
- 国内雇用者の範囲確認: 「使用人兼務役員」の扱い。税法上は微妙な区分であり、顧問税理士確認が必要
- MAS-048 との UI 統合度: 別サイドバー独立 or MAS-048 内に toggle で統合。UX のシンプルさと開発コストのトレードオフ
- 確定申告連携: 試算値と確定申告書別表 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: サイドバー UI | Claude Sonnet 4.6 | HTML + JS + MAS-048 連携 |
| Step 4: MENU_DEFINITION | Claude Haiku 4.5 | 1 行追加 |
| Step 5: テスト追加 | Claude Sonnet 4.6 | D.9 §9.1 との数値一致検証 |
変更履歴
| 日付 | 変更内容 |
|---|---|
| 2026-04-23 | 初版作成。D.9「一人法人 1 人目採用」§9.1 の賃上げ促進税制(令和 8 年度改正後・中小企業版、最大 45% / 法人税額 20% 上限 / 5 年繰越)を実装する仕様。namespace WageTaxCreditSimulator(400_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-23 | Gemini レビュー(PR #335)指摘を反映。🟡 Major 対応: サイドバー UI 入力セクション冒頭に「役員の特殊関係者(配偶者・6 親等内血族・3 親等内姻族)の給与は手動除外」の常時表示注意喚起ヒントを追加。ユーザーが税制要件を知らずに誤った控除額を信頼するリスクを低減。🟢 Minor 対応: 基本控除 0(増加率 1.5% 未満)かつ加算要件を満たしている場合の動的メッセージ「加算は基本控除成立時のみ有効です」を結果表示エリアに追加。控除上限超過時の繰越分表示メッセージも併記 |