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

LEXQL2.m

Go to the documentation of this file.
  1. LEXQL2 ;ISL/KER - Query - Lookup Code (Build List) ;04/21/2014
  1. ;;2.0;LEXICON UTILITY;**62,80**;Sep 23, 1996;Build 10
  1. ;
  1. ; Global Variables
  1. ; ^DIC(81.3, ICR 4492
  1. ; ^ICD0("BA" ICR 4486
  1. ; ^ICD9("BA" ICR 4485
  1. ; ^ICPT( ICR 4489
  1. ; ^ICPT("BA" ICR 4489
  1. ; ^TMP("LEXQL") SACC 2.3.2.5.1
  1. ; ^UTILITY($J ICR 10011
  1. ;
  1. ; External References
  1. ; ^DIWP ICR 10011
  1. ; $$CODEABA^ICDEX ICR 5747
  1. ; $$ROOT^ICDEX ICR 5747
  1. ; $$DT^XLFDT ICR 10103
  1. ; $$FMTE^XLFDT ICR 10103
  1. ; $$UP^XLFSTR ICR 10104
  1. ;
  1. ADD(X) ; Add to List
  1. N LEXIN,LEXINU,LEXO,LEXCO,LEXCT,LEXCS,LEXTO,LEXTT,LEXOC,LEXCT,LEXTY,LEXTD,LEXTMP
  1. N LEXKEY,LEXLEN,LEXRT,LEXSO,LEXTKNS S LEXTD=$$DT^XLFDT,U="^"
  1. S LEXIN=$G(X),LEXINU=$$UP^XLFSTR($$TM($G(LEXIN))) K LEXTKNS S LEXTTK=$$TOKN(LEXINU)
  1. S LEXLEN=$O(LEXTKNS(" "),-1)
  1. F LEXTMP="~","!","@","#","$","%","&","*","(",")","_","+","`","-","="," " S LEXSO=$P(LEXIN,LEXTMP,1)
  1. F LEXTMP="[","]","{","}",";","'","\",":","|",",","/","?","<",">" S LEXSO=$P(LEXSO,LEXTMP,1)
  1. S:+LEXLEN'>0 LEXLEN=$L(LEXSO)
  1. S LEXKEY=$O(LEXTKNS(LEXLEN,""),-1) S:'$L(LEXKEY) LEXKEY=LEXSO S LEXKEY=$TR(LEXKEY,"#","") Q:'$L(LEXKEY)
  1. K LEXTKNS(+LEXLEN,LEXKEY) S:+LEXTTK>0 LEXTTK=LEXTTK-1
  1. S LEXTT=LEXKEY
  1. S LEXTO=$E(LEXKEY,1,($L(LEXKEY)-1))_$C(($A($E(LEXKEY,$L(LEXKEY)))-1))_"~"
  1. S LEXCT=$TR(LEXSO,"#","")
  1. S LEXCO=$E(LEXSO,1,($L(LEXSO)-1))_$C(($A($E(LEXSO,$L(LEXSO)))-1))_"~"
  1. ; ICD-10 DX
  1. S LEXRT=$$ROOT^ICDEX(80),LEXCS=30
  1. I ($L(LEXTT)>2&$$OK(LEXTT,LEXRT,"AD",LEXCS))!($L(LEXCT)>2&($$OK(LEXCT,LEXRT,"ABA",LEXCS))) D
  1. . S LEXTY=1 D ICD^LEXQL3($G(LEXINU),LEXCS)
  1. ; ICD-10 PR
  1. S LEXRT=$$ROOT^ICDEX(80.1),LEXCS=31
  1. I ($L(LEXTT)>2&$$OK(LEXTT,LEXRT,"AD",LEXCS))!($L(LEXCT)>2&($$OK(LEXCT,LEXRT,"ABA",LEXCS))) D
  1. . S LEXTY=2 D ICD^LEXQL3($G(LEXINU),LEXCS)
  1. ; ICD-9 DX
  1. S LEXRT=$$ROOT^ICDEX(80),LEXCS=1
  1. I ($L(LEXTT)>2&$$OK(LEXTT,LEXRT,"AD",LEXCS))!($L(LEXCT)>2&($$OK(LEXCT,LEXRT,"ABA",LEXCS))) D
  1. . S LEXTY=3 D ICD^LEXQL3($G(LEXINU),LEXCS)
  1. ; ICD-9 PR
  1. S LEXRT=$$ROOT^ICDEX(80.1),LEXCS=2
  1. I ($L(LEXTT)>2&$$OK(LEXTT,LEXRT,"AD",LEXCS))!($L(LEXCT)>2&($$OK(LEXCT,LEXRT,"ABA",LEXCS))) D
  1. . S LEXTY=4 D ICD^LEXQL3($G(LEXINU),LEXCS)
  1. ; CPT/HCPCS
  1. I ($L(LEXTT)>2&$$OK(LEXTT,"^ICPT(","C"))!($L(LEXCT)>2&($$OK(LEXCT,"^ICPT(","BA"))) D
  1. . S LEXTY=5 D CP^LEXQL4
  1. ; CPT MOD
  1. I ($L(LEXCT)>0&($$OK(LEXCT,"^DIC(81.3,","BA"))) D
  1. . S LEXTY=6 D CM^LEXQL4
  1. ; Re-Order List
  1. N LEXCT,LEXO,LEXT1,LEXT2,LEX S LEXO="" F S LEXO=$O(^TMP("LEXQL",$J,"ADDLIST",LEXO)) Q:'$L(LEXO) D
  1. . K LEX N LEXT1,LEXT2 S LEXT1=$$TM($G(^TMP("LEXQL",$J,"ADDLIST",LEXO)))
  1. . S LEXT2=$$TM($G(^TMP("LEXQL",$J,"ADDLIST",LEXO,2))) Q:'$L(LEXT2)
  1. . I $L(LEXT2) K LEX S LEX(1)=LEXT2 D PR(.LEX,70) Q:'$L($G(LEX(1)))
  1. . S LEXCT=+($G(LEXCT))+1 K ^TMP("LEXQL",$J,+LEXCT)
  1. . S ^TMP("LEXQL",$J,+LEXCT)=$G(LEX(1)),^TMP("LEXQL",$J,0)=+LEXCT
  1. . S:$L($G(LEX(2))) ^TMP("LEXQL",$J,+LEXCT,2)=$G(LEX(2))
  1. K ^TMP("LEXQL",$J,"ADDLIST")
  1. Q
  1. ;
  1. ; Miscellaneous
  1. VSO(X) ; Verify Input
  1. N LEX,LEXIO,LEXIC,LEXUC,LEXUO S LEX=$G(X) Q:'$L(LEX) "" Q:$L(LEX)'>1 $$UP^XLFSTR(LEX)
  1. S LEXIC=$G(LEX),LEXIO=$E(LEX,1,($L(LEX)-1))_$C(($A($E(LEX,$L(LEX)))-1))_"~ "
  1. S LEXUC=$$UP^XLFSTR(LEXIC),LEXUO=$$UP^XLFSTR(LEXIO)
  1. ; 80 ICD-9/10
  1. I $E($O(^ICD9("BA",LEXIO)),1,$L(LEXIC))=LEXIC Q LEXIC
  1. I $E($O(^ICD9("BA",LEXUO)),1,$L(LEXUC))=LEXUC Q LEXUC
  1. ; 80.1 ICD-9.10
  1. I $E($O(^ICD0("BA",LEXIO)),1,$L(LEXIC))=LEXIC Q LEXIC
  1. I $E($O(^ICD0("BA",LEXUO)),1,$L(LEXUC))=LEXUC Q LEXUC
  1. ; 81 CPT
  1. I $E($O(^ICPT("BA",LEXIO)),1,$L(LEXIC))=LEXIC Q LEXIC
  1. I $E($O(^ICPT("BA",LEXUO)),1,$L(LEXUC))=LEXUC Q LEXUC
  1. ; 81.3 CPT Modifier
  1. I $E($O(^DIC(81.3,"BA",LEXIO)),1,$L(LEXIC))=LEXIC Q LEXIC
  1. I $E($O(^DIC(81.3,"BA",LEXUO)),1,$L(LEXUC))=LEXUC Q LEXUC
  1. Q LEX
  1. SD(X) ; Short Date
  1. Q $TR($$FMTE^XLFDT(+($G(X)),"5DZ"),"@"," ")
  1. FT(X,Y,LEX) ; Format Text First
  1. N LEXT,LEXC,LEXD,LEXS S LEXC=$G(X),LEXD=$G(Y),LEXS=$G(LEX) S LEXC=$G(LEXC) Q:'$L(LEXC) ""
  1. S LEXT=$P($$STY(LEXC),U,2) Q:'$L(LEXT) S LEXD=$G(LEXD) Q:'$L(LEXD) ""
  1. S LEXS=$G(LEXS),LEXT=$G(LEXT) S:$L(LEXD)&($L(LEXS)) LEXD=LEXD_" ("_LEXS_")" N LEXO
  1. S LEXO=LEXC S LEXO=LEXO_$J(" ",(9-$L(LEXO)))_$E(LEXD,1,54)
  1. S LEXO=LEXO_$J(" ",(63-$L(LEXO)))_LEXT S X=LEXO
  1. Q X
  1. FC(X,Y,LEX) ; Format Code First
  1. N LEXO,LEXT,LEXC,LEXD,LEXS S LEXC=$G(X),LEXD=$G(Y),LEXS=$G(LEX) Q:'$L(LEXC) ""
  1. S LEXT=$P($$STY(LEXC),"^",2) Q:'$L(LEXT) "" Q:'$L(LEXD) ""
  1. S LEXS=$G(LEX),LEXO=LEXT_" "_LEXC_" ",LEXO=LEXO_$J(" ",(19-$L(LEXO))),LEXO=LEXO_" "_LEXD
  1. S:$L(LEXS)&(LEXO'[LEXS) LEXO=$E(LEXO,1,56)_" ("_LEXS_")" S X=LEXO
  1. Q X
  1. STY(X) ; Short Type
  1. N LEXSO S LEXSO=$G(X) Q:$L(LEXSO)'>1 ""
  1. Q:$$CODEABA^ICDEX(LEXSO,80,30)>0 "1^ICD-10 Dx"
  1. Q:$$CODEABA^ICDEX(LEXSO,80.1,31)>0 "2^ICD-10 Op"
  1. Q:$$CODEABA^ICDEX(LEXSO,80,1)>0 "3^ICD-9 Dx"
  1. Q:$$CODEABA^ICDEX(LEXSO,80.1,2)>0 "4^ICD-9 Op"
  1. Q:$D(^ICPT("BA",(LEXSO_" "))) "5^CPT-4/HCPCS"
  1. Q:$D(^DIC(81.3,"BA",(LEXSO_" "))) "6^CPT Mod"
  1. Q ""
  1. LTY(X) ; Long Type
  1. N LEXSO,LEX S LEXSO=$G(X) Q:$L(LEXSO)'>1 ""
  1. Q:$$CODEABA^ICDEX(LEXSO,80,30)>0 "1^ICD-10 Diagnosis Code"
  1. Q:$$CODEABA^ICDEX(LEXSO,80.1,31)>0 "2^ICD-10 Procedure Code"
  1. Q:$$CODEABA^ICDEX(LEXSO,80,1)>0 "3^ICD-9 Diagnosis Code"
  1. Q:$$CODEABA^ICDEX(LEXSO,80.1,2)>0 "4^ICD-9 Procedure Code"
  1. S LEX=$O(^ICPT("BA",(LEXSO_" "),0)) I LEX>0 D Q:LEX["^" LEX
  1. . N LEXS S LEXS=$P($G(^ICPT(+LEX,0)),"^",6)
  1. . I LEXS="C" S LEX="5^CPT Procedure Code" Q
  1. . I LEXS="H" S LEX="6^HCPCS Procedure Code" Q
  1. . I LEXSO?5N S LEX="5^CPT Procedure Code" Q
  1. . S LEX="6^HCPCS Procedure Code"
  1. Q:$D(^DIC(81.3,"BA",(LEXSO_" "))) "7^CPT Modifier Code"
  1. Q ""
  1. DS(X) ; Trim Dubble Space Character
  1. S X=$G(X) Q:X'[" " X F Q:X'[" " S X=$P(X," ",1)_" "_$P(X," ",2,299)
  1. Q X
  1. PR(LEX,X) ; Parse Array
  1. N DIW,DIWF,DIWI,DIWL,DIWR,DIWT,DIWTC,DIWX,DN,LEXI,LEXLEN,LEXC K ^UTILITY($J,"W") Q:'$D(LEX)
  1. S LEXLEN=+($G(X)) S:+LEXLEN'>0 LEXLEN=79 S LEXC=+($G(LEX)) S:+($G(LEXC))'>0 LEXC=$O(LEX(" "),-1) Q:+LEXC'>0
  1. S DIWL=1,DIWF="C"_+LEXLEN S LEXI=0 F S LEXI=$O(LEX(LEXI)) Q:+LEXI=0 S X=$G(LEX(LEXI)) D ^DIWP
  1. K LEX S (LEXC,LEXI)=0 F S LEXI=$O(^UTILITY($J,"W",1,LEXI)) Q:+LEXI=0 D
  1. . S LEX(LEXI)=$$TM($G(^UTILITY($J,"W",1,LEXI,0))," "),LEXC=LEXC+1
  1. S:$L(LEXC) LEX=LEXC K ^UTILITY($J,"W")
  1. Q
  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
  1. OK(X,Y,LEX,LEXS) ; User Input is Ok
  1. N LEXIX,LEXX,LEXO,LEXCT,LEXNX,LEXROOT
  1. S (LEXCT,LEXX)=$TR($G(X),"#","") Q:$L(LEXX)'>0 0 S LEXROOT=$G(Y),LEXIX=$G(LEX),LEXS=+($G(LEXS))
  1. Q:'$L(LEXROOT) 0 Q:"^D^AD^BA^ABA^C^"'[("^"_LEXIX_"^") 0
  1. S LEXO=$E(LEXX,1,($L(LEXX)-1))_$C(($A($E(LEXX,$L(LEXX)))-1))_"~"
  1. S:+LEXS'>0 LEXNX=$O(@(LEXROOT_""""_LEXIX_""","""_LEXO_""")"))
  1. S:+LEXS>0 LEXNX=$O(@(LEXROOT_""""_LEXIX_""","_+LEXS_","""_LEXO_""")"))
  1. Q:$E(LEXNX,1,$L(LEXCT))=LEXCT 1
  1. Q 0
  1. TOKN(X) ; Parse Tolkens
  1. N LEXX,LEXBEG,LEXEND,LEXCHR,LEXTTK,LEXTKN,LEXNOT K LEXTKNS S LEXX=$G(X),LEXBEG=1,LEXTTK=0
  1. S LEXNOT="^AND^THE^THEN^FOR^FROM^OTHER^THAN^WITH^THEIR^SOME^THIS^" F LEXEND=1:1:$L(LEXX)+1 D
  1. . S LEXCHR=$E(LEXX,LEXEND) I "~!@#$%&*()_+`-=[]{};'\:|,./?<> """[LEXCHR D
  1. . . S LEXTKN=$E(LEXX,LEXBEG,LEXEND-1),LEXBEG=LEXEND+1 I $L(LEXTKN)>2,$L(LEXTKN)<31,LEXNOT'[LEXTKN D
  1. . . . S:'$D(LEXTKNS($L(LEXTKN),LEXTKN)) LEXTTK=+($G(LEXTTK))+1
  1. . . . S LEXTKNS($L(LEXTKN),LEXTKN)=""
  1. S X=+($G(LEXTTK))
  1. Q X
  1. SHO ; Show TMP
  1. N LEXNN,LEXNC S LEXNN="^TMP(""LEXQL"","_$J_")",LEXNC="^TMP(""LEXQL"","_$J_","
  1. W ! F S LEXNN=$Q(@LEXNN) Q:'$L(LEXNN)!(LEXNN'[LEXNC) W !,LEXNN,"=",@LEXNN
  1. W !
  1. Q