财务系统设计--简析

导读:本文将通过一个交易平台的案例来简析财务系统的设计。通过为什么要设计财务系统、财务系统需求分析、设计方案以及如何保证账务信息一致性四大节进行分析。

1.为什么要设计财务系统?

为了提供给用户一个更加便利的交易体验,交易系统需要添加线上交易的功能,让会员用户可以直接在线上完成货款支付、手续费扣款等操作,从而代替旧有的线下交易模式。为了实现让用户在线上直接完成银行账户间的资金划转等操作,则需要系统与银行系统进行对接。通过与多家银行取得联系和探讨后发现不同银行之间交互方式差异明显,如果把交易系统和银行系统硬编码直接关联则会变得复杂和难以维护。所以决定设计一个模块用于处理不同银行间调用问题和银行系统与交易系统间的协调处理,同时这个模块还需要考虑系统性能、操作安全等问题,让交易代码与银行解耦,实现业务分离,这个模块就是财务系统。

2.财务系统需求分析:

对于财务系统的需求主要为以下三点:

2.1.需要记录各个账户的资金状况并且提供实时的查询接口

由于系统要求实时反映会员的资金情况,这样会员才可以根据自己的资金状况计划交易活动。但是系统不能每次在会员查询资金状况时都与银行系统交互。第一,与银行交互采用的是socket专线报文接收发送的方式,如果网络问题波动没有接收或响应则会降低了服务的稳定性。其次,会员查询资金信息需要通过财务模块调用银行后再逐步返回结果,过程中花费的时间也比较多,大量的操作会给财务模块带来压力。

解决方案:财务系统内也维护一套账户数据,会员查询信息则查询本地即可,不需要与银行交互。账务规定在每天约定时间与银行进行对账,保持账户数据信息的一致性。

2.2.需要为资金流转提供担保服务

买卖经常会出现些问题如:买方先付款还是卖方先发货、在交易的过程中如果卖方货已发出但是买方违约该如何处理等。

解决方案:在交易开始前将买方要支付的资金冻结起来,在交易成功之后支付费用或者失败之后解冻金额。

2.3.需要记录系统上所有资金变动,并提供查询接口

会员需要查询自己做过什么操作如什么时候转了钱、数额多少、接受方是谁等。

解决方案:与上述一样直接通过查询财务系统内部记的一套账户数据,而不需要直接调用银行。

3.如何设计财务系统

通过对以上的需求进行分析后可归纳需要定制以下四个方案,下面逐一细讲

  • 一套为资金流转提供担保的方案
  • 一套可以与多个银行系统进行交互的系统架构方案
  • 一套实时记录所有账户资金状况的方案
  • 一套记录所有资金信息变动的方案

3.1提供担保方案

经过讨论后有两种担保方案,方案一:是将货款先冻结到平台中,这时候便是归平台所有,平台则需要有一个担保户临时存放货款。方案二:将货款冻结到会员自己账户下,这时候依然归属于会员,但是直到交易结束钱这笔钱将处于冻结状态不能被使用。

3.2提供银行服务方案

财务系统和银行系统选择通过socket向银行服务发送报文,银行返回响应报文。为了各个系统之间服务调用的安全性,用户发起的资金操作需要通过中盾密钥安全校验模块来防止冒充用户进行非法操作等情况。而且与不同银行数据交互有不同的方案,主要包括报文加密等。另外与银行交互都是在专线上进行,进一步提高了数据传输的安全性。

3.3实时记录所有账户资金状况的方案

其实不妨想一想,平时去银行存钱的时候,银行是怎么记录每个人存了多少钱,银行给每个来存钱的人都开了一个账户,然后将存进去的钱记在这个账户下,其实这些概念都是相似的。那么在平台上我可以给每个实体都设置一个户。经过讨论分析后设计出以下这些户:

户的类型

3.4记录资金变动方案

对于每一个户的资金变动,都用一份账来保存资金操作的信息,称为流水账。用一份账来保存资金变动信息,称为明细账。两份账的记录通过流水号进行关联,流水账记录下请求数据、响应数据,向银行发送的请求数据,以及银行返回给我们的数据。明细账记录着资金操作的金额,操作之后受影响的各个账户的余额,还有借贷标记以及记账日期等。

流水账和财务账

3.5 财务资金流图

这里为了让大家更好的了解户与户之间的关系以及资金流动的方式,则以图的形式展示了资金的流动。首先我们先来熟悉几个名词:

  • 出金和入金:以“监管账户”银行卡(大长方体)为中心,出金表示将钱转入到外部银行卡里,入金表示外部银行卡将钱转入到“监管账户”银行卡中。
  • 实户和虚户:实户指的是实际存在的银行卡账户,虚户指的是在实体行卡内抽象划分的户,这些都是实际不存在的虚拟户,作用是为了有效明确地区分监管账户里的钱。
  • 外部银行卡:企业办理的实体银行卡,用于金钱的转入转出。

财务资金流图解析

财务资金流转图

图的基础解析

  • 图中大长方体称为“监管账户”,是一张对接银行给平台提供的实体银行卡。银行卡里划分为利息户、收入户、暂挂户和多个会员子账户,这些都是实际不存在的虚拟户,作用是为了有效明确地区分监管账户里的钱。
  • 自有资金账户是一张实体银行卡,该卡归平台所有,用于存储平台的收益。
  • 钱在实户-虚户、虚户-虚户之间随着箭头流动产生了出了不同的金钱操作,具体操作解析在下文配合图中序号列出。
  • 在大长方体“监管账户”里,钱在虚拟户之间的任意流动,“监管账户”这张银行卡的总额保持不变。

图的资金操作解析

  1. 会员入金:将会员绑定的银行卡金额入到绑定了该卡的会员虚拟子账户里。
  2. 会员出金提现:将会员子账户的金额提现到该账户绑定的银行卡里。
  3. 暂挂户入金:没有绑定会员子账户的银行卡入金到户里,钱则被暂存于暂挂户中,等后续人工手动进行处理如(清分和退回)。
  4. 暂挂户退回:将被存入暂挂户资金操作里的资金退回到原先入金的卡中。
  5. 暂挂户清分:将暂挂户的资金清分到指定会员虚拟子账户里。
  6. 利息入金: 银行定期将平台获取的利息存入到利息户中。
  7. 利息户提现:将利息户的钱转到平台自有资金账户里。
  8. 收入户提现:将收入户的钱转到平台自有资金账户里。
  9. 扣款: 会员在交易期间发生的一些扣款如手续费扣除等,扣除的金额均入到收入户中。
  10. 会员间划转:指会员虚拟子账户间因发生交易而导致钱在两个户之间的流动。

4.如何保证账户信息一致性

对于每一笔资金操作都会调用银行接口,银行端对每一笔资金也操作也需要记账。也就是说同一套数据,银行端和财务端本地各自记各自的账。那么就会出现两边账户信息一致性问题:如错账要如何及时发现和处理等

解决方案:通过对账和预对账来解决。在指定的时间点检查自身账是否有错账以及跟银行进行对账就是对账模块的主要功能。一旦发现错账就需要人工介入进行分析和处理,出现错账的原因有很多,需要谨慎处理。常见的处理方式有冲账、抹账等。

发表评论
留言与评论(共有 0 条评论)
   
验证码:

相关文章

推荐文章

'); })();