資金對(duì)賬系統(tǒng)的設(shè)計(jì)思考
參考文章:
資金安全是公司業(yè)務(wù)穩(wěn)定運(yùn)行的核心方面之一,風(fēng)險(xiǎn)容忍度極低,實(shí)施上任何公司都希望全年資金運(yùn)營(yíng)風(fēng)險(xiǎn)事件為零。一個(gè)穩(wěn)定可靠的清結(jié)算系統(tǒng)是資金安全的前提,一個(gè)嚴(yán)謹(jǐn)、健全、靈活的對(duì)賬系統(tǒng)是保障。本文主要對(duì)資金對(duì)賬系統(tǒng)進(jìn)行總結(jié)探討。
對(duì)賬系統(tǒng)處理步驟:數(shù)據(jù)準(zhǔn)備 => 數(shù)據(jù)核對(duì) => 差錯(cuò)處理
數(shù)據(jù)準(zhǔn)備
該模塊主要實(shí)現(xiàn)兩個(gè)目標(biāo):
- 第一是為不同的外部系統(tǒng)提供多元化的接入機(jī)制
- 第二是通過(guò)數(shù)據(jù)適配的手段把外部數(shù)據(jù)以統(tǒng)一的格式進(jìn)行轉(zhuǎn)換和存儲(chǔ)
數(shù)據(jù)核對(duì)
資金流數(shù)據(jù)對(duì)賬邏輯
問(wèn)題梳理:
- 漏結(jié):發(fā)起方有數(shù)據(jù),接收方無(wú)數(shù)據(jù)。
- 重復(fù)結(jié):發(fā)起方有一筆數(shù)據(jù),接收方有兩筆數(shù)據(jù)。
- 錯(cuò)結(jié):發(fā)起方和接收方數(shù)據(jù)不一致,一般發(fā)生在金額和狀態(tài)兩個(gè)字段。
對(duì)賬方式:
-
單向?qū)~:以一方數(shù)據(jù)為準(zhǔn),進(jìn)行對(duì)賬。
-- SQL實(shí)現(xiàn):TABLE_A和TABLE_B對(duì)賬,以TABLE_A為準(zhǔn) SELECT A.KEY, A.VALUE AS VALUE_A, B.VALUE AS VALUE_B, A.VALUE-COALESCE(B.VALUE,0) AS DIFF FROM TABLE_A A LEFT JOIN TABLE_B B ON A.KEY =B.KEY -- LEFT JION -
雙向?qū)~:雙方數(shù)據(jù)互為基準(zhǔn)對(duì)賬。 發(fā)現(xiàn)問(wèn)題更為全面,優(yōu)先選擇。
-- SQL實(shí)現(xiàn):TABLE_A和TABLE_B對(duì)賬,TABLE_A和TABLE_B互為基準(zhǔn) -- 方式1:FULL JOIN SELECT COALESCE(A.KEY, B.KEY) KEY , COALESCE(A.VALUE,0) AS VALUE_A , COALESCE(B.VALUE,0) AS VALUE_B , COALESCE(A.VALUE,0)-COALESCE(B.VALUE,0) AS DIFF FROM TABLE_A A FULL JOIN TABLE_B B ON A.KEY=B.KEY -- 方式2:UNION ALL + GROUP BY -- 推薦,因?yàn)榇a更精簡(jiǎn) SELECT T.KEY , SUM(VALUE_A) VALUE_A , SUM(VALUE_B) VALUE_B , SUM(VALUE_A)-SUM(VALUE_B) AS DIFF FROM ( SELECT A.KEY, A.VALUE AS VALUE_A, 0 AS VALUE_B FROM TABLE_A A UNION ALL SELECT B.KEY, 0 AS VALUE_A, B.VALUE AS VALUE_B FROM TABLE_B B ) T GROUP BY T.KEY
對(duì)賬粒度:
- 明細(xì)對(duì)賬:明細(xì)數(shù)據(jù)比對(duì)
- 優(yōu)點(diǎn):可以準(zhǔn)確定位問(wèn)題數(shù)據(jù)。
- 缺點(diǎn):
- 對(duì)賬口徑設(shè)計(jì)比較復(fù)雜,因?yàn)槲覀冃枰瑫r(shí)針對(duì)漏、重、錯(cuò)三種錯(cuò)誤類別設(shè)計(jì)不同的對(duì)賬口徑,同時(shí)還要考慮到業(yè)務(wù)的邊緣場(chǎng)景。稍有不慎,就會(huì)影響對(duì)賬的準(zhǔn)確性。
- 處理的數(shù)據(jù)量大,對(duì)賬處理過(guò)程長(zhǎng)。
- 匯總對(duì)賬:按一個(gè)維度匯總后比對(duì)
- 優(yōu)點(diǎn):對(duì)賬口徑設(shè)計(jì)簡(jiǎn)單,可快速實(shí)現(xiàn),不易出錯(cuò)。處理數(shù)據(jù)量較小,對(duì)賬過(guò)程快。
- 缺點(diǎn):無(wú)法定位數(shù)據(jù)底層問(wèn)題,一旦發(fā)現(xiàn)問(wèn)題,還需進(jìn)一步尋找問(wèn)題數(shù)據(jù)。
- 因此,推薦的做法應(yīng)該是以明細(xì)對(duì)賬為主,定位具體問(wèn)題。以總數(shù)對(duì)賬為輔,對(duì)明細(xì)對(duì)賬的結(jié)果進(jìn)行復(fù)核兜底。
對(duì)賬口徑:

對(duì)賬時(shí)機(jī)

差錯(cuò)處理

會(huì)計(jì)科目對(duì)賬邏輯
在資金流數(shù)據(jù)對(duì)賬的基礎(chǔ)上,對(duì)每個(gè)資金業(yè)務(wù)配置記賬模板(例如:借 科目1 + 貸 科目2),將單一資金流數(shù)據(jù)轉(zhuǎn)換為會(huì)計(jì)復(fù)式記賬分錄數(shù)據(jù),進(jìn)一步體現(xiàn)為會(huì)計(jì)科目的流水,并計(jì)算科目余額,然后與外部渠道實(shí)際余額進(jìn)行賬實(shí)核對(duì);同時(shí)還可以利用內(nèi)部會(huì)計(jì)科目之間勾稽關(guān)系,進(jìn)行賬賬核對(duì)(不同科目發(fā)生額/余額之間的核對(duì))
TODO: 實(shí)現(xiàn)思路舉例