V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
zhzy0077
V2EX  ›  分享创造

一个免费端到端无日常心智负担的记账解决方案

  •  
  •   zhzy0077 · 2021-07-31 16:32:09 +08:00 · 6600 次点击
    这是一个创建于 1244 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我经常能在 V2EX 上看到咨询日常记账软件或者推广资产管理软件的帖子, 但是在我看来通过常见的记账软件手工记账的方式, 对日常心智负担比较大, 一方面是容易漏记, 另一方面是无法同时实现对资产的管理.

    我在年前开始有记账的想法, 先后用过诸多国产的记账软件, 以及 GnuCash, Beancount, 最后我遇到了我现在在用的 hledger, 已经记录了半年了, 平均一个月有 300+的交易记录:

    Transactions span        : 2020-11-30 to 2021-08-01 (244 days)
    Last transaction         : 2021-07-31 (0 days ago)
    Transactions             : 1353 (5.5 per day)
    Transactions last 30 days: 332 (11.1 per day)
    Transactions last 7 days : 84 (12.0 per day)
    Payees/descriptions      : 452
    Accounts                 : 92 (depth 5)
    Commodities              : 2 (CNY, USD)
    Market prices            : 2 (USD)
    

    我的使用体验是这样的:

    1. 全程离线, 不存在隐私安全的问题(当然我还是使用 GitHub 用来同步和备份数据)
    2. 无日常心智负担, 无漏记, 每半个月或一个月花 10-15 分钟从银行下载账单通过脚本导入即可
    3. hledger 作为一个复式记账软件, 可以同时实现资产的管理和日常消费的记录
    4. 账单可导出到其他系统分析可视化等, 图为我自建的 Superset screenshot.png (2565×862)

    目前我写的账单导入配置支持零钱通, 余额宝, 招商银行(信用卡 /储蓄卡), 广发银行信用卡, 光大银行信用卡, 民生银行信用卡. 新配置写起来也很容易.

    我的整个端到端流程为: 访问银行网站下载账单 - 通过脚本导入 hledger -上传到 GitHub - 通过 GitHub Actions 生成 SQLite 文件 - 传到我 VM 里的 Superset 上进行分析.

    整个流程全部为开源软件, 并且除了 hledger 以外都可以替换, 比如 SQLite 换成 MySQL 备份, 或者 Superset 换 QuickBI 等.

    感觉目前 V2EX 甚至整个简中互联网上这块的内容还是相对较少, 所以发个贴问问要是感兴趣的人多可以做一个系列的教程放在 zhzy0077/hledger-accounting 里.

    41 条回复    2022-04-18 14:52:31 +08:00
    mitong3269
        1
    mitong3269  
       2021-07-31 17:42:49 +08:00 via iPhone
    感兴趣
    howencilx
        2
    howencilx  
       2021-07-31 19:38:18 +08:00
    感兴趣,能导入各类账单确实很好,期待
    Rendex
        3
    Rendex  
       2021-07-31 20:21:08 +08:00
    感兴趣
    peacelove
        4
    peacelove  
       2021-07-31 20:28:47 +08:00 via iPhone   ❤️ 1
    ?这一到三楼是水军么?
    IgniteWhite
        5
    IgniteWhite  
       2021-07-31 20:30:09 +08:00 via iPhone
    感兴趣

    如果能把这个流程和 Org-mode 结合会不会更强大
    isCyan
        6
    isCyan  
       2021-07-31 20:39:59 +08:00
    @peacelove 应该不是……要知道人的本质是复读机
    yunyuyuan
        7
    yunyuyuan  
       2021-07-31 21:11:59 +08:00
    我一直用一个本子,正面写日记,反面记账。因为怕自己不会写字了
    woctordho
        8
    woctordho  
       2021-07-31 21:16:02 +08:00 via Android
    感兴趣
    callmemax
        9
    callmemax  
       2021-07-31 21:26:56 +08:00
    很实用的工具,star 了
    zhzy0077
        10
    zhzy0077  
    OP
       2021-07-31 22:25:18 +08:00
    @mitong3269
    @howencilx
    @Rendex
    @IgniteWhite
    @woctordho
    @callmemax
    在正文提到的 repo 里写了个姑且算是教程, 有空可以看下, 哪里写的不好请提 issue
    luchong
        11
    luchong  
       2021-07-31 23:14:25 +08:00
    我也有这方面的需求,起初我是想通过爬虫爬取各平台的数据来实现,但现在这些银行,金融平台做的安全系数都很高,爬虫不好搞,即使实现了,给其他人使用,也是存在安全隐患的。后来又想通过下载账单 excel 进行解析实现,但需要人工去下载这些 excel 也是麻烦,然后想使用微软的 PAD 去自动化处理,像支付宝,浦发银行这样的大概可以实现,但像微信这种只能在手机下载的就不好搞了,头疼极了,现在部分记账软件都是通过截取账单图片进行 OCR 识别,始终不满足需求,我想要真正解放双手,真正实现自动化,每天晚上或者每周自动处理更新
    zhzy0077
        12
    zhzy0077  
    OP
       2021-07-31 23:21:47 +08:00
    @luchong 爬银行我是从来没想过, 感觉甚至有违法的风险, 现在我是手动下载账单 csv, 剩下的都是自动化了.
    IgniteWhite
        13
    IgniteWhite  
       2021-07-31 23:24:25 +08:00 via iPhone
    @luchong
    @zhzy0077
    MoneyWiz 能通过银行的 API 合法获取账单数据,他们这个服务有专门的名字记不起来了,可以了解一下
    zhzy0077
        14
    zhzy0077  
    OP
       2021-07-31 23:33:44 +08:00
    @IgniteWhite GnuCash 也 有类似的, 但全都是国外的银行, 国外甚至有一些标准的交易数据协议. 但是对于国内的用户而言其实价值不大
    IgniteWhite
        15
    IgniteWhite  
       2021-08-01 00:23:28 +08:00
    @zhzy0077 原来如此,学习了
    zyxyz123
        16
    zyxyz123  
       2021-08-01 01:50:32 +08:00
    分类是怎么解决的 靠各个平台自己分析的类别么
    AX5N
        17
    AX5N  
       2021-08-01 02:08:28 +08:00   ❤️ 1
    其实还是只有爬虫才是真·解决方案,只是没办法分发,如果银行以及支付平台愿意开放 api 就好了。
    huangmingyou
        18
    huangmingyou  
       2021-08-01 15:36:01 +08:00
    beancount 坚持了半年,但是每天有基金定投,然后每天基金有盈亏。每周做一次平衡。实在太繁琐,然后放弃。
    zhzy0077
        19
    zhzy0077  
    OP
       2021-08-01 16:20:23 +08:00 via Android
    @zyxyz123 看这个文件 https://github.com/zhzy0077/hledger-accounting/blob/main/rules/payee.rules 绝大多数是正则匹配分类的
    woctordho
        20
    woctordho  
       2021-08-01 17:27:01 +08:00
    感谢楼主,大家想看更多也可以去这个网站 https://plaintextaccounting.org/
    ryh
        21
    ryh  
       2021-08-01 18:56:17 +08:00
    @AX5N 国内银行只能对他们呵呵了,就 app 的 Face ID 登录都要用第三方服务商的,真的是 low 到爆,他们的开发能力真的有限
    SimonOne
        22
    SimonOne  
       2021-08-02 10:40:02 +08:00   ❤️ 1
    @huangmingyou #18 基金记份额,不要记钱,写个脚本每天自动获取每份的 price 。
    zhzy0077
        23
    zhzy0077  
    OP
       2021-08-02 10:45:29 +08:00
    @SimonOne 我之前也这么做 后来发现不好算盈利 因为买入卖出的份额是一样多的 最后还要在卖的时候去找买入价 做减法
    我现在就只记买了多少钱 在卖光之后多的都是收益
    SimonOne
        24
    SimonOne  
       2021-08-02 11:03:38 +08:00
    @zhzy0077 #23 设置基金账户为先进先出,然后买的时候记份额和成本,卖的时候自动根据先进先出卖的。
    zhzy0077
        25
    zhzy0077  
    OP
       2021-08-02 13:38:34 +08:00
    @SimonOne 这个确实也是我一直没搞懂的一个点 顺便请教下

    我在基金净值为 100 的时候买进 1 份:
    银行卡 -100
    基金 +1 份 @ 100

    在 120 的时候卖出这一份:
    银行卡 +120
    基金 -1 份 @ 120
    理财收益 -20

    这个不是不平了吗
    BlackCat02
        26
    BlackCat02  
       2021-08-02 19:58:13 +08:00
    我自己用记账软件最大的痛点是:
    1. 识别重复记账:我的微信和支付宝都绑定常用的招行信用卡,日常消费从微信端,支付宝端(余额宝,花呗,信用卡),直接信用卡消费三种方式都有,在微信和支付宝支付时,如果走的是信用卡,那么该条消费记录会在支付宝和银行卡账单里出现两次。目前自动导入的账单应用,都没法轻易把这两条记录合并成一条。
    2. 分期账单
    zhzy0077
        27
    zhzy0077  
    OP
       2021-08-02 20:18:17 +08:00
    @BlackCat02 重复账单我体验下来做的最好的是 GnuCash 会根据金额日期备注算一个相似度 然后提醒重复记录。
    但是在我的实践里其实这个比较少见,因为导入账单应该是从事实上付款的账户里进行,在你这个场景下应该是:零钱通,余额宝,花呗,信用卡。而不是微信或者支付宝的交易记录。
    2 分期其实是个 应付账款 的交易,按照复式记账的逻辑来看其实没有和别的交易不同的地方。
    BlackCat02
        28
    BlackCat02  
       2021-08-02 20:30:16 +08:00
    @zhzy0077 我再尝试一下哈哈
    BlackCat02
        29
    BlackCat02  
       2021-08-02 20:31:39 +08:00
    @zhzy0077 之前不知道余额宝,花呗的账单还可以分别导出的
    ghostsf
        30
    ghostsf  
       2021-08-03 10:00:15 +08:00
    从银行网站下载账单这一步能自动化吗
    Spoter
        31
    Spoter  
       2021-08-03 10:03:24 +08:00
    记账,我的感受是控制末端不如控制终端,所有的消费、支出都走某张卡是最方便的了。
    比如我现在所有的消费都是走招商银行,它的记账功能也还行,能用
    shyrock
        32
    shyrock  
       2021-08-03 10:57:09 +08:00
    @IgniteWhite #13 看到这里赶紧下载了一个,但是发现要连接银行接口需要先订阅,尼玛我都不知道我用的国内银行能不能连接,订阅个蛋啊。
    AccK8623
        33
    AccK8623  
       2021-08-03 19:28:11 +08:00 via Android
    @zhzy0077
    100 买入时:
    + 基金 100
    - 存款 100

    净值增加至 120:
    + 基金 20
    + 收益 20

    卖出:
    + 存款 120
    - 基金 120

    会计里头不可能存在不平的账。
    zhzy0077
        34
    zhzy0077  
    OP
       2021-08-04 09:31:37 +08:00
    @AccK8623 对这是我现在的做法 我想问他如果按照份额去算的话应该怎么做
    daliu
        35
    daliu  
       2022-04-06 15:13:04 +08:00
    把基金的价格做为单独的货币.基金里面只保留份数.

    更新基金价格就行了
    zhzy0077
        36
    zhzy0077  
    OP
       2022-04-06 15:43:45 +08:00
    @daliu 感谢 这里其实我感觉是 hledger 支持的不好 因为买 1 份 10 块钱, 卖一份 20 块, 如果是基金价格变化的话就没法算理财收益了
    daliu
        37
    daliu  
       2022-04-06 21:07:22 +08:00
    @zhzy0077 #36 beancount 是有一个获取历史价格的方法.或者自己写个脚本把每天的价格扒下来.这样就能算出收益率了.
    zhzy0077
        38
    zhzy0077  
    OP
       2022-04-07 15:43:45 +08:00
    @daliu 我最早也是用 beancount 的 但是不支持中文把我劝退了
    daliu
        39
    daliu  
       2022-04-08 13:03:06 +08:00
    @zhzy0077 #38 我现在用 beancount.看了下转 hledger 好像还行.

    但是对多文件的支持好像不太行.想按月来分隔文件.官方文档说有两个特性会失败.这块多文件好像是比 beancount 差点.但是 emacs 的支持要相对好些.
    zhzy0077
        40
    zhzy0077  
    OP
       2022-04-08 15:18:10 +08:00
    @daliu 不知道指的是哪两个特性 我现在是按年分的 然后比如 2022.journal 开头就是 include 2021.journal 用起来没遇到什么问题
    SaltyMouse
        41
    SaltyMouse  
       2022-04-18 14:52:31 +08:00
    感兴趣,自己摸索下,出了教程麻烦踢踢
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2987 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 14:06 · PVG 22:06 · LAX 06:06 · JFK 09:06
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.