賬戶系統(tǒng)設(shè)計(jì)從入門到精通

13 評論 25504 瀏覽 178 收藏 43 分鐘

導(dǎo)語:賬戶是支付交易的最基礎(chǔ)設(shè)施,由此可見其重要性。賬戶系統(tǒng)設(shè)計(jì)的核心不是設(shè)計(jì)本身,而是其的理念、規(guī)范以及基本原則。本文作者歸納總結(jié)了以往分散的賬戶類文章,并且附帶了后臺設(shè)計(jì)的幾頁關(guān)鍵頁面原型,希望可以幫助你從0到1全面掌握賬戶系統(tǒng)的設(shè)計(jì)方法。

一、第一部分:賬戶系統(tǒng)概述

賬戶體系是支付交易的基礎(chǔ),就像電池對于手機(jī),油罐對于加油站,心臟對于人體?那么這么核心的系統(tǒng)是不是很難設(shè)計(jì)呢,其實(shí)恰恰不難;這也印證了那樣一句話“大道至簡”。

1. 什么是賬戶

我們先看看標(biāo)準(zhǔn)定義:賬戶是根據(jù)會計(jì)科目設(shè)置的,具有一定格式和結(jié)構(gòu),用于反映會計(jì)要素的增減變動(dòng)情況及其結(jié)果的載體。

增減變動(dòng)的會計(jì)分錄的書寫規(guī)范:

  • 借:科目A 金額1
  • 貸:科目B 金額1

賬戶結(jié)構(gòu)規(guī)范:

賬戶的基本結(jié)構(gòu)應(yīng)同時(shí)具備以下內(nèi)容:

  1. 賬戶的名稱,即會計(jì)科目;
  2. 日期和摘要,即記載經(jīng)濟(jì)業(yè)務(wù)的日期和概括說明經(jīng)濟(jì)業(yè)務(wù)的內(nèi)容;
  3. 增加方和減少方的金額及余額;
  4. 憑證號數(shù),即說明記載賬戶記錄的依據(jù)。

賬戶系統(tǒng)設(shè)計(jì)從入門到精通

財(cái)務(wù)知識不是很充足的同學(xué)可能對以上的賬戶定義很難理解和繞口;我們從業(yè)務(wù)的角度來看賬戶,后面的電子賬戶我們都會從業(yè)務(wù)角度去看,拋棄財(cái)務(wù)視角。從業(yè)務(wù)視角來看賬戶,其實(shí)就是用于記錄某個(gè)主體的某類型資金的余額以及余額變動(dòng)明細(xì)的數(shù)據(jù)載體。

所以賬戶有3個(gè)關(guān)鍵的點(diǎn):

  1. 賬戶余額:這個(gè)賬戶有多少錢;
  2. 賬戶流水:這個(gè)賬戶資金進(jìn)進(jìn)出出的明細(xì)記錄;
  3. 賬戶交易:怎么把錢放進(jìn)去,怎么把錢取出來。

賬戶系統(tǒng)設(shè)計(jì)從入門到精通

抓住了上面3個(gè)點(diǎn)我們基本就抓住了賬戶設(shè)計(jì)的核心了,是不是很簡單?

基于這3個(gè)點(diǎn)去構(gòu)建賬戶的輔助設(shè)施,比如賬戶主體,賬戶種類,賬戶余額結(jié)構(gòu),賬戶流水的記錄字段,賬戶的功能權(quán)限,賬戶的出入賬,賬戶服務(wù)(賬戶開通注銷,凍結(jié)解凍,余額流水查詢等)等。

2. 賬戶的種類

從財(cái)務(wù)科目分類來看內(nèi)部賬戶,賬戶可以分資產(chǎn)類賬戶,負(fù)債類賬戶,損益類賬戶,共同類賬戶,然后就是不同的科目。

賬戶系統(tǒng)設(shè)計(jì)從入門到精通

但是站在業(yè)務(wù)的視角,我們更多是基于業(yè)務(wù)場景來對賬戶進(jìn)行命名,比如商戶的結(jié)算款會結(jié)算到商戶結(jié)算賬戶,支付公司在銀行開的賬戶叫備付金賬戶,備付金賬戶又分存管戶、收付戶、匯繳戶;個(gè)人賬戶、企業(yè)賬戶;會員子賬戶、商戶子賬戶、中間擔(dān)保戶。

賬戶系統(tǒng)設(shè)計(jì)從入門到精通

所以從賬戶命名上我們基本就知道了這個(gè)賬戶是干嘛用的;就像你有10張卡,一張是放工資的你叫他工資卡,一張是公積金的你叫公積金卡等等,所以這時(shí)候我們基于業(yè)務(wù)命名,目的是為了區(qū)分賬戶用途。

但是收回來我們發(fā)現(xiàn),無論賬戶叫什么名字,都是有賬戶余額、賬戶流水、賬戶交易。無論卡叫什么名字都是銀行卡,所以賬戶的本質(zhì)屬性不變,設(shè)計(jì)辦法基本相通,唯一會有不同的是附屬內(nèi)容,比如支出戶只能打款不能收款,中間擔(dān)保戶不能為負(fù)等等,權(quán)限不同,主體不同,交易特點(diǎn)不同…..

小樣,你以為穿個(gè)馬甲我就不認(rèn)識你啦,你裝錢的,能進(jìn)能出,記得明明白白;別管你叫啥我都知道怎么設(shè)計(jì),不管我叫你啥我都這么設(shè)計(jì)。

3. 賬戶的結(jié)構(gòu)

賬戶結(jié)構(gòu):

賬戶系統(tǒng)設(shè)計(jì)從入門到精通

  • 賬戶主體:這個(gè)賬戶是誰的,個(gè)人的?企業(yè)的?內(nèi)部業(yè)務(wù)線的?
  • 賬戶結(jié)構(gòu)樹:就像會計(jì)科目,就像商品類目,由于賬戶可能種類繁多所以有時(shí)也需要一個(gè)結(jié)構(gòu)樹,比如:

賬戶系統(tǒng)設(shè)計(jì)從入門到精通

  • 賬戶類型:賬戶的分類,比如個(gè)人賬戶/對公賬戶、結(jié)算賬戶/付款賬戶、收款賬戶/打款賬戶;
  • 賬戶名稱:錢多少不重要,名字一定要有氣質(zhì):陳老師全球通國際清算私房錢賬戶;
  • 賬戶余額:賬戶余額一般為了業(yè)務(wù)需要,會設(shè)計(jì)多個(gè)金額屬性,比如凍結(jié)金額,可用金額,可提金額;

賬戶系統(tǒng)設(shè)計(jì)從入門到精通

  • 賬戶流水:賬戶的資金變動(dòng)記錄,記錄對手賬戶,收支方向,金額,費(fèi)用類型等基本信息;

  • 賬戶服務(wù):開通/關(guān)閉、權(quán)限設(shè)置、入賬、扣賬、調(diào)賬、凍結(jié)/解凍、余額查詢、流水查詢;
  • 賬戶底線原則:支付成功才入賬,扣賬成功才出款,一分不少真安全。

4. 如何設(shè)計(jì)類型

賬戶名稱:結(jié)算戶,付款戶,支出戶

原則:名稱是便于區(qū)分業(yè)務(wù),賬戶本質(zhì)相同。就像有的公司叫產(chǎn)品經(jīng)理,有的公司就產(chǎn)品策劃,有的公司叫需求分析師,但本質(zhì)大家干的都是產(chǎn)品設(shè)計(jì)工作:

  • 基于主體類型命名賬戶:個(gè)人賬戶、企業(yè)賬戶;
  • 基于業(yè)務(wù)類型命名賬戶:電商商家結(jié)算戶、快遞商家結(jié)算戶;
  • 基于資金屬性命名賬戶:工資賬戶、公積金賬戶、手續(xù)費(fèi)賬戶;
  • 基于賬戶職能命名賬戶:待清算賬戶、中間擔(dān)保賬戶。

現(xiàn)在應(yīng)該清楚設(shè)計(jì)賬戶時(shí)如何給賬戶命名了吧,簡單易記,容易區(qū)分。

5. 賬戶的附屬設(shè)施

有了電池是不是還需要充電線,有了油罐是不是還得有加油設(shè)備、安全設(shè)備,同樣有了賬戶是不是還得有附屬模塊才能實(shí)現(xiàn)賬戶的資金管理職能。

費(fèi)用類型:每筆交易都有業(yè)務(wù)場景,比如下單付款、投訴罰款、用戶充值、余額提現(xiàn)、賬戶年費(fèi)等等,一個(gè)是為了讓用戶知道這是筆什么交易,另一個(gè)就是財(cái)務(wù)能夠知道編寫什么科目的會計(jì)憑證。

入賬規(guī)則:上游有業(yè)務(wù)系統(tǒng)比如賬務(wù)系統(tǒng)請求一筆費(fèi)用的入賬,那么如那個(gè)賬戶呢,收支方向如何呢?所以入賬規(guī)則就是來確定這筆入賬怎么入的問題,規(guī)則主要有2部分組成。

凍結(jié)規(guī)則:有些費(fèi)用入賬后是需要暫時(shí)凍結(jié)的,比如用戶領(lǐng)的活動(dòng)獎(jiǎng)金,必須在凍結(jié)7個(gè)工作日之后才能解凍;某業(yè)務(wù)線的商家結(jié)算收入,統(tǒng)一在次月15號可提走;所以一條入賬規(guī)則需要關(guān)聯(lián)一個(gè)凍結(jié)規(guī)則。

費(fèi)用/入賬規(guī)則/凍結(jié)規(guī)則關(guān)系:一個(gè)費(fèi)用入賬時(shí),可能記一筆賬,也可能記多筆;比如商戶傭金費(fèi)用,則會入兩筆賬:成本賬戶入一筆扣款,商家傭金賬戶入一筆收入;而扣款不用凍結(jié),收入需要凍結(jié)7天。

賬戶系統(tǒng)設(shè)計(jì)從入門到精通

對外服務(wù):任何系統(tǒng)都不是孤島,賬戶系統(tǒng)同樣,要將能力賦能給上游實(shí)現(xiàn)自己的價(jià)值;賬戶向外提供的服務(wù)基礎(chǔ)的應(yīng)該包含:開戶、注銷、查詢(余額、流水、狀態(tài))、交易(支付、退款、充值、提現(xiàn)、凍結(jié))等。

賬戶系統(tǒng)設(shè)計(jì)從入門到精通

賬戶管理后臺:賬戶系統(tǒng)需要提供一個(gè)業(yè)務(wù)后臺給到相關(guān)的運(yùn)營人員,財(cái)務(wù)等角色;后臺可以查看所有的賬戶以及賬戶的狀態(tài),所屬主體以及余額情況;還可以操作賬戶進(jìn)行注銷,還需要能夠查看所有的出入賬流水,配置相關(guān)費(fèi)用,配置入賬規(guī)則和凍結(jié)規(guī)則。

賬戶系統(tǒng)設(shè)計(jì)從入門到精通

6. 賬戶系統(tǒng)架構(gòu)圖

功能架構(gòu):

賬戶系統(tǒng)設(shè)計(jì)從入門到精通

業(yè)務(wù)架構(gòu):

賬戶系統(tǒng)設(shè)計(jì)從入門到精通

7. 賬戶入賬流程圖

賬戶系統(tǒng)設(shè)計(jì)從入門到精通

8. 賬戶系統(tǒng)后臺

上面基本已經(jīng)很清楚了,賬戶系統(tǒng)后臺頁面文章不再詳述,原型可以到星球進(jìn)行下載。

9. 賬戶的應(yīng)用

賬戶除了管錢之外還可以在此之上構(gòu)建一些應(yīng)用產(chǎn)品比如下面這兩個(gè):

  • 錢包:像微信錢包,就是用戶的一個(gè)虛擬賬戶,在錢包里可以看到余額,可以充值余額,也可以將余額里的錢提現(xiàn)到銀行卡;
  • 余額支付:賬戶可以作為一種支付方式,包裝出一個(gè)支付通道,利用平臺自己的賬戶進(jìn)行平臺商品的購買支付,當(dāng)然這個(gè)要考慮合規(guī)性。

10. 合規(guī)淺談

果然最后說的都是重頭戲,賬戶作為一種資金池形態(tài),要嚴(yán)格做好其合規(guī)性,如果平臺沒有資質(zhì)牌照,那么自建可以但是用戶賬戶的真實(shí)資金一定要放到監(jiān)管賬戶當(dāng)中進(jìn)行監(jiān)管,避免違規(guī)沉淀資金池,其他合規(guī)風(fēng)險(xiǎn)讀者朋友們自己思考一下吧。

二、第二部分:賬戶主體

賬戶本身記錄的是資產(chǎn)或者負(fù)債或者費(fèi)用,那么必然就需要一個(gè)主體承載,誰的錢,誰的債,誰的費(fèi)用,誰的愛!世界上沒有一片樹葉沒有歸屬,就算秋風(fēng)落了葉,那它要不屬于天空或是歸屬大地,所以賬戶歸于誰,而這個(gè)誰是誰就是今天我們要聊的主體。

1. 什么是主體

主體可以是人,可以是公司,可以是一個(gè)組織,我們暫且認(rèn)為主體就是一個(gè)具有基本特征和屬性的一個(gè)可定義的對象。

2. 主體的廣義定義

基于對象出發(fā),那么主體可以認(rèn)為是自然界存在的實(shí)體物質(zhì)和虛無的對象;比如一個(gè)人是一個(gè)主體,一個(gè)公司是一個(gè)主體,一個(gè)組織是一個(gè)主體;公司的一條業(yè)務(wù)線是一個(gè)主體,公司的一個(gè)部門也是一個(gè)主體,一個(gè)城市也是一個(gè)主體,一座房子也是一個(gè)主體等等。

那么這么多主體有什么意義呢,其實(shí)就是說明賬戶的主體可以非常廣義,比如一個(gè)城市的GDP,可以通過一個(gè)統(tǒng)計(jì)報(bào)表得到,同樣也可以為每個(gè)城市設(shè)置一個(gè)GDP賬戶,那么這個(gè)賬戶的主體就是一座城市;北京GDP賬戶2020年年末余額4萬億!

所以主要是一個(gè)可以被定義的對象,我們就可以將它作為賬戶的主體來管理,就可以為之開通某種意義上的賬戶,賬戶也可以是廣義的,不只是金錢余額,也可以是水量余額,點(diǎn)量余額,好感度余額等等,從而賬戶的廣義我們是不是就可以認(rèn)為:賬戶可以記錄一個(gè)可被量化的數(shù)量以及變化過程的記錄工具;那么我們就可以用賬戶的設(shè)計(jì)理念去設(shè)計(jì)更多的事物的數(shù)量以及變化過程。

3. 狹義賬戶主體

我們回歸賬戶主體本身,就是賬戶的歸屬對象。最常見的主體就是個(gè)人和企業(yè),銀行卡的主體有個(gè)人主體和法人主體。

對于一個(gè)公司內(nèi)部來說為了經(jīng)營分析或者管理的需要又會虛擬出更多的主體類型,比如營銷賬戶的這類費(fèi)用賬戶的主體可以是業(yè)務(wù)線或者部門或者小組,來記錄部門和小組的預(yù)算以及預(yù)算的消耗:

  • 站在人民銀行的角度看賬戶主體我們知道就是:網(wǎng)聯(lián)、銀聯(lián)、各商業(yè)銀行、各城市處理中心、各特批處理機(jī)構(gòu)等;
  • 站在銀行角度看銀行賬戶主體就是:個(gè)人、企業(yè)、支付機(jī)構(gòu)等;
  • 站在一個(gè)普通企業(yè)看賬戶主體就是:個(gè)人用戶、企業(yè)用戶、內(nèi)部業(yè)務(wù)線、子公司等。

4. 主體的唯一ID

就像個(gè)人我們的唯一ID可以是身份證,我們在開銀行卡的時(shí)候就是用的身份證ID作為這個(gè)主體的唯一ID,在辦理社保的時(shí)候也是用身份證ID作為身份的唯一ID;唯一ID的條件就是能夠唯一識別這個(gè)主體。

比如個(gè)人的唯一ID可以是身份證,手機(jī)號,社保號,一個(gè)平臺的userID及時(shí)在這個(gè)平臺的唯一ID;企業(yè)的唯一ID可以是統(tǒng)一社會信用編號,也可以是對公戶的卡號等;如果企業(yè)入駐了一個(gè)平臺那么這個(gè)平臺為這個(gè)企業(yè)生成的企業(yè)編碼也可以唯一識別這個(gè)企業(yè)。

唯一ID的用途就是唯一識別這個(gè)主體,但是有時(shí)候可能這個(gè)主體的唯一身份ID不夠用,比如這個(gè)人在淘寶即是個(gè)人用戶又是商家用戶,那么他在開戶時(shí)可能就不能只用身份證了,而是用userID 去開付款戶 和bussid 去開結(jié)算戶。

5. 主體的身份認(rèn)證

安全起見,我們需要核查主體的身份,像銀行開戶需要本人到場+身份證核驗(yàn);二類戶的開通需要多要素鑒權(quán)識別主體身份的合法性,對于企業(yè)來說企業(yè)的營業(yè)執(zhí)照,法人簽字,蓋章或者對公戶小額打款來驗(yàn)證企業(yè)的真實(shí)身份。

6. 主體的創(chuàng)建

對于一個(gè)平臺而言,其賬戶系統(tǒng)的主體無非以下幾種:

  • 個(gè)人用戶:具有身份證或者手機(jī)號唯一識別的一個(gè)自然人個(gè)體;
  • 企業(yè)用戶:具有企業(yè)信用編號唯一識別的一個(gè)法人主體;
  • 內(nèi)部主體用戶:為了管理需要內(nèi)部的子公司主體或者業(yè)務(wù)線主體或者部門;
  • 主體下業(yè)務(wù)線子用戶:一個(gè)子公司下面的一個(gè)業(yè)務(wù)線或者部門。

所以我們在創(chuàng)建主體的同時(shí)就需要定義每一類主體的唯一識別ID,在開戶的時(shí)候,就需要使用這個(gè)唯一識別ID作為賬戶主體的唯一識別ID。

7. 主體的信息管理

一個(gè)平臺的各類主體信息一般是放在用戶中心或者crm系統(tǒng),這些系統(tǒng)去調(diào)用賬戶中心進(jìn)行開戶,在這些系統(tǒng)內(nèi)對于一個(gè)主體我們需要管理他的基本信息。

比如ID信息、屬性信息、權(quán)限信息、關(guān)系信息,有什么信息就增加字段管理即可,也可以將信息分類,每一類記錄的不同的表中,比如身份信息、認(rèn)證信息、賬戶開通信息等。

賬戶系統(tǒng)設(shè)計(jì)從入門到精通

8. 為主體開戶

有了主體以后,賬戶的開通可以是人工也可以是上游系統(tǒng)調(diào)用開戶接口開通相關(guān)賬戶和賬戶權(quán)限。

賬戶系統(tǒng)設(shè)計(jì)從入門到精通

比如接口要傳入下面的信息:

  • 入?yún)?/li>
  • 主體ID:123
  • ID類型:userid
  • 用戶類型:個(gè)人
  • 用戶姓名:張三
  • 開通賬戶類型:傭金賬戶
  • 賬戶特殊要求:可付款

請求成功后賬戶系統(tǒng)就會先在賬戶主體表中插入基本主體信息,如果需要其他信息,在后面加字段即可。

賬戶系統(tǒng)設(shè)計(jì)從入門到精通

根據(jù)主體ID可以去賬戶表查詢開通的所有賬戶,然后基于開戶請求我們在賬戶中心表中創(chuàng)建對應(yīng)的賬戶,賬戶中心表中要有主體的用于開戶唯一ID。

同時(shí)在賬戶余額表中創(chuàng)建賬戶余額:

同時(shí)在賬戶的權(quán)限表中設(shè)置賬戶權(quán)限:

賬戶中心經(jīng)過一些列的處理后賬戶就開通了,然后返回給開戶方:

  • 出參
  • 開戶結(jié)果:開通成功

我們從上面的開戶過程可以看出來,賬戶內(nèi)部和主體之間是一個(gè)復(fù)雜的對應(yīng)關(guān)系。

9. 主體與賬戶的關(guān)系

通過8我們知道,主體和賬戶以及賬戶內(nèi)部有復(fù)雜的對應(yīng)關(guān)系:主體vs賬戶是一對多的關(guān)系,一個(gè)主體可以開通多個(gè)賬戶,每一個(gè)賬戶又會關(guān)聯(lián)余額表、權(quán)限表、流水表。

賬戶系統(tǒng)設(shè)計(jì)從入門到精通

主體的開戶ID去關(guān)聯(lián)賬戶的賬戶ID,賬戶ID去關(guān)聯(lián)賬戶的余額表中的余額,權(quán)限表中的權(quán)限。

三、第三部分:賬戶結(jié)構(gòu)

1.? 簡單賬戶結(jié)構(gòu)

賬戶結(jié)構(gòu)一個(gè)是本身的結(jié)構(gòu)有什么組成,另一個(gè)就是賬戶體系內(nèi)賬戶與賬戶之間的構(gòu)成模型,我們主要說后者,我們看幾個(gè)最簡單的賬戶結(jié)構(gòu):

只有一類賬戶,比如整個(gè)賬戶系統(tǒng)只有一類賬戶:張三-工資賬戶

賬戶系統(tǒng)設(shè)計(jì)從入門到精通

有多個(gè)類型的賬戶,比如下圖,但本質(zhì)上依然很簡單,很容易管理

賬戶系統(tǒng)設(shè)計(jì)從入門到精通

2. 簡單余額結(jié)構(gòu)

余額結(jié)構(gòu)就是針對賬戶內(nèi)部來說,賬戶的余額如何劃分,就像火鍋,有一個(gè)鍋、鴛鴦鍋、九宮格一樣,賬戶作為一個(gè)容器,其內(nèi)部依然可以劃分成多個(gè)存儲空間。

只有一個(gè)余額的余額結(jié)構(gòu),你會發(fā)現(xiàn)微信錢包的余額就只有一個(gè),有多少就是多少,簡單粗暴。

這樣的余額結(jié)構(gòu)必然支持的交易種類就很簡單、收入、支出,無法支撐其他的針對余額的處理。

3. 復(fù)雜賬戶結(jié)構(gòu)

隨著業(yè)務(wù)的復(fù)雜度增加,各類功能性以及運(yùn)營需求增加,簡單的賬戶結(jié)構(gòu)開始變得復(fù)雜,以支撐更復(fù)雜的業(yè)務(wù)模型,比如紅包可能每個(gè)業(yè)務(wù)線都要推出一種紅包營銷形態(tài),比如保險(xiǎn)業(yè)務(wù)線,游戲業(yè)務(wù)線。

而紅包又被拆分成了現(xiàn)金紅包,虛擬幣紅包等這樣的話紅包賬戶結(jié)構(gòu)就成了多層級的賬戶結(jié)構(gòu),如下:

賬戶系統(tǒng)設(shè)計(jì)從入門到精通

看著是不是很像會計(jì)科目的結(jié)構(gòu),最下一層是不是很像葉子科目,當(dāng)然第二層和第三層換一下位置也可以;這種情況下賬戶結(jié)構(gòu)就很復(fù)雜了,而且自然存在了總賬戶和明細(xì)賬戶之分。

還有一種是賬戶結(jié)構(gòu)分總分機(jī)構(gòu),但二級賬戶的種類繁多,功能劃分較細(xì),這類賬戶結(jié)構(gòu)具有支撐復(fù)雜的記賬能力,以及業(yè)務(wù)處理能力,這類賬戶結(jié)構(gòu)常見在二清監(jiān)管戶體系,比如下面具有眾多子賬戶的賬戶體系,協(xié)同完成資金的監(jiān)管和分賬職能。

賬戶系統(tǒng)設(shè)計(jì)從入門到精通

一朋友咨詢我人力資源代理平臺的賬戶該如何設(shè)計(jì),業(yè)務(wù)模型就是平臺幫助很多企業(yè)代收代發(fā)工資,并且支付公積金和社保等多種資金款項(xiàng),我設(shè)計(jì)了四個(gè)方案,你覺得那個(gè)方案好呢?

賬戶系統(tǒng)設(shè)計(jì)從入門到精通

賬戶系統(tǒng)設(shè)計(jì)從入門到精通

賬戶系統(tǒng)設(shè)計(jì)從入門到精通

賬戶系統(tǒng)設(shè)計(jì)從入門到精通

4. 復(fù)雜余額結(jié)構(gòu)

因?yàn)橘Y金清算周期或者業(yè)務(wù)流轉(zhuǎn)節(jié)點(diǎn)多,或者其他風(fēng)控要求,需要對賬戶余額進(jìn)行復(fù)雜的處理操作,比如有的能提,有的不能提,最常見的結(jié)構(gòu)就是三個(gè)余額屬性:

核算恒等式:總余額=凍結(jié)余額+可用余額,這樣的話,就可以對賬戶余額進(jìn)行一些處理,比如發(fā)的紅包7天后才能提現(xiàn),那么紅包入賬戶時(shí)就會先入凍結(jié)余額,7日后解凍之可用余額。

5.賬戶結(jié)構(gòu)和余額結(jié)構(gòu)的關(guān)系

從上面我們可以看到,賬戶可以分多級,余額可以分多塊,那么有什么關(guān)系呢?

  • 多級之間:x級總賬戶總余額=sum( x-1 級子賬戶所有賬戶總余額之和 )
  • 某個(gè)賬戶:總賬戶余額=凍結(jié)余額+可用余額

上面另個(gè)恒等式可以用于校驗(yàn)賬戶系統(tǒng)記錄的合法性,是不是覺得跟會計(jì)系統(tǒng)科目之間的試算平衡很類似。

6.賬戶管理表的設(shè)計(jì)

通過前面的賬戶主體,賬戶結(jié)構(gòu),賬戶余額結(jié)構(gòu),我們基本可以設(shè)計(jì)出賬戶表的基本字段了,只要包含這幾部分信息:賬戶主體信息、賬戶結(jié)構(gòu)信息、余額信息、賬戶狀態(tài)信息,我們設(shè)計(jì)如下,除了核心字段以外,其他想展示的字段可以去相關(guān)表中查詢,比如主體姓名,可以用主體ID去主體表中查詢。

賬戶系統(tǒng)設(shè)計(jì)從入門到精通

7. 余額的變化

我們簡單說一下,后面在將流水和余額更新時(shí)會細(xì)講;賬務(wù)請求賬戶入賬時(shí),基于凍結(jié)規(guī)則我們可以知道該筆入賬是否需要凍結(jié),如果需要凍結(jié)的話就更新凍結(jié)余額,后面再解凍,如果不需要凍結(jié)的話就直接更新可用余額。

賬戶系統(tǒng)設(shè)計(jì)從入門到精通

作業(yè):思考一下,如果你是螞蟻財(cái)富的賬戶產(chǎn)品經(jīng)理,你會如何設(shè)計(jì)賬戶結(jié)構(gòu)和余額結(jié)構(gòu),來滿足業(yè)務(wù)模型呢?歡迎在產(chǎn)品群或者星球提交作業(yè)?。▊渥⑿⌒挠锌优叮?/p>

賬戶系統(tǒng)設(shè)計(jì)從入門到精通

四、第四部分:費(fèi)用管理和入賬配置

有了賬戶那么賬戶里就需要存入和存出,充值和提現(xiàn),轉(zhuǎn)賬和消費(fèi);這樣賬戶才會流動(dòng)起來,才有了生命力;那么在交易場景里費(fèi)用就顯得十分重要了,多少錢,什么費(fèi)……我們以滴滴司機(jī)的結(jié)算賬戶為例來討論本節(jié)內(nèi)容。

1. 交易場景

任何一筆收支都依賴于一個(gè)場景,而且這個(gè)場景基本涵蓋所有后續(xù)清結(jié)算的信息,比如用戶叫了一輛快車,張師傅接了單子,從立水橋南到奧森公園;這就是一個(gè)交易場景,我們可以稱為”快車打車場景“,在這個(gè)場景下我們可以知道用戶是誰,在哪打的車,什么車型,起步價(jià)多少,每公里多少,司機(jī)是誰等。

如果車到了,超過了4分鐘用戶不用車取消了,那么這時(shí)候就需要支付一個(gè)取消費(fèi)用,這又是一個(gè)場景,我們可以稱為“超時(shí)取消場景”,我們將平臺的所有交易場景進(jìn)行枚舉,如果要新增場景,那么要預(yù)先在場景中心申請場景編號,才能開展上線業(yè)務(wù)。

2. 費(fèi)用

在上面的場景中,就會產(chǎn)生交易,因此產(chǎn)生一些列的費(fèi)用,比如打車單訂單費(fèi)用,完單后要給司機(jī)做結(jié)算就有了訂單結(jié)算費(fèi)用,平臺要抽取一定服務(wù)費(fèi)就有了“平臺服務(wù)費(fèi)用”,如果高峰期給司機(jī)發(fā)一定補(bǔ)貼的話就有了“高峰補(bǔ)貼費(fèi)”等等。

費(fèi)用就是站在業(yè)務(wù)角度定義資金的業(yè)務(wù)屬性,基于業(yè)務(wù)側(cè)的費(fèi)用我們可以關(guān)聯(lián)到后續(xù)的財(cái)務(wù)科目,這樣的話費(fèi)用是從業(yè)務(wù)發(fā)生那一刻就產(chǎn)生并且定義了,而且最后關(guān)聯(lián)到會計(jì)科目,這樣業(yè)務(wù)和財(cái)務(wù)實(shí)現(xiàn)信息一體,對于業(yè)務(wù)記賬以及轉(zhuǎn)財(cái)務(wù)賬提供巨大的遍歷。

賬戶系統(tǒng)設(shè)計(jì)從入門到精通

3. 計(jì)算

這需要一個(gè)強(qiáng)大的計(jì)算系統(tǒng),我們在支付系列清結(jié)算模塊會做重點(diǎn)介紹,這里點(diǎn)到為止。下單前的預(yù)計(jì)算,為用戶選擇起點(diǎn)和重點(diǎn)后預(yù)先計(jì)算可能需要的訂單費(fèi)用。

賬戶系統(tǒng)設(shè)計(jì)從入門到精通

進(jìn)行中的實(shí)時(shí)計(jì)算,這個(gè)大家都打過車就不再說了,結(jié)束后的計(jì)算,計(jì)算出本單實(shí)際產(chǎn)生的費(fèi)用。

賬戶系統(tǒng)設(shè)計(jì)從入門到精通

我們可以看出訂單總費(fèi)用包含三部分:起步價(jià)+里程費(fèi)+時(shí)長費(fèi);你可能會問,一個(gè)訂單為什么要拆成這么多費(fèi)用呢?

我們簡單想一下,這三個(gè)費(fèi)用的特點(diǎn),而且這三個(gè)費(fèi)用在不同的城市,不同的時(shí)段,不同的用戶,不同的車型都會發(fā)生變化,所以我們可以理解為,費(fèi)用的細(xì)化是精細(xì)化運(yùn)營的必然結(jié)果,另外用戶也需要知道為什么收這么多錢。

訂單的清結(jié)算,訂單完結(jié)后就需要給司機(jī)做結(jié)算,那么還需要進(jìn)行一次計(jì)算,那就是這一單應(yīng)該給司機(jī)多少錢,平臺抽多少錢,要不要實(shí)時(shí)扣稅,有沒有其他費(fèi)用,比如保險(xiǎn)費(fèi),我們得出如下的清算結(jié)果。

賬戶系統(tǒng)設(shè)計(jì)從入門到精通

4. 賬戶結(jié)構(gòu)和余額結(jié)構(gòu)

簡單點(diǎn),每個(gè)司機(jī)只有一個(gè)結(jié)算賬戶,在某支付平臺開通的二類支付賬戶,沒有其他類型的賬戶,接單的收入,補(bǔ)貼獎(jiǎng)金全部結(jié)算到該賬戶,司機(jī)可以進(jìn)行提現(xiàn)。

賬戶系統(tǒng)設(shè)計(jì)從入門到精通

因?yàn)闉榱孙L(fēng)控客訴問題,我們?yōu)樗緳C(jī)設(shè)置一個(gè)7天的訂單結(jié)算凍結(jié)期,這樣的話我們的賬戶余額分成了凍結(jié)余額和可用余額,可用余額可以用于提現(xiàn)。

5. 費(fèi)用管理設(shè)計(jì)

上面我們講了交易場景和費(fèi)用的定義,現(xiàn)在我們就來設(shè)計(jì)費(fèi)用費(fèi)用管理,設(shè)計(jì)費(fèi)用有三個(gè)關(guān)鍵點(diǎn):費(fèi)用編碼、費(fèi)用名稱、費(fèi)用結(jié)構(gòu)。

這里的設(shè)計(jì)辦法有2種:

一級枚舉型:就是費(fèi)用之間沒有關(guān)系,對所有費(fèi)用進(jìn)行枚舉,有規(guī)律設(shè)置編碼。

賬戶系統(tǒng)設(shè)計(jì)從入門到精通

多級結(jié)構(gòu):就是像會計(jì)科目一樣,有總科目,明細(xì)科目,明細(xì)科目可以設(shè)置多級。

賬戶系統(tǒng)設(shè)計(jì)從入門到精通

以上兩種方式可能第二種更好一些,特別是在核算和統(tǒng)計(jì)時(shí),可以進(jìn)行總分分別進(jìn)行統(tǒng)計(jì)分析和核算。

6. 入賬規(guī)則管理

我們設(shè)置好了費(fèi)用,那么在每個(gè)節(jié)點(diǎn)都會產(chǎn)生費(fèi)用,或者計(jì)算出相關(guān)的費(fèi)用,比如司機(jī)收入,那么清分之后就需要計(jì)入相關(guān)的賬戶,比如司機(jī)收入要計(jì)入司機(jī)的結(jié)算賬戶。

那么還可能一個(gè)費(fèi)用要計(jì)入多個(gè)賬戶,比如復(fù)試記賬時(shí),又比如司機(jī)獎(jiǎng)金可能要同時(shí)計(jì)入平臺的運(yùn)營賬戶和司機(jī)的結(jié)算賬戶。

賬戶系統(tǒng)設(shè)計(jì)從入門到精通

入賬規(guī)則設(shè)計(jì)有兩個(gè)關(guān)鍵點(diǎn):

一個(gè)是匹配條件:要基于入賬請求傳參的條件來匹配到相關(guān)的入賬規(guī)則條目,比如我們需要定義每類記賬請求需要什么條件,比如司機(jī)收入入賬,一個(gè)條件就夠了。

另一個(gè)是入賬規(guī)則就是這個(gè)條目指定入什么賬戶,比如司機(jī)收入匹配到的規(guī)則應(yīng)該是要入司機(jī)結(jié)算賬戶,則入賬規(guī)則是:

  • 賬戶主體:司機(jī)
  • 主體ID:司機(jī)ID
  • 賬戶類型:結(jié)算賬戶

這樣我們就得到了一條入賬配置規(guī)則:

賬戶系統(tǒng)設(shè)計(jì)從入門到精通

基于上面的規(guī)則,上游系統(tǒng)在申請入賬時(shí)必須傳幾個(gè)參數(shù):費(fèi)用類型,主體類型,主體id;基于司機(jī)收入這個(gè)費(fèi)用,我們就匹配出一條規(guī)則,應(yīng)該入司機(jī)的結(jié)算賬戶,利用司機(jī)ID找到相關(guān)的結(jié)算賬戶ID然后計(jì)入賬戶。

賬戶系統(tǒng)設(shè)計(jì)從入門到精通

五、第五部分:凍結(jié)配置與賬戶流水

當(dāng)業(yè)務(wù)系統(tǒng)請求入賬以后基于費(fèi)用類型以及入賬規(guī)則我們就可以知道應(yīng)該入哪個(gè)賬戶;這時(shí)候問題就來了,因?yàn)橘~戶余額也是分結(jié)構(gòu)的,有凍結(jié)和可用,那么要是想先凍結(jié)起來怎么辦呢?

我們先回顧一下上一篇的最后一個(gè)圖,在凍結(jié)處理里我畫了一個(gè)虛線圈,本篇文章我們就把他做實(shí)了。

賬戶系統(tǒng)設(shè)計(jì)從入門到精通

1. 凍結(jié)規(guī)則

我們在賬戶系統(tǒng)設(shè)計(jì)詳解里講過凍結(jié)模塊,這里我們再細(xì)講一下;凍結(jié)就是一個(gè)費(fèi)用請求入賬時(shí)要基于業(yè)務(wù)要求決定需不需要暫時(shí)凍結(jié)起來,還是直接就可以使用;那么如何設(shè)計(jì)凍結(jié)規(guī)則呢?

凍結(jié)規(guī)則是基于入賬規(guī)則設(shè)置的,也就是這筆入賬需不需要凍結(jié),如何凍結(jié),是全部凍結(jié)還是部分凍結(jié),這里我們以全部凍結(jié)為例。

所以一個(gè)入賬規(guī)則要關(guān)聯(lián)一個(gè)凍結(jié)規(guī)則,入賬的時(shí)候就需要同時(shí)獲取凍結(jié)規(guī)則;入賬規(guī)則和凍結(jié)規(guī)則是一對一的關(guān)系,費(fèi)用類型和入賬規(guī)則是一對多的關(guān)系。

賬戶系統(tǒng)設(shè)計(jì)從入門到精通

凍結(jié)規(guī)則有2部分組成,一個(gè)是關(guān)聯(lián)的入賬規(guī)則;另一個(gè)是凍結(jié)規(guī)則,也就是說在配置入賬規(guī)則的同時(shí)就需要關(guān)聯(lián)性的去配置一條凍結(jié)規(guī)則。

賬戶系統(tǒng)設(shè)計(jì)從入門到精通

凍結(jié)規(guī)則的配置有幾個(gè)關(guān)鍵點(diǎn):

  • 凍結(jié)模式:就是按照固定時(shí)長凍結(jié)還是凍結(jié)到固定時(shí)間點(diǎn);
  • 凍結(jié)時(shí)間:如果選擇固定時(shí)長的話就填一個(gè)時(shí)間值,如果是固定時(shí)間的話就選擇一個(gè)可循環(huán)的時(shí)間點(diǎn)函數(shù),比如次月10號,就配置成M+1月10號。

2. 賬戶流水

賬戶有2個(gè)核心部分組成,一個(gè)是賬戶余額我們已經(jīng)講過了,另一個(gè)就是賬戶流水,賬戶流水就是記錄了賬戶的變動(dòng)歷史明細(xì),我們收窄為“資金的變動(dòng)明細(xì)”。為了記錄資金的變動(dòng)明細(xì),我們就需要記錄最基本的明細(xì)信息,一般必須包含以下信息:

  • 賬務(wù)流水號:作為該筆明細(xì)的唯一標(biāo)識
  • 請求ID:請求入賬方的ID,便于后續(xù)的核算
  • 賬戶ID:這筆流水屬于哪個(gè)賬戶(會計(jì)記賬就是科目編號)
  • 費(fèi)用類型:這筆流水是什么費(fèi)用
  • 金額:發(fā)生額
  • 剩余余額:這筆流水發(fā)生后的賬戶余額
  • 收支:支出,收入,這筆流水是增加余額還是減少余額(同會計(jì)分錄的借貸)
  • 賬務(wù)發(fā)生時(shí)間:記賬時(shí)間
  • 會計(jì)時(shí)間:作為業(yè)務(wù)口徑和財(cái)務(wù)口徑轉(zhuǎn)換的時(shí)間(非必須)
  • 備注:業(yè)務(wù)備注信息
  • 凍結(jié)狀態(tài):凍結(jié)的管理
  • 操作:凍結(jié)/解凍

這樣我們就將業(yè)務(wù)的記賬請求通過入賬規(guī)則處理,凍結(jié)規(guī)則處理,進(jìn)入到賬戶系統(tǒng)并且生成賬戶流水了

賬戶系統(tǒng)設(shè)計(jì)從入門到精通

3.更新賬戶余額

這里有一個(gè)賬務(wù)處理任務(wù)流,每筆入賬都需要從頭執(zhí)行到尾,不能遺漏,任何一個(gè)處理失敗了這筆入賬就宣布失敗進(jìn)行入賬的失敗處理,我們先設(shè)定一個(gè)最簡單的任務(wù)流:

  • 檢查賬戶流水合法性通過
  • 賬戶流水表插入賬戶流水 完成
  • 基于賬戶流水信息更新余額表對應(yīng)賬戶的凍結(jié)余額或者可用余額完成
  • 賬戶ID:
  • 總余額=總余額+本次發(fā)生額 凍結(jié)余額=凍結(jié)余額+本次發(fā)生額(凍結(jié)時(shí))
  • 可用余額=可用余額+本次發(fā)生額(不凍結(jié)時(shí))
  • 自洽校驗(yàn):總余額=凍結(jié)余額+可用余額 通過
  • 入賬成功

經(jīng)過一些列的處理,入賬成功了,通知請求方,本次入賬結(jié)束。

4. 余額解凍

因?yàn)槿胭~的時(shí)候有的流水處于凍結(jié)狀態(tài),那么我們就需要按照凍結(jié)的規(guī)則進(jìn)行解凍,這時(shí)候就需要一個(gè)凍結(jié)解凍處理的任務(wù)進(jìn)行掃描執(zhí)行。

至于掃描的模式要基于凍結(jié)模式去設(shè)計(jì),我們以凍結(jié)固定時(shí)長最小單位為天為例,那么任務(wù)就需要每日凌晨去掃描遍歷所有處于凍結(jié)狀態(tài)的賬戶流水,滿足解凍條件的變更凍結(jié)狀態(tài)為未凍結(jié),然后對余額進(jìn)行處理;這又是一個(gè)處理的任務(wù)流。

賬戶系統(tǒng)設(shè)計(jì)從入門到精通

  • 任務(wù)掃描遍歷凍結(jié)狀態(tài)的賬戶流水
  • 滿足條件的賬戶流水變更凍結(jié)狀態(tài)為未凍結(jié)狀態(tài)
  • 扣減賬戶的凍結(jié)余額并同時(shí)增加賬戶的可用余額
  • 解凍完成

六、第六部分:后臺設(shè)計(jì)

1. 賬戶列表

賬戶系統(tǒng)設(shè)計(jì)從入門到精通

2. 賬戶信息管理

賬戶系統(tǒng)設(shè)計(jì)從入門到精通

3. 賬戶流水管理

賬戶系統(tǒng)設(shè)計(jì)從入門到精通

 

作者:陳曉光,一個(gè)會彈吉他會算命的產(chǎn)品經(jīng)理老司機(jī),微信公眾號:陳天宇宙

本文由 @陳天宇宙 原創(chuàng)發(fā)布于人人都是產(chǎn)品經(jīng)理。未經(jīng)許可,禁止轉(zhuǎn)載

題圖來自Unsplash,基于CC0協(xié)議

更多精彩內(nèi)容,請關(guān)注人人都是產(chǎn)品經(jīng)理微信公眾號或下載App
評論
評論請登錄
  1. tql

    來自上海 回復(fù)
  2. 太棒了,看完了

    來自上海 回復(fù)
  3. 怎么加入知識星球呀,求求求

    來自福建 回復(fù)
  4. 講的很透徹

    來自浙江 回復(fù)
  5. 一個(gè)字,絕!

    來自廣東 回復(fù)
  6. 大佬,求原型

    來自北京 回復(fù)
  7. 雖然是技術(shù)的,但是 面對如此優(yōu)秀的大神,也要虛心學(xué)習(xí)產(chǎn)品。

    來自浙江 回復(fù)
  8. 好文先收藏

    來自上海 回復(fù)
  9. 學(xué)習(xí)了

    回復(fù)
  10. 非常全面的文章,感謝分享

    回復(fù)
  11. 很全很詳細(xì) ,也很容易理解。三大主體:賬戶、流水、交易;兩大配置:入賬規(guī)則和凍結(jié)規(guī)則;兩大業(yè)務(wù):入賬、解凍。

    來自廣西 回復(fù)
  12. 來自山東 回復(fù)
  13. 這么厲害的文章,居然每人評論,占個(gè)沙發(fā),大佬厲害的

    來自上海 回復(fù)