見出し画像

レシートをGoogleドライブ保存するだけでfreeeに仮取引は作成できるのか!? その1 - 過去の取引パターンを抽出する

面倒な証憑管理を自動化するシリーズですが、今回は実践的というよりも実験的なスクリプトです。

スクリプトは完成しましたが、実運用してみないと便利なのかどうかわからない…という状態のため、実際に使ってみてブラッシュアップしていかないととは思っています。


前提条件

今回は、受取請求書ではなく、日々の細々した領収書やレシートを対象にします。請求書と日々の経費のレシートではロジック制御が変わってくるかなーというのがその理由です。

加えて、会社の規模や求められる粒度によると思いますが、仕訳(取引)入力は、重要な業務であるため人間のチェックを経ない完全自動化は目指しません。あくまで省力化を目的にしています。

現状(2024年2月現在)レシートの経費入力で面倒なのが…

  • 消費税の軽減税率など複数税率が存在する

  • 適格請求書かどうか判定する必要がある

です。

税率が複数混在する場合は複数明細を作成しないといけないですし、適格請求書かどうかで税区分を分けないといけません(面倒すぎる)。

この最終判断はやはり人間のお仕事ですが、省力化のため「真面目だけれどちょっぴりあわてんぼうなアシスタント」に手伝ってもらうイメージです。

開発方針

開発方針は以下の通り

  1. Googleドライブに証憑格納フォルダとアップロード済フォルダを用意

  2. Drive APIでレシートの内容をOCR

  3. OCR結果をChat API(ChatGPTに相当)に解析してもらう

  4. 勘定科目は、freee過去1年の取引データから「勘定科目・取引備考」のペアをもとに類推させる

  5. 経費科目として利用する勘定科目を絞り込んで列挙しておく

  6. 適格請求書の判定は「登録番号の記載」で判断させる

  7. レシートに存在する消費税の種類(10%・8%・非課税)を類推させる

  8. 上記の結果をJSONで出力させ、そこからfreeeの取引データを抜粋する

  9. 出力結果をもとにファイル名をリネームする

  10. 日付・金額・証憑メモ・適格請求書判定などメタデータを含めてアップロードする

  11. 証憑ファイルのアップロード後のレスポンスからIDを取得する

  12. 証憑IDを含めて取引をfreeeに登録する

と、けっこう超大作です。

事前準備

本記事は、マガジン「freeeファイルボックスの証憑管理を自動化しよう!」の一部です。

過去記事で紹介したスクリプトをアップデートして実装していますので、過去記事もご参照ください。

また、このスクリプトには、freee APIを利用します。以下のマガジンで解説している事前準備が必要です。

加えて、OpenAIのChat APIを利用します(有料)。以下の記事で解説している事前準備が必要です。

「仮登録」と「ChatAPI」のメモタグ準備

今回のスクリプトは取引の登録まで自動化しています。ただ、人の手でチェック・修正しなくてはいけないポイントは多数でてくるので、freeeの取引一覧から効率的にチェック対象取引を絞り込むためにメモタグを付与します。

チェック前:仮登録
チェック後:ChatAPI

という新規タグを作成しておきます。

メニューの設定>メモタグの設定
新規作成
ChatAPIのメモタグ
仮登録のメモタグ

仮勘定の勘定科目作成

メモタグに加えてChatAPIが勘定科目を判定できなかったときのための仮勘定という勘定科目を追加しておきます。

メニューの設定>勘定科目の設定
新規作成
仮勘定の作成

月次や決算のチェック時にはこの仮勘定は全て解消されている(正しい勘定科目が割当られている)前提なので、細かい設定項目はあまり気にしなくてよいかなと思います。一応、不明な経費性の支出ということで販売管理費の雑費としました。

注意と免責事項

スクリプトはテスト環境で動作テスト済ですが、ユーザー個々の環境で動作しない場合があります。

またGoogle Apps Script(以降GAS)はじめ、各種APIやサービスの仕様変更によって動作しなくなる場合があります。

一部のスクリプトでOpenAIのChat API(Chat GPTに相当)を利用しています。そのため、出力結果が必ずしも期待している内容にならない場合があります。

以上を踏まえ、本記事はコードの共有のみを目的としており、動作保証やサポートは必ずしもお約束しません。

賞味期限(管理人によるバグ修正や仕様変更に伴うアップデート対応期限)は本記事公開後3ヶ月とします。ただし、利用しているAPI等の大幅アップデート(破壊的変更)があった場合はこの限りではありません。

また、このスクリプトの使用から生じるいかなる結果に対しても責任を負いかねますので、ご自身のテスト環境で十分にテストを重ねた上で、使用者の自己責任にてのみご使用ください。

freeeの領収書アップロードと仮取引の作成を自動化するスクリプト

ということでスクリプト紹介の前に実行結果を…

無事登録できています!涙

テスト環境では、この取引以外にもいくつか試してみていますが、金額(総額)と日付は95%以上の精度です。

適格請求書の判定は、まだまだサンプル数が少ない印象です。が、概ね対応できている印象。そもそも判定結果に対応して税区分を変更する…という実装には至っていません(やればできる)。

スクリプトの構成

今回は…

  • freee APIライブラリ

  • OpenAIChat クラス

  • extractDealPattern_関数 NEW!

  • img2Text_関数

  • receiptText2JSON_関数 UPDATE!

  • triggerUploadFilePostDeal関数(実行関数) UPDATE!

の構成で実装しています。

OpenAIChat クラスとimg2Text_関数に関しては以下記事参照のこと。

freeeの取引データから勘定科目・品目・備考のパターンを抽出する関数

まず、ChatAPIによる勘定科目の類推の部分ですが、レシート等からの支払日・金額・支払先だけで類推するのは難しいと考え、過去の取引から「勘定科目・品目・取引の備考」のパターンを取得し、そのデータを参考に支払先を類推させるようにしました。

その前提として、証憑から読み取った支払先を取引の備考に入力する運用を採用しています。

ここでなぜ取引先タグを使用しないのか?と思われる方がいらっしゃると思いますが、日々の細々とした支払先を取引先に登録していくとあっというまに登録件数が膨れ上がり、freeeの動作はもっさりするわ、件数がありすぎて参考にならないわ、名揺れは続発するわで、あまりスマートの運用とは言えません。取引先は原則として債権・債務を管理する先に限定するのがオススメです。

freeelover

今回は品目のデータも抽出していますが、実は本記事のスクリプトでは品目データはあまり参考にしていません。将来のための予防的実装です。

ということでextractDealPattern_関数はこちら

ここから先は

1,802字

アーリーバードプラン

¥500 / 月
人数制限あり
このメンバーシップの詳細

この記事が気に入ったらチップで応援してみませんか?