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

LEX10DLS.m

Go to the documentation of this file.
  1. LEX10DLS ;ISL/KER - ICD-10 Diagnosis Lookup Selection ;05/23/2017
  1. ;;2.0;LEXICON UTILITY;**80,103**;Sep 23, 1996;Build 2
  1. ;
  1. ; Global Variables
  1. ; None
  1. ;
  1. ; External References
  1. ; ^DIR ICR 10026
  1. ; $$UP^XLFSTR ICR 10104
  1. ;
  1. ; Local Variables NEWed or KILLed in LEX10DL
  1. ; DIROUT,DTOUT,DUOUT
  1. ;
  1. SEL(LEX,X) ; Select from List
  1. ;
  1. ; Input
  1. ;
  1. ; X Length of list to display (default 5)
  1. ; .LEX Local array passed by reference
  1. ;
  1. ; LEX() Input Array from ICDSRCH^LEX10CS
  1. ;
  1. ; LEX(0)=# found ^ Pruning Indicator
  1. ; LEX(1,0)=Code ^ Code IEN ^ date
  1. ; LEX(1,"IDL")=ICD-9/10 Description, Long
  1. ; LEX(1,"IDL",1)=ICD-9/10 IEN ^ date
  1. ; LEX(1,"IDS")=ICD-9/10 Description, Short
  1. ; LEX(1,"IDS",1)=ICD-9/10 IEN ^ date
  1. ; LEX(1,"LEX")=Lexicon Description
  1. ; LEX(1,"LEX",1)=Expression IEN ^ date
  1. ; LEX(1,"SYN",1)=Synonym #1
  1. ; LEX(1,"SYN",m)=Synonym #m
  1. ; ...
  1. ;
  1. ; Output
  1. ;
  1. ; $$SEL Two Piece "^" delimited string same as
  1. ; Fileman's Y output variable
  1. ;
  1. ; 1 Lexicon IEN
  1. ; 2 Lexicon Term
  1. ;
  1. ; LEX Local array passed by reference
  1. ;
  1. ; LEX(0)=Code ^ Code IEN ^ date
  1. ; LEX("IDL")=ICD-9/10 Description, Long
  1. ; LEX("IDL",1)=ICD-9/10 IEN ^ date
  1. ; LEX("IDS")=ICD-9/10 Description, Short
  1. ; LEX("IDS",1)=ICD-9/10 IEN ^ date
  1. ; LEX("LEX")=Lexicon Description
  1. ; LEX("LEX",1)=Expression IEN ^ date
  1. ;
  1. ; or ^ on error
  1. ; or -1 for non-selection
  1. ;
  1. S X=+($G(X)) S:X'>0 X=5 S X=$$ASK(.LEX,X)
  1. Q X
  1. ASK(LEX,X) ; Ask for Selection
  1. N LEXIT,LEXL,LEXTOT S LEXL=+($G(X)) S:LEXL'>0 LEXL=5
  1. S LEXIT=0,LEXTOT=$O(LEX(" "),-1) Q:+LEXTOT'>0 "^"
  1. K X S:+LEXTOT=1 X=$$ONE(LEXL,.LEX) S:+LEXTOT>1 X=$$MUL(.LEX,LEXL)
  1. S:'$D(DTOUT)&('$D(DUOUT))&('$D(DIROUT))&(+($G(X))'>0) X=-1
  1. Q X
  1. ONE(X,LEX) ; One Entry Found
  1. Q:+($G(LEXIT))>0 "^^" N DIR,LEXC,LEXEX,LEXFI,LEXIT,LEXSO,LEXNC
  1. N LEXSP,LEXTX,LEXC,Y S LEXFI=$O(LEX(0)) Q:+LEXFI'>0 "^" S LEXSP=$J(" ",25)
  1. S LEXSO=$P(LEX(1,0),"^",1),LEXNC=$P(LEX(1,0),"^",3)
  1. S:+LEXNC>0 LEXNC=" ("_LEXNC_")" S LEXEX=$G(LEX(1,"MENU"))
  1. S LEXC=$S($D(LEX(1,"CAT")):"-",1:"")
  1. S LEXTX(1)=LEXSO_LEXC_$J(" ",(9-$L(LEXSO)))_" "_LEXEX_LEXNC
  1. D PR^LEXU(.LEXTX,64) S DIR("A",1)=" One match found",DIR("A",2)=" "
  1. S DIR("A",3)=" "_$G(LEXTX(1)),LEXC=3 I $L($G(LEXTX(2))) D
  1. . S LEXC=LEXC+1,DIR("A",LEXC)=LEXSP_$G(LEXTX(2))
  1. S LEXC=LEXC+1,DIR("A",LEXC)=" ",LEXC=LEXC+1
  1. S DIR("A")=" OK? (Yes/No) ",DIR("B")="Yes",DIR(0)="YAO" W !
  1. D ^DIR Q:'$D(DTOUT)&('$D(DUOUT))&('$D(DIROUT))&(+($G(Y))'>0) -1
  1. S:X["^^"!($D(DTOUT)) LEXIT=1
  1. I X["^^"!(+($G(LEXIT))>0) K LEX Q "^^"
  1. S X=$S(+Y>0:$$X(1,.LEX),1:-1)
  1. Q X
  1. MUL(LEX,Y) ; Multiple Entries Found
  1. Q:+($G(LEXIT))>0 "^^" N LEXE,LEXL,LEXMAX,LEXSS,LEXX,X
  1. S (LEXMAX,LEXSS,LEXIT)=0,LEXL=+($G(Y)),U="^" S:+($G(LEXL))'>0 LEXL=5
  1. S LEXX=$O(LEX(" "),-1),LEXSS=0
  1. G:+LEXX=0 MULQ W ! W:+LEXX>1 !," ",LEXX," matches found"
  1. F LEXE=1:1:LEXX Q:((LEXSS>0)&(LEXSS<(LEXE+1))) Q:LEXIT D Q:LEXIT
  1. . W:LEXE#LEXL=1 ! D MULW
  1. . S LEXMAX=LEXE W:LEXE#LEXL=0 !
  1. . S:LEXE#LEXL=0 LEXSS=$$MULS(LEXMAX,LEXE,.LEX) S:LEXSS["^" LEXIT=1
  1. I LEXE#LEXL'=0,+LEXSS<=0 D
  1. . W ! S LEXSS=$$MULS(LEXMAX,LEXE,.LEX) S:LEXSS["^" LEXIT=1
  1. G MULQ
  1. Q X
  1. MULW ; Write Multiple
  1. N LEXEX,LEXI,LEXSO,LEXNC,LEXT,LEXTX S LEXSO=$P(LEX(+LEXE,0),"^",1)
  1. S LEXNC=$P(LEX(+LEXE,0),"^",3) S:+LEXNC>0 LEXNC=" ("_LEXNC_")"
  1. S LEXEX=$G(LEX(+LEXE,"MENU")),LEXTX(1)=LEXSO
  1. S LEXTX(1)=LEXTX(1)_$S($D(LEX(+LEXE,"CAT")):"-",1:" ")_$J(" ",(9-$L(LEXSO)))_" "_LEXEX_LEXNC
  1. D PR^LEXU(.LEXTX,60) W !,$J(LEXE,5),". ",$G(LEXTX(1))
  1. F LEXI=2:1:5 S LEXT=$G(LEXTX(LEXI)) W:$L(LEXT) !,$J(" ",19),LEXT
  1. Q
  1. MULS(X,Y,LEX) ; Select from Multiple Entries
  1. N DIR,DIRB,LEXFI,LEXHLP,LEXLAST,LEXMAX,LEXS
  1. Q:+($G(LEXIT))>0 "^^" S LEXMAX=+($G(X)),LEXLAST=+($G(Y))
  1. Q:LEXMAX=0 -1 S LEXFI=$O(LEX(0)) Q:+LEXFI'>0 -1
  1. I +($O(LEX(+LEXLAST)))>0 D
  1. . S DIR("A")=" Press <RETURN> for more, ""^"" to exit, or Select 1-"
  1. . S DIR("A")=DIR("A")_LEXMAX_": "
  1. I +($O(LEX(+LEXLAST)))'>0 D
  1. . S DIR("A")=" Select 1-"_LEXMAX_": "
  1. S LEXHLP=" Answer must be from 1 to "
  1. S LEXHLP=LEXHLP_LEXMAX_", or <Return> to continue"
  1. S DIR("PRE")="S:X[""?"" X=""??"""
  1. S (DIR("?"),DIR("??"))="^D MULSH^LEX10DLS"
  1. S DIR(0)="NAO^1:"_LEXMAX_":0" D ^DIR
  1. Q:'$D(DTOUT)&('$D(DUOUT))&('$D(DIROUT))&(+($G(Y))'>0) -1
  1. S:X["^^"!($D(DTOUT)) LEXIT=1,X="^^" I X["^^"!(+($G(LEXIT))>0) Q "^^"
  1. K DIR Q:$D(DTOUT)!(X[U) "^^"
  1. Q $S(+Y>0:+Y,1:"-1")
  1. MULSH ; Select from Multiple Entries Help
  1. I $L($G(LEXHLP)) W !,$G(LEXHLP) Q
  1. Q
  1. MULQ ; Quit Multiple
  1. I +LEXSS'>0,$G(LEXSS)="^" Q "^"
  1. S X=-1 S:+($G(LEXIT))'>0 X=$$X(+LEXSS,.LEX)
  1. Q X
  1. X(X,LEX) ; Set X and Outpot Array
  1. N LEXEX,LEXFI,LEXIEN,LEXN,LEXNC,LEXNN,LEXRN,LEXS,LEXSO
  1. S LEXS=+($G(X)) S LEXFI=$O(LEX(0))
  1. S LEXSO=$P($G(LEX(LEXS,0)),"^",1),LEXEX=$G(LEX(LEXS,"MENU"))
  1. S LEXIEN=$S($D(LEX(LEXS,"CAT")):"99:CAT;"_$P($G(LEX(LEXS,0)),"^"),1:$P($G(LEX(LEXS,"LEX",1)),"^")_";"_$P($G(LEX(LEXS,0)),"^")) Q:'$L(LEXSO) "^"
  1. Q:'$L(LEXEX) "^" Q:+LEXIEN'>0 "^" S X=LEXIEN_"^"_LEXEX
  1. S LEXNN="LEX("_+LEXS_")",LEXNC="LEX("_+LEXS_","
  1. F S LEXNN=$Q(@LEXNN) Q:'$L(LEXNN)!(LEXNN'[LEXNC) D
  1. . S LEXRN="LEXN("_$P(LEXNN,"(",2,4000) S @LEXRN=@LEXNN
  1. K LEX S LEXNN="LEXN("_+LEXS_")",LEXNC="LEXN("_+LEXS_","
  1. F S LEXNN=$Q(@LEXNN) Q:'$L(LEXNN)!(LEXNN'[LEXNC) D
  1. . S LEXRN="LEX("_$P(LEXNN,"(",2,4000),@LEXRN=@LEXNN
  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^LEX10DLS"
  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. ;
  1. ; Miscellaneous
  1. CL ; Clear
  1. K LEXIT
  1. Q