Skip to content

確定後の不変性と再年調

法的背景

  • 年末調整のデータは法的に 7年間保持 が必要
  • 目的は「当時何が起きたかを証明する」こと
  • 過去のデータを今年の基準で再計算して表示すると 事故 になる

設計方針: 「不変保持 + 訂正は新バージョン」

確定済みの計算結果は不変として保持し、訂正が必要な場合は再年調(GL-014)として 新しいバージョンを作る。元の結果を上書きしない。

確定済み(Finalized)
├── TaxCalculationResult v1  ← 不変。当時の計算結果をそのまま保持

├── [誤り発覚]

└── 再年調(Re-Adjustment)
    ├── 事実データの訂正(何が間違っていたか記録)
    ├── TaxCalculationResult v2  ← 当該年度の計算エンジンで再計算
    └── 差分記録(v1との差額、過不足税額)

操作別の方式

操作方式
過去データの表示保存済みの TaxCalculationResult をそのまま表示(再計算しない)
過去データの訂正再年調として新バージョンを作成。当該年度の計算エンジンで再計算
元の計算結果永久に不変。訂正版と並存(audit trail)
過去の計算エンジン最低7年間は維持(再年調用)

採用理由

  1. 法的要件との整合性

    • 確定済みの計算結果を上書きすると「当時こう計算した」という証明ができなくなる
    • 税務調査で求められるのは「当時の記録」
  2. 再年調は実務上必ず発生する

    • 所得の申告漏れ、扶養の重複控除など、確定後に誤りが判明するケースは現実に起きる
    • 「完全に編集不可」では業務が回らない
    • ただし「元の結果を書き換える」のではなく「訂正版を新たに作る」
  3. 計算エンジンは訂正のために維持が必要

    • 再年調では当該年度のルールで再計算する必要がある
    • 表示のたびに毎回計算するのではなく、訂正が発生したときだけ使う
    • 稼働頻度は低いが、7年分の計算エンジンの維持は必須

データモデルへの影響

TaxCalculationResult (DM-501) の設計:

  • Version (int): 1=初回確定、2以降=再年調
  • PreviousResultId (Guid?): 前バージョンへの参照
  • AdjustmentReason (string?): 訂正理由(v2以降で必須)
  • DifferenceAmount (decimal?): 前バージョンとの差額(過不足税額)
  • CalculatedAt (DateTime): 計算実行日時
  • TaxYear (int): 適用した計算ルールの年度
  • 全バージョンが並存し、最新バージョンが「有効」