1 | ECXUTLA ;ALB/JAP - Utilities for Audit Reports ;Sep 25, 1997
|
---|
2 | ;;3.0;DSS EXTRACTS;**8,14**;Dec 22, 1997
|
---|
3 | ;
|
---|
4 | AUDIT(ECXHEAD,ECXERR,ECXARRAY,ECXAUD) ;set audit report parameters
|
---|
5 | ; input
|
---|
6 | ; ECXHEAD = extract HEADER CODE (required)
|
---|
7 | ; (from file #727.1, field #7)
|
---|
8 | ; ECXERR = passed-by-reference variable (required)
|
---|
9 | ; ECXARRAY = passed-by-reference array (required)
|
---|
10 | ; ECXAUD = 0/1 (optional)
|
---|
11 | ; 0 --> extract audit (default)
|
---|
12 | ; 1 --> SAS audit
|
---|
13 | ; output
|
---|
14 | ; ECXARRAY = array of audit parameters
|
---|
15 | ; ECXARRAY("DEF") = ien of extract type in file #727.1
|
---|
16 | ; ECXARRAY("TYPE") = print name for extract; field #7 in file #727.1
|
---|
17 | ; ECXARRAY("EXTRACT") = ien of extract in file #727
|
---|
18 | ; ECXARRAY("START") = start date for extract audit
|
---|
19 | ; ECXARRAY("END") = end date for extract audit
|
---|
20 | ; ECXARRAY("ERUN") = date on which extract was generated
|
---|
21 | ; ECXARRAY("DIV") = ien of station if file #4
|
---|
22 | ; error CODE
|
---|
23 | ; ECXERR = 1, if input problem occurs
|
---|
24 | ; 0, otherwise
|
---|
25 | ;
|
---|
26 | N X,Y,N,DA,DIC,DIQ,DIR,DTOUT,DUOUT,DIRUT,ECXDA,ECXTYPE,ECXSTART,ECXEND,ECXARR
|
---|
27 | S ECXERR=0
|
---|
28 | S N=$O(^ECX(727.1,"C",ECXHEAD,"")) S:N="" ECXERR=1
|
---|
29 | Q:ECXERR
|
---|
30 | S DIC="^ECX(727.1,",DIC(0)="NZ",X=N
|
---|
31 | D ^DIC I Y=-1 S ECXERR=1 Q
|
---|
32 | S ECXTYPE=$P(Y(0),U,7)_U_+Y K X,Y,DIC
|
---|
33 | I $G(ECXAUD)=1,ECXHEAD'="DEN",ECXHEAD'="PRE",ECXHEAD'="RAD",ECXHEAD'="SUR" S ECXERR=1
|
---|
34 | Q:ECXERR
|
---|
35 | S DIC="^ECX(727,",DIC(0)="AEMQ",DIC("S")="I $P(^(0),U,3)=$P(ECXTYPE,U),'$D(^(""PURG""))"
|
---|
36 | D ^DIC
|
---|
37 | I Y=-1!($G(DUOUT))!($G(DTOUT)) S ECXERR=1 Q
|
---|
38 | S DIC="^ECX(727,",(DA,ECXDA)=+Y,DR=".01;1;2;3;4;5;15;300",DIQ="ECXARR",DIQ(0)="IE"
|
---|
39 | D EN^DIQ1
|
---|
40 | W !!,?5,"Extract: ",ECXARR(727,ECXDA,2,"E")," #",ECXDA
|
---|
41 | W !!,?5,"Start date: ",ECXARR(727,ECXDA,3,"E")
|
---|
42 | W !,?5,"End date: ",ECXARR(727,ECXDA,4,"E")
|
---|
43 | W !,?5,"# of Records: ",ECXARR(727,ECXDA,5,"E")
|
---|
44 | I ECXHEAD="PRO" W !,?5,"Station: ",ECXARR(727,ECXDA,15,"E")
|
---|
45 | ;if transmit date exists, then ask user if audit still needed
|
---|
46 | I $L(ECXARR(727,ECXDA,300,"E"))>0 D
|
---|
47 | .W !!,?5,"The extract which you have chosen to audit"
|
---|
48 | .W !,?5,"was transmitted to AAC/DSS on ",ECXARR(727,ECXDA,300,"E"),".",!
|
---|
49 | .S DIR(0)="Y",DIR("A")="Do you want to continue with this audit report",DIR("B")="NO" D ^DIR
|
---|
50 | .S:$G(DIRUT) ECXERR=1 S:Y=0 ECXERR=1
|
---|
51 | Q:ECXERR
|
---|
52 | ;setup the return array
|
---|
53 | S ECXARRAY("EXTRACT")=ECXARR(727,ECXDA,.01,"E"),ECXARRAY("DIV")=ECXARR(727,ECXDA,15,"I"),ECXARRAY("TYPE")=$P(ECXTYPE,U),ECXARRAY("DEF")=$P(ECXTYPE,U,2)
|
---|
54 | S ECXARRAY("START")=ECXARR(727,ECXDA,3,"E"),ECXARRAY("END")=ECXARR(727,ECXDA,4,"E"),ECXARRAY("ERUN")=ECXARR(727,ECXDA,1,"E")
|
---|
55 | ;determine date range only for extract audit reports
|
---|
56 | I $G(ECXAUD)=0 D
|
---|
57 | .S ECXSTART=ECXARRAY("START"),ECXEND=ECXARRAY("END") D RANGE^ECXUTLA(.ECXSTART,.ECXEND,.ECXERR)
|
---|
58 | .I ECXERR K ECXARRAY
|
---|
59 | .Q:ECXERR
|
---|
60 | .S ECXARRAY("START")=ECXSTART,ECXARRAY("END")=ECXEND
|
---|
61 | Q
|
---|
62 | ;
|
---|
63 | RANGE(ECXSTART,ECXEND,ECXERR) ;determine date range for extract audit report
|
---|
64 | ; input
|
---|
65 | ; ECXSTART = start date of extract in file #727 (required)
|
---|
66 | ; passed by reference
|
---|
67 | ; ECXEND = end date of extract in file #727 (required)
|
---|
68 | ; passed by reference
|
---|
69 | ; ECXERR = passed by reference (required)
|
---|
70 | ; output
|
---|
71 | ; ECXSTART = user selected start date
|
---|
72 | ; ECXEND = user selected end date
|
---|
73 | ; error CODE
|
---|
74 | ; ECXERR = 1, if input problem occurs
|
---|
75 | ; 0, otherwise
|
---|
76 | ;
|
---|
77 | ;
|
---|
78 | ;convert dates to internal format
|
---|
79 | N DATEA,DATEB,X,Y,%DT,DTOUT,OUT
|
---|
80 | S (ECXERR,OUT)=0
|
---|
81 | S X=ECXSTART D ^%DT S DATEA=Y
|
---|
82 | S X=ECXEND D ^%DT S DATEB=Y
|
---|
83 | ;allow user to select start date
|
---|
84 | ;can't be less than ecxstart or greater than ecxend
|
---|
85 | W !!,?5,"You can narrow the date range, if you wish.",!
|
---|
86 | W !,?5,"The Start Date can't be earlier than ",ECXSTART,","
|
---|
87 | W !,?5,"or later than ",ECXEND,".",!
|
---|
88 | F Q:OUT!ECXERR D
|
---|
89 | .S %DT="AEX",%DT("A")="Select Start Date: ",%DT("B")=ECXSTART,%DT(0)=DATEA
|
---|
90 | .D ^%DT S:Y=-1 ECXERR=1 S:$G(DTOUT) ECXERR=1
|
---|
91 | .Q:ECXERR
|
---|
92 | .I Y>DATEB D Q
|
---|
93 | ..W !,?5,"But that's later than ",ECXEND,"...try again.",!
|
---|
94 | .S DATEA=Y,OUT=1
|
---|
95 | I ECXERR K ECXSTART,ECXEND
|
---|
96 | Q:ECXERR
|
---|
97 | S Y=DATEA D DD^%DT S ECXSTART=Y
|
---|
98 | ;allow user to select end date
|
---|
99 | ;can't be less than ecxstart or greater than ecxend
|
---|
100 | W !!,?5,"The End Date can't be earlier than ",ECXSTART
|
---|
101 | W !,?5,"(the Start Date you selected), or later than ",ECXEND,".",!
|
---|
102 | S OUT=0
|
---|
103 | F Q:OUT!ECXERR D
|
---|
104 | .S %DT="AEX",%DT("A")="Select End Date: ",%DT("B")=ECXEND,%DT(0)=-DATEB
|
---|
105 | .D ^%DT S:Y=-1 ECXERR=1 S:$G(DTOUT) ECXERR=1
|
---|
106 | .Q:ECXERR
|
---|
107 | .I Y<DATEA D Q
|
---|
108 | ..W !,?5,"But that's earlier than ",ECXSTART,"...try again.",!
|
---|
109 | .S DATEB=Y,OUT=1
|
---|
110 | I ECXERR K ECXSTART,ECXEND
|
---|
111 | Q:ECXERR
|
---|
112 | S Y=DATEB D DD^%DT S ECXEND=Y
|
---|
113 | Q
|
---|
114 | ;
|
---|
115 | DEVICE(ZTRTN,ZTDESC,ZTSAVE) ;get print device and optionally task to background
|
---|
116 | ; input
|
---|
117 | ; ZTRTN = line^routine; task entry point (required)
|
---|
118 | ; variable for %ZTLOAD
|
---|
119 | ; ZTDESC = task description (required)
|
---|
120 | ; variable for %ZTLOAD
|
---|
121 | ; ZTSAVE = array; passed by reference (required)
|
---|
122 | ; variables for %ZTLOAD
|
---|
123 | ; output
|
---|
124 | ; ZTSAVE = returns ZTSAVE("POP"),ZTSAVE("ZTSK")
|
---|
125 | ;
|
---|
126 | N POP,ZTSK
|
---|
127 | S ZTSAVE("POP")=0,ZTSAVE("ZTSK")=0
|
---|
128 | ;return ztsave("pop")=1 and quit if required input not available
|
---|
129 | I '$L(ZTRTN)!('$L(ZTDESC))!('$D(ZTSAVE)) S ZTSAVE("POP")=1 Q
|
---|
130 | ;get print device
|
---|
131 | K IO("Q") S %ZIS="QM" D ^%ZIS
|
---|
132 | S ZTSAVE("POP")=POP
|
---|
133 | I POP D
|
---|
134 | .W !,"No device selected...exiting.",!
|
---|
135 | Q:POP
|
---|
136 | I $D(IO("Q")) D
|
---|
137 | .S ZTSAVE("ZTREQ")="@"
|
---|
138 | .D ^%ZTLOAD
|
---|
139 | .I $G(ZTSK)>0 D
|
---|
140 | ..W !,"Request queued as Task #",ZTSK,".",!
|
---|
141 | ..S ZTSAVE("ZTSK")=ZTSK
|
---|
142 | ..S ZTSAVE("POP")=0
|
---|
143 | .I '$G(ZTSK) D
|
---|
144 | ..W !,"Request to queue cancelled...exiting.",!
|
---|
145 | ..S ZTSAVE("ZTSK")=0
|
---|
146 | ..S ZTSAVE("POP")=1
|
---|
147 | Q
|
---|
148 | ;
|
---|
149 | WARDS(ECXALL,ECXDIV) ;get wards for selected divisions
|
---|
150 | ; input
|
---|
151 | ; ECXALL = 1/0 (optional)
|
---|
152 | ; 1==> user selected all divisions OR
|
---|
153 | ; facility is non-divisional
|
---|
154 | ; 0==> user selected some divisions
|
---|
155 | ; if ECXALL not defined, then assume 1
|
---|
156 | ; ECXDIV = array of divisions selected (optional)
|
---|
157 | ; passed by reference array containing
|
---|
158 | ; selected divisions;
|
---|
159 | ; if ECXALL=1, then ECXDIV array isn't
|
---|
160 | ; required; information for all wards will be obtained
|
---|
161 | ; if ECXALL=0, then only wards for divisions in ECXDIV
|
---|
162 | ; output
|
---|
163 | ; ^TMP($J,"ECXWARD", contains ward name, division, g&l order
|
---|
164 | ; ^TMP($J,"ECXORDER", contains ward grouping info
|
---|
165 | ;
|
---|
166 | N IEN,WARD,ORDX,NAME,NM,ORDER,DIV,HIEN,GROUP,DATA,DEPT,NAMEDEPT
|
---|
167 | K ^TMP($J,"ECXWARD"),^TMP($J,"ECXORDER")
|
---|
168 | ;if ecxall not here, then set ecxall=1
|
---|
169 | S:'$D(ECXALL) ECXALL=1 S:ECXALL="" ECXALL=1
|
---|
170 | S ORDX=0,NM=""
|
---|
171 | F S NM=$O(^DIC(42,"B",NM)) Q:NM="" S IEN=0 F S IEN=$O(^DIC(42,"B",NM,IEN)) Q:IEN="" D
|
---|
172 | .S DIV=+$P(^DIC(42,IEN,0),U,11) Q:DIV=0
|
---|
173 | .I ECXALL=0,'$D(ECXDIV(DIV)) Q
|
---|
174 | .S (NAME,ORDER,DEPT)="",NAME=$P(^DIC(42,IEN,0),U,1),ORDER=+$P($G(^DIC(42,IEN,"ORDER")),U,1),DEPT=$P($G(^ECX(727.4,IEN,0)),U,2)
|
---|
175 | .;'unordered' ward is probably inactive, but get basic data anyway
|
---|
176 | .I ORDER=0 S ORDX=ORDX+1,ORDER="99999"_ORDX,ORDER=+ORDER
|
---|
177 | .;get this ward's ien in file #44; file #727.802 & #727.808 use pointers to file #44
|
---|
178 | .S HIEN=+$P($G(^DIC(42,IEN,44)),U,1) Q:HIEN=0
|
---|
179 | .;if this is last ward in group, then get the group name
|
---|
180 | .K GROUP I $D(^DIC(42,IEN,1,1,0)) S GROUP=$P(^DIC(42,IEN,1,1,0),U,1) I GROUP="" K GROUP
|
---|
181 | .S ^TMP($J,"ECXWARD",HIEN)=ORDER_U_NAME_U_DIV_U_IEN_U_DEPT
|
---|
182 | .I $D(GROUP) S ^TMP($J,"ECXWARD",HIEN,1)=GROUP
|
---|
183 | ;after all wards in file #42 are processed, arrange by g&l order
|
---|
184 | S HIEN=0
|
---|
185 | F S HIEN=$O(^TMP($J,"ECXWARD",HIEN)) Q:HIEN="" S DATA=^TMP($J,"ECXWARD",HIEN) D
|
---|
186 | .S ORDER=$P(DATA,U,1),NAME=$P(DATA,U,2),DIV=$P(DATA,U,3),DEPT=$P(DATA,U,5)
|
---|
187 | .S NAMEDEPT=NAME S:DEPT]"" NAMEDEPT=NAME_" <"_DEPT_">"
|
---|
188 | .S ^TMP($J,"ECXORDER",DIV,ORDER)=HIEN_U_NAMEDEPT_U
|
---|
189 | .I $D(^TMP($J,"ECXWARD",HIEN,1)) S GROUP=^(1),^TMP($J,"ECXORDER",DIV,ORDER,1)=1_U_GROUP_U
|
---|
190 | Q
|
---|
191 | ;
|
---|
192 | SASHEAD(ECXFL,ECXHEAD,ECXDIV,ECXARRAY,ECXPG,ECXTAB) ;header and page control
|
---|
193 | ;
|
---|
194 | ; ECXFL = feeder location (division) (required)
|
---|
195 | ; ECXHEAD = extract header from file #727.1 (required)
|
---|
196 | ; ECXDIV = array of divisions selected (required)
|
---|
197 | ; ECXPG = page number (required)
|
---|
198 | ; ECXTAB = tab location;
|
---|
199 | ; allows for proper spacing in sub-header line (optional)
|
---|
200 | ;
|
---|
201 | N JJ,SS,LN
|
---|
202 | S $P(LN,"-",80)=""
|
---|
203 | I $G(ECXTAB)="" S ECXTAB=40
|
---|
204 | I $E(IOST)="C" D
|
---|
205 | .S SS=22-$Y F JJ=1:1:SS W !
|
---|
206 | .I PG>0 S DIR(0)="E" W ! D ^DIR K DIR S:'Y QFLG=1
|
---|
207 | Q:QFLG
|
---|
208 | W:$Y!($E(IOST)="C") @IOF S ECXPG=ECXPG+1
|
---|
209 | W !,"SAS Audit Report for "_ECXARRAY("TYPE")_" ("_ECXHEAD_") Extract"
|
---|
210 | W !,"DSS Extract Log #: "_ECXARRAY("EXTRACT")
|
---|
211 | W !,"Date Range of Audit: "_ECXARRAY("START")_" to "_ECXARRAY("END")
|
---|
212 | W !,"Report Run Date/Time: "_ECXRUN
|
---|
213 | I $D(ECXDIV(ECXFL)) W !,"Division/Site: "_$P(ECXDIV(ECXFL),U,2)_" ("_ECXFL_")",?68,"Page: "_ECXPG
|
---|
214 | I '$D(ECXDIV(ECXFL)) W !,"Division/Site: "_"Unknown",?68,"Page: "_ECXPG
|
---|
215 | W !!,"Feeder Location",?ECXTAB,"Feeder Key",?68,"Quantity"
|
---|
216 | W !,LN,!
|
---|
217 | Q
|
---|