按照嘉宾的要求,本文不对外公开。如果你是意外看到这篇文章,请勿将链接发送给其他人。
6月8日有两次主题分享: 有赞支付和支付核心系统。前者已于6月7日整理提前发出。本次发布的是支付核心系统。
一、主题分享:支付核心系统
大家好,先简单自我介绍下,我曾就职于某付宝。本次主有关支付核心账务会计系统,可能涉及部分内容不方便展开分享与讨论,请大家见谅。
1.1 主要内容
今天分享的主要内容有:
1.2 缓冲记账配置和管理
缓冲记账是指针对频繁需要进行账务操作的部分帐户提供一种缓冲记账模式(含汇总记账),可以将该账户在一段时间内的账务操作请求放在一次性账务操作中进行处理,避免系统性能瓶颈。用缓冲记账处理的帐户统一登记在如下表结构的数据表中:(会计分录的记帐其实也可以参考缓冲记帐)。
账务核心系统在系统启动时自动加载该表的配置内容,并在每日首次被使用时刷新加载数据。也就是说,任何一项的修改,都将在次日生效。不选择实时生效的原因是缓冲记账必须在完整的账务日内实现,如果中途随时加载,会造成当日一部分数据是实时记账,一部分数据是缓冲记账,从而导致日终时无法统一处理。对缓冲记账业务的配置与管理过程,实质就是对这样一个表进行数据增加、删除、修改、查询的操作,应允许设置各个参数项即可。
- 某付宝账号:需要使用缓冲记账处理的20位某付宝账号;Account_ID
- 业务代码:需要使用缓冲记账处理的6位业务代码;
- 补账间隔:缓冲记账处理的时间间隔,以秒为单位,如60秒,则每60秒进行一次缓冲记账;
- 记账模式:具体缓冲记账的模式,缓冲记账则根据补账间隔执行记账操作,汇总记账则在日终时汇总执行记账操作;
- 其他:其他除了创建时间、最后修改时间为必选,其他字段均为业务预留字段,暂时没有直接的业务应用;
- 业务限制:不允许同一个账号、同一个业务代码配置两条记录,比如某账号的某业务即做收款缓冲,又做付款缓冲,这样的配置业务上是不存在的,系统也应是不允许的。
账务核心系统 在系统启动时自动加载该表的配置内容,并在每日首次被使用时刷新加载数据。也就是说,任何一项的修改,都将在次日生效。不选择实时生效的原因是缓冲记账必须在完整的账务日内实现,如果中途随时加载,会造成当日一部分数据是实时记账,一部分数据是缓冲记账,从而导致日终时无法统一处理。
对缓冲记账业务 的配置与管理过程,实质就是对这样一个表进行数据增加、删除、修改、查询的操作,应允许设置各个参数项即可。
关于缓冲记账的功能,某付宝是可以动态加载的,例如针对突然出现的商户交易秒级笔数上升,可以在达到一定的阈值之后会出发监控,从报警日志中拿到实时的账号从而动态修改标准记账模型到缓冲记账模型。同一时间记账模型只能是一个。然后针对切换期间的兼容性问题,主要保证账务流水在资金的变化连续性。一方面是查询做排序,一方面是缓冲补账按照业务顺序来执行。
在新增和修改时应满足下面的规则:
- 某付宝账号:需要使用缓冲记账处理的20位某付宝账号,必须在某付宝系统内存在;
- 业务代码:需要使用缓冲记账处理的6位业务代码,必须是存在的业务代码,1,7,8开头的业务代码不可以配置为缓冲记账;
- 补账间隔:缓冲记账处理的时间间隔,以秒为单位,如60秒,则每60秒进行一次缓冲记账,本字段目前不允许修改,默认为300秒;
- 记账模式:具体缓冲记账的模式,缓冲记账则根据补账间隔执行记账操作,汇总记账则在日终时汇总执行记账操作,汇总记账模式目前并不支持;补账最大记录数,页面限制2000,系统只做数据库字段长度限制;
- 其他除了创建时间、最后修改时间为必选,其他字段均为业务预留字段,暂时没有直接的业务应用,创建时间和最后修改时间由数据库产生,不允许操作员修改;
- 不允许同一个账号、同一个业务代码配置两条启用状态的记录,比如某账号的某业务即做收款缓冲,又做付款缓冲,这样的配置业务上是不存在的,系统也应是不允许的;
- 增加废止日期字段,插入当前操作日期;缓冲记账在记账和补账时都应使用满足这样规则的记录;无废止日期或废止日期等于今日的;不允许重新启用废止日期等于今日的记录。
1.3 会计结算业务参数的配置与管理
会计系统作为核心中重点负责清算、结算会计平衡的系统,在每增加一家银行时,都需要配置相关的会计结算关系。会计系统的日间记帐处理包含两种模式:即时模式和缓冲模式,具体采用何种模式由账务系统触发时决定。即时模式需要会计系统严格按照账务系统发送的指令进行会计记帐处理,缓冲模式需要会计系统根据相关的参数配置进行会计记帐处理,一般日间都是单边的会计记账处理,如充值与提现业务,日间会计系统根据参数配置仅记录客户帐的变化部分,不记录内部账的变化部分,内部账的变化部分在日终时根据相关参数和日间的单边账务记录,进行分类汇总后再分别记帐处理。
- 针对日间所有的充值类交易代码、提现类交易代码操作,其下每一个子交易码sub_trans_code对应的每一个涉及该业务的title_code科目代码都需要配置一条对应的参数记录,来确定日间该科目下的该交易代码进行怎样的单边会计记帐处理;参数重点说明该科目该交易记帐的方向、是否需要汇总记帐、是否需要发送对帐中心处理、是否需要cache。
- 每增加一种涉及充值或者提现业务的科目都需要增加对应一整套参数记录;
- 每增加一种涉及充值或者提现业务子交易代码都需要增加对应一整套参数记录;
-
日终批量处理时,有一步是专门针对缓冲记账的处理,会计系统会根据参数表中充值、提现相关的每一个子交易码sub_trans_code对应的银行代码bank_type不同,分类统计日间的单边会计记账数据,按照汇总后的数据会计系统单边记账处理,完成缓冲记账的剩余部分;
-
日终批量处理时,有一步是专门针对银行存款结转的,即将经过对帐的资金从待清算账户结转到银行存款账户,以保持与银行真实资金变化的一致。会计系统会根据与银行的对账结果数据进行结转记账处理,参数表中记录了每家银行从待清算户到银行存款户进行结转的具体记账参数中充值。这里面会存在两种结算方式(某付宝开立结算户头的银行可直接从待清算户结转到银行存款户;对于某付宝未开立结算户头的银行,是通过XX银行调拨结转的,需要从待清算户结转到调拨户,再从调拨户结转到银行存款户,需要两步处理),所以存在两套记账参数。
1.4 会计流转
会计流转规则主要讲的是从客户账最终变成银存各个环节分录的生成规则。
- 客户侧分录汇总成一笔待清算分录
- 待清算结转到银存
- 待清算结转到调拨
- 调拨结转到银存
以上这生成规则把整个资金如何流转展示出来了。所以配置会计流转规则也是按照这个思路来操作,那么业务侧一般由于以下两种情况需要添加这个规则。
- 一是新增银行,需要把相关的交易代码都配一套资金流转规则;
- 一是新增交易代码,需要把相关的银行也都配一套资金流转规则。
在以上整个资金流转过程中,每个环节需要配置如下的要素:
- 汇总入账:需要配置一方的借贷方向,账户和科目;
- 待清算结转给银存:需要配置双方的借贷方向,账户和科目。待清算方的账户和科目在汇总入账中清楚,借贷方向跟汇总入账一方科目的方向相反;
- 待清算结转到调拨和调拨结转银存的配置和上面待清算结转给银存类似。
Q&A
Q:秋秋妹子,能加点业务解释或这样做的原因么?很多人都没有用过某付宝的管理系统。
A:下次再分享吧,现在没有时间了。
Q:请问一下公司账户存款怎么是负债类?
A:客户备付金啊,又不是某付宝的自有资金。
A:当然负债啦,这部分资金是要待清算给客户的。
Q:接着上面的问题,这不是公司自己的钱吗?
A:这个钱只是暂存在支付公司的,客户随时可以提走。
A:第三方,是用户放在你这边的钱,你欠用户的;从支付公司角度,就是负债。
Q:个人账户资金可以理解,这是客户资产,对支付公司来说是负债,但是公司账户存款,应该是公司自己的钱吧?
A:是的,公司自己的账户存款,那当然是自己的。
A:建议大家想了解支付怎么回事,先看看央行的关于第三方支付哪些文件,了解了政策后就知道为什么要设置这些备付金账户了;然后通过哪些方式管理核算这些备付金账户。
Q:跟自有营运资金是分开的,自有营运资金是资产类科目,这样理解对吗?
A:理解正确。
Q:上面图的科目具体会有什么作用呢?每日输出核算报表?和进一步生成财务报表?
A:科目是为了核算用的,每一个科目对应一个账户。
Q:一对一的关系么?
A:通过会计科目的设置,一般设置三级,一级就是总账;通过会计科目可以试算平衡;分为总分账和分户账。
Q:单边记账方式影响对账吗?
A:影响的,单边账要是有流水没有入账的,你们对账对死也查不出。
A:引入会计体系就不一样了,复式记账,只要不平衡就能定位哪条入账流水,哪些清算流水有问题;有借必有贷,借贷必相等。
A:不是单边账不好,每家企业需求不一样。
Q:这个会和会计科目有关系么?应该是在账户层面就能查出来吧?如果是单边账的话。
A:只要公司觉得他们的账务能清楚明细就可以,适合自己企业管理需要的就是最好的清结算系统,我是这样认为的。
Q:这里公司账户存款设置成负债科目,公司账户存款是不是支付公司企业客户?
A:是的,这些都是内部户,客户分为2B和2C。
Q:支付公司所有的收款都会先挂到共同类么?
A:共同类就是一个过渡科目,这个是比较简单的账务了。
Q:资金的流转都需要走到过渡户吧?清结算之后到具体的科目么?
A:每一笔入行流水就是一条会计会计分录。
A:一般的待清算会挂到共同类,但是有时候,待清算中的应收和应付是可以更清晰的划分开的。
Q:找个时间,让这个财务朋友系统说一下吧,我看大家这样问好像没有尽头了。
A:预定了6月19日,期待。
Q:设计账务会计核心系统有什么参考书籍吗?
A:有呀,请参考下图:
Q:备付金的存管报表也会按上面科目基础来生成么?央行的。
A:备付金的存管报表你指的是企业内部还是对央行监管的报表。
A:央行的报表和第三方支付的口径不一样,一般好多第三方支付公司会按照央行的报表开发一套对接企业的清结算系统。
Q:那会直接从账户层面取数,而不是会计科目层面取数?
A:会做从现有的会计体系或者说账户体系中做一个映射到央行里面,具体每一家做法不一样的。
Q:请问一下oracle到mysql数据准实时同步有什么好的工具推荐吗?
A:请参考Oracle数据同步工具,我们用得这个,准实时。
Q:对账有什么问题呢?
A:最主要的是每个平台账单格式不统一,逻辑也不统一,尝试做通用的对账系统,效果不太好。
Q:针对不同渠道的文件格式不统一,逻辑也不统一问题,如何处理比较好呢?
A:我们现在对账没那么复杂呢,如果是对账单格式不统一,是需要有一个统一的处理模块,把不同格式的对账单,处理成统一的格式,统一对账的。
A:有一个对账单的接收处理模块,把对账单做标准化处理的,之前老熊的文章中也有提到。
A:对账不就是分有查询接口和账单文件2种形式,设计一个独立的模块定时查询,或者像楼上说的格式化文件数据入库。
A:我们现在对账,基本都是有给对账单的,还没遇到要发查询的 [憨笑],但理论上,如果有的话,也应该是要自己组一个对账单,再入库。
A:广义上的对账,功能是比较多的,不仅有交易对账,还有资金对账,交易对账又分商户对账、机构对账,资金对账要对本金、手续费、结算款、备付金等。从系统角度来说,还有内部对账,比如会计系统的账证、账账、账实等核对也是对账。大家讨论的基本上属于外部对账\机构对账\交易对账,此外,对账的差错处理、挂账、销账也是对账的内容。
Q:内部账,系统之间的对账吗?
A:是的,内部的还好说点,外部的对账,涉及到结算资金的,还需要先自行清算。
Q:什么时候大佬们来讲讲对账当中的差错处理阿,这块系统是如何进行设计?
A:这块内容太大了,范围再小点,你说的是哪块的对账,再说差错。
Q:外部渠道,多账少账处理,业务上没什么问题,关于处理这块时挂消账的逻辑该如何设计?
A:首先要明白,为什么要挂账,不挂账,会计系统账平不了,所以挂账只是让会计系统临时账面平衡。不平是怎么产生的? 主要是因为外部渠道是自主清算,而第三方支付机构属于非自主清算,两边的清算由于多种原因,会产生结果不一致,为了保证与渠道一致,把不一致的地方形成差错,差错体现在会计系统上,就是挂账。
A:差错找到原因了,消除了,就要将挂账解掉,也叫销账。至于挂哪个科目,这个要看会计制度,有的是应收、应付。所以,前期在会计系统设计的时候,科目、账户的设置要考虑这些因素。
Q:其实本质还是科目账户的问题,然后以会计业务逻辑来进行挂账与消账,是这么理解吗?
A:是的,会计系统就是专门干这个事的。
Q:总账是什么啊?
A:要了解总账,先明白什么是科目,总账就是一级科目;要了解科目,得看什么是会计要素,科目是会计要素的分类。
Q:有没有会计系统和账务系统设计文档,能否提供参考一下呢?
A:这个有点核心了,涉及机密,一般不会共享的。
A:这种建议直接去网上买,然后找你们财务分析,一般不会有人免费分享,而且真实应用的都是不能拿出来了。
A:这个也没什么秘密了,账务和会计比较简单,大家被术语吓怕了。 账务,也叫会计前罝,主要是处理凭证和一些业务账,主要是分户账。会计主要是处理分录,主要科目账还有报表。这块內容比较多,找个周末给大家分享一下吧,只聊体系,不做针对性应用。
A:这个是我整理的,大家可以参考一下。
Q:那么账户、账务之间的具体关系是什么?
A:上次我给大家讲过了三户关系,里面没有怎么讲账户,因为账户属于会计范畴的,在会计系统中讲。
A:这也有一篇讲解账户账务的,点击查看(第三方支付架构设计之—帐户体系)。
A:这篇文章我看过了,和我这几个图差不多。
Q:张兄弟你这些东西是哪里学的?还是说之前联通支付的这套架构是你搭建的吗?
A:联通的时候我没有负责账务和会计这块,但这一块我在联通的时候就了解了。
A:我之前在支付公司也很想知道这块,但是这块是支付公司的基础功能,在一开始的时候就搭建好了,我问过很多人都说不清楚到底是怎么设计的,所以特别想知道这玩意到底怎么学。
A:会计需要先把术语弄明白了,找本基础会计书看看就行了,没有你们想象那么复杂。
Q:会计内容就是科目,一种账户下记录的科目是不是都固定的?按账户性质划分?
A:更准确的说,账户是由科目定的。
A:我之前在支付公司也很想知道这块,但是这块是支付公司的基础功能,在一开始的时候就搭建好了,我问过很多人都说不清楚到底是怎么设计的,所以特别想知道这玩意到底怎么学。
A:会计需要先把术语弄明白了,找本基础会计书看看就行了,没有你们想象那么复杂。
Q:就是按科目性质划分,再归类为账户,统计分析这些以帐户为基本单位? 这样操作好些。
A:账户由科目定的,所以一个账户只能归一个科目下,当然,一个账户有不同维度,还可以从产品上去分,设定产品账。
A:是的,会计学其实也是统计学,要做好统计,得分维,科目就是维度,为了好分析,又要降维,所以才出了总账。
A:记账是以叶子科目计算的,可以设置多级科目。
A:一个账户有很多维度,科目只是会计维度。
Q:一个账户肯定要属于某个科目,而且只能一个科目是吗?但是账户还有其他属性(非会计的)?
A:是的,理解正确。根据科目账户原理,账户必须隶属于某个科目,账户只能隶属于叶子科目,而不能隶属于非叶子科目。
A:一个账户做结算交易,例如存入支取结息。存款可能入到存款本金科目,透支可能入到透支本金科目,结息可能入到利息科目。
Q:账户上记着具体的数额时,必须细化到叶子科目,而非叶子科目实际上只是一个归类罢了?
A:是的,一个账户可能对应一个产品,一个产品对应一个科目组。科目组里可能有一系列科目。
A:可以理解为一个组名,组名是不能记账的。
Q:秋秋,你们某付宝的这块有没有最新的?
A:没有呢,我已经不在那边了,这大总管PPT都2010年的了。
Q:阿里的会计科目编码是独立设计的一套?没有走企业会计准则里的编码?
A:有的呀,会和财务的会计科目是有映射关系。
A:大总管的系统还在,但是在科目体系有一定的变动。
A:是啊,里面客资的操作功能都在,只不过会计系统是单独独立的出来。
Q:张兄,有没有相应的会计书推荐一本?
A:基础会计可以看一下,还有一本估计现在都没有了,我都是从淘宝上影印的叫《会计核算模式与账务系统设计》。
Q:上面一图,跟银行对账是从会计系统拿数据吗?
A:待回复。
补充: 文中所提的秋秋妹子、秋秋等,是位男同学。
本文档来自支付产品技术交流群的聊天记录整理,由志愿者整理并发布到本网站。如需要及时收到来自支付产品技术交流群的最新消息,请扫码关注“凤凰牌老熊”的微信公众号。 本群面向支付行业的有经验(2年以上)的产品经理、软件工程师、架构师等,提供交流平台。如想加入本群,请在本文评论中留言(不公开),说明所在的公司、负责的工作、入群分享的主题和时间。