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