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

LEXINF4.m

Go to the documentation of this file.
  1. LEXINF4 ;ISL/KER - Information - Lookup ;05/23/2017
  1. ;;2.0;LEXICON UTILITY;**103**;Sep 23, 1996;Build 2
  1. ;
  1. ; Global Variables
  1. ; ^LEX(757.02 SACC 1.3
  1. ; ^LEX(757.03 SACC 1.3
  1. ; ^TMP("LEXINFLK" SACC 2.3.2.5.1
  1. ; ^TMP("LEXINFS" SACC 2.3.2.5.1
  1. ;
  1. ; External References
  1. ; FIND^DIC ICR 2051
  1. ; ^DIR ICR 10026
  1. ; ^LEXA1 Special Lookup
  1. ; $$DT^XLFDT ICR 10103
  1. ; $$UP^XLFSTR ICR 10104
  1. ;
  1. TERM(X) ; Get Term
  1. ;
  1. ; Input
  1. ;
  1. ; X Date, optional, default is TODAY
  1. ;
  1. ; Output
  1. ;
  1. ; $$TERM 2 piece "^" delimited string
  1. ; 1 Pointer to Expression file #757.01
  1. ; 2 Expression
  1. ;
  1. N DIC,LEXVDT,Y S LEXVDT=$$DT^XLFDT S:$G(X)?7N LEXVDT=$G(X) K X S DIC("S")="I 1" D ^LEXA1
  1. S X=Y
  1. Q X
  1. CODE(X) ; Get Code
  1. ;
  1. ; Input
  1. ;
  1. ; None
  1. ;
  1. ; Output
  1. ;
  1. ; $$CODE 6 piece "^" delimited string
  1. ; 1 Code
  1. ; 2 Coding System
  1. ; 3 Expression
  1. ; 4 Pointer to CODES file 757.02
  1. ; 5 Pointer to CODING SYSTEM file 757.03
  1. ; 6 Pointer to EXPRESSIONS file 757.01
  1. ;
  1. N DIR,DTOUT,DUOUT,DIRUT,DIROUT,DIC,DTOUT,DUOUT
  1. S DIR(0)="FAO^2:40",DIR("PRE")="S X=$$CODEP^LEXINF4($G(X))",DIR("A")=" Select Code: "
  1. S (DIR("?"),DIR("??"))="^D CODEH^LEXINF4" D ^DIR Q:'$L(X)&('$D(DTOUT)) "-1^Valid code not entered"
  1. Q:$D(DTOUT) "-1^Timed out" Q:X["^"&(X'["^^") "-1^Exit without entering a valid code"
  1. Q:X["^^" "-1^Abort without entering a valid code" S X=$$CODELK(Y)
  1. Q X
  1. CODEP(X) ; Code Preprocessing
  1. N LEXINP,LEXO,LEXCTL,LEXSBS,LEXOK,LEXSRS S LEXINP=$G(X)
  1. Q:'$L(LEXINP) "" Q:LEXINP="^" "^" Q:LEXINP["^"&(LEXINP'["^^") "^" Q:LEXINP["^^" "^^"
  1. Q:LEXINP["?" "??" Q:$L(LEXINP)'>1 "??"
  1. S LEXSRS="^1^30^2^31^3^4^57^6^17^56^"
  1. S LEXO=$E(LEXINP,1,($L(LEXINP)-1))_$C($A($E(LEXINP,$L(LEXINP)))-1)_"~ ",LEXCTL=LEXINP,LEXOK=0
  1. F S LEXO=$O(^LEX(757.02,"CODE",LEXO)) Q:'$L(LEXO)!($E(LEXO,1,$L(LEXCTL))'=LEXCTL) Q:LEXOK D Q:LEXOK
  1. . N LEXSIEN S LEXSIEN=0 F S LEXSIEN=$O(^LEX(757.02,"CODE",LEXO,LEXSIEN)) Q:+LEXSIEN'>0 D
  1. . . N LEXND S LEXND=$G(^LEX(757.02,+LEXSIEN,0)) Q:$P(LEXND,"^",5)'>0 Q:LEXSRS'[("^"_$P(LEXND,"^",3)_"^") S LEXOK=1
  1. Q:LEXOK'>0 "??" S X=LEXINP
  1. Q X
  1. CODEH ; Code Help
  1. W !,?5,"Enter a full or partial code from one of the following"
  1. W !,?5,"coding systems:",!
  1. W !,?10,"ICD ICD-9-CM 10D ICD-10-CM"
  1. W !,?10,"ICP ICD-9 Proc 10P ICD-10-PCS"
  1. W !,?10,"CPT CPT-4 CPC HCPCS"
  1. W !,?10,"DS4 DSM-IV SCC TITLE 38"
  1. W !,?10,"SCT SNOMED CT BIR BI-RADS"
  1. Q
  1. CODELK(X) ; Lookup Code
  1. K ^TMP("LEXINFLK",$J) N LEXVAL,LEXI,LEXIDX,LEXMSG,LEXTAR,LEXCT,DIR,DTOUT,DUOUT,DIROUT,DIRUT
  1. S LEXVAL=$G(X),LEXCT=0 Q:'$L(LEXVAL) 0 S LEXIDX="CODE",LEXTAR="^TMP(""LEXINFLK"",$J)"
  1. D FIND^DIC(757.02,,".01EI;1EI;2EI",,LEXVAL,,LEXIDX,"I $$DICS^LEXINF4(+Y)>0",,LEXTAR,"LEXMSG")
  1. K ^TMP("LEXINFS",$J) S LEXI=0 F S LEXI=$O(^TMP("LEXINFLK",$J,"DILIST","ID",LEXI)) Q:+LEXI'>0 D
  1. . N LEXEX,LEXSO,LEXSR,LEXSAB,LEXSRC,LEXNOM,LEXCODE,LEXEXP,LEXA,LEXSTR,LEXSIEN
  1. . S LEXSIEN=+($G(^TMP("LEXINFLK",$J,"DILIST",2,LEXI)))
  1. . S (LEXA(1),LEXEXP)=$G(^TMP("LEXINFLK",$J,"DILIST","ID",LEXI,.01,"E"))
  1. . S LEXEX=$G(^TMP("LEXINFLK",$J,"DILIST","ID",LEXI,.01,"I"))
  1. . S LEXCODE=$G(^TMP("LEXINFLK",$J,"DILIST","ID",LEXI,1,"E"))
  1. . S LEXSO=$G(^TMP("LEXINFLK",$J,"DILIST","ID",LEXI,1,"I"))
  1. . S LEXSAB=$G(^TMP("LEXINFLK",$J,"DILIST","ID",LEXI,2,"E"))
  1. . S LEXSR=$G(^TMP("LEXINFLK",$J,"DILIST","ID",LEXI,2,"I"))
  1. . S:$L(LEXSAB) LEXSRC=$O(^LEX(757.03,"ASAB",LEXSAB,0))
  1. . S:+LEXSRC>0 LEXNOM=$P($G(^LEX(757.03,+LEXSRC,0)),"^",2)
  1. . S:$L(LEXNOM) ^TMP("LEXINFLK",$J,"DILIST","ID",LEXI,2)=LEXNOM
  1. . S ^TMP("LEXINFS",$J,LEXI,0)=LEXSIEN
  1. . S ^TMP("LEXINFS",$J,LEXI,"SO")=LEXCODE
  1. . S ^TMP("LEXINFS",$J,LEXI,"EX")=LEXEX_"^"_LEXEXP
  1. . S ^TMP("LEXINFS",$J,LEXI,"SR")=LEXSR_"^"_LEXNOM
  1. . S ^TMP("LEXINFS",$J,LEXI,"OUT")=LEXCODE_"^"_LEXNOM_"^"_LEXEXP_"^"_LEXSIEN_"^"_LEXSR_"^"_LEXEX
  1. . S LEXLEN=$L(LEXCODE)+$L(LEXNOM)+6 D PR^LEXU(.LEXA,(70-LEXLEN))
  1. . S LEXSTR=LEXCODE_" ("_LEXNOM_") "_LEXA(1)
  1. . S ^TMP("LEXINFLK",$J,"DILIST","ID","LEX",LEXI,1)=LEXSTR
  1. . S ^TMP("LEXINFS",$J,LEXI,"A",1)=LEXSTR
  1. . S LEXCT=LEXCT+1
  1. . K LEXA(1) I $D(LEXA) D PR^LEXU(.LEXA,56) D
  1. . . N LEXL S LEXL=0 F S LEXL=$O(LEXA(LEXL)) Q:+LEXL'>0 D
  1. . . . N LEXT,LEXS S LEXT=$G(LEXA(LEXL)) Q:'$L(LEXT)
  1. . . . S LEXT=" "_LEXT
  1. . . . S LEXS=$O(^TMP("LEXINFLK",$J,"DILIST","ID","LEX",LEXI," "),-1)+1
  1. . . . S ^TMP("LEXINFLK",$J,"DILIST","ID","LEX",LEXI,LEXS)=LEXT
  1. . . . S ^TMP("LEXINFS",$J,LEXI,"A",LEXS)=LEXT
  1. . S ^TMP("LEXINFLK",$J,"DILIST","ID","MAT")=LEXCT
  1. . S ^TMP("LEXINFS",$J,0)=LEXCT
  1. K ^TMP("LEXINFLK",$J),LEXMSG,LEXTAR
  1. S X=$$CODEASK
  1. Q X
  1. CODEASK(X) ; Ask for Selection
  1. N LEXIT,LEXL,LEXTOT,DTOUT,DUOUT,DIROUT,DIRUT S LEXL=+($G(X)) S:LEXL'>0 LEXL=5
  1. S LEXTOT=+($G(^TMP("LEXINFS",$J,0))),LEXIT=0 Q:+LEXTOT'>0 "^"
  1. K X S:+LEXTOT=1 X=$$CODEO(LEXL) S:+LEXTOT>1 X=$$CODEM(LEXL) Q:+X<0 X
  1. I +X>0,$L($P(X,"^",2)),$L($P(X,"^",3)) D
  1. . S X=$P(X,"^",2,4000) W " ",$P(X,"^",2)," code ",$P(X,"^",1),!
  1. Q X
  1. CODEO(X,LEX) ; One Code Found
  1. Q:+($G(LEXIT))>0 "-1^Exit" N DIR,LEXI,LEXS,LEXC S DIR("A",1)=" One match found",DIR("A",2)=" " S LEXC=2
  1. S LEXI=1,LEXS=0 Q:'$D(^TMP("LEXINFS",$J,LEXI,"A",1)) "-1^Nothing found"
  1. F S LEXS=$O(^TMP("LEXINFS",$J,LEXI,"A",LEXS)) Q:+LEXS'>0 D
  1. . N LEXT S LEXT=$G(^TMP("LEXINFS",$J,LEXI,"A",LEXS)) S LEXC=LEXC+1
  1. . S:LEXC=3 DIR("A",LEXC)=(" "_LEXT) S:LEXC>3 DIR("A",LEXC)=(" "_LEXT)
  1. S LEXC=LEXC+1,DIR("A",LEXC)=" "
  1. S DIR("A")=" OK? (Yes/No) ",DIR("B")="Yes",DIR(0)="YAO" W !
  1. D ^DIR S:X["^^"!($D(DTOUT)) LEXIT=1 S:$D(DTOUT) LEXIT=1 S:$D(DUOUT)!($D(DIROUT))!($D(DIRUT)) LEXIT=1
  1. S:+$G(Y)'>0 LEXIT=1 Q:$D(DTOUT) "-1^Timed out" Q:$D(DUOUT)!($D(DIROUT))!($D(DIRUT)) "-1^Exit without selection"
  1. Q:+$G(Y)'>0 "-1^No selection made" Q:X["^^"!(+($G(LEXIT))>0) "-1^Aborted^"
  1. S X=$S(+Y>0:$$OUT(1),1:"-1^Selection not made")
  1. Q X
  1. CODEM(X) ; Multiple Codes Found
  1. Q:+($G(LEXIT))>0 "^^" N LEXI,LEXS,LEXL,LEXNM,LEXMAX,LEXLAST,LEXSS,LEXX,Y
  1. S (LEXMAX,LEXIT)=0,LEXL=+($G(X)),U="^" S:+($G(LEXL))'>0 LEXL=5 S LEXLAST=$O(^TMP("LEXINFS",$J," "),-1)
  1. S LEXX=+($G(^TMP("LEXINFS",$J,0))),LEXSS=0 G:+LEXX<2 CODEMQ W ! W:+LEXX>1 !," ",LEXX," matches found" S (LEXNM,LEXI)=0
  1. F S LEXI=$O(^TMP("LEXINFS",$J,LEXI)) Q:+LEXI'>0 Q:+LEXSS>0 Q:LEXIT>0 D Q:LEXIT>0 Q:+LEXSS>0
  1. . W:LEXI#LEXL=1 ! D CODEMW
  1. . S LEXMAX=LEXI W:LEXI#LEXL=0 !
  1. . S:LEXI#LEXL=0 LEXSS=$$CODEMS(LEXMAX) Q:LEXIT>0
  1. . I LEXMAX=LEXLAST,LEXI#LEXL'=0,+LEXSS'<0 D Q:LEXIT>0
  1. . . W ! S LEXSS=$$CODEMS(LEXMAX)
  1. G CODEMQ
  1. Q X
  1. CODEMW ; Write Multiple
  1. N LEXS S LEXI=+($G(LEXI)),LEXS=0 F S LEXS=$O(^TMP("LEXINFS",$J,LEXI,"A",LEXS)) Q:+LEXS'>0 D
  1. . N LEXT S LEXT=$G(^TMP("LEXINFS",$J,LEXI,"A",LEXS)) S:LEXS=1 LEXT=$J(+LEXI,5)_". "_LEXT
  1. . S:LEXS>1 LEXT=" "_LEXT W !,LEXT
  1. Q
  1. CODEMS(X) ; Select from Multiple Entries
  1. N DIR,DIRB,LEXFI,LEXHLP,LEXLAST,LEXMAX,LEXS
  1. Q:+($G(LEXIT))>0 "-1^Exit"
  1. S LEXMAX=+($G(X)) Q:LEXMAX=0 "-1^No matches found"
  1. S LEXLAST=$O(^TMP("LEXINFS",$J," "),-1)
  1. I +($O(^TMP("LEXINFS",$J,LEXMAX)))>0 D
  1. . S DIR("A")=" Press <RETURN> for more, ""^"" to exit, or Select 1-"_LEXMAX_": "
  1. I +($O(^TMP("LEXINFS",$J,LEXMAX)))'>0 D
  1. . S DIR("A")=" Select 1-"_LEXMAX_": "
  1. S LEXHLP=" Answer must be from 1 to "_LEXMAX_", or <Return> to continue"
  1. S DIR("PRE")="S:X[""?"" X=""??"""
  1. S (DIR("?"),DIR("??"))="^D CODEMSH^LEXINF4"
  1. S DIR(0)="NAO^1:"_LEXMAX_":0" D ^DIR
  1. I (LEXLAST>LEXMAX) S:'$L(X)&($D(DTOUT)) LEXIT=1 Q:'$L(X)&($D(DTOUT)) "-1^Timed out"
  1. Q:'$L(X)&(LEXLAST>LEXMAX)&('$D(DTOUT)) "" Q:'$L(X)&(LEXLAST'>LEXMAX)&('$D(DTOUT)) "-1^No selection made"
  1. S:X["^^" LEXIT=1 S:$D(DTOUT) LEXIT=1 S:$D(DUOUT)!($D(DIROUT))!($D(DIRUT)) LEXIT=1 S:+$G(Y)'>0 LEXIT=1
  1. Q:X["^^" "-1^Aborted without selection" Q:$D(DTOUT) "-1^Timed out"
  1. Q:$D(DUOUT)!($D(DIROUT))!($D(DIRUT)) "-1^Exit without selection"
  1. Q:+$G(Y)'>0 "-1^No selection made" Q:X["^^"!(+($G(LEXIT))>0) "-1^Aborted^"
  1. Q $S(+Y>0:$$OUT(+Y),1:"")
  1. CODEMSH ; Select from Multiple Entries Help
  1. I $L($G(LEXHLP)) W !,$G(LEXHLP) Q
  1. Q
  1. CODEMQ ; Quit Multiple
  1. S X=$G(LEXSS) S:+($G(LEXSS))'>0 X="-1^No selection made" S:+($G(LEXSS))<0&($L($P($G(LEXSS),"^",2))) X=LEXSS
  1. Q X
  1. ;
  1. ; Miscellaneous
  1. OUT(X) ; Output Selection
  1. N LEXFND,LEXCODE,LEXEXP,LEXNOM,LEXOUT,LEXI,LEXS,LEXC S LEXFND=+($G(X)) Q:LEXFND'>0 -1 Q:'$D(^TMP("LEXINFS",$J,LEXFND))
  1. S LEXSO=$G(^TMP("LEXINFS",$J,LEXFND,0)),LEXEXP=$P($G(^TMP("LEXINFS",$J,LEXFND,"EX")),"^",2),LEXEX=$P($G(^TMP("LEXINFS",$J,LEXFND,"EX")),"^",1)
  1. S LEXCODE=$G(^TMP("LEXINFS",$J,LEXFND,"SO")),LEXNOM=$P($G(^TMP("LEXINFS",$J,LEXFND,"SR")),"^",2),LEXSR=$P($G(^TMP("LEXINFS",$J,LEXFND,"SR")),"^",1)
  1. S:$L(LEXCODE) LEXOUT=LEXCODE_"^"_LEXNOM_"^"_LEXEXP_"^"_LEXSO_"^"_LEXSR_"^"_LEXEX S:'$L(LEXCODE) LEXOUT=$G(^TMP("LEXINFS",$J,LEXI,"OUT")) Q:'$L($P(LEXOUT,"^",1)) -1
  1. S X=LEXFND_"^"_LEXOUT
  1. Q X
  1. CONT(X,Y) ; Ask to Continue
  1. K DTOUT,DUOUT,DIRUT,DIROUT N LEXX,LEXFQ,LEXW,LEXI,LEXC,DIR
  1. S LEXX=$$UP^XLFSTR($G(X)),LEXFQ=$G(Y) Q:'$L(LEXX) 1 Q:LEXFQ'>0 1
  1. S LEXW(1)="Searching for """_LEXX_""" requires inspecting "
  1. S LEXW(2)=LEXFQ_" records to determine if they match the "
  1. S LEXW(3)="search criteria. This could take quite some time."
  1. S LEXW(4)="Suggest refining the search by further specifying "
  1. S LEXW(5)=""""_LEXX_"."""
  1. D PR^LEXU(.LEXW,60) S (LEXC,LEXI)=0 F S LEXI=$O(LEXW(LEXI)) Q:+LEXI'>0 D
  1. . Q:'$L($G(LEXW(LEXI))) S LEXC=LEXC+1 S DIR("A",LEXC)=" "_$G(LEXW(LEXI))
  1. I LEXC>0 S LEXC=LEXC+1,DIR("A",LEXC)=" "
  1. S DIR("A")=" Do you wish to continue? (Y/N) ",DIR("B")="No"
  1. S DIR(0)="YAO",(DIR("?"),DIR("??"))="^D COH^LEXINF4"
  1. S DIR("PRE")="S:X[""?"" X=""??""" W ! D ^DIR
  1. S X=+Y S:$D(DTOUT)!($D(DUOUT))!($D(DIRUT))!($D(DIROUT)) X="^"
  1. Q X
  1. COH ; Continue Help
  1. I $L($G(LEXX))>0 D
  1. . W !," Enter To"
  1. . W !," 'Yes' continue searching for """,LEXX,"""."
  1. . W !," 'No' refine the search (further specify)"
  1. . W !," '^' discontinue the search and exit"
  1. I '$L($G(LEXX))>0 D
  1. . W !," Enter To"
  1. . W !," 'Yes' continue the search"
  1. . W !," 'No' refine the search (further specify)"
  1. . W !," '^' discontinue the search and exit"
  1. Q
  1. DICW(X) ; DIC Write
  1. N LEXSIEN,LEXSRC,LEXNOM
  1. S LEXSIEN=+($G(Y)),LEXSRC=$P($G(^LEX(757.02,+LEXSIEN,0)),"^",3),LEXNOM=$P($G(^LEX(757.03,+LEXSRC,0)),"^",2)
  1. Q:'$L(LEXNOM) "" S X=" ("_LEXNOM_")"
  1. Q X
  1. DICS(X) ; DIC Screen
  1. N LEXSIEN S LEXSIEN=+($G(X)) Q:$$PREOK(LEXSIEN)'>0 0 Q:$$SABOK(LEXSIEN)'>0 0
  1. Q 1
  1. PREOK(X) ; Preferred Term OK
  1. N LEXSIEN,LEXPRE S LEXSIEN=+($G(X)),LEXPRE=+($P($G(^LEX(757.02,+LEXSIEN,0)),"^",5)) Q:+LEXPRE'>0 0
  1. Q 1
  1. SABOK(X) ; Source OK
  1. N LEXSIEN,LEXSBS,LEXSRC S LEXSIEN=+($G(X)),LEXSRC=+($P($G(^LEX(757.02,+LEXSIEN,0)),"^",3)),LEXSAB=$P($G(^LEX(757.03,+LEXSRC,0)),"^",1) Q:'$L(LEXSAB) 0
  1. S LEXSBS="^ICD^10D^ICP^10P^CPT^CPC^BIR^DS4^SCC^SCT^" Q:LEXSBS'[("^"_LEXSAB_"^") 0
  1. Q 1
  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