一个免费端到端无日常心智负担的记账解决方案 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
zhzy0077
V2EX    分享创造

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

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

    我经常能在 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     Solana     2583 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 28ms UTC 15:02 PVG 23:02 LAX 08:02 JFK 11:02
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86