| [613] | 1 | ROREXT03 ;HCIOFO/SG - REGISTRY DATA EXTRACTION (OVERFLOW) ; 11/29/05 4:13pm | 
|---|
|  | 2 | ;;1.5;CLINICAL CASE REGISTRIES;;Feb 17, 2006 | 
|---|
|  | 3 | ; | 
|---|
|  | 4 | Q | 
|---|
|  | 5 | ; | 
|---|
|  | 6 | ;*****REGISTRY STATE CSR SEGMENT | 
|---|
|  | 7 | CSR(REGIEN) ; | 
|---|
|  | 8 | N CS,RC,RORINFO,RORSEG,RPTSTATS,TMP | 
|---|
|  | 9 | D ECH^RORHL7(.CS) | 
|---|
|  | 10 | ; | 
|---|
|  | 11 | ;--- Get the registry information | 
|---|
|  | 12 | S RC=$$REGINFO^RORUTL17(REGIEN,"RORINFO")  Q:RC<0 RC | 
|---|
|  | 13 | S TMP=$$STATS^RORTSK12(REGIEN,.RPTSTATS) | 
|---|
|  | 14 | ; | 
|---|
|  | 15 | ;--- Initialize the segment | 
|---|
|  | 16 | S RORSEG(0)="CSR" | 
|---|
|  | 17 | ; | 
|---|
|  | 18 | ;--- CSR-1 - Name of the registry and version of the CCR | 
|---|
|  | 19 | S TMP=+$P(ROREXT("VERSION"),U)              ; Version | 
|---|
|  | 20 | S:$P(TMP,".",2)="" $P(TMP,".",2)="0" | 
|---|
|  | 21 | S $P(TMP,".",3)=+$P(ROREXT("VERSION"),U,2)  ; Patch Number | 
|---|
|  | 22 | S $P(TMP,".",4)=+$$BUILD^ROR                ; Build Number | 
|---|
|  | 23 | S RORSEG(1)=$$ESCAPE^RORHL7($P($$REGNAME^RORUTL01(REGIEN),U))_CS_TMP | 
|---|
|  | 24 | ; | 
|---|
|  | 25 | ;--- CSR-3 - Institution | 
|---|
|  | 26 | S RORSEG(3)=$$SITE^RORUTL03(CS) | 
|---|
|  | 27 | ; | 
|---|
|  | 28 | ;--- CSR-4 - Patient ID | 
|---|
|  | 29 | S TMP="0"_CS_CS_CS_CS_"U" | 
|---|
|  | 30 | S $P(TMP,CS,6)=+$G(RORINFO("NPP"))  ; Number of pending patients | 
|---|
|  | 31 | S $P(TMP,CS,7)=+$P(RPTSTATS,U)      ; Number of reports | 
|---|
|  | 32 | S RORSEG(4)=TMP | 
|---|
|  | 33 | ; | 
|---|
|  | 34 | ;--- Store the segment | 
|---|
|  | 35 | D ADDSEG^RORHL7(.RORSEG) | 
|---|
|  | 36 | Q 0 | 
|---|
|  | 37 | ; | 
|---|
|  | 38 | ;***** REGISTRY STATE PID SEGMENT | 
|---|
|  | 39 | PID() ; | 
|---|
|  | 40 | N CS,RORSEG | 
|---|
|  | 41 | D ECH^RORHL7(.CS) | 
|---|
|  | 42 | ; | 
|---|
|  | 43 | ;--- Initialize the segment | 
|---|
|  | 44 | S RORSEG(0)="PID" | 
|---|
|  | 45 | ; | 
|---|
|  | 46 | ;--- PID-3 DFN and Station Number | 
|---|
|  | 47 | S RORSEG(3)="0"_CS_CS_CS_CS_"U" | 
|---|
|  | 48 | ; | 
|---|
|  | 49 | ;--- PID-5 Patient Name | 
|---|
|  | 50 | S RORSEG(5)="PSEUDO"_CS_"PATIENT" | 
|---|
|  | 51 | ; | 
|---|
|  | 52 | ;--- Store the segment | 
|---|
|  | 53 | D ADDSEG^RORHL7(.RORSEG) | 
|---|
|  | 54 | Q 0 | 
|---|
|  | 55 | ; | 
|---|
|  | 56 | ;***** GENERATES THE REGISTRY STATE HL7 MESSAGE | 
|---|
|  | 57 | ; | 
|---|
|  | 58 | ; REGIEN        Registry IEN | 
|---|
|  | 59 | ; | 
|---|
|  | 60 | ; Return Values: | 
|---|
|  | 61 | ;       <0  Error code | 
|---|
|  | 62 | ;        0  Ok | 
|---|
|  | 63 | ;       >0  Number of ignored errors | 
|---|
|  | 64 | ; | 
|---|
|  | 65 | REGSTATE(REGIEN) ; | 
|---|
|  | 66 | N RC | 
|---|
|  | 67 | ;--- Output pseudo-patient's segments | 
|---|
|  | 68 | S RC=$$PID()            Q:RC<0 RC | 
|---|
|  | 69 | S RC=$$CSR(REGIEN)      Q:RC<0 RC | 
|---|
|  | 70 | ;--- | 
|---|
|  | 71 | Q 0 | 
|---|
|  | 72 | ; | 
|---|
|  | 73 | ;***** SENDS THE CURRENT HL7 BATCH | 
|---|
|  | 74 | ; | 
|---|
|  | 75 | ; .RGIENLST     Reference to a local array containing registry | 
|---|
|  | 76 | ;               IENs as subscripts and IENs of the corresponding | 
|---|
|  | 77 | ;               patient's registry records as values. | 
|---|
|  | 78 | ; | 
|---|
|  | 79 | ; Return Values: | 
|---|
|  | 80 | ;       <0  Error Code | 
|---|
|  | 81 | ;        0  Ok | 
|---|
|  | 82 | ; | 
|---|
|  | 83 | SEND(RGIENLST) ; | 
|---|
|  | 84 | N IENS,MID,RC,REGIEN,RORFDA,RORMSG,TMP | 
|---|
|  | 85 | W:$G(RORPARM("DEBUG"))>1 !,"HL7 Batch ID: ",$G(ROREXT("HL7MID")) | 
|---|
|  | 86 | S RC=$$SEND^RORHL7(.MID)  Q:RC<0 RC | 
|---|
|  | 87 | I 'RC,$G(MID)'=""  D | 
|---|
|  | 88 | . S ROREXT("NBM")=$G(ROREXT("NBM"))+1 | 
|---|
|  | 89 | . S TMP="HL7 batch message "_MID_" has been generated" | 
|---|
|  | 90 | . D LOG^RORLOG(2,TMP) | 
|---|
|  | 91 | . ;--- Add message reference to the LAST BATCH CONTROL ID | 
|---|
|  | 92 | . ;--- multiples of the registries that are being processed | 
|---|
|  | 93 | . S (RC,REGIEN)=0 | 
|---|
|  | 94 | . F  S REGIEN=$O(RGIENLST(REGIEN))  Q:REGIEN'>0  D  Q:RC<0 | 
|---|
|  | 95 | . . K RORFDA,RORMSG  S IENS="+1,"_REGIEN_"," | 
|---|
|  | 96 | . . ;--- LAST BATCH CONTROL ID | 
|---|
|  | 97 | . . S RORFDA(798.122,IENS,.01)=MID | 
|---|
|  | 98 | . . ;--- INTERNAL BATCH ID | 
|---|
|  | 99 | . . S RORFDA(798.122,IENS,.02)=$G(ROREXT("HL7MID")) | 
|---|
|  | 100 | . . ;--- Batch Date/Time | 
|---|
|  | 101 | . . S TMP=+$G(ROREXT("HL7DT")) | 
|---|
|  | 102 | . . S RORFDA(798.122,IENS,.03)=$S(TMP>0:TMP,1:$$NOW^XLFDT) | 
|---|
|  | 103 | . . ;--- Create the record | 
|---|
|  | 104 | . . D UPDATE^DIE(,"RORFDA",,"RORMSG") | 
|---|
|  | 105 | . . S:$G(DIERR) RC=$$DBS^RORERR("RORMSG",-9,,PTIEN,798.122,IENS) | 
|---|
|  | 106 | Q 0 | 
|---|
|  | 107 | ; | 
|---|
|  | 108 | ;***** UPDATES THE REGISTRY RECORDS AFTER THE DATA EXTRACTION | 
|---|
|  | 109 | ; | 
|---|
|  | 110 | ; PTIEN         Patient IEN (DFN) | 
|---|
|  | 111 | ; | 
|---|
|  | 112 | ; .RGIENLST     Reference to a local array containing registry | 
|---|
|  | 113 | ;               IENs as subscripts and IENs of the corresponding | 
|---|
|  | 114 | ;               patient's registry records as values. | 
|---|
|  | 115 | ; | 
|---|
|  | 116 | ; BATCHID | 
|---|
|  | 117 | ; | 
|---|
|  | 118 | ; Return Values: | 
|---|
|  | 119 | ;       <0  Error Code | 
|---|
|  | 120 | ;        0  Ok | 
|---|
|  | 121 | ; | 
|---|
|  | 122 | UPDRECS(PTIEN,RGIENLST,BATCHID,ENDT) ; | 
|---|
|  | 123 | N FS,IEN,IENS,RC,REGIEN,RORFDA,RORMSG | 
|---|
|  | 124 | S (RC,REGIEN)=0 | 
|---|
|  | 125 | F  S REGIEN=$O(RGIENLST(REGIEN))  Q:REGIEN'>0  D  Q:RC<0 | 
|---|
|  | 126 | . K RORFDA,RORMSG | 
|---|
|  | 127 | . S IEN=+RGIENLST(REGIEN)  Q:IEN'>0 | 
|---|
|  | 128 | . S IENS=IEN_"," | 
|---|
|  | 129 | . ;--- Store the Message ID in the registry | 
|---|
|  | 130 | . S:BATCHID'="" RORFDA(798,IENS,10)=BATCHID | 
|---|
|  | 131 | . ;--- Otherwise, populate the MESSAGE ID field with a fake ID. | 
|---|
|  | 132 | . ;    This will force the message status checkup process to | 
|---|
|  | 133 | . ;    update the DATA ACKNOWLEDGED UNTIL field so that the next | 
|---|
|  | 134 | . ;    data extraction process will not browse through the data | 
|---|
|  | 135 | . ;--- already processed by the previous one. | 
|---|
|  | 136 | . S:BATCHID="" RORFDA(798,IENS,10)=ROREXT("HL7MID")_"-0" | 
|---|
|  | 137 | . ;--- Always update the DATA EXTRACTED UNTIL field | 
|---|
|  | 138 | . S RORFDA(798,IENS,9.2)=ENDT | 
|---|
|  | 139 | . ;--- Update the registry record | 
|---|
|  | 140 | . D FILE^DIE(,"RORFDA","RORMSG") | 
|---|
|  | 141 | . S:$G(DIERR) RC=$$DBS^RORERR("RORMSG",-9,,PTIEN,798,IENS) | 
|---|
|  | 142 | ;--- | 
|---|
|  | 143 | Q $S(RC<0:RC,1:0) | 
|---|