BECKMAN生化流水线自动核收功能改造,是为了更好解放实验室工作,提高效率,也降低人为操作所带来的遗漏标本的风险,现对BECKMAN流水线进行自动核收、显示标本实时位置,自动审核等功能改造。
根据接口文档所述,M段以“|”分隔的第三位如果是101,则表示标本进仪器,以次节点作为自动核收标本的依据,恰到好处。具体示例如下:
M段以“|”分隔的第三位如果是103,则位仪器传出的标本当前位置信息
H<--M : H|\^&|||REMISOL^1||||||UPLOAD_SIGN=1\INTERPRETATION_FLAG=1\INSTRUMENT_FLAG=1|P|1|20240606090212
H<--M : M|1|101|3008972696|202406060902|
H<--M : L|1
程序解析部分:
s mi=$g(mi)
i '$d(^dbo.BTMIMachineParameterD(mi)) q ""
i '$l(record) q ""
s (Code,result,date,time,res,QC)=""
d Trace^MI.MIF000(mi,record,"H<--M")
S type=$e(record,1,1)
S type1=$P(record,"|",3)
i type="O" d
.s epis=""
.s epis=$tr($P($p(record,"|",3),"^",1)," ")
.s (PackNum,PositionNum)=""
.s PackNum=$tr($P($p(record,"|",3),"^",2)," ")
.s PositionNum=$tr($P($p(record,"|",3),"^",3)," ")
.s RackNo=PackNum_"@"_PositionNum
.;i $l(epis) d
..;s retVal=$$ReceiveLabno^MI.MIF000(mi,epis,"") ///核收标本
.s curMach=$$GetMiByDeviceCode^MI.MIF000(mi,"")
.s ^TmpAULSXAutoCheck=$p(record,"|",19)
.s ^TmpAULSX($zn,"epis")=epis
.s ^TmpAULSX($zn,"hasres")=0
***i ((type="M")&&(type1="101")) d
.;进仪器时自动核收
.s epis2=$tr($P($p(record,"|",4),"^",1)," ")
.s retVal=$$ReceiveLabno^MI.MIF000(mi,epis2,"") ///核收标本***
i ((type="M")&&(type1="103")) d
.;存储标本实时位置
.s epis1=$tr($P($p(record,"|",4),"^",1)," ")
.s (UnitM,PositionM,LocationM,SavePosition,LocationM2)=""
.s UnitM=$tr($p(record,"|",11)," ")
.s PositionM=$tr($p(record,"|",12)," ")
.s LocationM=$tr($p(record,"|",13)," ")
.s LocationM2=$tr($p($p(record,"|",15),"^",1)," ")
.i UnitM'="" s SavePosition=UnitM
.i ((UnitM'="")&&(PositionM'="")) s SavePosition=UnitM_"@"_PositionM
.i ((UnitM'="")&&(PositionM'="")&&(LocationM'="")) s SavePosition=UnitM_"@"_PositionM_"@"_LocationM
.i ((UnitM'="")&&(PositionM'="")&&(LocationM'="")&&(LocationM2'="")) s SavePosition=UnitM_"@"_PositionM_"@"_LocationM_"@"_LocationM2
.s curMach=$$GetMiByDeviceCode^MI.MIF000(mi,"")
接收标本程序:
ReceiveLabno(MachID,Epis,RackNo)
s MachID=$g(MachID),Epis=$g(Epis),RackNo=$g(RackNo)
i '$l(MachID) q 100
i '$l(Epis) q 100
s HospitalDR=$lg(^dbo.BTMIMachineParameterD(MachID),4)
s WorkGroupMachineDR=$lg(^dbo.BTMIMachineParameterD(MachID),6)
i '$l(WorkGroupMachineDR) q 100
s AssayNo=Epis
s EpisodeNo=RackNo
s CurrentDate=$o(^dbo.RPWGMachineUserI("IndexMaster",WorkGroupMachineDR,""),-1)
i '$l(CurrentDate) d Trace^MI.MIF000(MachID,"【小组负责】未设置核收用户","标本核收:") q 100
s RPWGMachineUserDR= $o(^dbo.RPWGMachineUserI("IndexMaster",WorkGroupMachineDR,CurrentDate,""),-1)
s AcceptUserDR= $lg($g(^dbo.RPWGMachineUserD(RPWGMachineUserDR)),5)
i '$l(AcceptUserDR) d Trace^MI.MIF000(MachID,"【小组负责】未设置核收用户","标本核收:") q 100
s Param="<Data><P0>H</P0>"
s Param=Param_"<P1>"_AssayNo_"</P1><P2></P2>"
s Param=Param_"<P3>"_EpisodeNo_"</P3>"
s Param=Param_"<P4>"_AcceptUserDR_"</P4><P5></P5><P6></P6><P7></P7>"
s Param=Param_"<P8>"_WorkGroupMachineDR_"</P8><P9></P9><P10></P10><P11></P11><P12></P12><P13></P13><P14></P14></Data>"
s Sessions=AcceptUserDR_"^^^^"_HospitalDR
s ret=##Class(LISSP.DHCRPVisitNumber).ReceiveVisitNumber(Epis,Param,Sessions)
i ret=1 d Trace^MI.MIF000(MachID,Epis_":核收成功","标本核收:")
e d Trace^MI.MIF000(MachID,Epis_ret,"核收失败:")
q 1
保存仪器位置信息:
ClassMethod SaveRackNo(labno, positioninfo, mi, predealMI)
{
s labno=$g(labno)
s positioninfo=$g(positioninfo)
s curWorkGroupMachineDR=$lg($g(^dbo.BTMIMachineParameterD(mi)),6)
s hasFindRep=0
i $d(^dbo.RPVisitNumberI("IndexVisitNumber"," "_$zcvt(labno,"U"))) d
.s VisitNumberDR=$o(^dbo.RPVisitNumberI("IndexVisitNumber"," "_$zcvt(labno,"U"),""))
.i $d(^dbo.RPVisitNumberReportI("IndexReportID",VisitNumberDR)) d
..s WorkGroupMachineDR="" f s WorkGroupMachineDR=$o(^dbo.RPVisitNumberReportI("IndexReportID",VisitNumberDR,WorkGroupMachineDR)) q:WorkGroupMachineDR="" d
...s OrderNo="" f s OrderNo=$o(^dbo.RPVisitNumberReportI("IndexReportID",VisitNumberDR,WorkGroupMachineDR,OrderNo)) q:OrderNo="" d
....s ReportDR="" f s ReportDR=$o(^dbo.RPVisitNumberReportI("IndexReportID",VisitNumberDR,WorkGroupMachineDR,OrderNo,ReportDR)) q:ReportDR="" d
.....s WorkGroupMachineDR=$lg($g(^dbo.RPVisitNumberReportD(ReportDR)),4)
.....s CanDoTS=0
.....i $d(^dbo.RPVisitNumberTestSetI("IndexReportID",ReportDR)) d
......s TestSetDR="" f s TestSetDR=$o(^dbo.RPVisitNumberTestSetI("IndexReportID",ReportDR,TestSetDR)) q:TestSetDR="" d
.......i $d(^dbo.BTTestSetWorkGroupMachineI("IndexWorkGroupMachine",curWorkGroupMachineDR,TestSetDR)) d
........s CanDoTS=1
.....i CanDoTS=0 q
.....s objrep=##Class(dbo.RPVisitNumberReport).%OpenId(ReportDR)
.....s objrep.RackNo=positioninfo
.....s sc=objrep.%Save()
.....s hasFindRep=1
.....i ('$SYSTEM.Status.IsOK(sc)) d
......d Trace^MI.MIF000(mi,"-1^存位置信息失败:"_$SYSTEM.Status.GetErrorText(sc),"H<--M")
i hasFindRep=0,$d(^dbo.RPVisitNumberReportI("IndexEpisodeNo",$zd($h,8),curWorkGroupMachineDR," "_$zcvt(labno,"U"))) d
.s ReportDR=$o(^dbo.RPVisitNumberReportI("IndexEpisodeNo",$zd($h,8),curWorkGroupMachineDR," "_$zcvt(labno,"U"),""))
.s objrep=##Class(dbo.RPVisitNumberReport).%OpenId(ReportDR)
.s objrep.RackNo=positioninfo
.s sc=objrep.%Save()
.s hasFindRep=1
i hasFindRep=0 d Trace^MI.MIF000(predealMI,labno_":没有找到报告","H<--M")
q "1"
}
根据文档说明,当O段“|”分隔最后一位是“AV”时,则自动审核,不再需要人为审核,进一步减少科室工作量,提高效率
H<--M : H|\^&|||REMISOL||||||UPLOAD_SIGN=1\INTERPRETATION_FLAG=1\INSTRUMENT_FLAG=1|P|1|20240606090322
H<--M : P|1||0003245458||马阿西彦^马阿西彦||19500615|F|||||O1082||||||||||||NFMK-内分泌科
H<--M : O|1|2406055040^0229^03|||R||20240605230825||||||||S|||AV
H<--M : R|1|^^^CRP^^0808^0001^^0|36.00|ng/dL||N||||RADVSRVGB||20240606090321|AU5821_2
H<--M : R|2|^^^LIPEM^^^^^0|^-|||A||||RADVSRVGB||20240606090321|AU5821_2
H<--M : R|3|^^^ICTER^^^^^0|^-|||A||||RADVSRVGB||20240606090321|AU5821_2
H<--M : R|4|^^^HEMOL^^^^^0|^-|||A||||RADVSRVGB||20240606090321|AU5821_2
H<--M : R|5|^^^LIH^^^^^0|^0□□0□□0|||A||||RADVSRVGB||20240606090321|AU5821_2
H<--M : L|1
自动审核程序改造
.i epis'="",result'="",IsCheck="AV" d
..S retVal=$$SaveResult^MI.DHCMIFAuthResult(mi,epis,IsCheck,"O4072",EDate,ETime,"O3245",ADate,ATime)
总结:
BECKMAN生化流水线经过自动核收、位置实时存储显示及自动审核程序改造,大大提高了效率。有此方面需求得可以点赞加关注,可以私下沟通交流心得。