详解第三方支付之关于会计对账

2023-10-28 20:10

本文主要是介绍详解第三方支付之关于会计对账,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

会计学有一个很重要和很出名的公式,相信很多人都见过:

资产 = 负债 + 所有者权益 + 收入 – 费用

 

但会计学上还有另外一个比较隐蔽的公式,虽然不像上面的公式那么出名,但也经常能见到它(或者变种运用)的身影。


那就是,即期末值=期初值+期间变化值,也就是期末值=期初值+期间入-期间出。该公式非常简单,也很容易理解,并且大量的用于计算和核对两个前后时间点的会计值的关系,它明确的指出,期末这个点的值是由一系列变化而来的,变化来自两个方面:

1,存量—即期初值;

2,增量—期间变化值。

任何期末值的多少必须由这两部分变化而已,不能凭空捏造。


在账户中,我们也能够经常看到:资产账户的借方余额=期初借方余额+借方发生额-贷方发生额。

 

那么对一个账户来说,必须记录两个维度:余额和流水,余额记录的是一个时间点的值,而流水则是反映一段时间内余额变化的过程,两者应该是一致的,即余额的增减一定对应的流水入和流水出,流水入和流水出一定会引起对应余额的增减,那么,在实际的实现中,如何确保这两者是一个事务呢?我们一般会使用db的单机事务去保障。


问题来了?既然我们已经通过事务去保障两者的一致了,为啥还需要额外的会计对账呢?必要性在哪里?

 

从会计核算的角度看,虽然在具体的账户实现中,余额和流水会在一个db事务的方式进行实现,但还是有必要在会计方面对余额和流水进行二次对账核对,目的是提供一个独立的第三方核算机制,用于发现和核对资金的安全,如余额被人为修改了,如人为增加100元,虽通过db签名也能发现,但如果对应的流水没修改,则可以通过会计核对后发现该问题。那么如果对应的流水也被更改呢?那么单独对该账户的流水和余额进行会计核对(我们称为分账户核对)是无法发现问题的,会计恒等式还是成立的,那么通过进一步的总账户核算也能发现问题(即每个用户单独的余额和流水都是符合恒等式的,但加起来跟外部总账是对不上的,如对应的银行收款单,对应的商户入账账户等),会计核算系统正是需要从独立第三方核算视角,建立一整套合规的,高效和健壮的系统,从分账户,总账户等进行多个级别的核算,确保整个第三方支付系统的资金安全。

 

那么如何对账呢?按照及时性的要求,我们分为T+1和准实时的对账,下面分别介绍:


一, T+1对账

      即今天对昨天的账,是按天增量对账的一种,在日切点后,把落入日切点之前的当作昨天的账目进行汇总核算,得到昨天的一个余额,即昨日余额。


在多系统中,一个难点是日切点的统一,在传统银行IT系统中,都有一套成熟的日切系统来负责协调各个系统的日切,而对没有专门搭建日切服务的系统来说,也有一些简单的处理办法:如在业务入口点分配业务时间作为贯穿后续各个系统记账的业务基准,这样各个系统的流水均会以该业务时间为准,确保同一个时间点的流水在各个系统一定是在同一天内。另外一种方式是跨多一天核对流水,即虽然对账的是昨天的流水,但会看前天和今天的,通过业务系统进行调整,然后按照其中一个为基准,重新记账。

 

二,分钟级的准实时对账

        一种好的方法是余额字段记录一个事务流水号(流水号自增,通过流水号可以找到对应的流水),余额和流水增量对账根据流水里面的事务流水号进行核对。


        前面两种办法都存在一个困难:即由于系统余额总处于交易中,因此余额的值时刻在变化,很难捕捉某个时刻的余额,然后和流水进行核对,那为了进行从会计核算层面获得一个期初的余额值,有什么办法吗?


        方法一:帐户自动具备按天轮换的机制,这样的机制本质是以空间换时间,通过两个定时轮换的账户按天轮换来获得期初的值,该办法具有一定的操作性,但也带有较多的风险,特别是个人的账户一般只能有一个账户,是不能进行随意切换的,该办法可以用在一些中转类的账户。


        方法二:时间片倒推,比如我们在00:30 拉取00:30的流水和余额,然后把流水反向推到23:59(即流水一条条扣除直到时间点在00:00之前的流水),那么23:59对应的余额就作为期末余额。

 

        有了前面的办法,那么每天的核对其实就是在昨天的期初余额基础上,找到变动的部分,相加后得到期末余额进行核对即可(新的一天,当前的期末余额变成第二天的期初余额),类似数学归纳法一样,只要期初余额是对的,那么期末余额的准确性就是判断一天内的变动部分是否准确即可,而一天内的变动和核对是相对比较简单的。

这篇关于详解第三方支付之关于会计对账的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/295643

相关文章

Vue中动态权限到按钮的完整实现方案详解

《Vue中动态权限到按钮的完整实现方案详解》这篇文章主要为大家详细介绍了Vue如何在现有方案的基础上加入对路由的增、删、改、查权限控制,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一、数据库设计扩展1.1 修改路由表(routes)1.2 修改角色与路由权限表(role_routes)二、后端接口设计

MySQL 日期时间格式化函数 DATE_FORMAT() 的使用示例详解

《MySQL日期时间格式化函数DATE_FORMAT()的使用示例详解》`DATE_FORMAT()`是MySQL中用于格式化日期时间的函数,本文详细介绍了其语法、格式化字符串的含义以及常见日期... 目录一、DATE_FORMAT()语法二、格式化字符串详解三、常见日期时间格式组合四、业务场景五、总结一、

Qt实现发送HTTP请求的示例详解

《Qt实现发送HTTP请求的示例详解》这篇文章主要为大家详细介绍了如何通过Qt实现发送HTTP请求,文中的示例代码讲解详细,具有一定的借鉴价值,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1、添加network模块2、包含改头文件3、创建网络访问管理器4、创建接口5、创建网络请求对象6、创建一个回复对

Apache伪静态(Rewrite).htaccess文件详解与配置技巧

《Apache伪静态(Rewrite).htaccess文件详解与配置技巧》Apache伪静态(Rewrite).htaccess是一个纯文本文件,它里面存放着Apache服务器配置相关的指令,主要的... 一、.htAccess的基本作用.htaccess是一个纯文本文件,它里面存放着Apache服务器

Java中有什么工具可以进行代码反编译详解

《Java中有什么工具可以进行代码反编译详解》:本文主要介绍Java中有什么工具可以进行代码反编译的相关资,料,包括JD-GUI、CFR、Procyon、Fernflower、Javap、Byte... 目录1.JD-GUI2.CFR3.Procyon Decompiler4.Fernflower5.Jav

golang panic 函数用法示例详解

《golangpanic函数用法示例详解》在Go语言中,panic用于触发不可恢复的错误,终止函数执行并逐层向上触发defer,最终若未被recover捕获,程序会崩溃,recover用于在def... 目录1. panic 的作用2. 基本用法3. recover 的使用规则4. 错误处理建议5. 常见错

pycharm远程连接服务器运行pytorch的过程详解

《pycharm远程连接服务器运行pytorch的过程详解》:本文主要介绍在Linux环境下使用Anaconda管理不同版本的Python环境,并通过PyCharm远程连接服务器来运行PyTorc... 目录linux部署pytorch背景介绍Anaconda安装Linux安装pytorch虚拟环境安装cu

一文详解如何在Python中使用Requests库

《一文详解如何在Python中使用Requests库》:本文主要介绍如何在Python中使用Requests库的相关资料,Requests库是Python中常用的第三方库,用于简化HTTP请求的发... 目录前言1. 安装Requests库2. 发起GET请求3. 发送带有查询参数的GET请求4. 发起PO

Python进行PDF文件拆分的示例详解

《Python进行PDF文件拆分的示例详解》在日常生活中,我们常常会遇到大型的PDF文件,难以发送,将PDF拆分成多个小文件是一个实用的解决方案,下面我们就来看看如何使用Python实现PDF文件拆分... 目录使用工具将PDF按页数拆分将PDF的每一页拆分为单独的文件将PDF按指定页数拆分根据页码范围拆分

Java中的Cursor使用详解

《Java中的Cursor使用详解》本文介绍了Java中的Cursor接口及其在大数据集处理中的优势,包括逐行读取、分页处理、流控制、动态改变查询、并发控制和减少网络流量等,感兴趣的朋友一起看看吧... 最近看代码,有一段代码涉及到Cursor,感觉写法挺有意思的。注意是Cursor,而不是Consumer