以在線教育公司為例,如何做一款財務對賬產品?
筆者以一個虛構的在線教育公司的對賬業務為背景,分享了怎么做對賬產品以及對應的設計要點。
財務同學每月月初都需要核對上個自然月微信、支付寶等金融收款賬戶的交易流水和公司業務系統交易訂單的一致性,基于一致的前提下才能做賬。隨著業務的爆發性地增長,業務訂單量太大,人工對賬過于耗時和繁瑣,就到了需要通過產品方案來解決,實現自動化對賬。
適讀對象
本文是四勾作為一名產品,通過產品方案來實現自動化對賬的產品實踐,比較適合對對賬財務專業知識和對賬工作流有一定認知,但就是不知道如何下手的產品經理。
如果你還不清楚為什么要對賬,對賬是什么和什么對等一些財務方面的專業知識的話,建議先閱讀文章底部的「參考文章」惡補之后,再回來閱讀正文。
一、背景介紹
為了便于理解和深入業務場景,四勾虛設一個場景,帶著大家逐漸深入。
1. 虛擬場景
海豚教育是一家 K12 在線教育公司,主要服務的對象是小學和初中階段的學生,有數學、英語、語文等學科,主要的業務交易包括 2 部分:
- 其一,購買課程的資金流入,分為體驗課和正式課,體驗課單價 30 – 50;正式課是一年的課程,課單價 6k – 8k;
- 其二,課程退費的資金流出。
資金的流入和流出都是通過微信或支付寶來進行交易,現在交易訂單量巨大,需要通過產品來實現將微信和支付寶的每日交易數據和海豚自己的業務交易數據對賬。
微信和支付寶我們都叫做金融賬戶。
2. 對賬的價值
比較容易理解的是實際的收支和業務訂單的收支一致,保證做賬數據的正確性。其實有更深層次的價值,反向校驗業務數據的準確性,發現業務數據的問題,及時修正;規避財務風險,進而更好的服務用戶。
舉個栗子,微信有一筆 50 元的退費記錄,業務訂單里沒有,賬無法對上。財務發現問題之后會聯系孩子的班主任老師,在業務系統一查發現他的退費申請由于超時過期,退費申請自動關閉了。發現問題后需要采取措施,補退費記錄,對賬號做停課處理。
3. 設計思路
- 其一,每個金融賬戶分開獨立對賬,指微信和支付寶
- 其二,以金融賬戶數據為參照物,拿海豚業務訂單數據往上對齊
- 其三,對賬不區分學科,學科是對賬完畢之后用來出財務餅狀圖的
二、對賬工作流
自動對賬是按照每日對賬,當天拉取前一日的微信和支付寶對賬單,和海豚的前一日的業務訂單進行自動化匹配,然后做出正?;虍惓5臉擞洝a槍擞洰惓5?,再人工跟進。
對賬工作流分為 4 個步驟,每個步驟有具體的分工,全景圖如下。
對賬工作流全景圖
1. 賬單下載
賬單下載更多的是技術層面的實現,這里不做展開,涉及到如下 2 個 API。
微信是當日上午 10 點出前一日的對賬單,所以我們需要 10 點后拉取。
支付寶是當日上午 9 點出前一日的對賬單,所以我們需要 9 點后拉取。
微信下載對賬單 API:https://pay.weixin.qq.com/wiki/doc/api/micropay.php?chapter=9_6
支付寶下載對賬單 API:https://docs.open.alipay.com/204/106262/
2. 數據準備
數據分為 3 個部分,每個金融賬戶各自需要 1 份數據,我們這里叫做「微信對賬數據」和「支付寶對賬數據」。另外,業務系統的訂單數據,我們叫做「海豚對賬數據」。
1)金融對賬數據
微信和支付寶的邏輯一樣,下面以微信為例:
整理后的微信對賬數據
交易類型,照搬微信對賬單上的,不做修改;
海豚訂單,是微信里的「商戶訂單號」,便于理解,四勾有意改了個更直觀的名字;
金融賬戶訂單,是微信的微信訂單號。
2)海豚對賬數據
每天凌晨 2 點拉取前一日的海豚業務訂單,包括購課付款成功和退費成功的交易訂單,只拉取成功的訂單,忽略支付中或退費中的交易未結束的部分。
同時,整理完的對賬數據我們需要單獨存儲,出于 2 點考慮:
- 其一,業務訂單的修改不會影響我們的對賬數據;
- 其二,對賬完畢后我們會基于對賬數據計算各種各樣的財務報表,要確保數據源的一致性。
如下圖所示,保留 userId、課程名稱和課程編號,便于以后按照課程欄目的財務統計。
整理后的海豚對賬數據
3. 對賬
1)單筆訂單的對賬狀態
正常:系統自動對平的
異常未處理:系統未自動對平的會標記成異常未處理
異常已處理:人工處理掉異常,并且人工進行海豚對賬數據和金融賬戶對賬數據關聯上
異常已掛起:
- 就是暫時忽略,以后再說
- 以后可以對已掛起的數據再次人工處理成異常已處理
單筆訂單對賬狀態的流轉
2)自動對賬
微信自動對賬完的數據狀態
舉個栗子:今天是 2019-12-26,我們對昨天 2019-12-25「微信」的對賬數據。上午 10 點所有金融賬戶數據準備完畢后,立馬執行自動對賬。當然對完微信之后會再對「支付寶」。
Q1:左右兩邊的數據來源?
左邊是海豚昨天的訂單里面,收款和退款的金融賬戶是微信的;
右邊的是微信昨天的全量交易對賬數據。
Q2:如何自動對賬?
第 1 步,右邊的數據按照交易時間順序排列,并展示出來(此時,左邊全部為空);
第 2 步,針對右邊每一條數據,拿「海豚訂單」去海豚對賬數據里面查詢,同時滿足下面條件就自動標記成「正?!?;
- 其一,能查詢到記錄(只去海豚對賬數據的 25 號數據里面查)
- 其二,金額一樣
第 3 步,將第 2 步中查到的海豚對賬數據展示在對應金融數據的左側,并且將狀態標記成「正?!?/p>
第 4 步,將金融對賬數據沒有標記成正常的其它所有的行,都標記成「異常未處理」(此時,這些數據的左側都是空白)
第 5 步,將海豚對賬數據沒有被標記正常的其它所有數據,按照交易時間順序插入,都標記成異常未處理(此時,這些海豚數據的右側全部是空白)
自動對賬包括上面的 5 步,自動對賬結束會出現:
- 其一,狀態只有 2 種,正常和異常未處理;
- 其二,異常未處理的,要么右邊空白,要么左邊空白
3)滾動對賬
舉個栗子:一筆支付,微信 23:59:59 收到錢,回調海豚服務器時已經跨天 00:00:02,這樣在自動對賬時會被標記成異常未處理。
出現上面的情況是由于遭遇日切,滾動對賬就是專門來處理這種 case 的。
滾動對賬前后的狀態變化
上下文:
24 號所有對賬結束后,海豚和微信各有 1 條異常未處理;
25 號自動對賬結束后,海豚有 1 條異常未處理,微信有 2 條;
現在將要執行 25 號的滾動對賬
Q:如何滾動對賬?
第 1 步,拿 24 號微信異常的數據,去 25 號海豚的數據查,海豚訂單號一致、金額一致,就意味匹配成功,將兩者關聯上,并同時標記為異常已處理;
第 2 步,反過來,拿 25 號微信異常去查 24 號海豚數據。
處理完上面 2 步之后,就如上圖下半部分所示。
4. 差錯處理
差錯處理分為 2 種,一種是能人工匹配上,處理成異常已處理;另一種是怎么也匹配不上,處理成異常已掛起。
1)處理成異常已處理
通過線下人工查明原因,找到匹配的兩邊的訂單號,然后上系統進行人工關聯。
將異常處理成異常已處理
2)處理成異常已掛起
將異常處理成異常已掛起
處理異常之后,對賬狀態發生變化,就如下所示:
處理完部分異常后的對賬狀態
三、產品實現
1. 頁面信息流
2. 對賬明細-全部
舉個栗子:要進行 2019-12-14 到 31 號對賬,如何操作:
對賬時間段:選擇 2019-12-14 ~ 2019-12-31
對賬周期,如果選擇周,下面就按照自然周拆分,顯示 4 行,如上圖所示;如果按照日,下面顯示 31 – 14 + 1 = 18 行。
3. 對賬明細-微信
點擊上圖微信下面的最后一行,顯示如下界面。點擊下圖「上一周期」,顯示上一個自然周的對賬。
Q:何為「未平賬」,何為「已平賬」?
- 對賬狀態中,只要有異常未處理,稱為未平賬;
- 沒有異常未處理的,稱為已平賬,包括正常、異常已處理和異常已掛起。
參考文章
1. 詳細解析「財務對賬」的秘密https://zhuanlan.zhihu.com/p/42289649
2. 財務對賬系統設計
https://juejin.im/post/5b1c76f4e51d450688135cfd
3. 聊聊對賬系統的設計方案
https://juejin.im/post/5c485cd8f265da61327fa12f
4. 支付對賬系統怎么設計?
https://mp.weixin.qq.com/s/SOpwMsVB5wNkwMZdKKMkwg
5. 從0開始學習搭建支付系統——核算對賬核心
https://zhuanlan.zhihu.com/p/45492985
本文由 @四勾 4J 原創發布于人人都是產品經理。未經許可,禁止轉載。
題圖來自unsplash,基于CC0協議
大家有不明確的或者有疑問的,歡迎加我微信詳聊:vincent4j
看了您的文章很有收獲,可以加微信進一步溝通嗎,我的微信號15933556182,期待您的回復呀~
可以加我微信詳聊:vincent4j
請問掛起操作的目的是什么?對于掛起或者未處理的異常,都會參與到下一次的滾動對賬嗎?
掛起就是「來源于自己商城或平臺之外」的收入,比如說我們測試環境來的訂單,再比如說通過小鵝通賣課程自動轉到微信商戶里的。
掛起的是滾動對賬完畢之后,操作者確認是「來源于自己商城或平臺之外」的收入,掛起操作在滾動對賬之后。
未處理的異常,也是在滾動對賬之后,就是滾動對賬都對不平的。
如果還有疑問,直接加 vx vincent4j
非常感謝解答!
針對掛起的付款金額,會統計在應收金額里面嗎?
會,那也是收入的一部分
但是在統計收入展示的時候會分成多列:所有收入金額,其中掛起金額,其中異常未處理金額。
寫的不錯,很清晰啦
這種完全是通過第三方支付訂單號去對賬的么?有沒有一種可能,就是第三方支付訂單號匹配上然后金額不匹配,假設海豚系統可以修改金額,那么修改完之后如何下一步操作呢?還是沿用原有的人工處理異常流程么?如果采用,那么對賬的效率問題有沒有考慮過?
或者還有沒一種手工單的可能,那么這部分怎么對呢?
(這是暫時想到這么多問題,不知道實際有沒這個問題)
問題 1,金額對不上的情況,需要通過線下理清楚問題出在哪方是海豚方,還是微信方;如果是海豚方,修正訂單數據;如果是微信方,對付款人多退少補;然后再出發再次對賬。
問題 2:手工單也是需要導入業務系統的
有點混亂,表示沒看懂
可以具體說說,或者私聊我