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