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

LEX10CX4.m

Go to the documentation of this file.
  1. LEX10CX4 ;ISL/KER - ICD-10 Cross-Over - Ask ;04/21/2014
  1. ;;2.0;LEXICON UTILITY;**80**;Sep 23, 1996;Build 10
  1. ;
  1. ; Global Variables
  1. ; ^UTILITY($J ICR 10011
  1. ;
  1. ; External References
  1. ; ^DIC ICR 10006
  1. ; ^DIR ICR 10026
  1. ; ^DIWP ICR 10011
  1. ; $$UP^XLFSTR ICR 10104
  1. ;
  1. ; Local Variables NEWed or KILLed Elsewhere
  1. ; LEX0FND,LEX0REV,LEX0SEL NEWed in LEX10CX
  1. ;
  1. ASK(LEXA,LEXB) ; Ask for Selection
  1. N LEXSRCO,LEXSRTX,LEXSRNM,LEXANS,LEXFND,LEXI,LEXIND,LEXLEN,LEXT
  1. S Y=-1,LEXFND=+($G(LEXB(0))) Q:LEXFND'>0 S LEX0FND=1
  1. S LEXSRCO=$G(LEXA("SOURCE","SOE"))
  1. S LEXSRTX=$$UP^XLFSTR($G(LEXA("SOURCE","EXP")))
  1. S LEXSRNM=$G(LEXA("SOURCE","SRC"))
  1. W ! I $L($G(LEXSRTX)),$L($G(LEXSRCO)) D
  1. . W !," ",LEXSRNM," ",LEXSRCO
  1. . N LEXIND,LEXLEN,LEXT,LEXI S LEXIND=18,LEXT(1)=LEXSRTX
  1. . D PAR(.LEXT,50) W ?22," ",$G(LEXT(1))
  1. . S LEXI=1 F S LEXI=$O(LEXT(LEXI)) Q:+LEXI'>0 D
  1. . . N LEXTX2 S LEXTX2=$$TM($G(LEXT(LEXI))) Q:'$L(LEXTX2)
  1. . . W !,?23,LEXTX2
  1. S:+LEXFND=1 LEXANS=$$ONE S:+LEXFND>1 LEXANS=$$MUL
  1. I LEXANS>0 D S:+($G(X))'>0 X="" S:+($G(Y))'>0 Y=-1 Q
  1. . S X="",Y=-1 D X(.LEXA),Y(LEXANS,.LEXB)
  1. . Q:+($G(X))>0&(+($G(Y))>0) S X="",Y=-1
  1. I LEXANS'>0 K X,Y,LEXB S X="",Y=-1
  1. Q
  1. ONE(X) ; One Entry Found - Needs LEXB
  1. N LEXIEN,LEXLN,LEXSO,LEXTEXT N DIR
  1. N LEXTXT,Y S LEXTEXT=$G(LEXB(1)),LEXIEN=+LEXTEXT
  1. S LEXSO=$P(LEXTEXT,U,2),LEXTEXT=$P(LEXTEXT,U,3)
  1. S LEXTXT(1)=LEXSO_" "_LEXTEXT D PAR(.LEXTXT,64)
  1. S DIR("A",1)=" One ICD-10 suggestion found",DIR("A",2)=" "
  1. S DIR("A",3)=" "_$G(LEXTXT(1)),LEXLN=3
  1. I $L($G(LEXTXT(2))) S LEXLN=LEXLN+1 D
  1. . S DIR("A",LEXLN)=" "_$G(LEXTXT(2))
  1. S LEXLN=LEXLN+1,DIR("A",LEXLN)=" ",LEXLN=LEXLN+1
  1. S DIR("A")=" OK? ",DIR("B")="Yes",DIR(0)="YAO" W !
  1. D ^DIR S LEX0REV=1 S:+Y>0 LEX0SEL=1 Q:+Y>0 1
  1. Q:X["^^"!($D(DTOUT)) "^^" Q:X["^" "^"
  1. Q -1
  1. MUL(X) ; Multiple Entries Found - Needs LEXB
  1. N LEXENT,LEXIEN,LEXIT,LEXITEM,LEXLEN,LEXMAX,LEXMAT,LEXN,LEXSEL
  1. N LEXSO,LEXTEXT,LEXTOT,Y S LEXLEN=+($G(LEXN))
  1. S:+LEXLEN'>4 LEXLEN=5 N LEXN
  1. S (LEXMAX,LEXENT,LEXSEL,LEXIT)=0
  1. S U="^",LEXTOT=$G(LEXB(0))
  1. S LEXSEL=0 G:+LEXTOT=0 MULQ
  1. S LEXMAT=LEXTOT_" ICD-10 suggestion"_$S(+LEXTOT>1:"s",1:"")_" found"
  1. W:+LEXTOT>0 !!," ",LEXMAT
  1. F LEXENT=1:1:LEXTOT Q:LEXIT D Q:LEXIT
  1. . I ((LEXSEL>0)&(LEXSEL<LEXENT+1)) S LEXIT=1 Q
  1. . N LEXITEM,LEXIEN,LEXTEXT,LEXSO
  1. . S LEXITEM=$G(LEXB(LEXENT))
  1. . S LEXIEN=+LEXITEM,LEXSO=$P(LEXITEM,U,3)
  1. . S LEXTEXT=$P(LEXITEM,U,2) Q:+LEXIEN'>0
  1. . Q:'$L(LEXSO) Q:'$L(LEXTEXT)
  1. . S LEXMAX=LEXENT W:LEXENT#LEXLEN=1 ! D MULW
  1. . S:LEXMAX=LEXTOT LEX0REV=1
  1. . W:LEXENT#LEXLEN=0 !
  1. . S:LEXENT#LEXLEN=0 LEXSEL=$$MULS(LEXMAX,LEXENT)
  1. . S:LEXSEL["^" LEXIT=1
  1. I LEXENT#LEXLEN'=0,+LEXSEL=0 D
  1. . W ! S LEXSEL=$$MULS(LEXMAX,LEXENT)
  1. . S:LEXSEL["^" LEXIT=1
  1. G MULQ
  1. Q X
  1. MULW ; Write Multiple - Needs LEXENT,LEXIEN,LEXSO,LEXTXT
  1. Q:+($G(LEXENT))'>0 Q:+($G(LEXIEN))'>0
  1. Q:'$L($G(LEXTEXT)) Q:'$L($G(LEXSO))
  1. N LEXI,LEXIND,LEXTAB,LEXTXT,LEXTX2
  1. S LEXTAB=8,LEXIND=18
  1. W !,$J(LEXENT,5),".",?LEXTAB,LEXSO
  1. S LEXTXT(1)=LEXTEXT D PAR(.LEXTXT,54)
  1. W ?LEXIND,$G(LEXTXT(1))
  1. S LEXI=1 F S LEXI=$O(LEXTXT(LEXI)) Q:+LEXI'>0 D
  1. . N LEXTX2 S LEXTX2=$$TM($G(LEXTXT(LEXI))) Q:'$L(LEXTX2)
  1. . W !,?LEXIND,LEXTX2
  1. Q
  1. MULS(X,Y) ; Select Multiple - Needs LEXB, Uses LEXIT,LEXTOT
  1. N DIR,DIRB,LEXHLP,LEXLAST,LEXMAX
  1. N LEXNEXT,LEXRAN,LEXS,LEXENT,Y Q:+($G(LEXIT))>0 "^^"
  1. S LEXS=$G(X),LEXENT=$G(Y) N X
  1. S LEXMAX=+($G(LEXS)),LEXLAST=+($G(LEXENT))
  1. Q:LEXMAX=0 -1 S LEXRAN=" Select 1-"_LEXMAX_": "
  1. S LEXNEXT=$O(LEXB(+LEXLAST)) I +LEXNEXT>0 D
  1. . S DIR("A")=" Press <RETURN> for more, "
  1. . S DIR("A")=DIR("A")_"'^' to exit, or"_LEXRAN
  1. S:+LEXNEXT'>0 DIR("A")=LEXRAN
  1. S LEXHLP=" Answer must be from 1 to "_LEXMAX
  1. S LEXHLP=LEXHLP_", or <Return> to continue"
  1. S DIR("PRE")="S:X[""?"" X=""??"""
  1. S (DIR("?"),DIR("??"))="^D MULSH^ICDEXLK2"
  1. S DIR(0)="NAO^1:"_LEXMAX_":0" D ^DIR
  1. S:X["^"&(LEXENT=+($G(LEXTOT))) (X,Y)="^^^"
  1. S:X["^^"!($D(DTOUT)) LEXIT=1,X="^^"
  1. I X["^^"!(+($G(LEXIT))>0) Q "^^"
  1. S LEXS=+Y S:$D(DTOUT)!(X[U) LEXS=U
  1. K DIR N LEXIT,LEXTOT
  1. S:+LEXS>0&($D(LEXB(+LEXS))) LEX0SEL=1
  1. Q LEXS
  1. MULSH ; Select Multiple Help
  1. I $L($G(LEXHLP)) W !,$G(LEXHLP) Q
  1. Q
  1. MULQ ; Quit Multiple
  1. Q:+LEXSEL'>0 -1 S X=+LEXSEL
  1. Q X
  1. ;
  1. ; Miscellaneous
  1. PAR(LEXC,LEXL) ; Parse Array
  1. N %,DIW,DIWF,DIWI,DIWL,DIWR,DIWT,DIWTC,DIWX,DN,LEXIEN,I,X,Z
  1. K ^UTILITY($J,"W") Q:'$D(LEXC) S LEXL=+($G(LEXL))
  1. S:+LEXL'>0 LEXL=79 S DIWL=1,DIWF="C"_+LEXL S LEXIEN=0
  1. F S LEXIEN=$O(LEXC(LEXIEN)) Q:+LEXIEN=0 D
  1. . S X=$G(LEXC(LEXIEN)) D ^DIWP
  1. K LEXC S LEXIEN=0
  1. F S LEXIEN=$O(^UTILITY($J,"W",1,LEXIEN)) Q:+LEXIEN=0 D
  1. . S LEXC(LEXIEN)=$$TM($G(^UTILITY($J,"W",1,LEXIEN,0))," ")
  1. K ^UTILITY($J,"W")
  1. Q
  1. TM(X,Y) ; Trim Y
  1. 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
  1. X(LEXA) ; Set X
  1. N LEXEXP,LEXCOD,LEXNOM,LEXIEN K X S X=""
  1. S LEXEXP=$G(LEXA("SOURCE","EXP")) Q:'$L(LEXEXP)
  1. S LEXCOD=$G(LEXA("SOURCE","SOE")) Q:'$L(LEXCOD)
  1. S LEXNOM=$G(LEXA("SOURCE","SRC")) Q:'$L(LEXNOM)
  1. S LEXIEN=+($G(LEXA("SOURCE","Y"))) Q:'$L(LEXIEN)
  1. Q:+LEXIEN'>0 S X=LEXIEN_"^"_LEXEXP_"^"_LEXCOD_"^"_LEXNOM
  1. Q
  1. Y(LEX,LEXB) ; Set Y
  1. N LEXEXP,LEXCOD,LEXNOM,LEXIEN,LEXDAT
  1. N LEXDAT,LEXEIEN,LEXEX,LEXICDD,LEXSO,LEXSTA,LEXTD
  1. K Y S Y=-1 S LEX=+($G(LEX)),LEXDAT=$G(LEXB(+LEX))
  1. S LEXEXP=$P(LEXDAT,"^",2) Q:'$L(LEXEXP)
  1. S LEXCOD=$P(LEXDAT,"^",3) Q:'$L(LEXCOD)
  1. S LEXNOM="ICD-10-CM"
  1. S LEXIEN=+($P(LEXDAT,"^",1)) Q:'$L(LEXIEN)
  1. Q:+LEXIEN'>0 S Y=LEXIEN_"^"_LEXEXP_"^"_LEXCOD_"^"_LEXNOM
  1. Q
  1. SAB(X) ; Select Coding System
  1. N DIC,DIROUT,DIRUT,DTOUT,DUOUT,LEXB,Y
  1. S DIC="^LEX(757.03,",DIC(0)="AEQM"
  1. S DIC("A")=" Select a Coding System: "
  1. S LEXB=$P($G(^LEX(757.03,1,0)),"^",2) S:$L(LEXB) DIC("B")=LEXB
  1. S DIC("W")="N LEX1,LEX2 S LEX1=$P($G(^LEX(757.03,+Y,0)),U,2),"
  1. S DIC("W")=DIC("W")_"LEX2=$P($G(^LEX(757.03,+Y,0)),U,3) "
  1. S DIC("W")=DIC("W")_"S:$L(LEX2,"","")>2 LEX2=$P(LEX2,"","",1,"
  1. S DIC("W")=DIC("W")_"($L(LEX2,"","")-1)) W "" "",LEX1"
  1. S DIC("W")=DIC("W")_"_$J("" "",(12-$L(LEX1)))_"" ""_LEX2"
  1. S DIC("S")="I $E($P($G(^LEX(757.03,+Y,0)),""^"",1),1,3)'=""10D"""
  1. S DIC("W")="W "" "",$P($G(^LEX(757.03,+Y,0)),U,2)"
  1. K X D ^DIC Q:X["^"!($D(DTOUT))!($D(DUOUT)) "^"
  1. S LEXB=$E($P($G(^LEX(757.03,+Y,0)),"^",1),1,3) Q:$L(LEXB)'=3 "^"
  1. Q:'$D(^LEX(757.03,"ASAB",LEXB)) "^" S X=LEXB
  1. Q X