1 | PSUCP1 ;BIR/TJH,PDW - PBM - CONTROL POINT, MANUAL ENTRY ;25 AUG 1998
|
---|
2 | ;;4.0;PHARMACY BENEFITS MANAGEMENT;;MARCH, 2005
|
---|
3 | ;
|
---|
4 | ;DBIA's
|
---|
5 | ; Reference to file #4 supported by DBIA 10090
|
---|
6 | ; Reference to file #4.3 supported by DBIA 10091
|
---|
7 | ;
|
---|
8 | EN ; start here
|
---|
9 | D PSUHDR ; display option explanation
|
---|
10 | S PSUERR=0
|
---|
11 | S X=$$VALI^PSUTL(4.3,1,217),PSUSNDR=+$$VAL^PSUTL(4,X,99)
|
---|
12 | ASK ; ask type of report desired
|
---|
13 | S DIR("?",1)="If this is the monthly report that will be sent to the PBM section"
|
---|
14 | S DIR("?",2)="for inclusion into the master file, answer with a 'Y' for YES."
|
---|
15 | S DIR("?",3)="If this is not the monthly report or you want to specify a date range"
|
---|
16 | S DIR("?")="then enter 'N' for NO."
|
---|
17 | S DIR("A")="Is this the monthly report",DIR(0)="YO"
|
---|
18 | D ^DIR K DIR W !
|
---|
19 | G ERR:(Y="^")!(Y="")!($D(DTOUT))
|
---|
20 | K DTOUT
|
---|
21 | S PSUAM=Y,ERC=0
|
---|
22 | DATES ; do this if user entered N, wants date range
|
---|
23 | I 'PSUAM D
|
---|
24 | .K PSUMNTH
|
---|
25 | .S %DT(0)=2880000,%DT="AEPX",%DT("A")="Select Start Date: "
|
---|
26 | .D ^%DT K %DT W !
|
---|
27 | .I +Y'>0 S ERC=1 Q ; condition 1, exit.
|
---|
28 | .S PSUSDT=+Y
|
---|
29 | .S %DT(0)=2880000,%DT="AEPX",%DT("A")=" Select End Date: "
|
---|
30 | .D ^%DT K %DT W !
|
---|
31 | .I +Y'>0 S ERC=1 Q ; condition 1, exit.
|
---|
32 | .S PSUEDT=+Y
|
---|
33 | .I PSUEDT'>PSUSDT D Q
|
---|
34 | ..W !!,"The end date of the search must be greater than the start date.",!
|
---|
35 | ..K PSUSDT,PSUEDT
|
---|
36 | ..S ERC=2 ; condition 2, ask dates again
|
---|
37 | .I PSUSDT>DT!(PSUEDT>DT) D
|
---|
38 | ..W !!,"Searches cannot be executed for future dates.",!
|
---|
39 | ..K PSUSDT,PSUEDT
|
---|
40 | ..S ERC=2 ; condition 2, ask dates again
|
---|
41 | I ERC=1 G ERR
|
---|
42 | I ERC=2 S ERC=0 G DATES
|
---|
43 | ;
|
---|
44 | PSUMON ; do this if user asked for monthly report
|
---|
45 | I PSUAM D
|
---|
46 | .S PSUMNTH=1
|
---|
47 | .S %DT(0)=2880000,%DT="MAEP",%DT("A")="Select Month/Year: " K DTOUT,X,Y
|
---|
48 | .D ^%DT K %DT W !
|
---|
49 | .S ERC=$S($D(DTOUT):1,X="^":1,X="^^":3,+Y'>0:1,1:0)
|
---|
50 | .Q:ERC ; check error condition
|
---|
51 | .I Y>DT!($E(Y,1,5)=$E(DT,1,5)) D Q:ERC
|
---|
52 | ..W !!,"PBM statistical data can only be compiled for months that have already passed.",!
|
---|
53 | ..K Y
|
---|
54 | ..S ERC=2 ; condition 2, ask month again
|
---|
55 | .I $E(Y,4,5)="00" D Q:ERC
|
---|
56 | ..W !!,"Oops, you forgot to enter a month. Try again, please."
|
---|
57 | ..K Y
|
---|
58 | ..S ERC=2
|
---|
59 | .S PSUSDT=$E(Y,1,5)_"01",MNUM=$E(Y,4,5)
|
---|
60 | .S PSUMTH=$E(Y,1,5) ;leap year correction
|
---|
61 | .S PSULY=$$LEAPYR^PSUCP(PSUMTH) ;leap year correction
|
---|
62 | .S PSUEDT=$E(Y,1,5)_$S(MNUM["02":$S(PSULY:"29",1:"28"),MNUM="04":"30",MNUM="06":"30",MNUM="09":"30",MNUM="11":"30",1:31) ;leap year correction
|
---|
63 | .;S PSUEDT=$E(Y,1,5)_$S(MNUM="02":"29",MNUM="04":"30",MNUM="06":"30",MNUM="09":"30",MNUM="11":"30",1:31)
|
---|
64 | ;
|
---|
65 | ;
|
---|
66 | G ERR:ERC=1,ASK:ERC=3
|
---|
67 | I ERC=2 S ERC=0 G PSUMON ; erroneous input, try again
|
---|
68 | S ^XTMP("PSU_"_PSUJOB,"PSUMONTH")=$E(PSUSDT,1,5)
|
---|
69 | ;
|
---|
70 | SETDT ; set month name variables
|
---|
71 | S X=PSUSDT D DATE S PSUMON1=Y
|
---|
72 | S X=PSUEDT D DATE S PSUMON2=Y
|
---|
73 | S X=$E(PSUSDT,1,5)_"00" D DATE S PSUMON=$E(PSUSDT,1,5)
|
---|
74 | S ^XTMP("PSU_"_PSUJOB,"PSUMONTH")=PSUMON
|
---|
75 | K X,X1
|
---|
76 | ;
|
---|
77 | SELF ; include self and PSU PBM mailgroup
|
---|
78 | S PSUPBMG=0
|
---|
79 | S PSUDUZ=0
|
---|
80 | S DIR("A")="Do you want a copy of this report sent to you in a MailMan message"
|
---|
81 | S DIR("?")="Please answer with a 'Y' or 'N'."
|
---|
82 | S DIR(0)="YO",DIR("B")="NO"
|
---|
83 | D ^DIR K DIR,DIRUT,DIROUT,DUOUT,DTOUT W !
|
---|
84 | G ERR:Y="",ERR:Y="^",DATES:Y["^^"
|
---|
85 | I Y S PSUDUZ=DUZ,^XTMP("PSU_"_PSUJOB,"PSUFLAG1")="",^XTMP("PSU_"_PSUJOB,"PSUFLAG2")="",PSUFLAG1=1,PSUFLAG2=1
|
---|
86 | I 'Y S ^XTMP("PSU_"_PSUJOB,"PSUFLAG3")="",PSUFLAG3=1
|
---|
87 | I Y S PSUPBMG=1 ;Send copy to PSU PBM mail group
|
---|
88 | ;
|
---|
89 | MASTER ; if monthly, should it be added to master file
|
---|
90 | S (PSUMASF,Y)=0
|
---|
91 | I PSUAM D
|
---|
92 | .S DIR("A")="Send this to the PBM section for addition to the master file"
|
---|
93 | .S DIR("?")="Please answer with a 'Y' or 'N'."
|
---|
94 | .S DIR(0)="YO",DIR("B")="NO"
|
---|
95 | .D ^DIR K DIR,DIRUT,DIROUT,DUOUT,DTOUT W !
|
---|
96 | G ERR:Y="",ERR:Y="^",SELF:Y["^^"
|
---|
97 | I Y S PSUMASF=1
|
---|
98 | ;
|
---|
99 | MODULE ; display and select module(s)
|
---|
100 | D OPTS^PSUCP ; set up PSUA array with option info
|
---|
101 | W !!,"Select one or more of the following:",!
|
---|
102 | F I=1:1:12 W !,I,".",?5,PSUA(I,"M")
|
---|
103 | W !!,"Laboratory data and a Patient Demographic summary report will be automatically"
|
---|
104 | W !,"generated if IVs, Unit Dose, or Prescription extracts are chosen."
|
---|
105 | W !,"You may select all of the modules by entering 'A' for ALL or by using '1:12'."
|
---|
106 | W !!,"The Provider Data report may take an extended amount of time to run."
|
---|
107 | W !,"It is recommended that it be run during off peak hours."
|
---|
108 | MODP ; module selection prompt
|
---|
109 | W !!,"Select the code(s) associated with the data requested: "
|
---|
110 | R X:DTIME E G ERR
|
---|
111 | I X["^" G ERR:X="^",MASTER:PSUAM,SELF
|
---|
112 | I X="" W " <??>",$C(7) S X="?"
|
---|
113 | ;
|
---|
114 | ;
|
---|
115 | ;I X["7" D G MODULE
|
---|
116 | ;.W !!,"Lab may not be selected directly. It will be automatically included when"
|
---|
117 | ;.W !,"options 1, 2 or 4 are part of the selection."
|
---|
118 | S:"Aa"[$E(X) X="1:12"
|
---|
119 | MODHLP I X["?" D G MODULE:X["??",MODP
|
---|
120 | .W !!,"Enter: A single code number to print just that report."
|
---|
121 | .W !,?8,"A range of code numbers. Example: 1:3"
|
---|
122 | .W !,?8,"Multiple code numbers separated by commas. Example: 2,4,5"
|
---|
123 | .W !,?8,"The letter A to select ALL reports."
|
---|
124 | .W !,?8,"A single up-arrow ( ^ ) to exit now without running any reports."
|
---|
125 | .W !,?8,"Double up-arrow ( ^^ ) to go back to a previous prompt.",!
|
---|
126 | S X=$TR(X,"-;_><.A","::::::")
|
---|
127 | K PSUMOD
|
---|
128 | F PII=1:1:$L(X,",") D
|
---|
129 | .S X1=$P(X,",",PII)
|
---|
130 | .Q:X1=""
|
---|
131 | .I X1[":" D Q
|
---|
132 | ..S XBEG=$P(X1,":",1),XEND=$P(X1,":",2)
|
---|
133 | ..I (XBEG="")!(XEND="") Q
|
---|
134 | ..F PJJ=XBEG:1:XEND S PSUMOD(PJJ)=""
|
---|
135 | ..K PJJ,XBEG,XEND
|
---|
136 | .S PSUMOD(X1)=""
|
---|
137 | S (X,ERC)=0 F S X=$O(PSUMOD(X)) Q:X="" I '$D(PSUA(X)) S ERC=1 Q
|
---|
138 | I ERC W !!,"<INVALID CHOICE - ",X,", TRY AGAIN>",$C(7) G MODP
|
---|
139 | I '$D(PSUMOD) W !!,"No choices were made." S X="?" G MODHLP
|
---|
140 | ;
|
---|
141 | F PII=1,2,4 I $D(PSUMOD(PII)) S PSUMOD(13)="" ; add Lab if IV,UD or OP
|
---|
142 | ;
|
---|
143 | W !!,"You have selected: "
|
---|
144 | S X="",PSUOPTS="" F S X=$O(PSUMOD(X)) Q:X="" W ?20,X," - ",PSUA(X,"M"),! S PSUOPTS=PSUOPTS_X_","
|
---|
145 | I $D(PSUMOD(1))!$D(PSUMOD(2))!$D(PSUMOD(4)) D
|
---|
146 | . W ?20,"Patient Demographic Summary" W !
|
---|
147 | S PSUOPTS=$E(PSUOPTS,1,$L(PSUOPTS)-1) ; remove trailing comma
|
---|
148 | ;
|
---|
149 | ;Set flag for combined AMIS summary report.
|
---|
150 | I (PSUOPTS["1,2,3,4")&(PSUOPTS[6) S ^XTMP("PSU_"_PSUJOB,"CBAMIS")=""
|
---|
151 | ;
|
---|
152 | RPT ; select report type - full report or summary only
|
---|
153 | D:PSUOPTS'=11&(PSUOPTS'=12) ; no summary for VITALS/IMMS OR AA**
|
---|
154 | . S DIR("A")="Print Summary Only"
|
---|
155 | . S DIR("?",1)="Please answer with a 'Y' or 'N'."
|
---|
156 | . S DIR("?")="Answer Yes and only the summary report will be generated."
|
---|
157 | . S DIR(0)="YO",DIR("B")="NO"
|
---|
158 | . D ^DIR K DIR,DIRUT,DIROUT,DUOUT,DTOUT W !
|
---|
159 | . G ERR:Y="",ERR:Y="^",MODULE:Y["^^"
|
---|
160 | . S PSUSMRY=$S(Y:1,1:0)
|
---|
161 | S:PSUOPTS=11!(PSUOPTS=12) PSUSMRY=0
|
---|
162 | ;
|
---|
163 | ;
|
---|
164 | BCKGND ; always run as a background job
|
---|
165 | W !!,"This report will automatically run as a background job."
|
---|
166 | ; ask time to queue
|
---|
167 | S DIR("?",1)="You can start the program now or queue it to start later."
|
---|
168 | S DIR("?",2)="Past date/time is not allowed. Future dates up to 10 days are allowed."
|
---|
169 | S DIR("?")="Enter an appropriate date and time or press <Enter> to start now."
|
---|
170 | S %DT="RX",X="NOW+10" D ^%DT
|
---|
171 | S DIR("A")="REQUESTED TIME TO RUN: ",DIR(0)="DAO^NOW:"_Y_":EFRX"
|
---|
172 | S DIR("B")="NOW"
|
---|
173 | D ^DIR K DIR W !
|
---|
174 | G ERR:(Y="^")!(Y="")!($D(DTOUT))
|
---|
175 | K DTOUT
|
---|
176 | S PSUDTH=Y
|
---|
177 | ;
|
---|
178 | DEVICE ;
|
---|
179 | S PSUIOP="",PSUPOP=1
|
---|
180 | I 'PSUDUZ D G ERR:POP
|
---|
181 | . I PSUOPTS=11!(PSUOPTS=12) W !,"HARDCOPIES NOT AVAILABLE FOR THIS OPTION" S POP=1 Q
|
---|
182 | .S PSUIO=ION_";"_IOST_";"_IOM_";"_IOSL
|
---|
183 | .S %ZIS="N0",%ZIS("B")="",%ZIS("A")="Select 132 column device: "
|
---|
184 | .D ^%ZIS K %ZIS
|
---|
185 | .I POP!($E(IOST)="C"),$G(PSUFQ) D I PSUPOP S POP=1 Q
|
---|
186 | ..W !!,"You have not selected an appropriate print device."
|
---|
187 | ..W !,"Enter 'C' to continue data compilation and send mail messages"
|
---|
188 | ..W !," but not print any hardcopy."
|
---|
189 | ..W !,"Enter '^' to abort this whole option now."
|
---|
190 | ..F R !,"-> ",PSUX:DTIME Q:"C^"[$E(PSUX) W " ??"
|
---|
191 | ..S PSUPOP=$S(PSUX="C":0,1:1)
|
---|
192 | .S PSUIOP=$S('PSUPOP:"",1:ION_";"_IOST_";"_IOM_";"_IOSL) ; save printer parameters
|
---|
193 | .D RESETVAR^%ZIS ; restore terminal parameters
|
---|
194 | EXIT ; exit point for normal finish
|
---|
195 | ;
|
---|
196 | Q ; return to calling routine, ^PSUCP
|
---|
197 | ;
|
---|
198 | PSUHDR ;Display header
|
---|
199 | W !!,"The Pharmacy Benefits Management (PBM) report will extract"
|
---|
200 | W !,"statistics from one or more of the following files:",!
|
---|
201 | W !,"1. Pharmacy Patient IV Sub-file File # 55.01"
|
---|
202 | W !,"2. Pharmacy Patient UD Sub-file File # 55.06"
|
---|
203 | W !,"3. AR/WS Stats File # 58.5"
|
---|
204 | W !,"4. Prescription File # 52"
|
---|
205 | W !,"5. Procurement File # 58.811,# 58.81"
|
---|
206 | W !,"6. Controlled Substances File # 58.81"
|
---|
207 | W !,"7. Patient Demographics File # 2"
|
---|
208 | W !,"8. Outpatient Visits File # 9000010,# 9000010.07"
|
---|
209 | W !,"9. Inpatient PTF Record File # 45"
|
---|
210 | W !,"10. Provider Data File # 200,# 7,# 49,# 8932.1"
|
---|
211 | W !,"11. Allergy/Adverse Event File # 120.8,# 120.85"
|
---|
212 | W !,"12. Vitals/Immunization Record File # 120.5,# 9999999.14"
|
---|
213 | W !,"13. Laboratory File # 60,# 63"
|
---|
214 | ;
|
---|
215 | W !!,"This data can be collected for ALL of the files listed or for one or"
|
---|
216 | W !,"more specific files. A summary of data or a detailed report by drug"
|
---|
217 | W !,"can be delivered to you in a mail message or in a hard copy report.",!!
|
---|
218 | Q
|
---|
219 | ;
|
---|
220 | DATE ;Date conversion
|
---|
221 | S Y=X X ^DD("DD") S:Y="" Y="Unknown"
|
---|
222 | Q
|
---|
223 | ;
|
---|
224 | ERR ; Exit point following erroneous input or ^
|
---|
225 | K ERC,MNUM,MOD,PII,PSUA,PSUAM,PSUDUZ,PSUEDT,PSUPBMG,PSUMASF,PSUPBMG,PSUMNTH,PSUMOD
|
---|
226 | ;K PSUMON,PSUMON1,PSUMON2,PSUOPTS,PSUSDT,PSUSMRY,X1
|
---|
227 | K PSUMON1,PSUMON2,PSUOPTS,PSUSDT,PSUSMRY,X1
|
---|
228 | S PSUERR=1
|
---|
229 | Q
|
---|
230 | ;
|
---|