[613] | 1 | PSUTL ;BIR/PDW - Utilities for AR/WS extracts ;12 AUG 1999
|
---|
| 2 | ;;4.0;PHARMACY BENEFITS MANAGEMENT;;MARCH, 2005
|
---|
| 3 | ;
|
---|
| 4 | ; Reference to DOLRO^%ZOSV supported by DBIA 2500
|
---|
| 5 | ;
|
---|
| 6 | ; Entry Points
|
---|
| 7 | ;
|
---|
| 8 | ; D GETS^PSUTL(,,,,)
|
---|
| 9 | ; D GETM^PSUTL(,,,,)
|
---|
| 10 | ; $$VAL^PSUTL(,,)
|
---|
| 11 | ; $$VALI^PSUTL(,,)
|
---|
| 12 | ; ---------------------
|
---|
| 13 | ; D MOVEI^PSUTL("ref") Moves @ref@(Fld,"I") Value to (Fld) node
|
---|
| 14 | ; D MOVEMI^PSUTL("ref") Moves @ref@(da,Fld,"I") value to (da,Fld) node
|
---|
| 15 | ; ---------------------
|
---|
| 16 | ; ---------------------
|
---|
| 17 | ; Details & Parameters
|
---|
| 18 | ; D GETS^PSUTL(,,,,) Returns @root@(Field Number(s)) = Value(s)
|
---|
| 19 | ; Multiples NO
|
---|
| 20 | ;
|
---|
| 21 | ; D GETM^PSUTL(,,,,) Returns @root@(DA,Field Number(s)) = Value(s)
|
---|
| 22 | ; Multiples YES & ONLY
|
---|
| 23 | ;
|
---|
| 24 | ; S X=$$VAL^PSUTL(,,) X = External Value
|
---|
| 25 | ; S X=$$VALI^PSUTL(,,) X = Interanl Value
|
---|
| 26 | ;
|
---|
| 27 | ; [ Variables for Parameter Passing ]
|
---|
| 28 | ; PSUFILE = file number or subfile number as described in GETS^DIQ()
|
---|
| 29 | ; PSUDA = List or array of IENS NOT as described in GETS^DIQ()
|
---|
| 30 | ;
|
---|
| 31 | ; A .DA array or a list of IENS left to right as they are in the
|
---|
| 32 | ; global data arrays D0,D1,D2 as within a FM Global map
|
---|
| 33 | ; This Iens list can be constructed with variables.
|
---|
| 34 | ; Example: as reaching into file 200 division subfile 200.02
|
---|
| 35 | ; "DUZ,SITE"
|
---|
| 36 | ;
|
---|
| 37 | ; PSUDR = DR string as described in GETS^DIQ()
|
---|
| 38 | ; PSUROOT = closed array as described in GETS^DIQ()
|
---|
| 39 | ; PSUFORM = format control as described in GETS^DIQ()
|
---|
| 40 | ;
|
---|
| 41 | GETS(PSUFILE,PSUDA,PSUDR,PSUROOT,PSUFORM) ;
|
---|
| 42 | ; Example S PSUSITE=6025
|
---|
| 43 | ; D GETS^PSUTL(200.02,"DUZ,PSUSITE",".01","DIV")
|
---|
| 44 | ; returns
|
---|
| 45 | ; DIV(.01)="HINES DEVELOPMENT"
|
---|
| 46 | ;
|
---|
| 47 | N PSUIEN,DA
|
---|
| 48 | I $D(PSUFILE),$D(PSUDA),$D(PSUDR),$D(PSUROOT)
|
---|
| 49 | E Q
|
---|
| 50 | I '$D(PSUFORM) S PSUFORM=""
|
---|
| 51 | D PARSE(PSUDA)
|
---|
| 52 | S PSUIEN=$$IENS^DILF(.DA)
|
---|
| 53 | K ^TMP("PSUDIQ",$J)
|
---|
| 54 | D GETS^DIQ(PSUFILE,PSUIEN,PSUDR,PSUFORM,"^TMP(""PSUDIQ"",$J)")
|
---|
| 55 | ;
|
---|
| 56 | I $G(PSUMTUL) Q
|
---|
| 57 | ;
|
---|
| 58 | M @PSUROOT=^TMP("PSUDIQ",$J,PSUFILE,PSUIEN)
|
---|
| 59 | K ^TMP("PSUDIQ",$J)
|
---|
| 60 | Q
|
---|
| 61 | ;
|
---|
| 62 | VAL(PSUFILE,PSUDA,PSUFLD) ; Returns External Value
|
---|
| 63 | N PSUTMP
|
---|
| 64 | I $D(PSUFILE),$D(PSUDA),$D(PSUFLD)
|
---|
| 65 | E Q ""
|
---|
| 66 | D GETS(PSUFILE,PSUDA,PSUFLD,"PSUTMP")
|
---|
| 67 | Q $G(PSUTMP(PSUFLD))
|
---|
| 68 | VALI(PSUFILE,PSUDA,PSUFLD) ; Returns Internal Value
|
---|
| 69 | N PSUTMP
|
---|
| 70 | I $D(PSUFILE),$D(PSUDA),$D(PSUFLD)
|
---|
| 71 | E Q ""
|
---|
| 72 | D GETS(PSUFILE,PSUDA,PSUFLD,"PSUTMP","I")
|
---|
| 73 | Q $G(PSUTMP(PSUFLD,"I"))
|
---|
| 74 | ;
|
---|
| 75 | GETM(PSUFILE,PSUDA,PSUFLD,PSUROOT,PSUFORM) ;EP RETURN MULTIPLES
|
---|
| 76 | ; PSUFILE is the immediate upper level file number of the one desired
|
---|
| 77 | ; PSUDA is the "DO,D1,Dx .." IENS to get to the immediate upper level
|
---|
| 78 | ; PSUFLD is the field notation for the multiple at the upper level
|
---|
| 79 | ; "3*"
|
---|
| 80 | ; appended with "^" and the list of fields ".01;.02;9.3;..."
|
---|
| 81 | ; resulting in "3*^.01;.02;9.3;..."
|
---|
| 82 | ; PSUROOT is the target closed array reference
|
---|
| 83 | ; PSUFORM is the format as in GET^DIQ
|
---|
| 84 | ; return form is @PSUROOT@(da,fld)=VALUE
|
---|
| 85 | ;
|
---|
| 86 | ; example: pulls multiple divisions from file 200
|
---|
| 87 | ; D GETM^PSUTL(200,DUZ,"16*^.01","DIV")
|
---|
| 88 | ; Returns DIV(578,.01) ="HINES, IL"
|
---|
| 89 | ; DIV(6020,.01)="HINES ISC"
|
---|
| 90 | ; DIV(6025,.01)="HINES DEVELOPMENT"
|
---|
| 91 | ;
|
---|
| 92 | N PSUMTUL,PSUSUB,PSUDID
|
---|
| 93 | I $D(PSUFILE),$D(PSUDA),$D(PSUFLD),$D(PSUROOT)
|
---|
| 94 | E Q
|
---|
| 95 | S PSUMTUL=1
|
---|
| 96 | I '$D(PSUFORM) S PSUFORM=""
|
---|
| 97 | I PSUFLD'["^" Q
|
---|
| 98 | K PSUFLDL
|
---|
| 99 | S PSUFLDL=$P(PSUFLD,U,2),PSUFLD=$P(PSUFLD,U)
|
---|
| 100 | I +PSUFLDL,+PSUFLD
|
---|
| 101 | E Q
|
---|
| 102 | D FIELD^DID(PSUFILE,+PSUFLD,"","SPECIFIER","PSUDID")
|
---|
| 103 | S PSUSUB=+PSUDID("SPECIFIER")
|
---|
| 104 | D GETS(PSUFILE,PSUDA,PSUFLD,PSUROOT,PSUFORM)
|
---|
| 105 | ; load multiple into target array
|
---|
| 106 | S PSUIEN=0 F S PSUIEN=$O(^TMP("PSUDIQ",$J,PSUSUB,PSUIEN)) Q:+PSUIEN'>0 M @PSUROOT@(+PSUIEN)=^TMP("PSUDIQ",$J,PSUSUB,PSUIEN)
|
---|
| 107 | K ^TMP("PSUDIQ",$J)
|
---|
| 108 | Q:'$D(PSUFLDL)
|
---|
| 109 | ;
|
---|
| 110 | ; process individual fields
|
---|
| 111 | N I,FLD
|
---|
| 112 | S FLD=+PSUFLDL,PSUFLDL(FLD)=0
|
---|
| 113 | F I=2:1 S FLD=$P(PSUFLDL,";",I) Q:FLD'>0 S PSUFLDL(FLD)=""
|
---|
| 114 | S PSUIEN=0 F S PSUIEN=$O(@PSUROOT@(PSUIEN)) Q:PSUIEN'>0 D
|
---|
| 115 | . S FLD=0
|
---|
| 116 | . F S FLD=$O(@PSUROOT@(PSUIEN,FLD)) Q:FLD'>0 I '$D(PSUFLDL(FLD)) K @PSUROOT@(PSUIEN,FLD)
|
---|
| 117 | K PSUFLDL
|
---|
| 118 | Q
|
---|
| 119 | PARSE(XBDA) ;PEP - parse DA literal into da array
|
---|
| 120 | I XBDA="",$D(XBDA)=1 S DA=0 Q
|
---|
| 121 | NEW D,I,J
|
---|
| 122 | F I=1:1 S D(I)=$P(XBDA,",",I) Q:D(I)=""
|
---|
| 123 | S I=I-1
|
---|
| 124 | F J=0:1:I-1 S DA(J)=D(I-J)
|
---|
| 125 | F J=0:1:I-1 F Q:(DA(J)=+DA(J)) S DA(J)=@(DA(J)) S:DA(J)="" DA(J)=0
|
---|
| 126 | S DA=DA(0)
|
---|
| 127 | KILL DA(0)
|
---|
| 128 | Q
|
---|
| 129 | MOVEI(PSUREF) ;EP Move @PSUREF@(Fld,"I") values to @PSUREF@(Fld)
|
---|
| 130 | N PSUFLD
|
---|
| 131 | S PSUFLD=0 F S PSUFLD=$O(@PSUREF@(PSUFLD)) Q:PSUFLD'>0 S @PSUREF@(PSUFLD)=$G(@PSUREF@(PSUFLD,"I")) K @PSUREF@(PSUFLD,"I")
|
---|
| 132 | Q
|
---|
| 133 | ;
|
---|
| 134 | MOVEMI(PSUREF) ;EP Move @PSUREF@(da,Fld,"I") values to @PSUREF@(da,Fld)
|
---|
| 135 | N PSUDA,PSUFLD
|
---|
| 136 | S PSUDA=0 F S PSUDA=$O(@PSUREF@(PSUDA)) Q:PSUDA'>0 D
|
---|
| 137 | . S PSUFLD=0 F S PSUFLD=$O(@PSUREF@(PSUDA,PSUFLD)) Q:PSUFLD'>0 S @PSUREF@(PSUDA,PSUFLD)=@PSUREF@(PSUDA,PSUFLD,"I") K @PSUREF@(PSUDA,PSUFLD,"I")
|
---|
| 138 | Q
|
---|
| 139 | ;
|
---|
| 140 | UPPER(PSUX) ;Convert lower case to upper case
|
---|
| 141 | Q $TR(PSUX,"abcdefghijklmnopqrstuvwxyz","ABCDEFGHIJKLMNOPQRSTUVWXYZ")
|
---|
| 142 | ;
|
---|
| 143 | VARKILL ;PEP Kill variable PSU* namespace
|
---|
| 144 | ;Kills off all PSU Variables
|
---|
| 145 | S X="^TMP(""PSUVAR"",$J,"
|
---|
| 146 | D DOLRO^%ZOSV ; load symbols into ^TMP(,,var)=..
|
---|
| 147 | ; (preserve PSU,PSUXMY*)
|
---|
| 148 | S X="" F S X=$O(^TMP("PSUVAR",$J,X)) Q:X="" I $E(X,1,3)="PSU",X'="PSU",($E(X,1,6)'="PSUXMY"),X'="PSUJOB" K @X
|
---|
| 149 | K ^TMP("PSUVAR",$J)
|
---|
| 150 | ;
|
---|
| 151 | ;
|
---|