| [613] | 1 | RORHL04 ;HOIFO/CRT,SG - HL7 RADIOLOGY: OBR,OBX ; 10/27/05 11:19am | 
|---|
|  | 2 | ;;1.5;CLINICAL CASE REGISTRIES;;Feb 17, 2006 | 
|---|
|  | 3 | ; | 
|---|
|  | 4 | ; This routine uses the following IAs: | 
|---|
|  | 5 | ; | 
|---|
|  | 6 | ; #65           Read access to file #70 (controlled) | 
|---|
|  | 7 | ; #118-B        Read access to file #71 (controlled) | 
|---|
|  | 8 | ; #118-D        Read access to file #72 (controlled) | 
|---|
|  | 9 | ; #1995         $$CPT^ICPTCOD (supported) | 
|---|
|  | 10 | ; #2043         EN1^RAO7PC1 (supported) | 
|---|
|  | 11 | ; #10060        Read access to the file #200 (supported) | 
|---|
|  | 12 | ; #10090        Read access to the file #4 (supported) | 
|---|
|  | 13 | ; | 
|---|
|  | 14 | ; #15-C         Read access to file #74 (Private) | 
|---|
|  | 15 | ; | 
|---|
|  | 16 | Q | 
|---|
|  | 17 | ; | 
|---|
|  | 18 | ;***** SEARCHES RADIOLOGY FOR DATA | 
|---|
|  | 19 | ; | 
|---|
|  | 20 | ; RORDFN        IEN of the patient in the PATIENT file (#2) | 
|---|
|  | 21 | ; | 
|---|
|  | 22 | ; .DXDTS        Reference to a local variable where the | 
|---|
|  | 23 | ;               data extraction time frames are stored. | 
|---|
|  | 24 | ; | 
|---|
|  | 25 | ; Return Values: | 
|---|
|  | 26 | ;       <0  Error code | 
|---|
|  | 27 | ;        0  Ok | 
|---|
|  | 28 | ;       >0  Non-fatal error(s) | 
|---|
|  | 29 | ; | 
|---|
|  | 30 | ; The ^TMP($J,"RAE1") global node is used by the function. | 
|---|
|  | 31 | ; | 
|---|
|  | 32 | EN1(RORDFN,DXDTS) ; | 
|---|
|  | 33 | N CNI,DTI,ERRCNT,EXAMID,IDX,IENS,IENS74,RACN0,RC,RORENDT,RORSTDT,STR1,TMP | 
|---|
|  | 34 | S (ERRCNT,RC)=0 | 
|---|
|  | 35 | ; | 
|---|
|  | 36 | S IDX=0 | 
|---|
|  | 37 | F  S IDX=$O(DXDTS(4,IDX))  Q:IDX'>0  D  Q:RC<0 | 
|---|
|  | 38 | . S RORSTDT=$P(DXDTS(4,IDX),U),RORENDT=$P(DXDTS(4,IDX),U,2) | 
|---|
|  | 39 | . ;--- Get radiology data | 
|---|
|  | 40 | . K ^TMP($J,"RAE1") | 
|---|
|  | 41 | . D EN1^RAO7PC1(RORDFN,RORSTDT,RORENDT,999999999) | 
|---|
|  | 42 | . ;--- Process the data | 
|---|
|  | 43 | . S EXAMID="" | 
|---|
|  | 44 | . F  S EXAMID=$O(^TMP($J,"RAE1",RORDFN,EXAMID))  Q:EXAMID=""  D | 
|---|
|  | 45 | . . S DTI=$P(EXAMID,"-"),CNI=$P(EXAMID,"-",2) | 
|---|
|  | 46 | . . S IENS=CNI_","_DTI_","_RORDFN_"," | 
|---|
|  | 47 | . . S STR=^TMP($J,"RAE1",RORDFN,EXAMID) | 
|---|
|  | 48 | . . S RACN0=$P(STR,"^",2),IENS74=$P(STR,"^",5) | 
|---|
|  | 49 | . . S TMP=$$OBR(IENS,RACN0) | 
|---|
|  | 50 | . . I TMP  Q:TMP<0  S ERRCNT=ERRCNT+TMP | 
|---|
|  | 51 | . . Q:TMP="S" | 
|---|
|  | 52 | . . S TMP=$$OBX(IENS,IENS74) | 
|---|
|  | 53 | . . I TMP  Q:TMP<0  S ERRCNT=ERRCNT+TMP | 
|---|
|  | 54 | ; | 
|---|
|  | 55 | K ^TMP($J,"RAE1") | 
|---|
|  | 56 | Q $S(RC<0:RC,1:ERRCNT) | 
|---|
|  | 57 | ; | 
|---|
|  | 58 | ;***** | 
|---|
|  | 59 | LOOP(TEXT,OID) ; | 
|---|
|  | 60 | N BR,CNT,I,I1,TMP | 
|---|
|  | 61 | S BR=$E(HLECH,3)_".br"_$E(HLECH,3) | 
|---|
|  | 62 | S RORSEG(3)=OID | 
|---|
|  | 63 | K RORSEG(5) | 
|---|
|  | 64 | ;--- | 
|---|
|  | 65 | S I=$O(TEXT("")),CNT=0 | 
|---|
|  | 66 | F  Q:I=""  S I1=$O(TEXT(I))  D  S I=I1 | 
|---|
|  | 67 | . S TMP=$$ESCAPE^RORHL7(TEXT(I)) | 
|---|
|  | 68 | . S CNT=CNT+1,RORSEG(5,CNT)=$S(I1'="":TMP_BR,1:TMP) | 
|---|
|  | 69 | ;--- | 
|---|
|  | 70 | D:$D(RORSEG(5)) ADDSEG^RORHL7(.RORSEG) | 
|---|
|  | 71 | Q | 
|---|
|  | 72 | ; | 
|---|
|  | 73 | ;***** GENERATES THE RADIOLOGY OBR SEGMENT | 
|---|
|  | 74 | ; | 
|---|
|  | 75 | ; RORIENS       IENS of the radiology record in the file #70.03 | 
|---|
|  | 76 | ; | 
|---|
|  | 77 | ; Return Values: | 
|---|
|  | 78 | ;       <0  Error code | 
|---|
|  | 79 | ;        0  Ok | 
|---|
|  | 80 | ;       >0  Non-fatal error(s) | 
|---|
|  | 81 | ;      "S"  Skip the record | 
|---|
|  | 82 | ; | 
|---|
|  | 83 | OBR(RORIENS,RACN0) ; | 
|---|
|  | 84 | N BUF,CPTIEN,CS,ERRCNT,IENS,IENS7002,RADTE,RC,RORMSG,ROROUT,RORSEG,TMP | 
|---|
|  | 85 | S (ERRCNT,RC)=0 | 
|---|
|  | 86 | D ECH^RORHL7(.CS) | 
|---|
|  | 87 | ;--- Check the parameters | 
|---|
|  | 88 | S:$E(RORIENS,$L(RORIENS))'="," RORIENS=RORIENS_"," | 
|---|
|  | 89 | ; | 
|---|
|  | 90 | D GETS^DIQ(70.03,RORIENS,"2;14","IE","ROROUT","RORMSG") | 
|---|
|  | 91 | Q:$G(DIERR) $$DBS^RORERR("RORMSG",-9,,,70.03,RORIENS) | 
|---|
|  | 92 | S IENS7002=$P(RORIENS,",",2,3)_"," | 
|---|
|  | 93 | D GETS^DIQ(70.02,IENS7002,".01;3","EI","ROROUT","RORMSG") | 
|---|
|  | 94 | Q:$G(DIERR) $$DBS^RORERR("RORMSG",-9,,,70.02,IENS7002) | 
|---|
|  | 95 | ; | 
|---|
|  | 96 | ;--- Initialize the segment | 
|---|
|  | 97 | S RORSEG(0)="OBR" | 
|---|
|  | 98 | ; | 
|---|
|  | 99 | ;--- OBR-3 - Unique Accession # | 
|---|
|  | 100 | S BUF=$P(RORIENS,",",2)_"-"_$P(RORIENS,",") | 
|---|
|  | 101 | S RADTE=$G(ROROUT(70.02,IENS7002,.01,"I"))\1 | 
|---|
|  | 102 | S $P(BUF,CS,2)=$E(RADTE,4,7)_$E(RADTE,2,3)_"-"_+RACN0 | 
|---|
|  | 103 | S RORSEG(3)=BUF | 
|---|
|  | 104 | ; | 
|---|
|  | 105 | ;--- OBR-4 - Procedure & CPT Code | 
|---|
|  | 106 | S IENS=+$G(ROROUT(70.03,RORIENS,2,"I"))_"," | 
|---|
|  | 107 | Q:IENS'>0 $$ERROR^RORERR(-95,,,,70.03,RORIENS,2) | 
|---|
|  | 108 | S CPTIEN=+$$GET1^DIQ(71,IENS,9,"I",,"RORMSG") | 
|---|
|  | 109 | Q:$G(DIERR) $$DBS^RORERR("RORMSG",-9,,,71,IENS) | 
|---|
|  | 110 | ;--- Some procedures never have a CPT code. Record a warning | 
|---|
|  | 111 | ;--- (only in debug mode) and skip the record. | 
|---|
|  | 112 | I CPTIEN'>0  D:$G(RORPARM("DEBUG"))  Q "S" | 
|---|
|  | 113 | . D ERROR^RORERR(-95,,,,71,IENS,9) | 
|---|
|  | 114 | ;--- | 
|---|
|  | 115 | S TMP=$$CPT^ICPTCOD(CPTIEN) | 
|---|
|  | 116 | Q:TMP<0 $$ERROR^RORERR(-56,,$P(TMP,U,2),,+TMP,"$$CPT^ICPTCOD") | 
|---|
|  | 117 | S BUF=$P(TMP,U,2)_CS_$$ESCAPE^RORHL7($P(TMP,U,3))_CS_"C4" | 
|---|
|  | 118 | ;--- | 
|---|
|  | 119 | S $P(BUF,CS,4)=$G(ROROUT(70.03,RORIENS,2,"I")) | 
|---|
|  | 120 | S $P(BUF,CS,5)=$$ESCAPE^RORHL7($G(ROROUT(70.03,RORIENS,2,"E"))) | 
|---|
|  | 121 | S $P(BUF,CS,6)="99RAP" | 
|---|
|  | 122 | S RORSEG(4)=BUF | 
|---|
|  | 123 | ; | 
|---|
|  | 124 | ;--- OBR-7 - Exam Date/Time | 
|---|
|  | 125 | S TMP=$$FMTHL7^XLFDT($G(ROROUT(70.02,IENS7002,.01,"I"))) | 
|---|
|  | 126 | Q:TMP'>0 $$ERROR^RORERR(-95,,,,70.02,IENS7002,.01) | 
|---|
|  | 127 | S RORSEG(7)=TMP | 
|---|
|  | 128 | ; | 
|---|
|  | 129 | ;--- OBR-16 - Requesting Physician | 
|---|
|  | 130 | S BUF=+$G(ROROUT(70.03,RORIENS,14,"I")) | 
|---|
|  | 131 | I BUF>0  D | 
|---|
|  | 132 | . S $P(BUF,CS,13)=$$GET1^DIQ(200,+BUF_",",53.5,"E",,"RORMSG") | 
|---|
|  | 133 | . I $G(DIERR)  D DBS^RORERR("RORMSG",-99,,,200,+BUF_",")  Q | 
|---|
|  | 134 | . S RORSEG(16)=BUF | 
|---|
|  | 135 | ; | 
|---|
|  | 136 | ;--- OBR-24 - Service Section ID | 
|---|
|  | 137 | S RORSEG(24)="RAD" | 
|---|
|  | 138 | ; | 
|---|
|  | 139 | ;--- OBR-44 - Division | 
|---|
|  | 140 | S RORSEG(44)=$$SITE^RORUTL03(CS) | 
|---|
|  | 141 | S IENS=+$G(ROROUT(70.02,IENS7002,3,"I"))_"," | 
|---|
|  | 142 | I IENS>0  D | 
|---|
|  | 143 | . S BUF=$$GET1^DIQ(4,IENS,99,"I",,"RORMSG") | 
|---|
|  | 144 | . I $G(DIERR)  D DBS^RORERR("RORMSG",-99,,,4,IENS)  Q | 
|---|
|  | 145 | . Q:BUF="" | 
|---|
|  | 146 | . S $P(BUF,CS,2)=$$ESCAPE^RORHL7($G(ROROUT(70.02,IENS7002,3,"E"))) | 
|---|
|  | 147 | . S $P(BUF,CS,3)="99VA4" | 
|---|
|  | 148 | . S RORSEG(44)=BUF | 
|---|
|  | 149 | ; | 
|---|
|  | 150 | ;--- Store the segment | 
|---|
|  | 151 | D ADDSEG^RORHL7(.RORSEG) | 
|---|
|  | 152 | Q ERRCNT | 
|---|
|  | 153 | ; | 
|---|
|  | 154 | ;***** GENERATES THE RADIOLOGY OBX SEGMENT | 
|---|
|  | 155 | ; | 
|---|
|  | 156 | ; RORIENS       IENS of the radiology record in the file #70.03 | 
|---|
|  | 157 | ; | 
|---|
|  | 158 | ; Return Values: | 
|---|
|  | 159 | ;       <0  Error code | 
|---|
|  | 160 | ;        0  Ok | 
|---|
|  | 161 | ;       >0  Non-fatal error(s) | 
|---|
|  | 162 | ; | 
|---|
|  | 163 | OBX(RORIENS,IENS74) ; | 
|---|
|  | 164 | N ERRCNT,RC,RORMSG,ROROUT,RORSEG,RORTXT,TMP | 
|---|
|  | 165 | S (ERRCNT,RC)=0 | 
|---|
|  | 166 | D ECH^RORHL7(.CS) | 
|---|
|  | 167 | ;--- Check the parameters | 
|---|
|  | 168 | S:$E(RORIENS,$L(RORIENS))'="," RORIENS=RORIENS_"," | 
|---|
|  | 169 | ; | 
|---|
|  | 170 | ;--- Initialize the segment | 
|---|
|  | 171 | S RORSEG(0)="OBX" | 
|---|
|  | 172 | ; | 
|---|
|  | 173 | ;--- OBX-2 | 
|---|
|  | 174 | S RORSEG(2)="FT" | 
|---|
|  | 175 | ; | 
|---|
|  | 176 | ;--- OBX-11 | 
|---|
|  | 177 | S RORSEG(11)="F" | 
|---|
|  | 178 | ; | 
|---|
|  | 179 | ;-- Get the Report Text | 
|---|
|  | 180 | S TMP=$$GET1^DIQ(74,IENS74,200,,"RORTXT","RORMSG") | 
|---|
|  | 181 | I $G(DIERR)  D  S ERRCNT=ERRCNT+1 | 
|---|
|  | 182 | . D DBS^RORERR("RORMSG",-99,,,74,IENS74) | 
|---|
|  | 183 | I $D(RORTXT)>1  D  K RORTXT | 
|---|
|  | 184 | . D LOOP(.RORTXT,"RT"_CS_"Report Text"_CS_"VA080") | 
|---|
|  | 185 | ; | 
|---|
|  | 186 | ;--- Get the Impression Report | 
|---|
|  | 187 | S TMP=$$GET1^DIQ(74,IENS74,300,,"RORTXT","RORMSG") | 
|---|
|  | 188 | I $G(DIERR)  D  S ERRCNT=ERRCNT+1 | 
|---|
|  | 189 | . D DBS^RORERR("RORMSG",-99,,,74,IENS74) | 
|---|
|  | 190 | I $D(RORTXT)>1  D  K RORTXT | 
|---|
|  | 191 | . D LOOP(.RORTXT,"IT"_CS_"Impression Text"_CS_"VA080") | 
|---|
|  | 192 | ; | 
|---|
|  | 193 | ;--- Get the Clinical History | 
|---|
|  | 194 | S TMP=$$GET1^DIQ(70.03,RORIENS,400,,"RORTXT","RORMSG") | 
|---|
|  | 195 | I $G(DIERR)  D  S ERRCNT=ERRCNT+1 | 
|---|
|  | 196 | . D DBS^RORERR("RORMSG",-99,,,70.03,RORIENS) | 
|---|
|  | 197 | I $D(RORTXT)>1  D  K RORTXT | 
|---|
|  | 198 | . D LOOP(.RORTXT,"CH"_CS_"Clinical History"_CS_"VA080") | 
|---|
|  | 199 | ; | 
|---|
|  | 200 | Q ERRCNT | 
|---|