| 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 | 
|---|