关于血站频繁采血及血液报废率统计的审查方法
- 格式:doc
- 大小:82.00 KB
- 文档页数:11
关于血站频繁采血及血液报废率统计的 计算机审计方法
一、方法代码 二、方法名称 关于血站频繁采血及血液报废率统计的计算机审计方法
三、目标功能 审计目标:血液是宝贵的生命资源,非正常原因造成的报废是对血液资源的浪费,血液报废率是对血液采集质量、使用效果的评价指标,另一方面,为保证献血者的健康和临床用血安全,也禁止对同一人连续多次频繁采血,本方法的主要目标是通过血液报废率及对同一人的血液采集频率等指标检查血站在血液采集及使用方面的合法性、合规性。 审计功能:通过审查献血者信息表、血液入库表、采集情况表等等相关数据,检查中心血站有无随意采血,如违规多次对同一人采血、违规对不符合条件的人采血,对血液制备中报废率进行统计,发现由非正常原因造成的损失浪费及违规采集、使用血液等问题。 四、审计事项 部门预算执行审计/其他业务/其他 五、所需数据
关于血站频繁采血及血液报废率统计的计算机审计方法所需数据资料见表1。 表1关于血站频繁采血及血液报废率统计的计算机审计方法所需数据资料 序号 数据资料名称 结构化 非结构化 半结构化 1 献血人信息 √ 2 待检库报废 √ 3 过程原因 √ 4 血液名称 √ 5 血站业务统计报表 √ 审计人员采集的业务数据来源于《现代血站标准化管理
系统》,所需数据主要有: (1)基础表:献血人信息。数据元素:献血码、血员码、姓名、血型、RH血型、性别、出生日期、证件号码、家庭住址、所属单位、采血日期、 体检结果、采血方式 、血量、检验结果。 (2)基础表:待检库报废。数据元素:报废时间、献血码、血员码、血型、RH血型、产品码、报废原因、报废人、经手人、审核人、销毁状态、报废地点、血站代码 报废血量。 (3)基础表:过程原因。数据元素:原因代码、过程简称。 (4)基础表:血液名称。数据元素:成份码、血液简称、血液全称。
六、分析步骤 步骤一:采集并导入数据。 被审计单位计算机管理人员通过登陆现代血站标准化管理系统、将所需的税收原始凭证明细以Excel表格格式或txt格式导出、审计人员将数据拷贝后导入AO。 步骤二:查询两次血液采集时间间隔小于规定时间的数据,生成疑点。 将献血人信息表以采血方式为条件对同一人前后两次采血时间间隔进行分类统计,查询出违反规定频繁采血的数据疑点。 步骤三:生成年度报废血量明细表。 将待检库报废表与血液简称表、过程原因表关联,并以血液简称、原因简称为条件,分类汇总年度各血液成分的报废明细量。 步骤四:换算计量单位,生成报废血量总表。 根据各种血液成分的计价单位和标准对报废血量进行单位转换,并根据原因简称汇总生成新的报废血量总表。 步骤五:统计非正常原因血液报废量,并生成疑点。 按规定设置相关条件,筛选出非正常原因造成的血液报废量,并生成疑点数据供审计人员查实。 七、流程图 生成献血人信息表 生成年度报废血量明细表表 生成违反规定频繁采血数据疑点。 中心血站 原始数据 生成待检库报废表 生成过程原因表 生成血液简称表
检查同一人前后两次采血时间间隔是否小于规定时间 数据整理准备 三表关联,以血液简称、原因简称分类汇总。
对报废血量进行单位转换,并根据原因简称汇总
生成年度报废血量总表
统计频繁采血血液总量
如果存在
以报废原因为条件筛选出非正常原因造成的血液报废量,并与血站业务报表进行比对
生成非正常原因报废血液疑点。 八、方法语言 1--1.查询前后两次血液采集时间间隔小于规定时间的数据,并生成疑点。 var CXYJ,cxjg,IsEmpty;//定义变量 CXYJ:查询语句,CXJG:查询结果,IsEmpty:是否为空 begin CXYJ:='select distinct a.血员码,a.姓名,a.性别,a.出生日期,a.家庭住址,a.献血码, +'a.血型,a.RH血型,a.体检结果,a.采血日期,b.采血日期,b.采血方式,b.献血码,' +'a.采血方式,a.采血量,a.检验结果 ' +'from dbo.献血人信息 as a join dbo.献血人信息 as b ' +'on a.血员码=b.血员码 and a.献血码<>b.献血码 ' +'where DATEDIFF(day,a.采血日期,b.采血日期)<180 and DATEDIFF(day,a.采血日期,b.采血日期)>0 and a.采血日期>=''2010-1-1 00:00:000'' ' +'and a.采血方式 like ''%全血%'' and b.采血方式 like ''%全血%'' ' +'union ' +'select distinct a.血员码,a.姓名,a.性别,a.出生日期,a.家庭住址,a.献血码,' +'a.血型,a.RH血型,a.体检结果,a.采血日期,b.采血日期,b.采血方式,b.献血码,' +'a.采血方式,a.采血量,a.检验结果 ' +'from dbo.献血人信息 as a join dbo.献血人信息 as b ' +'on a.血员码=b.血员码 and a.献血码<>b.献血码 ' +'where DATEDIFF(day,a.采血日期,b.采血日期)<14 and DATEDIFF(day,a.采血日期,b.采血日期)>0 and a.采血日期>=''2010-1-1 00:00:000'' ' +'and a.采血方式 like ''%机采%'' and b.采血方式 like ''%机采%'' '; CXJG:=Createq(CXYJ,-1); //查询结果集是否为空 IsEmpty:=qeof(CXJG); if IsEmpty#1 then begin //利用循环将查询结果放入业务临时库 repeat AddTransRslt(CXJG,'频繁采血数据疑点'); IsEmpty:=qmov(CXJG,1); IsEmpty:=qeof(CXJG); until IsEmpty=1; //将临时库结果集放入疑点库 TransBatch(CXJG,'频繁采血疑点审查'); ShowMsg('频繁采血疑点已保存至未落实疑点库中,请核对!'); end else ShowMsg('没有频繁采血的记录!'); end. //程序结束 2-1生成报废血量明细表 var CXYJ;//定义变量CXYJ:查询语句 begin CXYJ:='select c.原因简称, b.血液简称,sum(报废血量)as 报废血量 +'from (SELECT year(报废时间)as 年度,报废原因,left(产品码,5) as 产品码,sum(报废血量)as 报废血量 ' +'from dbo.待检库报废 ' +'where 报废时间 <=''2012-12-31 23:59:59.000'' and 报废时间>=''2012-1-1 00:00:000'' ' +'group by 报废时间,报废原因,产品码) as a ' +'left join dbo.血液名称 as b on a.产品码=b.成分码 ' +'left join dbo.过程原因 as c on a.报废原因=c.原因代码 ' +'group by b.血液简称, c.原因简称 '; CreateTempTable('报废血量明细表2012',CXYJ); AddTable('报废血量明细表2012'); showmsg('报废血量明细表2012成功!'); end. 2--2换算计量单位,生成报废血量总表 var CXYJ;//定义变量CXYJ:查询语句 begin CXYJ:='select 原因简称,换算血量=sum(cast(case when 血液简称 like ''%血浆'' then 报废血量/100 ' +'when 血液简称 like ''%全血'' then 报废血量/200 else 报废血量 end as numeric(8,2))) ' +'from 报废血量明细表2012 ' +'group by 原因简称 '; CreateTempTable('报废血量总表2012',CXYJ); AddTable('报废血量总表2012'); showmsg('报废血量总表2012成功!'); end. 2--3统计非正常原因血液报废量,并生成疑点。 var CXYJ,cxjg,IsEmpty;//定义变量 CXYJ:查询语句,CXJG:查询结果,IsEmpty:是否为空 begin CXYJ:='select 原因简称,非正常报废量=sum(cast(case when 原因简称 like ''不足量'' OR 原因简称 like ''过期'' or 原因简称 like ''凝块'' ' +'OR 原因简称 like ''破损'' OR 原因简称 like ''渗漏'' or 原因简称 like ''渗血'' or 原因简称 like ''脂肪血'' OR 原因简称 like ''离心破损'' ' +'then 换算血量 else 0 end as numeric(8,2))) ' +'from dbo.报废血量总表2012 ' +'group by 原因简称 ' +'order by 2 desc '; CXJG:=Createq(CXYJ,-1); //查询结果集是否为空 IsEmpty:=qeof(CXJG); if IsEmpty#1 then begin //利用循环将查询结果放入业务临时库 repeat AddTransRslt(CXJG,'非正常报废疑点'); IsEmpty:=qmov(CXJG,1); IsEmpty:=qeof(CXJG); until IsEmpty=1;