Skip to content

zsxsoft/my-beancount-scripts

Repository files navigation

my-beancount-scripts

Beancount 我的个人自用脚本,包含以下功能:

  1. 账单导入
    • 支付宝(ZIP / CSV)
    • 微信(ZIP / CSV)
    • 农业银行信用卡(EML邮件)
    • 工商银行信用卡(EML邮件)【很久没使用了,不知道还对不对】
    • 工商银行对账单(邮件附件)(仅余额与交易明细部分)
    • 京东订单(仅商品信息与价格)
  2. 账单去重
    • 由于个人有手工记账的习惯,因此导入账单时可能出现重复现象。脚本根据金额与时间判断两笔交易是否相同,如果是,则不会导入这笔交易,但有可能添加额外信息。
    • 如果同一天存在两笔同金额交易,则需要人工处理
    • 如在导入支付宝、微信账单时,发现正在导入的交易已经存在,则会为原先已存在的交易添加支付宝和微信的订单号及时间戳,不会重复导入同一笔交易。
    • 基于动态规划算法计算商品金额,确保在已经手工录入小票的情况下,不再重复匹配。
    • 输出一个out-unmatched.bean,可用于手工对账。
  3. 价格获取
    • 人民币基金
    • 人民币外汇
    • 数字货币
    • 沪金

使用

脚本需要自行修改accounts.py配置后才可使用,另外某些导入器可能存在问题,使用前请务必翻阅Issue区。

账单导入

python import.py ~/民生信用卡2019年09月电子对账单.eml
python import.py ./alipay_record_20191007_1634_1.csv
python import.py ./alipay_record_20191007_1634.zip
python import.py 微信支付账单\(20190802-20190902\).csv --out out.bean

其会自动识别文件类型,自动进行编码转换,不需人工判断。 配置见accounts.py.

京东订单

京东订单仅导入商品名和优惠后价格。在浏览器内安装TamperMonkey等UserScript扩展后,安装此UserScript,刷新京东订单页面,即可在浏览器控制台内看到输出。

我的导入顺序

推荐的导入顺序:支付宝、微信、银行卡账单。

  1. 先导入支付宝和微信账单,因为这两个支付方式留有最多的信息,方便对账。
  2. 导入信用卡账单。由于账单去重的存在,不会重复导入之前通过支付宝和微信已导入的交易,可以手工对账。
  3. 手动添加balance指令,并对照余额是否正确,账单是否全部导入。

获得账单

支付宝

支付宝App->我的->账单->右上角...->开具交易流水证明,之后可在邮箱中得到zip文件。通过import.py导入时,脚本会提示输入密码。

不要在支付宝电脑端操作。

微信

手机进入微信支付->钱包->(右上角)账单->右上角...->账单下载,之后可在邮箱中得到zip文件。通过import.py导入时,脚本会提示输入密码。

信用卡账单

目前仅测试了QQ邮箱的邮件导出,可能不适用其他邮件客户端。

价格抓取

示例配置:

2010-01-01 commodity F163806
  export: "F163806"
  price: "CNY:modules.price_sources.10jqka_fund/163806"
  inferred_tolerance: 0.01

2010-01-01 commodity BTC
  export: "BTC"
  price: "CNY:modules.price_sources.coinmarketcap/bitcoin--cny"

2010-01-01 commodity JPY
  export: "JPY"
  price: "CNY:modules.price_sources.chinamoney/100JPY"

2010-01-01 commodity AU9999
  export: "Au99.99"
  price: "CNY:modules.price_sources.sge/Au99.99"
  inferred_tolerance: 0.01
export PYTHONPATH=$(pwd)
bean-price main.bean -d 2019-04-01 # 太难用了
python3 fetch_prices.py

蚂蚁财富基金定投数据导入(可能不可用了)

支付宝的「基金定投」在账单中不显示具体认购份额和净值,本repo内的fund.py可对其进行处理。其基于同花顺抓取的基金数据,将以下交易:

2018-07-24 * "蚂蚁财富-蚂蚁(杭州)基金销售有限公司" "蚂蚁财富-XXX基金-买入"
  Assets:Company:Alipay:Fund   200 CNY
  Assets:Company:Alipay:Yuebao

改变为

2018-07-24 * "蚂蚁财富-蚂蚁(杭州)基金销售有限公司" "蚂蚁财富-XXX基金-买入"
  Assets:Company:Alipay:Fund 99.87 FXXXXXXX { 2.000 CNY }
  Expenses:Finance:TradeFee 0.26 CNY
  Equity:Deviation
  Assets:Company:Alipay:Yuebao -200 CNY

具体使用请直接修改fund.py

开源协议

The MIT License

About

Git repo to save my Beancount scripts

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors