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

ICDEXLK4.m

Go to the documentation of this file.
  1. ICDEXLK4 ;SLC/KER - ICD Extractor - Lookup, Search Text ;12/19/2014
  1. ;;18.0;DRG Grouper;**57,67,82**;Oct 20, 2000;Build 21
  1. ;
  1. ; Global Variables
  1. ; ^TMP(SUB,$J SACC 2.3.2.5.1
  1. ;
  1. ; External References
  1. ; $$LOW^XLFSTR ICR 10104
  1. ; $$UP^XLFSTR ICR 10104
  1. ;
  1. ; Local Variables Newed or Killed by calling application
  1. ; DIC(0) Fileman Lookup Parameters
  1. ;
  1. ; Local Variables Newed or Killed Elsewhere
  1. ; ICDBYCD Sort by Code
  1. ; CDT Code Set Date
  1. ; OUT Format of display
  1. ; SYS Coding System
  1. ; VER Versioned Lookup
  1. ; SUB ^TMP Subscript
  1. ; SYS Coding System
  1. ;
  1. TXT ; Lookup by Text (Requires TXT and ROOT)
  1. Q:$D(ICDBYCD) Q:'$L($G(TXT)) Q:'$L($G(ROOT)) Q:$L(TXT)'>1 Q:$G(DIC(0))["B"
  1. S CDT=$$CDT^ICDEXLK3($G(CDT)) N PARS,ORG,CNT,PRV,EROOT,KEY,LOOK,EXACT,ABBR,PRIME
  1. S:'$L($G(SUB)) SUB=$TR(ROOT,"^(,","")
  1. S LOOK=TXT,PRV=+($G(^TMP(SUB,$J,"SEL",0))),(EXACT,ABBR)=0
  1. S CNT=0,ORG=$$UP^XLFSTR($G(TXT)) K PARS D TOKEN^ICDTOKN(TXT,ROOT,$G(SYS),.PARS)
  1. N I,TMP S NUM=0,(PRIME,KEY,TMP)="",I=0 F S I=$O(PARS(I)) Q:+I'>0 D
  1. . N TX S TX=$G(PARS(I)) S:$L(TX)>$L(TMP) TMP=TX,NUM=I
  1. S:+NUM>0&($L(TMP)) (PRIME,KEY)=TMP S:+($G(PARS(+NUM,"A")))>0 ABBR=1
  1. I NUM'>0 S NUM=$O(PARS(0)),(PRIME,KEY)=$G(PARS(+NUM)) S:+($G(PARS(+NUM,"A")))>0 ABBR=1
  1. K:NUM>0 PARS(+NUM) S:NUM>0&($G(PARS(0))>0) PARS(0)=$G(PARS(0))-1 Q:$L(KEY)'>1
  1. S EROOT=ROOT_"""D""," S:+($G(SYS))>0&($D(@(ROOT_"""AD"","_+($G(SYS))_")"))) EROOT=ROOT_"""AD"","_+($G(SYS))_","
  1. S EXACT=0 I $O(PARS(0))'>0,$L(PRIME),$D(@(EROOT_""""_PRIME_""")")) S EXACT=1
  1. I EXACT>0!(ABBR>0) D
  1. . N ORD,STR,TKN S STR=PRIME F TKN=STR,(STR_"S"),(STR_"ES") D
  1. . . S ORD=TKN I $D(@(EROOT_""""_ORD_""")")) D TXT2
  1. I (EXACT'>0&(ABBR'>0))!('$D(^TMP(SUB,$J,"FND"))) D
  1. . N I S I=0 F S I=$O(PARS(+I)) Q:+I'>0 K PARS(+I,"A")
  1. . N ORD,STR,TKN S STR=PRIME F TKN=STR,(STR_"S"),(STR_"ES") D
  1. . . S ORD=$E(TKN,1,($L(TKN)-1))_$C(($A($E(TKN,$L(TKN)))-1))_"~"
  1. . . F S ORD=$O(@(EROOT_""""_ORD_""")")) Q:'$$ISORD^ICDEXLK3 D TXT2
  1. D:$D(^TMP(SUB,$J,"FND")) SEL^ICDEXLK5(ROOT,0)
  1. Q
  1. TXT2 ; Lookup by Text (loop)
  1. N IEN S IEN=0 F S IEN=$O(@(EROOT_""""_ORD_""","_+IEN_")")) Q:+IEN'>0 D
  1. . N OK,NUM,TDT,TIE,TXT,KEY,VDT S VDT=+CDT+.000001
  1. . S TDT=$O(@(EROOT_""""_ORD_""","_+IEN_","_VDT_")"),-1)
  1. . I +($G(VER))'>0,TDT'?7N D
  1. . . S TDT=$O(@(EROOT_""""_ORD_""","_+IEN_","_(+CDT-.000001)_")"))
  1. . Q:TDT'?7N S TIE=$O(@(EROOT_""""_ORD_""","_+IEN_","_+TDT_",0)"))
  1. . S TXT=$$UP^XLFSTR($G(@(ROOT_+IEN_",68,"_+TIE_",1)")))
  1. . I $G(DIC(0))'["A",$G(DIC(0))["O" D Q
  1. . . Q:CNT>1 I ORG=TXT D FND^ICDEXLK5(ROOT,IEN,CDT,$G(SYS),$G(VER),0,$G(OUT)) S CNT=CNT+1
  1. . S OK=1,NUM=0
  1. . F S NUM=$O(PARS(NUM)) Q:+NUM'>0 D
  1. . . N EXACT,PR,OR,SP,IN,AB S PR=$G(PARS(NUM)),AB=+($G(PARS(+NUM,"A")))
  1. . . I AB'>0 S IN=$$IN(TXT,PR),SP=$$SI(ROOT,+IEN,+TIE,PR)
  1. . . I AB>0 S IN=$$EX(TXT,PR),SP=$$SE(ROOT,+IEN,+TIE,PR)
  1. . . S:IN'>0&(SP'>0) OK=0
  1. . D:+OK>0 FND^ICDEXLK5(ROOT,IEN,CDT,$G(SYS),$G(VER),0,$G(OUT))
  1. Q
  1. ;
  1. ; Miscellaneous
  1. SE(RT,IE,TI,X) ; Supplemental Word (exact match exist)
  1. N CNTL,IIEN,PLUR,TEXT,ROOT,TIEN
  1. S CNTL=$$UP^XLFSTR($G(X)) Q:'$L(CNTL) 0
  1. S ROOT=$$ROOT^ICDEX($G(RT)) Q:'$L(ROOT) 0
  1. S IIEN=+($G(IE)),TIEN=+($G(TI))
  1. S TEXT=$$UP^XLFSTR($G(@(ROOT_+IIEN_",68,"_+TIEN_",1)"))) Q:'$L(TEXT) 0
  1. Q:'$D(@(ROOT_+IIEN_",68,"_+TIEN_",2,""B"","""_CNTL_""")")) 0
  1. S PLUR=$$EX(TEXT,(CNTL_"S")) Q:PLUR>0 0
  1. Q 1
  1. SI(RT,IE,TI,X) ; Supplemental Word (match exist)
  1. N CNTL,IIEN,PLUR,TEXT,NEXT,TIEN,ORDR,ROOT
  1. S CNTL=$$UP^XLFSTR($G(X)) Q:'$L(CNTL) 0
  1. S ROOT=$$ROOT^ICDEX($G(RT)) Q:'$L(ROOT) 0
  1. S IIEN=+($G(IE)),TIEN=+($G(TI))
  1. S:CNTL?1N.N ORDR=CNTL-.00000000000000009 I CNTL'?1N.N D
  1. . S:$L(CNTL)=1 ORDR=$C($A(CNTL)-1)_"~"
  1. . S:$L(CNTL)>1 ORDR=$E(CNTL,1,($L(CNTL)-1))_$C($A($E(CNTL,$L(CNTL)))-1)_"~"
  1. S NEXT=$O(@(ROOT_+IIEN_",68,"_+TIEN_",2,""B"","""_ORDR_""")"))
  1. Q:$E(NEXT,1,$L(CNTL))=CNTL 1
  1. Q 0
  1. EX(X,Y) ; String Y is exactly in X
  1. N CON,CNTL,TEXT,EXACT S TEXT=$G(X),CNTL=$G(Y),EXACT=1
  1. S CON=$$CON(TEXT,CNTL) S X=+($G(CON))
  1. Q X
  1. IN(X,Y) ; String Y is contained in X
  1. N CON,CNTL,TEXT S TEXT=$G(X),CNTL=$G(Y)
  1. S CON=$$CON(TEXT,CNTL) S X=+($G(CON))
  1. Q X
  1. CON(X,Y) ; Text X Contains String Y
  1. N CNTL,CONT,TEXT,LEAD,TRAIL,STR
  1. S TEXT=$$UP^XLFSTR($G(X)),CNTL=$$UP^XLFSTR($G(Y))
  1. Q:'$L(TEXT) 0 Q:'$L(CNTL) 0 Q:$L(CNTL)>$L(TEXT) 0
  1. S (X,CONT)=0 I +($G(EXACT))>0 S X=0 D Q X
  1. . F TRAIL=" ","/","-","(","<","{","[","," D Q:CONT>0
  1. . . N STR S STR=CNTL_TRAIL S:$E(TEXT,1,$L(STR))=STR CONT=1 S:CONT>0 X=CONT
  1. . Q:CONT>0 F LEAD=" ","/","-","(","<","{","[","," D Q:CONT>0
  1. . . N STR S STR=LEAD_CNTL S:$E(TEXT,($L(TEXT)-$L(STR)),$L(TEXT))=STR CONT=1 S:CONT>0 X=CONT
  1. . Q:CONT>0 F LEAD=" ","/","-","(","<","{","[","," D Q:CONT>0
  1. . . F TRAIL=" ","-",")",">","}","]","," D Q:CONT>0
  1. . . . N STR S STR=LEAD_CNTL_TRAIL S:TEXT[STR CONT=1 S:CONT>0 X=CONT
  1. . S:CONT>0 X=CONT
  1. S:$E(TEXT,1,$L(CNTL))=CNTL CONT=1
  1. S:CONT>0 X=CONT Q:CONT>0 X
  1. F LEAD=" ","/","-","(","<","{","[","," D Q:CONT>0
  1. . N STR S STR=LEAD_CNTL S:TEXT[STR CONT=1 S:CONT>0 X=CONT
  1. Q:CONT>0 X F LEAD=" ","/","-","(","<","{","[","," D Q:CONT>0
  1. . N TRAIL F TRAIL=" ","-",")",">","}","]","," D Q:CONT>0
  1. . . N STR S STR=LEAD_CNTL_TRAIL S:TEXT[STR CONT=1 S:CONT>0 X=CONT
  1. S:CONT>0 X=CONT
  1. Q X
  1. LC(X) ; Leading Character
  1. S X=$G(X) S X=$$UP^XLFSTR($E(X,1))_$$LOW^XLFSTR($E(X,2,$L(X)))
  1. Q X
  1. SS ; Show Select/Find Global Arrays
  1. N NN,NC,EX S EX=0 S NN="^TMP(""ICD9"","_$J_")",NC="^TMP(""ICD9"","_$J_","
  1. F S NN=$Q(@NN) Q:'$L(NN)!(NN'[NC) D Q:EX>20
  1. . W !,NN,"=",$E(@NN,1,48) S EX=EX+1
  1. S EX=0 S NN="^TMP(""ICD0"","_$J_")",NC="^TMP(""ICD0"","_$J_","
  1. F S NN=$Q(@NN) Q:'$L(NN)!(NN'[NC) D Q:EX>20
  1. . W !,NN,"=",$E(@NN,1,48) S EX=EX+1
  1. Q