一、虚拟账户体系介绍
在银行、支付公司以及电商平台的支付系统中,如果不是只做交易转发,而是真正需要做账务处理清结算,一定会涉及到账户体系的设计,一套好的账户体系应该是与业务无关的。账户体系在银行叫核心系统,在支付公司或者电商平台都是虚拟账户体系。
为什么叫虚拟账户? 原因在于虚拟账户里面的钱只是一种应付款项,并不能像银行、支付公司那样具有交易作用,所以虚拟账户很大作用是其记账功能。
虚拟账户本质上就是一个账本,按照一定的维度建立不同的虚拟账户,也就是建立不同的账本,来实时反映算出来的钱的一个累计值,从而丰富我们的结算模式。
结算,狭义上讲就是 付款,广义上结算包括 一个结和一个算,“结” 是指按照一定的账期规则,通过一定的方式付款给对方。“算”比较好理解,就是通过一定业务规则计算出来应付款项。作为产品设计,一个结算业务包含 结算单管理、发票管理、账户管理、财务管理。
虚拟账户系统是电子商务交易平台为了客户支付方便而为其提供的具有充值、支付、提现、账户管理、交易管理等的平台账户资金管理系统.虚拟账户系统可有效的对商户存留资金进行管理,并提供更多的增值服务,引导客户消费。
二、应用场景
场景一:会员积分。
我们知道,现在不管是什么类型的APP,都会有会员体系,会员体系都会有会员等级之分,会员等级的评价一般都是由会员积分来评价的,会员积分一般要求是实时的,通过积分增加或减少来体现不同等级,或者是积分兑换某一类商品等,这积分就是虚拟账户一种使用形式,我们可以设置一种账户类型为积分,每个用户都有这样一个积分账户,通过不同业务来体现积分的增减,通过积分的余额来体现会员等级;
场景二:虚拟币。
这个应用场景也非常广泛,比如我们常见的XX钻石、XX豆、XX金币、XX券等,都是对虚拟账户的应用,本质上就是有一种这种类型的虚拟账户,无非也是这个虚拟账户的金额的变动。
随着移动互联网的崛起,如今,第三方支付、消费金融、电商等业务玩法不断创新,但都要基于底层的账户设计。支付时所用的银行卡、账户余额、优惠券、信贷账户;会员体系(会员等级、客户属性等)的建设;风险控制的策略;营销规则及营销活动的设计等,都离不开底层完善的账户体系设计。
三、虚拟账户系统的设计框架
不同公司对底层账户体系的搭建需依托于本身的场景及账号基础服务等,从产品架构划分,包括 客户和用户信息子系统、 账户子系统、记账子系统,但大体上都是围绕三户模型做的设计。
三户模型(客户、用户、账户)
三户模型最早是在增强型电信运营图eTOM中提出,在电信行业中得到广泛使用。
客户,指自然人或者法人。法人一般被称之为企业客户。如无特指,一般客户指个人客户。
自然人一般包括,姓名、性别、年龄、职业、联系地址、联系电话、证件类型、证件号码、电子邮件地址、工作单位、工作性质、职位等等社会属性。
法人客户的概念同样成立,此实体应该包含了法人客户的社会属性的描述。如法人机构名称、证件类型、证件号码、联系人、联系地址、联系电话、法人机构性质等。
用户,指通过注册的方式进入系统,使用系统提供的服务的实体,也称为登录账户,即用户在系统中登录凭证和个人信息。对应的,法人客户在系统中注册后,被称为商户。
账户,这里特指支付账户,指用户在支付系统中用于交易的资金所有者权益的凭证。
因此,我们了解虚拟账户通过账户结构、账务结构的建立,根据业务需要,建立相关的交易体系,通过这一种标准框架的可以实现不同应用场景的应用。
1、客户用户信息子系统
通常来讲,客户和用户信息属于比较静态的数据,数据量也不会很大,即使是微信这样也就几亿用户,可以用单库单表硬撑,在数据库上只需要做主从高可用、读写分离考虑即可,如果有条件,还可以加一个REDIS集群做缓存。对外提供服务的应用直接提供数据库读写操作即可。
2、账务子系统
该系统是整个账户体系的核心,在按照产品设计进行会计科目划分后,体现为单个账户,这些账户,具体在系统中落地为2类数据库表,一个是账户余额表(又叫账户表),主要用来记录账户基本信息:账户ID,名称,会计科目,可用余额,冻结余额等;另一个是账户流水表(又叫余额变动明细表),记录这些账户所有相关变化的流水记录。
1)、账户结构
账户余额表(又叫账户表),主要用来记录账户基本信息,比如账户ID、名称、会计科目、可以余额、冻结金额等。
2)、账务结构
账户流水表(又叫余额变动明细表),记录这些账户所有相关变化的流水记录,主要是金额变动属性,交易业务属性,以及账务其他相关信息。
在存储层面,首先需要考虑的是账户流水会很多,而且都是按账户进行查询检索,所以可以考虑按客户号进行水平切分、分库分表,保证在交易过程中尽量只查单表,不跨库和多表联表查询。
在应用设计层面,对外提供单边借贷记和冲正接口,内部提供灵活的产品工厂封装。另外对于一些异步的通知功能如动账短信、告警等,可以使用MQ,异步完成,不影响正常交易。
3、交易
所谓交易系统,就是有一套交易指令,告诉虚拟账户可用金额发生额的变动、冻结金额发生额变动,也就是告诉虚拟账户金额属性字段发生额的变动,同时发生变动后会产生账务流水。
对于虚拟账户自身来说,一般有如下通用交易:
交易是连接业务与虚拟账户的桥梁,假如我们有不同的业务会导致虚拟账户的冻结,那么我们不同的业务就可以触发内部冻结的交易指令,因此在技术实现时,交易体系通常是一套完善的接口体系。再触发交易指令后我们也会记下来交易信息----这就是交易流水。
4、记账子系统
该系统可以作为一个联机异步或者日终批量系统,可以与账户体系隔离,单独完成会计科目记账和核对。该部分可以采用的技术较多,可以根据各公司具体实际选择。
我们做支付系统时需要考虑,为提高交易性能,交易必须与账务分离,以提高交易处理性能和效率,从而有针对性的分块解决复杂业务逻辑。所以,我们在支付系统设计中一般是将记账为分2个步骤,支付成功后系统同步记录流水账,异步通知会计系统做复式记账。
支付宝记账系统设计图如下:
在支付宝记账系统整个交易架构分为 记账子系统、分录子系统和日终子系统。其中通过流水账是分户账户(外),会计记账是分户账户(内),两个账户来解决交易与账务分离,提高交易性能。
分户账(外)是外围业务系统的账户系统,采用单式记账法。
(1)、记录了原始交易流水;
(2)、原始交易更容易与合作方进行对账。
分户账(内)是最核心的账户系统,采用复式记账法。
这部分主要记录结构账务,严格按照会计分录。
(1)、便于出统计分析的报表(如手续费、分润等计算);
(2)、结构账更容易计算借贷平衡和提供账户余额(为日终子系统提供数据来源的稳定性保证)。
记账子系统:参与联机交易,根据不同的联机交易实现业务逻辑,未来在业务和架构扩展上,在支付产品层只需要对这部分功能进行修改。
分录子系统:这部分主要针对会计中的六大会计科目:资产类账户、负债类账户、所有者权益类账户、损益类账户、成本类账户、共同类账户,将交易流水记录为会计科目,针对每一笔交易流水根据借贷平衡来保证账务不会出错。
日终子系统:主要完成两个任务:一是会计试算平衡,来保证账户系统的平衡,并且与实际内外部的资金进行核对对账;二是日切后批量统计,为数据报表分析提供支持,还可以做一些大数据相关任务。
四、总结
关于虚拟账户系统做如下总结:
①虚拟账户本质上是一个记账系统,他是结算系统中一个结算对象载体;
②虚拟账户设计包含着账户结构、账务结构;
③账户结构类似于总分类账,记录某一账户余额属性,可以提现某一账户实时的账户余额;
④账务结构类似于明细账,是总分类账金额发生变动的明细记录,他是触发账户余额变动的最根本来源,并且也可以用它进行会计处理;
因此通过虚拟账户体系搭建,其实实现了相关业务的实时展现(比如账户余额、账务流水),也实现了相关业务实时触发(比如账务变动、会计记账)等业务。