| [613] | 1 | LEXXFI7 ; ISL/KER - File Info - Prompts and Header   ; 02/22/2007 | 
|---|
|  | 2 | ;;2.0;LEXICON UTILITY;**32,49**;Sep 23, 1996;Build 3 | 
|---|
|  | 3 | Q | 
|---|
|  | 4 | ; | 
|---|
|  | 5 | ; Global Variables | 
|---|
|  | 6 | ;   ^%ZOSF("UCI")       DBIA 10096 | 
|---|
|  | 7 | ;   ^%ZOSF("PROD")      DBIA 10096 | 
|---|
|  | 8 | ; | 
|---|
|  | 9 | ; External References | 
|---|
|  | 10 | ;   DBIA 10026  ^DIR | 
|---|
|  | 11 | ;   DBIA 10103  $$FMTE^XLFDT | 
|---|
|  | 12 | ;   DBIA 10103  $$NOW^XLFDT | 
|---|
|  | 13 | ;   DBIA  2056  $$GET1^DIQ (file #200) | 
|---|
|  | 14 | ;   DBIA 10096  ^%ZOSF("UCI") | 
|---|
|  | 15 | ;   DBIA 10096  ^%ZOSF("PROD") | 
|---|
|  | 16 | ; | 
|---|
|  | 17 | MT(X) ; Method - One or All Files | 
|---|
|  | 18 | N DIR,DIROUT,DIRUT,DTOUT,DUOUT,Y | 
|---|
|  | 19 | S DIR(0)="SAO^O:Checksum for ONE file;A:Checksum for ALL files (LEX/ICD/CPT)" | 
|---|
|  | 20 | S DIR("A",1)=" Compute Checksum for:",DIR("A",2)=" " | 
|---|
|  | 21 | S DIR("A",3)="   One Lexicon, ICD or CPT file" | 
|---|
|  | 22 | S DIR("A",4)="   All Lexicon, ICD or CPT files (757*/80*/81*)" | 
|---|
|  | 23 | S DIR("A",5)=" ",DIR("A")=" Select One or All:  (O/A)  " | 
|---|
|  | 24 | S DIR("B")="O",(DIR("?"),DIR("??"))="^D MTH^LEXXFI7" | 
|---|
|  | 25 | W ! D ^DIR S X=$S(Y="O":"ONE",Y="A":"ALL",1:"") | 
|---|
|  | 26 | Q X | 
|---|
|  | 27 | MTH ;   Method Help | 
|---|
|  | 28 | W !,"     Do you wish to compute the checksum for a single Lexicon, ICD" | 
|---|
|  | 29 | W !,"     or CPT file or all Lexicon, ICD and CPT files (757*/80*/81*)" | 
|---|
|  | 30 | W:$G(X)["??" !,"     Answer either 'O'ne or 'A'll or '^' to exit" | 
|---|
|  | 31 | Q | 
|---|
|  | 32 | ; | 
|---|
|  | 33 | CC(X) ; Checksum AND Count | 
|---|
|  | 34 | N DIR,DIROUT,DIRUT,DTOUT,DUOUT,Y | 
|---|
|  | 35 | S DIR(0)="YAO",DIR("A")=" Include a Record Count with the Checksum?  (Y/N)  " | 
|---|
|  | 36 | S DIR("B")="N",(DIR("?"),DIR("??"))="^D CCH^LEXXFI7" | 
|---|
|  | 37 | W ! D ^DIR S X=$S(+Y>0:1,1:0) | 
|---|
|  | 38 | Q X | 
|---|
|  | 39 | CCH ;   Checksum AND Count Help | 
|---|
|  | 40 | W !,"     Answer 'Yes' to include a count of the total the number of records" | 
|---|
|  | 41 | W !,"     in the file/sub-file along with the checksum" | 
|---|
|  | 42 | Q | 
|---|
|  | 43 | ; | 
|---|
|  | 44 | FI(X) ; Select Lexicon/ICD File | 
|---|
|  | 45 | N DIR,DIROUT,DIRUT,DTOUT,DUOUT,Y | 
|---|
|  | 46 | S DIR(0)="FAO^1:45" | 
|---|
|  | 47 | S DIR("A")=" Select File:  " | 
|---|
|  | 48 | S (DIR("?"),DIR("??"))="^D FIH^LEXXFI7" D ^DIR S X=$$FOT(Y) | 
|---|
|  | 49 | Q X | 
|---|
|  | 50 | FIH ;   File Help | 
|---|
|  | 51 | W !,"     Select either a Lexicon, ICD or CPT file:" | 
|---|
|  | 52 | W !!,"                          Lexicon                  ICD       CPT" | 
|---|
|  | 53 | W !,"     ----------------------------------------       ----      ----" | 
|---|
|  | 54 | W !,"     757        757.03     757.12     757.31        80        81" | 
|---|
|  | 55 | W !,"     757.001    757.03     757.13     757.4         80.1      81.1" | 
|---|
|  | 56 | W !,"     757.01     757.05     757.14     757.41        80.3      81.2" | 
|---|
|  | 57 | W !,"     757.011    757.06     757.2                              81.3" | 
|---|
|  | 58 | W !,"     757.014    757.1      757.21" | 
|---|
|  | 59 | W !,"     757.02     757.11     757.3 " | 
|---|
|  | 60 | Q | 
|---|
|  | 61 | FOT(X) ;   File Output Transform | 
|---|
|  | 62 | N LEX,LEXX | 
|---|
|  | 63 | S LEXX=$G(X) Q:'$L(X) "^"  D ARY(LEXX,.LEX) | 
|---|
|  | 64 | S:+($G(LEX(0)))=1 LEXX=$$ONE(X,.LEX) | 
|---|
|  | 65 | S:+($G(LEX(0)))>1 LEXX=$$MULT(X,.LEX) | 
|---|
|  | 66 | S X=$S(+LEXX>0:+LEXX,1:"^") | 
|---|
|  | 67 | Q X | 
|---|
|  | 68 | ONE(X,LEX) ;   One Entry | 
|---|
|  | 69 | S X=+($G(LEX(1))) | 
|---|
|  | 70 | I $L($P($G(LEX(1)),"^",2)),+X>0 D | 
|---|
|  | 71 | . W "    ",$P($G(LEX(1)),"^",2)," (#",+X,")" | 
|---|
|  | 72 | Q:+X'>0 "^"  Q X | 
|---|
|  | 73 | MULT(X,LEX) ;   Multiple Entries | 
|---|
|  | 74 | N LEXE,LEXEX,LEXFI,LEXI,LEXM,LEXMAX,LEXNAM,LEXS | 
|---|
|  | 75 | S LEXMAX=$G(LEX(0)) Q:+LEXMAX'>1  W ! W !," ",LEXMAX," matches found" | 
|---|
|  | 76 | S LEXS=0,LEXEX=0 F LEXI=1:1:LEXMAX Q:((LEXS>0)&(LEXS<LEXI+1))  Q:LEXEX  D  Q:LEXEX | 
|---|
|  | 77 | . S LEXE=$G(LEX(LEXI)),LEXNAM=$P(LEXE,"^",2),LEXFI=+LEXE Q:'$L(LEXNAM)  Q:+LEXFI'>0  S LEXM=LEXI | 
|---|
|  | 78 | . W:LEXI#5=1 ! W !," ",$J(LEXI,4),".  ",LEXNAM," (#",+LEXFI,")" | 
|---|
|  | 79 | . W:LEXI#5=0 ! S:LEXI#5=0 LEXS=$$SEL(LEXM,.LEX) S:LEXS["^" LEXEX=1 | 
|---|
|  | 80 | I LEXI#5'=0,+LEXS=0 W ! S LEXS=$$SEL(LEXM,.LEX) S:LEXS["^" LEXEX=1 | 
|---|
|  | 81 | S X="^" S:'LEXEX&(+LEXS>0) X=+LEXS S:+X'>0 X="^" | 
|---|
|  | 82 | Q X | 
|---|
|  | 83 | SEL(X,LEX) ;     Select Multiple | 
|---|
|  | 84 | N DIR,DIROUT,DIRUT,DTOUT,DUOUT,LEXM,Y S LEXM=+($G(X)) Q:LEXM=0 -1 | 
|---|
|  | 85 | S:+($O(LEX(+($G(LEXI)))))>0 DIR("A")=" Select 1-"_LEXM_" or '^' to exit:  " | 
|---|
|  | 86 | S:+($O(LEX(+($G(LEXI)))))'>0 DIR("A")=" Select 1-"_LEXM_":  " | 
|---|
|  | 87 | S (DIR("?"),DIR("??"))="Answer must be from 1 to "_LEXM_", or <Return> to continue  " | 
|---|
|  | 88 | S DIR(0)="NAO^1:"_LEXM_":0" D ^DIR S X="" S:$D(DTOUT)!(X[U) X=U | 
|---|
|  | 89 | I $L($P($G(LEX(+Y)),"^",2)),+($G(LEX(+Y)))>0 D | 
|---|
|  | 90 | . W "    ",$P($G(LEX(+Y)),"^",2)," (#",+($G(LEX(+Y))),")" | 
|---|
|  | 91 | . S X=+($G(LEX(+Y))) | 
|---|
|  | 92 | Q X | 
|---|
|  | 93 | ARY(X,LEX) ;   Build Array  of Files | 
|---|
|  | 94 | N LEXF,LEXNM,LEXO,LEXX,Y | 
|---|
|  | 95 | S LEXX=$TR($G(X),"abcdefghijklmnopqrstuvwxyz","ABCDEFGHIJKLMNOPQRSTUVWXYZ") N X,Y | 
|---|
|  | 96 | Q:'$L(LEXX) ""  I +LEXX=LEXX D  Q | 
|---|
|  | 97 | . N LEXO,LEXN,LEXC S LEXO=LEXX-.00000001 | 
|---|
|  | 98 | . F  S LEXO=$O(@("^DIC("_LEXO_")")) Q:+LEXO=0!($E(LEXO,1,$L(LEXX))'=LEXX)  D | 
|---|
|  | 99 | . . N LEXNM S LEXNM=$$FN^LEXXFI8(LEXO) Q:'$L(LEXNM)  S LEX(0)=($O(LEX(" "),-1)+1),LEX(+LEX(0))=+LEXO_"^"_LEXNM | 
|---|
|  | 100 | S LEXO=$E(LEXX,1,($L(LEXX)-1))_$C($A($E(LEXX,$L(LEXX)))-1)_"~" | 
|---|
|  | 101 | F  S LEXO=$O(@("^DIC(""B"","_LEXO_")")) Q:LEXO=""  Q:$E(LEXO,1,$L(LEXX))'[LEXX  D | 
|---|
|  | 102 | . S LEXF=0 F  S LEXF=$O(@("^DIC(""B"","_LEXO_","_LEXF_")")) Q:+LEXF'>0  D | 
|---|
|  | 103 | . . Q:+($$LEX^LEXXFI8(LEXF))'>0&(+($$IC^LEXXFI8(LEXF))'>0)  N LEXNM S LEXNM=$$FN^LEXXFI8(LEXF) | 
|---|
|  | 104 | . . Q:'$L(LEXNM)  S LEX(0)=($O(LEX(" "),-1)+1),LEX(+LEX(0))=+LEXF_"^"_LEXNM | 
|---|
|  | 105 | Q | 
|---|
|  | 106 | ; | 
|---|
|  | 107 | ; Miscellaneous | 
|---|
|  | 108 | U(X) ;   UCI where Lexicon is installed | 
|---|
|  | 109 | N LEXU,LEXP,LEXT,Y X ^%ZOSF("UCI") S LEXU=Y,LEXP="" S:LEXU=^%ZOSF("PROD")!($P(LEXU,",",1)=^%ZOSF("PROD")) LEXP=" (Production)" | 
|---|
|  | 110 | S:LEXU'=^%ZOSF("PROD")&($P(LEXU,",",1)'=^%ZOSF("PROD")) LEXP=" (Test)" S X="",$P(X,"^",1)=LEXU,$P(X,"^",2)=LEXP | 
|---|
|  | 111 | Q X | 
|---|
|  | 112 | A(X) ;   As of date/time | 
|---|
|  | 113 | N LEXX S LEXX=$$NOW^XLFDT,LEXX=$$FMTE^XLFDT(LEXX,"1") | 
|---|
|  | 114 | S:LEXX["@" LEXX=$P(LEXX,"@",1)_"  "_$P(LEXX,"@",2,299) | 
|---|
|  | 115 | S X=LEXX | 
|---|
|  | 116 | Q X | 
|---|
|  | 117 | P(X) ;   Person | 
|---|
|  | 118 | N LEXDUZ,LEXPH,LEXNM | 
|---|
|  | 119 | S LEXDUZ=+($G(DUZ)),LEXNM=$$GET1^DIQ(200,+($G(LEXDUZ)),.01) Q:'$L(LEXNM) "UNKNOWN^" | 
|---|
|  | 120 | S LEXDUZ=+($G(DUZ)) S LEXPH=$$GET1^DIQ(200,+($G(LEXDUZ)),.132) | 
|---|
|  | 121 | S:LEXPH="" LEXPH=$$GET1^DIQ(200,+($G(LEXDUZ)),.133) | 
|---|
|  | 122 | S:LEXPH="" LEXPH=$$GET1^DIQ(200,+($G(LEXDUZ)),.134) | 
|---|
|  | 123 | S:LEXPH="" LEXPH=$$GET1^DIQ(200,+($G(LEXDUZ)),.135) | 
|---|
|  | 124 | S LEXDUZ=$$PM(LEXNM) | 
|---|
|  | 125 | S X=LEXDUZ_"^"_LEXPH | 
|---|
|  | 126 | Q X | 
|---|
|  | 127 | PM(X) ;     Person, Mixed Case | 
|---|
|  | 128 | N LEXF,LEXL,LEXP S LEXP=$G(X),LEXL=$$MX($P(LEXP,",",1)),LEXF=$P(LEXP,",",2) | 
|---|
|  | 129 | S LEXL(1)=$$MX($P(LEXL,"-",1)),LEXL(2)=$$MX($P(LEXL(1)," ",2,2)),LEXL(1)=$$MX($P(LEXL(1)," ",1)) | 
|---|
|  | 130 | S:$L(LEXL(1))&($L(LEXL(2))) LEXL(1)=LEXL(1)_" "_LEXL(2) | 
|---|
|  | 131 | S LEXL(3)=$$MX($P(LEXL,"-",2)),LEXL(4)=$$MX($P(LEXL(3)," ",2,2)),LEXL(3)=$$MX($P(LEXL(3)," ",1)) | 
|---|
|  | 132 | S:$L(LEXL(3))&($L(LEXL(4))) LEXL(3)=LEXL(3)_" "_LEXL(4) | 
|---|
|  | 133 | S LEXL=LEXL(1) S:$L(LEXL(1))&($L(LEXL(3))) LEXL=LEXL(1)_"-"_LEXL(3) | 
|---|
|  | 134 | S LEXF=$$MX($P(LEXP,",",1)),LEXF=$P(LEXP,",",2) | 
|---|
|  | 135 | S LEXF(1)=$$MX($P(LEXF,"-",1)),LEXF(2)=$$MX($P(LEXF(1)," ",2,2)),LEXF(1)=$$MX($P(LEXF(1)," ",1)) | 
|---|
|  | 136 | S:$L(LEXF(1))&($L(LEXF(2))) LEXF(1)=LEXF(1)_" "_LEXF(2) | 
|---|
|  | 137 | S LEXF(3)=$$MX($P(LEXF,"-",2)),LEXF(4)=$$MX($P(LEXF(3)," ",2,2)),LEXF(3)=$$MX($P(LEXF(3)," ",1)) | 
|---|
|  | 138 | S:$L(LEXF(3))&($L(LEXF(4))) LEXF(3)=LEXF(3)_" "_LEXF(4) | 
|---|
|  | 139 | S LEXF=LEXF(1) S:$L(LEXF(1))&($L(LEXF(3))) LEXF=LEXF(1)_"-"_LEXF(3) | 
|---|
|  | 140 | S LEXP=LEXL_", "_LEXF,X=LEXP | 
|---|
|  | 141 | Q X | 
|---|
|  | 142 | MX(X) ;     Mix Case | 
|---|
|  | 143 | Q $TR($E(X,1),"abcdefghijklmnopqrstuvwxyz","ABCDEFGHIJKLMNOPQRSTUVWXYZ")_$TR($E(X,2,$L(X)),"ABCDEFGHIJKLMNOPQRSTUVWXYZ","abcdefghijklmnopqrstuvwxyz") | 
|---|