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

ICDEXLK5.m

Go to the documentation of this file.
  1. ICDEXLK5 ;SLC/KER - ICD Extractor - Lookup, List ;04/21/2014
  1. ;;18.0;DRG Grouper;**57**;Oct 20, 2000;Build 7
  1. ;
  1. ; Global Variables
  1. ; ^ICDS( N/A
  1. ; ^TMP(SUB,$J SACC 2.3.2.5.1
  1. ;
  1. ; External References
  1. ; ^DIM ICR 10016
  1. ; $$MIX^LEXXM ICR 5781
  1. ; $$DT^XLFDT ICR 10103
  1. ; $$FMTE^XLFDT ICR 10103
  1. ; $$UP^XLFSTR ICR 10104
  1. ;
  1. ; Local Variables Newed or Killed by calling application
  1. ; DIC(0) Fileman Lookup Parameters
  1. ; DIC("S") Fileman Screen
  1. ;
  1. ; Local Variables Newed or Killed Elsewhere
  1. ; ICDBYCD Sort by Code
  1. ; ICDCDT Code Set Date
  1. ; ICDOUT Format of display
  1. ; ICDVDT Date to use during lookup
  1. ; ICDSYS Coding System
  1. ; ICDVER Versioned Lookup
  1. ; ICDDICSS Secondary Screen
  1. ; INP2 User Input (processed)
  1. ; LOUD Output to Screen
  1. ;
  1. Q
  1. EXM(TXT,ROOT,Y,CDT,SYS,VER) ; Lookup Exact Match
  1. ;
  1. ; Input TXT Text/Code for search (Required)
  1. ; ROOT Global Root (Required)
  1. ; .Y Output array passed by reference (Required)
  1. ; CDT Date
  1. ; SYS Coding System
  1. ; VER Versioned Search
  1. ;
  1. ; Output $$EM Number of Exact Matches Found
  1. ; Y(n) Array of Exact Matches
  1. ;
  1. N EXM,KEY,ORD,ICDI,IEN,NUM,ORG,EROOT S ORG=$G(TXT) Q:'$L($G(ORG)) 0
  1. Q:'$L($TR(ORG,"""","")) 0 S ROOT=$G(ROOT) Q:'$L($G(ROOT)) 0
  1. S SYS=+($G(SYS)),VER=+($G(VER))
  1. S CDT=$$CDT^ICDEXLK3($G(CDT),SYS)
  1. ; Exact Match Case Sensitive Code
  1. S KEY=ORG,KEY=ORG S ORD=$E(KEY,1,($L(KEY)-1))_$C(($A($E(KEY,$L(KEY)))-1))_"~ "
  1. S EROOT=ROOT_"""BA""," S:+SYS>0&($D(@(ROOT_"""ABA"","_+SYS_")"))) EROOT=ROOT_"""ABA"","_+SYS_","
  1. F S ORD=$O(@(EROOT_""""_ORD_""")")) Q:'$$ISORD D
  1. . S IEN=0 F S IEN=$O(@(EROOT_""""_ORD_""","_+IEN_")")) Q:+IEN'>0 D
  1. . . N VAL,STA S STA=1
  1. . . S:VER>0 STA=$$LS^ICDEXLK3(ROOT,IEN,CDT)
  1. . . Q:+($G(VER))>0&(+STA'>0)
  1. . . S VAL=$P($G(@(ROOT_+IEN_",0)")),"^",1)
  1. . . Q:VAL'=ORG S EXM(IEN)="",LOR=1
  1. ; Exact Match Code
  1. I $O(EXM(0))'>0 D
  1. . S KEY=$$UP^XLFSTR(ORG),KEY=ORG S ORD=$E(KEY,1,($L(KEY)-1))_$C(($A($E(KEY,$L(KEY)))-1))_"~ "
  1. . S EROOT=ROOT_"""BA""," S:+SYS>0&($D(@(ROOT_"""ABA"","_+SYS_")"))) EROOT=ROOT_"""ABA"","_+SYS_","
  1. . F S ORD=$O(@(EROOT_""""_ORD_""")")) Q:'$$ISORD D
  1. . . S IEN=0 F S IEN=$O(@(EROOT_""""_ORD_""","_+IEN_")")) Q:+IEN'>0 D
  1. . . . N VAL,STA S STA=1 S:VER>0 STA=$$LS^ICDEXLK3(ROOT,IEN,CDT)
  1. . . . Q:+($G(VER))>0&(+STA'>0)
  1. . . . S VAL=$P($G(@(ROOT_+IEN_",0)")),"^",1)
  1. . . . Q:VAL'=ORG S EXM(IEN)="",LOR=1
  1. ; Exact Match Text
  1. I $O(EXM(0))'>0 D
  1. . Q:$D(ICDBYCD) S KEY=$$UP^XLFSTR($G(ORG)) K PARS D TOKEN^ICDEXLK3(KEY,ROOT,SYS,.PARS)
  1. . S NUM=$O(PARS(0)),SEQ=$O(PARS(+NUM,0)),KEY=$G(PARS(+NUM,+SEQ))
  1. . K PARS(+NUM,+SEQ) Q:$L(KEY)'>1
  1. . S ORD=$E(KEY,1,($L(KEY)-1))_$C(($A($E(KEY,$L(KEY)))-1))_"~"
  1. . S EROOT=ROOT_"""D""," S:+SYS>0&($D(@(ROOT_"""AD"","_+SYS_")"))) EROOT=ROOT_"""AD"","_+SYS_","
  1. . F S ORD=$O(@(EROOT_""""_ORD_""")")) Q:'$$ISORD D
  1. . . S IEN=0 I $G(DIC(0))["X",ORD'=KEY Q
  1. . . F S IEN=$O(@(EROOT_""""_ORD_""","_+IEN_")")) Q:+IEN'>0 D
  1. . . . N VAL,STA S STA=1 S:VER>0 STA=$$LS^ICDEXLK3(ROOT,IEN,CDT)
  1. . . . Q:+($G(VER))>0&(+STA'>0)
  1. . . . S VAL=$$LD^ICDEXLK3(ROOT,IEN,CDT,VER)
  1. . . . Q:$$UP^XLFSTR(VAL)'=$$UP^XLFSTR(ORG)
  1. . . . S EXM(IEN)="",LOR=0
  1. S (X,IEN)=0 F S IEN=$O(EXM(IEN)) Q:+IEN'>0 D
  1. . N ICDI S ICDI=$O(Y(" "),-1)+1,Y(ICDI)=IEN,(X,Y(0))=ICDI
  1. Q X
  1. IEN ; Lookup by IEN
  1. K Y S FND=0,Y=-1 Q:'$L(INP2) Q:INP2'?1N.N Q:+INP2'>0 Q:'$L(ROOT) Q:+FILE'>0
  1. N XX,VDES,UDES,IEN,SNAME,ICS,INAME,STA,ORG S IEN=INP2 Q:'$D(@(ROOT_+IEN_",0)"))
  1. S ORG="`"_IEN,VDES=$$LD^ICDEX(FILE,IEN,ICDCDT),UDES=$$LD^ICDEX(FILE,IEN,9999999)
  1. S ICS=$$CSI^ICDEX(FILE,IEN),XX=VDES,(SNAME,INAME)=$$SYS^ICDEX(ICS,,"E")
  1. S:$L($G(ICDSYS)) SNAME=$$SYS^ICDEX($G(ICDSYS),,"E")
  1. S STA=$$LS^ICDEX(FILE,IEN,$G(ICDCDT))
  1. I $L($G(ICDSYS))>0,ICS>0,$G(ICDSYS)'=ICS D Q
  1. . K X,Y S X="" S:$L($G(ORG)) X=$G(ORG) S Y=-1,FND=0 Q
  1. . S X=UDES,Y="-1^IEN "_IEN_" is not of the "_SNAME_" coding system"
  1. I +($G(ICDVER))>0,STA'>0 D Q
  1. . K X,Y S X="" S:$L($G(ORG)) X=$G(ORG) S Y=-1,FND=0 Q
  1. . S X=UDES,Y="-1^IEN "_IEN_" is not active on "_$$FMTE^XLFDT($G(ICDCDT),"5Z")
  1. I +($G(ICDVER))'>0,$E(XX,1,2)="-1",$L(UDES),$E(UDES,1,2)'="-1" S XX=UDES
  1. W:$D(LOUD)&($G(DIC(0))["E")&($E(XX,1,2)'="-1") " ",XX
  1. D FND(ROOT,IEN,ICDCDT,$G(ICS),$G(ICDVER),+($G(LOR)),$G(ICDOUT))
  1. D SEL(ROOT,1) S FND=+($G(^TMP(SUB,$J,"SEL",0)))
  1. I FND=1,+($G(^TMP(SUB,$J,"SEL",1)))>0 D
  1. . S Y=$G(^TMP(SUB,$J,"SEL",1)) S:Y[" " Y=$P(Y," ",1)
  1. . D Y^ICDEXLK2($G(ROOT),+Y,$G(ICDCDT))
  1. S:+($G(Y))'>0 Y=-1 S:$L($G(ORG)) X=$G(ORG)
  1. Q
  1. ;
  1. FND(ROOT,IEN,CDT,SYS,VER,LOR,OUT) ; Add Item to Found List
  1. ;
  1. ; Input
  1. ;
  1. ; ROOT Global Root
  1. ; IEN Internal Entry Number
  1. ; CDT Date
  1. ; SYS Coding System
  1. ; VER Versioned Search
  1. ; LOR List Order
  1. ; 0 List by Text Length
  1. ; 1 List by Code Number
  1. ; OUT Output Format
  1. ; 1 Fileman, code and short text
  1. ; 2 Fileman, code and description
  1. ; 3 Lexicon, short text and code
  1. ; 4 Lexicon, description and code
  1. ;
  1. ; Output
  1. ;
  1. ; ^TMP(ID,$J,"FND")
  1. ; ^TMP(ID,$J,"FND",LEN,SEQ)=IEN ^ Display Text
  1. ; ^TMP(ID,$J,"FND","IEN",<ien>)=""
  1. ;
  1. ; where
  1. ;
  1. ; ID is a package namespaced subscript:
  1. ;
  1. ; ICD9 - for file #80 searches
  1. ; ICD0 - for file #80.1 searches
  1. ;
  1. ; LEN is a number assigned based string length
  1. ; SEQ is a unique sequence number for length
  1. ;
  1. ; Uses DIC("S") to screen output
  1. ;
  1. N CC,CODE,CTR,FILE,SEQ,SCREEN,SHORT,LONG,STATUS,STA,SUB,TEXT,TERM,TYP,NUM,Y
  1. S SYS=+($G(SYS)),VER=+($G(VER)) S (Y,IEN)=+($G(IEN)) Q:+IEN'>0
  1. S ROOT=$$ROOT^ICDEX($G(ROOT)),FILE=$$FILE^ICDEX(ROOT)
  1. S SUB=$TR(ROOT,"^("),SCREEN=$$SCREEN Q:'SCREEN Q:+FILE'>0
  1. S CODE=$P($G(@(ROOT_+IEN_",0)")),"^",1) Q:'$L(CODE)
  1. S:'$L($G(CDT)) CDT=$$DT^XLFDT S LOR=+($G(LOR))
  1. S STA=1 I +VER>0 S STA=$$STATCHK^ICDEX(CODE,CDT,SYS) Q:+($G(STA))'>0
  1. Q:'$L(SUB) Q:$D(^TMP(SUB,$J,"FND","IEN",+IEN))
  1. S TYP=$P($G(^ICDS(+SYS,0)),"^",1),TERM=""
  1. S OUT=$G(OUT) S:+OUT'>0 OUT=1 S:+OUT>4 OUT=1
  1. I +($G(OUT))=1!(+($G(OUT))=3) S TERM=$$SD^ICDEX(FILE,IEN,CDT)
  1. I +($G(OUT))=2!(+($G(OUT))=4) D
  1. . S TERM=$$LD^ICDEX(FILE,IEN,CDT) Q:$P(TERM,"^",1)=-1
  1. . I +($G(OUT))=4,$L($T(MIX^LEXXM)) S TERM=$$MIX^LEXXM(TERM)
  1. I VER'>0,($P(TERM,"^",1)=-1!('$L(TERM))) D
  1. . N TDT S TDT=$O(@(ROOT_IEN_",67,""B"","_+($G(CDT))_")")) Q:$E(TDT,1,7)'?7N
  1. . I +($G(OUT))=1!(+($G(OUT))=3) S TERM=$$SD^ICDEX(FILE,IEN,TDT)
  1. . I +($G(OUT))=2!(+($G(OUT))=4) S TERM=$$LD^ICDEX(FILE,IEN,TDT)
  1. . I +($G(OUT))=4,$P(TERM,"^",1)'=-1,$L($T(MIX^LEXXM)) S TERM=$$MIX^LEXXM(TERM)
  1. . S:$P(TERM,"^",1)=-1 TERM="" Q:'$L(TERM)
  1. . S:TDT?7N TERM=TERM_" ("_$$FMTE^XLFDT(TDT,"5ZM")_")"
  1. S:$P(TERM,"^",1)=-1 TERM="" Q:'$L(TERM) S NUM=$$NUM^ICDEX(CODE)
  1. S CODE=CODE_$J(" ",(10-$L(CODE))) S CC=""
  1. S:FILE=80 CC=$$VCC^ICDEX(IEN,CDT),CC=$$CC(+CC)
  1. S STATUS=$O(@(ROOT_+IEN_",66,""B"","_(+CDT+.000001)_")"),-1)
  1. S STATUS=$O(@(ROOT_+IEN_",66,""B"","_+STATUS_","" "")"),-1)
  1. S STATUS=$P($G(@(ROOT_+IEN_",66,"_+STATUS_",0)")),"^",2)
  1. S STATUS=$$ST(STATUS)
  1. S:$G(OUT)'?1N OUT=$G(OUT) S:+OUT'>0 OUT=1 S:+OUT>4 OUT=4
  1. I +($G(OUT))=1!(+($G(OUT))=2) D
  1. . S:$G(DIC(0))'["S" TEXT=CODE_TERM_CC_STATUS
  1. . S:$G(DIC(0))["S" TEXT=TERM_CC_STATUS
  1. I +($G(OUT))=3!(+($G(OUT))=4) D
  1. . S CODE=$$TM(CODE),TEXT=TERM_CC_STATUS
  1. . Q:$G(DIC(0))["S"
  1. . S:$L(TYP) TEXT=TEXT_" ("_TYP_" "_CODE_")"
  1. . S:'$L(TYP) TEXT=TEXT_" ("_CODE_")"
  1. S SEQ=246-$L(TERM) S:LOR>0 SEQ=NUM
  1. S CTR=$O(^TMP(SUB,$J,"FND",+SEQ," "),-1)+1
  1. S ^TMP(SUB,$J,"FND",+SEQ,CTR)=IEN_"^"_TEXT
  1. S ^TMP(SUB,$J,"FND","IEN",+IEN)=""
  1. Q
  1. SEL(ROOT,LOR) ; Add Items to Selection List
  1. ;
  1. ; Input
  1. ;
  1. ; ROOT Global Root/File # (Required)
  1. ; LOR List Order
  1. ; 0 List by Text Length
  1. ; 1 List by Code Number
  1. ;
  1. ; Output
  1. ;
  1. ; ^TMP(ID,$J,"SEL")
  1. ; ^TMP(ID,$J,"SEL",0)=# of entries
  1. ; ^TMP(ID,$J,"SEL",#)=IEN^Display Text
  1. ;
  1. ; where ID is a package namespaced subscript:
  1. ;
  1. ; ICD9 - for the Diagnosis file #80
  1. ; ICD0 - for the Operations/Procedure file #80.1
  1. ;
  1. ; Uses ^TMP(NAME,$J,"FND") (Optional)
  1. ; Kills ^TMP(NAME,$J,"FND")
  1. ;
  1. N CTR,FILE,FND,SEQ,SUB,TEXT S ROOT=$$ROOT^ICDEX($G(ROOT)),LOR=+($G(LOR))
  1. S FILE=$$FILE^ICDEX(ROOT),SUB=$TR(ROOT,"^(") K ^TMP(SUB,$J,"SEL")
  1. Q:+FILE'>0 Q:'$L(SUB) K ^TMP(SUB,$J,"SEL")
  1. I +($G(LOR))'>0 D
  1. . S SEQ=" " F S SEQ=$O(^TMP(SUB,$J,"FND",SEQ),-1) Q:+SEQ'>0 D SEL2
  1. I +($G(LOR))>0 D
  1. . S SEQ=0 F S SEQ=$O(^TMP(SUB,$J,"FND",SEQ)) Q:+SEQ'>0 D SEL2
  1. K ^TMP(SUB,$J,"FND")
  1. Q
  1. SEL2 ; Add Items to Selection List (part 2)
  1. N FND S FND=0 F S FND=$O(^TMP(SUB,$J,"FND",+SEQ,FND)) Q:+FND'>0 D
  1. . N CTR,TEXT S TEXT=$G(^TMP(SUB,$J,"FND",+SEQ,FND))
  1. . Q:'$L(TEXT) Q:+TEXT'>0 Q:'$L($P(TEXT,"^",2))
  1. . S CTR=$O(^TMP(SUB,$J,"SEL"," "),-1)+1
  1. . S ^TMP(SUB,$J,"SEL",CTR)=TEXT,^TMP(SUB,$J,"SEL",0)=CTR
  1. Q
  1. ;
  1. ; Miscellaneous
  1. SH ; Display TMP
  1. N SUB,NN,NC
  1. S SUB="ICD9" S:'$D(^TMP(SUB)) SUB="ICD0" Q:'$D(^TMP(SUB))
  1. S NN="^TMP("""_SUB_""","_$J_")",NC="^TMP("""_SUB_""","_$J_","
  1. W:'$D(@NN) ! Q:'$D(@NN) F S NN=$Q(@NN) Q:'$L(NN)!(NN'[NC) W !,NN,"=",@NN
  1. W !
  1. Q
  1. SCREEN(X) ; Screen Entries - Boolean Truth Value
  1. Q:+($G(Y))'>0 1 Q:'$L($G(ROOT)) 1
  1. N ICDNR,ICDO,ICDS,ICDY S ICDY=+($G(Y)),ROOT=$$ROOT^ICDEX($G(ROOT)) Q:'$L(ROOT) 1
  1. S ICDS=$G(ICDDICS) Q:'$L(ICDS) 1 S Y=+($G(ICDY))
  1. S ICDNR=$D(@(ROOT_+Y_",0)")) X ICDS S ICDO=$T
  1. Q:'ICDO 0
  1. Q 1
  1. Q
  1. ; QUASAR
  1. N ICDREF,ICDSC1,ICDSC2,ICDF1,ICDF2,ICDIN
  1. I $L($G(DICR(2,"S"))) D
  1. . I $G(DIC("S"))["X DICR(2,""S"")" S ICDF2=""
  1. . I $G(DICR(1,31))=ICDF2,$L($G(DICR(2,"S"))),$G(ICDF2)["DICR(2,""S"")" S ICDF2=""
  1. Q:'$L((ICDF1_ICDF2)) 1 S ICDIN=$D(@(ROOT_+ICDY_",0)")) Q:ICDIN'>0 0
  1. ; SCHEDULING
  1. S X=ICDF1 D ^DIM S:$D(X) ICDSC1=X D:$L(ICDSC1)
  1. . S Y=+($G(ICDY)),ICDREF=$D(@(ROOT_+Y_",0)")) X ICDSC1 S ICDSC1=$T
  1. Q:+ICDSC1'>0&('$L(ICDF2)) 0 Q:'$L(ICDF2) 1
  1. S X=ICDF2 D ^DIM S:$D(X) ICDSC2=X D:$L(ICDSC2)&($L(ICDF1))
  1. . S Y=+($G(ICDY)),ICDREF=$D(@(ROOT_+Y_",0)")) X ICDSC2 S ICDSC2=$T
  1. Q:+ICDSC1'>0!(+(ICDSC2'>0)) 0
  1. Q 1
  1. ISORD(X) ; Check if in $ORDER
  1. Q:'$L($G(ORD)) 0 Q:'$L($G(KEY)) 0
  1. Q:$E($G(ORD),1,$L($G(KEY)))=$G(KEY) 1
  1. Q 0
  1. CC(X) ; CC
  1. Q:+($G(X))=1 " (CC)"
  1. Q:+($G(X))=2 " (Major CC)"
  1. Q ""
  1. ST(X) ; Status indicators
  1. Q:$G(X)?1N&(+$G(X)'>0) " (Inactive)"
  1. Q:$G(X)'?1N&(+$G(X)'>0) " (Pending)"
  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