はじめに
TSKaigi Advent Calendar 2024の12/25の記事です。
メリークリスマス🎄TSKaigiで代表理事をしている竹下です。
TSKaigiは配信画面もTypeScript製だったという話に引き続き、TSKaigiの運営でTypeScript使っている紹介です。
TSKaigiの会計は、一般社団法人TSKaigi Associationが行っています。すべての購入物や支払いの帳簿をつけているのですが、2024年の10月から適格請求書発行事業者になったこともあり、税率区分の記録も適切に行わないといけなくなったため、会計をつける手間が増加しました。
そのため、なんとか省力化できないかと思い、領収書、請求書の情報を抜き出すプログラムを作ってみました。
今回はそのプログラムの流れと、どのように効率化しているかのご紹介です。
Excuse
すみません、作り込み切れませんでした。現時点では安定動作も怪しいです。
TSKaigiでの経費申請などの流れ
まず、TSKaigiの会計周りの申請は、Slackワークフローで組んでいます。
- 請求書の支払いを依頼するワークフロー
- 立て替えている金額の振込みを依頼するワークフロー
- 受け取った領収書を提出するワークフロー
などがあり、フォームから各種情報の入力(金額や会社名)と、請求書や領収書のファイルをアップロードすると手続きがされるようになっています。
最終的に、アップロードされたファイルが入力と一致しているかを確認しながら、支払い+帳簿へつけています。
問題点
フォームから入力された情報(金額や会社名)が正しいかを、アップロードされたファイルを目視でチェックするとともに、帳簿へ記載を行っています。
しかし、ファイルがSlack上にアップロードされており、スプレッドシートのどの行と一致したファイルかを確認するのに手間がかかっていました。
また、目視で金額やインボイスナンバーを確認し、手打ちで記載する必要もありました。
そこで、この部分を省力化し、ミスも減らせないかと思い、プログラムを作ることにしました。
作ったもの
の2つのプログラムを作成しました。
Slackからファイルの一括ダウンロード
src/download_slack_files_to_local.tsがその実装になります。
対象となるチャンネル(TSKaigiのSlackでは #経費 チャンネル)にアップロードされたファイルをすべてローカルにダウンロードしてくるだけのプログラムです。
領収書、請求書の読み取り
次のようなフローを内部で実装しています。
LLMには現在はGemini-1.5-flush
を使用しています。
- ファイル種類を判別し、pdfの場合はテキスト抽出、画像の場合はマルチモーダルで渡す
- ファイルの中身から、
領収書
、請求書(物品購入支払い)
、請求書(業務委託支払い)
を判別 - それぞれの内容に応じて、必要な情報を抜き出し
という流れで、処理をしています。
請求書を二種類に分けているのは、業務委託支払いの場合は源泉徴収額
が含まれるためです。
さいごに
このプログラムでCSVに情報を抜き出すことで、現在はチェックと帳簿への記載の省力化を行っています。
精度が上がってくれば、Slackワークフローでファイルの中身の情報を記載しなくても良いように変更していきたいと思います。
TSKaigiについて
2025年5月23日/24日にTSKaigi 2025が開催されます!
TSKaigiは日本最大級のTypeScriptをテーマとした技術カンファレンスです(前回の参加者2000人以上)
TypeScriptに興味のある方は、ぜひ公式サイトやXを確認してみてください。