【瞎扯專欄】會計科目的數字進位系統設計

會計資訊系統的設計,一開始遭遇的「會計科目」系統,是一個迷人的題目。我說會計科目是「系統」,因為它是一組獨立、完整的數字標記、運算、以及對應的系統。

學習國內的會計科目,會學到包含有大、中、小分類的編目代號,以及分類名稱。而整體來說,會計科目系統有下列性質:

  1. 編目代號是序數 (ordinal numbers) 系統。
  2. 一組編目代號可以透過加一個基數 (cardinal number) 或減一個基數,得到另一組編目代號。這個性質包含有同一分類內的轉換,與跨越分類之間的轉換。
  3. 一組編目代號對應到科目名稱,並且可能也對應到科目名稱的說明。
  4. 一組小分類編目代號之後可以銜接新的序數,並且後者為極小分類的編目代號。

同時,會計科目系統需要有下列的操作:

  1. 由編目代號可以找到科目名稱。
  2. 由科目名稱可以找到編目代號。

簡單說,會計科目系統包含一套數字進位系統與一套文數對應系統,後者純粹是 key-value ,很簡單,而前者則是每一數位的可進位範圍可能與其他數位不同的數字進位系統。

日期時間系統,是與會計科目的數字進位系統極為類似的系統。從原型來說,日期時間就是一組六項值組 (6-tuple) ,標示年、月、日、時、分、秒,可進位範圍依序為整數、 1~12 、 1~(28|29|30|31) 、 0~23 、 0~59 、 0~59 。

會計科目,則是一組四項值組,標示大、中、小、細分類,可進位範圍依序為非零正整數、非零正整數、非零正整數、非零正整數。根據會計實務,四項值組的每一項之可進位範圍都不固定,並且,某一大分類的某一進位數之子分類的可進位範圍,可能與同一大分類的另一進位數之子分類的可進位範圍,彼此不同。

實務設計:

  1. 數字進位系統:需劃分為兩群:實值與限制值。前者是四項值組,而後者是由二群四項值組的 key-value 配對, key 是每一分類之可進位範圍的上限, value 是若實值與 key 相同,所進位到的下一組四項值組。
    • 進位規則是,如果實值碰到上限,則跳躍到下一個實值,否則,實值加一個基數而進位到下一個實值。
    • 對任一編目代號而言,經過限制值的 key-value 引導之後,可能會跳到同一分類的下一個編目代號,或者跳到上層或下層分類。
    • 限制值的 key-value 系統需要經常清理冗餘紀錄。
  2. Key-Value 系統:用 Python 的 dictionary 、 Java 的 HashTable 等等資料結構。
    • 關於反向查詢,如果 key-value 以有序配對 (ordered pair) 定義,如 (1111, 現金) ,則將它定義為巢狀結構 (1111, (現金, 1111)) 則能支援反查。 1111 為數字進位系統中的實值,應表達為 (1, 1, 1, 1) 。
廣告

About 黃耀賢 (Yau-Hsien Huang)

熱愛 Erlang ,並且有相關工作經驗。喜歡程式語言。喜歡邏輯。目前用 Python 工作。
本篇發表於 Problem 並標籤為 。將永久鏈結加入書籤。