ClawSkills logoClawSkills

Refund Radar

扫描银行报表以检测经常性费用、标记可疑交易,并使用交互式 HTML 报告起草退款请求。

介绍

# refund-radar

扫描银行对账单以检测周期性扣费,标记可疑交易,识别重复项和费用,起草退款请求模板,并生成交互式 HTML 审计报告。

## Triggers

- “scan my bank statement for refunds”(扫描我的银行对账单以查找退款) - “analyze my credit card transactions”(分析我的信用卡交易) - “find recurring charges in my statement”(在我的对账单中查找周期性扣费) - “check for duplicate or suspicious charges”(检查重复或可疑的扣费) - “help me dispute a charge”(帮我争议一笔扣费) - “generate a refund request”(生成退款请求) - “audit my subscriptions”(审计我的订阅)

## Workflow

### 1. Get Transaction Data

询问用户的银行/卡 CSV 导出文件或粘贴的文本。常见来源:

- Apple Card: Wallet → Card Balance → Export - Chase: Accounts → Download activity → CSV - Mint: Transactions → Export - Any bank: Download as CSV from transaction history(任何银行:从交易历史下载为 CSV)

或接受粘贴的文本格式: ``` 2026-01-03 Spotify -11.99 USD 2026-01-15 Salary +4500 USD ```

### 2. Parse and Normalize

对其数据运行解析器:

```bash python -m refund_radar analyze --csv statement.csv --month 2026-01 ```

或对于粘贴的文本: ```bash python -m refund_radar analyze --stdin --month 2026-01 --default-currency USD ```

解析器自动检测: - Delimiter (comma, semicolon, tab)(分隔符:逗号、分号、制表符) - Date format (YYYY-MM-DD, DD/MM/YYYY, MM/DD/YYYY)(日期格式) - Amount format (single column or debit/credit)(金额格式:单列或借/贷) - Currency(货币)

### 3. Review Recurring Charges

工具通过以下方式识别周期性订阅: - Same merchant >= 2 times in 90 days(同一商户在 90 天内 >= 2 次) - Similar amounts (within 5% or $2)(金额相似:在 5% 或 2 美元以内) - Consistent cadence (weekly, monthly, yearly)(一致的节奏:每周、每月、每年) - Known subscription keywords (Netflix, Spotify, etc.)(已知订阅关键词,如 Netflix、Spotify 等)

输出显示: - Merchant name(商户名称) - Average amount and cadence(平均金额和节奏) - Last charge date(最后扣费日期) - Next expected charge(预计下次扣费)

### 4. Flag Suspicious Charges

工具自动标记:

| Flag Type | Trigger | Severity | |-----------|---------|----------| | Duplicate | Same merchant + amount within 2 days(同一商户 + 2 天内相同金额) | HIGH | | Amount Spike | > 1.8x baseline, delta > $25(> 1.8 倍基准,差额 > 25 美元) | HIGH | | New Merchant | First time + amount > $30(首次出现 + 金额 > 30 美元) | MEDIUM | | Fee-like | Keywords (FEE, ATM, OVERDRAFT) + > $3(关键词如 FEE, ATM, OVERDRAFT + > 3 美元) | LOW | | Currency Anomaly | Unusual currency or DCC(异常货币或 DCC) | LOW |

### 5. Clarify with User

对于标记的项目,按每批 5-10 个进行询问:

- Is this charge legitimate?(这笔扣费合法吗?) - Should I mark this merchant as expected?(我应该将此商户标记为预期的吗?) - Do you want a refund template for this?(你想要为此生成退款模板吗?)

根据答案更新状态: ```bash python -m refund_radar mark-expected --merchant "Costco" python -m refund_radar mark-recurring --merchant "Netflix" ```

### 6. Generate HTML Report

报告保存至 `~/.refund_radar/reports/YYYY-MM.html`

复制 [template.html](assets/template.html) 结构。章节包括: - **Summary**(摘要):交易计数、总支出、周期性计数、标记计数 - **Recurring Charges**(周期性扣费):包含商户、金额、节奏、预计下次日期的表格 - **Unexpected Charges**(异常扣费):带有严重程度和原因的标记项目 - **Duplicates**(重复项):同日重复扣费 - **Fee-like Charges**(类费用):ATM 费、外汇费、服务费 - **Refund Templates**(退款模板):可供复制的电子邮件/聊天/争议消息

功能: - Privacy toggle (blur merchant names)(隐私开关:模糊商户名称) - Dark/light mode(深色/浅色模式) - Collapsible sections(可折叠章节) - Copy buttons on templates(模板上的复制按钮) - Auto-hide empty sections(自动隐藏空章节)

### 7. Draft Refund Requests

对于每个标记的扣费,生成三种模板类型: - **Email**(电子邮件):正式退款请求 - **Chat**(聊天):用于实时支持的快速消息 - **Dispute**(争议):银行争议表单文本

每种类型包含三种语气变体: - Concise (default)(简洁,默认) - Firm (assertive)(坚定,强势) - Friendly (polite)(友好,礼貌)

模板包括: - Merchant name and date(商户名称和日期) - Charge amount(扣费金额) - Dispute reason based on flag type(基于标记类型的争议原因) - Placeholders for card last 4, reference number(卡号后四位、参考号的占位符)

**Important**(重要):任何生成的文本中均不包含撇号。

## CLI Reference

```bash # Analyze statement python -m refund_radar analyze --csv file.csv --month 2026-01

# Analyze from stdin python -m refund_radar analyze --stdin --month 2026-01 --default-currency CHF

# Mark merchant as expected python -m refund_radar mark-expected --merchant "Amazon"

# Mark merchant as recurring python -m refund_radar mark-recurring --merchant "Netflix"

# List expected merchants python -m refund_radar expected

# Reset learned state python -m refund_radar reset-state

# Export month data python -m refund_radar export --month 2026-01 --out data.json ```

## Files Written

| Path | Purpose | |------|---------| | `~/.refund_radar/state.json` | Learned preferences, merchant history(学习到的偏好、商户历史) | | `~/.refund_radar/reports/YYYY-MM.html` | Interactive audit report(交互式审计报告) | | `~/.refund_radar/reports/YYYY-MM.json` | Raw analysis data(原始分析数据) |

## Privacy

- **No network calls.**(无网络调用。)Everything runs locally.(所有操作均在本地运行。) - **No external APIs.**(无外部 API。)No Plaid, no cloud services.(不使用 Plaid,不使用云服务。) - **Your data stays on your machine.**(你的数据保留在你的机器上。) - **Privacy toggle in reports.**(报告中的隐私开关。)Blur merchant names with one click.(一键模糊商户名称。)

## Requirements

- Python 3.9+ - No external dependencies(无外部依赖)

## Repository

https://github.com/andreolf/refund-radar

更多产品