浅谈PL/SQL工具审计公积金贷款中的违规问题

湖南省审计厅 sjt.hunan.gov.cn 时间:2016年05月06日 00:00 【字体:
  

  进入大数据时代,各地公积金管理机构与银行合作,以新信息通信技术对住房公积金缴存、提取、贷款、查询等传统“管理型”业务进行流程再造,从而建成了新的“服务型”综合平台。本文将谈谈如何使用PL/SQL工具审计公积金贷款中的违规问题。 

  一、PL/SQL,何方神圣? 

  PL/SQL也叫过程化SQL语言(Procedural Language/SQL),是把数据操作和查询语句组织在PL/SQL代码的过程性单元中,通过逻辑判断、循环等操作实现复杂的功能或者计算的一种程序语言。通俗讲来,就是在普通SQL语句的使用上增加了编程语言,通过PL/SQL developer软件,连接登录已建数据库,使用SQL语句实现对oracle数据库中基本数据的查询。 

  二、在审计中的实战应用 

  在某市住房公积金管理中心相关审计中,审计人员了解到,该中心使用Oracle 11g作为后台数据库,资金管理方面已经启用“银企互联”,贷款发放数据方面基本与银行数据做到了无缝衔接。审计组人员利用PL/SQL工具开展审计,取得了良好效果。具体过程如下: 

  第一阶段:收集整理数据,获取数据字典 

  经被审计单位协助,按Oracle软件数据泵导出格式,导出后缀名为.dmp的数据文件,审计人员相应的采用数据泵方式将数据导入已建好的数据目录下,相关步骤入如下(示例): 

  1.创建DIRECTORY 

  create directory dir_dp as 'D:\oracle\dir_dp';  

  2.授权 

  Grant read,write on directory dir_dp to system; 

  3.把文件拷到建的目录里面 

  4.建表空间hfmis 

  5.数据导入(如system用户密码为sys) 

  impdp system/sys directory=backup dumpfile=hfmis.dmp remap_schema=hfmis:hfmis schemas=hfmis remap_tablespace=hfmis:hfmis 

  第二阶段:熟悉相关法规,把握关键点 

  公积金管理中心是政策性较强、政策更新较快的单位,审计人员需要较好地把握相关政策,把握审计关键点。本次审计中,审计人员根据了解到的当地公积金相关政策法规,确定了审计重点,如贷款超过年龄期限、开户缴存不够一年而贷款的人、重复贷款、还款逾期(到期未还)等等。 

  第三阶段:补充信息数据,完善基础资料 

  由于基础工作的缺失,部分人员的信息不全,审计人员首先对相关信息进行补充。示例如下: 

  1.身份证号未升级(少于18位) 

  select a.spcode 职工账号,a.spname 姓名,a.sncode 单位代码,b.snname 单位名称,a.spidno 身份证号 

  from sspersons a join ssunitinfo b on a.sncode=b.sncode  

  where a.hjstatus='11' and length(spidno)<18 

  2.身份证号信息不全,以1补充 

  select a.spcode 职工账号,a.spname 姓名,a.sncode 单位代码,b.snname 单位名称,a.spidno 身份证号 

  from sspersons a join ssunitinfo b on a.sncode=b.sncode  

  where spidno like '111%' --and a.hjstatus='11' 

  3.姓名不规范 

  select a.spcode 职工账号,a.spname 姓名,a.sncode 单位代码,b.snname 单位名称,a.spidno 身份证号 

  from sspersons a join ssunitinfo b on a.sncode=b.sncode  

  where (length(spname)<2 or substr(spname,1,1) in ('1','2','3','4','5','6','7','8','9')) and a.hjstatus='11' 

  第四阶段:编辑相关语句,查找审计疑点 

  数据导入后,使用PL/SQL developer登陆到相应数据库,结合数据字典,根据审计重点,编写语句,提取相关字段,查找审计疑点。示例如下: 

  1.查找疑点一:三次或三次以上的申请贷款 

  第一步:创建视图,汉化表格,筛选贷款两次以上人员信息;(连接贷款发放表pmlsht和贷款申请表pmls 

  create view v_gjj as 

  select SPCODE 职工内码,SPIDNo 证件号码,HTBH 合同编号,HTRQ合同日期,JKJE 借款金额,JKQX 借款期限,JKNLL 年利率,YHJE 每月应还额,PMBJ 实际本金,FDRQ 贷款起始日,JSRQ 合同结束日期,HQYM 还清年月,HKZH 还款帐号 

  from pmlsht join pmls on pmlsht.sqbh=pmls.sqbh 

  where spcode in (select distinct SPCODE  职工内码 

  from pmlsht join pmls on pmlsht.sqbh=pmls.sqbh 

  group by spcode,spidno 

  having count(*)>2) 

      第二步:利用上步生成视图,连接个人信息表sspersons和单位信息表ssunitinfo,得到贷款人精确信息,便于下一步查证。 

  select distinct SPNAME个人姓名,SPIDNO身份证,sspersons.sncode 单位代码,SNNAME单位名称,v_gjj.*  

  from v_gjj join sspersons on v_gjj.职工内码=sspersons.spcode join SSUNITINFO on sspersons.sncode=SSUNITINFO.Sncode 

  order by SPNAME 

  2.查找疑点二:超过借款人法定离退休年龄的贷款 

  第一步:创建相关视图,汉化表格,并通过身份证号码提取贷款人“出生日期”和“性别”信息。(连接贷款发放表pmlsht和贷款申请表pmls 

  create view dkb as  

  select SPCODE  职工内码,SPNAME 职工姓名,SPIDNo 证件号码, 

  case when length(rtrim(SPIDNo))=15 then concat('19', substr(SPIDNo,7,6)) 

  when length(rtrim(SPIDNo))=18 then substr(SPIDNo,7,8) end  

  出生日期, 

  case when (length(rtrim(SPIDNo))=15 and substr(SPIDNo,15,1) in ('0', '2', '4', '6', '8')) then '' 

   when (length(rtrim(SPIDNo))=15 and substr(SPIDNo,15,1) in ('1', '3', '5', '7', '9')) then '' 

   when (length(rtrim(SPIDNo))=18 and substr(SPIDNo,17,1) in ('0', '2', '4', '6', '8')) then '' 

  when (length(rtrim(SPIDNo))=18 and substr(SPIDNo,17,1) IN ('1', '3', '5', '7', '9')) then '' end 性别识别码, 

  SQRQ申请日期,SQJE申请金额,SQQX申请贷款期限,HTRQ 合同日期,JKJE借款金额,JKQX借款期限,JKNLL年利率,YHJE每月应还额,PMBJ实际本金,FDRQ 贷款起始日,JSRQ合同结束日期,HQYM还清年月,HKZH还款帐号,YHYM已还年月,BJYE本金余额,SCHKRQ上次还款日期 

  from pmlsht join pmls on pmlsht.sqbh=pmls.sqbh  

  where to_char(htrq,'yyyy')>=2011 and to_char(htrq,'yyyy')<=2014 

      第二步:利用上步生成视图,设置查询条件,得到查询结果,便于下一步查证。 

  select * from dkb 

  where (to_char(合同结束日期,'yyyy')-substr(出生日期,1,4)>61 and 性别识别码='') 

  or (to_char(合同结束日期,'yyyy')-substr(出生日期,1,4)>56 and 性别识别码='') 

  3.查找疑点三:正常汇缴不到1年的借款人申请的住房贷款 

      第一步:创建关于公积金缴存人起缴时间的视图(公积金缴存流水账CPZGLSZ) 

  create view v_qjny as 

  select spcode,min(hjny) as qjny from CPZGLSZ 

  group by spcode 

      第二步:创建视图,比较贷款时间和起缴时间的年限差是否达到一年。(对于原表中月份字段进行处理后提取年份信息) 

  create view v_spyear as 

  select pmls.spcode,qjny,substr(qjny,1,4) as qjn,add_months(htrq,-12) bj,htrq from v_qjny join pmls on v_qjny.spcode=pmls.spcode join pmlsht on pmls.sqbh=pmlsht.sqbh 

  where substr(qjny,1,4)>=to_char(add_months(htrq,-12),'yyyy') and to_char(htrq,'yyyy')>=2011 

      第三步:查询贷款明细信息。 

  select distinct v_spyear.spcode 职工内码,spname职工姓名,SPIDNO证件号码,qjny 起缴年月,bj 比较列,pmlsht.htrq 合同日期,HTBH 合同编号,JKJE 借款金额,JKQX 借款期限,JKNLL 年利率 

  from v_spyear join pmls on v_spyear.spcode=pmls.spcode join pmlsht on pmls.sqbh=pmlsht.sqbh 

  第五阶段:依据相关疑点,翻看合同记录 

  仅仅依据以上查询结果,难以得到被审计单位违规发放贷款的结论。特别是对于退休年限的规定,不同职务级别人员另有相关规定;且本次查询数据库只能查到公积金缴存人员在本地的缴存记录,外地曾经缴存的也应纳入其缴存年限。因此审计组依据以上得到的审计疑点,询问被审计单位并翻看相应合同记录,逐条记录核实确认,最后得到了更为准确的结果。 

  三、计算机辅助审计成效明显 

  这次公积金的审计通过利用计算机审计技术的帮助,我们较快较顺利地完成了审计任务,审查出了一些违规的公积金贷款问题。不仅节省了审计的人力物力、提高了审计组的效率,更是积累了计算机辅助审计的经验,增加了审计人员利用计算机技术的信心,为大数据背景下审计人员利用计算机技术开展审计奠定了良好的基础。(供稿人 周奕 审批人 张锐) 


浅谈PL/SQL工具审计公积金贷款中的违规问题

10108551