zoukankan      html  css  js  c++  java
  • 社保名单核对的难题

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

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

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

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

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

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

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

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

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

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

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

    后记:

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


  • 相关阅读:
    go包之logrus显示日志文件与行号
    linux几种快速清空文件内容的方法
    (转)CSS3之pointer-events(屏蔽鼠标事件)属性说明
    Linux下source命令详解
    控制台操作mysql常用命令
    解决beego中同时开启http和https时,https端口占用问题
    有关亚马逊云的使用链接收集
    favicon.ico--网站标题小图片二三事
    js获取url协议、url, 端口号等信息路由信息
    (转) Golang的单引号、双引号与反引号
  • 原文地址:https://www.cnblogs.com/fjwuyongzhi/p/814265.html
Copyright © 2011-2022 走看看