LEXQL2 ;ISL/KER - Query - Lookup Code (Build List) ;05/23/2017
;;2.0;LEXICON UTILITY;**62,80,103**;Sep 23, 1996;Build 2
;
; Global Variables
; ^DIC(81.3, ICR 4492
; ^ICD0("BA" ICR 4486
; ^ICD9("BA" ICR 4485
; ^ICPT( ICR 4489
; ^ICPT("BA" ICR 4489
; ^TMP("LEXQL") SACC 2.3.2.5.1
;
; External References
; $$CODEABA^ICDEX ICR 5747
; $$ROOT^ICDEX ICR 5747
; $$DT^XLFDT ICR 10103
; $$FMTE^XLFDT ICR 10103
; $$UP^XLFSTR ICR 10104
;
ADD(X) ; Add to List
N LEXIN,LEXINU,LEXO,LEXCO,LEXCT,LEXCS,LEXTO,LEXTT,LEXOC,LEXCT,LEXTY,LEXTD,LEXTMP
N LEXKEY,LEXLEN,LEXRT,LEXSO,LEXTKNS S LEXTD=$$DT^XLFDT,U="^"
S LEXIN=$G(X),LEXINU=$$UP^XLFSTR($$TM($G(LEXIN))) K LEXTKNS S LEXTTK=$$TOKN(LEXINU)
S LEXLEN=$O(LEXTKNS(" "),-1)
F LEXTMP="~","!","@","#","$","%","&","*","(",")","_","+","`","-","="," " S LEXSO=$P(LEXIN,LEXTMP,1)
F LEXTMP="[","]","{","}",";","'","\",":","|",",","/","?","<",">" S LEXSO=$P(LEXSO,LEXTMP,1)
S:+LEXLEN'>0 LEXLEN=$L(LEXSO)
S LEXKEY=$O(LEXTKNS(LEXLEN,""),-1) S:'$L(LEXKEY) LEXKEY=LEXSO S LEXKEY=$TR(LEXKEY,"#","") Q:'$L(LEXKEY)
K LEXTKNS(+LEXLEN,LEXKEY) S:+LEXTTK>0 LEXTTK=LEXTTK-1
S LEXTT=LEXKEY
S LEXTO=$E(LEXKEY,1,($L(LEXKEY)-1))_$C(($A($E(LEXKEY,$L(LEXKEY)))-1))_"~"
S LEXCT=$TR(LEXSO,"#","")
S LEXCO=$E(LEXSO,1,($L(LEXSO)-1))_$C(($A($E(LEXSO,$L(LEXSO)))-1))_"~"
; ICD-10 DX
S LEXRT=$$ROOT^ICDEX(80),LEXCS=30
I ($L(LEXTT)>2&$$OK(LEXTT,LEXRT,"AD",LEXCS))!($L(LEXCT)>2&($$OK(LEXCT,LEXRT,"ABA",LEXCS))) D
. S LEXTY=1 D ICD^LEXQL3($G(LEXINU),LEXCS)
; ICD-10 PR
S LEXRT=$$ROOT^ICDEX(80.1),LEXCS=31
I ($L(LEXTT)>2&$$OK(LEXTT,LEXRT,"AD",LEXCS))!($L(LEXCT)>2&($$OK(LEXCT,LEXRT,"ABA",LEXCS))) D
. S LEXTY=2 D ICD^LEXQL3($G(LEXINU),LEXCS)
; ICD-9 DX
S LEXRT=$$ROOT^ICDEX(80),LEXCS=1
I ($L(LEXTT)>2&$$OK(LEXTT,LEXRT,"AD",LEXCS))!($L(LEXCT)>2&($$OK(LEXCT,LEXRT,"ABA",LEXCS))) D
. S LEXTY=3 D ICD^LEXQL3($G(LEXINU),LEXCS)
; ICD-9 PR
S LEXRT=$$ROOT^ICDEX(80.1),LEXCS=2
I ($L(LEXTT)>2&$$OK(LEXTT,LEXRT,"AD",LEXCS))!($L(LEXCT)>2&($$OK(LEXCT,LEXRT,"ABA",LEXCS))) D
. S LEXTY=4 D ICD^LEXQL3($G(LEXINU),LEXCS)
; CPT/HCPCS
I ($L(LEXTT)>2&$$OK(LEXTT,"^ICPT(","C"))!($L(LEXCT)>2&($$OK(LEXCT,"^ICPT(","BA"))) D
. S LEXTY=5 D CP^LEXQL4
; CPT MOD
I ($L(LEXCT)>0&($$OK(LEXCT,"^DIC(81.3,","BA"))) D
. S LEXTY=6 D CM^LEXQL4
; Re-Order List
N LEXCT,LEXO,LEXT1,LEXT2,LEX S LEXO="" F S LEXO=$O(^TMP("LEXQL",$J,"ADDLIST",LEXO)) Q:'$L(LEXO) D
. K LEX N LEXT1,LEXT2 S LEXT1=$$TM($G(^TMP("LEXQL",$J,"ADDLIST",LEXO)))
. S LEXT2=$$TM($G(^TMP("LEXQL",$J,"ADDLIST",LEXO,2))) Q:'$L(LEXT2)
. I $L(LEXT2) K LEX S LEX(1)=LEXT2 D PR^LEXU(.LEX,70) Q:'$L($G(LEX(1)))
. S LEXCT=+($G(LEXCT))+1 K ^TMP("LEXQL",$J,+LEXCT)
. S ^TMP("LEXQL",$J,+LEXCT)=$G(LEX(1)),^TMP("LEXQL",$J,0)=+LEXCT
. S:$L($G(LEX(2))) ^TMP("LEXQL",$J,+LEXCT,2)=$G(LEX(2))
K ^TMP("LEXQL",$J,"ADDLIST")
Q
;
; Miscellaneous
VSO(X) ; Verify Input
N LEX,LEXIO,LEXIC,LEXUC,LEXUO S LEX=$G(X) Q:'$L(LEX) "" Q:$L(LEX)'>1 $$UP^XLFSTR(LEX)
S LEXIC=$G(LEX),LEXIO=$E(LEX,1,($L(LEX)-1))_$C(($A($E(LEX,$L(LEX)))-1))_"~ "
S LEXUC=$$UP^XLFSTR(LEXIC),LEXUO=$$UP^XLFSTR(LEXIO)
; 80 ICD-9/10
I $E($O(^ICD9("BA",LEXIO)),1,$L(LEXIC))=LEXIC Q LEXIC
I $E($O(^ICD9("BA",LEXUO)),1,$L(LEXUC))=LEXUC Q LEXUC
; 80.1 ICD-9.10
I $E($O(^ICD0("BA",LEXIO)),1,$L(LEXIC))=LEXIC Q LEXIC
I $E($O(^ICD0("BA",LEXUO)),1,$L(LEXUC))=LEXUC Q LEXUC
; 81 CPT
I $E($O(^ICPT("BA",LEXIO)),1,$L(LEXIC))=LEXIC Q LEXIC
I $E($O(^ICPT("BA",LEXUO)),1,$L(LEXUC))=LEXUC Q LEXUC
; 81.3 CPT Modifier
I $E($O(^DIC(81.3,"BA",LEXIO)),1,$L(LEXIC))=LEXIC Q LEXIC
I $E($O(^DIC(81.3,"BA",LEXUO)),1,$L(LEXUC))=LEXUC Q LEXUC
Q LEX
SD(X) ; Short Date
Q $TR($$FMTE^XLFDT(+($G(X)),"5DZ"),"@"," ")
FT(X,Y,LEX) ; Format Text First
N LEXT,LEXC,LEXD,LEXS S LEXC=$G(X),LEXD=$G(Y),LEXS=$G(LEX) S LEXC=$G(LEXC) Q:'$L(LEXC) ""
S LEXT=$P($$STY(LEXC),U,2) Q:'$L(LEXT) S LEXD=$G(LEXD) Q:'$L(LEXD) ""
S LEXS=$G(LEXS),LEXT=$G(LEXT) S:$L(LEXD)&($L(LEXS)) LEXD=LEXD_" ("_LEXS_")" N LEXO
S LEXO=LEXC S LEXO=LEXO_$J(" ",(9-$L(LEXO)))_$E(LEXD,1,54)
S LEXO=LEXO_$J(" ",(63-$L(LEXO)))_LEXT S X=LEXO
Q X
FC(X,Y,LEX) ; Format Code First
N LEXO,LEXT,LEXC,LEXD,LEXS S LEXC=$G(X),LEXD=$G(Y),LEXS=$G(LEX) Q:'$L(LEXC) ""
S LEXT=$P($$STY(LEXC),"^",2) Q:'$L(LEXT) "" Q:'$L(LEXD) ""
S LEXS=$G(LEX),LEXO=LEXT_" "_LEXC_" ",LEXO=LEXO_$J(" ",(19-$L(LEXO))),LEXO=LEXO_" "_LEXD
S:$L(LEXS)&(LEXO'[LEXS) LEXO=$E(LEXO,1,56)_" ("_LEXS_")" S X=LEXO
Q X
STY(X) ; Short Type
N LEXSO S LEXSO=$G(X) Q:$L(LEXSO)'>1 ""
Q:$$CODEABA^ICDEX(LEXSO,80,30)>0 "1^ICD-10 Dx"
Q:$$CODEABA^ICDEX(LEXSO,80.1,31)>0 "2^ICD-10 Op"
Q:$$CODEABA^ICDEX(LEXSO,80,1)>0 "3^ICD-9 Dx"
Q:$$CODEABA^ICDEX(LEXSO,80.1,2)>0 "4^ICD-9 Op"
Q:$D(^ICPT("BA",(LEXSO_" "))) "5^CPT-4/HCPCS"
Q:$D(^DIC(81.3,"BA",(LEXSO_" "))) "6^CPT Mod"
Q ""
LTY(X) ; Long Type
N LEXSO,LEX S LEXSO=$G(X) Q:$L(LEXSO)'>1 ""
Q:$$CODEABA^ICDEX(LEXSO,80,30)>0 "1^ICD-10 Diagnosis Code"
Q:$$CODEABA^ICDEX(LEXSO,80.1,31)>0 "2^ICD-10 Procedure Code"
Q:$$CODEABA^ICDEX(LEXSO,80,1)>0 "3^ICD-9 Diagnosis Code"
Q:$$CODEABA^ICDEX(LEXSO,80.1,2)>0 "4^ICD-9 Procedure Code"
S LEX=$O(^ICPT("BA",(LEXSO_" "),0)) I LEX>0 D Q:LEX["^" LEX
. N LEXS S LEXS=$P($G(^ICPT(+LEX,0)),"^",6)
. I LEXS="C" S LEX="5^CPT Procedure Code" Q
. I LEXS="H" S LEX="6^HCPCS Procedure Code" Q
. I LEXSO?5N S LEX="5^CPT Procedure Code" Q
. S LEX="6^HCPCS Procedure Code"
Q:$D(^DIC(81.3,"BA",(LEXSO_" "))) "7^CPT Modifier Code"
Q ""
DS(X) ; Trim Dubble Space Character
S X=$G(X) Q:X'[" " X F Q:X'[" " S X=$P(X," ",1)_" "_$P(X," ",2,4000)
Q X
TM(X,Y) ; Trim Character Y - Default " "
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))
F Q:$E(X,$L(X))'=Y S X=$E(X,1,($L(X)-1))
Q X
OK(X,Y,LEX,LEXS) ; User Input is Ok
N LEXIX,LEXX,LEXO,LEXCT,LEXNX,LEXROOT
S (LEXCT,LEXX)=$TR($G(X),"#","") Q:$L(LEXX)'>0 0 S LEXROOT=$G(Y),LEXIX=$G(LEX),LEXS=+($G(LEXS))
Q:'$L(LEXROOT) 0 Q:"^D^AD^BA^ABA^C^"'[("^"_LEXIX_"^") 0
S LEXO=$E(LEXX,1,($L(LEXX)-1))_$C(($A($E(LEXX,$L(LEXX)))-1))_"~"
S:+LEXS'>0 LEXNX=$O(@(LEXROOT_""""_LEXIX_""","""_LEXO_""")"))
S:+LEXS>0 LEXNX=$O(@(LEXROOT_""""_LEXIX_""","_+LEXS_","""_LEXO_""")"))
Q:$E(LEXNX,1,$L(LEXCT))=LEXCT 1
Q 0
TOKN(X) ; Parse Tolkens
N LEXX,LEXBEG,LEXEND,LEXCHR,LEXTTK,LEXTKN,LEXNOT K LEXTKNS S LEXX=$G(X),LEXBEG=1,LEXTTK=0
S LEXNOT="^AND^THE^THEN^FOR^FROM^OTHER^THAN^WITH^THEIR^SOME^THIS^" F LEXEND=1:1:$L(LEXX)+1 D
. S LEXCHR=$E(LEXX,LEXEND) I "~!@#$%&*()_+`-=[]{};'\:|,./?<> """[LEXCHR D
. . S LEXTKN=$E(LEXX,LEXBEG,LEXEND-1),LEXBEG=LEXEND+1 I $L(LEXTKN)>2,$L(LEXTKN)<31,LEXNOT'[LEXTKN D
. . . S:'$D(LEXTKNS($L(LEXTKN),LEXTKN)) LEXTTK=+($G(LEXTTK))+1
. . . S LEXTKNS($L(LEXTKN),LEXTKN)=""
S X=+($G(LEXTTK))
Q X
SHO ; Show TMP
N LEXNN,LEXNC S LEXNN="^TMP(""LEXQL"","_$J_")",LEXNC="^TMP(""LEXQL"","_$J_","
W ! F S LEXNN=$Q(@LEXNN) Q:'$L(LEXNN)!(LEXNN'[LEXNC) W !,LEXNN,"=",@LEXNN
W !
Q
--- Routine Detail --- with STRUCTURED ROUTINE LISTING ---[H[J[2J[HLEXQL2 7179 printed Dec 13, 2024@02:08:56 Page 2
LEXQL2 ;ISL/KER - Query - Lookup Code (Build List) ;05/23/2017
+1 ;;2.0;LEXICON UTILITY;**62,80,103**;Sep 23, 1996;Build 2
+2 ;
+3 ; Global Variables
+4 ; ^DIC(81.3, ICR 4492
+5 ; ^ICD0("BA" ICR 4486
+6 ; ^ICD9("BA" ICR 4485
+7 ; ^ICPT( ICR 4489
+8 ; ^ICPT("BA" ICR 4489
+9 ; ^TMP("LEXQL") SACC 2.3.2.5.1
+10 ;
+11 ; External References
+12 ; $$CODEABA^ICDEX ICR 5747
+13 ; $$ROOT^ICDEX ICR 5747
+14 ; $$DT^XLFDT ICR 10103
+15 ; $$FMTE^XLFDT ICR 10103
+16 ; $$UP^XLFSTR ICR 10104
+17 ;
ADD(X) ; Add to List
+1 NEW LEXIN,LEXINU,LEXO,LEXCO,LEXCT,LEXCS,LEXTO,LEXTT,LEXOC,LEXCT,LEXTY,LEXTD,LEXTMP
+2 NEW LEXKEY,LEXLEN,LEXRT,LEXSO,LEXTKNS
SET LEXTD=$$DT^XLFDT
SET U="^"
+3 SET LEXIN=$GET(X)
SET LEXINU=$$UP^XLFSTR($$TM($GET(LEXIN)))
KILL LEXTKNS
SET LEXTTK=$$TOKN(LEXINU)
+4 SET LEXLEN=$ORDER(LEXTKNS(" "),-1)
+5 FOR LEXTMP="~","!","@","#","$","%","&","*","(",")","_","+","`","-","="," "
SET LEXSO=$PIECE(LEXIN,LEXTMP,1)
+6 FOR LEXTMP="[","]","{","}",";","'","\",":","|",",","/","?","<",">"
SET LEXSO=$PIECE(LEXSO,LEXTMP,1)
+7 if +LEXLEN'>0
SET LEXLEN=$LENGTH(LEXSO)
+8 SET LEXKEY=$ORDER(LEXTKNS(LEXLEN,""),-1)
if '$LENGTH(LEXKEY)
SET LEXKEY=LEXSO
SET LEXKEY=$TRANSLATE(LEXKEY,"#","")
if '$LENGTH(LEXKEY)
QUIT
+9 KILL LEXTKNS(+LEXLEN,LEXKEY)
if +LEXTTK>0
SET LEXTTK=LEXTTK-1
+10 SET LEXTT=LEXKEY
+11 SET LEXTO=$EXTRACT(LEXKEY,1,($LENGTH(LEXKEY)-1))_$CHAR(($ASCII($EXTRACT(LEXKEY,$LENGTH(LEXKEY)))-1))_"~"
+12 SET LEXCT=$TRANSLATE(LEXSO,"#","")
+13 SET LEXCO=$EXTRACT(LEXSO,1,($LENGTH(LEXSO)-1))_$CHAR(($ASCII($EXTRACT(LEXSO,$LENGTH(LEXSO)))-1))_"~"
+14 ; ICD-10 DX
+15 SET LEXRT=$$ROOT^ICDEX(80)
SET LEXCS=30
+16 IF ($LENGTH(LEXTT)>2&$$OK(LEXTT,LEXRT,"AD",LEXCS))!($LENGTH(LEXCT)>2&($$OK(LEXCT,LEXRT,"ABA",LEXCS)))
Begin DoDot:1
+17 SET LEXTY=1
DO ICD^LEXQL3($GET(LEXINU),LEXCS)
End DoDot:1
+18 ; ICD-10 PR
+19 SET LEXRT=$$ROOT^ICDEX(80.1)
SET LEXCS=31
+20 IF ($LENGTH(LEXTT)>2&$$OK(LEXTT,LEXRT,"AD",LEXCS))!($LENGTH(LEXCT)>2&($$OK(LEXCT,LEXRT,"ABA",LEXCS)))
Begin DoDot:1
+21 SET LEXTY=2
DO ICD^LEXQL3($GET(LEXINU),LEXCS)
End DoDot:1
+22 ; ICD-9 DX
+23 SET LEXRT=$$ROOT^ICDEX(80)
SET LEXCS=1
+24 IF ($LENGTH(LEXTT)>2&$$OK(LEXTT,LEXRT,"AD",LEXCS))!($LENGTH(LEXCT)>2&($$OK(LEXCT,LEXRT,"ABA",LEXCS)))
Begin DoDot:1
+25 SET LEXTY=3
DO ICD^LEXQL3($GET(LEXINU),LEXCS)
End DoDot:1
+26 ; ICD-9 PR
+27 SET LEXRT=$$ROOT^ICDEX(80.1)
SET LEXCS=2
+28 IF ($LENGTH(LEXTT)>2&$$OK(LEXTT,LEXRT,"AD",LEXCS))!($LENGTH(LEXCT)>2&($$OK(LEXCT,LEXRT,"ABA",LEXCS)))
Begin DoDot:1
+29 SET LEXTY=4
DO ICD^LEXQL3($GET(LEXINU),LEXCS)
End DoDot:1
+30 ; CPT/HCPCS
+31 IF ($LENGTH(LEXTT)>2&$$OK(LEXTT,"^ICPT(","C"))!($LENGTH(LEXCT)>2&($$OK(LEXCT,"^ICPT(","BA")))
Begin DoDot:1
+32 SET LEXTY=5
DO CP^LEXQL4
End DoDot:1
+33 ; CPT MOD
+34 IF ($LENGTH(LEXCT)>0&($$OK(LEXCT,"^DIC(81.3,","BA")))
Begin DoDot:1
+35 SET LEXTY=6
DO CM^LEXQL4
End DoDot:1
+36 ; Re-Order List
+37 NEW LEXCT,LEXO,LEXT1,LEXT2,LEX
SET LEXO=""
FOR
SET LEXO=$ORDER(^TMP("LEXQL",$JOB,"ADDLIST",LEXO))
if '$LENGTH(LEXO)
QUIT
Begin DoDot:1
+38 KILL LEX
NEW LEXT1,LEXT2
SET LEXT1=$$TM($GET(^TMP("LEXQL",$JOB,"ADDLIST",LEXO)))
+39 SET LEXT2=$$TM($GET(^TMP("LEXQL",$JOB,"ADDLIST",LEXO,2)))
if '$LENGTH(LEXT2)
QUIT
+40 IF $LENGTH(LEXT2)
KILL LEX
SET LEX(1)=LEXT2
DO PR^LEXU(.LEX,70)
if '$LENGTH($GET(LEX(1)))
QUIT
+41 SET LEXCT=+($GET(LEXCT))+1
KILL ^TMP("LEXQL",$JOB,+LEXCT)
+42 SET ^TMP("LEXQL",$JOB,+LEXCT)=$GET(LEX(1))
SET ^TMP("LEXQL",$JOB,0)=+LEXCT
+43 if $LENGTH($GET(LEX(2)))
SET ^TMP("LEXQL",$JOB,+LEXCT,2)=$GET(LEX(2))
End DoDot:1
+44 KILL ^TMP("LEXQL",$JOB,"ADDLIST")
+45 QUIT
+46 ;
+47 ; Miscellaneous
VSO(X) ; Verify Input
+1 NEW LEX,LEXIO,LEXIC,LEXUC,LEXUO
SET LEX=$GET(X)
if '$LENGTH(LEX)
QUIT ""
if $LENGTH(LEX)'>1
QUIT $$UP^XLFSTR(LEX)
+2 SET LEXIC=$GET(LEX)
SET LEXIO=$EXTRACT(LEX,1,($LENGTH(LEX)-1))_$CHAR(($ASCII($EXTRACT(LEX,$LENGTH(LEX)))-1))_"~ "
+3 SET LEXUC=$$UP^XLFSTR(LEXIC)
SET LEXUO=$$UP^XLFSTR(LEXIO)
+4 ; 80 ICD-9/10
+5 IF $EXTRACT($ORDER(^ICD9("BA",LEXIO)),1,$LENGTH(LEXIC))=LEXIC
QUIT LEXIC
+6 IF $EXTRACT($ORDER(^ICD9("BA",LEXUO)),1,$LENGTH(LEXUC))=LEXUC
QUIT LEXUC
+7 ; 80.1 ICD-9.10
+8 IF $EXTRACT($ORDER(^ICD0("BA",LEXIO)),1,$LENGTH(LEXIC))=LEXIC
QUIT LEXIC
+9 IF $EXTRACT($ORDER(^ICD0("BA",LEXUO)),1,$LENGTH(LEXUC))=LEXUC
QUIT LEXUC
+10 ; 81 CPT
+11 IF $EXTRACT($ORDER(^ICPT("BA",LEXIO)),1,$LENGTH(LEXIC))=LEXIC
QUIT LEXIC
+12 IF $EXTRACT($ORDER(^ICPT("BA",LEXUO)),1,$LENGTH(LEXUC))=LEXUC
QUIT LEXUC
+13 ; 81.3 CPT Modifier
+14 IF $EXTRACT($ORDER(^DIC(81.3,"BA",LEXIO)),1,$LENGTH(LEXIC))=LEXIC
QUIT LEXIC
+15 IF $EXTRACT($ORDER(^DIC(81.3,"BA",LEXUO)),1,$LENGTH(LEXUC))=LEXUC
QUIT LEXUC
+16 QUIT LEX
SD(X) ; Short Date
+1 QUIT $TRANSLATE($$FMTE^XLFDT(+($GET(X)),"5DZ"),"@"," ")
FT(X,Y,LEX) ; Format Text First
+1 NEW LEXT,LEXC,LEXD,LEXS
SET LEXC=$GET(X)
SET LEXD=$GET(Y)
SET LEXS=$GET(LEX)
SET LEXC=$GET(LEXC)
if '$LENGTH(LEXC)
QUIT ""
+2 SET LEXT=$PIECE($$STY(LEXC),U,2)
if '$LENGTH(LEXT)
QUIT
SET LEXD=$GET(LEXD)
if '$LENGTH(LEXD)
QUIT ""
+3 SET LEXS=$GET(LEXS)
SET LEXT=$GET(LEXT)
if $LENGTH(LEXD)&($LENGTH(LEXS))
SET LEXD=LEXD_" ("_LEXS_")"
NEW LEXO
+4 SET LEXO=LEXC
SET LEXO=LEXO_$JUSTIFY(" ",(9-$LENGTH(LEXO)))_$EXTRACT(LEXD,1,54)
+5 SET LEXO=LEXO_$JUSTIFY(" ",(63-$LENGTH(LEXO)))_LEXT
SET X=LEXO
+6 QUIT X
FC(X,Y,LEX) ; Format Code First
+1 NEW LEXO,LEXT,LEXC,LEXD,LEXS
SET LEXC=$GET(X)
SET LEXD=$GET(Y)
SET LEXS=$GET(LEX)
if '$LENGTH(LEXC)
QUIT ""
+2 SET LEXT=$PIECE($$STY(LEXC),"^",2)
if '$LENGTH(LEXT)
QUIT ""
if '$LENGTH(LEXD)
QUIT ""
+3 SET LEXS=$GET(LEX)
SET LEXO=LEXT_" "_LEXC_" "
SET LEXO=LEXO_$JUSTIFY(" ",(19-$LENGTH(LEXO)))
SET LEXO=LEXO_" "_LEXD
+4 if $LENGTH(LEXS)&(LEXO'[LEXS)
SET LEXO=$EXTRACT(LEXO,1,56)_" ("_LEXS_")"
SET X=LEXO
+5 QUIT X
STY(X) ; Short Type
+1 NEW LEXSO
SET LEXSO=$GET(X)
if $LENGTH(LEXSO)'>1
QUIT ""
+2 if $$CODEABA^ICDEX(LEXSO,80,30)>0
QUIT "1^ICD-10 Dx"
+3 if $$CODEABA^ICDEX(LEXSO,80.1,31)>0
QUIT "2^ICD-10 Op"
+4 if $$CODEABA^ICDEX(LEXSO,80,1)>0
QUIT "3^ICD-9 Dx"
+5 if $$CODEABA^ICDEX(LEXSO,80.1,2)>0
QUIT "4^ICD-9 Op"
+6 if $DATA(^ICPT("BA",(LEXSO_" ")))
QUIT "5^CPT-4/HCPCS"
+7 if $DATA(^DIC(81.3,"BA",(LEXSO_" ")))
QUIT "6^CPT Mod"
+8 QUIT ""
LTY(X) ; Long Type
+1 NEW LEXSO,LEX
SET LEXSO=$GET(X)
if $LENGTH(LEXSO)'>1
QUIT ""
+2 if $$CODEABA^ICDEX(LEXSO,80,30)>0
QUIT "1^ICD-10 Diagnosis Code"
+3 if $$CODEABA^ICDEX(LEXSO,80.1,31)>0
QUIT "2^ICD-10 Procedure Code"
+4 if $$CODEABA^ICDEX(LEXSO,80,1)>0
QUIT "3^ICD-9 Diagnosis Code"
+5 if $$CODEABA^ICDEX(LEXSO,80.1,2)>0
QUIT "4^ICD-9 Procedure Code"
+6 SET LEX=$ORDER(^ICPT("BA",(LEXSO_" "),0))
IF LEX>0
Begin DoDot:1
+7 NEW LEXS
SET LEXS=$PIECE($GET(^ICPT(+LEX,0)),"^",6)
+8 IF LEXS="C"
SET LEX="5^CPT Procedure Code"
QUIT
+9 IF LEXS="H"
SET LEX="6^HCPCS Procedure Code"
QUIT
+10 IF LEXSO?5N
SET LEX="5^CPT Procedure Code"
QUIT
+11 SET LEX="6^HCPCS Procedure Code"
End DoDot:1
if LEX["^"
QUIT LEX
+12 if $DATA(^DIC(81.3,"BA",(LEXSO_" ")))
QUIT "7^CPT Modifier Code"
+13 QUIT ""
DS(X) ; Trim Dubble Space Character
+1 SET X=$GET(X)
if X'[" "
QUIT X
FOR
if X'[" "
QUIT
SET X=$PIECE(X," ",1)_" "_$PIECE(X," ",2,4000)
+2 QUIT X
TM(X,Y) ; Trim Character Y - Default " "
+1 SET X=$GET(X)
if X=""
QUIT X
SET Y=$GET(Y)
if '$LENGTH(Y)
SET Y=" "
+2 FOR
if $EXTRACT(X,1)'=Y
QUIT
SET X=$EXTRACT(X,2,$LENGTH(X))
+3 FOR
if $EXTRACT(X,$LENGTH(X))'=Y
QUIT
SET X=$EXTRACT(X,1,($LENGTH(X)-1))
+4 QUIT X
OK(X,Y,LEX,LEXS) ; User Input is Ok
+1 NEW LEXIX,LEXX,LEXO,LEXCT,LEXNX,LEXROOT
+2 SET (LEXCT,LEXX)=$TRANSLATE($GET(X),"#","")
if $LENGTH(LEXX)'>0
QUIT 0
SET LEXROOT=$GET(Y)
SET LEXIX=$GET(LEX)
SET LEXS=+($GET(LEXS))
+3 if '$LENGTH(LEXROOT)
QUIT 0
if "^D^AD^BA^ABA^C^"'[("^"_LEXIX_"^")
QUIT 0
+4 SET LEXO=$EXTRACT(LEXX,1,($LENGTH(LEXX)-1))_$CHAR(($ASCII($EXTRACT(LEXX,$LENGTH(LEXX)))-1))_"~"
+5 if +LEXS'>0
SET LEXNX=$ORDER(@(LEXROOT_""""_LEXIX_""","""_LEXO_""")"))
+6 if +LEXS>0
SET LEXNX=$ORDER(@(LEXROOT_""""_LEXIX_""","_+LEXS_","""_LEXO_""")"))
+7 if $EXTRACT(LEXNX,1,$LENGTH(LEXCT))=LEXCT
QUIT 1
+8 QUIT 0
TOKN(X) ; Parse Tolkens
+1 NEW LEXX,LEXBEG,LEXEND,LEXCHR,LEXTTK,LEXTKN,LEXNOT
KILL LEXTKNS
SET LEXX=$GET(X)
SET LEXBEG=1
SET LEXTTK=0
+2 SET LEXNOT="^AND^THE^THEN^FOR^FROM^OTHER^THAN^WITH^THEIR^SOME^THIS^"
FOR LEXEND=1:1:$LENGTH(LEXX)+1
Begin DoDot:1
+3 SET LEXCHR=$EXTRACT(LEXX,LEXEND)
IF "~!@#$%&*()_+`-=[]{};'\:|,./?<> """[LEXCHR
Begin DoDot:2
+4 SET LEXTKN=$EXTRACT(LEXX,LEXBEG,LEXEND-1)
SET LEXBEG=LEXEND+1
IF $LENGTH(LEXTKN)>2
IF $LENGTH(LEXTKN)<31
IF LEXNOT'[LEXTKN
Begin DoDot:3
+5 if '$DATA(LEXTKNS($LENGTH(LEXTKN),LEXTKN))
SET LEXTTK=+($GET(LEXTTK))+1
+6 SET LEXTKNS($LENGTH(LEXTKN),LEXTKN)=""
End DoDot:3
End DoDot:2
End DoDot:1
+7 SET X=+($GET(LEXTTK))
+8 QUIT X
SHO ; Show TMP
+1 NEW LEXNN,LEXNC
SET LEXNN="^TMP(""LEXQL"","_$JOB_")"
SET LEXNC="^TMP(""LEXQL"","_$JOB_","
+2 WRITE !
FOR
SET LEXNN=$QUERY(@LEXNN)
if '$LENGTH(LEXNN)!(LEXNN'[LEXNC)
QUIT
WRITE !,LEXNN,"=",@LEXNN
+3 WRITE !
+4 QUIT