ROREXT03 ;HCIOFO/SG - REGISTRY DATA EXTRACTION (OVERFLOW) ; 11/29/05 4:13pm ;;1.5;CLINICAL CASE REGISTRIES;;Feb 17, 2006 ; Q ; ;*****REGISTRY STATE CSR SEGMENT CSR(REGIEN) ; N CS,RC,RORINFO,RORSEG,RPTSTATS,TMP D ECH^RORHL7(.CS) ; ;--- Get the registry information S RC=$$REGINFO^RORUTL17(REGIEN,"RORINFO") Q:RC<0 RC S TMP=$$STATS^RORTSK12(REGIEN,.RPTSTATS) ; ;--- Initialize the segment S RORSEG(0)="CSR" ; ;--- CSR-1 - Name of the registry and version of the CCR S TMP=+$P(ROREXT("VERSION"),U) ; Version S:$P(TMP,".",2)="" $P(TMP,".",2)="0" S $P(TMP,".",3)=+$P(ROREXT("VERSION"),U,2) ; Patch Number S $P(TMP,".",4)=+$$BUILD^ROR ; Build Number S RORSEG(1)=$$ESCAPE^RORHL7($P($$REGNAME^RORUTL01(REGIEN),U))_CS_TMP ; ;--- CSR-3 - Institution S RORSEG(3)=$$SITE^RORUTL03(CS) ; ;--- CSR-4 - Patient ID S TMP="0"_CS_CS_CS_CS_"U" S $P(TMP,CS,6)=+$G(RORINFO("NPP")) ; Number of pending patients S $P(TMP,CS,7)=+$P(RPTSTATS,U) ; Number of reports S RORSEG(4)=TMP ; ;--- Store the segment D ADDSEG^RORHL7(.RORSEG) Q 0 ; ;***** REGISTRY STATE PID SEGMENT PID() ; N CS,RORSEG D ECH^RORHL7(.CS) ; ;--- Initialize the segment S RORSEG(0)="PID" ; ;--- PID-3 DFN and Station Number S RORSEG(3)="0"_CS_CS_CS_CS_"U" ; ;--- PID-5 Patient Name S RORSEG(5)="PSEUDO"_CS_"PATIENT" ; ;--- Store the segment D ADDSEG^RORHL7(.RORSEG) Q 0 ; ;***** GENERATES THE REGISTRY STATE HL7 MESSAGE ; ; REGIEN Registry IEN ; ; Return Values: ; <0 Error code ; 0 Ok ; >0 Number of ignored errors ; REGSTATE(REGIEN) ; N RC ;--- Output pseudo-patient's segments S RC=$$PID() Q:RC<0 RC S RC=$$CSR(REGIEN) Q:RC<0 RC ;--- Q 0 ; ;***** SENDS THE CURRENT HL7 BATCH ; ; .RGIENLST Reference to a local array containing registry ; IENs as subscripts and IENs of the corresponding ; patient's registry records as values. ; ; Return Values: ; <0 Error Code ; 0 Ok ; SEND(RGIENLST) ; N IENS,MID,RC,REGIEN,RORFDA,RORMSG,TMP W:$G(RORPARM("DEBUG"))>1 !,"HL7 Batch ID: ",$G(ROREXT("HL7MID")) S RC=$$SEND^RORHL7(.MID) Q:RC<0 RC I 'RC,$G(MID)'="" D . S ROREXT("NBM")=$G(ROREXT("NBM"))+1 . S TMP="HL7 batch message "_MID_" has been generated" . D LOG^RORLOG(2,TMP) . ;--- Add message reference to the LAST BATCH CONTROL ID . ;--- multiples of the registries that are being processed . S (RC,REGIEN)=0 . F S REGIEN=$O(RGIENLST(REGIEN)) Q:REGIEN'>0 D Q:RC<0 . . K RORFDA,RORMSG S IENS="+1,"_REGIEN_"," . . ;--- LAST BATCH CONTROL ID . . S RORFDA(798.122,IENS,.01)=MID . . ;--- INTERNAL BATCH ID . . S RORFDA(798.122,IENS,.02)=$G(ROREXT("HL7MID")) . . ;--- Batch Date/Time . . S TMP=+$G(ROREXT("HL7DT")) . . S RORFDA(798.122,IENS,.03)=$S(TMP>0:TMP,1:$$NOW^XLFDT) . . ;--- Create the record . . D UPDATE^DIE(,"RORFDA",,"RORMSG") . . S:$G(DIERR) RC=$$DBS^RORERR("RORMSG",-9,,PTIEN,798.122,IENS) Q 0 ; ;***** UPDATES THE REGISTRY RECORDS AFTER THE DATA EXTRACTION ; ; PTIEN Patient IEN (DFN) ; ; .RGIENLST Reference to a local array containing registry ; IENs as subscripts and IENs of the corresponding ; patient's registry records as values. ; ; BATCHID ; ; Return Values: ; <0 Error Code ; 0 Ok ; UPDRECS(PTIEN,RGIENLST,BATCHID,ENDT) ; N FS,IEN,IENS,RC,REGIEN,RORFDA,RORMSG S (RC,REGIEN)=0 F S REGIEN=$O(RGIENLST(REGIEN)) Q:REGIEN'>0 D Q:RC<0 . K RORFDA,RORMSG . S IEN=+RGIENLST(REGIEN) Q:IEN'>0 . S IENS=IEN_"," . ;--- Store the Message ID in the registry . S:BATCHID'="" RORFDA(798,IENS,10)=BATCHID . ;--- Otherwise, populate the MESSAGE ID field with a fake ID. . ; This will force the message status checkup process to . ; update the DATA ACKNOWLEDGED UNTIL field so that the next . ; data extraction process will not browse through the data . ;--- already processed by the previous one. . S:BATCHID="" RORFDA(798,IENS,10)=ROREXT("HL7MID")_"-0" . ;--- Always update the DATA EXTRACTED UNTIL field . S RORFDA(798,IENS,9.2)=ENDT . ;--- Update the registry record . D FILE^DIE(,"RORFDA","RORMSG") . S:$G(DIERR) RC=$$DBS^RORERR("RORMSG",-9,,PTIEN,798,IENS) ;--- Q $S(RC<0:RC,1:0)