第三方支付賬務系統論述
筆者從事多年銀行賬務系統的設計與研發,三年前進入互聯網行業,進行第三方支付賬務系統的設計,一路走來,感觸良多。關於第三方支付賬務系統如何建設、與銀行核心賬務系統的區別與聯繫、與公司大財務系統如何對接,在本文中會具體論述。
一、 第三方賬務系統設計
首先談一下支付公司賬務系統如何設計。關於如何記賬,國內長期以來有兩個發展方向,一個是以金蝶、用友為代表的財務系統,一個是以銀行為代表的銀行賬務核心系統。這兩種賬務系統都是用來記賬,但設計理念上有很大差別,財務系統以科目為中心,記賬必談科目,銀行賬務系統以賬戶為中心,記賬必談賬戶。從賬戶數量來講,支付公司幾千萬甚至上億的賬戶數量,金蝶、用友這種財務系統是支撐不起來的。基本上,對於支付公司的賬務系統應該參考銀行賬務核心系統來設計,這一點在業界已經達成共識。
這裡談的的賬務系統,是說的複式記賬(有借有貸,借貸相等),但是不採用複式記賬,而是採用單式記賬,是否可以呢?首先說答案,是可以的。但是,單式記賬不科學,也存在一些缺陷。採用單式記賬,存在以下一些問題:
1. 資金的來龍去脈不清晰。記賬是一門技術,有專門的方法,從刻字記事、結繩記事,發展到現在,借貸複式記賬是目前為止最科學的一種記賬方法。借貸複式記賬能夠清楚記錄每筆資金從哪來、到哪去,這一點,單式記賬是無法做到的。
2. 單式記賬無法進行資產、負債平衡檢查。資金不會憑空而來,也不會憑空而去。對於一個會計主體,有多少資產,就有多少負債,資產 = 負債 (所有者權益是對股東的負債)。比如用戶充值業務,在支付機構的賬務體系中,採用複式記賬,用戶餘額增加,同時支付機構在銀行的存款科目餘額增加,日終進行總賬平衡檢查,銀行存款科目餘額 = 用戶餘額 (不考慮支付手續費)。而如果採用單式記賬,一筆充值業務,只記錄用戶餘額增加,而不記錄銀行存款,那末,用戶的餘額是否等於支付機構的銀行存款呢?採用單式記賬,是沒有辦法進行這種平衡檢查的。
3. 從業務模型來講,也需要複式記賬。還用上面的例子來講,比如,支付公司對接了100家銀行,用戶在每家銀行都有充值,如果每筆充值,只記錄用戶餘額是多少,而不記錄支付公司在銀行的存款是多少,那該如何核對支付公司在每個銀行有多少餘額呢?只能是把所有用戶餘額匯總在一起,然後把所有的銀行對賬單的餘額匯總在一起,核對一個總數。這種核對方法,由於時間差或各種原因,是很難核對出具體每個銀行賬戶存款的差異的。而如果採用複式記賬,對於每筆充值,都記錄了對應銀行存款科目餘額(或者是應收賬款科目)的變化,賬務系統總賬借貸平衡之後,再用銀行存款科目餘額與銀行對賬單核對,就很容易核對出對應銀行端每個賬戶餘額差異了。在日常財務處理的工作中,財務人員也是用銀行存款科目餘額與銀行對賬單來核對,出具餘額調節表,來核對與銀行對賬單的差異。所以說,從現實業務模型來講,支付賬務系統也應該採用複式記賬的方法來進行記賬。
以上談了兩點:一、支付公司的賬務系統參考銀行的賬務系統來設計。二、採用複式記賬。那末,賬務系統具體如何設計呢?
1. 賬務核心四張表。從數據的角度來看,賬務系統與其他系統沒什麼區別,存儲的也是數據,只不過存儲的是和賬務相關的數據。賬務核心主要有四張表:分錄流水、分戶賬、明細賬、總賬。
(1) 分錄流水 是記賬的憑證,記錄每筆資金活動的來龍去脈,具體業務要素包括:
機構碼
幣種
交易碼
交易日期
賬務流水號
分錄序號
帳號
借貸標誌
科目號
發生額
......
(2) 分戶賬 記錄賬戶的餘額,可以有用戶分戶賬、商戶分戶賬、貸款分戶賬、內部分戶賬等,具體業務要素包括:
機構碼
幣種
客戶號
帳號
賬戶類型
餘額
上日餘額
科目號
......
(3) 明細賬 記錄每個賬戶對應餘額的變化,具體的業務要素包括:
帳號
交易日期
明細序號
發生額
借貸標誌
科目號
餘額
賬戶流水號
對方帳號
對方帳戶名稱
......
(4) 總賬 科目總賬,分為日總賬和周期總賬,日總賬每日生成,周期總賬月末、季末、半年末、年末生成,記錄每個科目的期末餘額和本期借、貸發生額。具體業務要素包括:
賬期
機構碼
幣種
科目號
上期借方餘額
上期貸方餘額
本期借方發生額
本期貸方發生額
期末借方餘額
期末貸方餘額
......
當一筆業務發生時,首先生成分錄流水,然後驅動賬戶餘額變化,賬戶餘額變化後,生成明細賬。日終根據分錄流水生成總賬。根據業務需要,也可以先修改賬戶餘額,然後非同步生成分錄流水,但是無論先生成會計分錄,還是緩衝非同步生成會計分錄,都要保證分錄流水與分戶賬餘額的一致性,這一點通過日終系統的檢查來保證。
2. 日間和日終
賬務系統從模塊上劃分為兩大系統,日間和日終。業務驅動賬務,完成日間賬務的記賬。根據不同的業務場景,賬務系統劃分不同的交易碼,設置分錄規則,拆分錄、改餘額。日終進行平衡檢查,保證賬務系統數據的一致與準確,生成總賬。日終進行如下處理。
(1) 自動入賬。對於已拆分錄未改餘額的訂單,改餘額、記明細,對於已改餘額未拆分錄的訂單,記分錄流水。
(2) 生成總賬。根據分錄流水生成科目總賬,科目發生額和餘額從末級科目逐級匯總到一級科目。
(3) 總賬平衡檢查。
發生額平衡檢查:一級科目借方發生額 = 一級科目貸方發生額
餘額平衡檢查: 一級借方科目餘額 = 一級貸方科目餘額
(4) 總分核對。總賬科目餘額 = 分戶賬科目餘額匯總。因為業務24小時不間斷運行,分戶賬餘額在不斷變化,無法準確取到期末的賬戶餘額進行核對。這可以考慮用餘額快照與總賬科目餘額進行核對。
(5) 稽核明細。檢查明細賬與分錄流水是否一致。對於當日發生過餘額變動的賬戶,昨日餘額與分錄流水中的發生額進行軋差,檢查計算出的餘額與餘額快照是否一致。
3. 多機構、多幣種。在分錄流水、分戶賬、明細賬中都設置機構碼和幣種欄位,對於每套分錄,同一機構、同一幣種的借貸發生額是相符的。生成總賬時,根據不同的機構、不同的幣種生成總賬,每個機構內,同一幣種的總賬借貸平衡。在同一機構,如果一套分錄中涉及多個幣種,用貨幣兌換科目來軋平,期末通過貨幣兌換科目來計算和結轉貨幣兌換損益。每個幣種一套總賬,根據期末匯率,外幣折算為本幣,生成合併後的總賬。
4. 對賬。賬務系統的數據要保證清晰、準確、完整。清晰通過會計分錄來實現,通過分錄流水,知道是什麼業務場景,知道資金是怎麼流轉的。而準確和完整,是要通過對賬來保證的。對賬核對的是賬務數據的完整性與準確性,是賬務系統的一部分。互聯網IT各系統分布部署,每個系統中都存放了一些業務數據,但只要和資金相關的數據都集中存放到了賬務系統中。也就是說各業務系統分布部署,賬務系統數據集中。通過日終檢查,已經保證了賬務系統內部數據的一致性,然後支付公司內部各其他系統與賬務系統進行對賬,保證支付公司各系統之間的數據一致性。內部對賬一致後,賬務系統再與外部進行對賬,保證賬務數據與外部系統數據的一致。與外部系統進行核對,包括與銀行對賬單核對,也包括提供賬單給商戶,商戶根據賬務系統提供的賬單進行核對。因為內部對賬已經保證了賬務系統數據與內部業務系統數據的一致,與外部對賬,用業務系統的數據與外部進行核對也是可以的,但業務系統與外部核對,一般只能核對發生額,對於餘額是無法進行核對的。而如果用賬務系統來核對,既可以核對發生額,也可以核對餘額。對於銀行存款,可以用銀行存款的明細賬與銀行對賬單核對,對於應付商戶款,可以提供商戶賬戶的明細給商戶進行核對。另外,在實際工作中,會有各種各樣的調賬處理,而這些調賬處理,可能並不在業務系統中體現,所以,外部對賬,還是推薦直接用賬務系統與銀行、與客戶進行核對。
二、 賬務系統的作用與目標
對於賬務系統,前文提到包括分錄流水、分戶賬、明細賬、總賬。這是一個整體,這四張表要保證數據完全一致。在銀行核心賬務系統中,一般都是先生成分錄流水,然後分錄流水驅動賬務餘額變化和生成明細賬。在支付公司的賬務系統建設中,為了快速響應業務,把賬務系統分成了兩個部分,賬戶系統與會計系統,賬戶系統是指分戶賬與明細賬,會計系統是指分錄流水和總賬。這樣的劃分是可以的,但這樣劃分並不代表賬戶與會計是獨立沒有聯繫的,二者仍然是一個整體。賬戶中有科目,分錄中有帳號,總分平衡、借貸平衡,完整的組成一套賬務體系。試想,如果沒有這套賬務體系的設計,在賬戶系統中只記錄帳號和餘額,這些帳號和餘額在其他系統中也是可以記錄的,那麼,為什麼還需要建設一套賬務系統呢?賬戶中有科目,是為了總分核對,明細中有流水號,是為了能對應到分錄流水,有分錄流水,是為了賬目清晰,能清楚的體現每筆資金的來龍去脈,根據分錄流水生成總賬,是為了掌握資產和負債的情況,而總賬是否準確,又要總賬和分戶賬進行總分核對。然後,又繞回來了。繞來繞去,賬務系統就是為了達到兩個目的:
1. 清晰。
2. 準確。
而賬務系統建設的最終目標是是什麼呢?最終目標是提供財務報表。
賬務系統有以下幾個作用:
1. 提供業務支撐。記錄餘額的變化,保證業務正常運轉。業務驅動賬務,沒有業務也就沒有賬務,賬務要保證業務能正常運轉,賬務的餘額要100%準確。
2. 為用戶提供賬單。用戶數量太多,不會為每個用戶發送賬單,用戶可以查詢賬戶的餘額和明細。
3. 為商戶提供賬單。商戶對於開在支付公司的賬戶與在銀行的對公賬戶是同等看待的,賬務系統需要為商戶提供資金對賬單。
4. 內部核算。記錄銀行存款、應收賬款、手續費、利息收入等科目餘額,與銀行或第三方提供的賬單進行核對,核對餘額與發生額。
5. 為企業大財務提供財務報表。支付公司的賬務系統記錄的是業務賬,這些數據是整個企業財務數據的一部分,需要合併到公司的大財務系統中去。可以把支付賬務系統的會計分錄映射為大財務的分錄,然後匯總,直接對接企業ERP總賬。這一點與銀行非常類似,銀行賬務核心記錄的是存款、貸款、匯款這些業務數據,這些業務賬也是要與銀行財務系統合併到一起的。
三、 賬務系統建設中遇到的一些問題
從銀行賬務系統到第三方支付賬務系統,在實施過程中還是會遇到各種各樣的問題。銀行賬務系統已經實施了二十多年,在這二十多年裡,也培養了許多熟悉銀行會計與銀行業務的核心人員,而互聯網行業,很多開發同學對於會計不了解,對於賬務系統如何做,也沒有概念,而要建設這樣一套複雜的賬務體系,沒有一批熟悉會計、熟悉業務的人員是很難做到的。所以,在實施過程中,要有準備,把這套體系給大家講清楚,需要花費一定的時間和精力。
另外,在賬務實施過程中,因為業務驅動賬務,賬務反映的是業務活動,所以需要了解清楚具體的業務場景,才能知道該如何記賬、該如何拆分錄,在這個過程中,需要和業務人員、財務人員持續的保持溝通,把業務梳理清楚。
還有,在銀行賬務系統中,賬務核心一般對接大前置就可以,而互聯網公司有很多系統,賬務系統可能會與不同的系統對接,要準確了解個各系統之間的調用關係,把記賬流程規劃清楚。
四、 與銀行賬務系統的區別與聯繫
總體來說,支付公司的賬務系統是可以參考銀行賬務系統來設計的,但是在實施過程中還是會有一些區別。
1. 分庫分表。銀行賬務核心一般採用的小型機,資料庫採用ORACLE 或DB2,支付公司一般採用伺服器,資料庫用Mysql。從機器性能和資料庫性能來講,銀行系統的性能會更高一些,所以銀行賬務系統目前基本上還沒有使用分庫分表的策略,而互聯網公司對於一些庫表已經進行分庫和分表處理了。
2. 24小時記賬。在銀行賬務系統中,對於24小時運行,有很多種方案,例如切換餘額、記不同分戶賬、日切後補流水等,但無論哪種方案,都不能實現完全24小時運行,少則幾分鐘,多則半個小時以上的時間,系統是不能對外運行的。其問題,主要是因為要進行總分核對,而分戶賬是在不斷變化的,所以要想辦法把期末的分戶賬餘額取出來進行核對。這個我在日終系統中提到過,可以採用餘額快照與總賬進行核對,這樣即使分戶賬餘額進行變化,也不影響總分核對。餘額快照是根據明細生成的,這種用餘額快照與總賬進行核對的方法進行其實存在一個問題,餘額快照可能與真正的分戶賬期末餘額不一致。這一點可以通過技術方法處理掉,在分戶賬中增加上日餘額欄位,每日增加一個定時任務,進行快照與上日餘額的核對。
3. 銀行存款餘額調節表。第三方支付公司與商業銀行核對銀行存款,商業銀行也會與人民銀行核對頭寸。商業銀行每日都要與人民銀行進行頭寸核對,對於頭寸的變動,有大額支付系統、小額支付系統、超級網銀、同城等業務,這些業務,人民銀行都會回傳一個對賬日期,而銀行賬務系統一般都會把這個對賬日期記下來,這樣用人行的對賬日期來核對,基本上每天都是可以對平的。而對於企業,會在很多商業銀行開戶,每個銀行的記賬日期也不一致,這就需要企業根據銀行存款科目日記賬與銀行對賬單進行核對,為每個銀行賬戶出具餘額調節表。
五、 與公司大財務系統的對接
支付公司的賬務系統記錄的支付業務賬,屬於整個公司財務系統數據的一部分,這部分數據需要對接到公司大財務的ERP系統中,實現業務財務一體化。支付業務賬與公司大財務系統對接,有以下幾種方法:
1. 把支付各系統的業務訂單報送大財務,大財務根據業務訂單,分析是什麼業務場景,進行拆分錄處理。這種處理方式,因為各業務系統的訂單分散在各個表中,數據格式也不統一,而且隨著訂單狀態的變更,業務狀態在發生變化,需要把每個業務狀態反映到大財務系統中去,這個複雜度是很高的。
2. 大財務直接根據銀行對賬單來記賬。這種方式,不能真實反映業務情況,例如對於應付款,有用戶充值資金和應付商戶結算款,或者應付商戶款想再細化到業務線,通過銀行對賬單來記賬是無法實現這種要求的。
3. 支付賬務會計分錄映射到大財務會計分錄,直接對接大財務總賬。因為賬務系統已經集中了所有和資金相關的數據,並進行了各種平衡檢查、內部對賬、外部對賬,是可以把賬務系統數據直接映射為大財務分錄,合併到大財務的總賬中去的。這個有一點需要注意,支付賬務系統科目設計時,盡量與大財務科目保持一致,對於業務場景,也要與大財務溝通清楚。
隨著互聯網的發展,第三方支付、互聯網金融、電子商務,只要涉及資金、債權、債務,都會有賬務系統的建設需要,而對於賬務系統如何建設,隨著業務的發展與技術的進步,相信會不斷的有創新和發展。寫此文,共勉。
2018.02.20
農曆正月初五
推薦閱讀: