2013年医疗保险学术论文征文动态数据窗口在医疗、工伤、生育保险联网指标数据检验工作中的应用【摘要】采用PowerBuilder生成SQL语句通过通过odbc连接ORACLE数据库的动态数据窗口检索错误信息,再通过EXCEL的OLE控件导出EXCEL文本。提高了联网指标数据检验工作的效率。【关键词】动态数据窗口ORACLE数据库SQLODBCOLE控件医疗、工伤、生育保险联网指标一、背景介绍按人社部函[2008]17号及人社部函[2009]136号的精神,我中心自2010年期,开始全面展开医疗、工伤、生育保险联网指标数据的上传工作。这项工作涉及到城镇职工基本医疗保险、离休人员医疗保障、城镇居民基本医疗保险、新型农村合作医疗四种医疗保障情况,具体包括参保单位信息、参保个人信息、门诊信息、住院信息和统筹地区参数信息。此外,医疗保险联网指标还包括定点医疗机构和定点零售药店信息、稽核信息、经办机构信息、社会参数信息共计19张表,420个指标。生育保险联网指标包括参保单位信息、享受待遇的参保女职工和男职工信息,共计3张表,75个指标。工伤保险参保、工伤认定、劳动能力鉴定、工伤保险待遇共计张表,165个指标。我市目前医疗保险参保人数152.96万人,居民医保参保人数137.43万人,工伤参保人数79.64万人,生育保险参保人数64.03万人。在联网指标数据中,涉及到这几个险种的数据多达数百万条。目前部平台提供数据校验模块只能检索出错误数据的条数,尚不能准确定位,因此经办机构的纠错工作就显的有些困难。为了及时纠正错误数据,通过对联网数据的表结构解读和判断依据规律的摸索,我们采用POWERBUILDER生成SQL语句通过通过odbc连接ORACL数据库的动态数据窗口检索错误语句,再通过EXCEL的OLE控件导出EXCEL文本供业务科室纠错使用。二、工具介绍(一)PowerBuilderPowerBuilder美国Sybase公司研制的一种新型、快速开发工具,是客户机/服务器结构下,基于Windows3.x、Windows95和WindowsNT的一个集成化开发工具。在Winxp下也能很好的工作。它包含一个直观的图形界面和可扩展的面向对象的编程语言PowerScript,提供与当前流行的大型数据库的接口,并通过ODBC与单机数据库相连。PowerBuilder自从1991年6月推出1.0版本以来,已经有过多次更新和版本升级,最新版本为2011年推出的12.5版本。本文采用的是比较成熟稳定的版本:PowerBuilder6.5(二)ORACLE数据库ORACLE数据库系统是美国ORACLE公司(甲骨文)提供的以分布式数据库为核心的一组软件产品,是目前最流行的客户/服务器(CLIENT/SERVER)或B/S体系结构的数据库之一。比如SilverStream就是基于数据库的一种中间件。ORACLE数据库是目前世界上使用最为广泛的数据库管理系统,作为一个通用的数据库系统,它具有完整的数据管理功能;作为一个关系数据库,它是一个完备关系的产品;作为分布式数据库它实现了分布式处理功能。目前最新的版本为12c。本文所采用的版本为10g。三、程序介绍(一)PowerBuilder通过ODBC连接ORACLE1、安装ORACLE客户端按默认配置安装ORACLE客户端,通过客户端与服务器端连接。输入服务名和主机名及端口号。测试成功后保存配置。图1-12、配置ODBC在控制面板—管理工具—数据源中新增MicrosoftODBCforOracleSetup的数据源。图1-2在“数据源名称、用户名称、服务器”中填入所需的内容。其他内容采用默认值。3、PowerBuilder通过ODBC连接ORACLE图1-3打开PowerBuilder6.5,新增ODBC的连接数据库的连接。填入所需内容,其余保留默认配置。至此,PowerBuilder通过ODBC连接ORACLE的工作完成。(二)构建参数表1、指标库字段代码映射表(ARG_LIST)由于各个指标采用中文字符,与指标库中实际使用的代码不同。为了生成准确的SQL语句,我们需要一张字段名称到字段代码的映射关系的代码表。该代码表含3个字段,分别是表代码、字段代码、字段名,以KY01(工伤参保单位信息表)表为例,其中字段代码为“000000”的作为表名映射行信息。TBLNMCOLNMTAGNMLY01000000工伤参保单位信息表LY01AAB301行政区划代码LY01AAE043数据期别LY01AAB001单位编号LY01AAB004单位名称LY01AAB003组织机构代码LY01AAB019单位类型LY01AAB020经济类型LY01AAB021隶属关系LY01AAB022所属行业LY01AAB078工商登记注册地分类LY01AAA149行业风险类别LY01AAE044工程项目名称LY01AAE030工程项目起始日期LY01AAE031工程项目计划/实际终止日期LY01AAB050参保日期LY01AAB051单位参保缴费状态LY01AAB079缴费核算方式LY01AAB088缴费周期类型LY01AAB121单位缴费基数LY01AAA042单位所属行业基准费率LY01AAA067本月单位缴费费率(缴费标准)LY01AAB246单位应缴当月金额LY01AAB247单位应补收金额LY01AAB210单位实缴当月金额LY01AAB249单位实补收金额LY01AAB253其中稽核补收金额LY01AAB242单位补缴欠费金额LY01AAB244缴纳滞纳金LY01AAB245补缴利息LY01AAB256预缴金额LY01AAB257核销金额LY01AAB175单位累计欠缴金额LY01AAB258累计欠缴滞纳金LY01AAB259关闭破产企业一次性趸缴金额LY01AAB264本月单位参保人数LY01AAB265其中农民工参保人数LY01AAB266其中缴费人数LY01AAB267人数统计类别LY01ALB200本月认定工伤人数LY01ALB201其中本月发生工伤事故伤害人数LY01ALB202其中本月发生职业病人数LY01ALB203本月因工死亡人数LY01ALB204其中一至四级死亡人数LY01ALB205本月使用工伤保险基金额LY01AAE402部级质量检查标识表3-12、指标库代码表(WAJ04)(部分)WJ005WJ006WJ014WJ015WJ004WJ016AAA149行业风险类别1一类行业1AAA149行业风险类别2二类行业1AAA149行业风险类别3三类行业1AAB301行政区划代码320300徐州市111111AAB301行政区划代码320302鼓楼区111111AAB301行政区划代码320303云龙区111111AAB301行政区划代码320304九里区111111AAB301行政区划代码320305贾汪区111111AAB301行政区划代码320311泉山区111111AAB301行政区划代码320321丰县111111AAB301行政区划代码320322沛县111111AAB301行政区划代码320323铜山县111111AAB301行政区划代码320324睢宁县111111AAB301行政区划代码320381新沂市111111AAB301行政区划代码320382邳州市111111AAB301行政区划代码320399徐州市市本级111111表3-2通过对WAJ04的代码的引用,可以对不同统筹地区的数据分别筛选。同时,可以对“不在代码表中”的错误类型生成SQL语句进行检索。生成方式参看下文。(三)指标库检查办法的整理(部分)tblnmarg1arg2caculatevalstrfundstrdes工伤参保单位信息表行政区划代码不在代码表中工伤参保单位信息表单位实缴当月金额=0小于等于0工伤参保单位信息表单位应缴当月金额=0小于等于0工伤参保单位信息表单位缴费基数单位参保缴费状态(参数2='1'AND(参数1ISNULLOR参数1=0))单位缴费状态为“参保缴费”的情况下,单位缴费基数为空或为0工伤参保单位信息表本月单位缴费费率(缴费标准)单位参保缴费状态(参数2='1'AND(参数1ISNULLOR参数1=0))单位缴费状态为“参保缴费”的情况下,单位缴费费率为空或为0工伤职工待遇信息表行政区划代码不在代码表中工伤职工待遇信息表所在单位编号ISNULL为空表3-3通过对上表的分析,我们可以看到,对指标库数据的检查,主要是判断表中的某个字段与某个固定值比较或者两个字段之间的比较。因此,我们可以把一个检查规则分解为几个固定参数,供系统生成SQL数据使用。例1:工伤参保单位信息表中的单位实缴当月金额小于等于0,可以如下拆分表名:工伤参保单位信息表参数一:单位实缴当月金额参数二:计算符:=比较值:0函数表达式:例2:工伤参保单位信息表单位缴费状态为“参保缴费”的情况下,单位缴费基数为空或为0,可以如下拆分表名:工伤参保单位信息表参数一:单位缴费基数参数二:单位参保缴费状态计算符:比较值:函数表达式:(参数2='1'AND(参数1ISNULLOR参数1=0))(四)生成SQL语句1、通过表名取表代码selecttblnminto:ls_ntablenamefromarg_listwherecolnm='000000'andtagnm=:ls_tablename;解读:从参数表arg_list中,取代码为“000000”,名称为“ls_tablename”的tblnm作为表代码存入ls_ntablename中。以“工伤参保单位信息表中的单位实缴当月金额小于等于0”为例:从arg_list取出表名为“工伤参保单位信息表”的表代码为“LY01”2、通过字段名取字段代码selectcolnminto:ls_ncolnamefromarg_listwheretagnm=:ls_colnameandtblnm=:ls_ntablename;解读:从参数表arg_list中,取字段名为“ls_colname”,表代码为“ls_ntablename”的colnm作为字段代码存入ls_ncolname中。以“工伤参保单位信息表中的单位实缴当月金额小于等于0”为例:从arg_list取出表代码为“LY01”,字段名为“单位实缴当月金额”的字段代码为“AAB210”3、生成SQL语句(1)生成查询语句sqlstr=select*fromXZSB.+ls_ntablename+whereXZSB.+ls_ntablename+.AAE043='+em_1.text+'andXZSB.+ls_ntablename+.AAB301in(+ls_departcode_s+)解读:em_1.text为期别,ls_departcode_s为行政区划代码以及上文得到的表代码、字段代码,这里可以初步组合出所需要的SQL语句,以“我市市本级工伤参保单位信息表中的11月份单位实缴当月金额小于等于0”为例:sqlstr=select*fromXZSB.LY01whereXZSB.LY01.AAE043=’201311’andXZSB.LY01.AAB301in(320399)(2)生成where条件语句工伤参保单位信息表单位实缴当月金额=0小于等于0只有参数1,则为:casestr=ls_arg1+''+ls_caculate+''+ls_valstr如果有参数2,则为:casestr=ls_arg1+''+ls_caculate+''+ls_arg2工伤参保单位信息表单位缴费基数单位参保缴费状态(参数2='1'AND(参数1ISNULLOR参数1=0))单位缴费状态为“参保缴费”的情况下,单位缴费基数为空或为0如果函数表达式有内容:casestr=of_lsreplace(ls_fundstr,'参数1',ls_arg1)工伤职工待遇信息表行政区划代码不在代码表中casestr=ls_arg1+notin(selectXZSB.WAJ04.WJ