票据系统设计

时间:2022-09-22 00:39:07

最近做票据系统,在此做一个总结。下面从几个关键点逐一来阐述。

1. 库存

通俗地讲,票据系统的主要功能是出票、买票、卖票。买卖双方之间的交易就形成了票据的流转。这个过程中,票是最关键的元素。票据库存是整个票据系统的核心,所有业务最终都是对库存进行操作。对应有出库、入库操作。

交易类的库存操作是在结算完成后进行处理的,结算完成后通知交易双方然后各自处理自己的库存;

非交易业务的库存是在对方应答成功后进行的,首先是对方应答同意后处理,然后是本方收到对方应答同意后处理;

针对库存有几张关键的表设计:

(1)票据主表:主要是存储票据中不变的一些信息,比如票号、票据类型、出票日期、承兑日期、到期日、出票人、承兑人、收票人等等

(2)票据子表:存储变化的部分,比如票号、子票区间、票据金额、持票人、票据状态、流通状态、库存状态、拆分状态等等

(3)票据交易表:记录所有对票据的的操作行为

(4)应收/应付表:这个主要是挑票用的,维护着谁持有哪些票据,因为有类似质押的行为存在,所以不能跟票据子表合并。这个表相当于是企业的个人记账本。主要字段有票号、子票区间、票据金额、可用余额、本方企业信息、对方企业信息、前手人信息、票据状态等等

(5)票据背面表:主要用于展示票据背面信息

(6)加锁表:用于业务操作期间对票据加锁

2. 拆票

电票是可以拆分的,持票人在办理票据背书、贴现、保证、质押等业务时,可依实际业务需要,将持有票据包按实际支付金额分包流转使用。

在发送请求后,收到确认报文后进行拆分。拆票就是把一张票变成两张票。

票据系统设计

反映到表上就是原来票据字表中的一条未拆分的记录,拆分后新增了两条,总共变成三条记录

假设原票据金额是10元,子票区间是0.01~10,再假设交易金额是2元,那么首先将这个2元的拆出来,即它的子票区间是0.01~2

票据系统设计

应收表中相应票据也需要做同样的拆分

以上拆票逻辑同意适用于其它类似的凭证拆分流转

3. 服务划分

票据系统设计

主要微服务:

  • 票据服务:主要是各个业务数据,比如出票、背书、贴现、交易等等
  • 库存服务:票据的流转
  • 企业服务:企业信息、企业账户、企业账户等等
  • 票交所服务:主要是与票交所交互,收发报文
  • 第三方:数据推送第三方
  • 指令服务:业务与票交所交互的桥梁

票据系统设计

下面以质押为例描述整个过程中库存是如何变化的

1、A(出质人)申请将票据质押给B(质权人),首先保存申请信息,并提交审批,并对被质押的票据加锁

2、审批通过后,发送质押申请报文

3、收到确认报文后,更新票据状态,检查是否需要拆票,如有完成拆票动作

4、B应答同意,收到确认报文后,更新库存。首先,修改票据状态已收票,然后生成入库交易记录,进行入库操作(即向自己的应收表中新增一条票据记录)

5、A收到B应答同意报文后,更新自己的库存。首先,票据解锁,然后更新票据状态已质押,生成交易,更新自己的应收票据表

6、以上在库存操作时还会生成统计数据,并更新票据背面