固定資産と定期取引まわりの機能もいくつか進めていた。こちらは横断的な機械作業ではなく、それぞれ単独で会計ルールを詰める必要がある実装だった。
固定資産:中古車の簡便法耐用年数
固定資産はこれまで新車の普通車・軽自動車しか扱えなかった。ここに中古車(普通車・軽自動車)を追加した。
新車は耐用年数が固定値(普通車6年・軽自動車4年)で済むが、中古車はそうはいかない。税法上、中古資産は「簡便法」という計算式で耐用年数を見積もる必要がある。
- 法定耐用年数を全部経過している資産:法定耐用年数 × 20%
- 一部だけ経過している資産:(法定耐用年数 − 経過年数)+ 経過年数 × 20%
これを実装するために、first_registration_date(初度登録日)という項目を追加した。取得日とは別に「新車として登録された日」を持たせて、そこから購入日までの経過月数を計算し、簡便法の耐用年数を自動算出する。経過月数は完全に経過した月だけをカウントし、端数月は切り捨てる。計算結果が2年を下回る場合は最低耐用年数の2年にする、という税法上の下限も反映した。
この作業で判断に迷ったのが、「過去年度に取得した資産を今登録したらどうなるか」というケース。例えば2025年に取得した中古車を、登録し忘れていて2026年になってから2025年度分として登録する場合、DepreciationEntry(減価償却の年度別明細)は登録した年度分しか自動生成されない。後続の2026年度分は別途手動で補完が必要になる、という制約が残った。これはdocs/fixed-asset-design.mdに「積み残し課題」として明記して、優先度は低いが忘れないようにした。すべてを一度に作り切ろうとせず、スコープを決めて残りは記録に残す、というやり方はこのプロジェクトで何度かやっている。
定期取引:源泉徴収ありの収入パターン
定期取引(RecurringTransactionPlan)は毎月の家賃や顧問料のような繰り返し取引を自動生成する機能だが、これまでは収入・支出の区別がis_incomeという真偽値フラグだった。まずこれをtype定数(TYPE_INCOME / TYPE_EXPENSE)に変更し、次に収入側に「源泉徴収あり・なし」のパターンを追加した。
フリーランスが受け取る報酬は、源泉徴収された後の金額が振り込まれることが多い。つまり「請求額(税込グロス)」と「実際に入金される額」が違う。この差額をきちんと仕訳に落とすには、源泉徴収税額を専用の補助科目(デフォルト名「源泉徴収」)で処理する必要がある。
バリデーションはかなり細かく詰めた。
- 支出計画では源泉徴収を指定できない
- 源泉徴収なしなのに源泉徴収税額や補助科目が指定されていたらエラー
- 源泉徴収ありなら税額と補助科目の指定が必須
- 源泉徴収税額は税込金額より小さくなければならない
「源泉徴収あり/なし」で許可される項目の組み合わせが変わるので、typeとis_withholdingのペアごとに正しいバリデーションを書く必要があり、ここは地道にテストケースを積んだ。
続けて、定期取引と取引先(Counterparty)を紐付ける機能も追加した。これによって、定期的に発生する収入・支出がどの取引先とのものかを追跡できるようになった。単体では小さな変更だが、後で作った「セットアップウィザードで取引先ごとにToDoを自動生成する」機能の前提になっている。