Home   Package List   Routine Alphabetical List   Global Alphabetical List   FileMan Files List   FileMan Sub-Files List   Package Component Lists   Package-Namespace Mapping  
Routine: LRVR3

LRVR3.m

Go to the documentation of this file.
  1. LRVR3 ;DALOI/STAFF - LAB ROUTINE DATA VERIFICATION ;04/05/16 12:22
  1. ;;5.2;LAB SERVICE;**42,121,153,286,291,350,458,499**;Sep 27, 1994;Build 2
  1. ;
  1. D V1
  1. I $D(LRLOCKER)#2 L -@(LRLOCKER) K LRLOCKER
  1. K LRSA,LRSB,LRNOVER,LRSBCOM,LRLKOK
  1. ; Leave LRVR3, back to LRVR2
  1. Q
  1. ;
  1. ;
  1. V1 ;
  1. ;
  1. ; Warn and prompt if it appears user is entering reference lab result and message came from auto instrument (UI type=1)
  1. I $G(LRDUZ(2)),LRDUZ(2)'=DUZ(2),$P($G(^LAH(LRLL,1,LRSQ,0)),"^",12)=1,'$$UICHK Q
  1. ;
  1. ;
  1. S LRTN=1
  1. I $D(LRLOCKER)#2 L -@(LRLOCKER)
  1. S LRLOCKER="^LR("_LRDFN_","""_LRSS_""","_LRIDT_")"
  1. L +@(LRLOCKER):DILOCKTM
  1. I '$T W !," This entry is being edited by someone else." Q
  1. ; LRNOVER set in LRVR2
  1. K LRLKOK D LINK Q:'$D(LRLKOK) K LRLKOK D LKCHK Q:'$D(LRLKOK)
  1. K LRSA,LRSB,LRSBCOM,LRSBEPR
  1. ;
  1. ; Calculate days back for delta check based on specimen collection date/time.
  1. S LRTM60=$$LRTM60^LRVR(LRCDT)
  1. ;
  1. S LRCMTDSP=$$CHKCDSP^LRVERA
  1. N LRX
  1. S LRX=1
  1. F S LRX=$O(^LAH(LRLL,1,LRSQ,LRX)) Q:LRX<1 D
  1. . S LRSB(LRX)=^LAH(LRLL,1,LRSQ,LRX)
  1. . I $D(LRNOVER),$D(LRVTS(LRX)),$D(^TMP("LR",$J,"TMP",LRX)) S LRNOVER(LRX)=""
  1. ; Copy comments from LAH
  1. S LRX=0
  1. F S LRX=$O(^LAH(LRLL,1,LRSQ,1,LRX)) Q:LRX="" S LRSBCOM(LRX)=^(LRX)
  1. ;
  1. ; Copy filler id associated with each dataname from LAH.
  1. M LRSBEPR=^LAH(LRLL,1,LRSQ,.1,"OBR","FID")
  1. ;
  1. ;
  1. EDIT ;
  1. I $D(^LAH(LRLL,1,LRSQ,0)) D
  1. . N X
  1. . S LREDIT=1
  1. . F LRX=0,.1,.3 M X(LRX)=^LAH(LRLL,1,LRSQ,LRX)
  1. . K ^LAH(LRLL,1,LRSQ),LRNUF
  1. . F LRX=0,.1,.3 M ^LAH(LRLL,1,LRSQ,LRX)=X(LRX) K X(LRX)
  1. . D ^LRVR4
  1. . F LRX=1:0 S LRX=$O(LRSB(LRX)) Q:LRX<1 S ^LAH(LRLL,1,LRSQ,LRX)=LRSB(LRX)
  1. I $O(^LAH(LRLL,1,LRSQ,1))<1 W !,"NO DATA TO APPROVE" Q
  1. Q:$D(LRGVP)
  1. ;
  1. N LRI
  1. S LRI=1
  1. F S LRI=$O(LRNOVER(LRI)) Q:LRI="" D
  1. . N LRX,LRERR
  1. . S LRX="Test Not Reviewed: "_$$GET1^DID(63.04,LRI,"","LABEL","","LRERR")
  1. . I $G(LRERR("DIERR",1)) W !,"For DATANAME "_LRI_" - "_LRERR("DIERR",1,"TEXT",1) Q
  1. . W !,LRX
  1. . I $D(LRSB(LRI))#2 W " = "_$P(LRSB(LRI),U)_" "_$P(LRSB(LRI),U,2)
  1. I $O(LRNOVER(0)) W !,"Have not been reviewed and have data. Not approved." QUIT
  1. ;
  1. I '$P($G(LRLABKY),U) W !,$C(7),"ENTERED BUT NOT APPROVED" QUIT
  1. ;
  1. N CNT S CNT=1
  1. ;
  1. AGAIN ;
  1. R !,"Approve for release by entering your initials: ",LRINI:DTIME
  1. I $E(LRINI)="^"!(LRINI="") W !!?5,$C(7),"Nothing verified!" D READ Q
  1. I LRINI'=LRUSI,$$UP^XLFSTR(LRINI)=$$UP^XLFSTR(LRUSI) S LRINI=LRUSI
  1. I $S($E(LRINI)="?":1,LRINI'=LRUSI&(CNT<2):1,1:0) W !,$C(7),"Please enter your correct initials" S:$E(LRINI)="?" CNT=0 S CNT=CNT+1 G AGAIN
  1. I LRINI'=LRUSI W !!?5,$C(7),"Nothing verified!" D READ Q
  1. ;
  1. D V11
  1. D ASKXQA^LRVER3
  1. Q
  1. ;
  1. ;
  1. V11 ; Still locked from V1 L ^LR(LRDFN,LRSS,LRIDT)
  1. ; Set filler id as external package reference for each data name
  1. N LRCORECT,LRNOW,LRX
  1. S (LRCORECT,LRX)=0,LRNOW=$$NOW^XLFDT
  1. F S LRX=$O(^TMP("LR",$J,"TMP",LRX)) Q:LRX<1 I $D(LRVTS(LRX)),$D(LRSB(LRX)),$D(^(LRX)) D
  1. . K ^LAH(LRLL,1,LRSQ,LRX)
  1. . I $P(LRSB(LRX),"^")="" Q
  1. . S $P(LRSB(LRX),U,6)=LRNOW
  1. . S ^LR(LRDFN,LRSS,LRIDT,LRX)=LRSB(LRX)
  1. . S:'$D(^LRO(68,"AC",LRDFN,LRIDT,LRX)) ^(LRX)="" I LRVF S ^(LRX)=""
  1. . I $G(LRSBEPR(LRX))="" Q
  1. . N LRDATA,LRSITE
  1. . S LRSITE=$G(LRDUZ(2))
  1. . I LRSITE="" S LRSITE=$P(LRSB(LRX),"^",9)
  1. . S LRDATA(.01)=LRDFN_","_LRSS_","_LRIDT_","_LRX,LRDATA(.02)=4,LRDATA(1)=LRSBEPR(LRX)
  1. . I LRSITE'="" S LRDATA(.03)=LRSITE_";DIC(4,"
  1. . D SETREF^LRUEPR(LRDFN,LRDATA(.01),.LRDATA,1)
  1. ;
  1. A3 ; Called from LRVRPOC, LRVRAR
  1. ;
  1. ; Set reporting site in file #63.
  1. D SETRL^LRVERA(LRDFN,LRSS,LRIDT,DUZ(2))
  1. ;
  1. I +LRDPF=2&($G(LRSS)'="BB")&('$$CHKINP^LRBEBA4(LRDFN,LRODT)) D
  1. . D BAWRK^LRBEBA(LRODT,LRSN,1,.LRBEY,.LRBETST)
  1. ;
  1. D VER^LRVER3A ;unlocked in LRVER
  1. ;
  1. ; Check for LEDI and return results
  1. I $P($G(LRORU3),U,3),$O(LRSB(0)) D LRORU3^LRVER3
  1. ;
  1. K LRSBCOM
  1. D:$P(LRPARAM,U,14)&($P($G(^LRO(68,LRAA,0)),U,16)) LOOK^LRCAPV1
  1. ;
  1. ; Check for LEDI tests not reviewed
  1. I $G(LRDUZ(2)),LRDUZ(2)'=DUZ(2),LRSS="CH",'$D(ZTQUEUED) D TNR
  1. ;
  1. I +$O(^LAH(LRLL,1,LRSQ,1))<1 D ZAPALL(LRLL,LRSQ)
  1. I $D(LRPRGSQ),'$D(ZTQUEUED) D
  1. . W !,"Purge data from sequence number(s): "
  1. . F I=0:0 S I=$O(LRPRGSQ(I)) Q:I<1 W " ",I
  1. . S %=2 D YN^DICN Q:%'=1
  1. . N LAIEN
  1. . S LAIEN=0
  1. . F S LAIEN=$O(LRPRGSQ(LAIEN)) Q:LAIEN<1 D ZAPALL(LRLL,LAIEN)
  1. Q
  1. ;
  1. ;
  1. ZAP ; from LRLLS3
  1. D ZAPALL(LRLL,I)
  1. Q
  1. ;
  1. ;
  1. D LKCHK Q:$D(LRLKOK)
  1. S X=$S($D(^LRO(68,+$P(LRLK,U,3),1,+$P(LRLK,U,4),1,+$P(LRLK,U,5),0)):+^(0),1:"") G LINKOK:+X=LRDFN
  1. S S1=PNM,S2=SSN,S3=LRDPF
  1. ;
  1. W !,$C(7),"WARNING - NO MATCHING ACCESSION WAS FOUND."
  1. W !,"You may need to Clear instrument/worklist data,"
  1. W !,"or correctly identify the sample to the system."
  1. ;
  1. I X S LRDPF=$P(^LR(X,0),U,2),DFN=$P(^(0),U,3) D PT^LRX W !,PNM,?30,SSN,!,$C(7) S PNM=S1,SSN=S2,LRDPF=S3
  1. K S1,S2,S3
  1. Q:$D(LRGVP)
  1. W !,"ARE YOU SURE THIS IS THE CORRECT DATA" S %=2 D YN^DICN Q:%'=1
  1. ;
  1. LINKOK ;
  1. K:$P(LRLK,U,5) ^LAH(LRLL,1,"C",+$P(LRLK,U,5),LRSQ)
  1. S ^LAH(LRLL,1,"C",LRAN,LRSQ)="",$P(^LAH(LRLL,1,LRSQ,0),U,3,5)=LRAA_U_LRAD_U_LRAN,LRLKOK=1
  1. Q
  1. ;
  1. LKCHK S LRLK=$S($D(^LAH(LRLL,1,LRSQ,0)):^(0),1:"") I $P(LRLK,U,3)=LRAA&($P(LRLK,U,4)=LRAD)&($P(LRLK,U,5)=LRAN) S LRLKOK=1
  1. Q
  1. ;
  1. ;
  1. ZAP2 ;Clear ^LAH(
  1. D ZAPALL(LRLL,I)
  1. Q
  1. ;
  1. ;
  1. ZAPALL(LRLL,LAIEN) ;Clean up
  1. N I,NODE,SEG,SEGID,SUB
  1. Q:'$G(LRLL)!('$G(LAIEN))
  1. ;
  1. S NODE=$G(^LAH(LRLL,1,LAIEN,0))
  1. K ^LAH(LRLL,1,"AUTOREL",LAIEN)
  1. K ^LAH(LRLL,1,"B",+$P(NODE,U)_";"_+$P(NODE,U,2),LAIEN)
  1. K ^LAH(LRLL,1,"C",+$P(NODE,U,5),LAIEN)
  1. K ^LAH(LRLL,1,"D",+$P(NODE,U,6),LAIEN)
  1. K ^LAH(LRLL,1,"E",+$P(NODE,U,8),LAIEN)
  1. ;
  1. S NODE("U")=$P($G(^LAH(LRLL,1,LAIEN,.3)),U)
  1. I NODE("U")'="" D
  1. . K ^LAH(LRLL,1,"AUTOREL-UID",NODE("U"),LAIEN)
  1. . K ^LAH(LRLL,1,"U",NODE("U"),LAIEN)
  1. . S I=0
  1. . F S I=$O(^LAH("LA7 AMENDED RESULTS",NODE("U"),I)) Q:'I D
  1. . . K ^LAH("LA7 AMENDED RESULTS",NODE("U"),I,LRLL,LAIEN)
  1. ;
  1. S SEG=""
  1. F S SEG=$O(^LAH(LRLL,1,LAIEN,.1,SEG)) Q:SEG="" D
  1. . S SEGID=""
  1. . F S SEGID=$O(^LAH(LRLL,1,LAIEN,.1,SEG,SEGID)) Q:SEGID="" D
  1. . . S SUB=$P($G(^LAH(LRLL,1,LAIEN,.1,SEG,SEGID)),U)
  1. . . I SUB'="" K ^LAH(LRLL,1,"A"_SEGID,SUB,LAIEN)
  1. ;
  1. K ^LAH(LRLL,1,LAIEN)
  1. ;
  1. ; Reset counter if loadlist is clear.
  1. I '$O(^LAH(LRLL,1,0)) D
  1. . L +^LAH(LRLL):DILOCKTM Q:'$T
  1. . S ^LAH(LRLL)=0
  1. . L -^LAH(LRLL)
  1. ;
  1. Q
  1. ;
  1. ;
  1. TNR ; List tests not reviewed and ask if user wants to delete.
  1. ;
  1. N DIR,DIROUT,DIRUT,DUOUT,LR60,I,X,Y
  1. ;
  1. ; Check if these results have already been verified
  1. S I=1
  1. F S I=$O(^LAH(LRLL,1,LRSQ,I)) Q:'I D
  1. . S X=^LAH(LRLL,1,LRSQ,I)
  1. . I $P(X,"^")=$P($G(^LR(LRDFN,LRSS,LRIDT,I)),"^") K ^LAH(LRLL,1,LRSQ,I)
  1. ;
  1. ; Quit if no unreviewed results
  1. I +$O(^LAH(LRLL,1,LRSQ,1))'>1 Q
  1. ;
  1. W !,"Test(s) Not Reviewed:",!
  1. S I=1
  1. F S I=$O(^LAH(LRLL,1,LRSQ,I)) Q:'I D
  1. . S X=^LAH(LRLL,1,LRSQ,I)
  1. . S LR60=+$O(^LAB(60,"C","CH;"_I_";1",0))
  1. . I LR60 W $$GET1^DIQ(60,LR60_",",.01)
  1. . E W $$GET1^DID(63.04,I,"","LABEL")
  1. . W " = "_$P(X,"^")_" "_$P(X,"^",2)_" "_$P($P(X,"^",5),"!",7),!
  1. ;
  1. S DIR(0)="Y",DIR("A")="Purge these test results",DIR("B")="NO"
  1. S DIR("?",1)="Answer 'NO' if you want to keep these results for later verification."
  1. S DIR("?",2)="You may need to add these tests to the loadlist profile you are using"
  1. S DIR("?")="and/or add these tests to the accession you are verifying."
  1. D ^DIR Q:$D(DIRUT)
  1. ;
  1. I Y=1 D ZAPALL(LRLL,LRSQ)
  1. Q
  1. ;
  1. ;
  1. READ ;
  1. N X W !!,"Press ENTER or RETURN to continue: " R X:DTIME
  1. Q
  1. ;
  1. ;
  1. UICHK() ; Confirm that user wants to process UI type results as reference lab results.
  1. ;
  1. N DIR,DIRUT,DTOUT,DUOUT,LROK,X,Y
  1. ;
  1. S LROK=0
  1. S DIR(0)="YO",DIR("B")="NO"
  1. S DIR("A",1)="These results were received via an automated instrument interface and you've"
  1. S DIR("A",2)="indicated you're processing reference lab results. If you continue processing"
  1. S DIR("A",3)="then only units and reference ranges received from the instrument will be"
  1. S DIR("A",4)="stored. This could result in the report lacking units, reference ranges,"
  1. S DIR("A",5)="abnormality flags and designating an incorrect performing lab."
  1. S DIR("A",6)=" "
  1. S DIR("A",7)="Contact your local LIM or Lab ADPAC with any questions."
  1. S DIR("A",8)=" "
  1. S DIR("A")="Sure you want to continue"
  1. D ^DIR
  1. I Y=1 S LROK=1
  1. ;
  1. Q LROK
  1. ;
  1. ;
  1. LRNIGHT ; Entry point from LRNIGHT to clean up LAH global for selected entries.
  1. ;
  1. ;ZEXCEPT: ZTQUEUED,ZTREQ,ZTSTOP
  1. ;
  1. N I,LRCNT,LRCUTOFFDT,LRDAYSKEEP,LRERROR,LRI,LRINST,LRISQN,LRLIST,LRLL,LRROOT,X
  1. S DT=$$DT^XLFDT
  1. ;
  1. ; If rollover has not completed then requeue task 5 minutes in future.
  1. I +$G(^LAB(69.9,1,"RO"))'=(+$H) D Q
  1. . I $D(ZTQUEUED) S ZTREQ=$$HADD^XLFDT($H,0,0,5,0) Q
  1. . W !!,"Lab Rollover has not completed as of "_$$HTE^XLFDT($H,"1M")_" ... Aborting."
  1. ;
  1. D GETLST^XPAR(.LRLIST,"PKG","LR WORKLIST DATA CLEANUP",,.LRERROR)
  1. I '$D(LRLIST) Q
  1. ;
  1. S LRI=0
  1. F S LRI=$O(LRLIST(LRI)) Q:'LRI D Q:$G(ZTSTOP)
  1. . S LRLL=$P(LRLIST(LRI),U),LRDAYSKEEP=$P(LRLIST(LRI),U,2),LRCUTOFFDT=DT
  1. . I LRDAYSKEEP>0 S LRCUTOFFDT=$$FMADD^XLFDT(DT,-LRDAYSKEEP)
  1. . I '$D(^LAH(LRLL)) Q
  1. . I $$S^%ZTLOAD("Processing LRLL: "_LRLL) S ZTSTOP=1 Q
  1. . L +^LAH(LRLL):DILOCKTM+60 Q:'$T
  1. . S (LRCNT,LRISQN)=0
  1. . F S LRISQN=$O(^LAH(LRLL,1,LRISQN)) Q:'LRISQN D Q:$G(ZTSTOP)
  1. . . S LRCNT=LRCNT+1
  1. . . I '(LRCNT#100) I $$S^%ZTLOAD("Processing LRLL: "_LRLL_" LRISQN: "_LRISQN) S ZTSTOP=1 Q
  1. . . I '$P($G(^LAH(LRLL,1,LRISQN,0)),"^",11) D UPDT^LAGEN(LRLL,LRISQN) Q ; No date, put current d/t, skip
  1. . . I $P($G(^LAH(LRLL,1,LRISQN,0)),"^",11)'<LRCUTOFFDT Q ; Skip - Keep
  1. . . S LRINST=LRLL,I=LRISQN
  1. . . N LRLL,LRISQN,LRCUTOFFDT
  1. . . D ZAPALL(LRINST,I)
  1. . L -^LAH(LRLL)
  1. ;
  1. D CHECKARI
  1. ;
  1. I $D(ZTQUEUED) S ZTREQ="@"
  1. ;
  1. Q
  1. ;
  1. ;
  1. CHECKARI ; Check amended result index for orphans.
  1. ;
  1. ;ZEXCEPT: ZTQUEUED
  1. ;
  1. N LRCNT,LRI,LRISQN,LRLL,LRROOT
  1. ;
  1. I '$D(ZTQUEUED) W !!,"Checking LAH global Amended Result Index for Orphans",!
  1. S LRROOT="^LAH(""LA7 AMENDED RESULTS"")",LRCNT=0
  1. F S LRROOT=$Q(@LRROOT) Q:LRROOT="" Q:$QS(LRROOT,1)'="LA7 AMENDED RESULTS" D
  1. . S LRI=$QS(LRROOT,3),LRLL=$QS(LRROOT,4),LRISQN=$QS(LRROOT,5)
  1. . I $D(^LAH(LRLL,1,LRISQN,LRI)) Q
  1. . I '$D(ZTQUEUED) W !,"Deleting index: ",LRROOT," = ",@LRROOT
  1. . K @LRROOT S LRCNT=LRCNT+1
  1. ;
  1. I '$D(ZTQUEUED) W !,$S(LRCNT:LRCNT,1:"No")," indexes found needing deletion."
  1. ;
  1. Q