1 | SDHPIB ;PKE/ALB - Health Services R&D Caregiver Study Main Routine;
|
---|
2 | ;;5.3;Scheduling;**141**;March 12, 1996
|
---|
3 | ;
|
---|
4 | I $D(DUZ)'=11 DO Q
|
---|
5 | .W !!,"Please set DUZ variables, D ^XUP"
|
---|
6 | ;
|
---|
7 | S SDTATION=+$$SITE^VASITE()
|
---|
8 | I 'SDTATION DO Q
|
---|
9 | . W !!,"Could not find station number from VASITE" Q
|
---|
10 | ;
|
---|
11 | W !?3,">>> VA HSR&D Caregivers Survey <<< ",!
|
---|
12 | W !," Please queue to run at a none peak time."
|
---|
13 | W !," This extract will generate 2 mail messages to you"
|
---|
14 | W !," and to G.SD HPI EXTRACT@ISC-ALBANY.VA.GOV",!
|
---|
15 | ;
|
---|
16 | S ZTIO="",ZTRTN="START^SDHPIB"
|
---|
17 | S ZTDESC="SD*5.3*141 - VA HSR&D Caregivers Survey"
|
---|
18 | D ^%ZTLOAD,HOME^%ZIS
|
---|
19 | I $G(ZTSK) W !?30,"Task Number = ",ZTSK,!
|
---|
20 | Q
|
---|
21 | START I $D(DUZ)'=11 W !!,"Please set DUZ variables, D ^XUP" Q
|
---|
22 | ;
|
---|
23 | S SDTATION=+$$SITE^VASITE()
|
---|
24 | I '$D(^XTMP("SDHPI","S",SDTATION)) W:'$D(ZTQUEUED) !,"No STATION data" Q
|
---|
25 | ;
|
---|
26 | S SDSTART=$$FMTE^XLFDT($$NOW^XLFDT)
|
---|
27 | ;
|
---|
28 | K ^XTMP("SDHPI",$J,"DATA")
|
---|
29 | K ^XTMP("SDHPI",$J,"ERROR")
|
---|
30 | K ^XTMP("SDHPI","S",SDTATION,"DFN")
|
---|
31 | ;
|
---|
32 | I $D(^XTMP("SDHPI","S",SDTATION,"ERROR","NO DATA REQUESTED")) DO QUIT
|
---|
33 | .;
|
---|
34 | . D FMAIL(0)
|
---|
35 | . I '$D(ZTQUEUED) W !!?3,">>>... all done"
|
---|
36 | ;
|
---|
37 | I '$D(ZTQUEUED) DO
|
---|
38 | .W !?3,">>> Looking up patients DFNs from SSNs "
|
---|
39 | D GETDFN(SDTATION)
|
---|
40 | ;
|
---|
41 | I '$D(ZTQUEUED) DO
|
---|
42 | .W !!?3,">>> Looking up patients data from DFNs "
|
---|
43 | D DIQLOOK(SDTATION)
|
---|
44 | ;
|
---|
45 | I '$D(ZTQUEUED) DO
|
---|
46 | .W !!?3,">>> Creating Mail message of patients data "
|
---|
47 | D SENDATA(SDTATION)
|
---|
48 | ;
|
---|
49 | I '$D(ZTQUEUED) DO
|
---|
50 | .W !!?3,">>> ....all done"
|
---|
51 | ;
|
---|
52 | ;mail summary
|
---|
53 | D FMAIL(1)
|
---|
54 | ;
|
---|
55 | K SDFIELD,SDN,SDP,SDPECE,SDSTART
|
---|
56 | K SDZ,SDFLDS,SDDFN,SDTATION,SDSSN,SDLINE
|
---|
57 | Q
|
---|
58 | GETDFN(SDTATION) ;
|
---|
59 | ;From strings of SSNs get DFN's from DPT
|
---|
60 | ; go down station array
|
---|
61 | S SDN=0
|
---|
62 | F S SDN=$O(^XTMP("SDHPI","S",SDTATION,SDN)) Q:'SDN DO
|
---|
63 | .;;piece out ssn
|
---|
64 | .F SDP=1:1 S SDSSN=$P(^XTMP("SDHPI","S",SDTATION,SDN),"^",SDP) Q:'SDSSN DO
|
---|
65 | . . S SDDFN=$$DFN(SDSSN)
|
---|
66 | . . I SDDFN S ^XTMP("SDHPI","S",SDTATION,"DFN",SDDFN)=SDSSN
|
---|
67 | . . E S ^XTMP("SDHPI",$J,"ERROR","SSN",SDSSN)=SDDFN
|
---|
68 | . .;
|
---|
69 | . . I (($P($H,",",2))#20) Q
|
---|
70 | . . I '$D(ZTQUEUED) W "."
|
---|
71 | Q
|
---|
72 | DIQLOOK(SDTATION) ;
|
---|
73 | ;
|
---|
74 | ; get array of fields to lookup
|
---|
75 | D INIFLDS
|
---|
76 | ; for each dfn call gets^diq
|
---|
77 | S SDDFN=0
|
---|
78 | F S SDDFN=$O(^XTMP("SDHPI","S",SDTATION,"DFN",SDDFN)) Q:'SDDFN DO
|
---|
79 | . D GETSDIQ(SDDFN)
|
---|
80 | .;
|
---|
81 | . I (($P($H,",",2))#3) Q
|
---|
82 | . I '$D(ZTQUEUED) W "."
|
---|
83 | .;
|
---|
84 | Q
|
---|
85 | SENDATA(SDTATION) ;
|
---|
86 | ; sdline is the message line
|
---|
87 | S SDLINE=0
|
---|
88 | S SDDFN=""
|
---|
89 | ; (2,dfn, field set up from fileman data merge, dfn is dfn_","
|
---|
90 | F S SDDFN=$O(^XTMP("SDHPI",$J,"DATA",2,SDDFN)) Q:'SDDFN DO
|
---|
91 | . D SETMAIL(SDTATION,SDDFN)
|
---|
92 | .;
|
---|
93 | . I (($P($H,",",2))#10) Q
|
---|
94 | . I '$D(ZTQUEUED) W " ."
|
---|
95 | .;
|
---|
96 | ;final mailman set
|
---|
97 | Q:'SDLINE
|
---|
98 | D SMAIL(SDLINE)
|
---|
99 | ;
|
---|
100 | Q
|
---|
101 | SETMAIL(SDTATION,SDDFN) ;
|
---|
102 | I SDLINE=0 D INITMAIL(1)
|
---|
103 | ;
|
---|
104 | S SDLINE=SDLINE+1
|
---|
105 | S SDPECE=1
|
---|
106 | ;
|
---|
107 | ; set first line of each record to station^ssn
|
---|
108 | S ^XMB(3.9,XMZ,2,SDLINE,0)=SDTATION_"^"_$P($G(^DPT(+SDDFN,0)),"^",9)_"^"
|
---|
109 | S SDLINE=SDLINE+1
|
---|
110 | ;
|
---|
111 | S SDFIELD=0
|
---|
112 | F S SDFIELD=$O(^XTMP("SDHPI",$J,"DATA",2,SDDFN,SDFIELD)) Q:'SDFIELD DO
|
---|
113 | . ;set mailmsg for 1 dfn
|
---|
114 | . I $$LINECALC(SDFIELD,SDLINE)>80 DO
|
---|
115 | . . ; make sure end piece has last ^
|
---|
116 | . . S $P(^XMB(3.9,XMZ,2,SDLINE,0),"^",SDPECE)=""
|
---|
117 | . . S SDLINE=SDLINE+1
|
---|
118 | . . S SDPECE=1
|
---|
119 | . D SETLINE
|
---|
120 | . S SDPECE=SDPECE+1
|
---|
121 | ;
|
---|
122 | ; make sure end piece has last ^
|
---|
123 | S $P(^XMB(3.9,XMZ,2,SDLINE,0),"^",SDPECE)=""
|
---|
124 | S SDLINE=SDLINE+1
|
---|
125 | ; set record delimiter
|
---|
126 | S ^XMB(3.9,XMZ,2,SDLINE,0)=">>>"
|
---|
127 | ;
|
---|
128 | Q
|
---|
129 | LINECALC(SDFIELD,SDLINE) ;
|
---|
130 | ; return length that would be set
|
---|
131 | Q $L($G(^XTMP("SDHPI",$J,"DATA",2,SDDFN,SDFIELD,"E")))+$L($G(^XMB(3.9,XMZ,2,SDLINE,0)))
|
---|
132 | ;
|
---|
133 | ;
|
---|
134 | SETLINE ;set mailmsg from xtmp array
|
---|
135 | ; $g will preserve piece position if field returned error
|
---|
136 | S $P(^XMB(3.9,XMZ,2,SDLINE,0),"^",SDPECE)=$G(^XTMP("SDHPI",$J,"DATA",2,SDDFN,SDFIELD,"E")) Q
|
---|
137 | ;
|
---|
138 | ;
|
---|
139 | GETSDIQ(SDDFN) ;
|
---|
140 | K SDDATA,SDERR
|
---|
141 | ;
|
---|
142 | F SDFLDS=1:1:5 DO
|
---|
143 | . D GETS^DIQ(2,SDDFN,SDFLDS(SDFLDS),"E","SDDATA","SDERR")
|
---|
144 | .;
|
---|
145 | .; merge will set ,2,dfn_",",field,"E")=external value
|
---|
146 | .;
|
---|
147 | . M ^XTMP("SDHPI",$J,"DATA")=SDDATA
|
---|
148 | . K SDDATA
|
---|
149 | . I $D(SDERR) DO K SDERR
|
---|
150 | . .;if a field has err whatodo
|
---|
151 | . .;
|
---|
152 | . .; check to see if each field was set in returned array
|
---|
153 | . . F SDP=1:1 S SDFIELD=$P(SDFLDS(SDFLDS),";",SDP) Q:'SDFIELD DO
|
---|
154 | . . .;
|
---|
155 | . . .; indicates fileman returned error
|
---|
156 | . . . I '$D(^XTMP("SDHPI",$J,"DATA",2,SDDFN_",",SDFIELD,"E")) DO
|
---|
157 | . . . .;
|
---|
158 | . . . .; set it to null to keep the piece position in mail
|
---|
159 | . . . . S ^XTMP("SDHPI",$J,"DATA",2,SDDFN_",",SDFIELD,"E")=""
|
---|
160 | . . . .;
|
---|
161 | . . . .;the sderr array is set by fm in order of missing fields
|
---|
162 | . . . . S SDERR=$O(SDERR("DIERR",0)) I 'SDERR K SDERR Q
|
---|
163 | . . . . M ^XTMP("SDHPI",$J,"ERROR",SDDFN,SDFIELD)=SDERR("DIERR",SDERR)
|
---|
164 | . . . . S ^XTMP("SDHPI",$J,"ERROR",SDDFN,"SSN")=$P($G(^DPT(SDDFN,0)),"^",9)
|
---|
165 | . . . .;pop the array
|
---|
166 | . . . . K SDERR("DIERR",SDERR)
|
---|
167 | . . .;
|
---|
168 | ;
|
---|
169 | Q
|
---|
170 | ;
|
---|
171 | Q
|
---|
172 | INITMAIL(FLAG) ;-- This function will initialize mail variables
|
---|
173 | ;
|
---|
174 | S XMSUB="SD*5.3*141 "_(+$$SITE^VASITE())_"VA HSR&D CAREGIVERS SURVEY"
|
---|
175 | S XMDUZ=.5,XMY(DUZ)="",XMY(XMDUZ)=""
|
---|
176 | I $G(FLAG) DO
|
---|
177 | . S XMY("G.SD HPI EXTRACT@ISC-ALBANY.VA.GOV")=""
|
---|
178 | . S XMY("S.SD HPI EXTRACT@ISC-ALBANY.VA.GOV")=""
|
---|
179 | D GET^XMA2
|
---|
180 | Q
|
---|
181 | SMAIL(SDLINE) ;-- Send Mail Message containing records so far
|
---|
182 | ;
|
---|
183 | ; INPUT TOTAL- Total Lines in Message
|
---|
184 | ;
|
---|
185 | S ^XMB(3.9,XMZ,2,0)="^3.92A^"_SDLINE_U_SDLINE_U_DT
|
---|
186 | D ENT1^XMD
|
---|
187 | D KILL^XM
|
---|
188 | Q
|
---|
189 | ;
|
---|
190 | FMAIL(DATA) ;- This function will generate a summary mail message.
|
---|
191 | ;
|
---|
192 | S XMSUB="SD*5.3*141 "_(+$$SITE^VASITE())_"VA HSR&D Error Summary"
|
---|
193 | S XMDUZ=.5,XMY(DUZ)="",XMY(XMDUZ)=""
|
---|
194 | S XMY("G.SD HPI EXTRACT@ISC-ALBANY.VA.GOV")=""
|
---|
195 | S XMY("S.SD HPI EXTRACT@ISC-ALBANY.VA.GOV")=""
|
---|
196 | ;
|
---|
197 | D GET^XMA2
|
---|
198 | S ^XMB(3.9,XMZ,2,1,0)="VA Health Services R&D Caregivers Survey completed."
|
---|
199 | S ^XMB(3.9,XMZ,2,2,0)=""
|
---|
200 | S ^XMB(3.9,XMZ,2,3,0)="Start Time: "_SDSTART
|
---|
201 | S ^XMB(3.9,XMZ,2,4,0)=" Stop Time: "_$$FMTE^XLFDT($$NOW^XLFDT)
|
---|
202 | S ^XMB(3.9,XMZ,2,5,0)=""
|
---|
203 | ;
|
---|
204 | S SDLINE=6
|
---|
205 | I 'DATA DO QUIT
|
---|
206 | . S ^XMB(3.9,XMZ,2,SDLINE,0)="No data requested"
|
---|
207 | . D SMAIL(SDLINE)
|
---|
208 | ;
|
---|
209 | S SDZ=$Q(^XTMP("SDHPI",$J,"ERROR"))
|
---|
210 | I SDZ]"",SDZ[("""SDHPI"""_","_$J_","_"""ERROR""")
|
---|
211 | E DO QUIT
|
---|
212 | . S ^XMB(3.9,XMZ,2,SDLINE,0)=" Error Summary: No errors Found "
|
---|
213 | . D SMAIL(SDLINE)
|
---|
214 | ;
|
---|
215 | S ^XMB(3.9,XMZ,2,SDLINE,0)=" Error Summary: "
|
---|
216 | S SDLINE=SDLINE+1
|
---|
217 | S ^XMB(3.9,XMZ,2,SDLINE,0)="""ERR"_$P(SDZ,"ERROR",2)_" = "_@SDZ
|
---|
218 | ;
|
---|
219 | F S SDZ=$Q(@SDZ) Q:SDZ']"" Q:SDZ'[("""SDHPI"""_","_$J_","_"""ERROR""") DO
|
---|
220 | . S SDLINE=SDLINE+1
|
---|
221 | . S ^XMB(3.9,XMZ,2,SDLINE,0)="""ERR"_$P(SDZ,"ERROR",2)_" = "_@SDZ
|
---|
222 | .;
|
---|
223 | .;quit if this gets to be too much
|
---|
224 | . I SDLINE>500 S SDZ="ZZZEND"
|
---|
225 | D SMAIL(SDLINE)
|
---|
226 | Q
|
---|
227 | ;
|
---|
228 | DFN(SSN) ;function to lookup DFN from SSN x-ref
|
---|
229 | ; input SSN
|
---|
230 | ; output DFN or error code
|
---|
231 | N DFN
|
---|
232 | ; make sure dfn is numeric and not null
|
---|
233 | I $O(^DPT("SSN",SSN,0))
|
---|
234 | E Q "No SSN Index for "_SSN
|
---|
235 | ;
|
---|
236 | I $O(^DPT("SSN",SSN,0))=$O(^DPT("SSN",SSN,""),-1)
|
---|
237 | E Q "Ambiguous SSN cross-ref "_SSN
|
---|
238 | ;
|
---|
239 | S DFN=$O(^DPT("SSN",SSN,0))
|
---|
240 | ;
|
---|
241 | I $G(^DPT(DFN,0))]""
|
---|
242 | E Q "No Zero node in DPT for SSN "_SSN
|
---|
243 | ;
|
---|
244 | I $P($G(^DPT(DFN,0)),"^",9)=SSN
|
---|
245 | E Q "Bad SSN cross-ref "_SSN
|
---|
246 | Q DFN
|
---|
247 | ;
|
---|
248 | INIFLDS ; set up array of fields to be used in fm getsdiq call
|
---|
249 | S SDFLDS(1)=$P($T(FLDS1),";;",2)
|
---|
250 | S SDFLDS(2)=$P($T(FLDS2),";;",2)
|
---|
251 | S SDFLDS(3)=$P($T(FLDS3),";;",2)
|
---|
252 | S SDFLDS(4)=$P($T(FLDS4),";;",2)
|
---|
253 | S SDFLDS(5)=$P($T(FLDS5),";;",2)
|
---|
254 | Q
|
---|
255 | FLDS1 ;;.01;.02;.03;.033;.05;.06;.07;.08;.09;.103;.104;.1041;.105;.111;.1112;.112;.113;.114;.115;.116;.117;.12105;.1211;.12111;.12112;.1212;.1213;.1214;.1215;.1216;.1217;.1218;.1219
|
---|
256 | FLDS2 ;;.131;.132;.14;.21011;.211;.211011;.212;.2125;.213;.214;.215;.216;.217;.218;.219;.2191;.2192;.21925;.2193;.2194;.2195;.2196;.2197;.2198;.2199
|
---|
257 | FLDS3 ;;.2401;.2402;.2403;.251;.2514;.2515;.252;.253;.254;.255;.256;.257;.258;.291;.2911;.2912;.2913;.2914;.2915;.2916;.2917;.2918;.2919;.292;.2921;.2922;.2923;.2924;.2925;.2926;.2927;.2928;.2929;.293
|
---|
258 | FLDS4 ;;.301;.3192;.323;.33011;.3305;.331;.331011;.3311;.3312;.3313;.3314;.3315;.3316;.3317;.3318;.3319;.332;.333;.334;.335;.336;.337;.338;.339;.34011;.3405;.341;.342;.343;.344;.345;.346;.347;.348;.349;.351
|
---|
259 | FLDS5 ;;.3601;.36205;.3621;.36215;.3622;.36225;.3623;.36235;.3624;.3625;.36255;.3626;.36265;.3627;.36275;.3628;.36285;.3629;.36295;.525;.5291;57.4;148;1901
|
---|
260 | Q
|
---|