新闻资讯
您当前的位置:主页 > 新闻资讯 > 投资新闻 >
账户系统设计从入门到精通
作者:admin    发布时间:2022-02-13    
 

  导语:账户是支付交易的最基础设施,由此可见其重要性。账户系统设计的核心不是设计本身,而是其的理念、规范以及基本原则。本文作者归纳总结了以往分散的账户类文章,并且附带了后台设计的几页关键页面原型,希望可以帮助你从0到1全面掌握账户系统的设计方法。

  账户体系是支付交易的基础,就像电池对于手机,油罐对于加油站,心脏对于人体?那么这么核心的系统是不是很难设计呢,其实恰恰不难;这也印证了那样一句线. 什么是账户

  财务知识不是很充足的同学可能对以上的账户定义很难理解和绕口;我们从业务的角度来看账户,后面的电子账户我们都会从业务角度去看,抛弃财务视角。从业务视角来看账户,其实就是用于记录某个主体的某类型资金的余额以及余额变动明细的数据载体。

  基于这3个点去构建账户的辅助设施,比如账户主体,账户种类,账户余额结构,账户流水的记录字段,账户的功能权限,账户的出入账,账户服务(账户开通注销,冻结解冻,余额流水查询等)等。

  但是站在业务的视角,我们更多是基于业务场景来对账户进行命名,比如商户的结算款会结算到商户结算账户,支付公司在银行开的账户叫备付金账户,备付金账户又分存管户、收付户、汇缴户;个人账户、企业账户;会员子账户、商户子账户、中间担保户。

  所以从账户命名上我们基本就知道了这个账户是干嘛用的;就像你有10张卡,一张是放工资的你叫他工资卡,一张是公积金的你叫公积金卡等等,所以这时候我们基于业务命名,目的是为了区分账户用途。

  但是收回来我们发现,无论账户叫什么名字,都是有账户余额、账户流水、账户交易。无论卡叫什么名字都是银行卡,所以账户的本质属性不变,设计办法基本相通,唯一会有不同的是附属内容,比如支出户只能打款不能收款,中间担保户不能为负等等,权限不同,主体不同,交易特点不同..

  小样,你以为穿个马甲我就不认识你啦,你装钱的,能进能出,记得明明白白;别管你叫啥我都知道怎么设计,不管我叫你啥我都这么设计。

  账户服务:开通/关闭、权限设置、入账、扣账、调账、冻结/解冻、余额查询、流水查询;

  账户底线原则:支付成功才入账,扣账成功才出款,一分不少线. 如何设计类型

  原则:名称是便于区分业务,账户本质相同。就像有的公司叫产品经理,有的公司就产品策划,有的公司叫需求分析师,但本质大家干的都是产品设计工作:

  入账规则:上游有业务系统比如账务系统请求一笔费用的入账,那么如那个账户呢,收支方向如何呢?所以入账规则就是来确定这笔入账怎么入的问题,规则主要有2部分组成。

  冻结规则:有些费用入账后是需要暂时冻结的,比如用户领的活动奖金,必须在冻结7个工作日之后才能解冻;某业务线的商家结算收入,统一在次月15号可提走;所以一条入账规则需要关联一个冻结规则。

  费用/入账规则/冻结规则关系:一个费用入账时,可能记一笔账,也可能记多笔;比如商户佣金费用,则会入两笔账:成本账户入一笔扣款,商家佣金账户入一笔收入;而扣款不用冻结,收入需要冻结7天。

  对外服务:任何系统都不是孤岛,账户系统同样,要将能力赋能给上游实现自己的价值;账户向外提供的服务基础的应该包含:开户、注销、查询(余额、流水、状态)、交易(支付、退款、充值、提现、冻结)等。

  账户管理后台:账户系统需要提供一个业务后台给到相关的运营人员,财务等角色;后台可以查看所有的账户以及账户的状态,所属主体以及余额情况;还可以操作账户进行注销,还需要能够查看所有的出入账流水,配置相关费用,配置入账规则和冻结规则。

  上面基本已经很清楚了,账户系统后台页面文章不再详述,原型可以到星球进行下载。

  余额支付:账户可以作为一种支付方式,包装出一个支付通道,利用平台自己的账户进行平台商品的购买支付,当然这个要考虑合规性。

  果然最后说的都是重头戏,账户作为一种资金池形态,要严格做好其合规性,如果平台没有资质牌照,那么自建可以但是用户账户的真实资金一定要放到监管账户当中进行监管,避免违规沉淀资金池,其他合规风险读者朋友们自己思考一下吧。

  账户本身记录的是资产或者负债或者费用,那么必然就需要一个主体承载,谁的钱,谁的债,谁的费用,谁的爱!世界上没有一片树叶没有归属,就算秋风落了叶,那它要不属于天空或是归属大地,所以账户归于谁,而这个谁是谁就是今天我们要聊的主体。

  那么这么多主体有什么意义呢,其实就是说明账户的主体可以非常广义,比如一个城市的GDP,可以通过一个统计报表得到,同样也可以为每个城市设置一个GDP账户,那么这个账户的主体就是一座城市;北京GDP账户2020年年末余额4万亿!

  所以主要是一个可以被定义的对象,我们就可以将它作为账户的主体来管理,就可以为之开通某种意义上的账户,账户也可以是广义的,不只是金钱余额,也可以是水量余额,点量余额,好感度余额等等,从而账户的广义我们是不是就可以认为:账户可以记录一个可被量化的数量以及变化过程的记录工具;那么我们就可以用账户的设计理念去设计更多的事物的数量以及变化过程。

  站在人民银行的角度看账户主体我们知道就是:网联、银联、各商业银行、各城市处理中心、各特批处理机构等;

  站在一个普通企业看账户主体就是:个人用户、企业用户、内部业务线. 主体的唯一ID

  就像个人我们的唯一ID可以是身份证,我们在开银行卡的时候就是用的身份证ID作为这个主体的唯一ID,在办理社保的时候也是用身份证ID作为身份的唯一ID;唯一ID的条件就是能够唯一识别这个主体。

  比如个人的唯一ID可以是身份证,手机号,社保号,一个平台的userID及时在这个平台的唯一ID;企业的唯一ID可以是统一社会信用编号,也可以是对公户的卡号等;如果企业入驻了一个平台那么这个平台为这个企业生成的企业编码也可以唯一识别这个企业。

  唯一ID的用途就是唯一识别这个主体,但是有时候可能这个主体的唯一身份ID不够用,比如这个人在淘宝即是个人用户又是商家用户,那么他在开户时可能就不能只用身份证了,而是用userID 去开付款户 和bussid 去开结算户。

  安全起见,我们需要核查主体的身份,像银行开户需要本人到场+身份证核验;二类户的开通需要多要素鉴权识别主体身份的合法性,对于企业来说企业的营业执照,法人签字,盖章或者对公户小额打款来验证企业的线. 主体的创建

  所以我们在创建主体的同时就需要定义每一类主体的唯一识别ID,在开户的时候,就需要使用这个唯一识别ID作为账户主体的唯一识别ID。

  一个平台的各类主体信息一般是放在用户中心或者crm系统,这些系统去调用账户中心进行开户,在这些系统内对于一个主体我们需要管理他的基本信息。

  比如ID信息、属性信息、权限信息、关系信息,有什么信息就增加字段管理即可,也可以将信息分类,每一类记录的不同的表中,比如身份信息、认证信息、账户开通信息等。

  我们从上面的开户过程可以看出来,账户内部和主体之间是一个复杂的对应关系。

  余额结构就是针对账户内部来说,账户的余额如何划分,就像火锅,有一个锅、鸳鸯锅、九宫格一样,账户作为一个容器,其内部依然可以划分成多个存储空间。

  看着是不是很像会计科目的结构,最下一层是不是很像叶子科目,当然第二层和第三层换一下位置也可以;这种情况下账户结构就很复杂了,而且自然存在了总账户和明细账户之分。

  还有一种是账户结构分总分机构,但二级账户的种类繁多,功能划分较细,这类账户结构具有支撑复杂的记账能力,以及业务处理能力,这类账户结构常见在二清监管户体系,比如下面具有众多子账户的账户体系,协同完成资金的监管和分账职能。

  一朋友咨询我人力资源代理平台的账户该如何设计,业务模型就是平台帮助很多企业代收代发工资,并且支付公积金和社保等多种资金款项,我设计了四个方案,你觉得那个方案好呢?

  因为资金清算周期或者业务流转节点多,或者其他风控要求,需要对账户余额进行复杂的处理操作,比如有的能提,有的不能提,最常见的结构就是三个余额属性:

  核算恒等式:总余额=冻结余额+可用余额,这样的话,就可以对账户余额进行一些处理,比如发的红包7天后才能提现,那么红包入账户时就会先入冻结余额,7日后解冻之可用余额。

  多级之间:x级总账户总余额=sum( x-1 级子账户所有账户总余额之和 )

  作业:思考一下,如果你是蚂蚁财富的账户产品经理,你会如何设计账户结构和余额结构,来满足业务模型呢?欢迎在产品群或者星球提交作业!(备注小心有坑哦)

  有了账户那么账户里就需要存入和存出,充值和提现,转账和消费;这样账户才会流动起来,才有了生命力;那么在交易场景里费用就显得十分重要了,多少钱,什么费我们以滴滴司机的结算账户为例来讨论本节内容。

  如果车到了,超过了4分钟用户不用车取消了,那么这时候就需要支付一个取消费用,这又是一个场景,我们可以称为“超时取消场景”,我们将平台的所有交易场景进行枚举,如果要新增场景,那么要预先在场景中心申请场景编号,才能开展上线. 费用

  费用就是站在业务角度定义资金的业务属性,基于业务侧的费用我们可以关联到后续的财务科目,这样的话费用是从业务发生那一刻就产生并且定义了,而且最后关联到会计科目,这样业务和财务实现信息一体,对于业务记账以及转财务账提供巨大的遍历。

  进行中的实时计算,这个大家都打过车就不再说了,结束后的计算,计算出本单实际产生的费用。

  我们简单想一下,这三个费用的特点,而且这三个费用在不同的城市,不同的时段,不同的用户,不同的车型都会发生变化,所以我们可以理解为,费用的细化是精细化运营的必然结果,另外用户也需要知道为什么收这么多钱。

  订单的清结算,订单完结后就需要给司机做结算,那么还需要进行一次计算,那就是这一单应该给司机多少钱,平台抽多少钱,要不要实时扣税,有没有其他费用,比如保险费,我们得出如下的清算结果。

  因为为了风控客诉问题,我们为司机设置一个7天的订单结算冻结期,这样的话我们的账户余额分成了冻结余额和可用余额,可用余额可以用于提现。

  以上两种方式可能第二种更好一些,特别是在核算和统计时,可以进行总分分别进行统计分析和核算。

  我们设置好了费用,那么在每个节点都会产生费用,或者计算出相关的费用,比如司机收入,那么清分之后就需要计入相关的账户,比如司机收入要计入司机的结算账户。

  当业务系统请求入账以后基于费用类型以及入账规则我们就可以知道应该入哪个账户;这时候问题就来了,因为账户余额也是分结构的,有冻结和可用,那么要是想先冻结起来怎么办呢?

  我们先回顾一下上一篇的最后一个图,在冻结处理里我画了一个虚线圈,本篇文章我们就把他做实了。

  我们在账户系统设计详解里讲过冻结模块,这里我们再细讲一下;冻结就是一个费用请求入账时要基于业务要求决定需不需要暂时冻结起来,还是直接就可以使用;那么如何设计冻结规则呢?

  冻结规则是基于入账规则设置的,也就是这笔入账需不需要冻结,如何冻结,是全部冻结还是部分冻结,这里我们以全部冻结为例。

  账户有2个核心部分组成,一个是账户余额我们已经讲过了,另一个就是账户流水,账户流水就是记录了账户的变动历史明细,我们收窄为“资金的变动明细”。为了记录资金的变动明细,我们就需要记录最基本的明细信息,一般必须包含以下信息:

  因为入账的时候有的流水处于冻结状态,那么我们就需要按照冻结的规则进行解冻,这时候就需要一个冻结解冻处理的任务进行扫描执行。

  至于扫描的模式要基于冻结模式去设计,我们以冻结固定时长最小单位为天为例,那么任务就需要每日凌晨去扫描遍历所有处于冻结状态的账户流水,满足解冻条件的变更冻结状态为未冻结,然后对余额进行处理;这又是一个处理的任务流。

  听到很多言论说在中国程序员是吃青春饭的,那么产品经理呢,也吃青春饭吗?

  人人都是产品经理(是以产品经理、运营为核心的学习、交流、分享平台,集媒体、培训、社群为一体,全方位服务产品人和运营人,成立11年举办在线+期,线+场,产品经理大会、运营大会50+场,覆盖北上广深杭成都等20个城市,在行业有较高的影响力和知名度。平台聚集了众多BAT美团京东滴滴360小米网易等知名互联网公司产品总监和运营总监,他们在这里与你一起成长。