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