理财清结算的现状与历史.docx_第1页
理财清结算的现状与历史.docx_第2页
理财清结算的现状与历史.docx_第3页
理财清结算的现状与历史.docx_第4页
理财清结算的现状与历史.docx_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

冯刚2014年3月1. 理财清结算的现状1.1 清结算模块功能清结算以基金公司提供的文件为出发点,做了以下两件事。 根据基金公司提供给百度的对账文件,更新用户的资产及收益。 根据对账文件,更新申购或赎回交易的状态到成功或者失败。清结算结束后,对账模块会根据对账文件进行商户对账,保证百度系统中的交易和基金公司系统中的交易完全对应。这部分不在本文介绍的内容中。1.2 基本名词 申购,认购:即投钱,购买,申购和认购的区别是对于不同的基金类型来说的,如我们的团购产品百发,购买为认购,因为其有募集期,不按照正常的工作日走。而其他三个产品都是申购,按照正常的工作日来的。 赎回:即收钱,收回用户资产。 交易所属日期:标识用户发起的申购或赎回属于哪一天的交易。 交易确认日期:标识用户发起的申购或者赎回交易是哪天确认的。 工作日:基金公司所有交易所属日期和确认日期只能是工作日。相反,周六日,节假日都不是工作日。 15点日切:基金公司都是按照15:00:00点来日切的,例如“2014.01.15 14:00:00”发生的交易,所属日期是2014.01.15。但是“2014.01.15 15:00:01”发生的交易,是属于2014.01.16的。注意时间点“2014.01.15 15:00:00”属于2014.01.15。 未付收益:用户份额产生的收益一开始均为未付收益,未付收益不会再用来计算收益,只有发生结转时,会将未付收益变成本金,才开始对此部分金额计算收益。结转有月结转和日结转,分别在月末和每天把用户的收益加到本金。日结转把每天产生的收益立即变到本金,所以不再有未付收益的概念 全赎:当申请赎回金额等于可用份额时,若用户还有未付收益,会将此部分未付收益自动打给用户。例如用户目前有1000本金,10块收益,用户最多只能发起1000的赎回申请,确认时会自动把10块打给用户,如用户发起999的赎回申请,只会确认999。全赎回只能是T1赎回,不能是T0,原因在2.1.3节中会讲到。 分红:货币基金的分红方式默认为结转到本金,所以下面谈到的分红和结转可以等价看待。1.3 交互流程以申购为例,假设每一步都是成功,交互流程如下:用户在百度发起申购后,交易状态到已创单3,上图中的编号每一步如下:1) 百度向基金公司发起申购请求;2) 基金公司同步消息返回百度,交易状态到已受理4;3) 基金公司向银行发起扣款请求;4) 银行返回扣款结果;5) 基金公司异步通知百度扣款成功,交易状态到已付款5;-分割线-6) 基金公司向TA发起份额确认请求;7) TA返回基金公司份额已确认;8) 基金公司异步通知百度份额确认,交易状态到成功8。上面任何一步返回失败,交易状态都会变为失败9。分隔线划分了两套不同的TA系统,目前,华夏不是实时TA,份额T1才能确认,所以在实时消息中是没有6,7,8这三步的,这三步也就是份额确认需要通过文件的方式来完成。嘉实是实时TA,份额实时就能确认,所以6,7,8三步由实时消息完成。嘉实的实时TA是假的实时TA:嘉实在申购时,份额虽然会实时确认,但是这部分份额开始计算收益的时间也是T+1日,而且要T+1日才能进行快速赎回。我们只好管这种份额确认叫预确认。通过上面这个图可以很好的理解T1申购和T0申购,T0申购就是通过实时接口,交易的状态可以到终态(成功或失败),T1申购没有6,7,8通知,得等到申购确认文件,才能将交易置到终态。T0赎回和T1赎回主要体现了用户资产的到账速度,目前T0赎回可以2小时到账,而T1赎回要下个工作日15点左右才能到账。对于嘉实的赎回,T0赎回有6,7,8,T1赎回没有。但对于华夏的赎回,T0,T1都没有6,7,8通知,所以华夏的赎回我们都当做T1赎回来对待(现在版本这样处理的,因为华夏T0,T1体现的到账速度我们不关系,老的版本需要关心这一点, 2.1.1节会讲到)。1.4 对账文件报送时间点交易发起时间交易所属日期交易确认日期文件报送时间,份额确认时间,开始计息时间华夏嘉实周一15:00 周二15:00点周二周三周二19:00,交易申请文件周三06:00,份额确认文件,申购赎回确认文件周三开始计息,周四显示收益周二19:00,交易申请文件周三03:00,份额确认文件周三10:00,申购,赎回确认文件周三开始计息,周四显示收益周二15:00 周三15:00点周三周四周三19:00,交易申请文件周四06:00,份额确认文件,申购赎回确认文件周四开始计息,周五显示收益周三19:00,交易申请文件周四03:00,份额确认文件周四10:00,申购赎回确认文件周四开始计息,周五显示收益周三15:00 周四15:00点周四周五周四19:00,交易申请文件周五06:00,份额确认文件,申购赎回确认文件周五开始计息,周六显示收益周四19:00,交易申请文件周五03:00,份额确认文件周五10:00,申购赎回确认文件周五开始计息,周六显示收益周四15:00 周五15:00点周五周一周五19:00,交易申请文件周六06:00,份额确认文件,申购赎回确认文件周一开始计息,周二显示收益周五19:00,交易申请文件周一03:00,份额确认文件,周一10:00,申购赎回确认文件周一开始计息,周二显示收益周五15:00 周六15:00点周一周二周一19:00,交易申请文件周二06:00,份额确认文件,申购赎回确认文件周二开始计息,周三显示收益周一19:00,交易申请文件周二03:00,份额确认文件周三10:00,申购赎回确认文件周二开始计息,周三显示收益周六15:00 周日15:00点周一周二周日15:00 周一15:00点周一周二所以,如果是周五15点后买的,就会很亏,到周二才能确认,周三才显示收益。如果是9月30号买的,就更亏了,8天过后,才能确认并开始计算收益。而其实周五15点前买的也很亏,不管是周六确认(华夏),还是周一确认(嘉实),都只能周一开始计算收益。华夏周六确认份额,但周一才开始计算收益的行为是不是很怪,原因是周六周日不能进行投资,如果周六日就开始计算收益,会摊薄其他人的收益,对其他人是不公平的。那为什么不周一再确认份额,因为周六确认份额也是有好处的,用户可以在周六就发起赎回了。在这点上华夏优于嘉实。1.5 对账文件介绍 当日交易申请文件(trade_apply):某天19点报送的当日交易申请文件,包含了所属日期为当日的所有申购和赎回交易,成功失败的都包括,成功表示基金公司成功受理了此笔交易,失败则相反。此文件以交易单号为唯一主键。文件由基金公司生成,报送百度。 申购确认文件:某天10点报送的申购确认文件,包含了确认日期为当日的所有申购(认购)交易。此文件以交易单号为唯一主键。文件由TA生成,报送基金公司,再由基金公司报送百度。 赎回确认文件:某天10点报送的赎回确认文件,包含了确认日期为当日的所有赎回交易。文件以交易单号为唯一主键。文件由TA生成,报送基金公司,再由基金公司报送百度。 份额确认文件:份额确认文件以用户为主键(用户,渠道,产品三要素为主键),标识了用户的目前确认的本金(可用份额字段),用户的收益(未付收益字段)。文件由TA生成,报送基金公司,再由基金公司报送百度。 分红确认文件:分红确认文件也是以用户,渠道,产品三要素为主键,标识发生结转的用户结转的金额(结转金额字段)。文件由TA生成,报送基金公司,再由基金公司报送百度。一笔交易在文件中出现的可能如下图所示。交易在当日交易申请文件中失败时,基金公司就不会把这个交易给TA,也就不会再有份额确认文件了。赎回同样如此。在份额确认文件中为什么失败交易很少,因为基金公司扣款成功后会报送TA确认份额,而很少有原因会份额确认失败。目前只有用户改名会造成TA开户失败导致份额确认失败的情况,这里不再详述。目前华夏是有上面五个文件的,而嘉实只有四个,没有分红确认文件。由历史原因造成。一开始华夏是月结转的,也就是说在一个月内,用户所有的收益都是未付收益,在月末,会提供一个分红确认文件,将用户这一个月的未付收益结转到本金,如果用户的未付收益为0,则不会发生结转,也就是不会出现在分红确认文件中。换句话说,份额确认文件的记录条数一定会大于分红确认文件。而对于嘉实的普通款产品,收益是日结转的,也就是每天都会有分红确认文件,在此我们做了合并,在份额确认文件中加了结转金额这个字段,存放用户每天的结转金额,也就是利息。后来华夏也变成了日结转,分红文件单独存在也没有必要了,但是基金公司的改动很难,所以,我们拿到文件入库后,会用一条update语句把结转表中的结转金额更新到份额表中的结转字段中。实现嘉实华夏的统一逻辑处理。1.6 清结算的处理流程铺垫了这么多,来说一下目前对于每个文件的处理流程。1.6.1 处理交易文件每天总共会处理三个交易文件,当日交易申请,申购确认,赎回确认。他们总的流程都一致:多进程从文件入库后的表里拿交易,然后根据文件中交易的状态把我们系统中的交易状态,置到其应该到的状态。总的流程如下所示:对于每个交易文件,每类交易,其应该到的状态都是不一样的。当日交易申请文件,每种交易应该对应coredb中交易的状态:文件中状态:成功文件中状态:失败T0申购成功8失败9T1申购已付款5失败9T0赎回成功13失败14T1赎回已付款12失败14交易确认文件,包括申购确认和赎回确认文件中状态:成功文件中状态:失败T0申购成功8失败9T1申购成功8失败9T0赎回成功13失败14T1赎回成功13失败141.6.2 处理份额文件份额文件用来完成给用户的结息。在我们系统中用户资产的变动是跟着交易走的,申购成功资产会增加,赎回成功资产会减少,而收益引起的本金的增加,是通过结算脚本调用结息接口完成的。具体流程也和上面的交易处理流程一致,读文件入库后的表,对每条记录,调用wm-payserver结息结转接口。fndb和coredb都会记录处理状态,保证重入。1.7 清结算从线下验证到线上运行的自动化出于以下几个方面的考虑:1) 对于交易和收益,都是以基金公司文件为准,我们无法进行充分的校验;2) 在项目上线初期,系统各个模块都有频繁的升级上线,不是处于长期稳定状态;3) 收益等金额,一旦给用户显示,将没有回退的余地。由于这些等的原因,项目初期,我们在每次作线上结算前,都会在预发布环境做一遍同样的动作,预发布环境使用的库是独立的从库,和线上保持一致,但不提供任何对外服务,所以就算错了也没关系,再重新同步就可以了。在预发布环境做完结算后,进行对账,对账没有问题后,会在线上环境处理白名单,所谓白名单,就是先结算一些我们自己账号的资产收益,结算完成,人工确认无误后,再结算所有账户。最后线上对账,对账没问题,才算完成。1.8 清结算分批次处理1.8.1 批次一,3点一开始,每天3点会处理嘉实的收益文件,现在挪到6点和华夏的统一处理,所以此批次目前不做任何操作。1.8.2 批次二,6点每个自然日,处理华夏的份额文件,嘉实的份额文件,华夏的申购确认文件。此批次完成后,用户可以看到前一日的收益!1.8.3 批次三,10点每个工作日,处理嘉实的申购确认文件。此批次将我们系统中的申购交易置到终态,并进行对账。1.8.4 批次四,19点每个工作日,处理华夏赎回确认文件,当日交易申请文件,嘉实赎回确认文件,当日交易申请文件。此批次将我们系统中的各种交易置到应该到的状态,并进行对账。赎回确认文件工作日10点就提供了,为什么要延后的19点再处理,以为赎回确认处理后,用户发起的赎回交易就到了成功状态,而10点用户的钱还没有到账,用户的钱得在15点左右才能到账,所以挪到19点处理,用户体验会比较好。2. 理财清结算的历史2.1 理财一期,V1:最复杂版本,因为我们要算一个8%,因为节假日没有文件从结算的现状中可以看到,给用户结息是个很简单的过程,把基金公司每天给的文件中的收益通过调用一个接口,写到数据库中即可。但是在最初的业务中,因为我们自己要计算给用户8%的收益,还因为基金公司周六日不会报送文件,导致了较复杂的逻辑。2.1.1 自己计算8%的收益理财一期给用户承诺的收益率是8%,但是基金公司的份额文件中给我们的收益只有不到6%,剩下的2%需要我们自己补上。在数据库中,我们记录的按照8%应得的收益,还记录了基金公司给的大约6%的收益,两者相减,就是我们要补差的部分。基金公司的收益是按照文件的值写进去的,8%的收益是我们每天自己算的。要自己算8%,就得知道每天计算收益的本金是多少,这一点要和基金公司保持一致。那么基金公司是如何计算当天本金的,有几点原则:1) 申购当日不计息:15点前申购的交易,其份额不用来计算当日收益,因为份额还没有确认。2) T1赎回当日计息:15点前T1赎回的交易,其份额也要计算当日收益,因为份额还没有确认扣除,还在本金中。3) T0赎回当日不计息:当日0点到24点的T0赎回交易,其份额不能再计算当日收益,这里要注意,T0赎回的日切点不是15点,而是0点。简单来说,计算收益的本金 = 当日确认的份额 当日(0点到24点)T0赎回的金额。不管是当时的模式,还是现在的结算模式,都是当日计算前一日的收益,所以我们要准确的知道前一日应该计算收益的本金是多少,以此为目的,设计了如下的结算流程:举一个实例,如下图:周一时,用户有本金1000,15点后用户申购了200,T1赎回了100;周二15点前申购了300,T1赎回了400,T0赎回了200;周二15点后T0赎回了500,T1赎回了300(A,B,C,D,E,F,G为交易单号)。周三18点基金公司提供的文件为:当日交易申请文件,包含F,G交易;申购确认文件,包含A,C交易;赎回确认文件,包含B,D,E文件。份额文件中用户的本金为800,未付收益基金公司提供,若发生了分红,分红文件中会有记录。周三18点,做清结算,计算用户周二的收益。具体操作如下:1) 结算准备:获取用户周一的T0赎回总金额:由于周一的T0赎回算的是0点到24点的,所以此部分金额从两个文件中获取:0点到15点的从赎回确认文件中获取,得到E赎回交易金额为200,15点到24点的从当日交易申请文件中获取,得到F交易金额为500 ,所以,周二用户总的T0赎回金额为700获取截止到周一,基金公司给用户的收益:正常来说这部分金额就在份额确认文件的未付收益字段中。但有两种情况例外,一是当发生结转的时候,未付收益结转到了本金,此时未付收益字段为0,所以需要从分红文件中获取分红金额作为截止周一用户的收益。二是当发生全赎回的时候,用户的未付收益被带走了,所以此时收益从赎回确认文件中获取,收益等于赎回确认的金额减去赎回申请的金额。份额确认文件中用户的本金为什么是800,周一时本金是1000,周二发生的交易,周三会确认,所以周三的本金=1000 +(A+C)(B+D+E)=1000+(200+300)(100+400+200)= 800,这个值是基金公司算的。2) 开始清算:调用wm-payserver接口,传入清算时间,wm-payserver做一些校验工作,如结算时间是否合法。3) T0赎回结算:调用wm-payserver赎回交易的确认接口,确认周二0点到24点的所有赎回交易,交易E,F,这时wm-payserver会在用户本金中减掉这部分赎回金额,coredb中用户本金为300=1000(E+F)=1000(200+500)4) 收益、结转清算:调用结息接口,传入用户应该计算收益的本金和基金公司给的收益。后者直接在文件中有。而用户应该计算收益的本金等于fndb中记录的用户周一的本金减去用户周二的T0赎回金额,此处为300=1000(E+F)=1000(200+500)=300。计算收益的本金wm-payserver用来做校验,如果和wm-payserver中的不一致,则出错。5) T1申购结算:调用wm-payserver申购交易的确认接口,确认交易A,C,coredb中用户的本金变为800=300+(A+C)=300+(200+300)6) T1赎回结算:调用wm-payserver赎回交易的确认接口,确认T1赎回交易B,D,coredb中用户的本金变为300=800(B+D)=800(100+400)7) 结束清算:计算当天结束后,用户的本金是多少,此部分值为基金公司给的份额确认文件中的本金减去周一15点到24点之间的T0赎回金额,即为300=800F=800500。校验coredb中用户的本金是否和fndb中的相等,此处均为300。至此,一天的清算结束。2.1.2 非工作日没有文件导致的问题华夏在上线后的两个月中,都只在工作日提供份额文件,节假日没有。我们周一拿到的份额文件中,未付收益是周五、周六、周日三天的。而我们要求用户的收益要每天连续计算,并且我们每天都要计算8%的收益。需要注意几点:1) 周六,周日,周一所有的交易所属日期都是周一2) 周五的交易确认日期是周一所以,周五,周六,周日这三天的收益不受这三天T1交易的影响,但受到这三天T0交易的影响,以下面这场景为例:周一拿到文件后,我们会结算周五的收益,并模拟结算周六、周日两天的收益,具体如下:1) 结算周五:调用开始清算;调用T0赎回确认E,F;调用结息,传入文件中的未付收益(包含了三天);调用结束清算接口。在这里不调用A,B,C,D这三笔T1申购和赎回的确认,因为这三笔不影响周五计算收益的本金2) 结算周六:调用开始清算;调用T0赎回确认H,I交易;调用结息,传入文件中给的未付收益(包含了三天);调用结束清算接口。这里也不确认T1申购和赎回3) 结算周日:调用开始清算;调用T0赎回确认H,I交易;调用结息,传入文件中给的未付收益(包含了三天);确认T1交易A,B,C,D;调用结束清算接口。需要注意的是,在碰到节假日时,每次在节假日的最后一天,才能确认上一个工作日的T1交易。在上面三步中,每一次调用结息接口,传入的未付收益都是截止周日总的未付收益。假设截至周四,未付收益是10块,每天1块,那周一给的未付收益就是13块,表示周五,周六,周日总共增加了3快。而我们传入参数时,三次都会传入13。这样会在我们系统中记录周五单天的收益是3,周六周日都是0,如果三天单独显示,用户体验很不好,所以在华夏自然日结转前,节假日的收益都是合并显示的。为了实现对节假日的模拟清算,在fndb中记录了清算时间流水表,记录每次清算的时间,如1.20号清算时,发现上次清算时间是1.16号,则判断出之前有节假日,本次需要清算的日期为1.17,1.18,1.19这三天。2.1.3 收益倒扣问题基金公司在给用户计算收益时,存在收益倒扣现象,原因是用户的收益是由TA计算的,TA只知道前一日15点前的交易,不知道15点到24点的交易。如上图所示的例子,假设1000快一天的利息是1快,基金公司计算收益的过程如下:1) TA在周二计算周一收益,本金为1000,未付收益为12) TA在周三计算周二收益,本金为900(减去周二15点前的100赎回),收益为0.9,累计未付收益变成1.9=1+0.93) TA在周四计算用户周三的收益,发现周二15点到周二24点发生了890的T0赎回,那么周二的收益应该扣除掉此890产生的收益0.89,再加上周三产生的收益0.01,所以周四给的累计未付收益变成了1.02 =1.9-0.89+0.01,反而少于周三给的累计未付收益1.9这就是收益倒扣的现象,根本原因是TA周三算收益时,基金公司还没有把周二15点到24点的交易报送给TA。TA在倒扣收益时不倒扣本金,只倒扣未付收益部分。这就是为什么全赎回只能是T1赎回的原因。若T0可以全赎,如果用户周三发起了全赎,1.9都会被用户带走,且在周三把钱打给用户,周四基金公司再想倒扣就没得扣了,只能认赔0.89。而T1发起全赎就不一样,用户周三发起T1全赎,周四才打钱,所以周四的倒扣是来得及的。目前,华夏嘉实都是日结转,未付收益马上回结转到本金,而本金是不能倒扣的,所以不存在收益倒扣的问题,碰到15点后T0赎回大量金额的,基金公司只能认赔了。2.2 理财一期,V2:结算效率的改造,从单进程到多进程第一个版本的结算脚本上线,是单进程串行处理所有的交易和用户收益,处理一天的所有数据大概需要1.5个小时,而开始时基金公司报送文件在20点左右,这样我们预发布验证加线上处理,再加对账时间,人工确认白名单的时间,大概需要5个小时,有多次都超过

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论