1. 梳理交易類型和賬戶結構
- 和業務側確認各類交易流程,從中抽象出結構化的原子交易類型,需考慮正向、逆向、異常處理流程;
- 根據交易流程和類型,根據我國企業會計制度要求(最新版本為2016年會計科目表),和業財會計確認會計科目結構:在科目下開設平臺賬戶、用戶賬戶,不同角色的用戶,根據用戶允許交易的類型(充、付、退、提),以及資金流的中間狀態(待清算、待審核、待結算等),設立不同的賬戶。
2. 賬戶表字段設置
公共字段:創建時間,角色類型(平臺,商戶,分銷商,買家),user_id,幣種,余額,可用余額,凍結余額,是否實名,狀態等;
付款類:是否允許付款,付款密碼,限額額度
退款類:退款密碼
提現類:是否允許提現,提現額度,提現賬號(第三方或銀行卡),授權方式(密碼,手機號)
其他類:
客戶賬戶不多時,可統一儲存在一張寬表;用戶賬戶很多時,可按科目給客戶賬戶分表,甚至可以把熱點賬戶單獨分表。
賬戶余額最好每日日切記錄余額快照,以方便追溯記錄和對賬。
3. 賬戶流水
和小學作文四要素“時間地點人物事件”類似,賬戶流水需要包含:
交易類型,交易賬戶,對手賬戶,交易金額,交易時間,業務單據號(如退款單號,在該交易類型下保持唯一),原始單據號(如訂單號,根據需要判斷是否保持唯一),以及其他有需要的交易要素信息;
如果需要對賬,還需要加上是否對賬,會計日期等字段。
3. 交易接口
- 賬務系統向相關系統,按照各類交易類型,開放不同交易接口;
- 接口字段必須包括業務單據號,賬務系統對此單據號維護冪等性;
- 業務方調用不同交易接口,傳入交易要素字段,賬務系統先需要做基本的核對,核對成功才能入賬;
需校驗的內容:單據是否唯一,賬戶是否存在且狀態正常,金額是否充足,以及其他該交易類型需滿足的條件。 - 校驗通過后,記錄賬務流水。對于外部資金流入或內部資金流出類交易(充值退款提現等),記錄一條流水;對于資金在內部賬戶流動,記錄一對或者一組(偶數條)流水,更新對應賬戶余額。
- 記錄一對或者一組流水時需保證事務性,即這一串操作需要全部成功,才算賬務處理成功,否則有一個失敗,則需要全部失敗。
4. 對賬規則
賬務系統主要功能就是記錄各個業務方,對賬戶資金的調撥,因此對賬的主要目的:
- 賬務系統和外部系統間的數據一致性
對于外部資金流入或內部資金流出類交易(充值退款提現等),每條流水需要和上游業務側的業務單據,進行一對一的軋帳。單據的金額、交易賬戶、單據號都對得上時,賬務流水可標注為已對賬或對賬成功。
如果賬務流水少了,檢查業務側調用賬務失敗日志;如果賬務流水多了,可能是業務方單據狀態未同步,可能需要補單或更新狀態。
比如賬務系統訂單交易入賬流水,和支付系統支付單對賬,或者結算系統的結算單,與賬務系統分賬明細流水度對賬。因為都是內部系統對賬,頻次可以設置得比較高,比如每10分鐘一次。
對于資金在內部流動的交易類型,賬務系統也需要和上游系統(如結算系統入賬)按照單據對賬,可能是一條業務單據(如結算單)對多條賬務流水(分賬)對賬。一對多對賬時,業務單據中給到每個賬戶的分賬金額,與出金賬戶出賬流水核對,金額、交易賬戶、單據號都對得上時,賬務流水可標注為已對賬或對賬成功。
- 賬務處理時事務完整性校驗
資金在平臺內部賬戶間流動時,出金賬戶和入金賬戶都會分別記錄一條流水。出金賬戶流水已于業務系統對賬成功,入金賬戶流水則需要與出金賬戶流水對賬,以保證一一對應。
如果是復式記賬法,將分戶流水與會計分錄軋帳(記賬憑證對應),同時會計分錄進行平衡性對賬,即可核對平衡;
如果是單邊賬,即只有分戶流水,可以按照每種交易類型(限資金內部流動交易),取交易雙方賬戶或科目的流水進行軋帳,交易單據、交易金額、賬戶編號(或uid)相同則對賬成功,可將入金賬戶流水標注為已對賬。
因為賬務流水比較多,一般采取異步同步流水后,定時使用獨立的對賬服務器單元執行對賬任務。
- 余額對賬
為確保余額快照的準確性,需要將每個賬戶當期余額-上期余額,與當日流水軋差核對。