Skill: vivalavida-say-hi/yoooclaw-expense-tracker (version 1.0.0)

--- 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 美团付款） - **总额自洽**：按类目合计 = 按日期合计 = 顶部「总支出」 - 退款用负数冲减，并在备注里注明 "（退款）" - **不编造**：通知里没有金额或商家就不要硬填，归入"待确认" - 转账与消费严格分块，避免把转给亲友的钱算成"花掉了"


Security scan verdicts — ClawScan: suspicious | static analysis: clean | VirusTotal: clean | SkillSpector: suspicious (MEDIUM)