fix(split-meow): 混幣行程顯示警告並停止跨幣別錯誤加總#449
Conversation
- 偵測 trip 內多幣別時隱藏單一總額與結算,改顯示警告(四語系) - 跨幣別直接相加 totalSpent/settlements 為無效運算,避免顯示誤導金額 - 分享文字同步以警告取代錯誤總額與結算 - 補 HistoryTab 混幣/單幣行程行為測試(Codex review Q3) 測試:split-meow typecheck 通過;vitest HomeAndHistorySmoke 19 tests 通過
Dependency Review✅ No vulnerabilities or license issues or OpenSSF Scorecard issues found.Scanned FilesNone |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 8d6d91c5e0
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
|
|
||
| {/* 結清方式 */} | ||
| {settlements.length > 0 && ( | ||
| {settlements.length > 0 && !isMixedCurrency && ( |
| // 取得單筆記錄的顯示幣別(優先使用記帳當下快照,舊資料 fallback 主導幣別)。 | ||
| const expenseCurrency = (exp: ExpenseRecord): CurrencyCode => exp.currency ?? tripCurrency; | ||
| // 混幣行程:跨幣別直接相加的總額與結算為無效運算,改顯示警告而非誤導數字。 | ||
| const isMixedCurrency = new Set(tripExpenses.map((exp) => expenseCurrency(exp))).size > 1; |
There was a problem hiding this comment.
Treat legacy expenses as TWD in mixed-currency detection
isMixedCurrency 透過 expenseCurrency(exp) 判斷,但舊 expense 沒有 currency 時會 fallback 到 tripCurrency;若使用者從舊版 TWD 資料升級後切到 KRW 並新增費用,最舊那筆無 currency 的資料會被當成目前的 KRW,Set 只剩一種幣別,混幣警告不會出現,總額與結算又會把 TWD 與 KRW 直接相加。store 的型別註解已說舊資料缺欄位應視為 TWD,因此偵測時需要用 TWD 作為 legacy fallback。
Useful? React with 👍 / 👎.
背景
Codex 三方 review(Q3)發現 split-meow 的 production bug(已隨 #445 上線):當同一行程記到多種幣別(使用者在 Settings 中途切換全域幣別)時,
totalSpent/balances/settlements直接把不同幣別的數字相加,並以單一幣別標籤顯示——產生看似精準實則錯誤的總額與結算,Codex 評為「比沒有總額更糟」。修法(最小生產級安全修復)
isMixedCurrency(trip 內出現 >1 種幣別)。驗證
🤖 Generated with Claude Code