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

LEXASO.m

Go to the documentation of this file.
  1. LEXASO ;ISL/KER - Look-up Display String (Sources) ;05/23/2017
  1. ;;2.0;LEXICON UTILITY;**25,32,73,80,103**;Sep 23, 1996;Build 2
  1. ;
  1. ; Global Variables
  1. ; ^LEX(757.01, SACC 1.3
  1. ; ^LEX(757.02, SACC 1.3
  1. ; ^LEX(757.03, SACC 1.3
  1. ; ^TMP("LEXSCH") SACC 2.3.2.5.1
  1. ;
  1. ; External References
  1. ; $$CODEN^ICDEX ICR 5747
  1. ; $$CSI^ICDEX ICR 5747
  1. ; $$CODEN^ICPTCOD ICR 1995
  1. ;
  1. ; Local Variables NEWed or KILLed Elsewhere
  1. ; LEXSOA Array of Codes
  1. ;
  1. SO(LEXX,LEXSA,LEXA,LEXVDT) ; Return string of source codes for LEXX SAB
  1. ;
  1. ; Input
  1. ;
  1. ; LEXX IEN of Expression file 757.01
  1. ; LEXSA Source abbreviation string
  1. ; LEXA ALL is a flag
  1. ; 0 - Expression codes only
  1. ; 1 - Concept codes
  1. ; LEXVDT Versioning Date
  1. ;
  1. ; Output
  1. ;
  1. ; $$SO String of Source Codes i.e.,
  1. ; (ICD-9-CM 799.9)
  1. ;
  1. I +($G(LEXAFMT))>0 D SOA^LEXASO(LEXX,$G(^TMP("LEXSCH",$J,"DIS",0)),1,$G(LEXVDT),.LEXSOA) Q ""
  1. Q:+($G(LEXX))=0!('$L($G(LEXSA))) "" Q:'$L($G(^LEX(757.01,LEXX,0))) ""
  1. N LEXCC,LEXM,LEXC,LEXMC,LEXME,LEXEX,LEXSO,LEXSC,LEXSR,LEXST D VDT^LEXU
  1. S LEXEX=+LEXX,LEXX="",LEXA=+($G(LEXA)),LEXMC=0
  1. S LEXM=$P($G(^LEX(757.01,LEXEX,1)),"^",2),LEXST=""
  1. ; Codes for an expression D EXP
  1. I LEXM'=1!(+($G(LEXA))=0) D EXP G EXIT
  1. ; Codes for a major concept D MAJ
  1. I LEXM=1 S LEXMC=LEXEX D MAJ
  1. EXIT ; Clean up and quit
  1. Q LEXX
  1. SOA(LEXX,LEXSA,LEXA,LEXVDT,LEXARY) ; Return array of source codes for LEXX SAB
  1. ;
  1. ; Input
  1. ;
  1. ; LEXX IEN of Expression file 757.01
  1. ; LEXSA Source abbreviation string
  1. ; LEXA ALL is a flag
  1. ; 0 - Expression codes only
  1. ; 1 - Concept codes
  1. ; LEXVDT Versioning Date
  1. ; LEXARY Array passed by Reference
  1. ;
  1. ; Output
  1. ;
  1. ; $$SO Success
  1. ; 0 - No codes found
  1. ; 1 - Codes found
  1. ;
  1. ; LEXARY(X) Array of Sources passed by Reference
  1. ;
  1. ; X = Coding System (pointer to 757.03)
  1. ;
  1. ; LEXARY(X,"P") = 3 Piece "^" delimited string
  1. ; 1 Code
  1. ; 2 Coding System the
  1. ; Preferred Term of
  1. ; the code
  1. ; 3 Variable Pointer to
  1. ; a National file if
  1. ; one exist
  1. ;
  1. ; LEXARY(X,###) = 3 Piece "^" delimited string
  1. ; 1 Code
  1. ; 2 Coding System the
  1. ; an expression that is
  1. ; not the Preferred
  1. ; Term for the code
  1. ; 3 Variable Pointer to
  1. ; a National file if
  1. ; one exist
  1. ;
  1. Q:+($G(LEXX))=0!('$L($G(LEXSA))) "" Q:'$L($G(^LEX(757.01,LEXX,0))) ""
  1. N LEXCC,LEXM,LEXC,LEXMC,LEXME,LEXEX,LEXSO,LEXSC,LEXSR,LEXST,LEXAFMT D VDT^LEXU
  1. S LEXEX=+LEXX,LEXX="",LEXA=+($G(LEXA)),LEXMC=0,LEXAFMT=1 K LEXARY
  1. S LEXM=$P($G(^LEX(757.01,LEXEX,1)),"^",2),LEXST=""
  1. ; Codes for an expression D EXP
  1. I LEXM'=1!(+($G(LEXA))=0) D EXP G EXIT
  1. ; Codes for a major concept D MAJ
  1. I LEXM=1 S LEXMC=LEXEX D MAJ
  1. Q:$O(LEXARY(0))>0 1
  1. Q 0
  1. EXP ; Source string for an expression
  1. I LEXSA'["/" D CODES(LEXEX,LEXSA,$G(LEXVDT)) S:+($G(LEXAFMT))'>0 LEXX=$$ASSEM Q
  1. I LEXSA["/" D S:+($G(LEXAFMT))'>0 LEXX=$$ASSEM
  1. . N LEXC F LEXC=1:1:$L(LEXSA,"/") D
  1. . . D CODES(LEXEX,$P(LEXSA,"/",LEXC),$G(LEXVDT))
  1. Q
  1. MAJ ; Source string for a major concept
  1. S LEXMC=$P($G(^LEX(757.01,LEXEX,1)),"^",1),LEXEX=0
  1. S LEXEX=0 F S LEXEX=$O(^LEX(757.02,"AMC",LEXMC,LEXEX)) Q:+LEXEX=0 D
  1. . N LEXME S LEXME=+($G(^LEX(757.02,LEXEX,0)))
  1. . I LEXSA'["/" D CODES(LEXME,LEXSA,$G(LEXVDT)) Q
  1. . I LEXSA["/" D Q
  1. . . N LEXC F LEXC=1:1:$L(LEXSA,"/") D
  1. . . . D CODES(LEXME,$P(LEXSA,"/",LEXC),$G(LEXVDT))
  1. S:+($G(LEXAFMT))'>0 LEXX=$$ASSEM
  1. Q
  1. CODES(LEXEX,LEXSA,LEXVDT) ; Get Source Codes
  1. Q:$L($G(LEXSA))'=3 N LEXCD,LEXCN,LEXCP,LEXCS,LEXHE,LEXHI,LEXHN,LEXHS,LEXSAI,LEXSAN,LEXSO,LEXSR,LEXST,LEXSTA
  1. S LEXST="",LEXSAI=+($O(^LEX(757.03,"ASAB",LEXSA,0))) Q:+LEXSAI'>0 S LEXSAN=$P($G(^LEX(757.03,+LEXSAI,0)),"^",2) Q:'$L(LEXSAN)
  1. S LEXSO=0 F S LEXSO=$O(^LEX(757.02,"B",LEXEX,LEXSO)) Q:+LEXSO=0 D
  1. . S LEXCN=$G(^LEX(757.02,LEXSO,0)),LEXCD=$P(LEXCN,"^",2) Q:'$L(LEXCD) S LEXCS=$P(LEXCN,"^",3) Q:+LEXCS'=+LEXSAI
  1. . S LEXCP=$P(LEXCN,"^",5),LEXHE=$S(+LEXVDT>0:(LEXVDT_".99999"),1:" "),LEXHE=$O(^LEX(757.02,+LEXSO,4,"B",LEXHE),-1) Q:+LEXHE'>0
  1. . S LEXHI=$O(^LEX(757.02,+LEXSO,4,"B",+LEXHE," "),-1)
  1. . S LEXHN=$G(^LEX(757.02,+LEXSO,4,+LEXHI,0)),LEXHS=$P(LEXHN,"^",2) Q:+($G(LEXHS))'>0
  1. . I +($G(LEXAFMT))=1 D Q
  1. . . N LEXI,LEXO,LEXVP S LEXVP=""
  1. . . I +LEXCS=1!(+LEXCS=30) D
  1. . . . N LEXP,LEXS S LEXP=$$CODEN^ICDEX(LEXCD,80),LEXS=$$CSI^ICDEX(80,+LEXP) S:+LEXP>0&(LEXS=LEXCS) LEXVP=+LEXP_";ICD9("
  1. . . I +LEXCS=2!(+LEXCS=31) D
  1. . . . N LEXP,LEXS S LEXP=$$CODEN^ICDEX(LEXCD,80.1),LEXS=$$CSI^ICDEX(80.1,+LEXP) S:+LEXP>0&(LEXS=LEXCS) LEXVP=+LEXP_";ICD0("
  1. . . I +LEXCS=3!(+LEXCS=4) D
  1. . . . N LEXP S LEXP=$$CODEN^ICPTCOD(LEXCD) S:+LEXP>0 LEXVP=+LEXP_";ICPT("
  1. . . S LEXO=LEXCD_"^"_LEXSAN S:$L(LEXVP) LEXO=LEXO_"^"_LEXVP
  1. . . N LEXI I LEXCP>0 S LEXARY(+LEXCS,"P")=LEXO Q
  1. . . S LEXI=$O(LEXARY(+LEXCS," "),-1)+1,LEXARY(+LEXCS,+LEXI)=LEXO
  1. . S LEXSR=$P($G(^LEX(757.03,$P($G(^LEX(757.02,LEXSO,0)),"^",3),0)),"^",2)
  1. . S LEXCC(LEXSR,(($P($G(^LEX(757.02,LEXSO,0)),"^",2))_" "))=""
  1. . ; Primary Code Saved - p32
  1. . S:$P($G(^LEX(757.02,LEXSO,0)),"^",7)=1 LEXCC(LEXSR,"P",(($P($G(^LEX(757.02,LEXSO,0)),"^",2))_" "))=""
  1. Q
  1. ASSEM(LEXX) ; Assemble display string (SOURCE CODE/CODE/CODE)
  1. Q:'$D(LEXCC) "" Q:$O(LEXCC(""))="" "" N LEXSR,LEXST S LEXSR=""
  1. D SHELLY F S LEXSR=$O(LEXCC(LEXSR)) Q:LEXSR="" D
  1. . N LEXSC S LEXSC="",LEXST="("_LEXSR_" "
  1. . ; Primary Code listed first - p32
  1. . I $D(LEXCC(LEXSR,"P")) D
  1. . . N LEXSC S LEXSC=$O(LEXCC(LEXSR,"P",""))
  1. . . S:$L(LEXSC) LEXST=LEXST_$$TRIM(LEXSC)_"/"
  1. . . K LEXCC(LEXSR,"P") K:$L(LEXSC) LEXCC(LEXSR,LEXSC)
  1. . S LEXSC="" F S LEXSC=$O(LEXCC(LEXSR,LEXSC)) Q:LEXSC="" D
  1. . . S LEXST=LEXST_$$TRIM(LEXSC)_"/"
  1. . . K LEXCC(LEXSR,LEXSC)
  1. . S LEXCC(LEXSR)=$E(LEXST,1,($L(LEXST)-1))_")"
  1. S (LEXST,LEXSR)=""
  1. F S LEXSR=$O(LEXCC(LEXSR)) Q:LEXSR="" D
  1. . S LEXST=LEXST_" "_LEXCC(LEXSR)
  1. F Q:$E(LEXST,1)'=" " S LEXST=$E(LEXST,2,$L(LEXST))
  1. S LEXX=LEXST Q LEXX
  1. SHELLY ; Suppress other (non-primary) codes
  1. N LEXSY,LEXCD S LEXSY="" F S LEXSY=$O(LEXCC(LEXSY)) Q:'$L(LEXSY) D
  1. . N LEXPF S LEXPF=$O(LEXCC(LEXSY,"P","")) Q:'$L(LEXPF)
  1. . S LEXCD="" F S LEXCD=$O(LEXCC(LEXSY,LEXCD)) Q:'$L(LEXCD) D
  1. . . Q:LEXCD="P" K:LEXCD'=LEXPF LEXCC(LEXSY,LEXCD)
  1. Q
  1. TRIM(LEXX) ; Trim spaces
  1. F Q:$E(LEXX,1)'=" " S LEXX=$E(LEXX,2,$L(LEXX))
  1. F Q:$E(LEXX,$L(LEXX))'=" " S LEXX=$E(LEXX,1,($L(LEXX)-1))
  1. Q LEXX