1 | PSUAR1 ;BIR/PDW - Start AR/WS Extract ;11 AUG 1999
|
---|
2 | ;;4.0;PHARMACY BENEFITS MANAGEMENT;;MARCH, 2005
|
---|
3 | ;;
|
---|
4 | ;PSUDTDA - IEN FOR DATE
|
---|
5 | ;PSUSDA - IEN FOR INPATIENT SITE
|
---|
6 | ;PSUDRDA - IEN FOR DRUG
|
---|
7 | ;PSUCDA - IEN FOR CATEGORY
|
---|
8 | ;PSUDIV - IEN FOR DIVISION OR "NONE"
|
---|
9 | ;
|
---|
10 | ;DBIAs
|
---|
11 | ; Reference to file #58.5 supported by DBIA 456
|
---|
12 | ; Reference to file #58.1 supported by DBIA 2515
|
---|
13 | ; Reference to file #59.4 supported by DBIA 2498
|
---|
14 | ; Reference to file #44 supported by DBIA 2439
|
---|
15 | ; Reference to file #40.8 supported by DBIA 2438
|
---|
16 | ; Reference to file #59 supported by DBIA 1876
|
---|
17 | ; Reference to file #59.7 supported by DBIA 2854
|
---|
18 | ;
|
---|
19 | EN ;EP MAIN ENTRY POINT
|
---|
20 | ;
|
---|
21 | K PSUTDSP,PSUTRET
|
---|
22 | ;
|
---|
23 | START ;Start date scan thru stats file
|
---|
24 | S PSUSDT=PSUSDT-.1
|
---|
25 | S PSUDT=PSUSDT
|
---|
26 | S PSUEDT=PSUEDT\1+.24
|
---|
27 | Q F S PSUDT=$O(^PSI(58.5,"B",PSUDT)) Q:'PSUDT Q:PSUDT>PSUEDT D DATE Q:$G(PSUQUIT)
|
---|
28 | Q
|
---|
29 | DATE ;PROCESS ONE DATE - Loop through inpatient sites
|
---|
30 | S PSUDTDA=$O(^PSI(58.5,"B",PSUDT,0))
|
---|
31 | K PSUSITE
|
---|
32 | D GETM^PSUTL(58.5,PSUDTDA,"1*^.01","PSUSITE")
|
---|
33 | S PSUSDA=0
|
---|
34 | F S PSUSDA=$O(PSUSITE(PSUSDA)) Q:PSUSDA'>0 D SITE Q:$G(PSUQUIT)
|
---|
35 | K PSUSITE
|
---|
36 | Q
|
---|
37 | ;
|
---|
38 | SITE ;Process one site for one date
|
---|
39 | ; Find division for site for loading drug stats
|
---|
40 | S PSUDIV=$$DIV(PSUSDA,PSUDTDA)
|
---|
41 | ;
|
---|
42 | I PSUDIV="NULL" S PSUDIV=PSUSNDR
|
---|
43 | ;
|
---|
44 | ; Process individual Drug information from 58.52
|
---|
45 | ; Drug multiple loaded into PSUDRUG
|
---|
46 | K PSUDRUG
|
---|
47 | D GETM^PSUTL(58.501,"PSUDTDA,PSUSDA","2*^.01","PSUDRUG")
|
---|
48 | S PSUDRDA=0
|
---|
49 | F S PSUDRDA=$O(PSUDRUG(PSUDRDA)) Q:PSUDRDA'>0 D DRUG Q:$G(PSUQUIT)
|
---|
50 | K PSUDRUG
|
---|
51 | ;
|
---|
52 | D MAP
|
---|
53 | ; Process Amis categories from 58.501
|
---|
54 | ; Category multiple loaded into PSUCAT
|
---|
55 | K PSUCAT
|
---|
56 | CATEGORY ;EP Pull Categories
|
---|
57 | K PSUAMCAT
|
---|
58 | D GETM^PSUTL(58.501,"PSUDTDA,PSUSDA","1*^.01;1;2;3;4","PSUAMCAT","I")
|
---|
59 | ;
|
---|
60 | ; Move (da,Fld,"I") values to (da,Fld) nodes
|
---|
61 | D MOVEMI^PSUTL("PSUAMCAT")
|
---|
62 | ;
|
---|
63 | ; Gather totals for categories and accumulate in
|
---|
64 | ; ^XTMP(PSUARSUB,"DIV_CAT",PSUDIV,PSUAMCAT,"DISP":COST")
|
---|
65 | N PSUDISP,PSUCOST
|
---|
66 | S PSUCDA=0 F S PSUCDA=$O(PSUAMCAT(PSUCDA)) Q:PSUCDA'>0 D
|
---|
67 | . S PSUDISP=PSUAMCAT(PSUCDA,1)-PSUAMCAT(PSUCDA,3)
|
---|
68 | . S PSUCOST=PSUAMCAT(PSUCDA,2)-PSUAMCAT(PSUCDA,4)
|
---|
69 | . S PSUAMCAT=PSUAMCAT(PSUCDA,.01) ; "03"-"04"-"06" etc
|
---|
70 | . S X=$G(^XTMP(PSUARSUB,"DIV_CAT",PSUDIV,PSUAMCAT,"DISP"))
|
---|
71 | . S ^XTMP(PSUARSUB,"DIV_CAT",PSUDIV,PSUAMCAT,"DISP")=X+PSUDISP
|
---|
72 | . S X=$G(^XTMP(PSUARSUB,"DIV_CAT",PSUDIV,PSUAMCAT,"COST"))
|
---|
73 | . S ^XTMP(PSUARSUB,"DIV_CAT",PSUDIV,PSUAMCAT,"COST")=X+PSUCOST
|
---|
74 | . M ^XTMP("PSUTCST",PSUDIV,PSUAMCAT)=^XTMP(PSUARSUB,"DIV_CAT",PSUDIV,PSUAMCAT,"COST")
|
---|
75 | ;
|
---|
76 | Q
|
---|
77 | ;
|
---|
78 | DRUG ; Process one drug for one site for one day
|
---|
79 | ; Load & loop categories within Drug
|
---|
80 | ; total dispense & returns
|
---|
81 | ; Category multiple loaded into PSUCAT
|
---|
82 | ;
|
---|
83 | S PSUDRIEN=$$VALI^PSUTL(58.52,"PSUDTDA,PSUSDA,PSUDRDA",.01)
|
---|
84 | K PSUCAT
|
---|
85 | D GETM^PSUTL(58.52,"PSUDTDA,PSUSDA,PSUDRDA","1*^.01;1","PSUCAT","I")
|
---|
86 | ;
|
---|
87 | S PSUCDA=0,PSUDISP=0,PSUTR=0
|
---|
88 | F S PSUCDA=$O(PSUCAT(PSUCDA)) Q:PSUCDA'>0 Q:$G(PSUQUIT) D
|
---|
89 | . S X=PSUCAT(PSUCDA,.01,"I")
|
---|
90 | . S Y=PSUCAT(PSUCDA,1,"I")
|
---|
91 | . I (X="A")!(X="W") S PSUDISP=PSUDISP+Y,PSUTDS=PSUDISP
|
---|
92 | . I (X="RA")!(X="RW") S PSUDISP=PSUDISP-Y,PSUTR=PSUTR+Y
|
---|
93 | ; Adjust accumulative dispenses
|
---|
94 | ;
|
---|
95 | S X=$G(^XTMP(PSUARSUB,"DIV_DRUG",PSUDIV,PSUDRIEN))
|
---|
96 | S ^XTMP(PSUARSUB,"DIV_DRUG",PSUDIV,PSUDRIEN)=X+PSUDISP
|
---|
97 | ;
|
---|
98 | N PSUT
|
---|
99 | S PSUT=$G(PSUTDSP(PSUDIV,PSUDRIEN))
|
---|
100 | I $D(PSUTDS) D
|
---|
101 | .S PSUTDSP(PSUDIV,PSUDRIEN)=PSUTDS+PSUT ;Total Quantity dispensed
|
---|
102 | .I (PSUTDS+PSUT)=0 S PSUTDSP(PSUDIV,PSUDRIEN)=""
|
---|
103 | ;
|
---|
104 | N PSUT1
|
---|
105 | S PSUT1=$G(PSUTRET(PSUDIV,PSUDRIEN))
|
---|
106 | I $D(PSUTR) D
|
---|
107 | .S PSUTRET(PSUDIV,PSUDRIEN)=PSUTR+PSUT1 ;Total Quantity returned
|
---|
108 | .I (PSUTR+PSUT1)=0 S PSUTRET(PSUDIV,PSUDRIEN)=""
|
---|
109 | K PSUCAT
|
---|
110 | Q
|
---|
111 | DIV(PSUSDA,PSUDTDA) ;EP process for a site the associated divisions by date.
|
---|
112 | ; uses PSUSDA as entry for site ien in file 59.4 : returns division
|
---|
113 | ; as of 2/99 date is no longer used as a parameter
|
---|
114 | N PSUDIV,PSUDT
|
---|
115 | I '$D(^XTMP(PSUARSUB,"DIVLK",PSUSDA)) D AOU
|
---|
116 | ; ^XTMP(PSUARSUB,"DIVlk",Site IEN, AOU Inactive Date -1)=Division IEN
|
---|
117 | ;
|
---|
118 | ; if AOU did not set division then return null
|
---|
119 | I '$D(^XTMP(PSUARSUB,"DIVLK",PSUSDA)) S PSUDIV="NULL" Q PSUDIV
|
---|
120 | ;
|
---|
121 | S PSUDIV=$O(^XTMP(PSUARSUB,"DIVLK",PSUSDA,""))
|
---|
122 | Q PSUDIV
|
---|
123 | ;
|
---|
124 | AOU ;EP map divisions by dates for inpatient sites from the AOU file
|
---|
125 | ;PSUADA - ien for AOU Stock file
|
---|
126 | ;
|
---|
127 | N PSUADA,PSUDIV,PSUINACT,PSUDIV,PSUSLOC,MAPLOCI
|
---|
128 | ;
|
---|
129 | D GETM^PSUTL(59.7,1,"90.01*^.01;.02;.03","MAPLOCI","I")
|
---|
130 | ;set array MAPLOCI(ien,fld)=internal value
|
---|
131 | ;field .02 points to 40.8 Medical Center Division where fac num is #1
|
---|
132 | ;field .03 points to 59 Outpatient site where site num is #.06
|
---|
133 | D MOVEMI^PSUTL("MAPLOCI")
|
---|
134 | ;
|
---|
135 | K ^XTMP(PSUARSUB,"DIVLK")
|
---|
136 | ;
|
---|
137 | S PSUADA=0
|
---|
138 | F S PSUADA=$O(^PSI(58.1,"ASITE",PSUSDA,PSUADA)) Q:PSUADA'>0 D
|
---|
139 | . N PSUDIV S PSUDIV=""
|
---|
140 | . S PSUSLOC=$$VALI^PSUTL(59.4,PSUSDA,.01)
|
---|
141 | . S PSUINACT=$$VALI^PSUTL(58.1,PSUADA,3)
|
---|
142 | . I PSUINACT Q ; inactivated sites are to be ignored regardles of date
|
---|
143 | . S:'PSUINACT PSUINACT=DT+1
|
---|
144 | . I '$G(MAPLOCI(PSUADA,.01)) S PSUDIV="NULL"
|
---|
145 | . I $G(MAPLOCI(PSUADA,.01)) D
|
---|
146 | .. S X=$G(MAPLOCI(PSUADA,.02)) I X S PSUDIV=$$VALI^PSUTL(40.8,X,1)
|
---|
147 | .. S X=$G(MAPLOCI(PSUADA,.03)) I X S PSUDIV=$$VALI^PSUTL(59,X,.06)
|
---|
148 | .. S ^XTMP(PSUARSUB,"DIVLK",PSUSDA,PSUDIV)=""
|
---|
149 | ;
|
---|
150 | Q
|
---|
151 | ;
|
---|
152 | MAP ;Find out whether an Area of Use (AOU) is mapped to a division or
|
---|
153 | ;outpatient site. If it is not mapped, store the NAME and INACTIVATION
|
---|
154 | ;DATE (if applicable) in a global to be mailed to the user.
|
---|
155 | ;
|
---|
156 | S PSUNAM=0 ;This is the name of the Area of USE
|
---|
157 | ;
|
---|
158 | F S PSUNAM=$O(^PSI(58.1,"B",PSUNAM)) Q:PSUNAM="" D
|
---|
159 | .S IEN=0 ;This is the IEN for file 58.1
|
---|
160 | .F S IEN=$O(^PSI(58.1,"B",PSUNAM,IEN)) Q:IEN="" D
|
---|
161 | ..K AOU
|
---|
162 | ..D GETS^PSUTL(58.1,IEN,".01;3","AOU(IEN)") ;Name & Inactive Date
|
---|
163 | ..D MAP1
|
---|
164 | Q
|
---|
165 | ;
|
---|
166 | MAP1 ;MAP continued. This subroutine takes the IEN from file 58.1 and looks
|
---|
167 | ;to see if it is in file 59.7, field 90.01. If it is, then it has
|
---|
168 | ;been mapped if there is a value in subfield .02 or .03.
|
---|
169 | ;If there is no value in subfield .02 or .03 it has not been mapped
|
---|
170 | ;
|
---|
171 | ;Keep only the entries that are NOT mapped
|
---|
172 | ;
|
---|
173 | N PSUDA
|
---|
174 | ;
|
---|
175 | I $G(^PS(59.7,1,90.01,IEN,0)) D
|
---|
176 | .D GETM^PSUTL(59.7,1,"90.01*^.01;.02;.03","MAPLOCI")
|
---|
177 | .S PSUDA=0
|
---|
178 | .F S PSUDA=$O(MAPLOCI(PSUDA)) Q:PSUDA="" D
|
---|
179 | ..I MAPLOCI(PSUDA,.02)'="" K AOU(PSUDA)
|
---|
180 | ..I $G(MAPLOCI(PSUDA,.03))'="" K AOU(PSUDA)
|
---|
181 | M ^XTMP(PSUARSUB,"AOU")=AOU ;Contains only unmapped locations
|
---|
182 | Q
|
---|
183 | ;
|
---|
184 | CLEAR ;EP Clear ^XTMP("PSUAR*")
|
---|
185 | S X="PSUAR",Y=X
|
---|
186 | F S Y=$O(^XTMP(Y)) Q:($E(Y,1,5)'=X) W !,Y K ^XTMP(Y)
|
---|
187 | Q
|
---|