M语言--雅培Alinity自动稀释接口程序改造

本文介绍了如何使用M语言改造雅培Alinity自动稀释接口程序,根据医院规则,当HBSAG结果大于250时进行500倍稀释。改造内容包括发送医嘱和获取历史结果的程序,并强调了接口数据格式的重要性,特别是项目需要用“”拼接。通过接口改造,能够减少科室工作量并优化仪器与LIS系统的配合。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

仪器图片在这里插入图片描述
根据本院设定的规则要求,只要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工程师完美配合,才能更好的实现根据历史结果自动稀释。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

taxuefeilong

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

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

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

打赏作者

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

抵扣说明:

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

余额充值