Skip to content

Angie-Ai1/StockTool

Repository files navigation

LINE 記帳小工具

Python FastAPI Google Cloud Run LINE Firestore

只要擁有 LINE 跟一個 Google 帳號就能記帳,不需要另外裝 App、也不用註冊新帳號。打字記帳或直接編輯 Google 試算表都行,兩邊資料可以即時同步。

Phase 1 MVP 已上線。 核心記帳、損益引擎、OAuth 連結、查詢/刪除/同步、LIFF 儀表板全部部署在 Google Cloud Run。

🔗 線上 Demo 儀表板(內建模擬資料,可直接點開): 持股趨勢儀表板 Demo


想解決的問題

  • 券商 App 只解決「即時報價」,不解決「多人、多帳戶、長期記帳」,比如說三家券商加起來到底持有多少,其實是無法看見的。

  • 若是大家共用一份 Google 試算表,或各自下載一個記帳 App。前者等於財務細節攤給所有人看,後者對「只是想給身邊人用」這樣的場景會太重。

專案亮點

  • 零信任管理員:讓試算表活在使用者自己的 Google Drive,不集中存在開發者雲端,這是整個架構最核心的取捨。
  • 跨帳戶、跨券商彙整:多個帳戶(不同券商、不同身份)彙整在同一套損益邏輯下檢視。
  • 零設定、零新介面:不用下載 App、不用註冊,LINE 聊天記帳,資料就是熟悉的 Google 試算表格式。
  • 全免費額度架構:Cloud Run、Cloud Scheduler、Firestore、Google 官方 API 全部卡在免費方案內設計,不靠升級付費繞過限制。
  • 貼台股零股交易的記帳邏輯:換行批次記帳、中文股名模糊比對、移動加權平均成本法、已實現/未實現損益分流、除權息與配股調整。

核心設計理念

  • 隱私優先:開發者(管理員)不持有、不集中保管任何使用者的財務資料。每位使用者透過自己的 Google 帳號 OAuth 授權,試算表建立在使用者自己的 Google Drive 裡,不是集中存在管理員的雲端空間。後端只存一張極小的「連結關係」對照表(LINE 帳號 ↔ 試算表 ID ↔ 加密授權憑證),不存任何實際記帳資料。
  • 雙入口都要通:使用者可以用 LINE 文字記帳,也可以直接打開自己的 Google 試算表手動輸入,兩條路殊途同歸,資料永遠以試算表為準。

使用者操作說明

加入 LINE 好友後,使用者將被引導使用 Google 帳號授權、自動在個人的 Google Drive 建立一份記帳試算表(資料庫),接著就能直接在LINE聊天室記帳。

1. 記帳格式(用空白間隔)

類型 格式 範例
買進 買 股票 股數 總金額 買 台積電 100 85000
賣出 賣 股票 股數 總金額 賣 2330 50 48000
買/賣(不填股數) 買/賣 股票 總金額 買 台積電 85000
配息 配息 股票 金額 配息 0050 3000
配股 配股 股票 股數 配股 0056 100
  • 股票可輸入代碼或中文名稱,會自動模糊比對(例:台積電 = 2330)。
  • 單位預設為「股」;輸入 1張 會自動換算成 1000 股。
  • 可以一次多行輸入,一則訊息記多筆,部分行格式有問題只會提示那幾行、不影響其他行。

2. 常用指令

指令 功能
查詢 查看目前持股、損益、總資產
新增分頁 <名稱> 建立一個獨立帳戶分頁(例:新增分頁 海外帳戶),分類記錄不同券商/帳戶
立即同步 重新計算試算表損益並寫回狀態欄
使用說明 隨時叫出完整說明
❌ 刪除上一筆 記帳後 5 分鐘內可點按鈕撤回剛剛那筆

3. 多帳戶記帳

建立多個分頁後,在記帳開頭加上「分頁名稱/」即可指定要記到哪個帳戶:

海外帳戶/買 台積電 100 85000

若沒加標籤,LINE BOT機器人會用快速按鈕詢問你要記到哪個帳戶。

4. 圖表儀表板

輸入「查詢」或由選單點選「查詢」,則可開啟 LIFF 儀表板,檢視持股趨勢、損益走勢與各帳戶/個股的時間序變化(手機開全螢幕,電腦自動升級為寬幅版)。 可先看 線上 Demo 感受呈現效果。


技術架構

項目 選擇
後端 Python 3.10+ / FastAPI(大量 I/O 等待操作,適合 async)
資料儲存 Google Sheets(使用者自己 Drive 裡的試算表)+ OAuth 2.0
系統對照表 Google Cloud Firestore(僅存連結關係,不存記帳資料)
部署平台 Google Cloud Run + Cloud Scheduler(免費額度)
前端 LINE LIFF(手機)+ RWD 網頁(電腦自動升級寬幅版)、ECharts 圖表
外部資料源 臺灣證券交易所 OpenAPI、證券櫃買中心 OpenAPI

功能範圍

  • LINE 記帳:文字記帳(買/賣/股息/配股),支援換行批次多筆、股票代碼或中文名稱模糊比對、僅限 1:1 私訊(不處理群組訊息,保護隱私)
  • 試算表記帳:可直接在自己的試算表手動輸入,後端定期同步讀回計算
  • 損益引擎:移動加權平均成本法,已實現/未實現損益分流,賣超防呆,現金股息與股票股利(配股)皆支援
  • LINE 直接查詢:選單按鈕查看目前庫存、損益、總資產
  • LIFF 儀表板:登入連結狀態、持股趨勢與損益走勢圖、多帳戶/個股時間序
  • 帳號安全:OAuth 授權加密儲存、失效自動偵測與主動通知重新連結、LIFF 身分驗證採 id_token(不依賴網址參數)
  • 防呆機制:刪除上一筆(限時)、批次部分失敗時僅提示有問題的行、輸入不清楚時引導重新輸入

專案結構

app/
├── routers/        # FastAPI 路由:line_webhook / oauth_callback / liff / tick
├── services/       # 核心邏輯:parser / pnl_engine / sheets_client / oauth_service ...
├── models/         # Pydantic 資料模型
└── db/             # Firestore 連線
tests/              # pytest 測試(164 案例)
docs/demo/          # 內建模擬資料的儀表板 Demo(靜態 HTML)
scripts/            # Google Apps Script 等輔助腳本

本機開發

poetry install
poetry run pytest          # 執行測試
poetry run uvicorn app.main:app --reload

需設定的環境變數(LINE channel、Google OAuth client、Firestore 憑證、範本試算表 ID 等)見 app/config.py


⚠️ 本工具僅供個人記帳參考,非正式對帳或報稅依據。

About

採用 Cloud Run 與零信任架構設計的 LINE 記帳機器人,結合 OAuth 授權,讓財務資料完全保留在個人的 Google Drive 中

Topics

Resources

Stars

Watchers

Forks

Contributors

Languages