账务系统的学习总结
在支付公司,总是涉及到钱,不管是出金还是入金,出金在产品形态上是代付的概念,具体的场景是用户提现余额到银行卡,或者薪资代发等.入金在产品形态上就是快捷支付,协议扣款,具体的场景比如付打车款.这是针对的具体的业务层面,而对支付公司来讲,如何把这些出入的资金管理起来,保证备付金账户的钱出入无误,商户的钱结算准确,就需要一整套系统来管理维护,账户系统就是来实现资金管理的重要部分.
记账的理论
账户系统的核心就是记账(记账就是业务发生后,将其记录在账户中,为了更好的掌握资金的来源与去向),既然是记账,那必然设计到复式记账(有借有贷,借贷相等)还有单式记账(单边账),两种方式都是可以实现记账,在系统实现时两种方式各有利弊
先说一下两种记账方式的方法
单式记账法:
- 记账手续简便
- 只反映经历业务的一个侧面,不能全面系统的反映经济业务.
复试记账法:
- 对经历业务进行相互联系的双重登记,能够反映经济活动全貌.
- 能够根据会计等式的平衡关系,检查账户记录的正确性.
复试记账是更加科学的一种记账方式.
复式记账法账户系统的基本原理:借贷平衡,有进有出。
账户系统恒等式:
- 资产类账户余额 = 负债类账户余额 + 公共类账户余额。
- 资产类账户余额 = 信用账户 + 借款账户(用户欠款合计) = 应收账款合计
- 负债类账户余额 = 现金类账户余额 = 预收 + 应付账款合计
- 公共类账户 = 渠道账户 + 收益类账户 + 优惠券账户等。(一般不和用户相关都设置成公共账户,余额可为负,非公共账户余额不可为负)。
系统设计和实现
系统分为三个模块,分别是
- 账户核心,用于实时的记账操作,记账的操作由业务驱动账务完成业务记账.
- 对账模块,内部对账,这是后续账账核对和账实核对的基础,也是对外对账的基础。
- 日终核对,进行平衡检查,保证账务系统数据的一致与准确,生成总账。
在系统设计的时候,为了系统的性能会进行系统模块的拆分,拆分为 支付记账和会计记账.
支付记账
支付记账是在支付流程中完成的,目的是让用户完成购买后,能够立即看到支付结果和账户余额。为了提升性能,支付记账一般采用单边账的形式,即将会计分录登记在用户侧或者商户侧。
会计记账
会计记账采用复式记账,不同业务记账方式也不一样。
表设计
账户核心设计(日间)
账户信息表
记录账户的余额.
分为:用户账户,商户账户,内部分户,贷款分户.
重点字段:
账户号 | OID_ACCTNO | NUMBER(15) |
---|---|---|
记账类型 | TYPE_ACCTLOG | VARCHAR2(1) |
资金余额 | AMT_BALCUR | NUMBER(20) |
可用余额 | AMT_BALAVAL | NUMBER(20) |
冻结金额 | AMT_BALFRZ | NUMBER(20) |
上期资金余额 | AMT_LASTBAL | NUMBER(20) |
上期可用余额 | AMT_LASTAVAL | NUMBER(20) |
上期冻结余额 | AMT_LASTFRZ | NUMBER(20) |
开户时间 | DATE_OPEN | DATE |
余额变动账务日期 | DATE_ACCT_LAST | VARCHAR2(8) |
客户ID | USER_NO | VARCHAR2(32) |
账户明细表
记录每个账户对应余额的变化
重点字段:
表名 | TA_ACCT_BAL_BILL | |
---|---|---|
字段中文名 | 字段名 | 字段类型 |
资金流水号 | JNO_ACCT | VARCHAR2(20) |
账务日期 | DATE_ACCT | VARCHAR2(8) |
记账类型 | TYPE_ACCTLOG | VARCHAR2(1) |
交易状态 | STAT_TRANS | VARCHAR2(1) |
账户号 | OID_ACCTNO | VARCHAR2(15) |
交易单号 | OID_BILLNO | VARCHAR2(16) |
交易单日期时间 | DT_BILLTRANS | DATE |
交易单类型 | TYPE_BILL | VARCHAR2(2) |
外部订单号 | JNO_CLI | VARCHAR2(64) |
渠道代码 | OID_CHNL | VARCHAR2(2) |
业务类型 | OID_BIZ | VARCHAR2(6) |
流水创建时间 | DT_SYS | TIMESTAMP |
金额 | AMOUNT | NUMBER(20) |
交易后余额 | AMT_BAL | NUMBER(20) |
出帐帐号 | DEBIT_ACCT | VARCHAR2(15) |
账户冻结解冻单据表
为了记录账户冻结余额与订单的关联关系,根据业务场景来确定是否需要.
支付公司里主要针对需要提前预冻结的交易,比如:代付成功前,先把用户账户的钱冻结,成功后在解冻出账.
退款流水表
根据业务场景来确定是否需要本记录表,非必须.
日终核对
账户日终余额表
总账 科目总账,分为日总账和周期总账,日总账每日生成,周期总账月末、季末、半年末、年末生成,记录每个科目的期末余额和本期借、贷发生额。
主要记录登记每日的账户日终余额,用于后续的核对记录.
重点字段:
账期,机构码,科目号
上期借方余额,上期贷方余额
本期借方发生额,本期贷方发生额
期末借方余额,期末贷方余额
待结转金额表
非必须为了实现某些业务场景,比如账户分为在途账户和结算账户(可直接提现).
系统实现功能
日间功能(账户核心实时模块)
业务驱动账务完成业务记账,账务系统根据不同的业务场景,划分不同的交易码,设置分录规则,拆分录、改余额。实现功能
- 出入账功能.
入账,出账,出入账.
2. 账户管理.
创建,修改,查询
3. 冻结功能
冻结,入账冻结,出账入账冻结,解冻,解冻出账
内部对账:
是后续账账核对和账实核对的基础,也是对外对账的基础。
- 核实账户系统中的账务与支付记录的一致性;
- 核实会计系统中的账务与支付记录的一致性。
两个对账任务一般是在后台定时运行(5分钟运行一次),除非系统有bug或者发生故障,内部对账一般不会出现差错。如有差错,也需要人工处理。
日终模块
日终,进行平衡检查,保证账务系统数据的一致与准确,生成总账。日终主要进行如下处理
- 生成总账.
- 总账平衡检查.
恒等式在系统中的应用
- 定时检查账户系统余额是否恒等,检查是否存在单边入账,人工调整余额等不正常现象发生。
- 正常业务的异常情况的预警
- 内部风控的检查
举例:
一条交易记录 收付款方,只有收款方的余额账户增加了,但是付款方余额账户没有减少,付款方就可与多提现。
内部有权限的的员工更改数据库额余额账户金额,偷偷提现
对账
对账是在结转会计期间的账簿记录前,对账簿和账户所记录的有关数据加以检查和核对,保证账簿记录真实可靠。
在会计上,对账分三个部分:账证核对、账账核对和账实核对,做到账证相符、账账相符和账实相符。
账证核对
是将账簿记录与记账凭证进行核对,这里是记账凭证是指日常经济活动的书面证明。如果还是用记账 APP 来类别的话,我们超市购物的小票、购买商品的发票、银行卡的收款转账记录,都是记账凭证。
对应实际的业务场景:
电商平台: 电商平台自身的交易订单,支付渠道提供对账单。
支付公司: 支付公司的支付订单,与支付渠道(银联,网联)对账单.
账账核对
是把有相互关系的多个账簿记录进行核对。有相互关系的账簿记录,包括总分类账簿间核对,明细账簿间核对等多种类型。例如:我们使用记账 APP 时,整个家庭的日常开销和购物、教育、交通等分类开销的核对,是总分类账簿间核对;核对银行卡取现记录和日常现金支出记录,是明细账簿间核对。
完成渠道对账后,需要进行日结和试算平衡:
- 总分类账各账户本期借方发生额合计与贷方余额合计是否相等;
- 总分类账各账户借方余额合计与贷方发生额合计是否相符;
- 核对各种明细账及现金、银行存款日记账的本期发生额及期末余额同总分类账中有关账户的余额是否相等。
从科目维度,计算:
- 科目期初余额+科目当日发生额=科目期末余额
- 下级科目余额总和=上级科目余额(科目总分检查)
账实核对
是各项资产物资的记录数值与实际真实数额间的核对。例如:我们使用记账 APP 记录购买了一台手机,我发现自己手里确实有一台手机,这就是账实核对。
对应到实际的业务场景:
对电商平台来说: 交易数据与支付渠道收款金额、已发货商品数量进行核对,结算数据和付款进行进行核对。
对支付公司来说: 核对支付订单与支付渠道的收款金额是否到账到备付金账户,从网银明细确定金额是否已明确.
验证银行存款的变化和实际资金流向是一致的.如果涉及到账户资金的结转(在途转成现金,允许账户资金可提现),的前提也是实际资金与账户余额一致.
参考文档
- 单式记账法和复式记账法的区别
- 账务系统-复式记账法总结
- 基础向:详细解析「财务对账」的秘密
- 支付清结算之账户和账务处理
- 互联网支付行业中,清结算相关复式记账的会计科目该如何设计,如何记账?有人做过或者了解相关的设计方案吗?
如果觉得文章对您有用,可以关注我的公众号 程序和猫 , 更加方便的交流.
本文转载自: 掘金