RORUPD04 ;HCIOFO/SG - PROCESSING OF THE LAB DATA ; 12/8/05 8:20am ;;1.5;CLINICAL CASE REGISTRIES;;Feb 17, 2006 ; Q ; ;***** CHECKS AN INDICATOR CONDITION ; ; LSI Indicator (internal value) ; VAL Indicated value ; .RESULT( Result value ; "RH") Reference high ; "RL") Reference low ; ; Return Values: ; 0 False ; >0 True ; CHKIND(LSI,VAL,RESULT) ; S RESULT=$$UP^XLFSTR(RESULT) ;--- Reference Range I LSI=1 D Q LSI . I $G(RESULT("RL"))'="" Q:RESULTRESULT("RH") . S LSI=0 ;--- Positive Result I LSI=6 S VAL=0 D Q VAL . I (RESULT="P")!(RESULT="R") S VAL=1 Q . I RESULT'["POS",RESULT'["REA",RESULT'["DETEC" Q . I RESULT'["NEG",RESULT'["NO",RESULT'["IND" S VAL=1 ;--- Compare to the value Q:VAL="" 0 I LSI=3 Q (RESULT>VAL) I LSI=4 Q (RESULT60:"^CD",1:"^RAD") ;--- Check the event references if the events are enabled I $G(RORUPD("FLAGS"))["E" D Q:RC'>0 RC . S RC=$$GET^RORUPP02(PATIEN,1,.UPDSTART,.DSEND) . ;--- If dates have been modified according to the event references, . ;--- they are the collection dates/times. . S:RC>1 UPDSTART=UPDSTART\1,DSEND=$$FMADD^XLFDT(DSEND\1,1),DM="^CD" ;--- S TMP=$$LABREF^RORUTL18(PATIEN) Q:TMP'>0 TMP S LABIENS=TMP_",",RC=0 ; S RORLAB=$$ALLOC^RORTMP() D D FREE^RORTMP(RORLAB) . ;--- Load the Lab results . S RC=$$LABRSLTS^RORUTL02(PATIEN,UPDSTART_DM,DSEND_DM,RORLAB) . I RC<0 D INCEC^RORUPDUT(.RC) Q . ;--- Process the results . Q:$$RESULTS(PATIEN,RORLAB)<0 . ;--- Load necessary data elements . I $D(RORUPD("SR",RORFILE,"F"))>1 D I TMP<0 D INCEC^RORUPDUT() Q . . S TMP=$$LOAD(LABIENS) . ;--- Apply "before" rules . S RC=$$APLRULES^RORUPDUT(RORFILE,LABIENS,"B") . I RC D INCEC^RORUPDUT(.RC) Q . ;--- Apply "after" rules . S RC=$$APLRULES^RORUPDUT(RORFILE,LABIENS,"A") . I RC D INCEC^RORUPDUT(.RC) Q ; D CLRDES^RORUPDUT(RORFILE) Q RC ; ;***** LOAD DATA ELEMENTS ; ; IENS IENS of the current record ; ; Return values: ; <0 Error code ; 0 Ok ; LOAD(IENS) ; N RC S RC=0 ;--- API #1 I $D(RORUPD("SR",RORFILE,"F",1)) D Q:RC<0 RC . S RC=$$LOADFLDS^RORUPDUT(RORFILE,IENS) ;--- API #2 Q 0 ; ;***** EXTRACTS PROPER RESULT CODE FROM THE OBSERVATION ID ; ; OID Observation ID in HL7 format ; CS HL7 component separator ; ; Return values: ; Lab result code (see the LA7SC parameter of ; the GCPR^LA7QRY entry point) ; ^1: Result code ; ^2: Coding system ("LN" or "NLT") ; Or an empty string if coding system is unknown or there ; are no active search indicators exist for this code. ; RESCODE(OID,CS) ; N CODE,I,RESCODE,TYPE S RESCODE="" F I=1,4 D Q:RESCODE'="" . S CODE=$P(OID,CS,I),TYPE=$P(OID,CS,I+2) Q:CODE="" . S TYPE=$S(TYPE="LN":"LN",TYPE="99VA64":"NLT",1:"") Q:TYPE="" . ;--- Check if the search indicators exist for this code . S RESCODE=CODE_U_TYPE . S:$D(@RORUPDPI@("LS",RESCODE))<10 RESCODE="" Q RESCODE ; ;***** LOADS AND PROCESSES RESULTS OF THE TESTS ; ; PATIEN Patient IEN ; ROR8LAB Closed root of the HL7 message created by GCPR^LA7QRY ; ; Return values: ; <0 Error code ; 0 Ok ; RESULTS(PATIEN,ROR8LAB) ; N CS,DATE,FS,I,ISEG,LOCATION,LSIEN,LSNODE,RC,RESCODE,RESVAL,RORHL,SEG,SEGTYPE,TMP S ISEG="",RC=0 F S ISEG=$O(@ROR8LAB@(ISEG)) Q:ISEG="" D Q:RC<0 . S SEG=$G(@ROR8LAB@(ISEG)) . ;--- Extract separators from the MSH segment . I $E(SEG,1,3)="MSH" D Q . . S (RORHL("FS"),FS)=$E(SEG,4),TMP=$P(SEG,FS,2) . . S CS=$E(TMP,1) . ;--- Skip all segments except OBX . S SEGTYPE=$P(SEG,FS) . Q:SEGTYPE'="OBX" . ;--- Get lab result code . S RESCODE=$$RESCODE($P(SEG,FS,4),CS) Q:RESCODE="" . ;--- Load the full segment . D LOADSEG^RORHL7A(.SEG,$NA(@ROR8LAB@(ISEG))) . ;--- Get the result data . S RESVAL=$G(SEG(5)),TMP=$G(SEG(7)) . S RESVAL("RL")=$P(TMP,"-",1) ; Reference Low . S RESVAL("RH")=$P(TMP,"-",2) ; Reference High . S DATE=$$HL7TFM^XLFDT($G(SEG(14)),"L")\1 . ;--- Analyze the result . K LOCATION . S LSNODE=$NA(@RORUPDPI@("LS",RESCODE)) . S LSIEN="" . F S LSIEN=$O(@LSNODE@(LSIEN)) Q:LSIEN="" D Q:RC<0 . . S I="",RC=0 . . F S I=$O(@LSNODE@(LSIEN,I)) Q:I="" D Q:RC . . . S TMP=$G(@LSNODE@(LSIEN,I)) . . . S RC=$$CHKIND(+TMP,$P(TMP,U,2),.RESVAL) . . Q:RC'>0 . . S TMP=+$G(RORVALS("LS",LSIEN)) . . I TMP Q:(DATE'>0)!(DATE'0 . S LOC=$P($G(RORVALS("LS",LSIEN)),U,2) . S SRDT=$$GETVAL^RORUPDUT("ROR SRDT") . I (DATE0) D Q . . S RORVALS("SV","ROR SRDT")=DATE . . S RORVALS("SV","ROR SRLOC")=LOC . I DATE=SRDT D:$$GETVAL^RORUPDUT("ROR SRLOC")="" Q . . S RORVALS("SV","ROR SRLOC")=LOC Q 1