支付最后的黑盒,账务核心
账务核心应该是支付三大黑盒“对账中心、支付引擎、账务核心”中门槛最高的了。因为他既有会计核算知识,又有懂技术实现高性能的记账,今天我就用“大白话+图片”的方式尽可能通俗易懂的给家介绍这个黑盒是如何设计的。
一、什么是核算
核算通俗地讲就是一套会计从原始凭证到财务报表的会计处理流程。会计核算的内容有近十项,但是对于结算类业务来说其实只要核算到会计账簿即可,剩下的都是财务内部营收核算的工作了。
图1:核算处理过程
核算不是一招鲜吃遍天,他要结合业务场景经济项目来做核算,比如银行就有存款核算、贷款核算和支付核算三大核算业务,这三块业务核算的侧重点都各不相同,其核心还是围绕业务场景通过会计方法来记录、检查、计算和分析整个业务处理过程。
二、账务核心设计
账务核心是支付平台的所有账务的基准。他日间与支付引擎配合记录联机交易清算账务,日终与对账中心配合处理期末的核算账务。
日间联机交易分为内场结算和外场清算,账务核心负责内场结算账务的处理。为了实现支付高性能,账务核心采用了实时和缓冲记账的方式。优先更新客户资金余额,异步方式进行内部户更新和账簿登记。
图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个贷方余额即可。但是在实际系统设计中,借贷都会有发生账务交易,因此实际的系统设计中为了汇总期末余额方便采用了四个余额。即“可用贷方余额、可用借方余额、冻结贷方余额、冻结借方余额”,本文图中为了描述简洁选用了理论上所需的贷方余额。
2)客户账户模版
客户开户需要根据预先设定好的客户账户模版,通过用户角色来确定开哪些类型的账户,要开几个对应的资金分户来记录余额。有了模版就无需人工来介入辅助开户了。
3)分户余账簿关系
客户分户除了有“明细账簿”记录会计账务外,还有一个分户余额明细账簿用来登记余额的变动,这样我们就能在账单上查看每笔交易的余额变动了。
4)内部户映射关系
内部户就是一个会计账簿,因此就不用客户账户那么复杂,按照科目开立账户即可,同时对应内部户的明细账簿来登记会计分录。
5)资金单边记账
为了处理账务的高效,账务系统采用了先变更客户资金余额(即限贷后借),单边记录客户账资金变动。让用户能够及时掌握资金变动。
6)会计补全分录
会计系统采用先保存记账分录,再以异步的方式实时或者缓冲来补全账务明细,实现资金与账务的最终一致。
2.5 领域模型
考虑到支付同学大都有技术背景,更多关注流程和数据的流转关系,因此我们这里给大家介绍下账务和会计系统的领域模型。
2.5.1 账务领域模型
账务领域模型,用来处理了会计科目与分户账之间的关系,实现资金与账务的最终一致。
图11:账务领域模型
1)会计科目:按照会计科目树形机构来存放科目账户信息。
2)外部账户:外部账户包含账户模版、分户账户和分户余额,他们共同组成了客户的账户。
3)内部账户:内部账户由于是内部使用的过渡账户,因此他仅一个分户即可。
4)枚举对象
- 账户属性:区分账户的角色属性;包含对公、对私、内部;
- 账户类型:分户的账户类型;包含基本户、一般户、结算户、临时户、保证金户等;
- 余额方向:分户会计余额期末的反映方向;参数有“借方、贷方”;
- 资金属性:分户记账时登记余额的记账信息,存放在分户的子户;参数有“借记、贷记”;
2.5.2 会计领域模型
会计领域模型包含了联机交易的账务核算和总账核算,我们这里重点介绍下账务核算
图12:会计领域模型(省略总账)
整个记账过程通过支付请求的流水号作为“系统跟踪号”来串联整个交易过程中的“凭证号、事物号、分录号、套号、记账流水号”等实体的主键。
1)会计凭证:又被称为记账凭证,一笔支付请求流水会生成1张会计凭证,担保类分账会生成多账。
2)事务管理:用来存放单次记账交易,用来保障账户余额更新、明细账簿登记能在一次事务中完成。如果需要缓冲记账,会将该记账交易保存到缓冲记账表进行定时处理。
3)分录流水:将记账凭证转化为会计分录存放在分录流水中,通过事务表和缓冲记账表来完成账务处理。
4)缓冲记账:对于需要频繁更新的内部账户,为了提高性能会采用缓冲记账的方式,系统定时任务会扫描缓冲明细,然后按照缓冲记账规则更新账务明细和余额。
5)明细账簿:明细账簿分为内部明细和外部明细账簿,外部明细账簿还包含了分户子账户余额变动明细。
三、业务处理流程
3.1 实时记账
大多数交易都是采用准实时入账的流程,所谓准实时就是异步的方式进行记账,只要处理完理就返回账务回执结果。下面我们通过一笔商户收款交易来介绍实时记账过程。
图13:收单交易会计分录
实时记账首先是更新外部账户余额,并且单边记账更新余额明细,随后异步推送会计系统登记记账信息并生成分录,这笔分录更新分户余额、明细账簿记账后完成账务处理。
图14:实时记账流程
3.2 缓冲记账
缓冲记账是对于需要频繁更新余额和明细账簿的场景,把记账信息存放在缓冲区,根据设定的时间段进行汇总记账和更新账户余额。
3.2.1 缓冲机制
缓冲记账根据账务处理的复杂度和及时性分为“普通定时缓冲”和“日终汇总缓冲”。
1)普通定时缓冲:
对于即时分账这类及时性要求高,并且请求多个分账方余额更新时。采用普通定时缓冲(一般5-10分钟),该机制会先更新客户资金(例如付款方余额)然后保存分录到缓冲区,定时触发进行汇总记账和余额更新。
2)日终汇总缓冲:
对于担保、合单和组合这种会出现超大账户请求的交易,可以采用日终汇总一次性入账的方式。因为担保达成长达数天,因此这种方式客户无感,也能降低性能瓶颈。
3.2.2 缓冲流程
下面我们以一笔即时分账来介绍下缓冲记账处理流程方式。在这个场景中账户需要集中使用过渡户,并且分账涉及多个分账方。这类交易在业务高峰时过渡户将成为瓶颈,并且涉及大量账户的余额更新,因此需要采用“定时缓冲记账”来处理。
图15:即时分账会计分录
会员支付成功后,系统会将“支付申请+分账结算”提交给账务系统,账务系统先扣除付款方账户金额,然后生成分录流水并将数据存入缓冲记账表。
当定时任务扫描缓冲表将定时触发缓冲记账。触发后首先获取缓冲记账分录,然后锁定“分账方账户集”。此时会有“支付和分账”两个记账批次,系统先完成内部户的余额和明细登记,然后同步更新分账方的余额。记账完成后,系统解除锁定结果通到给支付引擎。(图中的“逐笔批次”在系统上就是一个线程来异步处理)
图16:缓冲记账处理流程
日终汇总缓冲也是类似,只是日终缓冲会做一次检查,保证当日所有缓冲记录都被处理。
四、交易核算
4.1 交易处理
我们前文《对账清洁算》中曾经介绍过联机交易的账务核算,这里面我们简单的来回顾下。
图17:联机交易账务处理流程
当天商户有收款、退款和付款三笔交易,三笔交易都会收取相应的手续费,账务完成后日终对账要对这些账务进行核算。
4.2 收款账务核算
图18:收款业务核算
当天商户收款1000元,缴纳手续费10元,与渠道有1000元的应收清算款。
4.3 退款账务核算
图19:退款业务核算
用户向商家申请退款50元,实际商家收款49元,因此退款时需要退还手续费1元。退款成功后实际与渠道有50元的应付清算款。
4.4 付款账务核算
图20:付款账务核算
客户付款1000元,缴纳手续费1元,付款成功后与渠道有99元的应付清算款。
五、期末核算
期末支付系统会与渠道进行对账和调账,对平之后资金进行日终处理。这个过程如下。
图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.1 科目管理
用来管理参与记账的所有科目。科目为树形结构的多层级数据,在主界面可以可以创建一级科目,下级科目可以在具体科目上创建。
图26:科目管理
科目的创建时一级科目可以直接创建,二级以下科目依赖于上级科目的信息,下级科目只能填写科目编号和科目信息。如果已经是末级科目则不允许创建下级科目。
图27:明细科目创建
6.2 账户管理
账户分为外部账户和内部账户,外部账户为客户账户,不可以手工添加,只能做冻结、解冻等基础辅助操作。内部账户可以通过人工来开户,开户需要填写对于的末级科目号。
图28:账户管理
6.3 分录流水
分录流水以系统跟踪号串联账务过程,每条分录至少包含“一借一贷”2条数据。
图29:分录流水
6.4 记账凭证
1)凭证查询
通过列表我们可以查询当日产生的记账凭证信息。我们可以看到凭证类型有很多包括“收款凭证、付款凭证、转账凭证、汇总凭证、结账凭证、调账凭证”,这些类型可以根据业务场景需要来进行拓展和进一步细分。
图30:凭证查询列表
2)凭证详情
凭证信息包含了凭证、借贷分录、摘要和操作人相关的详情。同时凭证可以下载也可以打印。
图31:凭证详情信息
七、总结
好啦总结下今天的内容。
7.1 账务核心包含哪些
1、账务系统:是账务系统对外提供的服务,包含账务服务和账户管理;
2、会计系统:会计系统是进行复试记账和日终管理的系统;
7.2 账务处理机制
为了实现账务处理及时性和准确性,账务处理采用优先客户资金账户单边记账,通过实时或者缓冲补全会计账务的方式。账务处理方式分为实时和缓冲记账两种方式。
1)实时处理:对于普通简单交易(一借一贷)采用单边更新客户余额,异步补全分录的方式。
2)缓冲记账:对于分账类需要频繁访问内部户,批量更新账户余额的交易。在更新客户资金的同时(例如付款方)后将分账指令存放到缓冲区,定时汇总完成记账和更新余额。如果涉及分账方余额也会同步更新。
7.3 账务核算处理
账务核算分为“交易核算”、“渠道清算”、“总账核算”三个主要核算步骤。
1)交易核算:讲日间联机交易形成会计账务。
2)渠道清算:根据渠道资金清算结果将待清算和银存账户进行结转平账。
4)总账核算:总账就是要生成总账的汇总平衡表,他分为所有账户维度的明细汇总和一级科目维度的总账汇总。最后完成总账的核算检查后账务核心就能日切。
这部分内容“交易核算”、“渠道清算”产品经理、研发经理进阶必须掌握的,总账核算作为补充知识了解即可。(因为总账在中小机构结算员手工就能做完,大型机构有几个人就能处理了)
好啦,账务核心的内容主要的就是这些,如果还有什么疑问欢迎大家留言。
本文由人人都是产品经理作者【刚哥】,微信公众号:【刚哥白话】,原创/授权 发布于人人都是产品经理,未经许可,禁止转载。
题图来自Unsplash,基于 CC0 协议。
太硬核了
请教刚哥,你在做为面试官面试应聘者的时候,会用哪些标准考核有产品经验、但没有垂直领域经验的候选人?
这个要看垂直行业经验的岗位必要性了,如果目标就是主攻垂直行业方向,那经验这方面不会妥协,会在软件层面如学历、年龄方面做些妥协(找老板哭闹要去);
如果垂直行业必要性不强,我还是关注专业能力相关性、思考能力、沟通能力、学习能力