見出し画像

レシートをGoogleドライブ保存するだけでfreeeに仮取引は作成できるのか!? その2 - 過去パターンから勘定科目を類推させる

前回の記事で、freeeの取引データから勘定科目・品目・備考のパターンを抽出するextractDealPattern_関数をご紹介しました。

この関数によって過去1年分の「勘定科目・品目・取引備考」のプロパティを持ったオブジェクトが抽出できます。

これをChatAPI(ChatGPTに相当)のプロンプトに突っ込んで、過去のパターンから新しいレシートの勘定科目などを推測させようという作戦です。

freeeラボのメンバーの方は、この関数のコードを前回の記事で確認できると思いますので、今回はまず実行テストを行います。

この関数が引数として解析したい取引データの配列・アクセストークン・事業所IDを渡すと勘定科目・品目・取引備考(支払先を記録)のプロパティを持つオブジェクトが戻り値として返ってきます。

/**
 * freeeAPIを使用して取得した取引データから取引パターンを抽出しテストする関数。
 * 
 * @description freeeAPIのアクセストークンと事業所IDを使用して、指定された事業所の全取引データを取得し、
 * それらの取引から取引パターンを抽出する。抽出した取引パターンはコンソールに出力される。
 * 
 * @returns {void} この関数は直接の戻り値を持たない。
 */

function testExtractDealPattern() {
  // freeeAPIのアクセストークンと事業所IDを取得
  const accessToken = getFreeeAccessToken();
  const company_id = freeeAPI.myCompanies(accessToken).getMyCompanyId('freeeラボ(法人)ベーシック');

  // freeeAPIを使用して全取引データを取得
  const freee_Deal = freeeAPI.deals(accessToken, company_id);
  const aryObjDeal = freee_Deal.getAllDeals();

  // 取引データから取引パターンを抽出
  const aryObjPattern = extractDealPattern_(aryObjDeal, accessToken, company_id);

  // 抽出した取引パターンをコンソールに出力
  console.log(aryObjPattern);
}
実行結果(一部ぼかしてます)

いい感じですね。

この関数を使って、OCRで読み取った領収書やレシートのテキストから、必要な情報を抽出してJSON形式で返すreceiptText2JSON_関数をアップデートします。

receiptText2JSON_関数に関してはこちらの記事を参照してください。


注意と免責事項

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

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

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

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

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

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

receiptText2JSON_関数をアップデート

アップデート前のレシートのOCRテキストから勘定科目・支払総額・支払日・支払先をプロパティに持つオブジェクトを生成していました。

この勘定科目はOCRテキストの内容からの類推でしたが、さすがにChatAPIには酷な要求かと思い、今回はこの部分をアップデートしています。

具体的には、extractDealPattern_関数で抽出した取引パターンをもとに勘定科目を類推させています。加えて、レシート類の経費科目として使用するであろう勘定科目を事前に絞り込んで列挙することで、精度を上げています。

取引パターンは過去1年分の取引から「支出・決済完了・決済口座が銀行以外・証憑が添付されている」取引にフィルタリングし、レシート類の支出であろう取引に絞り込んでいます。

このデータが長くなるとプロンプトに渡すトークンが大きくなってしまうので、API利用料も嵩みますし、そもそもトークンの上限を超過する可能性もあるため、条件をさらに絞り込むや重複したデータを削除する処理も実務では必要になってくると思います。

ということでスクリプトはこちら

ここから先は

5,007字

アーリーバードプラン

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

この記事が気に入ったらサポートをしてみませんか?