怎么设置一个对账系统(对账系统设计详解)(1)

第一部分:对账介绍

想必大家对“对账”这个词都不陌生,单从字面意思就能略知一二;其实就是字面意思;“对”就是核对,“账”就是账目;“对账”就是核对账目;账目核算是财务工作的必要部分,随着线上交易体量越来越大或者说对财务自动化线上化的效率提升需求越来越高;为了提升核对效率以及准确性,势必要将核对业务系统化线上化自动化;那么如何构建设计一套不同业务场景下的对账系统呢?

希望在做对账相关系统的产品同学可以参考借鉴以及交流沟通

  1. 日常生活中我们每天都在对账,比如去餐馆吃饭付款,会对老板说一声“老板,钱付过去了”;老板检查过收款或者听到语音播报后回复一声“好嘞,下次再来”;这就是最简单的一次对账

  2. 再比如你在淘宝开了一个店铺,每个月几千单的交易,发货;每次月末都拿着所有的订单明细和支付宝收款账户收款记录逐笔的做一次核对,保证发过货的订单都收到款了,这就是一次更复杂的核对了

  1. 对账概括来说就是“账证实”核对,“账”就是账目,“证”就是凭证,“实”就是实际资金

  2. 核对模式有三种:账证核对,账账核对,账实核对;确保账证实两两的一致性;比如吃了一碗面点菜单就是原始凭“证”,付了10元钱是“账”,老板电脑点菜记录小票10元是“账”,老板看到账户中余额增加了10元是“实”

  3. 财务范畴来看,证就是会计凭证,比如发票,小票,出货单,收据,交易系统的支付记录等都是原始凭证;而账呢就是财务的账目,账务系统的账务记账,金蝶的科目余额等都是不同的账目;而一笔交易会记录在很多的环节,比如账务系统,金蝶等

  4. 另外脱离财务范畴来看,其实账目本身抽象出来就是数据商品数据,用户数据,卡券数据等,那么账证实需要核对,很多时候很多非财务范畴数据也需要核对,比如今天应到10人实到8人,军训时的报数等其实也可以称为对账,我们暂且称为“广义的对账”

  5. 那么我们来为对账下一个定义:为了确保同一个事务的数据描述不同场所下的记录一致而进行的相互之间的一致性比对

  1. 首先在财务范畴,这是一个必要做的工作

  2. 另外从业务范畴,现在交易链条越来越长,数据在众多系统之间难免会出现丢失或者差错,所以为了业务的正常运转及时发现问题,需要确保系统间数据的一致性

  3. 从公司的角度,需要确保“不少收一分钱,不多付一分钱”,保证资金的安全,不然卖了多少货,收了多少钱相互之间谁也不鸟谁,最后全是糊涂账

  4. 综上所述,对账是必不可少的;对于交易体量巨大的互联网公司更是必不可少,而且系统化也是必须的,单靠人工难以满足需要

  1. 三方支付公司:主要是核对自家的交易记录和银行清算数据之间的一致性;银行清算数据(应收应付)和银行结算数据(实收实付)的一致性;同样也要核对与金蝶账务数据的一致性

  2. 电商等服务平台:主要是核对自家的交易数据和三方支付公司或者微信支付宝的清算数据的一致性;三方清算和结算的一致性;三方结算到对公户实际资金的一致性

  3. 另外还有红包:比如用户支付100元发10个红包,有6个用户领了6个一共8元,有4个超时没领退回给了用户;那么对于平台的这个红包中间账户的进出也要核对:

    { 用户充值1笔100元

    中间户入了1笔100元

    中间户出了10笔100元

    中间户被退回4笔2元

    中间户退给用户1笔2元

    这样对于中间户来说100-100 2-2=0 }

  4. 还有一些其他的领域对账,比如航司的机票,机票代理商的购票出票,中间券商的上下游之间等等

  1. 交易对账模型:数据之间的按照唯一标识进行一对一,一对多,多对多核对

  2. 资金对账模型:将交易数据按照款项类型进行汇总之后进行核对,比如收款,手续费

  3. 余额调节核对:对系统记账余额和实际资金账户余额在经过在途调整后进行一致性核对

    比如:系统记账昨日日终余额100元,截止昨日日终提现中100元;出款账户昨日日终200元;此时该账户:系统账100元=出款账户200元-100元应付未付;这样余额是平的,说明资金没有问题

  4. 其他更复杂的核对模型:比如多链条之间进行关联核对像三份数据进行一次性比对等,这里不再过多阐述;本系列文章重点介绍的是1和2,至于3会在今后有机会讲解,如果有朋友感兴趣可以单独交流

  1. 对账系统就是通过系统解决方案,对需要核对的数据按着设定好的规则进行核对校验,并产出核对结果;并且可以对核对结果进行对应的差错处理

  2. 通俗来说就是传统上用Excel来通过人工vlookup做的事情,完全交给系统去做,只需要预先配置好规则就行了

  3. 对于对账系统来说最基本应具备以下几个能力

    可以便捷的获取需要核对的原始数据,如平台数据,三方数据

    可以对文件数据进行解析或者二次加工

    可以灵活配置核对规则

    可以查看核对的结果

    可以对差异进行追踪管理和处理

    可以对外提供核对结果

    可以对外输出数据

  1. 首先就是要先明确对应的业务模型

  2. 其次需要抽象出业务的核对模型

  3. 然后针对核对模型选择合适的核对方案

  4. 最后针对核对方案设计系统方案,然后进行研发和上线

第二部分:架构图和流程图

01

标准业务架构

如果企业整体业务架构完整,系统建设完善的情况下建议对账采用该架构

怎么设置一个对账系统(对账系统设计详解)(2)

有完善的账务核心和会计核心

对账先完成交易数据和三方清算数据的核对

交易完成了账务和会计层的资金账记账

汇总清算数据和银行账单数据

完成平台资金账和银行账单的资金核对

对账系统通知账务核心银行待清算资金的结转,如下

02

简化架构

如果企业没有账务和会计核心;可以通过对账中心先时间交易数据和三方清算数据的核对;然后汇总清算数据与三方账单数据核对;保证金业务记账以及银行清结算数据的一致性

  1. 按核对频率获取业务支付数据

  2. T 1或其他频率获取三方清算文件和结算文件

  3. 将清算和结算文件进行解析存储

  4. 根据对账项目配置完成交易数据和清算的核对

  5. 完成清算数据和结算数据的核对

  6. 对交易的单边数据和资金核对差异进行管理和处理

03

伽马金融资金管理核对架构

资金管理框架的资金账和银行账核对业务架构图

该图略,课程里会介绍该体系

核心几个关键点

  1. 统一收付平台收口收款、退款、调拨等资金业务

  2. 对资金业务统一记账形成统一资金账务

  3. 对集团的资金账户进行统一管理

  4. 余额调节对账完成资金账和银行的核对勾兑

  5. 账户的余额调节表

04

伽马支付核对业务架构

伽马支付为公众号案例中心虚拟的支付公司

怎么设置一个对账系统(对账系统设计详解)(3)

05

通用对账系统架构

第一篇文章介绍过,我们可以脱离财务范畴,抽象出数据核对的通用架构,对数据逐笔准确性校验,实时监控;资金期初期末及发生额的资金校验核对;在这个理念下我们形成如下一个应用范围更广的通用架构

怎么设置一个对账系统(对账系统设计详解)(4)

第三部分:对账文件获取和解析

支付交易的通道提供方,例如微信、支付宝、网联、银联等,都是按照约定频率和时间提供交易的记录文件,一般都是2份,一个清算文件“记录支付明细”;另一个是“结算文件”记录资金账户的实际的资金变动;对于文件的获取大部分在提供通道时会提供下载接口,另外如果没有接入下载接口,可以采用人工下载的方式获得文件,将文件传到对账系统获得对账数据;下面主要介绍渠道方的对账文件获取以及解析和管理

01

对账文件类型

主流类型还是Excel和txt,本文主要介绍的也是这2种

excel(csv)

支付宝,常见支付公司;这类文件最方便查看

怎么设置一个对账系统(对账系统设计详解)(5)

txt

微信,银联个别通道,一些银行;这类文件很不便于查看

怎么设置一个对账系统(对账系统设计详解)(6)

xml报文

网联;这类文件人工很难查看和处理

其他类型

银联还有一些通道文件

02

对账文件获取方式

怎么设置一个对账系统(对账系统设计详解)(7)

怎么设置一个对账系统(对账系统设计详解)(8)

03

对账文件管理

文件管理方式

文件一般存放在对账系统指定的ftp内,并且对文件夹设定一定的命名规范,通过路径查询和下载文件

文件管理后台页面

在后台页面查看和下载文件,便于处理和排查对账问题

怎么设置一个对账系统(对账系统设计详解)(9)

04

对账文件解析器配置设计

对账文件解析是指将文件里的数据解析到数据库内,形成数据库数据,因为文件数据不能直接被系统处理

所有对账文件数据按照映射关系解析到固定的数据表当中;例如以下的表结构

核对单号支付方式交易类型金额状态支付时间

例如如下对账文件

解析规则应该

列数条件表字段名单位格式
A支付时间yyyy-MM-dd hh:mm:ss
GF=收入金额

怎么设置一个对账系统(对账系统设计详解)(10)

05

对账数据查看

数据解析到数据库里了,为了便于运营排查问题,还需要做一个查看数据的运营页面,页面样式如下

怎么设置一个对账系统(对账系统设计详解)(11)

怎么设置一个对账系统(对账系统设计详解)(12)

怎么设置一个对账系统(对账系统设计详解)(13)

怎么设置一个对账系统(对账系统设计详解)(14)

怎么设置一个对账系统(对账系统设计详解)(15)

第四部分:平台对账文件的获取和存储

01

平台对账需求获取方式

拿到三方文件账单数据以后需要与平台自己的相关数据做核对,比如平台交易数据与清算数据的核对;平台账务数据与银行账单数据的核对;平台自有数据获取方式常采用如下形式

02

数据分类管理

对账系统数据会越来越多,类型也越老越多,支付数据,卡券数据,订单数据,三方清算数据,三方结算数据等等;每类数据的数据字段有各有不同;如何对众多类型数据进行管理呢?下面介绍一个方法:对数据进行分类管理,每类数据单独设置表结构

数据分类设置

设置数据的大类,或者说是一级分类;就像商品类目一样管理数据

怎么设置一个对账系统(对账系统设计详解)(16)

设置数据类型

在数据分类下面设置数据的子类,并且数据子类关联数据库表名,便于存储数据,查询数据,对账取数

怎么设置一个对账系统(对账系统设计详解)(17)

03

取数规则配置

配置好了数据分类和类型以及关联好了数据表之后,接下来就是配置获取数据的规则了,我们以通过文件或者SQL两个可选择的形式获取数据为例

怎么设置一个对账系统(对账系统设计详解)(18)

为每个数据分类配置取数方式,如果是文件的话就配置文件路径,如果是SQL的话就配置取数sql,这样系统会按照任务配置基于取数规则定期获取对账的数据,并且插入到数据类型关联的数据表当中

数据分类以及数据表在后面的对账项目规则设置起到了非常重要的作用

第五部分:对账数据管理

对账数据

通过前几篇文章我们已经了解了什么是对账,对账外部数据和内部数的获取方式以及查看方式,除了这两类对账源数据,还有一类数据:对账结果数据;对账结果数据也需要存储和管理,以及相应的用途

01

对账结果数据

支付数据与三方清算的核对,或者其他数据的两两核对,会得出核对结果;并且每一组核对都会有一个组别的名字,这个下一节会详细介绍,比如“会员支付VS微信清算”,核对结果如下表

会员支付记录微信清算结果
流水号金额类型流水号金额类型
119.00支付单边
219.00支付219.00支付对平
319.00支付319.00支付对平
419.00支付419.00支付对平
支付519.00支付单边
619.00支付620.00支付错账

我们可以看出来“1,5,6”三条记录是有问题的,2条是一方有一方没有,另外一条是都有但金额不一致;这就是交易对账结果,“对平,单边,错账”,对于对账有问题的数据需要进行排查找出原因,并进行差错处理(后面会详细介绍)

交易对账结果是源数据本身在某个对账项目里的核对结果;而资金对账结果是某资金账号某交易日的资金收付的一致性;比较平台的资金账收付结果与银行的收付结果是否一致,或者说是银行自己本身的清算与结算的款项及金额是否一致;比如

微信清算微信结算差异
款项金额款项金额
收款100.00收款100.000
手续费0.60手续费0.600
退款50.00退款49.70-0.30
退款手续费0.30退款手续费00.3
其他其他

从对账结果我们可以看出来,微信在退款和退款手续费存在差异,而发现二者正好正负相抵,原因是微信退款和退款手续费是轧差出现在账单里的,所以实际上并没有差异,但是既然已经对出差异,并且排查出原因,就需要对差异进行处理,资金对账的差异是“长款,短款,应收未收,应付未付”;在确认对账结果后,会生成差异表,在差异表中对差异进行核销处理

02

对账管理

上面我们介绍了交易对账和资金对账的核对结果,那么如何存储差异结果呢?

差异结果可以存储在源对账数据的表中,也可以单独存储

支付数据对账结果表

与订单对:对平

与清算对:单边

第六部分:交易对账配置

对账配置化

企业业务在不断变化,新的业务也在不断出现,对账数据因为业务的变化也在发生变化;如果接入了新的支付渠道对账设置也需要新增;如果每次都通过开发实现,那么成本会很高;本篇文章我们将介绍如何实现交易对账项目的配置化设计,极大的提升对账项目的管理效率

01

交易对账项目

做对账并不是简单的一方与另一方比对;实际会基于业务情况,存在很多组进行核对;比如与微信的核对,与支付宝的核对等;每一组又可能分成更细的组,比如与微信核对,可以分成微信收款核对,微信退款核对;又可能微信收款有很多账号,我们又可能会按照微信账户进行分组进行核对;例如微信收款一共有两个微信账号:微信1,微信2;那么我们可以设置4个对账的组,如下

对账项目1:微信1-收款

对账项目2:微信1-退款

对账项目3:微信2-收款

对账项目4:微信2-退款

对账项目就是我们设定的核对组;当然以上的对账项目我们可以简化成2个

对账项目1:微信-收款

对账项目2:微信-退款

具体如何设置核对组,这个因公司而已,因喜好而已,核心目的只要能完成全量的核对即可;对账项目越少越容易管理,对账项目越多越清晰,各有利弊

02

对账项目命名

为了便于管理我们还需要为每个对账项目命个名字,如何起名这个也看自己喜好;原来在易宝支付,因为对账组的同学基本都是女生,都是吃货,所以所有对账项目都命名称跟吃相关的“如:工商9876-卤煮火烧”;命名的一个关键原则

要能从名字中看出具体核对的业务

基于这个原则我们为1中的几个项目进行命名如下

对账项目1:会员购买微信支付-收款

对账项目2:会员购买微信支付-退款

这样我们可以清晰的知道对账项目1是用户使用微信支付购买会员的收款核对项目

03

对账项目管理

一个企业可能会存在很多个对账项目,像原来在某支付,高达几百个核对项目;为了便于管理,我们就需要一个菜单专门管理对账项目;示例如下

该页面可以查看所有的对账项目;点击设置可以进行该对账项目的配置设置;右上角的新增可以新增新的项目

04

对账项目新增

在对账项目列表点击新增会有一个弹窗可以添加一个对账项目;新增时需要先填写基本信息即可,比如对账项目的名称,对账启用时间,对账的频次,对账的类型等;确定后在对账项目列表就会有一个新增的项目,点击设置即可以进入设置页面,具体看5

怎么设置一个对账系统(对账系统设计详解)(19)

05

对账项目设置

对账项目的设置主要设置对账项目的执行时间,核对双方的对应数据,核对的唯一标识,一些处理规则等;下面是一个基础的设置页面;实际工作中需要基于业务场景以及数据特点,对设置器进行一些调整;但是在这配置基础之上一般难度不大;配置页面如下

怎么设置一个对账系统(对账系统设计详解)(20)

该配置器最终的实现是

我们从页面可以看出来,该配置是设置卡系统的消耗数据与订单中的消耗记录进行核对

这样完成配置后,一个对账项目就配置完成了;会照着配置的时间每天完成订单数据和卡数据关于消耗明细的核对

未完待续......

·················END·················

不会弹吉他的算命先生不是个好产品-您好我是陈晓光,一个会弹吉他会算命的产品经理老司机,为您提供优质的产品内容和服务,(我的 陈晓光)

北京十几年,曾经是一名创业者,开过三家公司,服务过美团,糯米,借贷宝;拿过千万级融资;做了十年产品,大小厂都奋斗过

未来5年将“前十年在产品领域的所见·所学·所做·所想”分享给读者

,