うーぱん(社内経理担当)

SUICA 明細自動化パイプライン

代表者 SUICA 利用明細(PDF / CSV)を自動取込し、SUICA 明細管理簿スプシに行追加する

バージョン: 1.0 実装日: 2026-06-09 担当エージェント: うーぱん スコープ: 社内経理(A10)のみ

概要

CEO が SUICA 利用明細(PDF または CSV)を Drive の INBOX_suica フォルダに投入すると、 うーぱんが自動で乗車履歴を抽出し、SUICA 明細管理簿スプシSUICA_自動取込 シートに 1 行ずつ追加します。

証憑管理簿シート 1 は更新しません。 SUICA 立替分は年末(または期末)に CEO がまとめて Freee 転記します。 このパイプラインはあくまで「叩き台の自動生成」です。

処理フロー

[CEO] Drive INBOX_suica に PDF / CSV を投入
        ↓
[うーぱん] LaunchAgent: com.connect8.upan.suica_poller(1 時間毎)
        ↓
[suica_pipeline.py]
  1. Drive ポーリング → 未処理ファイル取得
  2. パース
    - PDF: claude CLI(OAuth)で Vision OCR → JSON 抽出
    - CSV: Shift-JIS / UTF-8 自動判定、フォーマット自動検出(4 種)
  3. 対象期間(最古日〜最新日)を抽出
    → OK: YYYYMMDD-YYYYMMDD_suica利用明細.{ext} にリネーム
    → NG: _要確認_<元ファイル名> にリネーム
  4. SUICA_自動取込 シートに行追加(重複スキップ)
  5. ファイル移動
    → OK: 代表者交通費立替フォルダ
    → NG: _要確認フォルダ

Drive フォルダ

名称Drive ID説明
INBOX_suica 1up3bVjq-0DouBf1l516Sdk3tTKCXU3xG 投入口(CEO がドロップする場所)
SUICA 作業場 18pmkLwY-RfuuGdv7u0_J1ANA4HrL6cmE 処理中一時フォルダ
代表者交通費立替 153v2cIFZ7GncuRmcAF3yZ9YGZt_0aYp0 最終配置先(リネーム済みファイルが格納される)

スプシ構成

管理スプシ ID: 1PT1uZPLxVxPq6piHYtdNmV7pPd_z39rE0MtyYhajM68

既存手動シート(2026.6 交通費立替、2025.6 交通費立替... 等)は一切触りません。 うーぱんが書き込むのは SUICA_自動取込 シートのみです。

SUICA_自動取込 シート列構成(A〜L 列・12 列)

内容備考
A発生日YYYY-MM-DD
B乗車駅入駅
C降車駅出駅
D利用金額JPY 整数(丸め厳禁)
E残高JPY 整数
F備考自動では空欄。CEO が手動で追記可
G勘定科目「旅費交通費」固定
H会計年度7月始まり(例: 2026 = 2025/07〜2026/06)
IFreee 転記済スタッフ手動 ✓
J対象期間YYYYMMDD-YYYYMMDD 形式
KソースファイルDrive HYPERLINK(クリックでファイルを開ける)
L処理日時YYYY-MM-DD HH:MM JST

CSV フォーマット対応

スクリプトはヘッダー行を解析して CSV フォーマットを自動判定します。

フォーマット名識別条件主な出典
existing_manual 月/日 列 + 種別列 2 つ 既存手動スプシと同形式のエクスポート
mobile_suica 月日/利用日 + 差額/利用金額列 モバイル Suica / JRE POINT アプリ
pasmo 入列 + 出列あり PASMO / カードリーダー
jr_internet 種別 + 残高/残額列 JR 東日本インターネットサービス
不明フォーマットの場合: レコード 0 件 → 期間抽出不可 → _要確認_ プレフィックスでリネーム → _要確認 フォルダへ退避。 CEO に通知(ログ確認)。

リネーム規約

状態ファイル名フォーマット
OK YYYYMMDD-YYYYMMDD_suica利用明細.{pdf|csv}
例: 20260304-20260606_suica利用明細.pdf
要確認 _要確認_<元ファイル名>
例: _要確認_JE809xxxx_20260304.pdf

CEO テスト手順

1
SUICA 明細 PDF または CSV を Drive の INBOX_suica フォルダにドロップ
Drive を開く(INBOX_suica)
2
Mac mini で手動実行(LaunchAgent を待たずに即時テスト)
cd ~/claude/2_Areas/A10_corporate_finance/suica_pipeline
python3 suica_pipeline.py
3
スプシ確認
SUICA 明細管理簿スプシを開く SUICA_自動取込 タブに行追加を確認
4
ファイル移動確認
投入したファイルが「代表者交通費立替」フォルダに YYYYMMDD-YYYYMMDD_suica利用明細.pdf にリネームされて移動済みを確認
5
問題なければ LaunchAgent をインストール
cp ~/claude/2_Areas/A10_corporate_finance/suica_pipeline/com.connect8.upan.suica_poller.plist \
   ~/Library/LaunchAgents/
launchctl load ~/Library/LaunchAgents/com.connect8.upan.suica_poller.plist

LaunchAgent 仕様

項目
Labelcom.connect8.upan.suica_poller
実行間隔1 時間毎(StartInterval: 3600
plist 保管場所suica_pipeline/com.connect8.upan.suica_poller.plist
ログ出力_logs/suica_poller_stdout.log / suica_poller_stderr.log
処理済み ID 管理suica_pipeline/suica_processed_ids.json(べき等性保証)
既存ポーラーとの関係完全独立(com.connect8.upan.poller とは別)

実装ファイル

ファイル役割
suica_pipeline/suica_pipeline.py メインスクリプト(PDF OCR + CSV パース + スプシ追記 + ファイル移動)
suica_pipeline/setup_suica_sheet.py スプシ初期設定(SUICA_自動取込 シート新設・ヘッダー書込・列幅設定)
suica_pipeline/suica_processed_ids.json 処理済みファイル ID 管理(自動生成・べき等性保証)
suica_pipeline/com.connect8.upan.suica_poller.plist LaunchAgent 定義(1 時間毎定期実行)
_context/SPEC_a10_pipeline_v4.md §12 SUICA フロー仕様書(技術仕様・フォーマット定義)
_context/drive_folder_ids.json SUICA 関連フォルダ ID 登録済み(INBOX_suica / suica_workspace / suica_dest)

うーぱんルール(SUICA 専用)

トラブルシューティング

PDF OCR が失敗する場合

CSV フォーマット不明の場合

スプシに行が追加されない場合