笔者目前就职于一家中型的互联网金服企业,公司提供全链路的风控信贷服务,主要通过售卖数据产品和提供本地化系统部署服务获得盈利。公司内部自研的系统超过100多个,包括支持性业务系统及职能系统等等,本文将以笔者负责了2年多的账务系统来分享一些工作经验心得,希望可以帮助大家对业财领域的产品设计提供些思路和借鉴。
笔者公司的业务模式具有一定的独特性,不同于我们常见的市面上供应链类公司的进销存模式。公司主要为各大银行和金融机构提供信贷领域的风控服务,客户主要通过请求公司的数据产品接口产生费用,可以简单地理解为请求一次接口收费0.5元,一个月若是有1w人请求同一个接口则公司需要收费5000元。
根据上面提到的业务背景和业务痛点,我们基本就能够明确系统的基本定位,以及需要支持的业务功能和流程,概括来讲的话,系统定位为:集合了账单、开票、回款、财务报表的全流程一体化管理系统。
上图为笔者绘制的一份简版的账务系统的核心业务流程图,通过这张图我们来拆解每个业务模块。
计费单顾名思义为用来计费的单子,在这个单子里将包含的需要计费的信息,从流程图中我们可以看出计费单的上游业务是CRM的合同,也就是说其实计费单的计费信息最初来源于客户与我司签署的合同,则计费单是将合同中有关计费的信息进行了提炼和转换,通过计费单去作为后续出具账单的依据和凭证。
在计费单中包含产品信息、单价信息、计费方式、账号信息等等。
账单的上游业务是计费单,通过计费单我们就能知道账单中需要包含的每个产品的计费方式和单价等基础信息,则只要再有了每个产品数量(调用量),就可以为客户出具完整的账单,那么调用量则是来源于BI系统的调用日志,在触发重跑账单时,将计费信息和调用量进行匹配和组合,最终生成账单。
通过上述两个步骤,来解决我们刚才提到的业务核心痛点1。
当有了账单之后,就需要考虑如何与客户进行对账,那就到了解决业务痛点2的时候了。在之前线下业务模式中,我们调研到销售同事是跟客户通过公司邮箱发送账单的方式来展开对账工作,这样的方式放在系统上来进行也是非常方便的,同时也符合他们之前的工作习惯,于是我们决定在账务系统上支持每个客户的账单通过系统来发送到客户邮箱中。
系统在发送时会附带好账单,通过在系统中维护好收件人即可,邮件发送后若客户回复邮件,系统可以抓取到回复邮件自动带回到账单中,便于销售同事进行确认核账。
当账单确认核账后,一般客户就会要求我司为其开具相关服务发票,客户见票回款。开具发票是账务系统中使用最为频繁的功能模块之一,也有着比较复杂的逻辑处理。目前我们账务系统在开票时包含多种类型,将会在下面展开来讲。
为客户开具发票后,客户一般会在约定的几个工作日后进行回款,账务系统与主流的各大银行做到了银企直连,客户进行银行打款后当日也会回传到账务系统,则销售同事通过操作账务系统将回款进行拆分,同样在拆分回款时也包含多种类型,将会在下面展开来讲。
每个客户在我们的账务系统都拥有自己的账户,在账户中管理着每个客户的余额及对应的每笔收入和支出的流水,当然有的账户中可能还会产生坏账或人工调整金额等,总之所有会影响的客户余额的操作都会在账户中体现出来。
在确立账户时,需要明确账户的维度,是客户维度还是客户+业务线维度,亦或是客户+业务线+产品维度等等。
这里的主要提下账单产生的负向支出和回款的正向收入。当账单核账后,系统会生成对应的支出扣减的流水,客户的账户余额减少;当客户回款后拆分完成,系统会生成对应的一笔收入的流水,账户余额增加。
这部分在流程图中即是笔者用浅蓝色的长框框住的部分,是将账单、开票、回款三个表进行了关联汇总,此表在后续的财务数据的统计中经常会作为中间表用到,比如计算哪些账单是已开票已回款或者已开票未回款,哪些预付回款已开票,哪些预付开票是否回款等等,通过这张表可以得知各类的信息,为财务报表统计提供基础数据。
财务报表的统计是根据实际业务场景产生的,就笔者公司而言,目前在账务系统中已上线的财务报表包含:封账统计报表、包年权责报表、客户账龄表、客户逾期表、逾期汇总表、财务账龄表、财务收入大表、项目类收入表等等。
每个报表的处理逻辑和方法都是不一样的,在接到财务报表相关需求时,需要捋清楚报表内的每个字段的计算逻辑,更重要的是财务报表是依据财务维度出具的,在理解每个字段背后的含义时,需要结合一定的“财务原则”,不然很容易出现“我以为你说的这个意思啊”这样的场景。
简单来说,账务系统核心元素主要就是三个:账单、开票、回款,在这三个元素中最核心基础的当然是账单,其他的功能或者报表都是基于这些基础元素进行的延伸和拓展,所以我们需要先搞清楚这三者之间的会产生的哪些复杂的关联关系。
账单是开票和回款中间的桥梁,桥梁的作用体现在,开票时需要关联账单,回款时也需要账单。
我们根据业务需要,支持针对产生的账单进行开具发票,在开具发票时必须选择账单,可开票的金额需要小于等于当前的账单的金额;
另外一种开票的业务场景为,客户还未在我司产生账单,也没有预付款,但是需要我司提前进行开票,则如果只支持客户对账单进行开票,显然无法适配当前的业务场景,那么系统需要支持无账单下开票,确定好需要开票的业务线即可;
但同时也会有客户预付款的业务,同样还未产生账单,则此时需要支持按照预付款进行开票,在开票时必须要选择客户的某笔回款进行开票。
当客户进行回款后,需要将回款拆分到对应的账单或者开票,如此来让账单、开票、回款三三者之间关联起来,最理想的数据情况则为,此账单已开票已回款。
1)回款拆分到账单
将回款关联拆分到对应的账单,给每个账单分配回款金额,直到该笔款的回款金额分配完。
2)回款拆分到开票
如果先对账单进行了开票,客户的回款对应某张开票,则此时通过将回款关联拆分到开票是最方便的,直接为开票分配回款金额即可;但是这里需要注意到回款虽然是表面上拆分给了开票,如果该张票当时是开到了账单上时,则在回款拆分到开票时,系统需要同时将回款金额分配该张票底层的账单上,这样才能保证账、票、款一致。
3)回款拆分到预付
针对客户先打款后产生账单的业务类型,系统支持提前将回款的拆分到预付回款下,在拆分时不需要关联账单和开票,只需要确认好每条业务线需要分配的回款金额。
上图为笔者绘制的一份简单的功能架构图,基本包含了目前账务系统核心的业务功能,可以将该图与流程图结合起来理解。
1)账务系统中的必然会出现大量的数字,是实打实跟数字打交道的系统,在最初设计时一定要考虑清楚数值的类型,是采用double类型、float类型还是别的类型,最终的目的是保证系统在数值的精确度上是始终保持一致的,在这件事上我和我的团队是吃过亏的。
2)账务系统的各个模块的数据和功能的串联型与关联度是非常高的,举个例子来说,当你发现某个财务报表的某个字段统计计算有误,很可能是因为最初在账单已经出错,进而导致开票有误、回款有误、关联表有误,最终导致报表有误,因此需要考虑在设计各个模块时耦合度的问题。
3)一般新系统的在上线时,都会需要处理历史数据,账务系统也不例外,尤其是针对各种期初数据的导入和处理是比较多的,而且相关人员在给到我们数据时,往往是无法一次到位的,少不了在后续多次的修改和调整,然后再由我们的研发人员执行sql。
因此针对这类问题,可以考虑增加一些修改期初数据的功能,虽然我之前一直认为这样地低频的导入期初数据的操作不需要做成系统功能,但从实际来看并非完全如此。
近年来,许多人在墙面装修的时候,都会选择刷乳胶漆,乳胶漆颜色丰富,耐脏和耐擦洗性出色,实用性高。但是,为何有的人家里的乳胶漆总是容易出现开裂,经过有老师傅提醒,才发现原来是这5点没做好。1、墙面粘结强度不够许多人在房屋刷乳胶漆后,老是出现开裂和空鼓,这主要因为墙面粘结强度不够,建议大家,将原先的墙皮
2025-05-12 23:48:02
安全插座到底要如何选择?选择什么样的安全插座才能保证儿童安全?现在市场上安全插座五花八门,个个都声称是“安全插座”,这给广大家长们在选购中带来了不少困扰,众所周知,市面上所谓的“安全插座”其实并不安全。伪劣产品众多。这也严重威胁儿童的用电安全。前段时间央视《每周质量报告》节目也曾对当前市场上的插座安
2025-05-12 22:58:21
买了大红酸枝家具,偶尔听到炸响怎么办?其实大红酸枝家具炸想属于正常现象。那是红木家具开裂发出的声音,不必大惊小怪。小编在网上查看到很多用户在购买大红酸枝家具之后,发现家具会有炸响的现象,这到底是怎么一回事呢?下面我们一起来看看其中的原因以及维修的方法:红酸枝家具之所以容易开裂炸响,主要是因为红酸枝属
2025-05-12 22:55:32
墙砖被师傅贴在墙上,时间没到过多久,就出现很多墙砖掉落,甚至有些还会大面积出现脱落的现象。有不少人的房主不知道其缘由,事后就会将所有的原因全部怪在贴砖师傅身上,责任是否真的如房主所想呢?责任的归属,对于这行业有接触过的人,都还是有着一定的了解,施工人员的正确施工,确实对瓷砖脱落,有着一定的关系,但也
2025-05-12 22:40:24
1自吸泵怎么吸不出来水自吸泵抽不出水的原因及排除方法:自吸泵在使用的过程中,有时会出现不出水的问题。这就需要找出具体原因加以排除。造成自吸泵抽不出水的原因及排除方法有以下三种可能性:1-1 自吸泵体内无引水或存水不足。只有自吸泵的泵体内存有一定量的水,才能在起动。因旋转时的叶轮所产生的离心力将进水管
2025-05-12 20:32:27
日常在和朋友的交流中,朋友提出最多的问题就是高端户型中为什么会有这么多的暗卫,在产品研发的过程中能够避免吗?今天就对这个问题进行简要的分析。一、主次功能房间的划分要求暗卫产生的最主要原因,是因为豪宅户型面积过大,且面宽有限,进深过长,因此在户型内部就形成了一些“暗角”,相比于对采光通风要求更高的客餐
2025-05-12 20:23:59