现在的位置: 首页 > 综合 > 正文

社保名单核对的难题

2012年05月03日 ⁄ 综合 ⁄ 共 922字 ⁄ 字号 评论关闭
  
     
看了“XXX地方税务局社会保险费报表采集系统,仅仅是一些简单功能,并不是站在用户的角度去考虑问题;也许是项目发包方本身不是用户的原因造成。一个核心功能尽然没有:名单核对!不经感慨:有技术实力的接不到单子,这是一个值得思考的问题。
   
如果换成我来架构:我只要用户输入一个在职员工Excel文件,即可自动完成核对、申报功能!
(现在的做法是开发一个桌面程序客户端,让用户输入,再通过Web服务申报)

  以上是一些背景话和啰嗦,下述当然是在现有的情况下努力去做如何做的概述(思路),应该有一些参考价值。

第一步: 新建一个Access数据库(公司只有近万人)

第二步:从As400数据库导出“在职人员名单”,包括姓名、身份证;并存入Access数据库

第三步:找到“XXX地方税务局社会保险费报表采集系统”的Access数据库,将其中的表“STAFF_INFO”中的姓名、身份证导入到相同的数据库中

第四步:将上述有关的身份证全部转换为15位(15位和18位混存时代)

     难就难在两个表的身份证都有可能不是正确的(事实也是如此)--题外:为何当初(15位)的身份证没有校证码?现在有了,不知大家有没有在用户输入有关身份证的地方进行验证(应该可能将输错降到最低)。

第五步:使用“身份证”字段,通过Left JoinRight Join分别得到“未投保名单”和“已离职的投保名单”(使用Is Null进行判断)--因为存在身份证出错的问题,所以,得到的两份名单可靠度较低(同一个人同时存在于两张名单中)

第六步:将上述两个名单生成临时表(临时表能有效提高使用Join LeftRight及字段包括函数的查询效率)

第七步:使用“姓名”字段,再次对两个名单进行Left JoinRight Join;得到“待投保名单”和“待除名名单”及“身份证不一致名单”。

此时名单的准确率已经很高,但还是有可能出错,即若存在同名,且公司和社保的身份证不一致时,就会同时出现在两份名单中

 

后记:

     平时,可能很多人会假设“姓名”和“身份证”是完全正确的,未考虑这种假设不成立时如何处理。所以,架构时要特别注意作了哪些假设、什么条件下成立和不成立如何处理等等。

抱歉!评论已关闭.