| [613] | 1 | RORHL02 ;HOIFO/CRT,SG - HL7 REGISTRY DATA: CSP,CSR,CSS ; 12/6/05 2:36pm | 
|---|
|  | 2 | ;;1.5;CLINICAL CASE REGISTRIES;;Feb 17, 2006 | 
|---|
|  | 3 | ; | 
|---|
|  | 4 | Q | 
|---|
|  | 5 | ; | 
|---|
|  | 6 | ;***** CSP SEGMENTS BUILDER | 
|---|
|  | 7 | ; | 
|---|
|  | 8 | ; RORIENS       IENS of Patient Record in Registry File | 
|---|
|  | 9 | ; | 
|---|
|  | 10 | ; DXDTS         Main time frame for data extraction in | 
|---|
|  | 11 | ;               StartDate^EndDate format | 
|---|
|  | 12 | ; | 
|---|
|  | 13 | ; Return Values: | 
|---|
|  | 14 | ;       <0  Error Code | 
|---|
|  | 15 | ;        0  Ok | 
|---|
|  | 16 | ;       >0  Non-fatal error(s) | 
|---|
|  | 17 | ; | 
|---|
|  | 18 | CSP(RORIENS,DXDTS) ; | 
|---|
|  | 19 | N CS,ERRCNT,FLDS,RC,RORMSG,ROROUT,STATUS,TMP | 
|---|
|  | 20 | S (ERRCNT,RC)=0 | 
|---|
|  | 21 | ;--- Check the parameters | 
|---|
|  | 22 | S:$E(RORIENS,$L(RORIENS))'="," RORIENS=RORIENS_"," | 
|---|
|  | 23 | ; | 
|---|
|  | 24 | S FLDS="1;2;3;3.2;6" | 
|---|
|  | 25 | D GETS^DIQ(798,RORIENS,FLDS,"IE","ROROUT","RORMSG") | 
|---|
|  | 26 | Q:$G(DIERR) $$DBS^RORERR("RORMSG",-9,,,798,RORIENS) | 
|---|
|  | 27 | I $$ICRDEF^RORHIVUT(+RORIENS)  D  Q:RC<0 RC | 
|---|
|  | 28 | . D GETS^DIQ(799.4,RORIENS,"9.01","IE","ROROUT","RORMSG") | 
|---|
|  | 29 | . S:$G(DIERR) RC=$$DBS^RORERR("RORMSG",-9,,,799.4,RORIENS) | 
|---|
|  | 30 | ; | 
|---|
|  | 31 | S STATUS=+$G(ROROUT(798,RORIENS,3,"I")) | 
|---|
|  | 32 | ;--- UPDATE | 
|---|
|  | 33 | I $G(DXDTS)>0  D  Q:RC<0 RC | 
|---|
|  | 34 | . S RC=$$CSPSEG(0,$P(DXDTS,U),$P(DXDTS,U,2)) | 
|---|
|  | 35 | ;--- SELECT | 
|---|
|  | 36 | S RC=$$CSPSEG(1,$G(ROROUT(798,RORIENS,3.2,"I")))  Q:RC<0 RC | 
|---|
|  | 37 | ;--- ADD | 
|---|
|  | 38 | S RC=$$CSPSEG(2,$G(ROROUT(798,RORIENS,1,"I")))  Q:RC<0 RC | 
|---|
|  | 39 | ;--- CONFIRM | 
|---|
|  | 40 | I $G(ROROUT(798,RORIENS,2,"I"))>0  D  Q:RC<0 RC | 
|---|
|  | 41 | . S RC=$$CSPSEG(3,ROROUT(798,RORIENS,2,"I")) | 
|---|
|  | 42 | ;--- DELETE | 
|---|
|  | 43 | I STATUS=5  D  Q:RC<0 RC | 
|---|
|  | 44 | . S RC=$$CSPSEG(4,$G(ROROUT(798,RORIENS,6,"I"))) | 
|---|
|  | 45 | ;--- CDC | 
|---|
|  | 46 | I $G(ROROUT(799.4,RORIENS,9.01,"I"))>0  D  Q:RC<0 RC | 
|---|
|  | 47 | . S RC=$$CSPSEG(5,ROROUT(799.4,RORIENS,9.01,"I")) | 
|---|
|  | 48 | ;--- | 
|---|
|  | 49 | Q ERRCNT | 
|---|
|  | 50 | ; | 
|---|
|  | 51 | ;***** LOW-LEVEL CSP BUILDER | 
|---|
|  | 52 | ; | 
|---|
|  | 53 | ; RGEVC         Registry event code | 
|---|
|  | 54 | ; DATE          Event date (FileMan) | 
|---|
|  | 55 | ; [ENDT]        End date (FileMan) | 
|---|
|  | 56 | ; | 
|---|
|  | 57 | ; Return Values: | 
|---|
|  | 58 | ;       <0  Error Code | 
|---|
|  | 59 | ;        0  Ok | 
|---|
|  | 60 | ; | 
|---|
|  | 61 | CSPSEG(RGEVC,DATE,ENDT,CSP4) ; | 
|---|
|  | 62 | ;;UPDATE^SELECT^ADD^CONFIRM^DELETE^CDC^MERGE | 
|---|
|  | 63 | N CS,RORSEG,TMP | 
|---|
|  | 64 | D ECH^RORHL7(.CS) | 
|---|
|  | 65 | ; | 
|---|
|  | 66 | ;--- Initialize the segment | 
|---|
|  | 67 | S RORSEG(0)="CSP" | 
|---|
|  | 68 | ; | 
|---|
|  | 69 | ;--- CSP-1 | 
|---|
|  | 70 | S TMP=$S(RGEVC'<0:$P($P($T(CSPSEG+1),";;",2),U,RGEVC+1),1:"") | 
|---|
|  | 71 | Q:TMP="" $$ERROR^RORERR(-88,,,,"RGEVC",RGEVC) | 
|---|
|  | 72 | S RORSEG(1)=RGEVC_CS_TMP | 
|---|
|  | 73 | ; | 
|---|
|  | 74 | ;--- CSP-2 | 
|---|
|  | 75 | S RORSEG(2)=$$FM2HL^RORHL7(DATE) | 
|---|
|  | 76 | ; | 
|---|
|  | 77 | ;--- CSP-3 | 
|---|
|  | 78 | S:$G(ENDT)>0 RORSEG(3)=$$FM2HL^RORHL7(ENDT) | 
|---|
|  | 79 | ; | 
|---|
|  | 80 | ;--- CSP-4 | 
|---|
|  | 81 | S:$G(CSP4)'?." " RORSEG(4)=CSP4 | 
|---|
|  | 82 | ; | 
|---|
|  | 83 | ;--- Store the segment | 
|---|
|  | 84 | D ADDSEG^RORHL7(.RORSEG) | 
|---|
|  | 85 | Q 0 | 
|---|
|  | 86 | ; | 
|---|
|  | 87 | ;***** CSR SEGMENT BUILDER | 
|---|
|  | 88 | ; | 
|---|
|  | 89 | ; [RORIENS]     IENS of Patient Record in Registry File. Either this | 
|---|
|  | 90 | ;               parameter or the PTIEN must have a valid value. | 
|---|
|  | 91 | ; | 
|---|
|  | 92 | ; [PTIEN]       Patient IEN (DFN). If no value is provided for this | 
|---|
|  | 93 | ;               parameter, then the function uses the value of the | 
|---|
|  | 94 | ;               .01 field of the patient's registry record. | 
|---|
|  | 95 | ; | 
|---|
|  | 96 | ; [RORFLDS]     Segment Fields to populate | 
|---|
|  | 97 | ;               (1,3,4,6,9,10,12 available) | 
|---|
|  | 98 | ; | 
|---|
|  | 99 | ; Return Values: | 
|---|
|  | 100 | ;       <0  Error Code | 
|---|
|  | 101 | ;        0  Ok | 
|---|
|  | 102 | ;       >0  Non-fatal error(s) | 
|---|
|  | 103 | ; | 
|---|
|  | 104 | CSR(RORIENS,PTIEN,RORFLDS) ; | 
|---|
|  | 105 | N BUF,CS,ERRCNT,HIVIENS,RC,RORMSG,ROROUT,RORSEG,RORTXT,RPS,SCS,TMP,VER | 
|---|
|  | 106 | S (ERRCNT,RC)=0,HIVIENS="" | 
|---|
|  | 107 | D ECH^RORHL7(.CS,.SCS,.RPS) | 
|---|
|  | 108 | S PTIEN=+$G(PTIEN) | 
|---|
|  | 109 | ; | 
|---|
|  | 110 | I $G(RORIENS)>0  D  Q:RC<0 RC | 
|---|
|  | 111 | . S:$E(RORIENS,$L(RORIENS))'="," RORIENS=RORIENS_"," | 
|---|
|  | 112 | . D GETS^DIQ(798,RORIENS,".01;.02;1","IE","ROROUT","RORMSG") | 
|---|
|  | 113 | . I $G(DIERR)  S RC=$$DBS^RORERR("RORMSG",-9,,,798,RORIENS)  Q | 
|---|
|  | 114 | . S:PTIEN'>0 PTIEN=+$G(ROROUT(798,RORIENS,.01,"I")) | 
|---|
|  | 115 | . S:$D(^RORDATA(799.4,+RORIENS,0)) HIVIENS=RORIENS | 
|---|
|  | 116 | E  S RORIENS="" | 
|---|
|  | 117 | ; | 
|---|
|  | 118 | I $G(RORFLDS)'=""  D | 
|---|
|  | 119 | . S:$E(RORFLDS)'="," RORFLDS=","_RORFLDS | 
|---|
|  | 120 | . S:$E(RORFLDS,$L(RORFLDS))'="," RORFLDS=RORFLDS_"," | 
|---|
|  | 121 | E  S RORFLDS=",1,3,4,6,9,10,12," ; Default HL7 fields | 
|---|
|  | 122 | ; | 
|---|
|  | 123 | ;--- Initialize the segment | 
|---|
|  | 124 | S RORSEG(0)="CSR" | 
|---|
|  | 125 | ; | 
|---|
|  | 126 | ;--- CSR-1 - Name of the registry and version of the CCR | 
|---|
|  | 127 | I RORFLDS[",1,"  D | 
|---|
|  | 128 | . S VER=+$P(ROREXT("VERSION"),U)              ; Version | 
|---|
|  | 129 | . S:$P(VER,".",2)="" $P(VER,".",2)="0" | 
|---|
|  | 130 | . S $P(VER,".",3)=+$P(ROREXT("VERSION"),U,2)  ; Patch Number | 
|---|
|  | 131 | . S $P(VER,".",4)=+$$BUILD^ROR                ; Build Number | 
|---|
|  | 132 | . S TMP=$S(RORIENS'="":$G(ROROUT(798,RORIENS,.02,"E")),1:"") | 
|---|
|  | 133 | . S RORSEG(1)=$S(TMP'="":TMP,1:"CCR")_CS_VER | 
|---|
|  | 134 | ; | 
|---|
|  | 135 | ;--- CSR-3 - Institution | 
|---|
|  | 136 | I RORFLDS[",3,"  D | 
|---|
|  | 137 | . S RORSEG(3)=$$SITE^RORUTL03(CS) | 
|---|
|  | 138 | ; | 
|---|
|  | 139 | ;--- CSR-4 - Patient ID | 
|---|
|  | 140 | I RORFLDS[",4,"  D | 
|---|
|  | 141 | . S RORSEG(4)=PTIEN_CS_CS_CS_"USVHA"_CS_"PI" | 
|---|
|  | 142 | ; | 
|---|
|  | 143 | ;--- CSR-6 - Date when added to the registry | 
|---|
|  | 144 | I RORFLDS[",6,",RORIENS'=""  D  Q:RC<0 RC | 
|---|
|  | 145 | . S TMP=$$FMTHL7^XLFDT($G(ROROUT(798,RORIENS,1,"I"))\1) | 
|---|
|  | 146 | . I TMP'>0  S RC=$$ERROR^RORERR(-95,,,,798,RORIENS,1)  Q | 
|---|
|  | 147 | . S RORSEG(6)=TMP | 
|---|
|  | 148 | ; | 
|---|
|  | 149 | ;--- CSR-9 - Date of Clinical AIDS (HIV) | 
|---|
|  | 150 | I RORFLDS[",9,",HIVIENS'=""  D  Q:RC<0 RC | 
|---|
|  | 151 | . D GETS^DIQ(799.4,HIVIENS,".02;.03","I","ROROUT","RORMSG") | 
|---|
|  | 152 | . I $G(DIERR)  D  S ERRCNT=ERRCNT+1  Q | 
|---|
|  | 153 | . . D DBS^RORERR("RORMSG",-9,,,799.4,HIVIENS) | 
|---|
|  | 154 | . I '$G(ROROUT(799.4,HIVIENS,.02,"I"))  S TMP="" | 
|---|
|  | 155 | . E  S TMP=$G(ROROUT(799.4,HIVIENS,.03,"I")) | 
|---|
|  | 156 | . S RORSEG(9)=$$FM2HL^RORHL7(TMP) | 
|---|
|  | 157 | ; | 
|---|
|  | 158 | ;--- CSR-10 - Reason for addition of the patient to the registry | 
|---|
|  | 159 | I RORFLDS[",10,",RORIENS'=""  D  Q:RC<0 RC | 
|---|
|  | 160 | . S RORSEG(10)=$$ADREASON^RORHLUT1(RORIENS,CS) | 
|---|
|  | 161 | ; | 
|---|
|  | 162 | ;--- CSR-12 - Risk factors | 
|---|
|  | 163 | I RORFLDS[",12,",HIVIENS'=""  D  Q:RC<0 RC | 
|---|
|  | 164 | . N CNT,EV,FLD,RFLST,RORBUF,RORQUIT,RORRISK | 
|---|
|  | 165 | . S RFLST="14.01;14.02;14.03;14.04;14.07;14.08;14.09;14.1;14.11;14.12;14.13;14.16;14.17" | 
|---|
|  | 166 | . D GETS^DIQ(799.4,HIVIENS,RFLST,"I","RORBUF","RORMSG") | 
|---|
|  | 167 | . I $G(DIERR)  D  S ERRCNT=ERRCNT+1 | 
|---|
|  | 168 | . . D DBS^RORERR("RORMSG",-9,,,799.4,HIVIENS) | 
|---|
|  | 169 | . ;--- | 
|---|
|  | 170 | . S RORRISK="",RORQUIT=0 | 
|---|
|  | 171 | . F CNT=1:1  S FLD=$P(RFLST,";",CNT)  Q:FLD=""  D:FLD>0  Q:RORQUIT | 
|---|
|  | 172 | . . S TMP=$G(RORBUF(799.4,HIVIENS,FLD,"I")) | 
|---|
|  | 173 | . . S EV=$S(TMP=0:"NO",TMP=1:"YES",TMP=9:"UNKNOWN",1:"") | 
|---|
|  | 174 | . . I EV=""  S RORRISK="",RORQUIT=1  Q | 
|---|
|  | 175 | . . S $P(RORRISK,RPS,CNT)=TMP_CS_EV | 
|---|
|  | 176 | . S RORSEG(12)=RORRISK | 
|---|
|  | 177 | ; | 
|---|
|  | 178 | ;--- Store the segment | 
|---|
|  | 179 | D ADDSEG^RORHL7(.RORSEG) | 
|---|
|  | 180 | Q $S(RC<0:RC,1:ERRCNT) | 
|---|