1 | QACMAIL0 ;ERC/WASHCIOFO-Send data to reposititory ;11/29/99
|
---|
2 | ;;2.0;Patient Representative;**4,14,15,17**;07/25/1995
|
---|
3 | ;
|
---|
4 | N QACREQUE
|
---|
5 | D ZTDTH
|
---|
6 | ;
|
---|
7 | Q
|
---|
8 | ;
|
---|
9 | TASK ;Set up tasking for routine. Roll-up will be queued for
|
---|
10 | ; 01:30am, so that it doesn't run at a busy time of day.
|
---|
11 | S ZTRTN="START^QACMAIL0"
|
---|
12 | S ZTDESC="Routine collects data from local Patient Rep file for rollup"
|
---|
13 | S ZTDTH=QACSTART
|
---|
14 | S ZTSAVE("XMTXT")="",ZTSAVE("QACNOT")="",ZTSAVE("QACREQUE")=""
|
---|
15 | S ZTIO=""
|
---|
16 | F QAC1=1:1:20 D ^%ZTLOAD Q:$G(ZTSK)
|
---|
17 | I $G(ZTSK)']"" S QACERR=7 D ERROR
|
---|
18 | S DA=1,DR="754///^S X=ZTSK"
|
---|
19 | S DIE="^QA(740,"
|
---|
20 | D ^DIE K DIE
|
---|
21 | D EXIT
|
---|
22 | Q
|
---|
23 | START ;
|
---|
24 | N QAC1,QACC,QACD,QACE,QACEE,QACF,QACHK,QACJ,QACK
|
---|
25 | N QA,QACBDAT,QACCONT,QACDOM,QACEDAT,QACELIG,QACEM,QACEMP
|
---|
26 | N QACERR,QACERROR,QACEXIT,QACINC,QACINTAP,QACLIN,QANLINE,QACLSAT,QACMADE
|
---|
27 | N QACMON,QACNO,QACNOCNT,QACNOT,QACQUIT,QACRST,QACSERV,QACSITE,QACSOR
|
---|
28 | N QACSR,QACSTA,QACST,QACTMP,QACVISN,QACVZ,QACYR,QACZERO
|
---|
29 | ;QACLCNT is message line count
|
---|
30 | ;QACRCNT is the number of records processed
|
---|
31 | ;QACCHCNT is a count of characters on the EMP line
|
---|
32 | ;QACTCNT is number of characters in message
|
---|
33 | ;QACNOCNT is the number of records not sent
|
---|
34 | N QACCHCNT,QACLCNT,QACNOCNT,QACRCNT,QACTCNT
|
---|
35 | S (QACCHCNT,QACLCNT,QACNOCNT,QACRCNT,QACTCNT)=0
|
---|
36 | ;set executable to cut down on keying
|
---|
37 | S QACINC="S QACTCNT=$G(QACTCNT)+$L($G(^TMP(""QAC MAIL"",$J,QACLCNT))),QACLCNT=$G(QACLCNT)+1"
|
---|
38 | K ^TMP("QAC MAIL",$J)
|
---|
39 | S QACEXIT=0
|
---|
40 | S QACZERO=$S($D(^QA(740,1,0))#2:^(0),1:0) I +QACZERO'>0 S QACERR=1 D ERROR G EXIT
|
---|
41 | S QACSITNO=+QACZERO
|
---|
42 | I $G(QACSITNO)]"" D VISN(QACSITNO)
|
---|
43 | S QACSTA="" D SITE^QACUTL0(+QACZERO,.QACSTA) I '$L(QACSTA) S QACERR=3 D ERROR G EXIT
|
---|
44 | ;reset ZTDTH, ^%ZTLOAD
|
---|
45 | I $G(QACREQUE)<1 D ZTDTH ;re-tasks job for next run
|
---|
46 | I $G(QACHK)=1 Q
|
---|
47 | ;
|
---|
48 | I $G(QACREQUE)'=1 D LOOP^QACMAIL1
|
---|
49 | I $G(QACREQUE)=1 D REQLOOP
|
---|
50 | I $D(^TMP("QAC MAIL",$J)) D SEND
|
---|
51 | EXIT ;
|
---|
52 | K ^TMP("QAC MAIL",$J)
|
---|
53 | K DIROUT,DIRUT
|
---|
54 | K QACDUZ,QACINT,QACMSG,QACNO,QACNOCNT
|
---|
55 | N QACQBEG,QACQEND,QACRCNT,QACREQUE,QACST,QACTCNT,QACVISN,QACZTSK
|
---|
56 | K X,X1,X2
|
---|
57 | K XMSUB,XMTEXT,XMY
|
---|
58 | K ZTDESC,ZTDTH,ZTRTN,ZTSAVE,ZTIO
|
---|
59 | Q
|
---|
60 | ERROR ;
|
---|
61 | ; Need to send message with error codes if QACERR is set.
|
---|
62 | ; QACERR is set if site and domain information is missing
|
---|
63 | ; or if no task number assigned to queueing.
|
---|
64 | ; Then need to re-queue for next run.
|
---|
65 | D KILL^XM
|
---|
66 | S QACERROR(QACERR)=$P($T(ERR+QACERR),";;",2)
|
---|
67 | S XMTEXT="QACERROR("
|
---|
68 | S XMY("G.IRM")=""
|
---|
69 | S XMSUB="ERROR MSG FROM PATIENT REP DATABASE ROLLUP - PATCH QAC*2*4"
|
---|
70 | D ^XMD
|
---|
71 | D KILL^XM
|
---|
72 | K QACERROR(QACERR)
|
---|
73 | Q
|
---|
74 | SEND ;Send message.
|
---|
75 | ;This message is the roll-up.
|
---|
76 | S ^TMP("QAC MAIL",$J,QACLCNT)=^TMP("QAC MAIL",$J,QACLCNT)_"#"
|
---|
77 | D KILL^XM
|
---|
78 | S XMY("XXX@Q-PSS.MED.VA.GOV")=""
|
---|
79 | S XMSUB="QAC ROC LIST: "_^DD("SITE")_" ("_^DD("SITE",1)_")"
|
---|
80 | S XMTEXT="^TMP(""QAC MAIL"",$J,"
|
---|
81 | D ^XMD D KILL^XM
|
---|
82 | I $G(QACCONT)=1 S QACCONT=0 Q
|
---|
83 | D EXIT
|
---|
84 | Q
|
---|
85 | ERR ;;Text for error messages to be included in mail message
|
---|
86 | ;;Site not found in QA Site Parameter file
|
---|
87 | ;;Site not found in Institute file
|
---|
88 | ;;Site number not found in Institution file
|
---|
89 | ;;Mail group not found in QA Site Parameter file
|
---|
90 | ;;Domain not found in QA Site Parameter file
|
---|
91 | ;;Domain not found in Domain file
|
---|
92 | ;;Message not sent - no task number
|
---|
93 | ;;No VISN number - primary VISN association not set up in Institution file
|
---|
94 | Q
|
---|
95 | ZTDTH ;set the kernel ZTDTH variable for the first run and rescheduled runs.
|
---|
96 | ;
|
---|
97 | H 20
|
---|
98 | D CHKTSK
|
---|
99 | I $G(QACHK)=1 Q
|
---|
100 | N %Y,QACSTART
|
---|
101 | S (X,X1)=DT
|
---|
102 | D H^%DTC
|
---|
103 | S X2=$S(%Y=0:2,%Y=6:3,1:1)
|
---|
104 | D C^%DTC
|
---|
105 | S QACSTART=X_".013"
|
---|
106 | D TASK
|
---|
107 | S DA=1
|
---|
108 | S DR="754///^S X=ZTSK"
|
---|
109 | S DIE="^QA(740,"
|
---|
110 | D ^DIE K DIE
|
---|
111 | Q
|
---|
112 | NEWMSG ;send message, set variables for continuation message.
|
---|
113 | ;S (QACCHCNT,QACLCNT,QACRCNT,QACTCNT)=0
|
---|
114 | ;flag for continuation message - don't go to EXIT at end of SEND
|
---|
115 | S QACCONT=1
|
---|
116 | D SEND
|
---|
117 | S (QACCHCNT,QACLCNT,QACRCNT,QACTCNT)=0
|
---|
118 | K ^TMP("QAC MAIL")
|
---|
119 | Q
|
---|
120 | ROLL(QACODE) ;set new Roll-Up Status field
|
---|
121 | ;if record is not being rolled up set field to "1" (Rejected).
|
---|
122 | ;if record is has been rolled up and is closed, set field to "0".
|
---|
123 | ;if record was sent, but status is still open, set to "2".
|
---|
124 | ;not used after QAC*2*17
|
---|
125 | N DA,DIE,DR
|
---|
126 | S DIE="^QA(745.1,"
|
---|
127 | S DA=QACJ
|
---|
128 | S DR="41///^S X=QACODE"
|
---|
129 | D ^DIE K DIE
|
---|
130 | Q
|
---|
131 | REQUE ;this subroutine will task this extract once, for one month or for
|
---|
132 | ;a portion of one month.
|
---|
133 | N QACREQUE
|
---|
134 | N QACCHCNT,QACLCNT,QACNOCNT,QACRCNT,QACTCNT
|
---|
135 | S (QACCHCNT,QACLCNT,QACNOCNT,QACRCNT,QACTCNT)=0
|
---|
136 | ;set re-queue flag so that task will not be re-tasked during this run
|
---|
137 | S QACREQUE=1
|
---|
138 | D START
|
---|
139 | Q
|
---|
140 | VISN(QACSITNO) ;find VISN for this site
|
---|
141 | N QACV
|
---|
142 | I $D(^DIC(4,QACSITNO,7,0)) D PARENT^XUAF4("QACV",QACSITNO,"VISN")
|
---|
143 | I '$D(^DIC(4,QACSITNO,7,0)) S QACERR=8 S QACVISN=0 ;D ERROR Q
|
---|
144 | S QACVZ=$O(QACV("P",0))
|
---|
145 | I $G(QACVZ)]"" S QACVISN=$P(QACV("P",QACVZ),U)
|
---|
146 | I $G(QACVZ)']"" D
|
---|
147 | . S QACEE=0
|
---|
148 | . F S QACEE=$O(^DIC(4,QACSITNO,7,QACEE)) Q:QACEE'>0 D
|
---|
149 | . . I +^DIC(4,QACSITNO,7,QACEE,0)'=1 Q
|
---|
150 | . . S QACVISN=$P(^DIC(4,QACSITNO,7,QACEE,0),U,2)
|
---|
151 | . . S QACVISN=$P($G(^DIC(4,QACVISN,0)),U)
|
---|
152 | I $G(QACVISN)']"" S QACERR=8
|
---|
153 | I $G(QACERR)=8 S QACVISN=0 D ERROR Q
|
---|
154 | I $G(QACVISN)["VISN " S QACVISN=$E(QACVISN,6,9)
|
---|
155 | Q
|
---|
156 | CHKTSK ;check to see if this job has already been tasked (i.e. on an earlier
|
---|
157 | ;installation, or if it has already started running).
|
---|
158 | S ZTSK=$P(^QA(740,1,"QAC"),U,5)
|
---|
159 | I $G(ZTSK)>0 D
|
---|
160 | . D STAT^%ZTLOAD
|
---|
161 | . I $G(ZTSK(1))=2 Q
|
---|
162 | . S QACZTSK=ZTSK K ZTSK S ZTSK=QACZTSK
|
---|
163 | . D ISQED^%ZTLOAD
|
---|
164 | . I $P($G(ZTSK("D")),",")>$P($H,",") S QACHK=1 Q
|
---|
165 | . I $P($G(ZTSK("D")),",")=$P($H,",") I $P(ZTSK("D"),",",2)>$P($H,",",2) S QACHK=1
|
---|
166 | Q
|
---|
167 | REQLOOP ; this subroutine will run the rollup manually for a month or a part
|
---|
168 | ; of one month.
|
---|
169 | N Y
|
---|
170 | W !!,"This option will run the Patient Representative data roll-up"
|
---|
171 | W !,"for one month."
|
---|
172 | K %DT S %DT="AE",%DT("A")="Enter Month and Year: " D ^%DT
|
---|
173 | I Y'>0!(Y<2991000)!(Y>DT)!(+$E(Y,4,5)'>0) W !!,"Valid date not entered - exiting." Q
|
---|
174 | S QACQBEG=$E(Y,1,5)_"00"
|
---|
175 | S QACQEND=$E(Y,1,5)_"31"
|
---|
176 | S Y=QACQBEG D DD^%DT
|
---|
177 | I Y<0 W !!,"Invalid Date" Q
|
---|
178 | S QACMONTH=Y
|
---|
179 | S DIR(0)="Y"
|
---|
180 | S QACMONTH=Y
|
---|
181 | S DIR("A")="Would you like only a part of "_QACMONTH_"?"
|
---|
182 | S DIR("B")="NO"
|
---|
183 | S DIR("?")="Enter ""Y"" if to limit the date range, ""N"" if you want the whole month."
|
---|
184 | D ^DIR I $D(DIRUT)!($D(DIROUT)) Q
|
---|
185 | K QACFAIL
|
---|
186 | REQLOOP1 I Y=1 D
|
---|
187 | . K DIR
|
---|
188 | . S DIR(0)="N^1:31"
|
---|
189 | . S DIR("A")="Enter the number of the earliest day."
|
---|
190 | . D ^DIR I $D(DIRUT)!($D(DIROUT)) Q
|
---|
191 | . S QACQBEG=$E(QACQBEG,1,5)_$S($L(+Y)<2:"0"_Y,1:Y)
|
---|
192 | . S DIR("A")="Enter the number of the last day."
|
---|
193 | . D ^DIR I $D(DIRUT)!($D(DIROUT)) Q
|
---|
194 | . S QACQEND=$E(QACQEND,1,5)_$S($L(+Y)<2:"0"_Y,1:Y)
|
---|
195 | . I QACQBEG>QACQEND S QACFAIL=1 W !!,"End date must be later than beginning date."
|
---|
196 | I $G(QACFAIL)=1 K QACFAIL S QACQBEG=$E(QACQBEG,1,5)_"00",QACQEND=$E(QACQEND,1,5)_"32" S Y=1 G REQLOOP1
|
---|
197 | N QACA,QACJ,QACOUNT
|
---|
198 | S QACOUNT=0
|
---|
199 | S QACQBEG=QACQBEG-.001
|
---|
200 | S QACA=QACQBEG
|
---|
201 | S QACQEND=QACQEND_.999
|
---|
202 | F S QACA=$O(^QA(745.1,"D",QACA)) Q:QACA'>0!($G(QACOUNT)>700)!(QACA>QACQEND) D
|
---|
203 | . S QACJ=""
|
---|
204 | . F S QACJ=$O(^QA(745.1,"D",QACA,QACJ)) Q:QACJ'>0 D
|
---|
205 | . . D NODE0^QACMAIL1
|
---|
206 | . . I $D(^QA(745.1,QACJ,3,0)),($P(^QA(745.1,QACJ,3,0),U,3)>0) S QACOUNT=QACOUNT+1
|
---|
207 | I $G(QACOUNT)=0 W !!,"No Contacts for this date range." Q
|
---|
208 | D SITEMSG(QACOUNT,QACMONTH)
|
---|
209 | I $G(QACOUNT)>0 W !!,"Number of records transmitted to the national database - "_QACOUNT
|
---|
210 | W !!,"End of Manual Rollup Option."
|
---|
211 | Q
|
---|
212 | SITEMSG(QACOUNT,QACMONTH) ;sends a message with the number of records
|
---|
213 | ;sent from the manual option
|
---|
214 | D KILL^XM
|
---|
215 | S QACDUZ=$P(^VA(200,DUZ,0),U)
|
---|
216 | S XMY(QACDUZ)=""
|
---|
217 | S XMSUB="MANUAL ROLLUP STATUS"
|
---|
218 | S QACMSG(1)="Manual Rollup for "_QACMONTH_"."
|
---|
219 | S QACMSG(2)="Total number of records sent: "_QACOUNT
|
---|
220 | S XMTEXT="QACMSG("
|
---|
221 | D ^XMD D KILL^XM
|
---|
222 | Q
|
---|