| 1 | LRVER1 ;DALOI/FHS/JAH - LAB ROUTINE DATA VERIFICATION ;8/10/04
 | 
|---|
| 2 |  ;;5.2;LAB SERVICE;**42,153,201,215,239,240,263,232,286,291**;Sep 27, 1994
 | 
|---|
| 3 |  ;
 | 
|---|
| 4 | VER ; from LRGVP
 | 
|---|
| 5 |  N LRBEY
 | 
|---|
| 6 |  S LRLLOC=0,LRCW=8,LROUTINE=$P(^LAB(69.9,1,3),U,2) I $D(^LRO(69,LRODT,1,LRSN,0)) S LRLLOC=$P(^(0),U,7) S:'$L(LRLLOC) LRLLOC=0 W !,$P(^LRO(69,LRODT,1,LRSN,1),U,6)
 | 
|---|
| 7 |  S LRCDT=$S($D(^LRO(68,LRAA,1,LRAD,1,LRAN,3)):$P(^(3),U,1,2),1:$P(^(0),U,3)_U),LREAL=$P(LRCDT,U,2)
 | 
|---|
| 8 |  S LRCDT=+LRCDT,LRSAMP=$S($D(^LRO(69,LRODT,1,LRSN,0)):$P(^(0),U,3),1:"")
 | 
|---|
| 9 |  S LRIDT=$S($P($G(^LRO(68,LRAA,1,LRAD,1,LRAN,3)),U,5):$P(^(3),U,5),1:"")
 | 
|---|
| 10 |  S:'LRIDT LRIDT=9999999-LRCDT
 | 
|---|
| 11 |  D EXP
 | 
|---|
| 12 | LD S LRSS="CH" ;ONLY WORKS FOR 'CH'
 | 
|---|
| 13 |  S LRMETH=LRSS IF $D(^LR(LRDFN,LRSS,LRIDT,0)) S LRMETH=$P($P(^(0),U,8),";",1)
 | 
|---|
| 14 |  W:$D(^LAB(62,+LRSAMP,0)) !,"Sample: ",$P(^(0),U)
 | 
|---|
| 15 |  K ^TMP("LR",$J,"TMP"),LRORD,LRM
 | 
|---|
| 16 |  D ^LRVER2
 | 
|---|
| 17 |  K LRDL
 | 
|---|
| 18 |  Q
 | 
|---|
| 19 |  ;
 | 
|---|
| 20 |  ;
 | 
|---|
| 21 | EXP ; Get the list of tests for this ACC. from LRGVG1
 | 
|---|
| 22 |  ; Do not process tests which have been "NP" (not performed).
 | 
|---|
| 23 |  N I,N,IX,LRNLT,T1,X
 | 
|---|
| 24 |  K LRTEST,LRNAME,LRSM60
 | 
|---|
| 25 |  S LRALERT=LROUTINE,N=0,I=0,IX=+$G(^LRO(68,LRAA,1,LRAD,1,LRAN,5,1,0))
 | 
|---|
| 26 |  F  S I=$O(^LRO(68,LRAA,1,LRAD,1,LRAN,4,I)) Q:I<.5  D
 | 
|---|
| 27 |  . S X=$G(^LRO(68,LRAA,1,LRAD,1,LRAN,4,I,0))
 | 
|---|
| 28 |  . I 'X Q
 | 
|---|
| 29 |  . I $P(X,"^",6)="*Not Performed" Q
 | 
|---|
| 30 |  . S N=N+1,LRTEST(N)=I,LRNLT=$S($P(X,"^",2)>50:$P(X,U,9),1:$P(X,"^"))
 | 
|---|
| 31 |  . S LRTEST(N,"P")=LRNLT_U_$$NLT(LRNLT)
 | 
|---|
| 32 |  . S LRAL=$P(X,U,2)#50
 | 
|---|
| 33 |  . I LRAL S LRALERT=$S(LRAL<LRALERT:LRAL,1:LRALERT)
 | 
|---|
| 34 |  ;
 | 
|---|
| 35 |  S LRNTN=N
 | 
|---|
| 36 |  F T1=1:1:N I $D(^LAB(60,+LRTEST(T1),0)) D
 | 
|---|
| 37 |  . S LRTEST(T1)=LRTEST(T1)_U_^(0)
 | 
|---|
| 38 |  . S LRNAME(T1)=$P(LRTEST(T1),U,2),LRNAME(T1,+LRTEST(T1))=""
 | 
|---|
| 39 |  . S:$G(^(1,IX,3)) LRSM60(+$P(LRTEST(T1),";",2))=^(3)
 | 
|---|
| 40 |  . D EX1
 | 
|---|
| 41 |  K IX
 | 
|---|
| 42 |  N X1,X
 | 
|---|
| 43 |  S X=$P($H,","),X(1)=$P($H,",",2),I=0
 | 
|---|
| 44 |  F  S I=$O(LRSM60(I)) Q:'I  S X1=X-LRSM60(I)_","_X(1),LRSM60(I)=9999999-$$HTFM^XLFDT(X1)
 | 
|---|
| 45 |  Q
 | 
|---|
| 46 |  ;
 | 
|---|
| 47 |  ;
 | 
|---|
| 48 | EX1 ; Expand the list of tests to edit.
 | 
|---|
| 49 |  Q:'$D(LRTEST(T1))
 | 
|---|
| 50 |  S X=LRTEST(T1),^TMP("LR",$J,"VTO",+X)=$P($P(X,U,6),";",2)
 | 
|---|
| 51 |  S ^TMP("LR",$J,"VTO",+X,"P")=LRTEST(T1,"P"),S1=0,J=0
 | 
|---|
| 52 |  D EX2
 | 
|---|
| 53 |  K S1,J
 | 
|---|
| 54 |  Q
 | 
|---|
| 55 |  ;
 | 
|---|
| 56 | EX2 ;
 | 
|---|
| 57 |  S:'$D(LRCFL) LRCFL=""
 | 
|---|
| 58 |  S LRSUB=$P(X,U,6)
 | 
|---|
| 59 |  I $D(^LAB(60,+X,4)),$P(^(4),"^",2) S LRCFL=LRCFL_$P(^(4),"^",2)_U
 | 
|---|
| 60 |  ;
 | 
|---|
| 61 |  ; If atomic test then setup and quit
 | 
|---|
| 62 |  I LRSUB'="" D  Q
 | 
|---|
| 63 |  . S S2=$P(LRSUB,";",2)
 | 
|---|
| 64 |  . D:'$D(^TMP("LR",$J,"TMP",S2)) ORD
 | 
|---|
| 65 |  ;
 | 
|---|
| 66 |  ; Explode panel tests
 | 
|---|
| 67 |  ; Do not process tests which have been "NP" (not performed).
 | 
|---|
| 68 |  S S1=S1+1,S1(S1)=X,S1(S1,1)=J
 | 
|---|
| 69 |  S J=0
 | 
|---|
| 70 |  F  S J=$O(^LAB(60,+S1(S1),2,J)) Q:J<1  D
 | 
|---|
| 71 |  . S Y=+^(J,0),X=Y_U_^LAB(60,Y,0)
 | 
|---|
| 72 |  . I $P($G(^LRO(68,+$G(LRAA),1,+$G(LRAD),1,+$G(LRAN),4,Y,0)),"^",6)="*Not Performed" Q
 | 
|---|
| 73 |  . D EX2
 | 
|---|
| 74 |  S X=S1(S1),J=S1(S1,1),S1=S1-1
 | 
|---|
| 75 |  Q
 | 
|---|
| 76 |  ;
 | 
|---|
| 77 |  ;
 | 
|---|
| 78 | ORD ;
 | 
|---|
| 79 |  ; LRNX is set by caller
 | 
|---|
| 80 |  S LRNX=+$G(LRNX)+1,LRORD(LRNX)=S2
 | 
|---|
| 81 |  S LRBEY($P(LRTEST(T1),U,1),S2)=""   ; CIDC
 | 
|---|
| 82 |  S ^TMP("LR",$J,"TMP",S2)=+X
 | 
|---|
| 83 |  ; If panel being exploded then set parent("P" node)
 | 
|---|
| 84 |  ;  to file #60 test being exploded
 | 
|---|
| 85 |  I $G(LRTEST(T1,"P")) D
 | 
|---|
| 86 |  . I +LRTEST(T1)=+LRTEST(T1,"P") S ^TMP("LR",$J,"TMP",S2,"P")=LRTEST(T1,"P")_"!"_$$RNLT(+X)
 | 
|---|
| 87 |  . E  S ^TMP("LR",$J,"TMP",S2,"P")=+LRTEST(T1)_U_$$NLT(+LRTEST(T1))_"!"_$$RNLT(+X)
 | 
|---|
| 88 |  ;
 | 
|---|
| 89 |  I $P(X,U,18) D
 | 
|---|
| 90 |  . S LRM(S2)=+X
 | 
|---|
| 91 |  . S LRM(S2,"P")=$G(^TMP("LR",$J,"TMP",S2,"P"))
 | 
|---|
| 92 |  . S LRMX(+X)=""
 | 
|---|
| 93 |  Q
 | 
|---|
| 94 |  ;
 | 
|---|
| 95 |  ;
 | 
|---|
| 96 | NLT(X) ;
 | 
|---|
| 97 |  N Y
 | 
|---|
| 98 |  S Y=$S($P($G(^LAM(+$G(^LAB(60,+X,64)),0)),U,2):$P(^(0),U,2),1:"")
 | 
|---|
| 99 |  Q Y
 | 
|---|
| 100 |  ;
 | 
|---|
| 101 |  ;
 | 
|---|
| 102 | RNLT(X) ;
 | 
|---|
| 103 |  I 'X Q ""
 | 
|---|
| 104 |  N Y
 | 
|---|
| 105 |  S Y(1)=+$P($G(^LAB(60,X,64)),U,2)
 | 
|---|
| 106 |  S Y=$S($P($G(^LAM(Y(1),0)),U,2):$P(^(0),U,2),1:"")
 | 
|---|
| 107 |  I Y S $P(Y,"!",2)=$$LNC(Y,$G(LRCDEF),$G(LRSPEC))
 | 
|---|
| 108 |  S $P(Y,"!",3)=$G(LRCDEF),$P(Y,"!",6)=X
 | 
|---|
| 109 |  Q Y
 | 
|---|
| 110 |  ;
 | 
|---|
| 111 |  ;
 | 
|---|
| 112 | LNC(LRNLT,LRCDEF,LRSPEC) ;reture the LOINC code for WKLD Code/Specimen
 | 
|---|
| 113 |  ; Call with (nlt code,method suffix,test specimen)
 | 
|---|
| 114 |  ; TA = Time Aspect
 | 
|---|
| 115 |  N X,N,Y,LRSPECN,VAL,ERR,TA S X=""
 | 
|---|
| 116 |  Q:'LRNLT X
 | 
|---|
| 117 |  K LRMSGM
 | 
|---|
| 118 |  S:$G(LRCDEF)="" LRCDEF="0000"
 | 
|---|
| 119 |  I $P(LRCDEF,".",2) S LRCDEF=$P(LRCDEF,".",2)
 | 
|---|
| 120 |  S LRCDEF=$S($P(LRNLT,".",2):$P(LRNLT,".",2),1:LRCDEF)
 | 
|---|
| 121 |  I $L(LRCDEF)'=4 S LRCDEF=LRCDEF_$E("0000",$L(LRCDEF),($L(LRCDEF-4)))
 | 
|---|
| 122 |  S LRCDEF=LRCDEF_" "
 | 
|---|
| 123 |  S LRSPEC=+LRSPEC
 | 
|---|
| 124 |  ;Get time aspect from 61
 | 
|---|
| 125 |  S TA=$$GET1^DIQ(61,LRSPEC_",",.0961,"I")
 | 
|---|
| 126 |  S LRSPECN=$S($D(^LAB(61,LRSPEC,0))#2:$$GET1^DIQ(61,LRSPEC_",",.01),1:"Unknown")
 | 
|---|
| 127 |  S LRNLT=$P(LRNLT,".")_"."
 | 
|---|
| 128 |  ;Check for WKLD CODE_LOAD/WORK LIST method suffix
 | 
|---|
| 129 |  S VAL(1)=LRNLT_LRCDEF
 | 
|---|
| 130 |  S N=$$FIND1^DIC(64,"","X",.VAL,"C","","ERR")
 | 
|---|
| 131 |  ;Looking for specimen specific LOINC
 | 
|---|
| 132 |  I N,LRSPEC D  I X D MSG(1) Q X
 | 
|---|
| 133 |  . I TA S X=$$GET1^DIQ(64.02,TA_","_LRSPEC_","_N_",",4,"I") Q:X
 | 
|---|
| 134 |  . S TA=$O(^LAM(N,5,LRSPEC,1,0)) ; get time aspect
 | 
|---|
| 135 |  . I TA S X=$$GET1^DIQ(64.02,TA_","_LRSPEC_","_N_",",4,"I") Q:X
 | 
|---|
| 136 |  ;Looking LOINC default
 | 
|---|
| 137 |  I N S X=$$LDEF(N) I X D MSG(2) Q X
 | 
|---|
| 138 |  I LRCDEF="0000 " Q ""
 | 
|---|
| 139 |  ;Looking for WKLD CODE_GENERIC suffix
 | 
|---|
| 140 |  K VAL
 | 
|---|
| 141 |  S VAL(1)=LRNLT_"0000 "
 | 
|---|
| 142 |  S N=$$FIND1^DIC(64,"","X",.VAL,"C","","ERR")
 | 
|---|
| 143 |  I 'N Q ""
 | 
|---|
| 144 |  ;Looking for WKLD CODE_GENERIC specimen specific LOINC
 | 
|---|
| 145 |  I LRSPEC D  I X D MSG(3) Q X
 | 
|---|
| 146 |  . I TA S X=$$GET1^DIQ(64.02,TA_","_LRSPEC_","_N_",",4,"I") Q:X
 | 
|---|
| 147 |  . S TA=$O(^LAM(N,5,LRSPEC,1,0)) ; get time aspect
 | 
|---|
| 148 |  . I TA S X=$$GET1^DIQ(64.02,TA_","_LRSPEC_","_N_",",4,"I") Q:X
 | 
|---|
| 149 |  ;Looking for WKLD CODE_GENERIC default LOINC
 | 
|---|
| 150 |  I 'X,N S X=$$LDEF(N) I X D MSG(4)
 | 
|---|
| 151 |  I 'X S X=""
 | 
|---|
| 152 |  Q X
 | 
|---|
| 153 |  ;
 | 
|---|
| 154 |  ;
 | 
|---|
| 155 | LDEF(Y) ;Find the default LOINC code for WKLD CODE
 | 
|---|
| 156 |  I 'Y Q ""
 | 
|---|
| 157 |  S X=$$GET1^DIQ(64,Y_",",25,"I")
 | 
|---|
| 158 |  I 'X S X=""
 | 
|---|
| 159 |  Q X
 | 
|---|
| 160 |  ;
 | 
|---|
| 161 |  ;
 | 
|---|
| 162 | TMPSB(LRSB) ; Get LOINC code from ^TMP("LR",$J,"TMP",LRSB,"P")
 | 
|---|
| 163 |  S NODE=$G(^TMP("LR",$J,"TMP",LRSB,"P"))
 | 
|---|
| 164 |  I 'NODE Q ""
 | 
|---|
| 165 |  S $P(NODE,"!",3)=$$LNC($P(NODE,"!",2),$G(LRCDEF),$G(LRSPEC))
 | 
|---|
| 166 |  S $P(NODE,"!",4)=$G(LRCDEF)
 | 
|---|
| 167 |  Q $P(NODE,U,2)
 | 
|---|
| 168 |  ;
 | 
|---|
| 169 |  ;
 | 
|---|
| 170 | MSG(VAL) ;Set output message
 | 
|---|
| 171 |  Q:'$G(LRMSG)
 | 
|---|
| 172 |  S LRMSGM="0-No LOINC Code Defined for "_LRNLT_LRCDEF
 | 
|---|
| 173 |  N TANAME
 | 
|---|
| 174 |  I $G(TA) S TANAME=$$GET1^DIQ(64.061,TA_",",.01,"E") ;TA Name
 | 
|---|
| 175 |  I VAL=1 S LRMSGM="1-"_LRNLT_$E(LRCDEF,1,4)_" - "_LRSPECN
 | 
|---|
| 176 |  I VAL=2 S LRMSGM="2-"_LRNLT_$E(LRCDEF,1,4)_" - Default LOINC"
 | 
|---|
| 177 |  I VAL=3 S LRMSGM="3-"_LRNLT_"0000 - "_LRSPECN
 | 
|---|
| 178 |  I VAL=4 S LRMSGM="4-"_LRNLT_"0000 - Default LOINC"
 | 
|---|
| 179 |  I $G(TA) S LRMSGM=LRMSGM_" Time Aspect "_TANAME
 | 
|---|
| 180 |  W:$G(LRDBUG) !,LRMSGM,!
 | 
|---|
| 181 |  Q
 | 
|---|