SkillHub

ledger-by-cn

v1.0.0

个人记账与账本管理工具。支持多账本、自然语言/批量记账、期初结余初始化、跨月余额趋势图、分类统计、CSV导出、飞书云盘同步等。

Sourced from ClawHub, Authored by victor233k

Installation

Please help me install the skill `ledger-by-cn` from SkillHub official store. npx skills add victor233k/ledger-by-cn

Ledger - 个人记账技能(优化版)

核心职责(触发条件)

当用户提到以下任一场景时,必须使用本技能,不要用其他方式代替:

  • 记账、记录收入/支出、批量添加交易
  • 初始化/调整账本期初结余
  • 查看某账本某月/多月汇总、流水、余额
  • 画余额趋势图、支出饼图、柱状图等
  • 导出 CSV / 同步到飞书云盘 / 上传文件
  • 查询/设置分类、预算(未来扩展)
  • 任何提到"账本""期初""结余""画图""同步""飞书"等关键词

数据存储与重要约定(严格遵守)

  • 【重要】每次查询账本时,必须从账本目录读取最新数据,不要使用上下文缓存或假设数据
  • 根路径:~/.openclaw/skills_data/ledger/<账本名>/ (账本名如 "default",不区分大小写但保持用户输入一致)
  • 期初金额为0
  • 用户提到全部,则需查找从最初到最后日期的账本。
  • 交易 JSONL 每行格式(必填字段加 *):
{
  "id": "递增",          
  "date": "YYYY-MM-DD",             // 必须完整格式
  "amount": -123.45,                // 正=收入,负=支出,必填
  "category": "餐饮",               // 未填默认"其他"
  "account": "现金",                // 未填默认"现金"
  "description": "午餐",            // 可选
  "created_at": "2026-03-15T20:57:00Z"  // ISO 时间戳
}

初始化期初结余规则(核心修复点)

  • <账本名>/<YYYY-MM>/transactions.jsonl 写入或覆盖一条记录
  • 示例记录:
  {
    "id": "1",
    "date": "2025-12-31",
    "amount": -15206,
    "category": "其他",
    "account": "现金",
    "description": "",
    "created_at": "2026-03-15T21:00:00Z"
  }
  • 后续任何计算余额趋势、累计余额、月度汇总时:
  • 查询汇总时:用户说"所有/全部"则包含所有月份数据,否则只统计指定月份
  • 所有统计到的月份数据直接累加

日期解析规则(容错增强)

用户输入日期可能简写,必须智能补全为 YYYY-MM-DD:

  • "0114" / "14" → 当前月份的 14 日(例如当前 2026-03 → 2026-03-14)
  • "1" → 当前月份 1 日(2026-03-01)
  • "3月15日" → 当前年 03-15(2026-03-15)
  • "2026-3-5" → 补零为 2026-03-05
  • "去年12月" → 2025-12 (当年往前推一年)
  • 无日期 → 默认当天(当前时间:2026-03-15)
  • 如果跨月/跨年模糊,或输入如"上个月""明年"等相对时间,主动询问确认: 示例回复:"您说的'上个月'是指 2026 年 2 月吗?请确认日期范围。"

处理流程(Agent 必须严格遵循的思考链)

  1. 解析用户输入
  2. 确定账本名(从上下文提取,如"我的账本",默认 "default")
  3. 提取日期、金额、分类、账户、备注

    • 支持批量:多行"日期 金额 [分类] [账户] [备注]"
    • 金额识别:正数/负数/"+""-""花了""收入"等关键词判断正负
  4. 普通记账 / 批量添加

  5. 路径:~/.openclaw/skills_data/ledger/<账本名>/<YYYY-MM>/transactions.jsonl
  6. 自动创建对应年月文件夹
  7. 补全缺失字段:category="其他",account="现金",description=""(或从上下文推断)
  8. 以追加模式 ('a') 写入每行 JSON
  9. 每笔生成 id(可简单用时间戳 + 随机数,或 uuid)
  10. 回复:已添加 X 笔交易 + 当月简要汇总(收入/支出/余额)

  11. 查询汇总 / 流水

  12. 【推荐】使用 print_ledger.py 脚本快速输出表格格式python3 ~/.openclaw/skills/ledger/scripts/print_ledger.py ~/.openclaw/skills_data/ledger/<账本名> <月份> 示例:python3 ~/.openclaw/skills/ledger/scripts/print_ledger.py ~/.openclaw/skills_data/ledger/兔兔 2026-01
  13. 手动查询时:加载指定月份或所有月份(用户说"全部""今年""1-3月"时加载多月)
  14. 读取期初记录作为 offset(只加一次),务必比较 created_at 选取最新的期初记录
  15. 输出格式:
    • Markdown 表格:日期 | 分类 | 金额 | 账户 | 备注
    • 汇总行:期初 + 本月收入 + 本月支出 + 期末余额
  16. 支持筛选:按分类、账户、日期范围

  17. 画图(余额趋势图优先)

  18. 调用命令示例: python3 scripts/plot_ledger.py ~/.openclaw/skills_data/ledger/default --type line --months 2026-01,2026-02,2026-03 --output ~/.openclaw/skills_data/ledger/default/balance_chart.png
  19. 脚本要求支持:
    • 读取期初 offset
    • 按 date 排序所有交易
    • 累加 amount(期初只加一次)
    • 支持 --months 参数指定范围
  20. 回复中附上图表路径,并用自然语言描述趋势: 示例:"从期初 -15206 到 3 月末 -13318,整体下降,但 2 月有明显回升。"

  21. 导出 & 飞书同步

  22. 生成 CSV:使用 UTF-8 BOM 编码(避免中文乱码) 列:date,amount,category,account,description
  23. 同步流程:
    • 检查飞书授权状态
    • 上传到用户指定文件夹(默认"账本/<账本名>/")
    • 只上传 CSV 文件,不上传 JSONL
    • 如需删除旧文件,必须二次确认
  24. 回复上传后的飞书云盘链接

  25. 输出风格

  26. 使用友好 emoji:🐰 💰 📈 📊 ✅
  27. 表格清晰,金额负数用红色或 - 前缀(Markdown 支持 或 emoji ⚠️)
  28. 每次操作后总结关键数字:收入、支出、余额变化
  29. 语气亲切

安全与边界

  • 单笔 |amount| > 10000 必须二次确认
  • 输入严重模糊或矛盾时,主动询问澄清,不要擅自假设
  • 所有文件操作使用安全路径,避免越界