| 1 | LEXASO ; ISL/KER Look-up Display String (Sources) ; 05/14/2003
 | 
|---|
| 2 |  ;;2.0;LEXICON UTILITY;**25,32**;Sep 23, 1996;Build 1
 | 
|---|
| 3 |  ;
 | 
|---|
| 4 |  ; Entry S X=$$SO^LEXASO(IEN,SAB,ALL,DATE)
 | 
|---|
| 5 |  ;
 | 
|---|
| 6 |  ;       IEN is an internal entry number in file 757.01
 | 
|---|
| 7 |  ;           representing an expression
 | 
|---|
| 8 |  ;
 | 
|---|
| 9 |  ;       SAB is the source abbreviation of the classification
 | 
|---|
| 10 |  ;           coding system, i.e., ICD, CPT, DSM, etc.
 | 
|---|
| 11 |  ;
 | 
|---|
| 12 |  ;       ALL is a flag 
 | 
|---|
| 13 |  ;
 | 
|---|
| 14 |  ;           0 - do not display all codes associated of the
 | 
|---|
| 15 |  ;               major concept, display the codes only for the
 | 
|---|
| 16 |  ;               expression
 | 
|---|
| 17 |  ;
 | 
|---|
| 18 |  ;           1 - display all codes associated for the major 
 | 
|---|
| 19 |  ;               concept
 | 
|---|
| 20 |  ;
 | 
|---|
| 21 |  ;       DATE is used to screen out inactive codes
 | 
|---|
| 22 |  ;
 | 
|---|
| 23 |  ; LEXCC(   Array of classification codes
 | 
|---|
| 24 |  ;
 | 
|---|
| 25 |  ; LEXA     Flag - 1 All codes, 0 only the expression codes
 | 
|---|
| 26 |  ; LEXM     Flag - M Major Concept
 | 
|---|
| 27 |  ;
 | 
|---|
| 28 |  ; LEXC     Counter, # $Piece of string LEXSA (SAB)
 | 
|---|
| 29 |  ;
 | 
|---|
| 30 |  ; LEXMC    IEN in file 757      Major Concept
 | 
|---|
| 31 |  ; LEXME    IEN in file 757.01   Major Concept Expression
 | 
|---|
| 32 |  ; LEXEX    IEN in file 757.01   Expression
 | 
|---|
| 33 |  ; LEXSO    IEN in file 757.02   Sources
 | 
|---|
| 34 |  ;
 | 
|---|
| 35 |  ; LEXSA    Source Abbreviation i.e., ICD or ICD/CPT
 | 
|---|
| 36 |  ; LEXSC    Source Classification Code
 | 
|---|
| 37 |  ; LEXSR    Source Abbreviation single only i.e., ICD, CPT
 | 
|---|
| 38 |  ; LEXST    String of classification sources and codes
 | 
|---|
| 39 |  ;
 | 
|---|
| 40 |  ; LEXX     Return value
 | 
|---|
| 41 |  ;
 | 
|---|
| 42 | SO(LEXX,LEXSA,LEXA,LEXVDT) ; Return string of source codes for LEXX SAB
 | 
|---|
| 43 |  Q:+($G(LEXX))=0!('$L($G(LEXSA))) ""
 | 
|---|
| 44 |  Q:'$L($G(^LEX(757.01,LEXX,0))) ""
 | 
|---|
| 45 |  ;
 | 
|---|
| 46 |  N LEXCC,LEXM,LEXC,LEXMC,LEXME,LEXEX,LEXSO,LEXSC,LEXSR,LEXST
 | 
|---|
| 47 |  ;
 | 
|---|
| 48 |  S LEXEX=+LEXX,LEXX="",LEXA=+($G(LEXA)),LEXMC=0
 | 
|---|
| 49 |  S LEXM=$P($G(^LEX(757.01,LEXEX,1)),"^",2),LEXST=""
 | 
|---|
| 50 |  ; Codes for an expression     D EXP
 | 
|---|
| 51 |  I LEXM'=1!(+($G(LEXA))=0) D EXP G EXIT
 | 
|---|
| 52 |  ; Codes for a major concept   D MAJ
 | 
|---|
| 53 |  I LEXM=1 S LEXMC=LEXEX D MAJ
 | 
|---|
| 54 | EXIT ; Clean up and quit
 | 
|---|
| 55 |  Q LEXX
 | 
|---|
| 56 | EXP ; Source string for an expression
 | 
|---|
| 57 |  I LEXSA'["/" D CODES(LEXEX,LEXSA,$G(LEXVDT)) S LEXX=$$ASSEM Q
 | 
|---|
| 58 |  I LEXSA["/" D  S LEXX=$$ASSEM
 | 
|---|
| 59 |  . N LEXC F LEXC=1:1:$L(LEXSA,"/") D
 | 
|---|
| 60 |  . . D CODES(LEXEX,$P(LEXSA,"/",LEXC),$G(LEXVDT))
 | 
|---|
| 61 |  Q
 | 
|---|
| 62 | MAJ ; Source string for a major concept
 | 
|---|
| 63 |  S LEXMC=$P($G(^LEX(757.01,LEXEX,1)),"^",1),LEXEX=0
 | 
|---|
| 64 |  S LEXEX=0 F  S LEXEX=$O(^LEX(757.02,"AMC",LEXMC,LEXEX)) Q:+LEXEX=0  D
 | 
|---|
| 65 |  . N LEXME S LEXME=+($G(^LEX(757.02,LEXEX,0)))
 | 
|---|
| 66 |  . I LEXSA'["/" D CODES(LEXME,LEXSA,$G(LEXVDT)) Q
 | 
|---|
| 67 |  . I LEXSA["/" D  Q
 | 
|---|
| 68 |  . . N LEXC F LEXC=1:1:$L(LEXSA,"/") D
 | 
|---|
| 69 |  . . . D CODES(LEXME,$P(LEXSA,"/",LEXC),$G(LEXVDT))
 | 
|---|
| 70 |  S LEXX=$$ASSEM
 | 
|---|
| 71 |  Q
 | 
|---|
| 72 | CODES(LEXEX,LEXSA,LEXVDT) ; Get Source Codes
 | 
|---|
| 73 |  Q:$L($G(LEXSA))'=3  N LEXSO,LEXSR,LEXST,LEXSTA,LEXCD S LEXST=""
 | 
|---|
| 74 |  S LEXSO=0 F  S LEXSO=$O(^LEX(757.02,"B",LEXEX,LEXSO)) Q:+LEXSO=0  D
 | 
|---|
| 75 |  . S LEXCD=$P($G(^LEX(757.02,LEXSO,0)),"^",2) Q:'$L(LEXCD)
 | 
|---|
| 76 |  . S LEXSTA=$$STATCHK^LEXSRC2(LEXCD,$G(LEXVDT)) Q:+LEXSTA'>0
 | 
|---|
| 77 |  . I $E($G(^LEX(757.03,$P($G(^LEX(757.02,LEXSO,0)),"^",3),0)),1,3)=LEXSA D
 | 
|---|
| 78 |  . . S LEXSR=$P($G(^LEX(757.03,$P($G(^LEX(757.02,LEXSO,0)),"^",3),0)),"^",2)
 | 
|---|
| 79 |  . . S LEXCC(LEXSR,(($P($G(^LEX(757.02,LEXSO,0)),"^",2))_" "))=""
 | 
|---|
| 80 |  . . ; Primary Code Saved - p32
 | 
|---|
| 81 |  . . S:$P($G(^LEX(757.02,LEXSO,0)),"^",7)=1 LEXCC(LEXSR,"P",(($P($G(^LEX(757.02,LEXSO,0)),"^",2))_" "))=""
 | 
|---|
| 82 |  Q
 | 
|---|
| 83 | ASSEM(LEXX) ; Assemble display string  (SOURCE CODE/CODE/CODE)
 | 
|---|
| 84 |  Q:'$D(LEXCC) ""
 | 
|---|
| 85 |  Q:$O(LEXCC(""))="" ""
 | 
|---|
| 86 |  N LEXSR,LEXST S LEXSR=""
 | 
|---|
| 87 |  F  S LEXSR=$O(LEXCC(LEXSR)) Q:LEXSR=""  D
 | 
|---|
| 88 |  . N LEXSC S LEXSC="",LEXST="("_LEXSR_" "
 | 
|---|
| 89 |  . ; Primary Code listed first - p32
 | 
|---|
| 90 |  . I $D(LEXCC(LEXSR,"P")) D
 | 
|---|
| 91 |  . . N LEXSC S LEXSC=$O(LEXCC(LEXSR,"P",""))
 | 
|---|
| 92 |  . . S:$L(LEXSC) LEXST=LEXST_$$TRIM(LEXSC)_"/"
 | 
|---|
| 93 |  . . K LEXCC(LEXSR,"P") K:$L(LEXSC) LEXCC(LEXSR,LEXSC)
 | 
|---|
| 94 |  . S LEXSC="" F  S LEXSC=$O(LEXCC(LEXSR,LEXSC)) Q:LEXSC=""  D
 | 
|---|
| 95 |  . . S LEXST=LEXST_$$TRIM(LEXSC)_"/"
 | 
|---|
| 96 |  . . K LEXCC(LEXSR,LEXSC)
 | 
|---|
| 97 |  . S LEXCC(LEXSR)=$E(LEXST,1,($L(LEXST)-1))_")"
 | 
|---|
| 98 |  S (LEXST,LEXSR)=""
 | 
|---|
| 99 |  F  S LEXSR=$O(LEXCC(LEXSR)) Q:LEXSR=""  D
 | 
|---|
| 100 |  . S LEXST=LEXST_" "_LEXCC(LEXSR)
 | 
|---|
| 101 |  F  Q:$E(LEXST,1)'=" "  S LEXST=$E(LEXST,2,$L(LEXST))
 | 
|---|
| 102 |  S LEXX=LEXST Q LEXX
 | 
|---|
| 103 | TRIM(LEXX) ; Trim spaces
 | 
|---|
| 104 |  F  Q:$E(LEXX,1)'=" "  S LEXX=$E(LEXX,2,$L(LEXX))
 | 
|---|
| 105 |  F  Q:$E(LEXX,$L(LEXX))'=" "  S LEXX=$E(LEXX,1,($L(LEXX)-1))
 | 
|---|
| 106 |  Q LEXX
 | 
|---|