| [613] | 1 | LEXA ; ISA/FJF/KER-Look-up (Silent) ; 09/06/2006 | 
|---|
|  | 2 | ;;2.0;LEXICON UTILITY;**3,4,6,19,25,36,38,43**;Sep 23, 1996;Build 1 | 
|---|
|  | 3 | ; | 
|---|
|  | 4 | ; External References | 
|---|
|  | 5 | ;   DBIA 10104  $$UP^XLFSTR | 
|---|
|  | 6 | ;   DBIA 10103  $$DT^XLFDT | 
|---|
|  | 7 | ;   DBIA 10060  ^VA(200, | 
|---|
|  | 8 | ;   DBIA 10016  ^DIM | 
|---|
|  | 9 | ; | 
|---|
|  | 10 | ; Look-up  D LOOK^LEXA(LEXX,LEXAP,LEXLL,LEXSUB,lexvdt) | 
|---|
|  | 11 | ; | 
|---|
|  | 12 | ;         LEXX      User Input | 
|---|
|  | 13 | ;         LEXAP     Application | 
|---|
|  | 14 | ;         LEXLL     Selection List Length | 
|---|
|  | 15 | ;         LEXSUB    Mode/Subset (file 757.2) | 
|---|
|  | 16 | ;         LEXVDT    Date to use for retrieving/displaying codes | 
|---|
|  | 17 | ; | 
|---|
|  | 18 | ; 1.  Search parameters ^TMP("LEXSCH",$J,PAR)=VALUE | 
|---|
|  | 19 | ; 2.  Expressions found ^TMP("LEXFND",$J,FQ,IEN)=DT | 
|---|
|  | 20 | ; 3.  Review List       ^TMP("LEXHITS",$J,#)=IEN^DT | 
|---|
|  | 21 | ; 4.  Display List      LEX("LIST",#) | 
|---|
|  | 22 | ; | 
|---|
|  | 23 | ;         LEX("LIST",0)=LAST^TOTAL | 
|---|
|  | 24 | ;         LEX("LIST",#)=IEN^DT | 
|---|
|  | 25 | ; | 
|---|
|  | 26 | LOOK(LEXX,LEXAP,LEXLL,LEXSUB,LEXVDT) ; Search for LEXX | 
|---|
|  | 27 | I $G(LEXVDT)="" S LEXVDT=$$DT^XLFDT | 
|---|
|  | 28 | I $L($G(^TMP("LEXSCH",$J,"VDT",0))) S LEXVDT=^TMP("LEXSCH",$J,"VDT",0) | 
|---|
|  | 29 | K DIERR,LEX | 
|---|
|  | 30 | K ^TMP("LEXFND",$J),^TMP("LEXHIT",$J) | 
|---|
|  | 31 | K ^TMP("LEXSCH",$J,"EXC"),^TMP("LEXSCH",$J,"EXM") | 
|---|
|  | 32 | K:+$G(^TMP("LEXSCH",$J,"ADF",0))=0 ^TMP("LEXSCH",$J) | 
|---|
|  | 33 | I $D(DIC(0)) D | 
|---|
|  | 34 | .S:DIC(0)["L" DIC(0)=$P(DIC(0),"L",1)_$P(DIC(0),"L",2) | 
|---|
|  | 35 | .S:DIC(0)["I" DIC(0)=$P(DIC(0),"I",1)_$P(DIC(0),"I",2) | 
|---|
|  | 36 | S LEXQ=1,LEXX=$G(LEXX) | 
|---|
|  | 37 | I LEXX=""!(LEXX["^") D EN^LEXAR("^",$G(LEXVDT)) K LEXAP D EXIT Q | 
|---|
|  | 38 | S LEXAP=$$UP^XLFSTR($G(LEXAP)) | 
|---|
|  | 39 | S LEXLL=+$G(LEXLL) | 
|---|
|  | 40 | S LEXSUB=$G(LEXSUB) | 
|---|
|  | 41 | S ^TMP("LEXSCH",$J,"APP",0)=+$$AP^LEXDFN2($G(LEXAP)) | 
|---|
|  | 42 | S:^TMP("LEXSCH",$J,"APP",0)=0 ^TMP("LEXSCH",$J,"APP",0)=1 | 
|---|
|  | 43 | S:LEXSUB="" LEXSUB=^TMP("LEXSCH",$J,"APP",0) | 
|---|
|  | 44 | S:$L($G(DIC("S"))) ^TMP("LEXSCH",$J,"FIL",0)=DIC("S") | 
|---|
|  | 45 | S:LEXLL=0 LEXLL=5 | 
|---|
|  | 46 | S ^TMP("LEXSCH",$J,"LEN",0)=LEXLL | 
|---|
|  | 47 | X ; Search for X | 
|---|
|  | 48 | I '$L($G(LEXX)) D  D EXIT Q | 
|---|
|  | 49 | .S LEX("ERR",0)=$G(LEX("ERR",0))+1 | 
|---|
|  | 50 | .S LEX("ERR",LEX("ERR",0))="User input LEXX missing or invalid" | 
|---|
|  | 51 | APP ; Application | 
|---|
|  | 52 | I +$G(^TMP("LEXSCH",$J,"APP",0))=0!('$D(^LEXT(757.2,+$G(^TMP("LEXSCH",$J,"APP",0)),0))) D  D EXIT Q | 
|---|
|  | 53 | .S LEX("ERR",0)=$G(LEX("ERR",0))+1 | 
|---|
|  | 54 | .S LEX("ERR",LEX("ERR",0))="Calling application identification LEXAP missing or invalid" | 
|---|
|  | 55 | USR ; User | 
|---|
|  | 56 | I +$G(DUZ)=0!('$D(^VA(200,+$G(DUZ),0))) D  D EXIT Q | 
|---|
|  | 57 | .S LEX("ERR",0)=$G(LEX("ERR",0))+1 | 
|---|
|  | 58 | .S LEX("ERR",LEX("ERR",0))="User identification DUZ missing or invalid" | 
|---|
|  | 59 | N LEXFND,LEXISCD | 
|---|
|  | 60 | S (LEXFND,LEXISCD)=0 | 
|---|
|  | 61 | S ^TMP("LEXSCH",$J,"USR",0)=+$G(DUZ) | 
|---|
|  | 62 | S ^TMP("LEXSCH",$J,"NAR",0)=LEXX | 
|---|
|  | 63 | S ^TMP("LEXSCH",$J,"SCH",0)=$$UP^XLFSTR(LEXX) | 
|---|
|  | 64 | DEF ; Defaults                     CONFIG^LEXSET | 
|---|
|  | 65 | N LEXFIL,LEXDSP,LEXFILR S:$L($G(DIC("S"))) LEXFIL=DIC("S") | 
|---|
|  | 66 | I '$L($G(LEXFIL)),$L($G(^TMP("LEXSCH",$J,"FIL",0))) S LEXFIL=^TMP("LEXSCH",$J,"FIL",0) | 
|---|
|  | 67 | N LEXNS,LEXSS | 
|---|
|  | 68 | S LEXNS=$$NS^LEXDFN2(LEXAP) | 
|---|
|  | 69 | S LEXSS=$$MD^LEXDFN2(LEXSUB) | 
|---|
|  | 70 | I +$G(^TMP("LEXSCH",$J,"ADF",0))=0 D CONFIG^LEXSET(LEXNS,LEXSS,$G(LEXVDT)) | 
|---|
|  | 71 | I '$L($G(LEXFIL)),$L($G(^TMP("LEXSCH",$J,"FIL",0))) S LEXFIL=^TMP("LEXSCH",$J,"FIL",0) | 
|---|
|  | 72 | S:$L($G(LEXFIL)) LEXFIL=$$FIL(LEXFIL) | 
|---|
|  | 73 | S LEXFIL=$G(LEXFIL) | 
|---|
|  | 74 | K ^TMP("LEXFND",$J),^TMP("LEXHIT",$J) | 
|---|
|  | 75 | D MAN | 
|---|
|  | 76 | I $D(LEX("ERR")) D EXIT Q | 
|---|
|  | 77 | D SETUP^LEXAM($G(^TMP("LEXSCH",$J,"VOC",0))) | 
|---|
|  | 78 | I $D(LEX("ERR")) D EXIT Q | 
|---|
|  | 79 | LK ; Look-up | 
|---|
|  | 80 | IEN ; Look-up by IEN               ADDL^LEXAL PCH 4 | 
|---|
|  | 81 | I ^TMP("LEXSCH",$J,"NAR",0)?1"`"1N.N D  I $D(LEX("LIST")) D EXIT Q | 
|---|
|  | 82 | .N LEXE,LEXUN | 
|---|
|  | 83 | .S LEXE=+$E(^TMP("LEXSCH",$J,"NAR",0),2,$L(^TMP("LEXSCH",$J,"NAR",0))) Q:LEXE=0 | 
|---|
|  | 84 | .S LEXUN=+$G(^TMP("LEXSCH",$J,"UNR",0)) | 
|---|
|  | 85 | .Q:'$D(^LEX(757.01,LEXE,0)) | 
|---|
|  | 86 | .D ADDL^LEXAL(LEXE,$$DES^LEXASC(LEXE),$$SO^LEXASO(LEXE,$G(^TMP("LEXSCH",$J,"DIS",0)),1,$G(LEXVDT))) | 
|---|
|  | 87 | .I $D(^TMP("LEXFND",$J)) D BEG^LEXAL | 
|---|
|  | 88 | .I LEXUN>0,$L($G(^TMP("LEXSCH",$J,"NAR",0))) S LEX("NAR")=$G(^TMP("LEXSCH",$J,"NAR",0)) | 
|---|
|  | 89 | .I LEXUN>0,$L($G(^LEX(757.01,+$G(LEXE),0))) S LEX("NAR")=$G(^LEX(757.01,+$G(LEXE),0)) | 
|---|
|  | 90 | SCT ; Look-up by Shortcuts         EN^LEXASC | 
|---|
|  | 91 | I +$G(^TMP("LEXSCH",$J,"SCT",0)),$D(^LEX(757.41,^TMP("LEXSCH",$J,"SCT",0))) D | 
|---|
|  | 92 | .S LEXFND=$$EN^LEXASC(^TMP("LEXSCH",$J,"SCH",0),^TMP("LEXSCH",$J,"SCT",0),$G(LEXVDT)) | 
|---|
|  | 93 | I +LEXFND D EXIT Q | 
|---|
|  | 94 | CODE ; Look-up by Code              EN^LEXABC | 
|---|
|  | 95 | S LEXFND=$$EN^LEXABC(^TMP("LEXSCH",$J,"SCH",0),$G(LEXVDT)) | 
|---|
|  | 96 | I +LEXFND D EXIT Q | 
|---|
|  | 97 | I +LEXFND'>0,+($G(LEXISCD))>0 D EXIT Q | 
|---|
|  | 98 | ; if code is found but it is inactive | 
|---|
|  | 99 | ;I +$P(LEXFND,"^",2)'=-1 S LEX=0 D EXIT Q | 
|---|
|  | 100 | EXACT ; Look-up Exact Match          EN^LEXAB | 
|---|
|  | 101 | S LEXFND=$$EN^LEXAB(^TMP("LEXSCH",$J,"SCH",0),$G(LEXVDT)) | 
|---|
|  | 102 | K:+LEXFND=0 ^TMP("LEXFND",$J) | 
|---|
|  | 103 | K ^TMP("LEXHIT",$J) | 
|---|
|  | 104 | KEYWRD ; Look-up by word              EN^LEXALK | 
|---|
|  | 105 | D EN^LEXALK | 
|---|
|  | 106 | EXIT ; Clean-up and quit | 
|---|
|  | 107 | K LEXQ,LEXDICS,LEXFIL,LEXFILR,LEXDSP,LEXSHOW,LEXSHCT,LEXSUB | 
|---|
|  | 108 | K LEXOVR,LEXUN,LEXLKFL,LEXLKGL,LEXLKIX,LEXLKSH,LEXTKNS,LEXTKN | 
|---|
|  | 109 | K LEXI | 
|---|
|  | 110 | D:$D(LEX("ERR")) CLN | 
|---|
|  | 111 | I $D(LEX),+$G(LEX)=0,'$D(LEX("LIST")),$L($G(LEXX)) D | 
|---|
|  | 112 | .N LEXC,LEXF,LEXV | 
|---|
|  | 113 | .S LEXC=1 | 
|---|
|  | 114 | .S LEXF=$G(^TMP("LEXSCH",$J,"FIL",0)) | 
|---|
|  | 115 | .S LEXV=$G(^TMP("LEXSCH",$J,"VOC",0)) | 
|---|
|  | 116 | .D:+$G(^TMP("LEXSCH",$J,"UNR",0))>0 EN^LEXAR(LEXX,$G(LEXVDT)) | 
|---|
|  | 117 | .S LEX("NAR")=LEXX | 
|---|
|  | 118 | .S LEX=0 | 
|---|
|  | 119 | .S LEX("HLP",LEXC)="    A suitable term could not be found based on user input" | 
|---|
|  | 120 | .S:LEXF="I 1" LEXF="" | 
|---|
|  | 121 | .I $L(LEXF)!(LEXV'="WRD") D | 
|---|
|  | 122 | ..S LEX("HLP",LEXC)=$G(LEX("HLP",LEXC))_" and " | 
|---|
|  | 123 | ..S LEXC=LEXC+1 | 
|---|
|  | 124 | ..S LEX("HLP",LEXC)="    current user defaults" | 
|---|
|  | 125 | ..S LEX("HLP",0)=LEXC | 
|---|
|  | 126 | .S LEX("HLP",LEXC)=$G(LEX("HLP",LEXC))_"." | 
|---|
|  | 127 | Q | 
|---|
|  | 128 | CLN ; Clean | 
|---|
|  | 129 | K LEXQ,LEXTKNS,LEXTKN,LEXI | 
|---|
|  | 130 | K ^TMP("LEXSCH",$J),^TMP("LEXHIT",$J),^TMP("LEXFND",$J) | 
|---|
|  | 131 | Q | 
|---|
|  | 132 | CLR ; Clear all (FOR TESTING ONLY) | 
|---|
|  | 133 | K LEX,LEXQ,LEXTKNS,LEXTKN,LEXI | 
|---|
|  | 134 | K ^TMP("LEXSCH"),^TMP("LEXHIT"),^TMP("LEXFND") | 
|---|
|  | 135 | Q | 
|---|
|  | 136 | MAN ; Mandatory variables | 
|---|
|  | 137 | N LEXERR | 
|---|
|  | 138 | F LEXERR="SCH","VOC","APP","USR" D | 
|---|
|  | 139 | .I '$L($G(^TMP("LEXSCH",$J,LEXERR,0))) D | 
|---|
|  | 140 | ..S LEX("ERR",0)=$G(LEX("ERR",0))+1 | 
|---|
|  | 141 | ..S LEX("ERR",LEX("ERR",0))="Mandatory variable ^TMP(""LEXSCH"",$J,"""_LEXERR_""",0) missing or invalid" | 
|---|
|  | 142 | Q | 
|---|
|  | 143 | FIL(X) ; Validate Filter | 
|---|
|  | 144 | S X=$G(X) N DIC | 
|---|
|  | 145 | Q:'$L(X) X | 
|---|
|  | 146 | D ^DIM | 
|---|
|  | 147 | S:'$D(X) X="" | 
|---|
|  | 148 | Q X | 
|---|
|  | 149 | ; | 
|---|
|  | 150 | ; D INFO^LEXA(IEN,DATE) | 
|---|
|  | 151 | ; | 
|---|
|  | 152 | ;    IEN   Internal Entry Number in file 757.01 | 
|---|
|  | 153 | ;    DATE  Optional - retrieves codes active on a specified date | 
|---|
|  | 154 | ; | 
|---|
|  | 155 | ; Returns array LEX("SEL") or null | 
|---|
|  | 156 | ; | 
|---|
|  | 157 | ;    LEX("SEL","EXP")   Expressions Concepts/Synonyms/Variants | 
|---|
|  | 158 | ;    LEX("SEL","SIG")   Expression definition | 
|---|
|  | 159 | ;    LEX("SEL","SRC")   Classification Codes | 
|---|
|  | 160 | ;    LEX("SEL"."STY")   Semantic Class/Semantic Types | 
|---|
|  | 161 | ;    LEX("SEL","VAS")   VA Classification Sources | 
|---|
|  | 162 | ; | 
|---|
|  | 163 | INFO(X,LEXVDT) ; Get Information about a Term | 
|---|
|  | 164 | K LEX("SEL") S X=+$G(X) Q:X=0  Q:'$D(^LEX(757.01,X,0)) | 
|---|
|  | 165 | N LEXD S LEXD=$G(LEXVDT) S:+LEXD'>0 LEXD=$$DT^XLFDT | 
|---|
|  | 166 | N LEXVDT S LEXVDT=LEXD D SET^LEXAR4(X,LEXVDT) | 
|---|
|  | 167 | Q | 
|---|