电商账务系统设计方法和要点
2020-10-05 本文已影响0人
熊大锅
1. 梳理交易类型和账户结构
- 和业务侧确认各类交易流程,从中抽象出结构化的原子交易类型,需考虑正向、逆向、异常处理流程;
- 根据交易流程和类型,和业财会计确认会计科目结构,在科目下开设平台账户、用户账户,不同角色的用户,根据用户允许交易的类型(充、付、退、提),以及资金流的中间状态(待清算、待审核、待结算等),设立不同的账户。
2. 账户表字段设置
公共字段:创建时间,角色类型(平台,商户,分销商,买家),user_id,币种,余额,可用余额,冻结余额,是否实名,状态等;
付款类:是否允许付款,付款密码,限额额度
退款类:退款密码
提现类:是否允许提现,提现额度,提现账号(第三方或银行卡),授权方式(密码,手机号)
其他类:
客户账户不多时,可统一储存在一张宽表;用户账户很多时,可按科目给客户账户分表,甚至可以把热点账户单独分表。
账户余额最好每日日切记录余额快照,以方便追溯记录和对账。
3. 账户流水
和小学作文四要素“时间地点人物事件”类似,账户流水需要包含:
交易类型,交易账户,对手账户,交易金额,交易时间,业务单据号(如退款单号,在该交易类型下保持唯一),原始单据号(如订单号,根据需要判断是否保持唯一),以及其他有需要的交易要素信息;
如果需要对账,还需要加上是否对账,会计日期等字段。
3. 交易接口
- 账务系统向相关系统,按照各类交易类型,开放不同交易接口;
- 接口字段必须包括业务单据号,账务系统对此单据号维护幂等性;
- 业务方调用不同交易接口,传入交易要素字段,账务系统先需要做基本的核对,核对成功才能入账;
需校验的内容:单据是否唯一,账户是否存在且状态正常,金额是否充足,以及其他该交易类型需满足的条件。 - 校验通过后,记录账务流水。对于外部资金流入或内部资金流出类交易(充值退款提现等),记录一条流水;对于资金在内部账户流动,记录一对或者一组(偶数条)流水,更新对应账户余额。
- 记录一对或者一组流水时需保证事务性,即这一串操作需要全部成功,才算账务处理成功,否则有一个失败,则需要全部失败。
4. 对账规则
账务系统主要功能就是记录各个业务方,对账户资金的调拨,因此对账的主要目的:
- 账务系统和外部系统间的数据一致性
对于外部资金流入或内部资金流出类交易(充值退款提现等),每条流水需要和上游业务侧的业务单据,进行一对一的轧帐。单据的金额、交易账户、单据号都对得上时,账务流水可标注为已对账或对账成功。
如果账务流水少了,检查业务侧调用账务失败日志;如果账务流水多了,可能是业务方单据状态未同步,可能需要补单或更新状态。
比如账务系统订单交易入账流水,和支付系统支付单对账,或者结算系统的结算单,与账务系统分账明细流水度对账。因为都是内部系统对账,频次可以设置得比较高,比如每10分钟一次。
对于资金在内部流动的交易类型,账务系统也需要和上游系统(如结算系统入账)按照单据对账,可能是一条业务单据(如结算单)对多条账务流水(分账)对账。一对多对账时,业务单据中给到每个账户的分账金额,与出金账户出账流水核对,金额、交易账户、单据号都对得上时,账务流水可标注为已对账或对账成功。
- 账务处理时事务完整性校验
资金在平台内部账户间流动时,出金账户和入金账户都会分别记录一条流水。出金账户流水已于业务系统对账成功,入金账户流水则需要与出金账户流水对账,以保证一一对应。
如果是复式记账法,将分户流水与会计分录轧帐(记账凭证对应),同时会计分录进行平衡性对账,即可核对平衡;
如果是单边账,即只有分户流水,可以按照每种交易类型(限资金内部流动交易),取交易双方账户或科目的流水进行轧帐,交易单据、交易金额、账户编号(或uid)相同则对账成功,可将入金账户流水标注为已对账。
因为账务流水比较多,一般采取异步同步流水后,定时使用独立的对账服务器单元执行对账任务。
- 余额对账
为确保余额快照的准确性,需要将每个账户当期余额-上期余额,与当日流水轧差核对。