会计系统设计的一些经验

文章探讨了财务系统的本质,将其视为一个基于OLAP的大数据分析系统,重点强调了数据收集的复杂性、一致性治理以及时光盒子的特点。作者揭示了系统设计中需要注意的关键问题,如数据清洗、版本控制和会计数据的持久性需求。
摘要由CSDN通过智能技术生成

在这里插入图片描述
自 2019 年,我加入财务系统团队,已经 5 年,早几年基本都懵懂着,无法把握住这个系统的本质。

我们设计并实现的这个系统,本质上,是一个会计信息系统。不是一般的交易系统。

系统的本质

从我今天的理解来看,会计系统的本质,其实是一个 OLAP 为主的大数据分析系统,你也可以当成是一个 BI 系统或者决策支持系统,因为其本质正是如此。其特殊之处仅在于,它是一个垂直目的的 BI 系统,只分析跟财务有关的数据。

如果你带有这种视角去看待,理解,和设计系统,你会有豁然开朗的感觉。

了解到系统的本质后,我们就可以很确定地说,财务系统的根本目地是什么,是数据的治理。财务系统的核心流程又是什么?是原始数据的收集,清洗,转换,也就是传说中的 ETL,是不是一下来到了工程师的主战场,这个我熟啊!

数据的收集

在一个企业里,数据的收集,很多时候是数仓和 BI 干的事情,他们有专门的开发团队和业务系统,如果财务系统有一个研发团队的话,那么其做的事情,其本质上也是数据收集。

从各个业务环节收集数据。因为企业经营过程中的各种跟钱有关的事项,都在会计核算的范畴内,而会计核算,是整个财务系统,会计信息系统关心的基础性问题。

数据收集难度可能是最大的,也是最容易忽略的。

在一个实体业务中,往往有采购,生产,销售,等很长的环节,有时候还有仓储等等,涉及到供应链的各种复杂问题。这里面有很多的会计核算关心的问题,怎么去采集数据,那些部门是否有业务系统进行信息化管理,这都是极大的挑战。

即便在一个虚拟业务中,比如金融信贷,典型的虚拟业务。没有什么采购,仓储等复杂的事情,只是单纯的签约,放贷,回收。也有很多的业务系统来配合,推广系统,用户系统,信贷系统,贷后管理系统,各个地方一旦运转就会产生收入和成本,这些地方的数据如何采集回来?

OA 系统作为企业日后运营的重要载体,也会产生数据,其数据是否可得?比如 OA 系统是采购的,不能按照你想要的方式去导出数据,等你想要的时候,就感觉痛苦。早点规划为好。

数据收集的另一个核心是一致性治理。

我想,这是一个很困难的话题。我举个例子,业务系统跟你对接完毕了,提供了业务数据记录。但是,隔了几个月,告诉你,早先的一些业务记录搞错了,要订正。这就会让人无比头疼。

如果业务系统主动跑来告知,还算简单的,如果他们悄悄的不说话呢?这才是绝大多数的情况,甚至可能他们自己都不知道,某个业务员,做到的业务最终确认是失败的,但是已经报上去了。业务侧才不管财务能不能算出报表,会不会算错,他们只是悄悄在自己系统里搞定即可。

数据的清洗

原始数据的上报,有时候并不是财务直接需要的数据,这时候需要转换和清洗。比如,业务系统可能上报了日报,甚至原始业务数据,但是财务系统真正关注的是月报。这时候就要自己进行聚合。

再比如,很常见的一个问题是,业务系统上报了一份数据,在核对中没有取得财务的认同,最后进行重新上报,这时候系统如何管理一致性。

还有一些问题,比如不同的生产环节,各自的定义不同,但是在财务这边是有统一定义的,权责就权责,现金就现金,比较规范,那就涉及到不同部门的业务数据在向财务标准规范化的过程。

记账,本质上也是一种数据清洗的过程。甚至有时候,你可以理解为是一种人工的清洗。在没有会计信息系统的时候,记账,就是人工对业务数据进行的再分类。现在得益于系统的强大,甚至引入 AI,我们可以生成很多自动的记账规则,将一条业务数据,按照复式记账的方式,生成会计分录。就得到了清洗极为彻底的干净数据。

不过系统也好,会计也好,都不是神,总会出错,怎么处理一致性问题。用友,金蝶这种公司成为上市公司也不是偶然,为了最终管理好所有的数据,就不得不出面去控制。最终,会计信息系统,都发展成了 OA + ERP 的航空母舰,只有这样,才能最终控制过程,得到无比干净一致的信息数据。

自研的话,得把这些坑都踩过,才能明白其不易。

财务报告

生成财务报表,才是系统收集数据的根本目的。同时,这也是最难的。

可以说,有了前面两个环节的成功,财务报告可能并不难做,问题就是,你构建系统,不是按本文章节来做,往往都是齐头并进的,按顺序做是不可能的,黄花菜都凉了。

你要意识到一点,财务报告必须是个旁路系统。第二财务报告必须缓存部分结果,不能在原始数据上实时出,这是大忌。

首先,财务报告必须要有版本,财务一旦认可,这个数据是不能变的,哪怕错了,也得一错到底。讲究一个落子无悔。在未来的报告里,可以去弥补以前的错误,但是不能在当期改正。这就要求报表必须都持久。

第二,财务有很多五花八门的口径,常用的一种手段是“调整”,就是在一个报表之上,经过一些调整,生成另一个报表。这就要求我们的报告系统设计,像 CSS 层叠样式表一样,是一层一层的。先用第一层规则,聚合基础报表,再用调整规则聚合第二重报表。

非要类比,这个地方也很像数仓的,从 ODS,DWD,DM等等吧,一层层上去。报表也是这样构建的。

时光盒子

财务系统的另一个特点,是时光盒子。或者说时光机。

对于一个业务来说,市场瞬息万变,市场变了,业务应声而变,然后过往成风,都不重要了。一个始终能往前奔跑的公司,隐藏了很多 aza 事情,只要在往前奔跑,都不是事情。

但是财务是有记忆的,要求可比性,要求数据的持久性。动不动往前回溯两三年。业务巨变的时候,财务规则并不会巨变,历史上的东西都得留着,也得能查。这就对系统的实现者提出了一个挑战。

怎么用时光机来管理业务数据,这是一个重要的经验。必须要不断考虑这个问题。我举个例子,比如一家公司,设立用于某项业务,此时我们没考虑过其会关闭。到有一天,这公司关闭了,但是在财务系统里,如果想查看这个公司的报表,你让不让看?

再比如,费用科目,或者说会计账户,一些子账户,早些时候因为核算需要,我们用了,后来改了,那么当你筛选历史数据的时候,还能找到那些数据么?

原始数据不可更改,可能你还能找到,但是会计数据我们经常需要向前回溯,就是会计为了可比性,也会变更原始数据,那么会计数据可以正常查询,原始数据呢?这个会计账户你怎么设计?

总结

这不是我所有经验的全部,碍于场合,我只能说一些理念性的东西,很多细节也不太好说。不知道会不会涉及公司的秘密,我尽量让这种分享和讨论停留在一个技术层面,系统设计的层面。而不是涉及到具体的层面。希望看官谅解。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Charles@TechBlog

您的鼓励是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值