会计核心应该是“对账中心、支付引擎、会计核心”三大支付黑箱中门槛最高的,因为它既需要会计知识,又需要具备实现高性能会计的技术能力,所以今天我会用“通俗易懂的语言+图片”的方式,尽可能通俗易懂的介绍一下这个黑箱是如何设计的。
1.什么是会计?
通俗的讲,会计就是从原始凭证到财务报表的一套会计处理程序,会计核算的项目有近十个,但对于结算业务,只需要计算到账簿上,剩下的就是财务内部收入核算的工作。
图 1:会计流程
会计核算不是一刀切的,要结合业务场景和经济项目来做。比如银行的会计核算有三大业务:存款核算、贷款核算、付款核算。这三项业务核算的侧重点不同,但核心都是通过基于业务场景的会计方法,对整个业务处理过程进行记录、核对、计算和分析。
2.会计核心设计
会计核心是支付平台上所有账户的基础,它与支付引擎配合,在白天记录网上交易结算账目,并与对账中心配合,在每日结束时处理最终会计核算。
日间网上交易分为内部结算和外部清算,会计核心负责内部结算账户的处理,为实现较高的支付绩效,会计核心采用实时、缓冲记账方式,优先更新客户资金余额,内部账户更新和记账异步进行。
图2:支付核心流程
2.1 业务架构
会计核心是支付平台的会计核算基准,其业务架构分为“会计服务、会计系统、核算系统”三大主要子系统。
图3:会计核心业务架构
1)会计服务:向支付引擎和会员系统提供会计和账户管理服务。
2)会计系统:为账户和会计子系统提供簿记和余额更新的管理和调度。
3)日记账分录系统:日记账分录系统完成记账和余额更新过程,并与会计系统相互依赖,同步结果。
4)日终系统:又称总账系统,负责每日核算、总账计算和每日结算。
2.2 会计核心流程
图4:账户核心流程
1)资金与账户分离
会计系统优先更新客户资金,记录单边账目(即先贷后借),方便用户及时了解资金变动情况和查询明细记录,完整的内部明细账目由会计系统实时、异步地补充和记录。
对于复杂的分账交易,需要通过录入规则进行控制,并在分账交易完成后同步交易对手余额。
2)实时及缓冲记账:
会计系统中记账的方式有两种:实时记账和缓冲记账。
3)每日结束时总帐汇总:
每天会计日截止后,系统将内、外部帐户的子帐户余额提取出来存入日余额表,并将当日的明细帐户汇总最终形成总帐,并生成总帐试算表。
付款三合一
这里我们回顾一下《白话结算》中提到的三种支付流的整合,通过区分“资金流”和“账户流”,我们更能理解业务场景和系统实现的必要性,如果将两者混杂在一起,记账将成为你难以逾越的痛点。
2.3 会计科目设置
图5:主体与账户关系
2.3.1 总帐科目
一级账户又称总账账户,由财政部设置,企业可根据业务需要自行定制。总账账户是系统实现层面的总账汇总表。
图 6:总账科目特征
2.3.2 明细账目
首级以下的科目为明细科目,可由企业自行设置,明细科目只允许最后一级科目设置账户和分类账,中间科目仅用于分类。
最后一级账户层级根据业务场景不同,有三级或四级,一般来说,银行资金环节较短,处于第三级,支付机构有订单,所以多处于第四级。
图7:会计关系
这些科目的会计公式就是我们熟知的“会计恒等式”,在这个公式中,我们去掉了“所有者权益”,加上了待清算科目和损益。
有些公司为了简单起见,把损益类别合并到“资产-其他应收款”和“负债-其他应付款”中,但为了核算清晰,容易理解,我们保留了损益类别。
2.4 会计核算及会计制度
2.4.1 会计制度
图8:会计系统
会计核算分为“账户层、会计层、分类账层、总账层”四层,共同构成了资金、账目的总体处理和核算。其中,分类账层是会计核算的基础,因此其登记准确、至关重要。
1)账户层(应用程序):负责向外部提供会员体系对客户账户的使用,以及对内提供会计科目和内部账户的管理。
2)会计层(资金):根据会计凭证记录资金变动情况和账户间余额,需要通过这些账户进行资金清算,完成内部资金结算和外部跨行资金结算。
3)账簿层(会计核算):根据会计分录,记录各科目的明细,明细账簿的核算是推动资金结算、日终汇总核算的依据。
4)总账层(结账):会计日截止后,按照总账维度汇总计算各明细账的每日发生额、余额,最终完成会计结账。
2.4.2 账户与子账户
图9:主体与子账户关系
科目采用树形结构存储,只有最后一级科目才有子账户记录资金余额,子账户根据内外属性、核算属性分为两类;
1)外部账户:由于客户账户有钱包余额、资金冻结等业务场景,所以设计了多个子账户,由于都是负债账户,所以都是贷方余额。
2)内部账户:功能比较简单,所以单个账户就够了。余额分为资产类的“借方余额”,负债类的“贷方余额”,普通账户有“双向余额”,损益类账户一般没有余额(其实系统实现上是有余额的,如果要用的话,收入是贷方,成本是借方)。
2.4.3 会员及子账户
图10:成员与子家庭的关系
1)会员账户映射关系
我们日常生活中使用的钱包账户的“可用余额”和“冻结余额”实际上就是会计子账户之间的映射关系。
我们的会员钱包账户余额分为可用和冻结,所以需要设置相应的“信用可用子账户”和“信用冻结子账户”来记录资金余额的变化。“待结算、在途资金、保证金、手续费”等余额其实只是一套额外的会计科目。
个人账户余额实际上可能有多少?
客户账户属于负债,理论上2个贷方余额就足够了。但在实际系统设计中,借方和贷方都会有账户交易,所以实际系统设计中会用4个余额来汇总期末余额。即“可用贷方余额、可用借方余额、冻结贷方余额、冻结借方余额”。本文中,为了简单起见,图中采用理论上所需的贷方余额。
2)客户账户模板
客户需要根据预先设定的客户账户模板进行开户,通过用户角色来确定开立什么类型的账户,以及开立多少个相应的子账户来记录余额,通过模板,无需人工干预即可协助开户。
3)独立账簿关系
每个客户账户除了有记录会计交易的“明细分类账”外,还设有详细的账户余额分类账,记录余额变动情况,以便我们查看账单上每一笔交易的余额变动情况。
4)内部用户映射关系
内部账户只是一本会计账簿,所以不像客户账户那么复杂,只需要按照科目开设账户,并在对应内部账户的明细账中记录会计分录即可。
5)资金单边核算
为了高效地处理账务,会计系统采用先变更客户资金余额(即先限制借贷后借记)的方式,单方面记录客户账户资金的变化情况,以便用户及时掌握资金变化情况。
6)会计完工分录
会计系统先保存会计分录,然后以实时或者缓冲的方式异步完成账务明细,实现资金和账户的最终一致性。
2.5 领域模型
考虑到支付同学大多是技术出身,更注重流程和数据的流动,所以我们在这里就介绍一下账户和账务系统的领域模型。
2.5.1 会计领域模型
会计领域模型用于处理会计科目与明细账之间的关系,实现资金与账户的最终一致。
图11:会计领域模型
1)会计科目:按照会计科目树形结构存储会计信息。
2)外部账户:外部账户包括账户模板、子账户以及子账户余额,共同构成客户的账户。
3)内部帐户:由于内部帐户是内部使用的过渡帐户,因此只需要一个分支帐户即可。
4)枚举对象
2.5.2 会计领域模型
会计领域模型包括联机交易会计和总账会计,这里我们重点讲一下会计。
图12:会计领域模型(省略总账)
整个会计流程以付款申请的流水号作为“系统跟踪号”,串联起整个交易流程中的“凭证号、交易号、分录号、集合号、会计流水号”等实体的主键。
1)会计凭证:又称记账凭证,一个付款申请流程会生成一张会计凭证,担保相关子账户会生成多张账户。
2)交易管理:用于存储单笔会计交易,确保账户余额更新和明细记账可以在一次交易中完成。如果需要缓冲会计,会计交易将保存到缓冲会计表中,以便计划处理。
3)日记账分录流:将会计凭证转换成会计分录并存入日记账分录流,通过往来表和缓冲会计表完成会计处理。
4)缓冲记账:对于需要频繁更新的内部账户,会使用缓冲记账来提高性能,系统定时任务会扫描缓冲明细,然后根据缓冲记账规则更新账户明细和余额。
5)明细账:明细账分为内部明细账和外部明细账,外部明细账还包括子账户余额变动的明细。
3. 业务流程 3.1 实时记账
大多数交易都是准实时记账,也就是说是异步记账,交易完成后立即返回账户收据。下面我们将通过一笔商户支付交易来介绍实时记账流程。
图 13:收购交易的会计分录
实时记账先更新外部账户余额,单边记账先更新余额明细,然后异步推送会计系统登记会计信息并生成分录,该分录再更新子账户余额和明细账核算,完成会计处理。
图14:实时会计流程
3.2 缓冲区核算
缓冲会计适用于需要频繁更新余额和明细账的场景。会计信息存储在缓冲区中,并根据设定的时间段更新汇总会计和账户余额。
3.2.1 缓冲机制
缓冲会计按照会计处理的复杂程度和时效性,分为“普通定时缓冲”和“日终汇总缓冲”。
1)普通定时缓冲器:
对于实时分账,对时效性要求较高,需要多个分账方更新余额,一般采用定时缓冲(一般5-10分钟),该机制会先更新客户的资金(如付款方的余额),然后将分录保存到缓冲中,定时触发汇总记账和余额更新。
2)每日总结缓冲区:
对于担保、组合订单和组合等会导致非常大的账户请求的交易,可以在一天结束时使用一次性录入。由于担保需要几天才能完成,因此这种方法对客户来说并不明显,也可以减少性能瓶颈。
3.2.2 缓冲过程
下面我们以即时分账为例介绍缓冲记账的流程。此场景下,账户需要集中使用过渡账户,且分账涉及多个分账方。此类交易在业务高峰期会成为瓶颈,会涉及到大量账户余额的更新,因此需要“定时缓冲记账”来处理。
图 15:实时日记帐会计分录
会员付款成功后,系统会向会计系统提交“付款申请+账户结算”,会计系统会先从付款人的账户中扣除相应金额,然后生成录入流,并将数据存入缓冲会计表。
当定时任务扫描缓冲表时,会定时触发缓冲记账,触发后先获取缓冲记账分录,然后锁定“子账户方的账户集”,此时会存在“付款和子账户方”两个记账批次,系统先完成内部账户的余额和明细登记,再同步更新子账户方的余额,记账完成后系统解锁结果并传递给付款引擎。(图中的“逐批”是系统上一个线程进行异步处理)
图16:缓冲区核算过程
每日结束时的摘要缓冲区类似,只是在每日结束时会进行检查,以确保已处理当天的所有缓冲记录。
4.交易会计 4.1交易处理
我们之前在《对账与清理》一文中介绍过线上交易的核算,这里我们简单回顾一下。
图17:在线交易记账流程
商户在同一天有收款、退款、付款三笔交易,三笔交易均会产生相应的手续费,账务处理完成后,这些账务必须在日终对账时进行结清。
4.2 收款会计
图18:催收业务核算
当天商户收到货款1000元,支付手续费10元,与渠道有1000元的应收结算。
4.3 退款会计
图19:退款业务会计
用户向商家申请退款50元,但商家实际收到49元,因此退款时需退还1元手续费,退款成功后与渠道实际有50元的应付结算金额。
4.4 付款会计
图 20:付款会计
客户支付1000元,支付手续费1元,支付成功后,与渠道方有99元的应付结算金额。
5.期末会计
期末支付系统与渠道进行对账调整,并对结余后的资金进行日终处理,流程如下。
图21:期末会计流程图
5.1 会计准备
在进行总账核算之前,请确保外部系统已经完成会计处理,流程包括“日结通知、账务清零、渠道结算”三个步骤。
5.1.1 截止日期通知
首先,必须将每日削减通知外部“支付引擎和对账系统”,以确保所有后续交易都包含在下一个会计日期中。
5.1.2 账户清理
当日核算完毕后,需要对缓冲核算所形成的单边账务进行处理,以保证当日核算全部完成。
5.1.3 通道清理
渠道清算主要是完成各渠道待清算账户及银行存款账户的结余,我们的渠道清算是按照“收款、付款、退款”三个维度进行划分的。
我们根据收付款维度计算差额金额,然后和渠道清算资金进行核对,核对无误后进行资金结转,如当天有资金调度,也必须完成已调度资金的结转和入账。
图 22:渠道资金结转
5.2 总账会计
外围系统会计处理完毕后,即可开始总账会计。
5.2.1 总帐每日余额
在开始编制总帐前,必须先平衡所有科目,因此会汇总核对所有科目的借方和贷方余额,若汇总不平衡,则将错记科目的净额冲抵,并记入“待核对错记”科目,先确保总帐平衡,然后再人工核对科目错误并注销。
图 23:余额检查和错误处理
5.2.2 详细账户摘要
我们看到,以前我们做会计的时候,只有会计分录,还没有生成各个科目的发生额和期末余额,所以需要通过明细科目汇总来生成各个科目的发生额和期末余额。
明细帐户汇总是先生成各个帐户的发生额,然后根据期初余额生成期末余额,并将数据存放在每日余额汇总表中。
图 24:详细账户摘要
5.2.3 总帐科目汇总
每日余额明细生成后,需要生成总账余额数据(图中橙色数据),通过总账科目代码,从最后一级开始汇总同一个科目代码,生成总账期末余额。
图 25:总帐科目会计
注意图中的例子,我们当天有一笔退款结转,导致总账借方出现异常,在会计核对时,我们先增加了“待核对错账(借方)”的日记账分录,先将总账平衡,第二天结算员就可以轻松核对错误,处理相应的错账。
5.3 余额查询及每日削减
完成汇总工作后,剩下的就是一些余额检查和会计日的最后工作。
1)总帐余额检查:检查总帐余额的借方余额与贷方余额是否一致。
2)检查总账与下属账户余额:检查总账与下属账户余额是否一致。
3)每日余额表日切:将账户每日余额按照“客户账户”和“内部核算”维度保存在历史表中。
4)会计日期截断:最后更新的会计日期进入下一个会计期间。
6. 会计核心交互
会计核心对清算结算系统有较强的依赖性,因此会计核心主要由会计管理部分组成。
6.1 主题管理
用于管理记账涉及的所有科目,科目为树状结构的多级数据,在主界面可以创建一级科目,在具体科目上可以创建子级科目。
图 26:账户管理
创建学科时,可直接创建一级学科,二级以下的学科依赖上一级学科的信息,下一级学科只能填写学科编号和学科信息,若已经是最后一级学科,则不允许创建下一级学科。
图 27:账户创建详情
6.2 账户管理
账户分为外部账户和内部账户,外部账户为客户账户,不可手动添加,只能进行冻结、解冻等基本辅助操作;内部账户可手动开立,开户时需填写对应的最终账号。
图 28:账户管理
6.3 日记帐分录
分录流程将会计流程与系统跟踪号连接起来,每个分录至少包含两条数据:“一借一贷”。
图 29:日记帐分录
6.4 会计凭证
1)优惠券查询
通过清单我们可以查询当天产生的会计凭证信息,可以看到凭证的种类有很多,有“收款凭证、付款凭证、转账凭证、汇总凭证、结算凭证、调整凭证”等,这些种类还可以根据业务场景的需要进行扩充和进一步细分。
图30:凭证查询列表
2)凭证详细信息
凭证信息包括凭证、借记和贷记条目、摘要和操作员详细信息。凭证也可以下载和打印。
图 31:凭证详细信息
七、结论
好啦,我们来总结一下今天的内容。
7.1 会计核心包括什么?
1、会计系统:是会计系统对外提供的服务,包括会计服务和账户管理;
2、会计制度:会计制度是复核记账和日终管理的制度;
7.2 会计处理机制
为了做到账务处理的及时、准确,账务处理采用优先处理客户资金账户的单边记账方式,实时或缓冲完成会计核算,账务处理方式分为实时记账和缓冲记账。
1)实时处理:对于普通的简单交易(一笔借记和一笔贷记),单方面更新客户余额,并异步完成录入。
2)缓冲记账:对于需要频繁访问内部账户、批量更新账户余额的交易,在更新客户资金(如付款方)后将子账户指令存入缓冲区,定期汇总完成记账和余额更新,若涉及子账户余额,也会同步更新。
7.3 会计处理
会计核算主要分为“交易核算”、“渠道结算”和“总账核算”三个主要步骤。
1)交易会计:会计记录是由白天的网上交易产生的。
2)渠道结算:将待结算账款及银行存款结转,按照渠道资金结算结果进行结算。
4)总账核算:总账是生成总账汇总平衡表,分为所有科目维度的明细汇总和主科目维度的总账汇总,总账核算核对完成后,即可进行会计核算核心的逐日切割。
这部分内容“交易核算”和“渠道结算”是产品经理和研发经理进阶必须掌握的内容。总账核算可以理解为补充知识。(因为总账在中小机构结算人员手工就可以搞定,大机构几个人就可以搞定)
好了,会计的主要内容就这些了,如果还有什么疑问的话,欢迎留言。