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;得到“待投保名单”和“待除名名单”及“身份证不一致名单”。

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

    后记:

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


  • 相关阅读:
    JS-instanceof 与typeof
    JS-面向对象相关
    spark job源代码物理执行图实战
    堆(heap)和栈(stack)的区别
    sql developer怎样调试Pipelined
    oracle dbms_output 在java中输出
    sed 用法笔记
    oracle 怎样建自增长字段
    python学习笔记--split与join用法
    如何开启php报错
  • 原文地址:https://www.cnblogs.com/fjwuyongzhi/p/814265.html
Copyright © 2011-2022 走看看