图解支付账务系统入门

这篇文章主要从研发的视角讲清楚:账务相关的一些基础概念,账务系统核心的职责,以及一些关键模块的设计要点。

进入正题前,先讲个小故事。

几年前一个狂风暴雨电闪雷鸣的下午,老板把负责账务系统的技术经理炒了鱿鱼,并把账务系统及对应的研发小组划到我这里,于是除了风控系统仍然在大数据团队(彼时还没有算法团队一说),整个支付系统包括收单结算、收银支付、渠道、账务等全部划归到我这里。

那时距离我进入第三方支付行业已经过去5个春秋,但我对账务的理解仍处在只知道“有借必有贷,借贷必相等”的程度。为不辜负老板的信任,也为了不让小弟们看不起,我决定认真学习账务。过了一个月,恰好重构的新支付核心上线灰度切流,发生日切不过,为校验学习成果,我身先士卒深入进去查原因,查了2天,终于......很不幸,木有查出原因,仍是依靠小弟们解决了问题。

这是我和账务系统之间的一个小插曲。

1. 前言

我在支付行业呆了十年有余,一直从事研发相关工作,从个人以及身边同事的经验看,除了从事账务系统研发的工程师外,大部分支付研发工程师对账务都了解甚少,主要原因仍然是账务系统的业务门槛往往大于技术门槛,比如很多支付研发工程师甚至不了解复式记账。所以有必要从研发工程师的角度来介绍一些账务系统入门的知识。

需要说明的是,不同支付公司内部设计的账务系统必然存在差异,但有些基本原则大家都会遵守,比如复式记账、账户管理、记账、对账、会计中心、日切等。本次只谈这些公共的内容,大家可以结合各自公司的系统实现或内部文档辩证地看。

需要说明的是,纯概念或术语不好理解,所以我会把相关的概念融合到示例中去讲,但里面夹杂了很多我个人的理解,可能和专业的教科书存在部分描述不一致的情况。

2. 复式记账理论简要介绍

账务系统的理论基础是复式记账法。如果对于复式记账没有任何了解,建议先找网上一些公开的优秀资料先做初步的学习。

整理了一份面试笔记包括了:Java面试、Spring、JVM、MyBatis、Redis、MySQL、并发编程、微服务、Linux、Springboot、SpringCloud、MQ、Kafka 面试专题

需要全套面试笔记的【点击此处即可】即可免费获取

如果能看懂下面的场景描述,说明已经掌握了复式记账的初步知识。

以用户通过支付平台使用招商银行CMB支付500块为例做个简要说明。

假设:支付平台同样使用CMB做为收单行,在CMB开设有备付金账户。

涉及的支付平台内部账户:

账户类型账户备注
借记账户应收-渠道-CMB简单判断账户类型的方法:恒等式一:资产=负债+所有者权益恒等式二:利润=收入-费用恒等式三:资产+费用=负债+所有者权益+收入左边的【资产】、【费用】是借记类账户,右边的【负债】、【所有者权益】、【收入】是贷记类账户。
贷记账户应付-过渡-网关过渡户应付-平台托管-商户待结算应付-平台托管-商户余额手续费收入-商户-消费

记账步骤(只以支付成功并结算到商户余额做示例,渠道清算相关记账后面讲):

阶段操作账户金额
第一步资金从渠道到网关过渡户借:应收-渠道-CMB贷:应付-过渡-网关过渡户500
第二步扣除手续费借:应付-过渡-网关过渡户贷:手续费收入-商户-消费10
第三步网关过渡户到商户待结算账户借:应付-过渡-网关过渡户贷:应付-平台托管-商户待结算490
第四步结算给商户借:应付-平台托管-商户待结算贷:应付-平台托管-商户余额490

说明:

  1. 支付系统的记账一定是复式记账法。内部开设了很多账户和科目。

【借记类】账户:资产,应收款等;

【贷记类】账户:负债,所有者权益,应付款等;

  1. 借贷方向简要公式(不太严谨,但是够用):

【借记类】账户(如资产,应收款),【增加】为【借】,【减少】为【贷】;

【贷记类】账户(如负债和所有者权益,应付款),【增加】为【贷】,【减少】为【借】;

  1. 复式记账的专业术语很多,这里只摘录几个重要的说明:

复式记账法定义:对每项经济业务按相等的金额在两个或两个以上有关账户中同时进行登记的方法。

记账原则:有借必有贷,借贷必相等。

记账依据:会计恒等式:1. 资产 = 负债 + 所有者权益;2. 利润 = 收入 - 费用。

账户:具有一定格式和结构,能够用来连续、系统、全面的记录反映某种经济业务的增减变化及其结果。

科目:同类财务交易的分类,比如资产、负债、所有者权限、收入或费用等都属于科目。一般科目会分为多级。

账户和科目的区别:科目只有名字,账户包括结构和格式,每个账户对应一个特定的科目。

3. 账务系统产品架构图

拆解记账之前,我们先看一个典型的账务系统具备哪些产品能力。

账务系统一般说来需要负责管理账户、余额、记账、对账、清结算、会计核算、报表等能力。大致如下:

后面单独再开文章详细介绍设计思路。

4. 从最基本的支付说起

我们以最典型的电商购物举个例子(只是举例):小明使用PayPal在拼多多电商(海外)通过多多钱包(海外)支付了50美金。

经过简化后的交互图如下:

说明:

  1. 持牌的第三方支付机构和电商是独立的法律主体,所以多多钱包和多多电商是互相独立的,需要走独立的结算。
  2. 为突出重点,中间省略了很多中间机构,比如花旗通过清算网络才能转账到汇丰,清算网络先略过。
  3. 为简化描述,还有几个假设:
    1. 假设拼多多电商选择结算到银行卡。还有一个场景是电商选择结算到余额,然后自己手动提现。
    2. 假设单币种场景,跨币种场景还涉及到外汇兑换。

下面我们针对这个典型场景做进一步的细化来讲解账务相关的概念。

5. 记账全流程

5.1. 支付记账完整顺序图

说明:

  1. 图中只画了正常场景,像明细对账出现差异(长短款)、账单对不平(渠道少打款或多打款)等场景没有画出来。
  2. 日切相关的在后面单独说明。
  3. 给商户结算也在后面单独说明。
  4. 记账方案也会在后面单独说明。

上面只写了顺序,为更清楚描述各系统的参与,下面单独再拆解几个核心步骤,并加渠道网关、支付引擎等子系统的交互。

5.2. 渠道扣款成功

说明:

  1. 对账中心监听渠道网关的消息,注册我方流水,用于后续和渠道的对账。
  2. 账务中心记账:DR:应收-渠道待清算,CR:应付-网关过渡户。因为现在有可能收单域的订单已经被关闭,所以这里还不能直接【CR:应付-商户待结算】。
  3. 每条记账明细都会对应记录一条会计分录。

5.3. 收单订单推进成功

说明:

  1. 收单成功后,需要把手续费扣出来。

5.4. 明细对账

说明:

  1. 渠道本身也会收手续费,还可能帮政府代收税费,实际应清算金额=支付金额-渠道手续费-税费。

5.5. 账单对账

说明:

  1. 账单对账和明细对账不一样的地方在于,明细对账是支付渠道PayPal给的清算文件,账单对账是备付金银行收到支付渠道打款后给出的账单文件。
  2. 在记账模块先是记银行头寸的账(收到银行账单,说明钱已经到账),再记应清算的账。
  3. 有些场景没有穷举说明,比如渠道应清算49.50USD,实际只到账40USD,这时仍有9.50USD属于应清算。

5.6. 结算打款

说明:

  1. 上述是商户结算到卡场景。
  2. 各公司的内部户编制可能有所不同。

6. 其它重要知识点

6.1. 账户

在账务系统中,通常包含以下几种账户类型:

  1. 客户账户:对客可见。包括:对私的个人客户账户,对公的商户账户。
  2. 内部账户:对客不可见。包括:头寸、手续费收入、过渡户(也称中间户)等。

6.2. 实时记账与缓冲记账

一般来说,客户账户的记账需要是实时的,比如用户充值、提现,商家提现,用户退款等。

这些账户如果不做实时记账,一来有损用户体验,二来有资损风险。比如用户充值100块,如果延时不到账,用户可能会投诉。如果提现不实时记账,用户有可能重复提现成功。如果退款不实时记账,有可能在退款场景下被透支。

假设记账需要30ms,一个账户最高也就只支持30多TPS的记账请求,对于一些高并发的账户(也称为热点账户)一定是性能不足的。这个时间可以使用缓冲记账,以提高性能。开通缓冲记账的,通常是内部账户或允许商户透支的流出场景。

缓冲记账通常就是先记录流水,然后起定时任务去捞取流水,汇总后进行记账。前提是一定要做好资损防控。

除了缓冲记账外,还有拆分账户的方式来解决热点账户问题。

6.3. 记账方向

说明:

  1. 账户类型与借贷方向,相同为加,相异为减,也就是所谓的:DD+,DC-,CC+,CD-。
  2. 示例:用户提现100元,记账如下:

DR:用户余额(负债类账户)100

CR:提现过渡户(负债类账户)100

6.4. 会计科目与会计分录

会计科目与账户、会计分录的关系如下:

说明:

  1. 科目有多级科目,所以有个自关联。
  2. 账户分为客户账户和内部账户,二者的结构有一些小的区别,比如内部账户一般不会被冻结,但是客户账户可以被冻结。

会计科目示例:

说明:

  1. 一般支付系统使用三级科目就已经足够。部分特别复杂的系统,可能会用到五级科目。
  2. 为便于理解,上面的示例做了很大的精简,各公司内部对科目的编制差异可能会比较大。

下面是一个典型的支付系统会计科目的部分截图示例。

6.5. 记账方案

有了账户和会计科目,发生一笔交易时,如何让系统自动去记账?这个是记账方案做的事。其中一个解决方案就是给不同的交易场景制定不同的交易码,通过交易码来驱动记账。

下面是一个典型的支付系统的记账方案示例(部分截图)。

6.6. 会计日与日切

会计日,也称为会计结算日或账务结算日,是支付平台在会计周期中进行账务处理和结算的特定日期。比如在分布式环境下,各机器可能存在时间差,一笔交易在零点时有可能跨天处理,如何判断一笔交易归属于哪天,就依据会计日来计算。

所谓日切,简单理解就是切换到下一个会计日。主要做的工作:

  1. 借贷试算平衡。
  2. 父子科目试算平衡。
  3. 总账试算平衡。
  4. 日、月、季度、年汇总。
  5. 会计日变更。

日切试算平衡核心逻辑:

  1. 借方发生额 = 贷方发生额
  2. 借方余额 = 贷方余额
  3. 期末余额 = 期初发生额 + 发生额
  4. 父科目累积额 = 子科目累积额

6.7. 三层对账体系

第一层是信息流对账。我方流水和银行清算文件的流水逐一核对。可能会存在长短款情况。

第二层是账单对账。就是把我方流水汇总生成我方账单,然后把银行流水汇总生成银行账单,进行对账。可能会存在银行账单和我方账单不一致的情况,比如共支付100万,渠道分2次打款,一笔98万,一笔2万。

第三层是账实对账。就是我方内部记录的银行头寸和银行真实的余额是否一致。可能存在我方记录的头寸是220万,但是银行实际余额只有200万的情况。

6.8. 记账服务与会计中心简要关系

为便于理解,这里做了极简化处理。

记账服务负责记账,主要关注账户余额变动等;会计中心负责会计核算,主要关注点在于会计分录、科目汇总、会计报表等。实际情况会比这个复杂。

7. 结束语

账务子系统负责为支付平台管理所有资金,是支付平台最核心的子系统之一。相关会计报表是公司经营决策的依据,也是合规申报相关报表的基础。理解账务子系统的核心概念,能帮助我们构建一个完整的支付系统设计与实现的理论基础。本文从研发工程师的视角,介绍了账务子系统一些最核心的概念,希望能为大家在学习账务系统相关知识时能提供一些有益的参考。

这是《百图解码支付系统设计与实现》专栏系列文章中的第(35)篇。 欢迎和我一起深入解码支付系统的方方面面。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/753835.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Android 14 独立编译 Setting apk

我们在setting 目录下是用 mm 会报错。 所以应该在 源码主目录 采用 make Settings 进行编译 很多时候如果在apk 目录下 mm 单独编译会出错, 都可以才用这种方式进行编译。

Electron录制应用-打包静态文件问题【命令行ffmpeg导不出视频】

问题描述 在开发环境下,所有功能都运行正常,但一旦进行打包并运行生产环境的版本,导出mp4视频的功能就失效了。没有文件生成,也没有任何错误提示。 排查问题 为了找到问题的根源,我首先决定通过日志来追踪。我使用了winston和winston-daily-rotate-file这两个强大的日志…

招聘,短信与您:招聘人员完整指南

招聘人员面临的最大挑战之一就是沟通和联系候选人。为何?我们可以从以下原因开始:候选人通常被太多的招聘人员包围,试图联系他们,这使得你很难吸引他们的注意。在招聘过程的不同阶段,根据不同的工作量,让申请人保持最…

HBuilder X 小白日记01

1.创建项目 2.右击项目&#xff0c;可创建html文件 3.保存CtrlS&#xff0c;运行一下 我们写的内容&#xff0c;一般是写在body里面 注释的快捷键&#xff1a;Ctrl/ h标签 <h1> 定义重要等级最高的(最大)的标题。<h6> 定义最小的标题。 H标签起侧重、强调的作用…

【R语言】plot输出窗口大小的控制

如果需要输出png格式的图片并设置dpi&#xff0c;可采用以下代码 png("A1.png",width 10.09, height 10.35, units "in",res 300) 为了匹配对应的窗口大小&#xff0c;在输出的时候保持宽度和高度一致即可&#xff0c;步骤如下&#xff1a; 如上的“10…

vue2axios的使用

1.安装axios npm i axios 2.配置代理服务器 1.在config.js中配置单个代理服务器 // 开启代理服务器 需要重新启动项目devServer: {proxy: http://localhost:5000}配置简单&#xff0c;请求资源时直接发给前端&#xff08;8080&#xff09;即可&#xff1b;但不能配置多个代理…

11.常见的Transforms(二)

常见的Transforms&#xff08;二&#xff09; 1.Resize() 的使用 1.1 作用 resize可以把输入的图片按照输入的参数值重新设定大小。 1.2 所需参数 需要输入想要重新设定的图片大小。 输入的参数类型可以为包含长和宽数值的一个序列&#xff08;h,w&#xff09;或者一个整…

css做旋转星球可举一反三

<!DOCTYPE html> <html lang"en"><head> <meta charset"UTF-8" /> <title>旋转的星球</title> <style type"text/css">.box {/*position: relative;*/position: absolute;width: 139px;height: 139p…

ASUS/华硕幻13 2022 GV301R系列 原厂Windows11系统

安装后恢复到您开箱的体验界面&#xff0c;带原机所有驱动和软件&#xff0c;包括myasus mcafee office 奥创等。 最适合您电脑的系统&#xff0c;经厂家手调试最佳状态&#xff0c;性能与功耗直接拉满&#xff0c;体验最原汁原味的系统。 原厂系统下载网址&#xff1a;http:…

pdf合并,这三种方法学会了吗?

在信息爆炸的时代&#xff0c;PDF文档凭借其跨平台、不易修改的特性&#xff0c;成为了我们工作和学习中不可或缺的一部分。然而&#xff0c;当面对多个PDF文件需要合并成一个完整的文档时&#xff0c;许多人可能会感到头疼。今天&#xff0c;就让我们一起来探讨三种高效的PDF合…

【python】socket通信代码解析

目录 一、socket通信原理 1.1 服务器端 1.2 客户端 二、socket通信主要应用场景 2.1 简单的服务器和客户端通信 2.2 并发服务器 2.3 UDP通信 2.4 文件传输 2.5 HTTP服务器 2.6 邮件发送与接收 2.7 FTP客户端 2.8 P2P文件共享 2.9 网络游戏 三、python中Socket编…

戴尔md3400存储控制器脱机故障 电池故障处理

看了一下网上关于DELL MD系列存储故障处理的文档还是比较少的&#xff0c;最近处理了一些关于MD系列存储的问题&#xff0c;稍微整理整理就分享一下&#xff0c;各位喜欢摸索的朋友可以稍稍做些参考&#xff0c;当然如果想寻求外援的也可以快速的找到合适的人。以便安全又快捷的…

SBTI(科学碳目标)认证是什么?

SBTI认证&#xff0c;全称为“科学基础目标设置倡议”&#xff08;Science-Based Targets initiative&#xff09;认证&#xff0c;是一种广泛认可的企业可持续发展标准。以下是关于SBTI认证的详细解释&#xff1a; 一、认证目标 SBTI认证旨在推动企业采取可持续的经营实践&a…

Android进阶之路 - DialogFragment有没有了解的必要?

几个月前写到了弹框业务&#xff0c;以前经常用Dialog、ButtomDialog 、popupWindow 组件&#xff0c;为了契合项目结构参考了原有的 DialogFragment 组件&#xff0c;特此予以记录 我一般在项目中写弹框组件的话&#xff0c;主要用到 alertDialog、popupWindow 组件&#xff0…

S32K3 工具篇2:如何在S32DS中使用Segger JLINK下载

S32K3 工具篇2&#xff1a;如何在S32DS中使用Segger JLINK下载 一&#xff0c; S32DS中JLINK下载1.1 Segger JLINK 驱动1.2 S32DS JLINK驱动路径配置1.3 S32DS JLINK debug configuration1.4 S32DS JLINK debug S32K3板子结果 二&#xff0c; JLINK驱动实现S32K344代码下载2.1 …

【Sublime】Sublime Text 中运行终端

Sublime Text 本身并不是一个终端仿真器&#xff0c;可以使用插件来在 Sublime Text 中集成终端功能。最常用的插件之一是“Terminal”。 使用“Terminal”插件在 Sublime Text 中启动终端 以下是安装和使用该插件的步骤&#xff1a; 安装 Package Control&#xff1a; 如果你…

【IJCAI2024】LeMeViT: Efficient Vision Transformer with Learnable Meta Tokens

【IJCAI2024】LeMeViT: Efficient Vision Transformer with Learnable Meta Tokens for Remote Sensing Image Interpretation 论文&#xff1a;https://arxiv.org/abs/2405.09789 代码&#xff1a;https://github.com/ViTAE-Transformer/LeMeViT 由于相邻像素和图像块之间的高…

Thermo Fisher Scientific赛默飞检测扫描架IPC电路板维修WAH402290

美国Thermo Fisher赛默飞世尔光谱仪IS10 IS5光谱仪主板维修iCAP6000/iCAP7000/iCAP7400&#xff1b;热电质朴分析仪电路板维修 公司仪器维修设备备有三相交流电源,变频电源&#xff0c;无油空压气源&#xff0c;标准化的维修平台、电子负载&#xff0c;耐压测试仪、老化台车和各…

云动态摘要 2024-06-28

给您带来云厂商的最新动态&#xff0c;最新产品资讯和最新优惠更新。 最新优惠与活动 [新客专享]WeData 限时特惠 腾讯云 2024-06-21 数据分类分级管理&#xff0c;构建数据安全屏障 &#xff0c;仅需9.9元&#xff01; 云服务器ECS试用产品续用 阿里云 2024-04-14 云服务器…

量化投资 日周月报 2024-06-28

文章 深度学习在量化交易中的应用:在BigQuant量化交易平台的文章中,探讨了深度学习在量化交易中,特别是在因子挖掘方面的应用。文章提到,随着传统线性模型的潜力逐渐枯竭,非线性模型逐渐成为量化交易的主要探索方向。深度学习因其对非线性关系的拟合能力,在量化交易中展现…