入金消込のシステム設計:多対多の中間テーブルと、差額のパターン
確認日 2026-10-31(調べ方)・制度は変わることがあります。個別の判断は公式の資料と専門家に確かめてください。
入金消込は、銀行に入ったお金が、どの請求の代金かを特定し、その分の売掛金を減らす業務です。難しさは金額が合わないことにあります。合算、分割、手数料の差し引きが日常的に起きるため、請求と入金は1対1になりません。
設計の中心は、入金と請求の間に充当額を持つ中間テーブルを置くことです。請求の「入金済み」フラグではなく、「どの入金をどの請求にいくら充てたか」を行で持ちます。差額は別の行として表し、その行が仕訳につながります。
消込の流れと仕訳
受注から入金までの流れのうち、最後の工程が消込です。請求の時点で売掛金が立ち、入金で売掛金が減ります。
請求から消込まで
- 1
請求販売管理
売掛金 / 売上・仮受消費税
売掛金が立つ
- 2
入金明細の取り込み銀行連携
仕訳なし
入金の事実が届く。ここでは請求は分からない
- 3
請求との突合消込機能
仕訳なし
金額・振込人名・請求番号で候補を出す
- 4
消込の確定消込機能
普通預金 / 売掛金
差額があればここで処理する
月末に未消込の入金が残ると、預金は増えたのに売掛金が減らない状態になります。これを避けるため、仕訳を2段階にする設計があります。入金時に 普通預金 / 仮受金 と計上し、消込の確定時に 仮受金 / 売掛金 とする形です。預金の残高が銀行と常に合うので、未消込の金額が仮受金の残高として見えます。1段階にするか2段階にするかは、経理の運用に合わせて決めます。
法令の側を見ると、法人税法施行規則の別表二十四は、売掛金の記載を売上先その他の相手方別と定めています。請求書単位での消込は、法令が直接求めているのではなく、回収管理のための業務の要件です。
多対多の中間テーブル
パターンを1つの形で表すために、充当を行で持ちます。
消込の基本形
invoices
- id PK
- customer_id FK
- amount
- due_date
payments
- id PK
- received_on
- payer_name
- amount
- bank_ref
allocations
- id PK
- payment_id FK
- invoice_id FK
- amount
- kind
- reversal_of FK
- created_by
- created_at
- invoices 1 — N allocations
- payments 1 — N allocations
次の例では、INV-1 と INV-2 を1回でまとめて払い(合算)、INV-3 を2回に分けて払っています(分割)。
allocations| id | payment_id | invoice_id | amount | kind |
|---|---|---|---|---|
| A-1 | P-1 | INV-1 | 110,000 | cash |
| A-2 | P-1 | INV-2 | 55,000 | cash |
| A-3 | P-2 | INV-3 | 20,000 | cash |
| A-4 | P-3 | INV-3 | 13,000 | cash |
P-1 は165,000円の合算。INV-3 は33,000円を2回で回収
請求の残高と、入金の未充当額は、どちらもこのテーブルから求められます。
-- 請求ごとの残高
SELECT i.id, i.amount - COALESCE(SUM(a.amount), 0) AS balance
FROM invoices i
LEFT JOIN allocations a ON a.invoice_id = i.id
GROUP BY i.id, i.amount;
-- 入金ごとの未充当額(kind = 'cash' だけを見る)
SELECT p.id, p.amount - COALESCE(SUM(a.amount), 0) AS unallocated
FROM payments p
LEFT JOIN allocations a ON a.payment_id = p.id AND a.kind = 'cash'
GROUP BY p.id, p.amount;
一覧を速くしたいなら invoices.balance のような列を持ってもかまいません。その場合は充当の行と同じトランザクションで更新し、定期的に集計値と突き合わせます。同じ請求を2人が同時に消し込むことがあるので、確定の処理では請求の行をロックし、残高を超えないことを検査します。
パターン別の処理
消込で起きることを表にまとめます。仕訳は税抜経理の例です。
| パターン | 例 | allocations | 仕訳の考え方 |
|---|---|---|---|
| 1対1 | 請求どおりの入金 | 1行 | 普通預金 / 売掛金 |
| 合算 | 3請求を1回で入金 | 3行(同じ payment_id) | 普通預金 / 売掛金 |
| 分割 | 1請求を2回で入金 | 2行(同じ invoice_id) | 入金のたびに 普通預金 / 売掛金 |
| 一部入金 | 不足のまま入金 | 1行。残高が残る | 普通預金 / 売掛金。残りは督促や差額の判断へ |
| 手数料の差し引き | 440円少ない入金 | cash+fee の2行 | 次の節を参照 |
| 入金が多い | 請求より1,000円多い | 請求額まで充当。残りは未充当 | 超過分は仮受金や前受金など |
| 請求より先の入金 | 前払い | なし(あとで充当) | 普通預金 / 前受金 |
| 相手が不明 | 振込人が特定できない | なし | 普通預金 / 仮受金 |
請求より先の入金は、売掛金がまだありません。前受金で受け、請求の時点で振り替えます。
前受金を請求に充てる
| 借方 | 金額 | 貸方 | 金額 |
|---|---|---|---|
| 前受金 | 110,000 | 売掛金 | 110,000 |
売上の計上は別の仕訳で行います
allocations| id | payment_id | invoice_id | amount | kind |
|---|---|---|---|---|
| A-9 | P-7 | INV-20 | 110,000 | cash |
入金日より請求日があとでも、同じ形で表せる
前受金と収益の関係はサブスクの前受収益の記事で扱います。
振込手数料の差額
取引先が手数料を差し引いて振り込むと、請求額より少なく入金されます。国税庁のインボイスQ&Aの問29は、売手が負担する場合の整理を3つに分けています。どれに当たるかは、取引当事者の契約関係などによります。
| 整理 | 売手の消費税の扱い | 売手に必要なもの |
|---|---|---|
| 売上値引き | 売上げに係る対価の返還等 | 適格返還請求書が原則。ただし税込1万円未満なら交付義務なし |
| 買手からの役務の対価 | 課税仕入れ | 買手の適格請求書、または売手が作成して買手の確認を受けた仕入明細書等 |
| 買手による立替払 | 金融機関への課税仕入れ | 金融機関の適格請求書と立替金精算書等。差引額は実際の手数料と同額。ATM での振込なら例外あり |
一定規模以下の事業者には、令和11年9月30日まで、1万円未満の課税仕入れなら帳簿のみの保存で足りる経過措置もあります(問29の注)。
売上値引きとする場合、適用税率は元の取引に従います。軽減税率8%の商品の代金なら、差額も8%です。つまり、手数料の差額でも元の請求の税率を引き継げるデータが必要です。
また問30は、経理上は支払手数料としつつ、消費税では対価の返還等として扱うこともできると説明しています。その場合は、通常の支払手数料と区別できるようコードを分ける対応が考えられるとしています。勘定科目だけでなく、税区分で分ける設計が必要になる場面です。
110,000円の請求に109,560円が入金され、売上値引きとした場合の例です。
手数料の差額を売上値引きにする
| 借方 | 金額 | 貸方 | 金額 |
|---|---|---|---|
| 普通預金 | 109,560 | 売掛金 | 110,000 |
| 売上値引 | 400 | ||
| 仮受消費税 | 40 |
税率10%の例。440円を税抜400円と税40円に分けています
allocations| id | payment_id | invoice_id | amount | kind |
|---|---|---|---|---|
| A-21 | P-11 | INV-30 | 109,560 | cash |
| A-22 | P-11 | INV-30 | 440 | fee |
fee の行は入金の未充当額には数えない
自動消込では、差額が一定額以下なら手数料とみなす許容額を設けることがあります。これは設計の例です。許容額を取引先別に持てるようにし、手数料の扱いが請求先の取り決めと合っているかを経理が確認します。
もう一つ、自社が発注者側のときの注意があります。令和8年1月1日に下請法から改められた取適法(中小受託取引適正化法)の対象となる取引では、公正取引委員会の運用基準が、合意の有無にかかわらず振込手数料を中小受託事業者に負担させて代金から差し引くことを減額の例に挙げています。支払側のシステムに「手数料を差し引いて振り込む」設定があるなら、対象の取引で動かないよう確認が必要です。対象かどうかの判断は法務や経理に確認してください。
一部入金はどの請求に充てるか
入金額が残っている請求の全部に足りないとき、どれに充てるかが問題になります。古い順に自動で充てる設計はよく考えられますが、民法には順番の決まりがあります。
民法第490条は、当事者の間に充当の順序の合意があればそれに従うと定めています。合意がないとき、第488条は、まず払う側の指定、次に受け取る側の指定とし、どちらもなければ法定の順序によるとしています。法定の順序は、弁済期にあるものを先にし、そのうえで債務者の利益が多いもの、弁済期が先のものへと続きます。利息や費用があるときは、第489条で費用、利息、元本の順です。
設計の例としては、次のように分けます。
- 振込の依頼人が請求番号を伝えてきた入金は、その請求に充てる
- 基本契約に充当順の定めがある取引先は、その順に充てる
- どちらでもないものは、支払期日の古い順を候補として出し、担当者が確定する
候補を出すだけか、自動で確定するかは、件数と金額を見て決めます。結果を確定したあとで取引先から指定が届くこともあるので、取り消せる作りにしておきます。
消込の取り消しと自動化
誤って消し込んだときは、allocations の行を DELETE せず、打ち消す行を足します。赤伝と同じ考え方です。消込で仕訳も出しているなら、その仕訳も赤伝で取り消します。
allocations| id | payment_id | invoice_id | amount | kind | reversal_of |
|---|---|---|---|---|---|
| A-31 | P-20 | INV-40 | 55,000 | cash | NULL |
| A-32 | P-20 | INV-40 | -55,000 | cash | A-31 |
| A-33 | P-20 | INV-41 | 55,000 | cash | NULL |
INV-40 に誤って充てた入金を INV-41 に付け替えた例
自動化は段階を分けると作りやすくなります。
- 金額と取引先が完全に一致するものを自動で候補にする
- 請求番号が振込情報にあれば優先する
- 複数の請求の組み合わせで入金額に一致するものを探す
- 手数料の許容額の範囲で差額を候補にする
取引先ごとに専用の振込先口座番号を割り当てるサービスを使えば、振込人名の表記ゆれに左右されにくくなります。振込人名は略称やカナで届き、請求先の名前と一致しないことがあるので、取引先ごとに名寄せの辞書を持つ設計が考えられます。
最後に、月次の確認を入れます。allocations から求めた請求別の残高の合計が、総勘定元帳の売掛金の残高と一致することを、締めの前に検査します。月次の締めの記事の確認項目の一つです。
判断の練習
よくある質問
- 入金消込とは何ですか?
- 銀行に入った入金が、どの請求の代金なのかを特定し、その分の売掛金を減らす業務です。消し込みとも書きます。
- 入金消込のテーブルはなぜ多対多になるのですか?
- 1回の入金で複数の請求をまとめて払う合算と、1つの請求を複数回で払う分割の両方が起きるからです。入金と請求の間に、充当額を持つ中間テーブルを置きます。
- 振込手数料が引かれて入金されたときの仕訳は?
- 売手が負担するなら、差額を売上値引きか支払手数料などで処理します。どちらにするかは取引の取り決めと社内の経理処理で決まり、消費税の扱いも変わります。
- 一部入金はどの請求から充てますか?
- 取引先の指定や、充当順の合意があればそれに従います。指定も合意もなければ民法の定めがあります。システムでは候補を出し、確定は担当者の判断にする設計が考えられます。
- 請求より先に入金があったときは?
- 売掛金がまだないので、前受金や仮受金などで受けます。請求を出した時点で売掛金と相殺します。
出典