| 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 | 
|---|