| [613] | 1 | MDWOR   ; HOIFO/NCA - Main Routine to Decode HL7 ;5/23/07  10:49
 | 
|---|
 | 2 |         ;;1.0;CLINICAL PROCEDURES;**14**;Apr 01,2004;Build 20
 | 
|---|
 | 3 |         ; Reference IA# 2263 [Supported] XPAR calls
 | 
|---|
 | 4 |         ;               3071 [Subscription] Call $$PKGID^ORX8.
 | 
|---|
 | 5 |         ;               3468 [Subscription] Call GMRCCP.
 | 
|---|
 | 6 |         ;               10035 [Supported] Access Patient file DPT
 | 
|---|
 | 7 |         ;               10040 [Supported] Hospital Location File SC
 | 
|---|
 | 8 |         ;               10103 [Supported] XLFDT calls
 | 
|---|
 | 9 |         ;
 | 
|---|
 | 10 | EN(MDMSG)       ; Entry Point for CPRS and pass MSG in MDMSG
 | 
|---|
 | 11 |         N DFN,MDCON,MDCPROC,MDCANC,MDCANR,MDIFN,MDINST,MDINT,MDFLG,MDL,MDIN,MDINP,MDINST,MDLOC,MDNAM,MDOBC,MDOBX,MDOPRO,MDPROC,MDPAT
 | 
|---|
 | 12 |         N MDPROV,MDREQ,MDQTIM,MDSINP,MDVSTD,MDX S MDVSTD=""
 | 
|---|
 | 13 |         S (MDINP,MDFLG,MDCANC,MDOBC)=0 F MDL=0:0 S MDL=$O(MDMSG(MDL)) Q:MDL<1!(MDFLG)  S MDX=$G(MDMSG(MDL)) D
 | 
|---|
 | 14 |         .I $E(MDX,1,3)="MSH" D MSH Q
 | 
|---|
 | 15 |         .I $E(MDX,1,3)="PID" D PID Q
 | 
|---|
 | 16 |         .I $E(MDX,1,3)="PV1" D PV1 Q
 | 
|---|
 | 17 |         .I $E(MDX,1,3)="ORC" D ORC Q
 | 
|---|
 | 18 |         .I $E(MDX,1,3)="OBR" D OBR Q
 | 
|---|
 | 19 |         .I $E(MDX,1,3)="OBX" D:MDOBC<1 OBX Q
 | 
|---|
 | 20 |         .Q
 | 
|---|
 | 21 |         I 'MDFLG,'MDCANC S MDATA="+1,^"_MDPROC_"^"_+MDCON_"^"_MDINST_"^"_MDVSTD D CHKIN(MDFN,MDREQ,MDPROV,MDATA,MDVSTD)
 | 
|---|
 | 22 |         Q
 | 
|---|
 | 23 | MSH     ; Decode MSH
 | 
|---|
 | 24 |         I $P(MDX,"|",2)'="^~\&" S MDFLG=1 Q
 | 
|---|
 | 25 |         I $P(MDX,"|",3)'="ORDER ENTRY" S MDFLG=1 Q
 | 
|---|
 | 26 |         I $P(MDX,"|",9)'="ORM" S MDFLG=1 Q
 | 
|---|
 | 27 |         Q
 | 
|---|
 | 28 | PID     ; Check PID
 | 
|---|
 | 29 |         S MDNAM=$P(MDX,"|",6),DFN=$P(MDX,"|",4)
 | 
|---|
 | 30 |         I '$D(^DPT("B",$E(MDNAM,1,30),DFN)) S MDFLG=1
 | 
|---|
 | 31 |         S MDFN=DFN
 | 
|---|
 | 32 |         Q
 | 
|---|
 | 33 | PV1     ; Check PV1
 | 
|---|
 | 34 |         S MDPAT=$P(MDX,"|",3) I MDPAT'?1U!("IO"'[MDPAT) S MDFLG=1 Q
 | 
|---|
 | 35 |         I MDPAT="I" S MDINP=1
 | 
|---|
 | 36 |         S MDLOC=+$P(MDX,"|",4) I $G(^SC(MDLOC,0))="" S MDFLG=1 Q
 | 
|---|
 | 37 |         S:MDINP>0 MDLOC=""
 | 
|---|
 | 38 |         Q
 | 
|---|
 | 39 | ORC     ; Check ORC
 | 
|---|
 | 40 |         I $P(MDX,"|",2)="NW" D NEW Q
 | 
|---|
 | 41 |         I $P(MDX,"|",2)="DC" D CANCEL Q
 | 
|---|
 | 42 |         S MDFLG=1
 | 
|---|
 | 43 |         Q
 | 
|---|
 | 44 | OBX     ; Check OBX
 | 
|---|
 | 45 |         N %,ANSWER,MDCV,MDOBX
 | 
|---|
 | 46 |         S MDOBX=$P(MDX,"|",6)
 | 
|---|
 | 47 |         I '+$$GET^XPAR("SYS","MD USE APPT WITH PROCEDURE",1) S MDOBC=MDOBC+1 Q
 | 
|---|
 | 48 |         S MDVSTD=$P(MDOBX,"Visit Date: ",2)
 | 
|---|
 | 49 |         S MDCV=$P(MDVSTD," ",1,2)
 | 
|---|
 | 50 |         I MDCV=""!(MDCV["UNKNOWN") S MDFLG=1 Q
 | 
|---|
 | 51 |         S MDVSTD=$P(MDCV," ")_"@"_$P(MDCV," ",2)
 | 
|---|
 | 52 |         D DT^DILF("T",MDVSTD,.ANSWER)
 | 
|---|
 | 53 |         S:ANSWER<0 ANSWER=""
 | 
|---|
 | 54 |         S MDVSTD=ANSWER I MDVSTD="" S MDFLG=1 Q
 | 
|---|
 | 55 |         I +MDLOC>0 S MDVSTD="A;"_MDVSTD_";"_MDLOC
 | 
|---|
 | 56 |         E  D NOW^%DTC S MDVSTD=%
 | 
|---|
 | 57 |         S MDOBC=MDOBC+1
 | 
|---|
 | 58 |         Q
 | 
|---|
 | 59 | NEW     ; New Order Segment
 | 
|---|
 | 60 |         S MDIFN=+$P(MDX,"|",3) I 'MDIFN S MDFLG=1 Q
 | 
|---|
 | 61 |         S MDPROV=+$P(MDX,"|",11) I 'MDPROV S MDFLG=1 Q
 | 
|---|
 | 62 |         S MDQTIM=$P(MDX,"|",8),MDQTIM=$P(MDQTIM,"^",6)
 | 
|---|
 | 63 |         S MDREQ=$P(MDX,"|",16) S MDREQ=$$FMDTE(MDREQ) I 'MDREQ S MDFLG=1 Q
 | 
|---|
 | 64 |         S MDREQ=$S(MDQTIM="Z24":$$FMADD^XLFDT(MDREQ,0,24),MDQTIM="Z48":$$FMADD^XLFDT(MDREQ,0,48),MDQTIM="Z72":$$FMADD^XLFDT(MDREQ,0,72),MDQTIM="ZW":$$FMADD^XLFDT(MDREQ,7),MDQTIM="ZM":$$FMADD^XLFDT(MDREQ,30),1:MDREQ)
 | 
|---|
 | 65 |         ; Retrieve Consult Number
 | 
|---|
 | 66 |         N MDFDA
 | 
|---|
 | 67 |         S MDCON=$$PKGID^ORX8(MDIFN) I 'MDCON S MDFLG=1 Q
 | 
|---|
 | 68 |         Q
 | 
|---|
 | 69 | OBR     ; Check OBR
 | 
|---|
 | 70 |         S MDPROC=$P(MDX,"|",5)
 | 
|---|
 | 71 |         I $E($P(MDPROC,"^",6),3,5)'["PRC" S MDFLG=1 Q
 | 
|---|
 | 72 |         S MDCPROC=$P(MDPROC,"^",4) I 'MDCPROC S MDFLG=1 Q
 | 
|---|
 | 73 |         ; Get Procedure for CP IEN
 | 
|---|
 | 74 |         S MDPROC=$$CPROC^GMRCCP(MDCPROC) I 'MDPROC S MDFLG=1 Q
 | 
|---|
 | 75 |         S MDSINP=$$HIGHV(MDPROC) I '+MDSINP S MDFLG=1 Q
 | 
|---|
 | 76 |         S (MDINST,MDINT)=0 F MDIN=0:0 S MDIN=$O(^MDS(702.01,MDPROC,.1,MDIN)) Q:MDIN<1!(+MDINST)  S MDINT=+$G(^(MDIN,0)) D
 | 
|---|
 | 77 |         .I +$$GET1^DIQ(702.09,+MDINT,".13","I") S MDINST=MDINT Q
 | 
|---|
 | 78 |         I +$P(MDSINP,"^",2)=2 D  Q
 | 
|---|
 | 79 |         .I +MDINP S MDVSTD="",MDOBC=MDOBC+1 Q
 | 
|---|
 | 80 |         .S MDVSTD=MDREQ,MDOBC=MDOBC+1 Q
 | 
|---|
 | 81 |         I +$P(MDSINP,"^",2)=3 D  Q
 | 
|---|
 | 82 |         .I +MDINP S MDVSTD="",MDOBC=MDOBC+1 Q
 | 
|---|
 | 83 |         I +$P(MDSINP,"^",2)=1 D  Q
 | 
|---|
 | 84 |         .I '+MDINP S MDVSTD="" Q
 | 
|---|
 | 85 |         .S MDVSTD=MDREQ,MDOBC=MDOBC+1 Q
 | 
|---|
 | 86 |         I +MDINP&('$P(^MDS(702.01,MDPROC,0),"^",5)) S MDFLG=1 Q
 | 
|---|
 | 87 |         I +MDINP S MDVSTD=MDREQ,MDOBC=MDOBC+1 Q
 | 
|---|
 | 88 |         S MDVSTD=MDREQ,MDOBC=MDOBC+1 Q
 | 
|---|
 | 89 |         Q
 | 
|---|
 | 90 | CANCEL  ; Cancel/Discontinue
 | 
|---|
 | 91 |         K MDR S MDIFN=+$P(MDX,"|",3),MDCON=+$P(MDX,"|",4),MDCANC=1
 | 
|---|
 | 92 |         I 'MDIFN S MDFLG=1 Q
 | 
|---|
 | 93 |         I 'MDCON S MDFLG=1 Q
 | 
|---|
 | 94 |         S MDPROV=+$P(MDX,"|",13) I 'MDPROV S MDFLG=1 Q
 | 
|---|
 | 95 |         S MDREQ=$P(MDX,"|",16) I 'MDREQ S MDFLG=1 Q
 | 
|---|
 | 96 |         S MDINST=$O(^MDD(702,"ACON",MDCON,0)) Q:'MDINST
 | 
|---|
 | 97 |         Q:$G(^MDD(702,+MDINST,0))=""
 | 
|---|
 | 98 |         I "5"[$P(^MDD(702,+MDINST,0),U,9) S MDCANR=$$CANCEL^MDHL7B(+MDINST)
 | 
|---|
 | 99 |         N MDFDA S MDFDA(702,MDINST_",",.09)=6
 | 
|---|
 | 100 |         D FILE^DIE("K","MDFDA") K MDFDA
 | 
|---|
 | 101 |         N MDHEMO S MDHEMO=+$$GET1^DIQ(702,+MDINST,".04:.06","I")
 | 
|---|
 | 102 |         Q:MDHEMO<2
 | 
|---|
 | 103 |         Q:$G(^MDK(704.202,+MDINST,0))=""
 | 
|---|
 | 104 |         S MDFDA(704.202,+MDINST_",",.09)=0
 | 
|---|
 | 105 |         D FILE^DIE("","MDFDA")
 | 
|---|
 | 106 |         K ^MDK(704.202,"AS",1,+MDINST)
 | 
|---|
 | 107 |         S ^MDK(704.202,"AS",0,+MDINST)=""
 | 
|---|
 | 108 |         Q
 | 
|---|
 | 109 | CHKIN(MDFN,MDREQ,MDPROV,MDATA,MDVSTD)   ; [Procedure] Check In Study
 | 
|---|
 | 110 |         N MDX1,MDFDA,MDIEN,MDIENS,MDERR,MDHL7,MDHOLD,MDSCHD,MDMAXD,MDXY,MDNOW
 | 
|---|
 | 111 |         F MDX1=2:1:5 D
 | 
|---|
 | 112 |         .I $P(MDATA,U,MDX1)]"" S MDFDA(702,$P(MDATA,U,1),$P("^.04^.05^.11^.07",U,MDX1))=$P(MDATA,U,MDX1)
 | 
|---|
 | 113 |         ; Remove code after instrument testing available
 | 
|---|
 | 114 |         ; End of code removal after instrument available for testin
 | 
|---|
 | 115 |         S MDSCHD=$S($L(MDVSTD,";")=1:MDVSTD,1:$P(MDVSTD,";",2)),MDMAXD=DT+.24
 | 
|---|
 | 116 |         S MDFDA(702,$P(MDATA,U,1),.09)=$S(MDSCHD="":0,MDSCHD>MDMAXD:0,1:5)  ; Status = Checked-In
 | 
|---|
 | 117 |         I $P(MDATA,U,1)="+1," D
 | 
|---|
 | 118 |         .S MDFDA(702,"+1,",.01)=MDFN
 | 
|---|
 | 119 |         .S MDFDA(702,"+1,",.02)=$$NOW^XLFDT()
 | 
|---|
 | 120 |         .S MDFDA(702,"+1,",.03)=MDPROV
 | 
|---|
 | 121 |         .S:+MDSCHD MDFDA(702,"+1,",.14)=MDSCHD
 | 
|---|
 | 122 |         .D UPDATE^DIE("","MDFDA","MDIEN","MDERR") Q:$D(MDERR)
 | 
|---|
 | 123 |         .Q:MDSCHD>MDMAXD!(MDSCHD="")
 | 
|---|
 | 124 |         .S MDIENS=MDIEN(1)_",",MDXY=+$P(MDATA,U,2),MDHOLD="" I +MDXY D
 | 
|---|
 | 125 |         ..Q:$P(^MDS(702.01,MDXY,0),U,6)'=2
 | 
|---|
 | 126 |         ..S MDHOLD=$P($G(^MDD(702,MDIEN(1),0)),"^",7),MDNOW=$$NOW^XLFDT()
 | 
|---|
 | 127 |         ..S $P(^MDD(702,MDIEN(1),0),"^",7)=$S(MDNOW>MDSCHD:MDSCHD,1:MDNOW)
 | 
|---|
 | 128 |         .S MDHL7=$$SUB^MDHL7B(MDIEN(1))
 | 
|---|
 | 129 |         .I +MDHL7=-1 S MDFDA(702,MDIENS,.09)=2,MDFDA(702,MDIENS,.08)=$P(MDHL7,U,2)
 | 
|---|
 | 130 |         .I +MDHL7=1 S MDFDA(702,MDIENS,.09)=5,MDFDA(702,MDIENS,.08)=""
 | 
|---|
 | 131 |         .D:$D(MDFDA) FILE^DIE("","MDFDA","MDERR")
 | 
|---|
 | 132 |         Q:MDSCHD>MDMAXD!(MDSCHD="")
 | 
|---|
 | 133 |         D:+$G(MDIENS)
 | 
|---|
 | 134 |         .S MDXY=+$P(MDATA,U,2) Q:'MDXY
 | 
|---|
 | 135 |         .I $P(^MDS(702.01,MDXY,0),U,6)=2 D  Q  ; Renal Check-In
 | 
|---|
 | 136 |         ..D CP^MDKUTL(+MDIENS)
 | 
|---|
 | 137 |         ..S:$G(MDHOLD)'="" MDFDA(702,+MDIENS_",",.07)=MDHOLD
 | 
|---|
 | 138 |         ..S MDFDA(702,+MDIENS_",",.09)=5
 | 
|---|
 | 139 |         ..D FILE^DIE("","MDFDA","MDERR")
 | 
|---|
 | 140 |         Q
 | 
|---|
 | 141 | FMDTE(DATE)     ; Convert HL-7 formatted date to a Fileman formatted date
 | 
|---|
 | 142 |         N X
 | 
|---|
 | 143 |         S X="" I DATE D
 | 
|---|
 | 144 |         .S X=$$HL7TFM^XLFDT(DATE,"L")
 | 
|---|
 | 145 |         Q X
 | 
|---|
 | 146 | HIGHV(MDHV)     ; Return flag indicator whether procedure is use for auto check-in
 | 
|---|
 | 147 |         N MDANS,MDK,MDKY,MDLST S MDANS=0
 | 
|---|
 | 148 |         D GETLST^XPAR(.MDLST,"SYS","MD CHECK-IN PROCEDURE LIST")
 | 
|---|
 | 149 |         F MDK=0:0 S MDK=$O(MDLST(MDK)) Q:MDK<1  S MDKY=$G(MDLST(MDK)) D
 | 
|---|
 | 150 |         .I MDHV=+$P(MDKY,"^") S MDANS=MDKY
 | 
|---|
 | 151 |         Q MDANS
 | 
|---|