年度バージョニング戦略
税制改正に対応するため、計算ロジック・パラメータの両面で年度バージョニングを実施する。
→ データモデル: DM-802 TaxYearMaster
TaxYearMaster によるパラメータ外部化
年度ごとに変わりうる全パラメータを TaxYearMaster(→ DM-802)に集約し、計算ロジックからハードコードされた定数を排除する。
| パラメータ区分 | 例 | 変動頻度 |
|---|---|---|
| 所得税速算表 | 税率区分・控除額(5%/10%/20%/23%/33%/40%) | 低(H27以降変更なし) |
| 給与所得控除テーブル | 収入区分別の計算式、最低保障額(R6以前55万円/R7以降65万円)、上限195万円 | 中(R7改正あり。物価スライド制導入でR9以降は毎年変動の可能性) |
| 共通閾値 T | 扶養親族・同一生計配偶者の所得上限(R7: 58万円 / R8予定: 62万円) | 高(頻繁に改正) |
| 基礎控除テーブル | 合計所得金額区分と控除額(R7: 本則58万円+加算額、9区分) | 高(物価スライド制、本則+租特法の二重構造) |
| 配偶者特別控除テーブル | 配偶者の合計所得金額×本人の合計所得金額の2軸段階逓減テーブル | 中 |
| 年齢境界 | 16歳/19歳/23歳/70歳 | 低 |
| 復興特別所得税率 | 2.1%(H25〜R19) | 低(R19で終了予定) |
| 施行日 | R7の12/1施行のような年度途中施行への対応 | 例外的 |
計算エンジンのインスタンス管理
年度ごとの計算エンジンは DI コンテナでファクトリ経由で管理する。
csharp
// 年度ごとの計算エンジンを生成するファクトリ
public interface ITaxCalculationEngineFactory
{
ITaxCalculationEngine Create(int taxYear);
}
// 計算エンジンのインターフェース
public interface ITaxCalculationEngine
{
TaxCalculationResult Calculate(TaxCalculationInput input);
CategoryJudgmentResult JudgeCategories(
TaxpayerFacts taxpayer,
IReadOnlyList<FamilyMemberFacts> familyMembers);
}
// DI 登録(Presentation 層で実施)
services.AddSingleton<ITaxCalculationEngineFactory, TaxCalculationEngineFactory>();
// ファクトリ内部で年度に応じた TaxYearParameters をロードし、エンジンを生成・キャッシュ年度途中施行への対応
R7(令和7年)の基礎控除見直し等は 12月1日に施行 される異例のケースであり、Tax Calculation Core は施行日パラメータを持つ。
| シナリオ | 適用ルール |
|---|---|
| 通常の年末調整(最終給与日が12/1以後) | 改正後の控除額・パラメータで計算 |
| 年途中退職等(最終給与日が11/30以前) | 改正前のパラメータで計算(改正後の適用を受けるには確定申告が必要) |
| 「年始調整」(1月時点) | 全改正が施行済みのため、施行日の切り替えを意識する必要がない |
csharp
// TaxYearParameters 内に施行日を保持
public record TaxYearParameters
{
// ... 各種パラメータ
public DateOnly EffectiveDate { get; init; } // 施行日(R7: 2025-12-01)
// 最終給与支払日との比較で適用パラメータを決定
public TaxYearParameters ResolveForLastPayDate(DateOnly lastPayDate)
=> lastPayDate >= EffectiveDate
? this // 改正後パラメータ
: PreReformParameters; // 改正前パラメータ
}7年間の保持要件
法定保持期間(7年)に対応するため、過去年度の計算エンジンを維持する。
| 目的 | 方式 |
|---|---|
| 過去データの表示 | 保存済みの TaxCalculationResult(→ DM-501)をそのまま返却(再計算しない) |
| 再年調 | 当該年度の計算エンジンで全体再計算(事実データの訂正を反映) |
| 計算エンジンの維持 | 7年分の TaxYearParameters + 計算ロジックを保持。稼働頻度は低いが再年調のために必須 |
→ 確定後の不変性と再年調の設計方針: 確定後の不変性と再年調
改正ステージの管理
税制改正は段階的に確度が高まるため、各改正のステージを識別する必要がある。
| ステージ | 確度 | 意味 |
|---|---|---|
| 議論・検討中 | 低 | 政府税調等で議論されているが具体的な改正案は未定 |
| 大綱決定 | 中〜高 | 与党大綱に盛り込まれた(国会審議で修正の可能性あり) |
| 法案提出 | 高 | 国会に法案が提出された |
| 成立・公布 | 確定 | 法律として成立した |
| 施行済み | 確定 | 施行日を過ぎ、現行法として適用中 |