看了“XXX地方稅務局社會保險費報表採集系統”,僅僅是一些簡易功能,並不是站在使用者的角度去考慮問題;也許是項目發包方本身不是使用者的原因造成。一個核心功能盡然沒有:名單核對!不經感慨:有技術實力的接不到單子,這是一個值得思考的問題。
如果換成我來架構:我只要使用者輸入一個“在職員工”的Excel檔案,即可自動完成核對、申報功能!
(現在的做法是開發一個傳統型程式用戶端,讓使用者輸入,再通過Web服務申報)
以上是一些背景話和囉嗦,下述當然是“在現有的情況下努力去做”如何做的概述(思路),應該有一些參考價值。
第一步: 建立一個Access資料庫(公司只有近萬人)
第二步:從As400資料庫匯出“在職人員名單”,包括姓名、身份證;並存入Access資料庫
第三步:找到“XXX地方稅務局社會保險費報表採集系統”的Access資料庫,將其中的表“STAFF_INFO”中的姓名、身份證匯入到相同的資料庫中
第四步:將上述有關的身份證全部轉換為15位(15位和18位混存時代)
難就難在兩個表的身份證都有可能不是正確的(事實也是如此)--題外:為何當初(15位)的身份證沒有校證碼?現在有了,不知大家有沒有在使用者輸入有關身份證的地方進行驗證(應該可能將輸錯降到最低)。
第五步:使用“身份證”欄位,通過Left Join和Right Join分別得到“未投保名單”和“已離職的投保名單”(使用Is Null進行判斷)--因為存在身份證出錯的問題,所以,得到的兩份名單可靠度較低(同一個人同時存在於兩張名單中)
第六步:將上述兩個名單產生暫存資料表(暫存資料表能有效提高使用Join 和 Left、Right及欄位包括函數的查詢效率)
第七步:使用“姓名”欄位,再次對兩個名單進行Left Join和Right Join;得到“待投保名單”和“待除名名單”及“身份證不一致名單”。
此時名單的準確率已經很高,但還是有可能出錯,即若存在同名,且公司和社保的身份證不一致時,就會同時出現在兩份名單中
後記:
平時,可能很多人會假設“姓名”和“身份證”是完全正確的,未考慮這種假設不成立時如何處理。所以,架構時要特別注意作了哪些假設、什麼條件下成立和不成立如何處理等等。