| 1 | MDHL7BH ; HOIFO/WAA -Bi-directional interface (HL7) routine ;7/23/01  11:41
 | 
|---|
| 2 |  ;;1.0;CLINICAL PROCEDURES;;Apr 01, 2004
 | 
|---|
| 3 |  ;
 | 
|---|
| 4 |  ; This routine will build the HL7 Message and store that message.
 | 
|---|
| 5 |  ; After the message has been created then it will call the
 | 
|---|
| 6 |  ; The actual HL7package to start the processing of the message
 | 
|---|
| 7 |  ;
 | 
|---|
| 8 |  ; Reference DBIA #2161 [Supported] for HL7 calls.
 | 
|---|
| 9 |  ; Reference DBIA #2164 [Supported] for HL7 calls.
 | 
|---|
| 10 |  ; Reference DBIA #3065 [Supported]  call to HLFNAME.
 | 
|---|
| 11 |  Q
 | 
|---|
| 12 | EN1 ;Main Entry point.
 | 
|---|
| 13 |  N MDMSG,MD101,CNT,HLA,LINE,MDHL,DFN,MDLINK
 | 
|---|
| 14 |  Q:RESULT<1  ; This tells the study is not a BDi
 | 
|---|
| 15 |  S MDLINK=$$GET1^DIQ(702.09,DEVIEN,.18,"E")
 | 
|---|
| 16 |  I MDLINK="" S RESULT=-1,MSG="No HL Logical Link has been defined." Q  ; No no link has been defined 
 | 
|---|
| 17 |  S MDERROR="0"
 | 
|---|
| 18 |  D INIT^HLFNC2("MCAR ORM SERVER",.MDMSG)
 | 
|---|
| 19 |  I +$G(MDMSG)>0 S RESULT=-1,MSG="Unable to produce a message." Q  ; something is wrong and no MSH was created
 | 
|---|
| 20 |  S DFN=$$GET1^DIQ(702,MDD702,.01,"I")
 | 
|---|
| 21 |  S DEVNAME=$$GET1^DIQ(702.09,DEVIEN,.16,"I")
 | 
|---|
| 22 |  S CNT=0
 | 
|---|
| 23 |  D PID S CNT=CNT+1,HLA("HLS",CNT)=LINE
 | 
|---|
| 24 |  D PV1 S CNT=CNT+1,HLA("HLS",CNT)=LINE
 | 
|---|
| 25 |  D ORC S CNT=CNT+1,HLA("HLS",CNT)=LINE
 | 
|---|
| 26 |  D OBR I LINE'="" S CNT=CNT+1,HLA("HLS",CNT)=LINE
 | 
|---|
| 27 |  S HLP("SUBSCRIBER")="^^VISTA^^"_DEVNAME_"^M"
 | 
|---|
| 28 |  S HLL("LINKS",1)="MCAR ORM CLIENT"_"^"_MDLINK
 | 
|---|
| 29 |  D GENERATE^HLMA("MCAR ORM SERVER","LM",1,.MDHL,,.HLP)
 | 
|---|
| 30 |  I $P(MDHL,U,2) S MDERROR=MDHL
 | 
|---|
| 31 |  Q
 | 
|---|
| 32 | OBR ; Send the procedure to the correct device
 | 
|---|
| 33 |  S LINE="OBR|"
 | 
|---|
| 34 |  S DEVIEN=$$GET1^DIQ(702,MDD702,.11,"I")
 | 
|---|
| 35 |  S USC=$$GET1^DIQ(702.09,DEVIEN,.17,"I")
 | 
|---|
| 36 |  I USC="" S LINE="" Q
 | 
|---|
| 37 |  E  S USC=$TR(USC,"=","^")
 | 
|---|
| 38 |  S $P(LINE,"|",5)=USC_"|"
 | 
|---|
| 39 |  Q
 | 
|---|
| 40 | PID ;get the patient information and build the PID
 | 
|---|
| 41 |  ;PID|||SSN||Last^First||DOB|SEX|||||||||||SSN
 | 
|---|
| 42 |  N MDSSN,NAME,DOB,ADDR,TMP
 | 
|---|
| 43 |  S LINE="PID|",$P(LINE,"|",21)=""
 | 
|---|
| 44 |  S MDSSN=$$GET1^DIQ(702,MDD702,.011) ; Get the ssn for the patient
 | 
|---|
| 45 |  S NAME=$$GET1^DIQ(702,MDD702,.01,"E") ; get the patient name
 | 
|---|
| 46 |  S NAME=$$HLNAME^XLFNAME($P(NAME,"^"),"",$E(HLECH,1))
 | 
|---|
| 47 |  I $P(NAME,$E(HLECH,1),7)'="L" S $P(NAME,$E(HLECH,1),7)="L"
 | 
|---|
| 48 |  S DOB=$$GET1^DIQ(2,DFN,.03,"I") S DOB=$$FTOHL7^MDHL7U2(DOB)
 | 
|---|
| 49 |  S ADDR=$$GET1^DIQ(2,DFN,.111,"E")_"^" ; Address 1
 | 
|---|
| 50 |  S TMP=$$GET1^DIQ(2,DFN,.112,"E") I TMP'="" S ADDR=ADDR_TMP ; Add 2
 | 
|---|
| 51 |  S TMP=$$GET1^DIQ(2,DFN,.113,"E") I TMP'="" S ADDR=ADDR_" "_TMP ; Add 3
 | 
|---|
| 52 |  S ADDR=ADDR_"^"_$$GET1^DIQ(2,DFN,.114,"E") ; City
 | 
|---|
| 53 |  S ADDR=ADDR_"^"_$$GET1^DIQ(5,$$GET1^DIQ(2,DFN,.115,"I"),1,"E") ; State
 | 
|---|
| 54 |  S ADDR=ADDR_"^"_$$GET1^DIQ(2,DFN,.116,"E") ; Zip
 | 
|---|
| 55 |  S $P(LINE,"|",2)="1"
 | 
|---|
| 56 |  S $P(LINE,"|",4)=MDSSN
 | 
|---|
| 57 |  S $P(LINE,"|",6)=NAME
 | 
|---|
| 58 |  S $P(LINE,"|",8)=DOB
 | 
|---|
| 59 |  S $P(LINE,"|",9)=$$GET1^DIQ(2,DFN,.02,"I")
 | 
|---|
| 60 |  S $P(LINE,"|",12)=ADDR
 | 
|---|
| 61 |  S $P(LINE,"|",20)=MDSSN
 | 
|---|
| 62 |  Q
 | 
|---|
| 63 | PV1 ;Get the ward location for PV1
 | 
|---|
| 64 |  ;PV1||In or out|Ward location
 | 
|---|
| 65 |  N WARD,INOUT,CONSULT,REF,NREF
 | 
|---|
| 66 |  S WARD=$$GET1^DIQ(2,DFN,.1,"E")
 | 
|---|
| 67 |  S INOUT=$S(WARD'="":"I",1:"O")
 | 
|---|
| 68 |  S:WARD'="" WARD=WARD_U_WARD
 | 
|---|
| 69 |  S LINE="PV1||"_INOUT_"|"_WARD
 | 
|---|
| 70 |  S CONSULT=$$GET123^MDHL7U2(MDD702) Q:CONSULT<1
 | 
|---|
| 71 |  S NREF=$$GETREF^MDHL7U2(CONSULT) Q:NREF="-1"
 | 
|---|
| 72 |  S $P(LINE,"|",9)=NREF
 | 
|---|
| 73 |  Q
 | 
|---|
| 74 | ORC ;get ORC onformation
 | 
|---|
| 75 |  ;ORC|NA|Order Number|||||||date/time ordered
 | 
|---|
| 76 |  N DATE,SDATE
 | 
|---|
| 77 |  S DATE=$$GET1^DIQ(702,MDD702,.02,"I")
 | 
|---|
| 78 |  S DATE=$$FTOHL7^MDHL7U2(DATE)
 | 
|---|
| 79 |  S SDATE=$$GET1^DIQ(702,MDD702,.07,"I")
 | 
|---|
| 80 |  I SDATE[";" S SDATE=$P(SDATE,";",2)
 | 
|---|
| 81 |  S SDATE=$$FTOHL7^MDHL7U2(SDATE)
 | 
|---|
| 82 |  S LINE="ORC|"_$S(MDORFLG=1:"NW",MDORFLG=0:"CA",1:"")_"|"_MDIORD
 | 
|---|
| 83 |  S $P(LINE,"|",6)=$S(MDORFLG=1:"NW",MDORFLG=0:"CA",1:"")
 | 
|---|
| 84 |  S $P(LINE,"|",10)=DATE,$P(LINE,"|",16)=SDATE
 | 
|---|
| 85 |  Q
 | 
|---|