Ledger Project Expense Entry
Use this skill for fast bookkeeping from short natural-language messages.
Defaults
direction: default支出currency: defaultCNYdate: default today (Asia/Taipei)
Only change defaults if user explicitly provides different values.
Parse target
Extract from message:
project(项目名)description(消费内容)amount(number)- optional
date - optional
currency - optional
direction(收入/支出) - optional
tags
If project and description are both present, build description as:
<project> - <description>
If only one exists, use that field directly.
If amount is missing, ask one short clarification question.
Write command
IMPORTANT: Get today's date (YYYY-MM-DD) first, for determining which month file to write to.
# Get today's date in Asia/Taipei timezone
CURRENT_DATE=$(TZ='Asia/Taipei' date +%Y-%m-%d)
Then append via existing script:
python3 projects/scripts/add_ledger_entry.py \
--data-root projects/data \
--date "$CURRENT_DATE" \
--direction <支出|收入> \
--amount <number> \
--currency <CNY|USD|JPY|...> \
--description <project-description> \
--tags <tag1,tag2,...> \
--source manual \
--batch manual
Category catalog (must check before writing)
Before each write, check:
projects/docs/CATEGORY_CATALOG.md
Selection policy:
- Prefer existing values from catalog (
tags/major_category/type/currency). - If user gives a new tag not in catalog and meaning is clear, write it; otherwise ask one short confirmation.
- If uncertain, keep optional fields empty rather than inventing noisy labels.
Tag suggestion rules
- If user gives tags, use them directly.
- If user does not give tags:
- project/infra/subscription/domain/server ->
开发成本/服务器/域名/通讯网络(pick the closest one) - meal/drink ->
外卖/下馆子/饮料零食 - ride/transport ->
打车/交通卡/火车/飞机
- project/infra/subscription/domain/server ->
- If still uncertain, keep tags empty.
Response format
After appending, reply with:
- month file path
- one-line summary:
日期 | 流向 | 金额币种 | 描述
