Kailing Technology経費管理・経費精算システム › 伝票ルールエンジンをどう設計するか

証憑ルールエンジン設計:経費精算から証憑への変換は一枚のマッピング表だけではない

Kailing Technology · 2026-09-05

経費精算書が記録するのは「誰が、何のために、いくら使ったか」であり、証憑が求めるのは「借方・貸方科目、金額、補助核算ディメンション」です。その中間の翻訳は一枚の表では解決できません——同じ費用タイプでも、部門・プロジェクト・インボイス種別が異なれば、出力される科目も異なる。本当に必要なのは、設定可能で、追跡可能で、試算可能なルールエンジンである。

エンジンは書類から4種類の情報を導出する必要があります

導出目標決定要因説明
借方科目費用タイプ + 部門/プロジェクトなどのディメンション費用の帰属は、最も核心的で最も複雑
貸方科目支払方法「誰が先に立て替えたか」で決まる
税額分割票種 + 費用タイプの控除可否 + 税率費用金額が税込かどうかを決定する
補助核算ディメンション伝票フィールドを直接パススルーマッピング不要だが、完全性を検証する必要がある

4類のうち複雑なルールが必要なのは第1類のみだが、それこそがソリューション全体の成否を決める部分です。

最も犯しやすい設計ミス:条件を固定列として記述すること

多くの実装では、マッチング条件をルール表上の固定列として設計します。1列はdept_id、1列はproject_id、1列はinvoice_type。このようにすると、次のような結果を招きます。マッチング次元を一つ増やすたびに、テーブル構造を変更し、コードを変更し、再リリースする必要がある

正しい方法は、ルールと条件を2つのテーブルに分け、条件の行数は無制限で、間はAND関係とすることです。

voucher_rule マッピングルール主表 rule_type ルール類型:借方科目 / 貸方科目 / 税額処理 target_subject ヒット後に使用する会計科目コード priority 優先度、数値が小さいほど優先 effective_from 有効開始日 effective_to 失効日(空 = 長期有効) enabled 有効かどうか remark 業務上の意味説明(財務担当者閲覧用) voucher_rule_cond ルール条件表(1つのルールに複数条件を含むことができ、AND) rule_id 所属ルール field フィールド名:expense_type / dept / project_type / pay_method ... operator 演算子:= / in / like / is_null value 条件値

こう設計した後、新しいマッチング次元を追加するにはfieldの列挙に値を追加するだけで、テーブル構造を変更する必要も、リリースする必要もありません。

科目マスタデータは省略できない

科目はルールテーブルにコード文字列を一つ保存するだけではいけません。独立したマスタデータテーブルが必要です。鍵となるのは required_dims このフィールド——これによりシステムは、総勘定元帳に推送されて拒否されるのを待つのではなく、証憑生成段階で次元の完全性検証を完了できます。

subject 会計科目マスタ code 科目コード name 科目名称 is_leaf 最下位科目かどうか(最下位科目のみ記帳可能) direction 残高方向:借方 / 貸方 required_dims 必須の補助核算ディメンション、例 ["dept", "project"] effective_from 有効開始日

優先度 財務に手作業で入力させない

財務担当者が優先度の数値を手作業で記入すると、ほぼ必ず誤りが生じます——すべてのルールの精確さを頭の中で比較する必要があるからです。より信頼できる方法は、システムが条件数に応じて自動計算することです:条件が多いルールほど精確で、優先度が高い

priority = 1000 - (条件数 × 100) ルールA:費用類型=旅費 AND 部門=営業部 → 2条件 → priority 800 ルールB:費用類型=旅費 → 1条件 → priority 900 ルールC:(条件なし、フォールバック) → 0条件 → priority 1000 営業部の旅費はA、B、Cに同時にヒットし、priority昇順でAを採用

自動計算を基礎に手動微調整の入口を残し、同条件数だが先後を区別する必要がある特殊な状況に対応します。

包括的ルールがなければならない

マッチングフローは次のとおりです:候補ルールを絞り込み(タイプ一致、有効化済み、伝票日付が有効期間内)→ 各条件がすべて満たされるかを1件ずつ判定 → 複数該当時はpriority昇順で最初の1件を採用 → 該当なしの場合はフォールバックルールを適用。

フォールバックルールは省略できません。これがないと、顧客が費用タイプを1つ追加するだけで証憑生成が失敗し、その時点で経費精算書はすでに承認済みで差し戻しできず、業務が直接行き詰まります。受け皿科目(例:「未分類費用」)により業務を先に流し、財務が事後に調整できます。

試算機能も同様に省略できません

エンジンは試算能力を提供する必要があります。過去の経費精算書を1枚入力すると、完全な導出チェーンを出力します。どのルールに該当したか、なぜ該当したか、最終的にどの科目が生成されるか。

試算出力項目内容の例
摘要を入力費用タイプ=旅費-宿泊、部門=営業部、票据種別=専用インボイス、税率6%
候補ルールヒット3件:ルールA(800) / ルールB(900) / フォールバック(1000)
最終的に採用ルールA —— 条件「費用タイプ=旅費交通費」「部門=営業部」がいずれも満たされる
導出結果借方 660101 販売費——旅費交通費

この機能が欠けているため、ルール設定を誤っても証憑生成時にエラーが発生するまで気づけず、調査コストが極めて高く、財務担当者も自ら検証できない。

歴史証憑はルール変更の影響を受けてはなりません

半年後に財務がマッピングルールを調整しても、あなたは依然として「この歴史的証憑が当時なぜこの科目だったのか」を説明できなければならない。これは2つの仕組みに依存する:ルール表のeffective_from / effective_to有効期間、及び証憑仕訳にhit_rule_idルールスナップショットを記録

証憑生成時は「伝票日付」が属する期間に応じてルールバージョンを選択し、現在時刻によってはなりません。

このシーンはKailing Technology経費統制システムでどのように処理しますか

ルールと条件を分離したデータモデルにより、マッチング次元を追加してもテーブル構造を変更せずリリース不要。優先度は条件数に応じて自動計算し、手動微調整も保持。フォールバックルールと試算ツールを内蔵し、財務が自ら過去の伝票を入力して完全な導出チェーンを確認可能。仕訳伝票は命中ルールのスナップショットを記録し、ルール変更は生成済みの過去伝票に影響しない。

Kailing Technology経費管理・精算システムを見る →

よくある質問

経費精算から伝票への変換に1枚のマッピング表では不十分ですか?

できません。同一の費用類型でも部門、プロジェクト、票種が異なれば科目が異なる可能性があり、一対一のマッピング表では多条件マッチングと優先順位を表現できません。

優先度 なぜ財務に入力させてはいけないのか?

財務は頭の中で全ルールの精緻さを比較する必要があり、ルールが多くなれば必ず誤りが生じます。条件数に応じた自動計算の方が信頼性が高く、さらに例外的な処理のために人手による微調整を残します。

フォールバックルールは勘定科目の誤記帳を引き起こしませんか?

若干の伝票が未分類費用に入りますが、これは証憑生成の失敗や承認済み経費精算書の停滞よりもはるかに良いです。財務は後から集中的に調整できます。

ルールを変更したら、以前の伝票は変わるか?

いいえ。ルール表には有効期間があり、証憑仕訳上にその時点で該当したルールIDが記録され、伝票日付に応じてルールバージョンを選択し、過去の証憑を完全に追跡できます。