从手机通知中提取个人已发生的消费流水(外卖、快递、缴费、购物、打车、加油、信用卡还款、转账等),按类目和时间汇总并给出总额。触发:花了多少 / 花销 / 消费 / 账单 / 开销 / 支出 / 这周/这个月/上个月/最近/今天 + 花/钱/消费 / 外卖花了多少 / 打车花了多少 / 加油多少 / 缴费多少。
---
name: yoooclaw-expense-tracker
description: 从手机通知中提取个人已发生的消费流水(外卖、快递、缴费、购物、打车、加油、信用卡还款、转账等),按类目和时间汇总并给出总额。触发:花了多少 / 花销 / 消费 / 账单 / 开销 / 支出 / 这周/这个月/上个月/最近/今天 + 花/钱/消费 / 外卖花了多少 / 打车花了多少 / 加油多少 / 缴费多少。
---
# expense-tracker
## 目标
面向**个人**用户:手机里塞满了银行短信、微信/支付宝支付通知、外卖订单、打车凭证、各类缴费成功提醒。本 skill 把这些"涉及钱"的通知抽出来,按**类目**和**时间**两个维度汇总,并给出**总支出**。
用户通过安装弹窗的「关注什么事」字段设置汇总偏好,如:每周汇总、重点看餐饮和出行、只关注大额消费等。
不假设特定的支付习惯、银行卡或商家——**全部从通知数据中识别**。
## 数据加载策略
- **先通过 `openclaw ntf storage-path` 获取通知存储目录**(用 Bash 工具运行该命令,stdout 即是目录的绝对路径)。后续所有通知文件直接在这个目录下,命名为 `YYYY-MM-DD.json`。
- **文件命名**:`YYYY-MM-DD.json`,一天一文件,包含当日全部 App 通知
- **加载优先级**:① 用户在 prompt 里明确给的路径 > ② `<storage-path>/<YYYY-MM-DD>.json`
- **时间窗口(按用户问法动态决定)**:
- "今天花了多少" → 仅当天日期对应的文件
- "昨天花了多少" → 仅昨天日期对应的文件
- "这周/本周" → 本周一 00:00 至今
- "上周" → 上周一至上周日
- "这个月/本月" → 当月 1 日至今
- "上个月" → 上月 1 日至上月末
- "最近" / "最近几天" → 默认近 7 天
- "最近 N 天" → 近 N 天
- 用户给定具体日期段(如 "5/1-5/7")→ 严格按用户指定
- 定时任务中根据「关注什么事」中的汇总周期决定:如"每周汇总"→ 近 7 天,"每月汇总"→ 当月至今
- 跳过不存在的文件,不报错
- 若 `openclaw ntf storage-path` 不可用,提示用户给出数据路径
- 若用户在问句里指定了类目(如"这周**外卖**花了多少"),在加载完后做类目过滤再展示
## 输入数据 schema
JSON 数组,每条:
```json
{"appName":"com.tencent.xin","title":"群名或联系人名","content":"消息内容","timestamp":"2026-04-22T10:30:00.000+08:00","appDisplayName":"微信"}
```
- `appDisplayName` 区分来源:微信 / 短信 / 支付宝 / 云闪付 / 美团 / 饿了么 / 滴滴出行 / 邮件 等
- `title` 为发送方("工商银行"、"招商银行信用卡"、"美团外卖"、商家名、联系人名)
- `content` 中通常含金额字段(¥X.XX / X.XX 元 / RMB X.XX)
## 核心逻辑
### 1. 金额信号识别
扫一遍全部通知,识别"已发生支付"的事件。重点信号:
- **银行 / 信用卡短信**:含「消费 / 支付 / 扣款 / 取现 / 还款 / POS / 网银 / 快捷支付 ¥X.XX」
- **支付平台通知**(支付宝、微信支付、云闪付):付款成功 / 转账已到账 / 收款 / 退款
- **外卖订单**(美团、饿了么等):订单已支付 / 已送达 + 实付金额
- **打车 / 出行**:行程结束 + 实付
- **加油**:加油站电子发票 / 油卡扣款短信
- **生活缴费**:水 / 电 / 燃气 / 物业 / 宽带 / 话费充值的"缴费成功"通知
- **快递代收费**:菜鸟驿站 / 丰巢取件费、超时保管费
- **网购确认订单**(淘宝 / 京东 / 拼多多 / 唯品会 等):付款成功通知
- **商超 / 线下刷卡**:银行短信里的 POS 消费
- **转账**:微信转账、支付宝转账给个人的(**单独标记**,不混入消费)
- **退款 / 返现 / 红包退回**:作为**负值**纳入对应类目,影响该类目和总额
每条事件抽取:`{时间, 来源 App, 商家/标题, 金额, 类目, 备注}`。
### 2. 类目自动归类
| Emoji | 类目 | 典型来源 |
|---|---|---|
| 🍱 | 餐饮外卖 | 美团 / 饿了么 / 餐饮店刷卡 / 咖啡奶茶 |
| 📦 | 快递物流 | 菜鸟 / 丰巢 / 顺丰寄件 / 取件费 |
| 🏠 | 生活缴费 | 水电燃气 / 物业 / 宽带 / 话费 |
| 🚗 | 出行交通 | 滴滴 / 高德打车 / 地铁 / 高铁 / 加油 |
| 🛒 | 购物 | 淘宝 / 京东 / 拼多多 / 商超刷卡 |
| 💳 | 信用卡还款 | 信用卡还款短信、贷款扣款 |
| 🔁 | 转账 | 给个人的微信/支付宝转账(**与消费分开统计**) |
| 🎓 | 教育 | 培训机构 / 课外班缴费 |
| 💊 | 医疗 | 医院 / 药店 / 体检 |
| 🎁 | 其他 | 不能明确归入以上的 |
不能确定类目时一律归 🎁 其他,**不要硬塞**。
如果用户在「关注什么事」中指定了重点类目(如"重点看餐饮和出行"),在输出中将这些类目置顶并高亮。
### 3. 去重
同一笔交易常被多个通知重复推送(银行短信 + 支付平台 App + 商家小程序)。去重规则:
- **金额完全一致 + 商家关键词重叠** → 视为同一笔,保留信息最完整的一条(优先银行短信 > 支付平台 > 商家通知)
- 不要把"待支付提醒"和"支付成功"算两次
### 4. 输出视图(按用户问法切换)
**A. 总览模式**("最近花了多少 / 今天花了多少 / 这周花了多少")
按类目 + 按日期两段都给出。
**B. 单类目模式**("这周外卖花了多少 / 这个月打车花了多少")
仅展示该类目,按日期列明细。
详见下文输出模板。
## 过滤规则
- **营销 / 优惠券 / 满减推送**("立减 X 元"、"满 X 减 Y"、"X 元红包待领取"、"返现 X 元活动")→ 丢弃。**只看真实发生的支付。**
- **账单生成提醒**("您的信用卡账单已生成 ¥X,还款日 ...")→ 不计入"花了多少";如果用户问的是"还要还多少"才单独列;本 skill 主流程**不计入总额**。
- **额度 / 余额变动通知里没有金额或不含商家**的 → 列入"待确认"小节,不计入总额。
- **股票 / 基金 / 理财收益变动** → 不算消费,丢弃。
- **小红书 / 拼多多 / 抖音的纯运营推送、新品推荐、直播预告** → 丢弃。
- **退款单独标记**:在条目末尾用 `(退款 -¥X.XX)` 形式呈现并冲减总额。
- **个人转账单独成块**:转给家人朋友的微信/支付宝转账放在「🔁 转账」块,**不计入"消费总支出"**,但单独给出"转账合计"。
## 输出模板
### A. 总览模式
```
💰 消费汇总(YYYY-MM-DD ~ YYYY-MM-DD)
总支出:¥X,XXX.XX(共 N 笔)
转账合计(不计入支出):¥X,XXX.XX(M 笔)
━━ 按类目 ━━
🍱 餐饮外卖 ¥XXX.XX(N 笔)
🛒 购物 ¥XXX.XX(N 笔)
🚗 出行交通 ¥XXX.XX(N 笔)
🏠 生活缴费 ¥XXX.XX(N 笔)
📦 快递物流 ¥XX.XX(N 笔)
💳 信用卡还款 ¥XXX.XX(N 笔)
...
━━ 按日期 ━━
M/D(周X)¥XXX.XX
🍱 美团外卖 ¥XX.XX <店名>
🚗 滴滴打车 ¥XX.XX <路线/起终点>
🛒 淘宝 ¥XX.XX <商品名>
M/D(周X)¥XXX.XX
...
━━ 待确认 ━━(如有)
☐ <来源>:<原文摘要>,金额未识别
```
### B. 单类目模式
```
🍱 餐饮外卖(YYYY-MM-DD ~ YYYY-MM-DD)
合计:¥XXX.XX(N 笔)
M/D(周X)
美团外卖 ¥XX.XX <店名>
瑞幸 ¥XX.XX
M/D(周X)
饿了么 ¥XX.XX <店名>
...
```
## 质量约束
- 含金额关键字(¥ / 元 / RMB / `\d+\.\d{2}`)的支付/扣款/订单通知应**100%** 被抽取并归类
- **去重**:同一笔不能被算两次(典型反例:银行短信 + 支付宝 App 同时通知 ¥38.50 美团付款)
- **总额自洽**:按类目合计 = 按日期合计 = 顶部「总支出」
- 退款用负数冲减,并在备注里注明 "(退款)"
- **不编造**:通知里没有金额或商家就不要硬填,归入"待确认"
- 转账与消费严格分块,避免把转给亲友的钱算成"花掉了"
don't have the plugin yet? install it then click "run inline in claude" again.