1、需求描述
根据科室要求,对于HCG等项目需要改造自动稀释功能,以解放人工挑选标本再上机,提高效率根据本院需求整理,自动稀释有两个需求点:
A:临床开医嘱时备注有稀释字样的,按照规定倍数进行稀释
B:生殖类标本,先根据预设的倍数稀释,如果效果不理想,则检验师再根据实际情况向LIS系统重新发送稀释命令,仪器根据新的稀释倍数重新复查。
2、仪器接口文档解读
带稀释倍数的样本申请信息发送:
带稀释倍数的样本信息申请发送是复查信息发送特殊的一种,当检测项目结果达到仪器最大线性的时候为了获得准确的结果通常进行稀释测试来获得一个精确的结果。所以发送复查信息的同时需要通知仪器这次复查需要稀释多少倍,这样仪器进行复查的时候就会按照我们设定的倍数进行稀释检测。
文件内容如下:
MSH|^\&|LIS||||||OML^O21|20140911084900886887|||||ER|ER|
PID|1||1110||^Test||19570101|M|
ORC|XO|0457847300|||||R||20140911084900
OBR||0457847300||CL|100||||||A
首先ORC段的样本信息类型为XO修改,如下所示:
ORC段:ORC|XO|0457847300|||||SC||20140911084900
XO :修改申请
20140911084900:该时间戳需要跟Order发送过来的时间一致
OBR||0457847300||CL|100||||||A
0457847300:条码号
CL:复查项目
100 :稀释倍数
如果多个项目需要复查只需按照上面OBR格式添加多行OBR即可。
注:如果Order无结果,需要增加稀释倍数,需要先取消申请,再发带稀释倍数的order,否则不能在空结果的项目上直接加稀释倍数
3、程序改造效果
生殖类标本稀释(检验师根据已出结果效果评估,二次发送稀释命令)
4、程序改造
A、HCG-BETA、AFP、TPSA等项目备注有稀释字样时,按设定备注自动稀释
ClassMethod GetPredilu(labNo, UpChl)
{
q:labNo="" ""
zn "dhc-app"
s res=""
s ordId="" f s ordId=$O(^OEORD(0,"EpisNo",$TR(labNo," "),ordId)) q:ordId="" d
.s ordSubId="" f s ordSubId=$O(^OEORD(0,"EpisNo",$TR(labNo," "),ordId,ordSubId)) q:ordSubId="" d
..s orderRowId=ordId_"||"_ordSubId
..s OrdItmDr=$p(^OEORD(ordId,"I",ordSubId,1),"^",2)
..s DepProcNotes=$G(^OEORD(ordId,"I",ordSubId,"DEP",1))
..b ;01
..i ((OrdItmDr="27394||1")&&(UpChl="HCG-BETA")) d
...i ((DepProcNotes["稀释")||(DepProcNotes["滴度")||(DepProcNotes["定量")) s res=20
..i ((OrdItmDr="40704||1")&&(UpChl="AFP")) s res=50
..i ((OrdItmDr="5345||1")&&(UpChl="TPSA")) s res=50
..i ((OrdItmDr="5341||1")&&(UpChl="AFP")) d
...i ((DepProcNotes["稀释")||(DepProcNotes["滴度")||(DepProcNotes["定量")) s res=50
zn "dhc-lisdata"
q res
}
在下图程序中,调用备注稀释程序,实现将有备注的上机时自动稀释,摒弃人工挑选后再稀释的麻烦做法。
B、二次发送命令的需要改造上传部分程序
ClassMethod QryLabInfoExecute(ByRef qHandle As %Binary, mi As %String, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, Sessions, Output RowCount As %String) As %Status
{
Set repid=$i(^CacheTemp)
Set ind=1
s mi=$g(mi),flag=$g(flag)
i '$d(^dbo.BTMIMachineParameterD(mi)) q ""
s LabnoList=""
//
s labno="" f s labno=$o(^MIFInfinityOne("U",labno)) q:labno="" d
.s TCList=^MIFInfinityOne("U",labno)
.s labnoInfo=labno_","_$replace(TCList,"\","+")_"|@U"
.d Trace^MI.MIF000(mi,TCList,"H-->M")
.//cdf
.s patInfo=..GetPatInfo(mi,labno)
.d OutputRow
.k ^MIFInfinityOne("U",labno)
//
//IT3000,需申请标本信息查询
s AddDate="" f s AddDate=$o(^dbo.RPMachineUploadI("IndexSendStatus",mi," C",AddDate)) q:AddDate="" d
.s AddTime="" f s AddTime=$o(^dbo.RPMachineUploadI("IndexSendStatus",mi," C",AddDate,AddTime)) q:AddTime="" d
..s MiUploadDR=$o(^dbo.RPMachineUploadI("IndexSendStatus",mi," C",AddDate,AddTime,""))
..s labno=$lg(^dbo.RPMachineUploadD(MiUploadDR),3)
..i '$l(labno) q
..//ref
..s labnoInfo=..GetLabnoInfo(mi,labno)_"@C"
..//cdf
..s patInfo=..GetPatInfo(mi,labno)
..d OutputRow
//IT3000,需取消申请标本信息查询
s AddDate="" f s AddDate=$o(^dbo.RPMachineUploadI("IndexSendStatus",mi," R",AddDate)) q:AddDate="" d
.s AddTime="" f s AddTime=$o(^dbo.RPMachineUploadI("IndexSendStatus",mi," R",AddDate,AddTime)) q:AddTime="" d
..s MiUploadDR=$o(^dbo.RPMachineUploadI("IndexSendStatus",mi," R",AddDate,AddTime,""))
..s labno=$lg(^dbo.RPMachineUploadD(MiUploadDR),3)
..i '$l(labno) q
..//ref
..s labnoInfo=..GetLabnoInfo(mi,labno)_"@R"
..//cdf
..s patInfo=..GetPatInfo(mi,labno)
..d OutputRow
//IT3000,需项目复查标本信息查询
s AddDate="" f s AddDate=$o(^dbo.RPMachineUploadI("IndexSendStatus",mi," U",AddDate)) q:AddDate="" d
.s AddTime="" f s AddTime=$o(^dbo.RPMachineUploadI("IndexSendStatus",mi," U",AddDate,AddTime)) q:AddTime="" d
..s MiUploadDR=$o(^dbo.RPMachineUploadI("IndexSendStatus",mi," U",AddDate,AddTime,""))
..s labno=$lg(^dbo.RPMachineUploadD(MiUploadDR),3)
..i '$l(labno) q
..s TCList=$lg(^dbo.RPMachineUploadD(MiUploadDR),7)
..//ref
..s labnoInfo=labno_","_$replace(TCList,"\","+")_"@RR"
..s patInfo=..GetPatInfo(mi,labno)
..//d OutputRow
..//h 10
..//s ^MIFInfinityOne(labno,"R")=0
..s ^MIFInfinityOne("U",labno)=TCList
..//s labnoInfo=labno_","_$replace(TCList,"\","+")_"|@U"
..//d Trace^MI.MIF000(mi,TCList,"H-->M")
..//cdf
..//s patInfo=..GetPatInfo(mi,labno)
..d OutputRow
//查询需要归档的信息
i $d(^dbo.RPArchiveVisitNumberI("IndexSended","0",$zd($h,8))) d
.s SRowID="" f s SRowID=$o(^dbo.RPArchiveVisitNumberI("IndexSended","0",$zd($h,8),SRowID)) q:SRowID="" d
..s ArcWorkGroupMachineDR=$lg($g(^dbo.RPArchiveVisitNumberD(SRowID)),2)
..s MachWorkGroupMachine=$lg($g(^dbo.BTMIMachineParameterD(mi)),6)
..i MachWorkGroupMachine'=ArcWorkGroupMachineDR q
..s VisitNumberDR=$lg($g(^dbo.RPArchiveVisitNumberD(SRowID)),4)
..s labno=$lg($g(^dbo.RPVisitNumberD(VisitNumberDR)),2)
..//阳性归档
..s labnoInfo="POS"_"@C"_"@"_SRowID
..s patInfo=..GetPatInfo(mi,labno)
..d OutputRow
//触发上传iReport操作
i ('$d(^TMPLIS("IT3000",mi,"IReport",$p($h,",",1)))),$p($h,"2")>10000 d
.s labno="IReport"
.s labnoInfo="F#C:\INTERFACE\UP\"_$zd($h,8)_"UP.xlsx"
.s patInfo="-1"
.d OutputRow
Set qHandle=$lb(0,repid,0)
Quit $$$OK
OutputRow
Set Data=$lb(labno,labnoInfo,patInfo)
//S ^TMP("WWW",labno,+$h,$p($h,",",2))=$lb(labno,labnoInfo,patInfo)
Set ColFields="labno,labnoInfo,patInfo"
Set ^CacheTemp(repid,ind)=##Class(LIS.Util.Common).TransListNull(Data,ColFields)
Set ind=ind+1
quit
}
总结:
罗氏801流水线经过两次改造,其中一次,改造自动核收功能,第二次,改造自动稀释功能,经过两次改造提高了自动化水平,从而更加大大提高了标本出结果效率。(后期再出改造自动核收的程序。)