根据本院设定的规则要求,只要365天之内HBSAG结果大于250,本次标本来就直接做500倍稀释,因此总体思路是要将对应项目的一年内的历史结果传给仪器,供仪器跟进设定的规则自动稀释。
1、接口文档示例
给仪器发送医嘱部分示例
H-->M:H|\^&|||Host^1.0.0|||||||P|E 1394-97|20170416104731
H-->M:P|1|R123456|117118112||White^Anna||19601218|F|||||0782|55^Years|0||| |||||||CHIR
H-->M:O|1|123456||^^^GLU^GLU\^^^ALB^ALB\^^^BILT^BILT|R|20170416101035|20170416102751||||N
||||SERUM|||||Lab1|||||O|||||Lab2
H-->M:R|1|^^^GLU^GLU|7.234|||||||||20161109233412
H-->M:R|2|^^^ALB^ALB|5.67|||||||||20161109213202
H-->M:L|1|N
这个例子告诉我们,只要将需要稀释的项目的历史结果按照
R|1|^^^GLU^GLU|7.234|||||||||20161109233412
此格式传给仪器即可。
2、接口改造
发送医嘱部分程序:
BUILD(epis)
s epis=$g(epis)
s str="",ONum=0,ONum1=0,tcx=""
s SpecType=$$GetSpecType(epis) ;标本
s patInfo=$$GetPatInfo(epis)
s (surName,giveName,sex,birthday,CTLoc,debNo,hospNo,bedNo,ptype,diagnose)=""
i '$l(patInfo) q 0
s surName=$p(patInfo,"^",1)
s giveName=$p(patInfo,"^",2)
s surName=$$GetCNCODE(surName,3,"")
s sex=$p(patInfo,"^",3)
s birthday=$p(patInfo,"^",4)
s CTLoc=$p(patInfo,"^",5)
;s CTLoc=$p(CTLoc,"-",1)
s debNo=$p(patInfo,"^",6)
s hospNo=$p(patInfo,"^",7)
s bedNo=$p(patInfo,"^",8)
s ptype=$p(patInfo,"^",9)
s diagnose=$p(patInfo,"^",10)
S episode=$p(patInfo,"^",11)
s date=$zdt(+$h,8),time=$tr($zt($p($h,",",2)),":")
s HistoryData=##Class(web.Test).GetHistoryResult(debNo,"288") ;目前值稀释表表抗原
s HistoryResult=$p(HistoryData,"^",1)
s HistoryTime=$p(HistoryData,"^",2)
i debNo="" s debNo=epis ;处理体检标本,|分隔第四个字段必须传
s str="H|\^&||||||||||P|134-97|"_date_time_cr ;头信息
s str=str_"P|1|"_epis_"|"_debNo_"|"_debNo_"^007^"_birthday_"|"_surName_"^||"_birth
day_"|F||||||"_episode_"|"_ptype_"||||||||||"_CTLoc_"|||||||||"_cr
d ScanOne^MI.MIF000(mi,epis) ;创建上传化验项目列表
i '$d(^TMP("MIFTESTCODE",$j,mi,epis)) q 1
S chl="" F S chl=$o(^TMP("MIFTESTCODE",$j,mi,epis,chl)) Q:chl="" D
.s ONum="1"
.i tcx="^^^"_chl_"^"_chl
.e s tcx=tcx_"^^^"_chl_"^"_chl_"\"
s tcx=$e(tcx,1,$l(tcx)-1) ;取掉最后一个"\"
s str=str_"O|"_ONum_"|"_epis_"||"_tcx_"|R|"_date_time_"|||||N|||||"_episode_"|||||||||F|||||"_cr
;传历史结果,用以自动稀释
i '$d(^TMP("MIFTESTCODE",$j,mi,epis)) q 1
S chl="" F S chl=$o(^TMP("MIFTESTCODE",$j,mi,epis,chl)) Q:chl="" D
.i ((chl="HBSAG")&&(HistoryResult'="")) d
..s ONum1=ONum1+1
..s str=str_"R|"_ONum1_"|^^^HBSAG^HBSAG|"_HistoryResult_"|||||||||"_HistoryTime_cr
s str=str_"L|1|N"_cr
d Send
q 0
取历史结果部分程序:
ClassMethod GetHistoryResult(RegNo, TestCodeDR)
{
s StartDate=$p($h,",",1)-365
s CurrentDate=$p($h,",",1)
s (TextRes,Authdate1,AuthTime,Reportdate)=""
q:RegNo="" ""
;f disdate=CurrentDate:-1:StartDate d
s Authdate="" f s Authdate=$o(^dbo.RPVisitNumberReportResultI("IndexPatientItem",$c(32)_RegNo,TestCodeDR,Authdate)) q:((Authdate="")||(Authdate<0)) d
.s:Authdate'="" Authdate1=$zdh(($e(Authdate,1,4)_"-"_$e(Authdate,5,6)_"-"_$e(Authdate,7,8)),3)
.q:((Authdate1<StartDate)||(Authdate1=CurrentDate))
.s AuthTime=$o(^dbo.RPVisitNumberReportResultI("IndexPatientItem",$c(32)_RegNo,TestCodeDR,Authdate,""))
.s ResultID=$o(^dbo.RPVisitNumberReportResultI("IndexPatientItem",$c(32)_RegNo,TestCodeDR,Authdate,AuthTime,""))
.s ResultData=$g(^dbo.RPVisitNumberReportResultD(ResultID))
.s TextRes=$lg(ResultData,5)
.s:AuthTime'="" ReportTime=$tr($zt(AuthTime,1),":","")
.s Reportdate=Authdate_""_ReportTime
q TextRes_"^"_Reportdate
}
特别注意:
要传历史结果对于O段格式来说,项目必须以“\”来拼接起来,如果使用多个O段单独发,则所传的R段的历史结果仪器不能识别(实际测试得到的结论)
O|1|123456||^^^GLU^GLU\^^^ALB^ALB\^^^BILT^BILT|R|20170416101035|20170416102751||||N||||SERUM|||||Lab1|||||O|||||Lab2
取病人信息:
GetPatInfo(labno)
s rtn=""
i '$l(labno) q rtn
i '$d(^dbo.RPVisitNumberI("IndexVisitNumber",$C(32)_labno)) q rtn
s VisitNumberDR=$O(^dbo.RPVisitNumberI("IndexVisitNumber",$C(32)_labno,""))
s surName=$lg(^dbo.RPVisitNumberD(VisitNumberDR),13)
s giveName=$lg(^dbo.RPVisitNumberD(VisitNumberDR),14)
S SpeciesDR=$lg(^dbo.RPVisitNumberD(VisitNumberDR),15),sex=""
i $l(SpeciesDR),$d(^dbo.BTSpeciesD(SpeciesDR)) S sex=$lg(^dbo.BTSpeciesD(SpeciesDR),2)
s birthday=$lg(^dbo.RPVisitNumberD(VisitNumberDR),16)
s CTLocID=$lg(^dbo.RPVisitNumberD(VisitNumberDR),22),CTLoc=""
i $l(CTLocID) s CTLoc=$lg(^dbo.BTLocationD(CTLocID),2)
s debNo=$lg(^dbo.RPVisitNumberD(VisitNumberDR),3)
s hospNo=$lg(^dbo.RPVisitNumberD(VisitNumberDR),6)
s bedNo=$lg(^dbo.RPVisitNumberD(VisitNumberDR),27)
s ptypeDR=$lg(^dbo.RPVisitNumberD(VisitNumberDR),4)
i $l(ptypeDR) s ptype=$lg(^dbo.BTAdmissionTypeD(ptypeDR),2)
s ptype=""
i ptype="O" s ptype="OP"
i ptype="P" s ptype="IP"
//i ptype="Outpatient" s ptype="门诊"
//i ptype="Inpatient" s ptype="住院"
i (ptype'="OP"),ptype'="IP" s ptype="UnKnow"
s diagnose=$lg(^dbo.RPVisitNumberD(VisitNumberDR),28)
i $l(diagnose)>30 d
.s diagnose=$e(diagnose,1,30)
S EpisodeNo=""
s WorkGroupMachineDR=$O(^dbo.RPVisitNumberReportI("IndexReportID",VisitNumberDR,""))
I $L(WorkGroupMachineDR) D
.s OrderNo=$O(^dbo.RPVisitNumberReportI("IndexReportID",VisitNumberDR,WorkGroupMachineDR,""))
.s ReportDR=$O(^dbo.RPVisitNumberReportI("IndexReportID",VisitNumberDR,WorkGroupMachineDR,OrderNo,""))
.S EpisodeNo=$lg(^dbo.RPVisitNumberReportD(ReportDR),8)
s rtn=surName_"^"_giveName_"^"_sex_"^"_birthday_"^"_CTLoc_"^"_debNo_"^"_hospNo_"^"_bedNo_"^"_ptype_"^"_diagnose_"^"_EpisodeNo
q rtn
总结:
自动稀释很大程度能减少科室工作量,节省人力,对Alinity的改造,要完全做到仪器厂商和LIS工程师完美配合,才能更好的实现根据历史结果自动稀释。