確定後の不変性と再年調
法的背景
- 年末調整のデータは法的に 7年間保持 が必要
- 目的は「当時何が起きたかを証明する」こと
- 過去のデータを今年の基準で再計算して表示すると 事故 になる
設計方針: 「不変保持 + 訂正は新バージョン」
確定済みの計算結果は不変として保持し、訂正が必要な場合は再年調(GL-014)として 新しいバージョンを作る。元の結果を上書きしない。
確定済み(Finalized)
├── TaxCalculationResult v1 ← 不変。当時の計算結果をそのまま保持
│
├── [誤り発覚]
│
└── 再年調(Re-Adjustment)
├── 事実データの訂正(何が間違っていたか記録)
├── TaxCalculationResult v2 ← 当該年度の計算エンジンで再計算
└── 差分記録(v1との差額、過不足税額)操作別の方式
| 操作 | 方式 |
|---|---|
| 過去データの表示 | 保存済みの TaxCalculationResult をそのまま表示(再計算しない) |
| 過去データの訂正 | 再年調として新バージョンを作成。当該年度の計算エンジンで再計算 |
| 元の計算結果 | 永久に不変。訂正版と並存(audit trail) |
| 過去の計算エンジン | 最低7年間は維持(再年調用) |
採用理由
法的要件との整合性
- 確定済みの計算結果を上書きすると「当時こう計算した」という証明ができなくなる
- 税務調査で求められるのは「当時の記録」
再年調は実務上必ず発生する
- 所得の申告漏れ、扶養の重複控除など、確定後に誤りが判明するケースは現実に起きる
- 「完全に編集不可」では業務が回らない
- ただし「元の結果を書き換える」のではなく「訂正版を新たに作る」
計算エンジンは訂正のために維持が必要
- 再年調では当該年度のルールで再計算する必要がある
- 表示のたびに毎回計算するのではなく、訂正が発生したときだけ使う
- 稼働頻度は低いが、7年分の計算エンジンの維持は必須
データモデルへの影響
TaxCalculationResult (DM-501) の設計:
Version(int): 1=初回確定、2以降=再年調PreviousResultId(Guid?): 前バージョンへの参照AdjustmentReason(string?): 訂正理由(v2以降で必須)DifferenceAmount(decimal?): 前バージョンとの差額(過不足税額)CalculatedAt(DateTime): 計算実行日時TaxYear(int): 適用した計算ルールの年度- 全バージョンが並存し、最新バージョンが「有効」