| [613] | 1 | RORHL13 ;HOIFO/BH,SG - HL7 MEDICAL PROCEDURES (EKG): OBR,OBX ; 8/25/05 11:32am | 
|---|
|  | 2 | ;;1.5;CLINICAL CASE REGISTRIES;;Feb 17, 2006 | 
|---|
|  | 3 | ; | 
|---|
|  | 4 | ; This routine uses the following IAs: | 
|---|
|  | 5 | ; | 
|---|
|  | 6 | ; #3780         GET^MCARAPI (private) | 
|---|
|  | 7 | ; #3854         GET^MDAPI1 (private) | 
|---|
|  | 8 | ; | 
|---|
|  | 9 | Q | 
|---|
|  | 10 | ; | 
|---|
|  | 11 | ;***** CONVERTS THE DATE FROM EXTERNAL TO HL7 FORMAT | 
|---|
|  | 12 | DATE(DATE) ; | 
|---|
|  | 13 | N RES | 
|---|
|  | 14 | D DT^DILF(,$P(DATE,"@"),.RES) | 
|---|
|  | 15 | Q $$FM2HL^RORHL7($G(RES)) | 
|---|
|  | 16 | ; | 
|---|
|  | 17 | ;***** SEARCHES FOR MEDICAL PROCEDURES (EKG) | 
|---|
|  | 18 | ; | 
|---|
|  | 19 | ; RORDFN        IEN of the patient in the PATIENT file (#2) | 
|---|
|  | 20 | ; | 
|---|
|  | 21 | ; .DXDTS        Reference to a local variable where the | 
|---|
|  | 22 | ;               data extraction time frames are stored. | 
|---|
|  | 23 | ; | 
|---|
|  | 24 | ; Return Values: | 
|---|
|  | 25 | ;       <0  Error code | 
|---|
|  | 26 | ;        0  Ok | 
|---|
|  | 27 | ;       >0  Non-fatal error(s) | 
|---|
|  | 28 | ; | 
|---|
|  | 29 | EN1(RORDFN,DXDTS) ; | 
|---|
|  | 30 | N ERRCNT,IDX,RC,RORENDT,RORESULT,RORIENS,RORSTDT,SF,TMP | 
|---|
|  | 31 | S (ERRCNT,RC)=0 | 
|---|
|  | 32 | S RORESULT=$$ALLOC^RORTMP() | 
|---|
|  | 33 | ; | 
|---|
|  | 34 | S IDX=0 | 
|---|
|  | 35 | F  S IDX=$O(DXDTS(12,IDX))  Q:IDX'>0  D  Q:RC<0 | 
|---|
|  | 36 | . S RORSTDT=$P(DXDTS(12,IDX),U),RORENDT=$P(DXDTS(12,IDX),U,2) | 
|---|
|  | 37 | . K @RORESULT | 
|---|
|  | 38 | . ; | 
|---|
|  | 39 | . ;--- Check if Clinical Procedures patch has been installed, | 
|---|
|  | 40 | . ;--- if not call the API associated with the Medicine Patch. | 
|---|
|  | 41 | . S TMP=".01;.02;11;14;20;21;18" | 
|---|
|  | 42 | . I $D(ROREXT("PATCH","MD*1.0*1"))  D | 
|---|
|  | 43 | . . D GET^MDAPI1(RORESULT,RORDFN,RORSTDT,RORENDT,TMP) | 
|---|
|  | 44 | . E  I $D(ROREXT("PATCH","MC*2.3*34"))  D | 
|---|
|  | 45 | . . D GET^MCARAPI(RORESULT,RORDFN,RORSTDT,RORENDT,TMP) | 
|---|
|  | 46 | . E  S ERRCNT=ERRCNT+1  Q | 
|---|
|  | 47 | . ; | 
|---|
|  | 48 | . ;--- Build the index | 
|---|
|  | 49 | . F SF=691.54  S TMP=""  D | 
|---|
|  | 50 | . . F  S TMP=$O(@RORESULT@(SF,TMP))  Q:TMP=""  D | 
|---|
|  | 51 | . . . S @RORESULT@("A",SF,$P(TMP,",",2)_",",TMP)="" | 
|---|
|  | 52 | . ; | 
|---|
|  | 53 | . ;--- Process the data | 
|---|
|  | 54 | . S RORIENS="" | 
|---|
|  | 55 | . F  S RORIENS=$O(@RORESULT@(691.5,RORIENS))  Q:RORIENS=""  D | 
|---|
|  | 56 | . . S TMP=$$OBR(RORIENS) | 
|---|
|  | 57 | . . I TMP  Q:TMP<0  S ERRCNT=ERRCNT+TMP | 
|---|
|  | 58 | . . S TMP=$$OBX(RORIENS) | 
|---|
|  | 59 | . . I TMP  Q:TMP<0  S ERRCNT=ERRCNT+TMP | 
|---|
|  | 60 | ; | 
|---|
|  | 61 | D FREE^RORTMP(RORESULT) | 
|---|
|  | 62 | Q $S(RC<0:RC,1:ERRCNT) | 
|---|
|  | 63 | ; | 
|---|
|  | 64 | ;***** MEDICAL PROCEDURE (EKG) OBR SEGMENT BUILDER | 
|---|
|  | 65 | ; | 
|---|
|  | 66 | ; RORIENS       Medical Procedure Record IENS | 
|---|
|  | 67 | ; | 
|---|
|  | 68 | ; Return Values: | 
|---|
|  | 69 | ;       <0  Error code | 
|---|
|  | 70 | ;        0  Ok | 
|---|
|  | 71 | ;       >0  Non-fatal error(s) | 
|---|
|  | 72 | ; | 
|---|
|  | 73 | OBR(RORIENS) ; | 
|---|
|  | 74 | N CS,ERRCNT,IEN,RC,ROROUT,RORSEG,TMP | 
|---|
|  | 75 | S (ERRCNT,RC)=0 | 
|---|
|  | 76 | D ECH^RORHL7(.CS) | 
|---|
|  | 77 | ; | 
|---|
|  | 78 | ;--- Initialize the segment | 
|---|
|  | 79 | S RORSEG(0)="OBR" | 
|---|
|  | 80 | ; | 
|---|
|  | 81 | ;--- OBR-3 - IEN in the ELECTROCARDIOGRAM (EKG) file #691.5 | 
|---|
|  | 82 | S RORSEG(3)=$TR(RORIENS,",") | 
|---|
|  | 83 | ; | 
|---|
|  | 84 | ;--- OBR-4 - Universal Service ID | 
|---|
|  | 85 | S RORSEG(4)="93000"_CS_"ELECTROCARDIOGRAM"_CS_"C4" | 
|---|
|  | 86 | ; | 
|---|
|  | 87 | ;--- OBR-6 - Requested Date/time (date of the EKG) | 
|---|
|  | 88 | S TMP=$$DATE($G(@RORESULT@(691.5,RORIENS,.01,"E"))) | 
|---|
|  | 89 | Q:TMP'>0 $$ERROR^RORERR(-95,,,,691.5,RORIENS,.01) | 
|---|
|  | 90 | S RORSEG(6)=TMP | 
|---|
|  | 91 | ; | 
|---|
|  | 92 | ;--- OBR-7 - Observation Date/Time (when received from an instrument) | 
|---|
|  | 93 | S RORSEG(7)=$$DATE($G(@RORESULT@(691.5,RORIENS,21,"E"))) | 
|---|
|  | 94 | ; | 
|---|
|  | 95 | ;--- OBR-24 - Diagnostic Service ID | 
|---|
|  | 96 | S RORSEG(24)="EC" | 
|---|
|  | 97 | ; | 
|---|
|  | 98 | ;--- OBR-25 - Confirmation Status | 
|---|
|  | 99 | S TMP=$G(@RORESULT@(691.5,RORIENS,11,"E")) | 
|---|
|  | 100 | I TMP'=""  D  S RORSEG(25)=TMP | 
|---|
|  | 101 | . S TMP=$S(TMP="CONFIRMED":"F",TMP="UNCONFIRMED":"R",1:"") | 
|---|
|  | 102 | ; | 
|---|
|  | 103 | ;--- OBR-44 - Division | 
|---|
|  | 104 | S TMP=$G(@RORESULT@(691.5,RORIENS,18,"E")) | 
|---|
|  | 105 | S IEN=$S(TMP'="":+$O(^SC("B",TMP,0)),1:0) | 
|---|
|  | 106 | S RORSEG(44)=$$DIV44^RORHLUT1(IEN,CS) | 
|---|
|  | 107 | ; | 
|---|
|  | 108 | ;--- Store the segment | 
|---|
|  | 109 | D ADDSEG^RORHL7(.RORSEG) | 
|---|
|  | 110 | Q ERRCNT | 
|---|
|  | 111 | ; | 
|---|
|  | 112 | ;***** MEDICAL PROCEDURE (EKG) OBX SEGMENT(S) BUILDER | 
|---|
|  | 113 | ; | 
|---|
|  | 114 | ; RORIENS       Medical Procedure Record IENS | 
|---|
|  | 115 | ; | 
|---|
|  | 116 | ; Return Values: | 
|---|
|  | 117 | ;       <0  Error code | 
|---|
|  | 118 | ;        0  Ok | 
|---|
|  | 119 | ;       >0  Non-fatal error(s) | 
|---|
|  | 120 | ; | 
|---|
|  | 121 | OBX(RORIENS) ; | 
|---|
|  | 122 | N CS,ERRCNT,RC,RORID,RORINT,RORKEY,RORMOD,RORSEG,TMP | 
|---|
|  | 123 | S (ERRCNT,RC)=0 | 
|---|
|  | 124 | D ECH^RORHL7(.CS) | 
|---|
|  | 125 | ; | 
|---|
|  | 126 | ;--- Process any interpretation data | 
|---|
|  | 127 | S RORID="INT"_CS_"Interpretation"_CS_"VA080" | 
|---|
|  | 128 | S RORKEY="" | 
|---|
|  | 129 | F  S RORKEY=$O(@RORESULT@("A",691.54,RORIENS,RORKEY))  Q:RORKEY=""  D | 
|---|
|  | 130 | . S RORINT=$G(@RORESULT@(691.54,RORKEY,.01,"E")) | 
|---|
|  | 131 | . Q:RORINT="" | 
|---|
|  | 132 | . S RORMOD=$G(@RORESULT@(691.54,RORKEY,1,"E")) | 
|---|
|  | 133 | . D SETOBX(RORID,RORMOD,RORINT) | 
|---|
|  | 134 | ; | 
|---|
|  | 135 | ;--- Process auto instrument data | 
|---|
|  | 136 | S RORID="AUTO"_CS_"Auto Instrument"_CS_"VA080" | 
|---|
|  | 137 | D SETOBXWP^RORHLUT1($NA(@RORESULT@(691.5,RORIENS,20)),RORID) | 
|---|
|  | 138 | ; | 
|---|
|  | 139 | Q $S(RC<0:RC,1:ERRCNT) | 
|---|
|  | 140 | ; | 
|---|
|  | 141 | ;***** CREATES AND STORES THE OBX SEGMENT | 
|---|
|  | 142 | SETOBX(OBX3,OBX4,OBX5) ; | 
|---|
|  | 143 | N RORSEG | 
|---|
|  | 144 | ;--- Initialize the segment | 
|---|
|  | 145 | S RORSEG(0)="OBX" | 
|---|
|  | 146 | ;--- OBX-2 - Value Type | 
|---|
|  | 147 | S RORSEG(2)="FT" | 
|---|
|  | 148 | ;--- OBX-3 - Observation Identiifer | 
|---|
|  | 149 | S RORSEG(3)=OBX3 | 
|---|
|  | 150 | ;--- OBX-4 - Observation Sub-ID (Interpretation Code Modifier) | 
|---|
|  | 151 | S:$G(OBX4)'="" RORSEG(4)=OBX4 | 
|---|
|  | 152 | ;--- OBX-5 - Observation Value | 
|---|
|  | 153 | S RORSEG(5)=$$ESCAPE^RORHL7(OBX5) | 
|---|
|  | 154 | ;--- OBX-11 - Observation Result Status | 
|---|
|  | 155 | S RORSEG(11)="F" | 
|---|
|  | 156 | ;--- Store the segment | 
|---|
|  | 157 | D ADDSEG^RORHL7(.RORSEG) | 
|---|
|  | 158 | Q | 
|---|