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

LEXQVSE2.m

Go to the documentation of this file.
  1. LEXQVSE2 ;ISL/TJH - Query - VA Extension SNOMED CT - Save ;01/25/2021
  1. ;;2.0;LEXICON UTILITY;**133**;Sep 23, 1996;Build 3
  1. ;
  1. ; Global Variables
  1. ; ^LEX(757.01, SACC 1.3
  1. ; ^LEX(757.02, SACC 1.3
  1. ; ^TMP("LEXQVSEO") SACC 2.3.2.5.1
  1. ;
  1. ; External References
  1. ; $$FMTE^XLFDT ICR 10103
  1. ; $$UP^XLFSTR ICR 10104
  1. ;
  1. ; Local Variables NEWed or KILLed Elsewhere
  1. ; LEXSEN Code IEN
  1. ; LEXCOD Code
  1. ; LEXSTA Status
  1. ; LEXEEN Expression IEN
  1. ; LEXIIEN Flag to Include IENs
  1. ;
  1. EN ; Main Entry Point
  1. K ^TMP("LEXQVSEO",$J) Q:'$L($G(LEXELDT))
  1. I +($G(LEXSEN))>0,+($G(LEXSTA))=0,$G(LEXEFF)'?7N D FUT I +($G(LEXNODP))'>0 D:$D(^TMP("LEXQVSEO",$J)) DSP^LEXQO("LEXQVSEO") Q
  1. D FUL I +($G(LEXNODP))'>0 D:$D(^TMP("LEXQVSEO",$J)) DSP^LEXQO("LEXQVSEO")
  1. Q
  1. FUL ; Full Display
  1. N LEXFUL,LEX,LEXL,LEXSO,LEXNAM,LEXIENS,LEXSUBS,LEXMAPS,LEXMC S LEXL=$G(LEXLEN) S:+LEXL'>0 LEXL="18^25^53" S LEXSO=$G(LEXCOD) Q:'$L(LEXSO)
  1. S LEXNAM=$P($G(^LEX(757.02,+($G(LEXSEN)),0)),"^",1) Q:+LEXNAM'>0 S LEXNAM=$G(^LEX(757.01,+LEXNAM,0)) Q:'$L(LEXNAM)
  1. S LEXFUL="" D BOD($G(LEXELDT)),COD(LEXSO,LEXNAM,$G(LEXCDT),$G(LEXL))
  1. D STAL(LEXSO,$G(LEXL))
  1. K LEXIENS S LEXMC=+($G(^LEX(757.01,+($G(LEXEEN)),1)))
  1. D IENS^LEXQVSE(LEXMC,.LEXIENS)
  1. D EXP($G(LEXSO),$G(LEXCDT),.LEXIENS,$G(LEXL))
  1. K LEXSUBS D SUBS^LEXQVSE(LEXMC,.LEXSUBS)
  1. D:$D(LEXSUBS) SUBS(.LEXSUBS,$G(LEXL))
  1. K LEXMAPS D MAPS^LEXQVSE(LEXSO,.LEXMAPS,$G(LEXCDT),LEXL)
  1. D:$D(LEXMAPS) MAPS(.LEXMAPS,LEXL)
  1. Q
  1. FUT ; Future Activation
  1. N LEX1,LEX2,LEX3,LEXEFF,LEXI,LEXL,LEXNAM,LEXSO,LEXNA,LEXNAM S LEXL=$G(LEXLEN) S:+LEXL'>0 LEXL="18^25^53"
  1. S LEXSO=$G(LEXCOD) S LEXNA=$$NA^LEXQVSE(LEXSO,$G(LEXCDT)) S LEXNAM=$P($G(^LEX(757.02,+($G(LEXSEN)),0)),"^",1) Q:+LEXNAM'>0
  1. S LEXNAM=$G(^LEX(757.01,+LEXNAM,0)) Q:'$L(LEXNAM) D BOD(LEXELDT),COD(LEXSO,LEXNAM,$G(LEXL))
  1. D STAF(LEXNA,$G(LEXL))
  1. Q
  1. BOD(X) ; Based on Date
  1. N LEXBOD,LEXT S LEXBOD=$G(X),LEXT="Display based on date: "_LEXBOD D BL,TL(LEXT)
  1. Q
  1. COD(X,Y,LEXD,LEXLEN) ; Code Line
  1. N LEXC,LEXN,LEXI,LEXN,LEXT,LEXCL,LEXLL,LEXTL,LEXIEN,LEXNAM S LEXC=$G(X),LEXNAM=$G(Y),LEXD=$G(LEXD),LEXIEN=$$CI(LEXC,LEXD)
  1. S LEXCL=+($G(LEXLEN)),LEXLL=+($P($G(LEXLEN),"^",2)),LEXTL=+($P($G(LEXLEN),"^",3))
  1. S:$D(LEXIIEN)&($L(LEXIEN)) LEXNAM=LEXIEN S LEXN(1)=LEXNAM,LEXT="Code: "_LEXC S LEXT=LEXT_$J(" ",(LEXLL-$L(LEXT)))
  1. D PR^LEXU(.LEXN,+($G(LEXTL)))
  1. S LEXT=LEXT_LEXN(1) D BL,TL(LEXT)
  1. S LEXI=1 F S LEXI=$O(LEXN(LEXI)) Q:+LEXI'>0 D
  1. . N LEXT,LEX S LEX=$G(LEXN(LEXI)) Q:'$L(LEX)
  1. . S LEXT=" ",LEXT=LEXT_$J(" ",(LEXLL-$L(LEXT)))_LEX D TL(LEXT)
  1. Q
  1. STAF(X,LEXLEN) ; Status Line (Future)
  1. N LEXX,LEXT,LEXE,LEXCL,LEXLL,LEXTL
  1. S LEXCL=+($G(LEXLEN)),LEXLL=+($P($G(LEXLEN),"^",2)),LEXTL=+($P($G(LEXLEN),"^",3))
  1. S LEXX=$G(X)
  1. S LEXT=" Status: "
  1. S LEXT=LEXT_"Pending"
  1. S LEXT=LEXT_$J(" ",(42-$L(LEXT)))
  1. S LEXE=$S(LEXX?7N:$$FMTE^XLFDT(LEXX,"5Z"),1:"Unknown")
  1. S LEXT=LEXT_" Effective: "_LEXE
  1. D BL,TL((LEXT))
  1. Q
  1. STAL(X,LEXLEN) ; Status Line
  1. N LEXSO,LEXL,LEXCL,LEXLL,LEXTL,LEXH,LEXHI,LEXLDR,LEXT
  1. S LEXL=$G(LEXLEN) S LEXCL=+($G(LEXL)),LEXLL=+($P($G(LEXL),"^",2)),LEXTL=+($P($G(LEXL),"^",3))
  1. S LEXSO=$G(X) Q:'$L(LEXSO) S LEXH=$$HIST(LEXSO,.LEXHI)
  1. S LEXLDR=" Status: "
  1. S LEXEFF=LEXCDT+1,LEXEFF=$O(LEXHI(LEXEFF),-1)
  1. S LEXI="",LEXI=$O(LEXHI(LEXEFF,LEXI),-1) D
  1. . N LEXST,LEXSE,LEXT S LEXST=$G(LEXHI(LEXEFF,LEXI)),LEXST=$$STUPD(LEXST)
  1. . S LEXSE=$$FMTE^XLFDT(LEXEFF,"5Z")
  1. . S LEXT=LEXLDR
  1. . S LEXT=LEXT_$J(" ",(LEXLL-$L(LEXT)))_LEXST
  1. . S LEXT=LEXT_$J(" ",(42-$L(LEXT)))_" Effective: "_LEXSE
  1. . D:LEXLDR["Status" BL D TL(LEXT)
  1. . S LEXLDR=" "
  1. Q
  1. EXP(LEXSO,LEXCDT,LEXEX,LEXLEN) ; Expressions
  1. N LEXPREF,LEXFSC,LEXFSN,LEXCL,LEXLL,LEXTL,LEXDT,LEXP S LEXPREF=$$PREF(LEXSO,LEXCDT)
  1. S LEXFSN=$$FSN(.LEXEX),LEXFSC=+LEXFSN,LEXFSN=$P(LEXFSN,"^",2)
  1. S LEXCL=+($G(LEXLEN)),LEXLL=+($P($G(LEXLEN),"^",2)),LEXTL=+($P($G(LEXLEN),"^",3)) D:$O(LEXEX(0))>0 BL
  1. N LEXTY S LEXTY=0 F S LEXTY=$O(LEXEX(LEXTY)) Q:+LEXTY'>0 D
  1. . I LEXTY>0 D Q
  1. . . N LEXS,LEXPL,LEXFN,LEXLN S LEXPL=0 S LEXFN=$O(LEXEX(LEXTY,0)),LEXLN=$O(LEXEX(LEXTY," "),-1)
  1. . . S:LEXFN>0&(LEXLN>0)&(LEXFN'=LEXLN) LEXPL=1
  1. . . S LEXS=0 F S LEXS=$O(LEXEX(LEXTY,LEXS)) Q:+LEXS'>0 D
  1. . . . N LEXEI,LEXP,LEXDT,LEXT,LEXDA,LEXDS,LEXO,LEXD,LEXDF,LEXCOM
  1. . . . S LEXEI=$G(LEXEX(LEXTY,LEXS)) Q:LEXEI'?1N.N
  1. . . . S LEXCOM="" I LEXTY=2 D
  1. . . . . Q:LEXFSN'>0 Q:$O(LEXEX(2,0))=$O(LEXEX(2," "),-1)
  1. . . . . I +($G(LEXFSC))>1,LEXEI=LEXFSN S LEXCOM="Preferred FSN"
  1. . . . S LEXDF=$P($G(^LEX(757.01,+LEXEI,1)),"^",5)
  1. . . . S LEXCOM=LEXCOM_$S(LEXDF>0:", Deactivated",1:"")
  1. . . . S:$D(LEXIIEN) LEXCOM=LEXCOM_", IEN "_+LEXEI
  1. . . . S LEXCOM=$$TM($$TM(LEXCOM,",")) S:$L(LEXCOM) LEXCOM=" ("_LEXCOM_")"
  1. . . . S LEXP="" I +LEXEI=+LEXPREF S LEXP="Preferred Term"
  1. . . . S LEXD=$$DA^LEXQVSE(+LEXEI)
  1. . . . D DS^LEXQVSE(LEXEI,.LEXDS)
  1. . . . S LEXDT(1)=$G(^LEX(757.01,+LEXEI,0))_LEXCOM
  1. . . . D PR^LEXU(.LEXDT,+($G(LEXTL)))
  1. . . . S:LEXTY=1 LEXT=" Major Concept: "
  1. . . . S:LEXTY=1&(+($G(LEXPL))>0) LEXT=" Major Concepts: "
  1. . . . S:LEXTY=2 LEXT=" Fully Specified: "
  1. . . . S:LEXTY=3 LEXT=" Synonymous Term: "
  1. . . . S:LEXTY=3&(+($G(LEXPL))>0) LEXT=" Synonymous Terms:"
  1. . . . S:LEXS>1 LEXT=" "
  1. . . . S LEXT=LEXT_$J(" ",(LEXLL-$L(LEXT)))_$G(LEXDT(1)) D TL(LEXT)
  1. . . . S LEXO=1 F S LEXO=$O(LEXDT(LEXO)) Q:+LEXO=0 D
  1. . . . . N LEXT S LEXT="",LEXT=LEXT_$J(" ",(LEXLL-$L(LEXT)))_$G(LEXDT(LEXO)) D TL(LEXT)
  1. . . . I $L(LEXP) S LEXT="",LEXT=LEXT_$J(" ",(LEXLL-$L(LEXT)))_" "_LEXP D TL(LEXT)
  1. . . . I $L(LEXD) S LEXT="",LEXT=LEXT_$J(" ",(LEXLL-$L(LEXT)))_" "_LEXD D TL(LEXT)
  1. . . . I $O(LEXDS(0))>0 D
  1. . . . . N LEXT,LEXTT,LEXND,LEXCD,LEXHI,LEXI,LEXCT S LEXCT=0
  1. . . . . S LEXTT="",LEXTT=LEXTT_$J(" ",(LEXLL-$L(LEXTT)))_" Designation Code"
  1. . . . . S LEXI=0 F S LEXI=$O(LEXDS(LEXI)) Q:+LEXI'>0 D
  1. . . . . . N LEXT,LEXND,LEXCD,LEXHI,LEXNL S LEXND=$G(LEXDS(LEXI)),LEXCD=$P(LEXND,"^",1),LEXHI=$P(LEXND,"^",2),LEXNL=43
  1. . . . . . S LEXCT=LEXCT+1 S:$L(LEXHI) LEXTT=LEXTT_"/Hierarchy" D:LEXCT=1 TL(LEXTT)
  1. . . . . . S LEXT="",LEXT=LEXT_$J(" ",(LEXLL-$L(LEXT)))_" "_LEXCD
  1. . . . . . S:$L(LEXHI) LEXT=LEXT_$J(" ",(LEXNL-$L(LEXT)))_" "_LEXHI
  1. . . . . .
  1. . . . . . D TL(LEXT)
  1. Q
  1. SUBS(LEX,LEXLEN) ; Subsets
  1. N LEXSA,LEXSN,LEXLDR,LEXPL,LEXCL,LEXLL,LEXTL Q:'$L($O(LEX(""))) S LEXPL=0 S:$O(LEX(""))'=$O(LEX(""),-1) LEXPL=1
  1. S LEXCL=+($G(LEXLEN)),LEXLL=+($P($G(LEXLEN),"^",2)),LEXTL=+($P($G(LEXLEN),"^",3))
  1. S LEXLDR=" Subset: " S:LEXPL>0 LEXLDR=" Subsets: " S LEXSA="" D BL
  1. F S LEXSA=$O(LEX(LEXSA)) Q:'$L(LEXSA) D
  1. . N LEXSN,LEXSI,LEXT,LEXIEN S LEXSN=$P($G(LEX(LEXSA)),"^",1)
  1. . S LEXSN=$P($G(LEX(LEXSA)),"^",1),LEXIEN=+($P($G(LEX(LEXSA)),"^",3))
  1. . S:$D(LEXIIEN)&($L(LEXSN))&(+($G(LEXIEN))>0) LEXSN=LEXSN_" (IEN "_+LEXIEN_")"
  1. . S LEXT=$G(LEXLDR),LEXT=LEXT_$J(" ",(LEXLL-$L(LEXT)))_LEXSN D TL(LEXT) S LEXLDR=" "
  1. Q
  1. MAPS(LEX,LEXLEN) ; Mappings
  1. N LEXSA,LEXSN,LEXLDR,LEXPL,LEXCL,LEXLL,LEXTL,LEXN Q:'$L($O(LEX("")))
  1. S (LEXPL,LEXSA)=0 F S LEXSA=$O(LEX(LEXSA)) Q:'$L(LEXSA) S:$E($G(LEX(LEXSA)),1) LEXPL=+LEXPL+1
  1. S LEXCL=+($G(LEXLEN)),LEXLL=+($P($G(LEXLEN),"^",2)),LEXTL=+($P($G(LEXLEN),"^",3))
  1. S LEXLDR=" Mapping:" S:LEXPL>0 LEXLDR=" Mappings:" S LEXLDR=LEXLDR_$J(" ",(LEXLL-$L(LEXLDR)))
  1. D BL S LEXSA="" F S LEXSA=$O(LEX(LEXSA)) Q:'$L(LEXSA) D
  1. . N LEXSN,LEXT S LEXSN=$G(LEX(LEXSA))
  1. . S LEXT=LEXLDR_LEXSN D TL(LEXT) S LEXLDR=$J(" ",LEXLL)
  1. Q
  1. ;
  1. ; Miscellaneous
  1. CI(X,LEXD) ; Code IENs
  1. N LEXSO,LEXSDO,LEXLEX,LEXSAB S LEXSO=$G(X) Q:'$L(LEXSO) S LEXD=$G(LEXD) I LEXD'?7N D
  1. . N LEXEF,LEXTD S LEXTD="",LEXEF=9999999 F S LEXEF=$O(^LEX(757.02,"ACT",(LEXSO_" "),3,LEXEF),-1) Q:+LEXEF'>0 D Q:LEXTD?7N
  1. . . N LEXIE S LEXIE=$O(^LEX(757.02," "),-1) F S LEXIE=$O(^LEX(757.02,"ACT",(LEXSO_" "),3,+LEXEF,LEXIE),-1) Q:+LEXIE'>0 D Q:LEXTD?7N
  1. . . . N LEXSR S LEXSR=$P($G(^LEX(757.02,+LEXIE,0)),"^",3) S:"^58^"[("^"_LEXSR_"^") LEXTD=LEXEF S:$G(LEXTD)?7N LEXD=LEXTD
  1. S:LEXD'?7N LEXD=$$DT^XLFDT S LEXSAB="VSE",LEXLEX=$$STATCHK^LEXSRC2(LEXSO,LEXD,,LEXSAB),LEXLEX=$P(LEXLEX,"^",2)
  1. S LEXLEX=$S(+LEXLEX>0:("Lexicon VA Extension SNOMED CT Code IEN "_+LEXLEX),1:"") S X="" S:$L(LEXLEX) X=LEXLEX
  1. Q X
  1. LEN(X) ; Length of Code
  1. N LEXSIEN,LEXMAX S LEXMAX=0,LEXSIEN=0 F S LEXSIEN=$O(^LEX(757.02,"ASRC","VSE",LEXSIEN)) Q:+LEXSIEN'>0 D
  1. . N LEXCD S LEXCD=$P($G(^LEX(757.02,+LEXSIEN,0)),"^",2) S:$L(LEXCD)>LEXMAX LEXMAX=$L(LEXCD)
  1. S X=LEXMAX
  1. Q X
  1. BL ; Blank Line
  1. D TL(" ") Q
  1. TL(X) ; Text Line
  1. I $D(LEXTEST) W !,$G(X) Q
  1. N LEXI S LEXI=+($O(^TMP("LEXQVSEO",$J," "),-1))+1 S ^TMP("LEXQVSEO",$J,LEXI)=$G(X),^TMP("LEXQVSEO",$J,0)=LEXI
  1. Q
  1. CLR ; Clear
  1. N LEXIEN,LEXLEN,LEXGET,LEXSD,LEXLD,LEXMD,LEXLX,LEXINC,LEXELDT,LEXST,LEXTEST,LEXWN
  1. Q
  1. STUPD(X) ; Status Update
  1. N LEXUP S LEXUP=$$UP^XLFSTR(X) S:LEXUP["ACTIVATED" X="Active" S:LEXUP["INACTIV" X="Inactive" S:LEXUP["REVISE" X="Active ("_X_")"
  1. S:LEXUP["RE-ACT" X="Active ("_X_")" S:LEXUP["RE-USE" X="Active ("_X_")"
  1. Q X
  1. PREF(LEXSO,LEXCDT) ; Get Preferred Expression for an Active Code
  1. Q $$PREF^LEXU($G(LEXSO),"VSE",$G(LEXCDT))
  1. FSN(LEXEX) ; Get Count and Preferred Fully Specified Name
  1. N LEXACT,LEXI,LEXPA K LEXPA S (LEXACT,LEXI)=0 F S LEXI=$O(LEXEX(2,LEXI)) Q:+LEXI'>0 D
  1. . N LEXIEN,LEXDES,LEXHIS,LEXHAR S LEXIEN=$G(LEXEX(2,LEXI))
  1. . Q:$P($G(^LEX(757.01,+LEXIEN,1)),"^",5)>0
  1. . S LEXACT=LEXACT+1
  1. . S LEXDES=$O(^LEX(757.01,+LEXIEN,7,"C",58,"")) Q:'$L(LEXDES)
  1. . S LEXHIS=$O(^LEX(757.01,+LEXIEN,7,"C",58,LEXDES,0)) Q:+LEXHIS'>0
  1. . S LEXHAR=$P($G(^LEX(757.01,+LEXIEN,7,+LEXHIS,0)),"^",3) Q:+LEXHAR'>0
  1. . Q:$P($G(^LEX(757.01,+LEXIEN,1)),"^",5)>0
  1. . S LEXPA(LEXIEN)=""
  1. S X=$O(LEXPA(" "),-1) S:+X'>0 X="" S:X>0 X=+LEXACT_"^"_X
  1. Q X
  1. HIST(CODE,ARY) ; Activation History
  1. N LEXCOD,LEXEEN,LEXIIEN,LEXNODP,LEXSEN,LEXSTA
  1. Q $$HIST^LEXU($G(CODE),58,.ARY)
  1. TM(X,Y) ; Trim Character Y - Default " "
  1. S X=$G(X) Q:X="" X S Y=$G(Y) S:'$L(Y) Y=" "
  1. 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