四半期の資料回収を仕組みにする ― 打ち合わせメモから帳簿まで、4つのソースで「何が足りないか」を出す
顧問先から預かる資料が、四半期ごとにどこまで揃っているか。提出物の一覧は作ってありました。それでも、実際に何が足りないかを出そうとすると、Driveのフォルダを開いて、帳簿と突き合わせて、過去のやりとりを遡ることになります。
この確認が重いと、後回しになります。
詰まるのは「出してもらえないこと」ではない
確認が後回しになると、催促ができません。催促しないから資料が来ず、資料が来ないから記帳が進まない、という順番で詰まります。何が足りないかを判定できるのは、帳簿を見ている側だけなので、ここで止まると誰も動けなくなります。
途中、顧問先に提出物のチェックリストを作ってもらう案も出ました。ただ、これは筋が悪かったと思っています。1万円以上の仕入で請求書が要るかどうか、この月のこの支払に証憑が付いているかどうかは、帳簿を開いている側にしか見えません。判定できる人が判定する形にしないと、構造的に回りません。
そこで、判定と催促文面の生成までを自動化することにしました。この記事はその設計の記録です。
突き合わせる4つのソース
「何が足りないか」は、1か所を見てもわかりません。4つを突き合わせる必要がありました。
| ソース | ここからわかること | 取得方法 |
|---|---|---|
| 打ち合わせメモ | 何を依頼済みか、何が「不要」で決着したか | Drive API(Geminiの議事メモ) |
| Google Drive | 顧問先が提出済みの資料 | Drive API(フォルダを親IDで辿る) |
| マネーフォワードクラウド | 記帳の進み具合、証憑の有無 | MF API(仕訳・明細) |
| チャット(Google Chat) | すでに送られた資料、直近のやりとり | ブラウザ操作 |
チャットが意外と効きます。顧問先はチャットに直接PDFを貼ってくれることがあり、それがまだDriveに移されていないだけ、という状態が普通にあります。Driveだけ見て「未提出」と判定すると、もう送ってもらっているものを催促してしまう。これが一番やってはいけない誤判定です。
1. 打ち合わせメモから読む
Google Meetで打ち合わせをすると、Geminiが自動で議事メモを作ります。この「次のステップ」の節が、結果的に一番強い情報源でした。
- [顧問先] 在庫表作成: 6月末時点の在庫表を作成して保存する。
- [顧問先] 外注費資料保存: 外注費の支払内容がわかる資料を保存する。
依頼事項がそのまま並んでいます。DriveとMFから「足りないもの」を推測する前に、ここに答えが書いてあるわけです。しかも本人と口頭で合意した内容なので、催促の根拠としても一番強い。
もう1つ大きいのは、「この資料は要らない」という決着も入っていることです。あるカードについて「もう使っていないので連携は不要」と本人が答えていた回がありました。これを読まずに機械的な判定だけで催促すると、すでに回答をもらったことを蒸し返してしまいます。
判定の優先順位はこうしました。
- 打ち合わせメモの「次のステップ」で未完了のもの
- Drive / MFの突合で出た不足
- 提出物一覧の定型項目
1に入っているものを、2や3の言い方で催促し直さないようにしています。
メモから相手先を特定するのが難しい
ただし実装は素直にいきませんでした。Geminiのメモは YYYY/MM/DD HH:MM JST に開始した会議 - Gemini によるメモ というタイトルで、相手先が入りません。全顧問先のメモが1つのフォルダに混ざります。
最初はカレンダーの参加者で判定するつもりでした。ゲストのメールアドレスが取れれば一発だからです。ところが実際にカレンダーを開いてみると、打ち合わせがそもそも登録されていませんでした。チャットでその場でMeetのリンクを送って始めているので、予定として残っていない。メモがある日を2日分確認しましたが、どちらも「会議に割いた総時間 0 時間」でした。参加者から辿る道は最初から無かったわけです。
危うくカレンダーの接続作業から始めるところでした。やる前に、その方法で本当に判定できるかを実データで確かめる。これは今回いちばん学んだことかもしれません。
代わりにこうしています。
- 文字起こしの話者名と苗字で全文検索し、候補を出す
- 候補の「次のステップ」節だけを読んで、話者名のラベルで確定させる
- 確定したら台帳に記録し、次からは台帳を見る
3つ目が肝です。毎回すべてを検索し直す作りにすると、件数が増えるほど重くなります。一度確定させた対応関係は、二度と調べ直さない。
決着がつかない回のために、もう1つ手がかりを用意しました。チャットに投稿されたMeetリンクの時刻です。チャットのスペースは顧問先ごとに分かれているので、そこに「ビデオ会議に参加」が投稿された時刻と、メモのタイトルにある開始時刻を突き合わせれば確定します。実際に、19時56分の投稿と19時57分開始のメモが1分差で一致しました。
なお、サービス名で絞るのは失敗しました。「eBay」で検索すると15件出ます。EC事業者の顧問先は複数いるので、扱っているサービスでは相手を特定できません。
2. Driveをスキャンする
フォルダ構成は ルート / 年 / 四半期 / ファイル です。ここで踏んだ設計上のポイントが3つありました。
四半期フォルダの名前が揺れる。 実際には 1-3月 4~6月 7-9月 10-12月 のように、ハイフンと波ダッシュが混ざっています。人が手で作っているので当然です。正規表現は緩めに書きます。
^\s*(\d{1,2})\s*[-~〜–—-ー―]\s*(\d{1,2})\s*月
期によって中の構造が違う。 ある期は ebay payoneer report 不動産 のサブフォルダに分かれていて、別の期はファイルが直置きでした。1階層しか見ないと、サブフォルダ運用の期を丸ごと「未提出」と判定してしまいます。必ず再帰的に降ります。
ショートカットは参照先が取れない。 Google Driveのショートカットに対してメタデータを取っても、返ってくるのは「これはショートカットです」という情報だけで、リンク先のファイルIDは入っていません。同じ名前で検索して実体を探す手もありますが、確実ではありませんでした。結局、顧問先ごとの設定ファイルに実体のファイルIDを直接書いておく形にしました。自動で解決できないところは、設定として持つのが一番壊れません。
ファイル名は「規約」ではなく「辞書」で判定する
依頼シートには「ファイル名は 2025年4-6月_○○(名前) のようにしてください」と書いてありました。実際のファイルを見ると、ほとんどが業者からダウンロードしたときのデフォルト名のままです。
これは直してもらうより、こちらが業者側のデフォルト名を辞書として持つほうが運用が壊れません。顧問先に余計な手間をかけずに済みますし、そもそもダウンロードしたままの名前のほうが取り違えが起きにくい。
| ソース | パターン | 期間の取り方 |
|---|---|---|
| eBay Tax invoice | invoiceId-{売り手ID}_{年}-{月} |
ファイル名から確定 |
| eBay Financial Statement | Financial Statement-{月}-02-{年} |
翌月2日発行が前月分。1か月ずれる |
| Payoneer | Transactions_{月}-{年} |
ファイル名から確定 |
| 外注費の請求書 | 〇〇御中_△△△△{月}月利用分請求書 |
年が入らない。親フォルダの年で代用 |
ブラウザで同じファイルを2回落としたときに付く (4) のような連番は、照合前に落とします。
年が取れないファイル名は、親フォルダの年で代用したうえで「年はフォルダ由来」と注記を残すようにしました。判定できなかったものを「揃っている」に丸めないのが、この仕組みで一番大事なところです。
3. MFから「証憑のない仕訳」を拾う
マネーフォワードクラウドの仕訳には voucher_file_ids というフィールドがあり、証憑ファイルが添付されていなければ空配列で返ってきます。これで未添付の仕訳は機械的にわかります。
ただし、「未添付=不足」で判定すると全件が引っかかります。 実際にある四半期を数えたところ、仕訳35件のうち証憑が添付されていたのは2件でした。5.7%です。この状態で「証憑がない仕訳」を全部並べても、何も判定していないのと同じです。
絞り込みの条件として置いたのが次の主判定です。
invoice_kind == 適格請求書 かつ voucher_file_ids == []
適格請求書等保存方式で仕入税額控除を取っているのに、その証憑が保存されていない仕訳。金額の閾値も科目のホワイトリストも要らず、税務上の意味がそのまま条件になるのが気に入っています。同じ四半期で適格請求書として処理されているのは18件、そのうち添付ありは2件で11%。母数が半分になり、率も上がりました。
緊急度は3層に分ける
当初は「1万円以上/1万円未満」の2本立てで考えていました。書いているうちに、売上資料はそもそも軸が違うことに気づきました。
| 層 | 対象 | 無いとどうなるか |
|---|---|---|
| A 記帳不能 | 売上資料(EC各社の明細、家賃の送金明細など) | 税額の前に記帳に着手できない |
| B 税額に影響 | 1万円以上の経費の請求書・領収書 | 仕入税額控除が落ちて納税額が変わる |
| C 保存義務のみ | 1万円未満の経費 | 控除は少額特例で可。保存義務は残る |
Aが最優先です。売上の資料が来ないと四半期の作業が丸ごと止まるので、税額の話をする以前の問題になります。
BとCの線引きは少額特例によります。基準期間の課税売上高が1億円以下、または特定期間の課税売上高が5,000万円以下の事業者は、税込1万円未満の課税仕入れについて、帳簿の保存だけで仕入税額控除ができます。判定は一回の取引単位で、商品1個ずつではありません。
ここで実装上気をつけたのが適用期限です。少額特例は令和5年10月1日から令和11年9月30日までの課税仕入れが対象で、令和11年10月1日以後は対象外になります。つまり、この日を過ぎるとCの層がBに繰り上がります。コードにベタ書きせず、期限付きの定数として持たせ、判定日と比較する形にしました。
SHOGAKU_TOKUREI_EXPIRY = 2029-09-30
# この日を過ぎると1万円未満も適格請求書が必要になり、緊急度の3層が変わる
なお、消費税法上の要否と、所得税法上の保存義務・電子帳簿保存法の電子取引データ保存は別の話です。Cに落としたものも「保存しなくていい」わけではないので、催促の文面では「揃えておいてください」のトーンにしています。
4. 偽陽性をどう減らすか
自動判定は、外れたときに信用を失います。特に顧問先に送る文面の材料になるので、疑わしいものは出さない方向に振りました。除外したのは次のようなものです。
- 輸出許可通知書のフォルダ ― 還付申告の添付用に上位数社分だけ保存する運用で、全件が揃っているべき場所ではありません。原本は顧問先が持っています。ここを不足判定に入れると、永久に偽陽性が出続けます
- 振込手数料・カード手数料 ― 適格請求書として処理されていますが、明細で内容が特定でき、個別に請求書を受け取るものでもありません。件数だけ多くノイズになります
5. 催促文面を生成して送る
判定結果から文面を作ります。テンプレートは緊急度別に3種類(税額に影響するもの/保存義務のみのもの/そもそもフォルダが未作成のもの)用意して、不足リストを流し込みます。
作ってみて効いたのは、文面そのものより書かないことのルールでした。
- 揃っているものを列挙しない。安心させるための一覧は要りません
- 判定不能だったものは「確認させてください」の形にする。「ありません」と断定しない
- 「前回は出していただけていたので」という書き方は、前回が本当に揃っていたことを確認してから使う
- 提出期限は空欄にして、担当者が埋める。自動で決めない
送信先がGoogle Chatの場合、操作上の癖もありました。Enterで送信され、Shift+Enterは改行になりません。 改行入りの文面をそのまま流し込むと、行ごとにバラバラのメッセージとして飛びます。1段落にまとめるか、話題ごとに2〜3通に分けるのが現実的でした。
もう1つ、同じスレッドに数分前に投稿しているときは、挨拶から書き出さないようにしました。テンプレートの「お世話になっております」は間が空いているときの書き出しです。送信前にスレッドの最終投稿がいつのものかを見る、という手順を足しました。
よくある誤解
Q. 未添付の仕訳を全部拾えばいいのでは?
添付率が5%前後だと、全件が候補になって判定になりません。適格請求書として処理されているものに絞ると母数が半分になり、しかも「控除を取っているのに証憑がない」という税務上の意味が条件そのものになります。
Q. 顧問先にファイル名の規約を守ってもらえばいいのでは?
守ってもらえるならそれが一番ですが、業者のデフォルト名のままダウンロードするのが自然な動線です。こちら側が辞書を持つほうが、顧問先の手間も減って結果的に精度が上がりました。
Q. データ連携が止まっているかどうかは、明細の途切れでわかるのでは?
これは外しました。カードも口座も、利用がなければ明細は出ません。ある期に3つの連携で明細が途切れているように見えて、実際にエラーが出ていたのは2つだけ、残り1つは単に利用がなかっただけでした。連携の状態は、MFのホーム画面に出る「設定エラー」の表示で判断するのが正解です。API側にこの状態を返す口がないので、ここは画面を見に行っています。
人が判断するところは残す
全部を自動にはしていません。次の3つは人が見ます。
- 送信の可否 ― 文面は生成しますが、送るのは中身を確認してから
- 管理表への書き戻し ― 事務所で共有している表なので、更新内容を提示するところまで。書き込みは指示があったときだけ
- 連携エラーの確認 ― 前述のとおり画面を見る必要があります
判定を機械に任せて、判断は人に残す。この線引きにしてから、四半期のはじめに「今どこが足りないか」が数分で出るようになりました。確認が滞るのは、やる気の問題ではなく、確認そのものが重いからです。そこを軽くすれば、あとは回ります。
同じように四半期ごとの資料回収で詰まっている方は、まず「何が足りないかを、誰がどうやって判定しているか」を書き出してみると、詰まっている場所が見えるかもしれません。
参考
この内容について相談したい場合は
無料相談を申し込む