M语言--BECKMAN生化流水线自动核收、位置实时显示及自动审核程序改造

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生化流水线经过自动核收、位置实时存储显示及自动审核程序改造,大大提高了效率。有此方面需求得可以点赞加关注,可以私下沟通交流心得。

  • 47
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

taxuefeilong

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值