Beancount 技术交流贴
Beancount用户讨论了从自动化导入痛点到LLM辅助解析的实践,重点关注玩卡积分追踪、成本基础处理及数据安全,新增回复强调了PDF文件上传的隐私风险。
1. 关键信息
- (之前已归纳)历史数据导入难题:用户普遍面临银行只提供近1-2年QFX/CSV下载,更早数据(如PDF)需要手动处理或通过PDF解析工具(如Tabula)转换为CSV,再编写Importer导入。
- (之前已归纳)自动化导入方案:方案包括使用
beancount-import、自定义Python Importer(针对特定银行CSV格式)、或利用LLM(如GPT-4o-mini结合instructor)解析非结构化PDF/Markdown文本,生成结构化交易数据。 - (之前已归纳)点数追踪:追踪Amex MR等积分需要结合交易数据和API(如
ReadLoyaltyTransactions.v1)获取的积分记录,理想状态是交易(支出)和积分(收入/资产增加)在同一笔事务中体现。 - (之前已归纳)多币种/成本基础(Cost Basis):涉及外汇兑换时,需使用
@或@@语法处理汇率和总成本,同时需注意浮点数精度问题,建议使用小数形式记录整数金额以避免误差。 - (之前已归纳)税务与摊销(Amortization):对于预缴税款(如1040-ES),推荐使用
amortize_over插件,将一次性大额支出按月摊销到实际应税发生的月份,以获得更真实的月度财务图表。 - (之前已归纳)数据安全:讨论了将Beancount核心文件(明文)存储在Git/GitHub上的安全性问题,建议使用Git LFS、加密工具(如
git-crypt)或自建私有Git(如GitLab/Headscale)来保护敏感数据。 - PDF上传隐私风险: 用户提醒,在讨论或上传PDF文件时需特别注意,尤其是包含银行账号(account number)和路由号码(routing number)的检查账户(checking)PDF,这些信息应被编辑(redact)或避免上传。
2. 羊毛/优惠信息
- (之前已归纳)Amex MR点数导出:通过浏览器开发者工具(F12 -> Network)拦截
ReadLoyaltyTransactions.v1API请求,可获取accountToken,从而导出任意时间段(最远约两年)的MR交易详情JSON,比网页界面导出的CSV更全面。 - (之前已归纳)Costco/Uber GC MS:购买GC时获得的折扣(如$75买$100 GC)可记为
Income:Incentive或负向Expenses。对于有溢价的GC(如Uber Eats),建议将费用按实际消费金额(而非GC面值)记录,将折扣作为收入处理。
3. 最新动态
- (之前已归纳)LLM辅助导入的进展:用户展示了使用
marker(PDF转Markdown)结合instructor(Markdown转结构化JSON,使用GPT-4o-mini)的方案,初步效果良好,下一步计划通过历史数据Embedding匹配Payee和Posting Account。 - (之前已归纳)Beancount性能担忧:社区提到Beancount的Python实现(尤其是Plugin API)在数据量大时性能下降明显,并提及了C++重写项目(可能已暂停)。
- (之前已归纳)Plaid访问限制:有用户反馈Plaid的免费额度限制(100个连接)可能已收紧,部分用户需转向CSV/OFX导入或付费模式。
4. 争议或不同意见
- (之前已归纳)自动化 vs 隐私:Plaid等工具提供了极大的便利性,但涉及金融数据托管,部分用户(尤其关注隐私的大户)认为不可取,更倾向于手动/半自动的本地文件导入方案。
- (之前已归纳)Plaintext vs 结构化数据库:尽管Beancount的纯文本格式便于版本控制和社区交流,但对于复杂的库存管理、Cost Basis的自动转移(如股票账户A到B),纯文本和现有插件机制显得力不从心,可能需要更强大的数据库后端支持。
- PDF数据处理的隐私顾虑: 对于使用PDF解析的场景,用户明确指出应警惕上传包含敏感银行信息的PDF文件,即使是用于技术讨论,也应先进行数据清洗(redact)。
5. 行动建议
- (之前已归纳)历史数据处理:对于2年以上PDF,尝试使用
tabula-py(或pdfplumber,如153楼分享的脚本)提取表格数据,然后编写自定义Importer或使用beancount-import导入。 - (之前已归纳)点数记录:优先使用Amex MR API(通过F12拦截)获取完整点数记录,并尝试将其与交易记录合并导入,以实现精确的积分追踪。
- (之前已归纳)大额/非日常支出:采用
amortize_over插件对税款、大额保险等进行摊销处理,避免单笔巨额支出影响月度报表的可读性。 - (之前已归纳)数据安全:核心账本文件应使用Git进行版本控制,并考虑使用
git-crypt或部署在私有网络(如Tailscale/Cloudflare Access保护的Fava)中。 - 处理PDF时务必注意隐私: 避免上传包含银行账号和路由信息的PDF文件,如果必须分享或处理,应先使用工具(如
redact)移除敏感信息。