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

LEXABC.m

Go to the documentation of this file.
  1. LEXABC ;ISL/KER - Look-up by Code ;04/21/2014
  1. ;;2.0;LEXICON UTILITY;**4,25,26,29,38,73,51,80**;Sep 23, 1996;Build 10
  1. ;
  1. ; Global Variables
  1. ; ^ICPT("BA") ICR 5408
  1. ; ^TMP("LEXFND") SACC 2.3.2.5.1
  1. ; ^TMP("LEXHIT") SACC 2.3.2.5.1
  1. ; ^TMP("LEXL") SACC 2.3.2.5.1
  1. ; ^TMP("LEXLE") SACC 2.3.2.5.1
  1. ; ^TMP("LEXSCH") SACC 2.3.2.5.1
  1. ;
  1. ; External References
  1. ; $$CODEABA^ICDEX ICR 5747
  1. ;
  1. ; Local Variables NEWed or KILLed LEXA and LEXA1
  1. ; DIC,LEXFIL,LEXISCD
  1. ;
  1. ; INPUT
  1. ; LEXSO Code Preferred terms only
  1. ; Code+ All terms
  1. ; LEXVDT Version Date to screen against (default = today)
  1. ;
  1. EN(LEXSO,LEXVDT) ; Entry from LEXA
  1. S LEXSO=$$UP^XLFSTR($G(LEXSO)) Q:'$L(LEXSO) 0 Q:$L(LEXSO)>40 0 S:$D(LEXISCD) LEXISCD=$$IS(LEXSO)
  1. D VDT^LEXU,BLD S:$L($G(^TMP("LEXSCH",$J,"NAR",0))) LEX("NAR")=$G(^TMP("LEXSCH",$J,"NAR",0)) Q:$D(^TMP("LEXHIT",$J)) 1
  1. Q 0
  1. BLD ; Build List
  1. N LEXSO2 D CLR K ^TMP("LEXSCH",$J,"LST",0),^TMP("LEXSCH",$J,"TOL",0),LEX S ^TMP("LEXSCH",$J,"NUM",0)=0,LEXSO=$G(LEXSO)
  1. I $E(LEXSO,$L(LEXSO))'="+"&($L(LEXSO)'>1)!($E(LEXSO,$L(LEXSO))="+"&($L(LEXSO)'>3)) D CLR Q
  1. S LEXSO2="" S:$E(LEXSO,$L(LEXSO))="+" LEXSO2=$E(LEXSO,$L(LEXSO)),LEXSO=$E(LEXSO,1,($L(LEXSO)-1)) I '(+($$IN(LEXSO))) D CLR Q
  1. Q:$E(LEXSO,1,3)="U00" D FND D:$D(^TMP("LEXFND",$J)) BEG^LEXAL Q:$D(^TMP("LEXFND",$J)) D:'$D(^TMP("LEXFND",$J)) CLR
  1. Q
  1. FND ; Find expressions
  1. K ^TMP("LEXL",$J),^TMP("LEXLE",$J)
  1. N LEXSIEN,LEXMIEN,LEXEIEN,LEXDESF,LEXDSPL,LEXDSPLA,LEXFORM,LEXFMTY,LEXS,LEXSAB,LEXSRC,LEXSDATA
  1. N LEXP,LEXTP,LEXTYPE,LEXFILR,LEXFORM,LEXC,LEXCSTAT,LEXDSAB,LEXSSAB,LEXLKT S LEXLKT="ABC"
  1. S LEXSSAB=$G(^TMP("LEXSCH",$J,"DIS",0)),U="^",LEXS=$$SCH(LEXSO)_" "
  1. S:'$L($G(LEXFIL))&($L($G(DIC("S")))) LEXFIL=DIC("S")
  1. S:'$L($G(LEXFIL))&($L($G(^TMP("LEXSCH",$J,"LEXFIL",0)))) LEXFIL=$G(^TMP("LEXSCH",$J,"LEXFIL",0))
  1. F S LEXS=$O(^LEX(757.02,"AVA",LEXS)) Q:$E(LEXS,1,$L(LEXSO))'=LEXSO D
  1. . S LEXEIEN=0 F S LEXEIEN=$O(^LEX(757.02,"AVA",LEXS,LEXEIEN)) Q:+LEXEIEN=0 D
  1. . . I $L($G(LEXFIL)) D Q:+($G(LEXFILR))=0
  1. . . . I LEXFIL'["$$SO^LEXU(Y",LEXFIL'["ONE^LEXU" D Q
  1. . . . . S LEXFILR=$$EN^LEXAFIL($G(LEXFIL),+($G(^LEX(757,+($G(^LEX(757.01,LEXEIEN,1))),0))))
  1. . . . S LEXFILR=$$EN^LEXAFIL($G(LEXFIL),+LEXEIEN)
  1. . . S LEXSAB="" F S LEXSAB=$O(^LEX(757.02,"AVA",LEXS,LEXEIEN,LEXSAB)) Q:LEXSAB="" D
  1. . . . S LEXSIEN=0 F S LEXSIEN=$O(^LEX(757.02,"AVA",LEXS,LEXEIEN,LEXSAB,LEXSIEN)) Q:+LEXSIEN=0 D
  1. . . . . N LEXEXI,LEXSTAC,STATI,STATT S LEXSDATA=$G(^LEX(757.02,LEXSIEN,0))
  1. . . . . S LEXC=$P(LEXSDATA,"^",2),LEXSRC=$P(LEXSDATA,"^",3),LEXEXI=$P(LEXSDATA,"^",1)
  1. . . . . Q:$$INSUB(+LEXSDATA)=0
  1. . . . . S LEXSTAC=+$$STATCHK^LEXSRC2(LEXC,$G(LEXVDT),,LEXSRC)
  1. . . . . Q:'$D(LEXIGN)&(+LEXSTAC'=1)
  1. . . . . S LEXTYPE=+$P(LEXSDATA,"^",3)
  1. . . . . S LEXDSAB=$E($G(^LEX(757.03,+LEXTYPE,0)),1,3)
  1. . . . . S LEXMIEN=+$P(LEXSDATA,"^",4),(LEXP,LEXTP)=+$P(LEXSDATA,"^",5)
  1. . . . . S STATI=$$STATIEN(LEXSIEN)
  1. . . . . S STATT=$P(STATI,"^",2),STATI=+($P(STATI,"^",1))
  1. . . . . Q:'$D(LEXIGN)&(+STATI=0)
  1. . . . . S LEXDESF=$$DC(LEXEIEN,LEXTP)
  1. . . . . S LEXDSPL=$$DP(LEXS,LEXTYPE,LEXSSAB)
  1. . . . . S LEXDSPLA=$$DSO(+LEXEIEN,$G(LEXVDT),$G(LEXSSAB),$G(LEXDSAB))
  1. . . . . S LEXDSPL=$$TM($$MDS(LEXDSPL,LEXDSPLA),"/")
  1. . . . . S:$D(LEXIGN)&("^Pending^Inactive^"[("^"_STATT_"^")) LEXDSPL=LEXDSPL_"/"_STATT
  1. . . . . S LEXFORM=$$F(LEXEIEN),LEXFMTY=$P(LEXFORM,"^",1),LEXFORM=$P(LEXFORM,"^",2)
  1. . . . . I LEXTYPE>3,LEXTYPE'=17 D NP Q
  1. . . . . D PF
  1. D:$D(^TMP("LEXL",$J)) REO^LEXABC2,ADD^LEXABC2
  1. Q
  1. PF ; Preferred
  1. S:LEXP=0 LEXTP=2 Q:LEXTP=2&($G(LEXSO2)'["+")
  1. S ^TMP("LEXL",$J,LEXS,LEXTYPE,LEXTP,LEXSIEN)=LEXMIEN_"^"_LEXEIEN_"^"_LEXDESF_"^"_LEXDSPL_"^"_LEXFMTY_"^"_LEXFORM
  1. S ^TMP("LEXLE",$J,LEXEIEN)=LEXS_"^"_LEXTYPE_"^"_LEXTP_"^"_LEXSIEN
  1. Q
  1. NP ; Not Preferred
  1. N LEXICD S:LEXP=0 LEXTP=1
  1. I $D(^TMP("LEXLE",$J,LEXEIEN)) D Q
  1. . N LEX1,LEX2,LEX3,LEX4,LEXD,LEXDP
  1. . S LEXD=^TMP("LEXLE",$J,LEXEIEN),LEX1=$P(LEXD,"^",1) Q:'$L(LEX1) S LEX2=$P(LEXD,"^",2) Q:'$L(LEX2) S LEX3=$P(LEXD,"^",3) Q:'$L(LEX3) S LEX4=$P(LEXD,"^",4) Q:'$L(LEX4)
  1. . S LEXD=$G(^TMP("LEXL",$J,LEX1,LEX2,LEX3,LEX4)) Q:'$L(LEXD)
  1. . S LEXDP=$P(LEXD,"^",4) S:$L(LEXDP) LEXDP=LEXDP_"/"_LEXDSPL S:'$L(LEXDP) LEXDP=LEXDSPL
  1. . S $P(LEXD,"^",4)=LEXDP,^TMP("LEXL",$J,LEX1,LEX2,LEX3,LEX4)=LEXD
  1. S LEXICD=$$ICDONE^LEXU(LEXEIEN)
  1. I '$L(LEXICD) S ^TMP("LEXL",$J,LEXS,LEXTYPE,LEXTP,LEXSIEN)=LEXMIEN_"^"_LEXEIEN_"^"_LEXDESF_"^"_LEXDSPL_"^"_LEXFMTY_"^"_LEXFORM,^TMP("LEXLE",$J,LEXEIEN)=LEXS_"^"_LEXTYPE_"^"_LEXTP_"^"_LEXSIEN Q
  1. I $L(LEXICD) D Q
  1. . S:$L(LEXDSPL)&(LEXSO2["+") LEXDSPL=LEXDSPL_"/ICD-9-CM "_LEXICD
  1. . I LEXSO2["+",$D(^TMP("LEXL",$J,LEXS,1)) S ^TMP("LEXL",$J,LEXS,1,4,LEXSIEN)=LEXMIEN_"^"_LEXEIEN_"^"_LEXDESF_"^"_LEXDSPL_"^"_LEXFMTY_"^"_LEXFORM,^TMP("LEXLE",$J,LEXEIEN)=LEXS_"^1^3^"_LEXSIEN Q
  1. . S LEXTP=1,^TMP("LEXL",$J,LEXS,LEXTYPE,LEXTP,LEXSIEN)=LEXMIEN_"^"_LEXEIEN_"^"_LEXDESF_"^"_LEXDSPL_"^"_LEXFMTY_"^"_LEXFORM,^TMP("LEXLE",$J,LEXEIEN)=LEXS_"^"_LEXTYPE_"^"_LEXTP_"^"_LEXSIEN
  1. Q
  1. F(LEX) ; Form
  1. S LEX=+($G(LEX)),LEX=+($P($G(^LEX(757.01,LEX,1)),"^",2))
  1. S LEX=$S(LEX=1:"A^Concept: ",LEX=2:"B^Synonym: ",LEX=3:"C^Variant: ",LEX=4:"D^Related: ",LEX=5:"E^Modified: ",1:"F^Other: ")
  1. Q LEX
  1. DE(LEX) ; Deactivated 757.01
  1. S LEX=+($G(LEX)) Q:'$D(^LEX(757.01,LEX,0)) 1
  1. Q:'$D(LEXIGN)&(+($P($G(^LEX(757.01,LEX,1)),"^",5))=1) 1
  1. S LEX=+($G(^LEX(757.01,LEX,1)))
  1. Q:'$D(^LEX(757,LEX,0)) 1 S LEX=+($G(^LEX(757,LEX,0)))
  1. Q:'$D(^LEX(757.01,LEX,1)) 1
  1. Q:'$D(LEXIGN)&(+($P($G(^LEX(757.01,LEX,1)),"^",5))=1) 1
  1. Q 0
  1. DC(LEX,LEXT) ; Description
  1. N LEXD,LEXM S LEXD="",LEX=+($G(LEX)),LEXM=$P($G(^LEX(757.01,+($G(LEX)),1)),"^",1),LEXM=+($G(^LEX(757,+($G(LEXM)),0))) S:$D(^LEX(757.01,LEXM,3))&(+($G(LEXT))'=2) LEXD="*" S LEX=$G(LEXD) Q LEX
  1. DP(LEXS,LEXT,LEXD) ; Display
  1. N LEXA S LEXT=+($G(LEXT)),LEXD=$G(LEXD)
  1. S LEXA=$E($P($G(^LEX(757.03,LEXT,0)),"^",1),1,3)
  1. Q:'$L(LEXD) "" Q:'$L(LEXA) "" Q:LEXD'[LEXA ""
  1. S LEXT=$P($G(^LEX(757.03,LEXT,0)),"^",2)
  1. S LEXS=$G(LEXS) S:$E(LEXS,$L(LEXS))=" " LEXS=$E(LEXS,1,($L(LEXS)-1))
  1. S:$L(LEXS)&($L(LEXT)) LEXS=LEXT_" "_LEXS Q:$L(LEXS)&($L(LEXT)) LEXS Q ""
  1. DSO(X,LEXVDT,LEXS,LEXD) ; Display Sources String
  1. N LEXT,LEXIEN,LEXSAB S LEXIEN=+($G(X)) Q:+LEXIEN'>0 ""
  1. S LEXT=$G(LEXS),LEXSAB=$G(LEXD)
  1. F Q:$E(LEXT,1)'="/" S LEXT=$E(LEXT,2,$L(LEXT))
  1. S X=$$SO^LEXASO(LEXIEN,LEXT,1,$G(LEXVDT)) Q:$L(X) X
  1. S:$L(LEXSAB)=3&(LEXT'[LEXSAB) LEXT=LEXT_"/"_LEXSAB
  1. F Q:$E(LEXT,1)'="/" S LEXT=$E(LEXT,2,$L(LEXT))
  1. Q X
  1. MDS(LEXD,LEXA) ; Merge Display Strings
  1. S LEXA=$G(LEXA) F Q:LEXA'[") (" S LEXA=$P(LEXA,") (",1)_"/"_$P(LEXA,") (",2,299)
  1. S LEXA=$TR(LEXA,"(",""),LEXA=$TR(LEXA,")","")
  1. Q:'$L(LEXD) LEXA
  1. S:LEXA'[LEXD LEXA=LEXD_"/"_LEXA
  1. Q LEXA
  1. CLR ; Clear
  1. K ^TMP("LEXFND",$J),^TMP("LEXHIT",$J),^TMP("LEXL",$J),LEX S LEX=0 Q
  1. CLR2 ; Clear 2
  1. N LEXIGN
  1. Q
  1. IN(LEX) ; Flag in/not in file 757.02
  1. Q:$O(^LEX(757.02,"AVA",(($$SCH($E(LEX,1,61)))_" ")))[LEX 1 Q 0
  1. SCH(LEX) ; Search
  1. S LEX=$E(LEX,1,($L(LEX)-1))_$C($A($E(LEX,$L(LEX)))-1)_"~" Q LEX
  1. INSUB(EXIEN) ; Check if selected code in vocab
  1. N LEXFLN,LEXVOC,SUBIEN
  1. S LEXFLN=$G(^TMP("LEXSCH",$J,"FLN",0)) Q:LEXFLN=""!(LEXFLN="757.01") 1
  1. S LEXVOC=$G(^TMP("LEXSCH",$J,"VOC",0)) Q:LEXVOC=""!(LEXVOC="WRD") 1
  1. Q:$D(^LEXT(757.2,"AA",LEXVOC))'=10 1
  1. S SUBIEN=$O(^LEXT(757.2,"AA",LEXVOC,"")) Q:+SUBIEN'>0 1
  1. Q:$$INPSUB(EXIEN,SUBIEN) 1
  1. Q 0
  1. INPSUB(PRF,SUB) ; Check if concept PRF is member of subset SUB
  1. S PRF=$G(PRF) Q:'$L(PRF) 0 N IN,SIEN S SIEN="",IN=0
  1. F S SIEN=$O(^LEX(757.21,"B",PRF,SIEN)) Q:SIEN="" D Q:IN=1
  1. . I $P(^LEX(757.21,SIEN,0),U,2)=$G(SUB) S IN=1
  1. Q IN
  1. STATIEN(LEXCIEN) ; Determine status of code-expression pairing based
  1. ; on code IEN
  1. N STATDAT,STATIEN,LEXH,LEXI,LEXT,LEXTD S LEXT="",LEXCIEN=+($G(LEXCIEN))
  1. Q:'$D(^LEX(757.02,LEXCIEN)) 0
  1. I $D(LEXIGN) D
  1. . N LEXTD S LEXTD=$G(DT) S:LEXTD'?7N LEXTD=$$DT^XLFDT
  1. . S LEXH=$O(^LEX(757.02,LEXCIEN,4,"B",(LEXTD+.00001)),-1)
  1. . I LEXH'?7N,$O(^LEX(757.02,LEXCIEN,4,"B",(LEXTD-.00001)))>0 S LEXT="Pending" Q
  1. . S LEXI=$O(^LEX(757.02,LEXCIEN,4,"B",+LEXH," "),-1)
  1. . S LEXT=$P($G(^LEX(757.02,LEXCIEN,4,+LEXI,0)),"^",2)
  1. . S LEXT=$S(LEXT="1":"",LEXT="0":"Inactive",1:"")
  1. I $D(LEXIGN) Q:LEXT="Pending" "0^Pending"
  1. S STATDAT=$O(^LEX(757.02,LEXCIEN,4,"B",$S($G(LEXVDT)'="":(LEXVDT+.001),1:"")),-1)
  1. S STATIEN=$O(^LEX(757.02,LEXCIEN,4,"B",+STATDAT,""),-1)
  1. S STATDAT=+$P($G(^LEX(757.02,LEXCIEN,4,+STATIEN,0)),"^",2)
  1. S:$D(LEXIGN)&($L($G(LEXT))) STATDAT=STATDAT_"^"_LEXT
  1. Q STATDAT
  1. NONPLUS(STRING) ; Remove trialing plus from a string
  1. S STRING=$G(STRING)
  1. I $E($RE(STRING))="+" Q $RE($E($RE(STRING),2,$L(STRING)))
  1. Q STRING
  1. IS(X) ; Is a Code
  1. N CODE,ISACODE S CODE=$G(X),ISACODE=0
  1. ; If the user intended to search for a key VA code then ISACODE =1
  1. Q:$O(^LEX(757.02,"ADX",(CODE_" ")))[CODE 1
  1. Q:$O(^LEX(757.02,"APR",(CODE_" ")))[CODE 1
  1. Q:$O(^LEX(757.02,"AVA",(CODE_" ")))[CODE 1
  1. ; If the user input is a valid code (active or inactive) ISACODE=1
  1. Q:$D(^ICPT("BA",(CODE_" "))) 1
  1. Q:$$CODEABA^ICDEX(CODE,80,1)>0 1
  1. Q:$$CODEABA^ICDEX(CODE,80,30)>0 1
  1. Q:$$CODEABA^ICDEX(CODE,80.1,2)>0 1
  1. Q:$$CODEABA^ICDEX(CODE,80.1,31)>0 1
  1. ; If the user intended to search for a code (pattern match) with a typo, then ISACODE =1
  1. Q:(CODE?5N)!(CODE?1A4N)!(CODE?4N1"T")!(CODE?4N1"F") 1
  1. Q:(CODE?3N1"."2N)!(CODE?3N1"."1N)!(CODE?3N1".") 1
  1. Q:(CODE?1"E"3N1"."2N)!(CODE?1"E"3N1"."1N)!(CODE?1"E"3N1".") 1
  1. Q:(CODE?1"V"2N1"."2N)!(CODE?1"V"2N1"."1N)!(CODE?1"V"2N1".") 1
  1. Q:(CODE?2N1"."2N)!(CODE?2N1"."1N)!(CODE?2N1".") 1
  1. S X=+ISACODE Q X
  1. TM(X,Y) ; Trim Character Y - Default " "
  1. S X=$G(X) Q:X="" X S Y=$G(Y) S:'$L(Y) Y=" " F Q:$E(X,1)'=Y S X=$E(X,2,$L(X))
  1. F Q:$E(X,$L(X))'=Y S X=$E(X,1,($L(X)-1))
  1. Q X