• Status: Accepted (旧形式「## ステータス: 採用済み」より転記)
  • Mode: Critical (内容から推定・旧 README 一覧より移設)
  • Kruchten Type: Existence
  • Scope: product
  • Implementation Status: Done (初期実装、32_wrk_invoice タブ運用中)

Kruchten Type は ADR-0031 (2026-05-13) で遡及追加。分類根拠は ADR-0031 §決定セクションおよび docs/adr/README.md の Kruchten 3 分類ガイドを参照。 Status / Mode / Scope は 2026-06-11 に遡及追加 (ADR-0031 corrigendum パターン)。出典: Status = 旧形式「## ステータス」節の機械転記 / Mode = 旧 README §既存 ADR 一覧の推定値 (git 履歴) / Scope = ADR-0049 4 層分類の遡及付与 (PR レビューで確定)。

決定の早わかり(Y-statement)

本節は ADR-0140 の方針で遡及追加された本文の要約で、新しい意味は加えていない (意思決定内容は不変)。「文脈で問題に直面し、対抗案でなくこの案を選び、目的のため代償を受け入れる」と読む。詳細はコンテキスト以降の本文に展開する。

  • 文脈: 財務データの集計ソースを選ぶ局面。案A = 42_trn_journal (仕訳台帳) 起点、案B = 32_wrk_invoice (請求台帳) 起点の 2 案があった。
  • 問題: 仕訳台帳を集計起点にすると冪等性の管理が複雑になる。削除→再生成のリスクが生じる。
  • 問題点と課題(直せる原因 → 発生を止めるためにやること):
    • 42 タブに仕訳を書くと冪等性の管理が複雑化する → 仕訳台帳への書き込みは Action A/B のみに限定し、データマート集計には関与させない。
    • 予算と実績を別々に扱うと予実比較がしにくい → 予算 (未処理) と実績 (承認済/決済完了) を同一テーブルで管理する INV を集計の起点にする。
  • 決定(対応策): 案A (仕訳台帳を SSOT) でなく案B を採用する。32_wrk_invoice を全ての P/LB/S・CF 集計の起点とし、42_trn_journal は監査証跡 (二次的記録) と位置づける。
  • 目的: 集計ロジックを単純化する。データマートは 32/33 タブのみ読み込めば完結する状態にする。
  • 代償: 42 タブの値とデータマート出力に微小な差異が生じうる (42 タブは丸め済み、データマートは再計算)。貸倒引当金繰入額が 32 タブに INV レコードを持たない技術的負債も残る。
  • 詳細は本文の影響・撤退条件セクションを参照のこと

ステータス: 採用済み

コンテキスト

財務データの集計ソースとして、以下の選択肢があった:

  • 案A: 42_trn_journal (仕訳台帳) をSSOTとし、全集計を仕訳ベースで行う
  • 案B: 32_wrk_invoice (請求台帳) をSSOTとし、仕訳台帳は監査証跡として使用

決定

案B を採用する。 32_wrk_invoice を全てのP/L・B/S・CF集計の起点とし、42_trn_journal は監査証跡(二次的記録)として位置づける。

理由

  1. INVは予算(未処理)と実績(承認済/決済完了)を同一テーブルで管理でき、予実比較が容易
  2. 42タブに仕訳を書くと冪等性の管理が複雑化する(削除→再生成のリスク)
  3. INVの「請求ステータス」遷移で実績/予算の切り替えが自然に行える
  4. 仕訳台帳への書き込みはAction A/Bのみに限定し、データマート集計には関与させない

結果・影響

  • ポジティブ: 集計ロジックが単純化。データマートは32/33タブのみ読み込めば完結
  • ネガティブ: 42タブの値とデータマート出力に微小な差異が生じうる(42タブは丸め済み、データマートは再計算)
  • 技術的負債: 貸倒引当金繰入額は現在604_datamart_bs.jsで直接注入しており、32タブにINVレコードが存在しない(TODO参照)

Confirmation (準拠確認 / Fitness Function)

本セクションは ADR-0036 (Accepted 2026-05-14) で遡及追加された。ADR-0031 パターン (業界標準準拠メタデータ後付け = 誤字修正範疇) に準拠する遡及で本文の意思決定内容は不変。

  • 検証手段: 既存テスト (testT* / test_{slice_id}_{condition})
  • 実行頻度: Nightly
  • 違反時の対応: Slack 通知