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