票據系統設計

2023-02-28 18:00:50

最近做票據系統,在此做一個總結。下面從幾個關鍵點逐一來闡述。

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、以上在庫存操作時還會生成統計資料,並更新票據背面