請求書の発行・受領を自動化する設計。インボイス制度と電子帳簿保存法に合わせて、業務システムの項目・保存・検索を組む
請求書の
この
この
請求書の自動化は「発行」と「受領」を分けて設計する
請求書の
| 観点 | 発行 | 受領 |
|---|---|---|
| 主な要件 | インボイス制度の |
電子帳簿保存法の |
| データの元 | 自社の |
取引先から |
| 自動化しやすい |
記載事項の |
受け取り口の |
| 人が見る所 | 発行前の |
内容の |
発行と
発行側は、インボイスの記載事項をそのままデータの項目にする
発行する
| 記載事項 | システムでの |
|---|---|
| 請求書を |
自社の |
| 取引年月日 | 明細ごとの |
| 取引内容 |
品目の |
| 税率ごとに |
明細から |
| 税率ごとに |
税率ごとの |
| 書類の |
取引先の |
ここで
消費税額の端数処理は、1枚につき税率ごとに1回
国税庁の
実装では、
type Line = { amountInclTax: number; rate: 10 | 8 }; // 明細の税込金額(円)
// 1枚の請求書につき、税率ごとに1回だけ端数処理する
function taxByRate(lines: Line[]) {
const totals = new Map<number, number>();
for (const l of lines) totals.set(l.rate, (totals.get(l.rate) ?? 0) + l.amountInclTax);
return [...totals].map(([rate, total]) => ({
rate,
total,
// 端数処理の方法(ここでは切捨て)は会社で決めて固定する
tax: Math.floor((total * rate) / (100 + rate)),
}));
}端数処理の
発行した請求書は、確定した後は書き換えられない形で7年残す
発行した
国税庁の
設計と
- 請求書に
「下書き」と 「確定」の 状態を 持たせ、 確定した 請求書は 更新も 削除も できないように する - 間違いを
直す ときは、 元の 請求書を 残したまま、 取り消しや 訂正の 請求書を 新しく 発行する - 確定した
時点の PDFも 合わせて 保存し、 データと PDFの どちらから でも 同じ 内容を 出せるように する
紙で
受領側は、電子で届いた請求書をデータのまま保存する
取引先から
国税庁が
| 区分 | 要件 | 設計で |
|---|---|---|
| 真実性 | 改ざんを |
どの |
| 可視性 | システムの |
自社で |
| 可視性 | ディスプレイ・プリンタと |
画面で |
| 可視性 | 検索機能の |
次の |
「自社開発の
受け取り口は
検索の要件は、3つの項目と範囲指定と組み合わせで作る
電子取引データの
国税庁の
- 組み合わせは
「AかつB」で 探せれば よく、 「Aまたは B」は 求められていない。 いったん 1つの 項目で 探し、 その 結果を さらに 別の 項目で 絞り込む方式でも よい - 取引金額は、
帳簿の 経理処理 (税抜・税込)に 合わせるのが 基本だが、 受け取った データに 書かれた 金額を 項目に しても よい - 税務職員からの
ダウンロードの 求めに 応じられるように していれば、 範囲指定と 組み合わせの 要件は 不要に なる。 さらに 基準期間の 売上高が 5,000万円以下なら、 検索の 要件は すべて 不要に なる
業務システムで
-- 受領した請求書の検索用の表(ファイル本体は別の保管場所に置き、場所だけを持つ)
CREATE TABLE received_invoices (
id BIGSERIAL PRIMARY KEY,
transaction_date DATE NOT NULL, -- 取引年月日
amount INTEGER NOT NULL, -- 取引金額(税込か税抜かは会社で統一)
counterparty TEXT NOT NULL, -- 取引先
file_key TEXT NOT NULL, -- 保管場所でのファイルの場所
received_at TIMESTAMPTZ NOT NULL DEFAULT now()
);
CREATE INDEX ON received_invoices (transaction_date, counterparty);
-- 日付の範囲と取引先を組み合わせて探す
SELECT * FROM received_invoices
WHERE transaction_date BETWEEN '2026-04-01' AND '2026-09-30'
AND counterparty = '取引先名';項目の
改ざんを防ぐ措置は、訂正削除の記録が残る作りにする
改ざんを
| 措置 | 向いている |
設計で |
|---|---|---|
| タイムスタンプ付きで |
取引先が |
受け取った |
| 受け取った |
外部の |
付与までの |
| 訂正削除の |
自社で |
変更の |
| 事務処理規程を |
システムを |
国税庁の |
訂正削除の
-- 変更の履歴は追記だけにし、更新と削除の権限はアプリの利用者に与えない
CREATE TABLE received_invoice_changes (
id BIGSERIAL PRIMARY KEY,
invoice_id BIGINT NOT NULL REFERENCES received_invoices(id),
changed_by TEXT NOT NULL,
changed_at TIMESTAMPTZ NOT NULL DEFAULT now(),
field TEXT NOT NULL, -- 変えた項目
before_value TEXT,
after_value TEXT,
reason TEXT NOT NULL -- 訂正・削除の理由
);削除の
取引先とデータでやり取りするなら、Peppol(JP PINT)も候補にする
請求書を
すべての
組む順番は、項目→確定→保存→検索→受け取り口
最後に、
- 発行する
請求書の 項目を、 インボイスの 記載事項に 合わせて 決める (端数処理の 方法も) - 「下書き」と
「確定」の 状態を 作り、 確定後は 書き換えられないように する - 発行した
請求書と 受け取った 請求書の 保存先、 保存期間、 改ざんを 防ぐ 措置を 決める - 受け取った
請求書の 検索用の 項目 (取引年月日・取引金額・取引先)を 決める - 受け取り口を
1か 所に まとめ、 取り込みと 確認の 手順を 決める - システムの
概要書と 操作説明書を 作り、 保存した 場所で 画面表示と 印刷が できる ことを 確かめる
法令の
根拠にした国税庁とデジタル庁の公表物(2026年10月3日閲覧)
- 国税庁
「適格請求書 :適格請求書の(インボイス)の 記載事項に ついて」 記載事項、 交付した 写しの 保存 - 国税庁
「消費税の :消費税額等の仕入税額控除制度に おける 適格請求書等保存方式に 関する Q&A」 問57 端数処理は 1つの 適格請求書に つき税率ごとに 1回 - 同Q&A 問79:交付した
写しの 保存期間 (7年間) - 同Q&A 問80:自社の
システムで 作った 請求書の 控えを データで 保存する 場合の 要件 - 同Q&A 問83:提供した
PDFの 元に なった データでの 保存 - 国税庁
「電子帳簿保存法一問 :保存の一答【電子取引関係】」 (令和6年6月) 要件の 一覧、 問16 (ファイル名と 索引簿)、 問41 (発行した 請求書データの データベースでの 保存)、 問42・43 (検索機能)、 問51 (取引金額の 税抜・税込) - 国税庁
「令和6年 :可視性と1月からの 電子取引データの 保存方法」 真実性、 売上高5,000万円以下の 扱い、 電子取引データが 原本である こと - デジタル庁
「JP PINT」 :Peppol をもとに した 日本の 標準仕様 JP PINT
よくある質問
業務システムから発行した請求書の控えは、PDFで残さないといけませんか?
必ずしも
メールで届いたPDFの請求書は、印刷して保存すれば足りますか?
令和6年1月以降に
小さな会社でも、検索機能を作り込む必要がありますか?
売上の