| 1 | GMTSULT2 ; SLC/KER - HS Type Lookup (Search/List)   ; 08/27/2002
 | 
|---|
| 2 |  ;;2.7;Health Summary;**30,32,35,29,56**;Oct 20, 1995
 | 
|---|
| 3 |  ;
 | 
|---|
| 4 |  ; External Reference
 | 
|---|
| 5 |  ;   DBIA 10016  ^DIM
 | 
|---|
| 6 |  ;                   
 | 
|---|
| 7 |  Q
 | 
|---|
| 8 | LIST(X) ; Get global array of Health Summary Types
 | 
|---|
| 9 |  ;                      
 | 
|---|
| 10 |  ;  LIST^GMTSULT2(<search string>)
 | 
|---|
| 11 |  ;                      
 | 
|---|
| 12 |  ;  ^TMP("GMTSULT",$J,#)
 | 
|---|
| 13 |  ;                    
 | 
|---|
| 14 |  ;     Piece 1 =  Internal Entry Number (IEN) in file 142
 | 
|---|
| 15 |  ;     Piece 2 =  Health Summary Type Name
 | 
|---|
| 16 |  ;     Piece 3 =  Health Summary Type Title
 | 
|---|
| 17 |  ;     Piece 4 =  Health Summary Type Owner
 | 
|---|
| 18 |  ;     Piece 5 =  Location Using Health Summary Type
 | 
|---|
| 19 |  ;     Piece 6 =  Number of Components in Summary Type
 | 
|---|
| 20 |  ;     Piece 7 =  Recommended Display Text (for 
 | 
|---|
| 21 |  ;                selection or list box)
 | 
|---|
| 22 |  ;                      
 | 
|---|
| 23 |  ;  List Builder can use variable DIC("S") and DIC(0)
 | 
|---|
| 24 |  ;                      
 | 
|---|
| 25 |  ;     DIC("S") Screen out entries for selection/list
 | 
|---|
| 26 |  ;                      
 | 
|---|
| 27 |  ;     Processes DIC(0) N, OE (combination),X or B
 | 
|---|
| 28 |  ;                      
 | 
|---|
| 29 |  ;     Does not process DIC(0) components C or M.  Cross
 | 
|---|
| 30 |  ;     reference suppression (C) is automatic in a multi-
 | 
|---|
| 31 |  ;     term lookup, and the use of multiple indexes is
 | 
|---|
| 32 |  ;     implied in the lookup and DD file structure.
 | 
|---|
| 33 |  ;                      
 | 
|---|
| 34 |  D CLR^GMTSULT N GMTSEO,GMTSEQ,GMTSIF,GMTSBI,GMTSIEN,GMTSWRDS,GMTSDS,GMTSD0
 | 
|---|
| 35 |  S GMTSEO=+($$EMO),GMTSEQ=+($$EMQ),GMTSIF=+($$IF($G(X))),GMTSBI=+($$BI)
 | 
|---|
| 36 |  S:$L($G(DIC("S")))&('$L($G(GMTSDICS))) GMTSDICS=$G(DIC("S")),GMTSDS=1
 | 
|---|
| 37 |  S:$L($G(DIC(0)))&('$L($G(GMTSDIC0))) GMTSDIC0=$G(DIC(0)),GMTSD0=1
 | 
|---|
| 38 |  I GMTSIF S GMTSIEN=$$IENF(X) I +GMTSIEN>0 D IENS(GMTSIEN) G:$D(^TMP("GMTSULT",$J,1)) LQ
 | 
|---|
| 39 |  I GMTSBI D B^GMTSULT7 G LQ
 | 
|---|
| 40 |  D PAR,FND,REO^GMTSULT3
 | 
|---|
| 41 |  Q
 | 
|---|
| 42 | LQ ; Quit List
 | 
|---|
| 43 |  K:+($G(GMTSDS))>0 GMTSDICS K:+($G(GMTSD0))>0 GMTSDIC0
 | 
|---|
| 44 |  Q
 | 
|---|
| 45 |  ;                      
 | 
|---|
| 46 | FND ; Find Health Summary Types (word search)
 | 
|---|
| 47 |  N GMTSB,GMTSC,GMTSCTL,GMTSFND,GMTSI,GMTSI1,GMTSI2,GMTSI3,GMTSDS,GMTSD0,GMTSLEX,GMTSLEXM,GMTSASM,GMTSCMP,GMTSLOC,GMTSNAM,GMTSOK,GMTSRC,GMTSOW,GMTSTMP,GMTSTTL,GMTSWDS,GMTSRD,GMTSWRD,Y
 | 
|---|
| 48 |  ;   Echo             E or broker
 | 
|---|
| 49 |  S GMTSTMP=+($G(GMTSE)),GMTSIF=0 S:'$D(GMTSE) GMTSTMP=$$ECHO^GMTSULT N GMTSE S GMTSE=GMTSTMP,U="^"
 | 
|---|
| 50 |  ;   Exact Match      X
 | 
|---|
| 51 |  S GMTSLEX=$$EM(X) D:$G(GMTSDIC0)["X"&(GMTSLEX'>0) CLR^GMTSULT G:$G(GMTSDIC0)["X"&(GMTSLEX'>0) FNDQ
 | 
|---|
| 52 |  S:+GMTSLEX>0 ^TMP("GMTSULT2",$J,"EM")=+GMTSLEX,^TMP("GMTSULT2",$J,"IEN",+GMTSLEX)=""
 | 
|---|
| 53 |  ;   One Exact Match  OE
 | 
|---|
| 54 |  S GMTSLEXM=0 S:$G(GMTSDIC0)["O"&($G(GMTSDIC0)["E") GMTSLEXM=1
 | 
|---|
| 55 |  ;   Word Search
 | 
|---|
| 56 |  S GMTSWDS=$O(GMTSWRDS(" "),-1) S GMTSWRD=$G(GMTSWRDS(1))
 | 
|---|
| 57 |  G:'$L(GMTSWRD) FNDQ S GMTSCTL=GMTSWRD,GMTSWRD=$E(GMTSWRD,1,($L(GMTSWRD)-1))_$C($A($E(GMTSWRD,$L(GMTSWRD)))-1)_"~"
 | 
|---|
| 58 |  S:+GMTSCTL=GMTSCTL GMTSWRD=GMTSCTL-1
 | 
|---|
| 59 |  F  S GMTSWRD=$O(^GMT(142,"AW",GMTSWRD)) Q:GMTSWRD=""!($E(GMTSWRD,1,$L(GMTSCTL))'=GMTSCTL)  D
 | 
|---|
| 60 |  . S (GMTSC,GMTSI1)=0
 | 
|---|
| 61 |  . F  S GMTSI1=$O(^GMT(142,"AW",GMTSWRD,GMTSI1)) Q:+GMTSI1=0  D
 | 
|---|
| 62 |  . . N GMTSIEN,GMTSKWRD S GMTSIEN=GMTSI1,GMTSKWRD=GMTSWRD
 | 
|---|
| 63 |  . . D SM^GMTSULT3
 | 
|---|
| 64 |  ;   Check for exact match in results
 | 
|---|
| 65 |  S GMTSI=+($G(^TMP("GMTSULT2",$J,"EMI")))
 | 
|---|
| 66 |  S GMTSB=$G(^TMP("GMTSULT2",$J,"EMB")) I GMTSI>0,$L(GMTSB)>0 D
 | 
|---|
| 67 |  . S ^TMP("GMTSULT2",$J,"E")=$G(^TMP("GMTSULT2",$J,GMTSI))
 | 
|---|
| 68 |  . K ^TMP("GMTSULT2",$J,GMTSI),^TMP("GMTSULT2",$J,"B",GMTSB),^TMP("GMTSULT2",$J,"EMB"),^TMP("GMTSULT2",$J,"EMI"),^TMP("GMTSULT2",$J,"EM")
 | 
|---|
| 69 | FNDQ ; Find Quit
 | 
|---|
| 70 |  K:+($G(GMTSDS))>0 GMTSDICS K:+($G(GMTSD0))>0 GMTSDIC0
 | 
|---|
| 71 |  Q
 | 
|---|
| 72 |  ;                      
 | 
|---|
| 73 | PAR ; Parse User Input
 | 
|---|
| 74 |  K GMTSWRDS N GMTSC,GMTSCT,GMTSPSN,GMTSTR,GMTSWRD
 | 
|---|
| 75 |  S U="^",GMTSTR=$G(X) Q:'$L(GMTSTR)  S GMTSC=1,GMTSCT=0 F GMTSPSN=1:1:$L(GMTSTR)+1 D
 | 
|---|
| 76 |  . S GMTSWRD=$E(GMTSTR,GMTSPSN) I "(,.?! '-/&:;)"[GMTSWRD D
 | 
|---|
| 77 |  . . S GMTSWRD=$TR($E($E(GMTSTR,GMTSC,GMTSPSN-1),1,30),"""",""),GMTSC=GMTSPSN+1
 | 
|---|
| 78 |  . . I $L(GMTSWRD)>0 S GMTSCT=GMTSCT+1,GMTSWRDS(GMTSCT)=$$UP(GMTSWRD)
 | 
|---|
| 79 |  Q
 | 
|---|
| 80 | IENF(X) ; Internal Entry Number Find
 | 
|---|
| 81 |  N GMTS0,GMTSI S GMTSI=$G(X),X=$G(X),GMTS0=$G(DIC(0)) S:$E(X,1)="`" GMTSI=$E(GMTSI,2,$L(GMTSI)) S GMTSI=+GMTSI
 | 
|---|
| 82 |  I GMTS0["N",+GMTSI>0,$D(^GMT(142,+GMTSI,0)) S X=+GMTSI Q X
 | 
|---|
| 83 |  I $E(X,1)="`",+GMTSI>0,$D(^GMT(142,+GMTSI,0)) S X=+GMTSI Q X
 | 
|---|
| 84 |  Q -1
 | 
|---|
| 85 | IENS(X) ; Internal Entry Number Save
 | 
|---|
| 86 |  N GMTSI1,GMTSI2,GMTSI3,GMTSIEN S (GMTSIEN,GMTSI1)=+X Q:+GMTSI1=0  Q:'$D(^GMT(142,+GMTSI1,0))
 | 
|---|
| 87 |  D SM^GMTSULT3,REO^GMTSULT3
 | 
|---|
| 88 |  Q
 | 
|---|
| 89 | CM(X) ; Get Number of Components
 | 
|---|
| 90 |  S X=+($G(X)) Q:X=0 "No components" Q:'$D(^GMT(142,+X,1)) "No components"
 | 
|---|
| 91 |  N GMTSI,GMTSC S (GMTSC,GMTSI)=0 F  S GMTSI=$O(^GMT(142,+X,1,GMTSI)) Q:+GMTSI=0  S GMTSC=GMTSC+1
 | 
|---|
| 92 |  S X=$S(+GMTSC>1:(+GMTSC_" components"),+GMTSC=1:(+GMTSC_" component"),1:"No components")
 | 
|---|
| 93 |  Q X
 | 
|---|
| 94 | EM(X) ; Exact Match when DIC(0) contains X
 | 
|---|
| 95 |  S X=$G(X) Q:'$L(X) -1 N GMTSC,GMTSI,GMTSM,GMTSN,GMTSO,GMTSU S U="^"
 | 
|---|
| 96 |  S GMTSU=$$UP(X),(GMTSC,GMTSO)=$$UP($E(X,1,30)),GMTSM=0,GMTSO=$E(GMTSO,1,($L(GMTSO)-1))_$C($A($E(GMTSO,$L(GMTSO)))-1)_"~",GMTSM=0
 | 
|---|
| 97 |  F  S GMTSO=$O(^GMT(142,"AB",GMTSO)) Q:GMTSO=""!(GMTSO'[GMTSC)  D  Q:+GMTSM>0
 | 
|---|
| 98 |  . S GMTSI=0 F  S GMTSI=$O(^GMT(142,"AB",GMTSO,GMTSI)) Q:+GMTSI=0  D  Q:+GMTSM>0
 | 
|---|
| 99 |  . . S GMTSN=$P($G(^GMT(142,+GMTSI,0)),U,1) S:$$UP(GMTSN)=GMTSU GMTSM=GMTSI_U_GMTSN
 | 
|---|
| 100 |  S:+GMTSM=0 GMTSM=-1 S X=GMTSM D Y^GMTSULT6(+GMTSM)
 | 
|---|
| 101 |  Q X
 | 
|---|
| 102 |  ;                      
 | 
|---|
| 103 | DICS(S,X,DA) ; Check DIC("S") Screen
 | 
|---|
| 104 |  N Y,GMTST,GMTSOX,GMTSDICS,GMTSIEN S (GMTSIEN,Y,DA)=+($G(DA)),GMTSDICS=$G(S),GMTSOX=$G(X) S X=GMTSDICS Q:'$L(GMTSDICS) 1
 | 
|---|
| 105 |  D ^DIM Q:'$L($G(X)) 1 S GMTST=$G(^GMT(142,+GMTSIEN,0)) Q:'$D(^GMT(142,+GMTSIEN,0)) 0 S X=GMTSOX,(Y,DA)=GMTSIEN Q:GMTSIEN'>0 0
 | 
|---|
| 106 |  X GMTSDICS S X=$T Q X
 | 
|---|
| 107 |  ;                      
 | 
|---|
| 108 |  ; Processing flags
 | 
|---|
| 109 | EMQ(X) ;   Exact match flag
 | 
|---|
| 110 |  N GMTS0 S X=0,GMTS0=$G(DIC(0)) Q:'$L(GMTS0) X
 | 
|---|
| 111 |  S:$G(GMTS0)["X" X=1 Q X
 | 
|---|
| 112 | EMO(X) ;   Exact match flag, only one
 | 
|---|
| 113 |  N GMTS0 S X=0 S GMTS0=$G(DIC(0)) Q:'$L(GMTS0) X
 | 
|---|
| 114 |  S:$G(GMTS0)["O"&($G(GMTS0)["E") X=1 Q X
 | 
|---|
| 115 | BI(X) ;   Use the B Index flag
 | 
|---|
| 116 |  N GMTS0 S X=0 S GMTS0=$G(DIC(0)) Q:'$L(GMTS0) X
 | 
|---|
| 117 |  S:$G(GMTS0)["B" X=1 Q X
 | 
|---|
| 118 | IF(X) ;   Internal Entry Number Flag
 | 
|---|
| 119 |  N GMTS0,GMTSI S GMTSI=0,GMTS0=$G(DIC(0)) Q:'$L($G(X)) 0
 | 
|---|
| 120 |  I $E(X,1)="`",$L($G(^GMT(142,+($E(X,2,$L(X))),0))) S GMTSI=1
 | 
|---|
| 121 |  I +X>0,$L($G(^GMT(142,+X,0))),GMTS0["N" S GMTSI=1
 | 
|---|
| 122 |  S X=GMTSI Q X
 | 
|---|
| 123 |  ;                      
 | 
|---|
| 124 |  ; TMP Global
 | 
|---|
| 125 | TMP ;   Show first ^TMP Global
 | 
|---|
| 126 |  N GMTSND,GMTSNC,GMTSNQ,GMTSC,GMTSTMP
 | 
|---|
| 127 |  S GMTSC=0,GMTSTMP="",GMTSNQ="^TMP(""GMTSULT2"","_$J_")",GMTSNC="^TMP(""GMTSULT2"","_$J_","
 | 
|---|
| 128 |  F  S GMTSNQ=$Q(@GMTSNQ) Q:GMTSNQ=""!(GMTSNQ'[GMTSNC)  D
 | 
|---|
| 129 |  . S GMTSC=GMTSC+1 W:GMTSC=1 ! S GMTSND=@GMTSNQ W !,GMTSNQ,"=",GMTSND
 | 
|---|
| 130 |  W:GMTSC>0 !
 | 
|---|
| 131 | TMP2 ;   Show second ^TMP Global
 | 
|---|
| 132 |  S GMTSC=0,GMTSNQ="^TMP(""GMTSULT"","_$J_")",GMTSNC="^TMP(""GMTSULT"","_$J_","
 | 
|---|
| 133 |  F  S GMTSNQ=$Q(@GMTSNQ) Q:GMTSNQ=""!(GMTSNQ'[GMTSNC)  D
 | 
|---|
| 134 |  . S GMTSC=GMTSC+1 W:'$D(GMTSTMP)&(GMTSC=1) ! S GMTSND=@GMTSNQ W !,GMTSNQ,"=",GMTSND
 | 
|---|
| 135 |  W:GMTSC>0 !
 | 
|---|
| 136 |  Q
 | 
|---|
| 137 |  ; Miscellaneous
 | 
|---|
| 138 | UP(X) ;   Uppercase
 | 
|---|
| 139 |  Q $TR(X,"abcdefghijklmnopqrstuvwxyz","ABCDEFGHIJKLMNOPQRSTUVWXYZ")
 | 
|---|
| 140 | OW(X) ;   Mix Case (owner name)
 | 
|---|
| 141 |  Q:$G(X)'["," $$EN^GMTSUMX($G(X))
 | 
|---|
| 142 |  Q $$EN^GMTSUMX(($P($G(X),",",1)_", "_$P($G(X),",",2)))
 | 
|---|
| 143 | MX(X) ;   Mix Case
 | 
|---|
| 144 |  Q $$EN^GMTSUMX(X)
 | 
|---|