| [613] | 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 | 
|---|