电商账务系统设计方法和要点

1. 梳理交易类型和账户结构

  1. 和业务侧确认各类交易流程,从中抽象出结构化的原子交易类型,需考虑正向、逆向、异常处理流程;
  2. 根据交易流程和类型,根据我国企业会计制度要求(最新版本为2016年会计科目表),和业财会计确认会计科目结构:在科目下开设平台账户、用户账户,不同角色的用户,根据用户允许交易的类型(充、付、退、提),以及资金流的中间状态(待清算、待审核、待结算等),设立不同的账户。

2. 账户表字段设置

公共字段:创建时间,角色类型(平台,商户,分销商,买家),user_id,币种,余额,可用余额,冻结余额,是否实名,状态等;
付款类:是否允许付款,付款密码,限额额度
退款类:退款密码
提现类:是否允许提现,提现额度,提现账号(第三方或银行卡),授权方式(密码,手机号)
其他类:

客户账户不多时,可统一储存在一张宽表;用户账户很多时,可按科目给客户账户分表,甚至可以把热点账户单独分表。

账户余额最好每日日切记录余额快照,以方便追溯记录和对账。

3. 账户流水

和小学作文四要素“时间地点人物事件”类似,账户流水需要包含:
交易类型,交易账户,对手账户,交易金额,交易时间,业务单据号(如退款单号,在该交易类型下保持唯一),原始单据号(如订单号,根据需要判断是否保持唯一),以及其他有需要的交易要素信息;
如果需要对账,还需要加上是否对账,会计日期等字段。

3. 交易接口

  1. 账务系统向相关系统,按照各类交易类型,开放不同交易接口;
  2. 接口字段必须包括业务单据号,账务系统对此单据号维护幂等性;
  3. 业务方调用不同交易接口,传入交易要素字段,账务系统先需要做基本的核对,核对成功才能入账;
    需校验的内容:单据是否唯一,账户是否存在且状态正常,金额是否充足,以及其他该交易类型需满足的条件。
  4. 校验通过后,记录账务流水。对于外部资金流入或内部资金流出类交易(充值退款提现等),记录一条流水;对于资金在内部账户流动,记录一对或者一组(偶数条)流水,更新对应账户余额。
  5. 记录一对或者一组流水时需保证事务性,即这一串操作需要全部成功,才算账务处理成功,否则有一个失败,则需要全部失败。

4. 对账规则

账务系统主要功能就是记录各个业务方,对账户资金的调拨,因此对账的主要目的:

  1. 账务系统和外部系统间的数据一致性
    对于外部资金流入或内部资金流出类交易(充值退款提现等),每条流水需要和上游业务侧的业务单据,进行一对一的轧帐。单据的金额、交易账户、单据号都对得上时,账务流水可标注为已对账或对账成功。
    如果账务流水少了,检查业务侧调用账务失败日志;如果账务流水多了,可能是业务方单据状态未同步,可能需要补单或更新状态。
    比如账务系统订单交易入账流水,和支付系统支付单对账,或者结算系统的结算单,与账务系统分账明细流水度对账。因为都是内部系统对账,频次可以设置得比较高,比如每10分钟一次。

对于资金在内部流动的交易类型,账务系统也需要和上游系统(如结算系统入账)按照单据对账,可能是一条业务单据(如结算单)对多条账务流水(分账)对账。一对多对账时,业务单据中给到每个账户的分账金额,与出金账户出账流水核对,金额、交易账户、单据号都对得上时,账务流水可标注为已对账或对账成功。

  1. 账务处理时事务完整性校验
    资金在平台内部账户间流动时,出金账户和入金账户都会分别记录一条流水。出金账户流水已于业务系统对账成功,入金账户流水则需要与出金账户流水对账,以保证一一对应。
    如果是复式记账法,将分户流水与会计分录轧帐(记账凭证对应),同时会计分录进行平衡性对账,即可核对平衡;
    如果是单边账,即只有分户流水,可以按照每种交易类型(限资金内部流动交易),取交易双方账户或科目的流水进行轧帐,交易单据、交易金额、账户编号(或uid)相同则对账成功,可将入金账户流水标注为已对账。

因为账务流水比较多,一般采取异步同步流水后,定时使用独立的对账服务器单元执行对账任务。

  1. 余额对账
    为确保余额快照的准确性,需要将每个账户当期余额-上期余额,与当日流水轧差核对。

你可能感兴趣的:(电商账务系统设计方法和要点)