| 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 | 
|---|