| 1 | RORHL06 ;HOIFO/BH,CRT - HL7 LIVER BIOPSY: OBR,OBX ; 3/13/06 9:23am | 
|---|
| 2 | ;;1.5;CLINICAL CASE REGISTRIES;**1**;Feb 17, 2006;Build 24 | 
|---|
| 3 | ; | 
|---|
| 4 | ; This routine uses the following IAs: | 
|---|
| 5 | ; | 
|---|
| 6 | ; #1995         $$CPT^ICPTCOD (supported) | 
|---|
| 7 | ; #10035        Read access to the PATIENT file (supported) | 
|---|
| 8 | ; | 
|---|
| 9 | Q | 
|---|
| 10 | ; | 
|---|
| 11 | ;***** SEARCHES FOR LIVER BIOPSY DATA | 
|---|
| 12 | ; | 
|---|
| 13 | ; RORDFN        IEN of the patient in the PATIENT file (#2) | 
|---|
| 14 | ; | 
|---|
| 15 | ; RORSTDT       Start Date (FileMan) | 
|---|
| 16 | ; RORENDT       End Date   (FileMan) | 
|---|
| 17 | ; | 
|---|
| 18 | ; Return Values: | 
|---|
| 19 | ;       <0  Error code | 
|---|
| 20 | ;        0  Ok | 
|---|
| 21 | ;       >0  Non-fatal error(s) | 
|---|
| 22 | ; | 
|---|
| 23 | ; The function uses the ^UTILITY($J,"W") global node. | 
|---|
| 24 | ; | 
|---|
| 25 | EN1(RORDFN,RORSTDT,RORENDT) ; | 
|---|
| 26 | N ERRCNT,FLDS,IDT,IENS,K5,LRDFN,QUIT,RC,SPECIMEN | 
|---|
| 27 | S (ERRCNT,RC)=0 | 
|---|
| 28 | ; | 
|---|
| 29 | ;--- Check if the patient exists | 
|---|
| 30 | S RORDFN=+$G(RORDFN) | 
|---|
| 31 | I '$D(^DPT(RORDFN))  D  Q RC | 
|---|
| 32 | . S RC=$$ERROR^RORERR(-36,,,RORDFN,2) | 
|---|
| 33 | ; | 
|---|
| 34 | S LRDFN=+$$LABREF^RORUTL18(RORDFN)  Q:LRDFN'>0 0 | 
|---|
| 35 | ; | 
|---|
| 36 | S FLDS="1.1;1.4" | 
|---|
| 37 | S RORENDT=$$INVDATE^RORUTL01(RORENDT) | 
|---|
| 38 | S RORSTDT=$$INVDATE^RORUTL01(RORSTDT) | 
|---|
| 39 | ; | 
|---|
| 40 | S IDT=$O(^LR(LRDFN,"SP",RORSTDT)) | 
|---|
| 41 | F  S IDT=$O(^LR(LRDFN,"SP",IDT),-1)  Q:'IDT!(IDT'>RORENDT)  D  Q:RC<0 | 
|---|
| 42 | . S K5=0,QUIT=0 | 
|---|
| 43 | . F  S K5=$O(^LR(LRDFN,"SP",IDT,.1,K5))  Q:'K5  D  Q:QUIT!(RC<0) | 
|---|
| 44 | . . S IENS=K5_","_IDT_","_LRDFN_"," | 
|---|
| 45 | . . S SPECIMEN=$$GET1^DIQ(63.812,IENS,.01,"E",,"RORMSG") | 
|---|
| 46 | . . I $G(DIERR)  D  S ERRCNT=ERRCNT+1  Q | 
|---|
| 47 | . . . D DBS^RORERR("RORMSG",-9,,,63.812,IENS) | 
|---|
| 48 | . . I $$UP^XLFSTR(SPECIMEN)["LIVER"  D | 
|---|
| 49 | . . . S IENS=IDT_","_LRDFN_"," | 
|---|
| 50 | . . . S TMP=$$OBR(IENS) | 
|---|
| 51 | . . . I TMP  S ERRCNT=ERRCNT+1  Q:TMP<0 | 
|---|
| 52 | . . . S TMP=$$OBX(IENS,FLDS) | 
|---|
| 53 | . . . I TMP  S ERRCNT=ERRCNT+1  Q:TMP<0 | 
|---|
| 54 | . . . S QUIT=1 | 
|---|
| 55 | ; | 
|---|
| 56 | Q $S(RC<0:RC,1:ERRCNT) | 
|---|
| 57 | ; | 
|---|
| 58 | ;***** LIVER BIOPSY OBR SEGMENT BUILDER | 
|---|
| 59 | ; | 
|---|
| 60 | ; RORIENS       IENS of Liver Biopsy Record in File #63.08 | 
|---|
| 61 | ; | 
|---|
| 62 | ; Return Values: | 
|---|
| 63 | ;       <0  Error code | 
|---|
| 64 | ;        0  Ok | 
|---|
| 65 | ;       >0  Non-fatal error(s) | 
|---|
| 66 | ; | 
|---|
| 67 | OBR(RORIENS) ; | 
|---|
| 68 | N BUF,CS,ERRCNT,FLDS,IEN,RC,RORMSG,ROROUT,RORSEG,TMP | 
|---|
| 69 | S (ERRCNT,RC)=0 | 
|---|
| 70 | D ECH^RORHL7(.CS) | 
|---|
| 71 | ;--- Check the parameters | 
|---|
| 72 | S:$E(RORIENS,$L(RORIENS))'="," RORIENS=RORIENS_"," | 
|---|
| 73 | ; | 
|---|
| 74 | ;--- Load the data (with a temporary fix for invalid | 
|---|
| 75 | ;--- output transform of the .01 field - ROR*1*8) | 
|---|
| 76 | D GETS^DIQ(63.08,RORIENS,".01","I","ROROUT","RORMSG") | 
|---|
| 77 | I $G(DIERR)  D  S ERRCNT=ERRCNT+1 | 
|---|
| 78 | . D DBS^RORERR("RORMSG",-9,,,63.08,RORIENS) | 
|---|
| 79 | D GETS^DIQ(63.08,RORIENS,".06;.07;.08","IE","ROROUT","RORMSG") | 
|---|
| 80 | I $G(DIERR)  D  S ERRCNT=ERRCNT+1 | 
|---|
| 81 | . D DBS^RORERR("RORMSG",-9,,,63.08,RORIENS) | 
|---|
| 82 | ; | 
|---|
| 83 | ;--- Initialize the segment | 
|---|
| 84 | S RORSEG(0)="OBR" | 
|---|
| 85 | ; | 
|---|
| 86 | ;--- OBR-3 - Surgical Path Acc # | 
|---|
| 87 | S RORSEG(3)=$G(ROROUT(63.08,RORIENS,.06,"E")) | 
|---|
| 88 | ; | 
|---|
| 89 | ;--- OBR-4 - Liver Biopsy CPT Code | 
|---|
| 90 | S BUF=47000,TMP=$$CPT^ICPTCOD(BUF) | 
|---|
| 91 | I TMP<0  D  S ERRCNT=ERRCNT+1,TMP="" | 
|---|
| 92 | . D ERROR^RORERR(-57,,$P(TMP,U,2),,+TMP,"$$CPT^ICPTCOD") | 
|---|
| 93 | S $P(BUF,CS,2)=$$ESCAPE^RORHL7($P(TMP,U,3)) | 
|---|
| 94 | S $P(BUF,CS,3)="C4" | 
|---|
| 95 | S RORSEG(4)=BUF | 
|---|
| 96 | ; | 
|---|
| 97 | ;--- OBR-7 - Date/Time Specimen Taken | 
|---|
| 98 | S TMP=$G(ROROUT(63.08,RORIENS,.01,"I")) | 
|---|
| 99 | Q:TMP'>0 $$ERROR^RORERR(-95,,,,63.08,RORIENS,.01) | 
|---|
| 100 | S RORSEG(7)=$$FMTHL7^XLFDT(TMP) | 
|---|
| 101 | ; | 
|---|
| 102 | ;--- OBR-16 - Surgeon/Physician | 
|---|
| 103 | S RORSEG(16)=$G(ROROUT(63.08,RORIENS,.07,"I")) | 
|---|
| 104 | ; | 
|---|
| 105 | ;--- OBR-24 - Service Section ID | 
|---|
| 106 | S RORSEG(24)="SP" | 
|---|
| 107 | ; | 
|---|
| 108 | ;--- OBR-44 - Division | 
|---|
| 109 | S TMP=$G(ROROUT(63.08,RORIENS,.08,"E")) | 
|---|
| 110 | S IEN=$S(TMP'="":+$O(^SC("B",TMP,0)),1:0) | 
|---|
| 111 | S RORSEG(44)=$$DIV44^RORHLUT1(IEN,CS) | 
|---|
| 112 | ; | 
|---|
| 113 | ;--- Store the segment | 
|---|
| 114 | D ADDSEG^RORHL7(.RORSEG) | 
|---|
| 115 | Q $S(RC<0:RC,1:ERRCNT) | 
|---|
| 116 | ; | 
|---|
| 117 | ;***** LIVER BIOPSY OBX SEGMENT(S) BUILDER | 
|---|
| 118 | ; | 
|---|
| 119 | ; RORIENS       IENS of Liver Biopsy Record in File #63.08 | 
|---|
| 120 | ; RORFLDS       List of WP fields to return as OBX'es | 
|---|
| 121 | ; | 
|---|
| 122 | ; Return Values: | 
|---|
| 123 | ;       <0  Error code | 
|---|
| 124 | ;        0  Ok | 
|---|
| 125 | ;       >0  Non-fatal error(s) | 
|---|
| 126 | ; | 
|---|
| 127 | OBX(RORIENS,RORFLDS) ; | 
|---|
| 128 | N BUF,CS,DIWF,DIWL,DIWR,ERRCNT,FLD,I,RORII,PZ,RC,RORMSG,ROROUT,RORRES,RORSEG,SCS,TMP,X | 
|---|
| 129 | S (ERRCNT,RC)=0 | 
|---|
| 130 | D ECH^RORHL7(.CS,.SCS) | 
|---|
| 131 | ;--- Check the parameters | 
|---|
| 132 | S:$E(RORIENS,$L(RORIENS))'="," RORIENS=RORIENS_"," | 
|---|
| 133 | ; | 
|---|
| 134 | ;--- Load the data | 
|---|
| 135 | D GETS^DIQ(63.08,RORIENS,RORFLDS,"EI","ROROUT","RORMSG") | 
|---|
| 136 | I $G(DIERR)  D  S ERRCNT=ERRCNT+1 | 
|---|
| 137 | . D DBS^RORERR("RORMSG",-99,,,63.08,RORIENS) | 
|---|
| 138 | ; | 
|---|
| 139 | ;--- Initialize the segment | 
|---|
| 140 | S RORSEG(0)="OBX" | 
|---|
| 141 | ; | 
|---|
| 142 | ;--- OBX-2 | 
|---|
| 143 | S RORSEG(2)="FT" | 
|---|
| 144 | ; | 
|---|
| 145 | ;--- OBX-11 | 
|---|
| 146 | S RORSEG(11)="F" | 
|---|
| 147 | ; | 
|---|
| 148 | F PZ=1:1  S FLD=$P(RORFLDS,";",PZ)  Q:FLD=""  D  Q:RC<0 | 
|---|
| 149 | . S BUF=47000,TMP=$$CPT^ICPTCOD(BUF) | 
|---|
| 150 | . I TMP<0  D  S ERRCNT=ERRCNT+1,TMP="" | 
|---|
| 151 | . . D ERROR^RORERR(-57,,$P(TMP,U,2),,+TMP,"$$CPT^ICPTCOD") | 
|---|
| 152 | . S $P(BUF,SCS,2)=$$GET1^DID(63.08,FLD,,"LABEL",,"RORMSG") | 
|---|
| 153 | . S $P(BUF,CS,2)=$$ESCAPE^RORHL7($P(TMP,U,3)) | 
|---|
| 154 | . S $P(BUF,CS,3)="C4" | 
|---|
| 155 | . S RORSEG(3)=BUF | 
|---|
| 156 | . ;--- | 
|---|
| 157 | . K ^UTILITY($J,"W") | 
|---|
| 158 | . S DIWL=1,DIWR=72 | 
|---|
| 159 | . S RORII=0 | 
|---|
| 160 | . F  S RORII=$O(ROROUT(63.08,RORIENS,FLD,RORII))  Q:'RORII  D | 
|---|
| 161 | . . S X=ROROUT(63.08,RORIENS,FLD,RORII)  D ^DIWP | 
|---|
| 162 | . ;--- | 
|---|
| 163 | . S I=0 | 
|---|
| 164 | . F  S I=$O(^UTILITY($J,"W",DIWL,I))  Q:'I  D | 
|---|
| 165 | . . S RORSEG(5)=$G(^UTILITY($J,"W",DIWL,I,0)) | 
|---|
| 166 | . . ;--- Store the segment | 
|---|
| 167 | . . D ADDSEG^RORHL7(.RORSEG) | 
|---|
| 168 | ; | 
|---|
| 169 | Q $S(RC<0:RC,1:ERRCNT) | 
|---|