期首仕訳の登録処理を、FiscalYearから OpeningEntryRegistrar サービスクラスに切り出した。
もともとは FiscalYear::registerOpeningEntry() にロジックを直接書いていたが、TransactionRegistrarの時と同じで、モデルの責務が重くなってきたので分離。FiscalYearのメソッドは薄い委譲だけ残す。
期首仕訳には固有のルールがいくつかあるので、それをRegistrarに閉じ込める。
- 1会計年度につき、期首仕訳は1伝票のみ(すでにあれば例外を投げる)
- 取引日は会計年度のstart_dateに固定
- 摘要は「期首残高設定」に固定
- 借方に使える勘定科目は「現金」「定期預金」「その他の預金」「車両運搬具」「棚卸資産」のみ
- 貸方は必ず「元入金」に集約
- 補助科目は入力名でfirstOrCreate
保存自体はTransactionRegistrarに委譲する。期首仕訳もただの仕訳の一種なので、共通のバリデーション・保存基盤は再利用しつつ、期首特有のルールだけ専用の入口(Registrar)に持たせる、という役割分担。
初期セットアップ画面(SetupWizard)は、この Registrar の利用者の1つという位置づけになる。今後、セットアップ以外の画面やAPIから期首仕訳を登録することになっても、ルールを再実装せずに済む。
今のところ判断を保留しているのは、期首仕訳の差し替え・取り消し後の再登録・元入金固定を続けるかどうか・負債や未払金を含むより一般的な開始残高への拡張・会計年度締め後の変更禁止、あたり。今は「明示的な登録APIを持つこと」と「同一年度での重複登録を防ぐこと」を優先する。