| 1 | SCMCCV2 ;ALB/JLU;PC Attending conversion;6/4/1999 | 
|---|
| 2 | ;;5.3;Scheduling;**195**;AUG 13, 1993 | 
|---|
| 3 | ; | 
|---|
| 4 | STRTQJOB ;this is the start of the queue job to convert PC Attending | 
|---|
| 5 | ;Assignments. | 
|---|
| 6 | ;The following variables are defined when the job starts | 
|---|
| 7 | ;SCMCTM(X) the array of team IENs as subscripts | 
|---|
| 8 | ;SCMCPOS(X) the array of positions as subscripts | 
|---|
| 9 | ;SCMCFIX is set to either F for fix of C for Check | 
|---|
| 10 | ;SCMCTYPE is set to A for ALL, T for team or P for position | 
|---|
| 11 | ; | 
|---|
| 12 | N STOP,ZSTOP,SCMCCNT | 
|---|
| 13 | S SCMCCNT="0^0^0" ;total count^fixed count^err count | 
|---|
| 14 | S (STOP,ZSTOP)=0 | 
|---|
| 15 | D INIT^SCMCCV1 | 
|---|
| 16 | D BLDLIST | 
|---|
| 17 | D:$D(^TMP("SCMC",$J)) PROCLIST | 
|---|
| 18 | D MAIL ;WATCH FOR ZSTOP | 
|---|
| 19 | K ^TMP("SCMC",$J),^XTMP("SCMCATTCONV") | 
|---|
| 20 | Q | 
|---|
| 21 | ; | 
|---|
| 22 | ; | 
|---|
| 23 | BLDLIST ;gathers all the PC Attending Assignments within PCMM database. | 
|---|
| 24 | ;this will be placed in the following global for processing | 
|---|
| 25 | ;^TMP("SCMC",$J,TM IEN,POS IEN,POS ASGN IEN 404.43)=DFN^ASGNDT | 
|---|
| 26 | ; | 
|---|
| 27 | N DFN,ASGNDT,TMPOS,POSASGN,TMASGN,TMASGNZ,TM | 
|---|
| 28 | K ^TMP("SCMC",$J) | 
|---|
| 29 | ; | 
|---|
| 30 | F DFN=0:0 S DFN=$O(^SCPT(404.43,"APCPOS",DFN)) Q:DFN=""  F ASGNDT=0:0 S ASGNDT=$O(^SCPT(404.43,"APCPOS",DFN,2,ASGNDT)) Q:ASGNDT=""  DO | 
|---|
| 31 | .F TMPOS=0:0 S TMPOS=$O(^SCPT(404.43,"APCPOS",DFN,2,ASGNDT,TMPOS)) Q:TMPOS=""  F POSASGN=0:0 S POSASGN=$O(^SCPT(404.43,"APCPOS",DFN,2,ASGNDT,TMPOS,POSASGN)) Q:POSASGN=""  DO | 
|---|
| 32 | ..S TMASGN=+$G(^SCPT(404.43,POSASGN,0)) | 
|---|
| 33 | ..I 'TMASGN Q | 
|---|
| 34 | ..I +$P(^SCPT(404.43,POSASGN,0),U,4),$P(^(0),U,4)<DT Q  ;has a discharge date in the past. | 
|---|
| 35 | ..S TMASGNZ=$G(^SCPT(404.42,TMASGN,0)) | 
|---|
| 36 | ..I 'TMASGNZ Q | 
|---|
| 37 | ..S TM=$P(TMASGNZ,U,3) | 
|---|
| 38 | ..I 'TM Q | 
|---|
| 39 | ..S ^TMP("SCMC",$J,TM,TMPOS,POSASGN)=DFN_"^"_ASGNDT | 
|---|
| 40 | ..Q | 
|---|
| 41 | .Q | 
|---|
| 42 | Q | 
|---|
| 43 | ; | 
|---|
| 44 | ; | 
|---|
| 45 | PROCLIST ;works through the list built by the builder via the SCMCTYPE | 
|---|
| 46 | ;checks are done to ensure the convert can happen then it is converted. | 
|---|
| 47 | ; | 
|---|
| 48 | ;TMP GLOBAL ^TMP("SCMC",$J,TEAM IEN, POS IEN, POS ASSIGNMENT IEN)="DFN^ | 
|---|
| 49 | ;ASSIGNMENT DATE FM FORMAT" | 
|---|
| 50 | ; | 
|---|
| 51 | N TM,POS,POSASGNZ,POSASGN | 
|---|
| 52 | ; | 
|---|
| 53 | F TM=0:0 S TM=$O(^TMP("SCMC",$J,TM)) Q:+TM<1!(ZSTOP)  F POS=0:0 S POS=$O(^TMP("SCMC",$J,TM,POS)) Q:POS=""!(ZSTOP)  F POSASGN=0:0 S POSASGN=$O(^TMP("SCMC",$J,TM,POS,POSASGN)) Q:POSASGN=""  DO  Q:(ZSTOP) | 
|---|
| 54 | .N PAT,TMPZ,SSN,ASGNDTI,ASGNDTE,DFN,Y | 
|---|
| 55 | .S TMPZ=^TMP("SCMC",$J,TM,POS,POSASGN) | 
|---|
| 56 | .S DFN=$P(TMPZ,U,1) | 
|---|
| 57 | .S PAT=$P(^DPT($P(TMPZ,U,1),0),U,1) | 
|---|
| 58 | .S SSN=$P(^(0),U,9) ;naked from line before | 
|---|
| 59 | .S (ASGNDTI,Y)=$P(TMPZ,U,2) | 
|---|
| 60 | .D DD^%DT | 
|---|
| 61 | .S ASGNDTE=Y | 
|---|
| 62 | .I SCMCTYPE="A" D CONVERT | 
|---|
| 63 | .I SCMCTYPE="T",$D(SCMCTM(TM)) D CONVERT | 
|---|
| 64 | .I SCMCTYPE="P",$D(SCMCPOS(POS)) D CONVERT | 
|---|
| 65 | .I '($P(SCMCCNT,U,1)#50) S ZSTOP=$S($$S^%ZTLOAD:1,1:0) | 
|---|
| 66 | .Q | 
|---|
| 67 | Q | 
|---|
| 68 | ; | 
|---|
| 69 | ; | 
|---|
| 70 | BPERCNT ;bumps the error counter | 
|---|
| 71 | S $P(SCMCCNT,U,3)=$P(SCMCCNT,U,3)+1 | 
|---|
| 72 | Q | 
|---|
| 73 | ; | 
|---|
| 74 | BPTOTCNT ;bumps the total counter | 
|---|
| 75 | S $P(SCMCCNT,U,1)=$P(SCMCCNT,U,1)+1 | 
|---|
| 76 | Q | 
|---|
| 77 | ; | 
|---|
| 78 | BPFXCNT ;bumps the fixed counter | 
|---|
| 79 | S $P(SCMCCNT,U,2)=$P(SCMCCNT,U,2)+1 | 
|---|
| 80 | Q | 
|---|
| 81 | ; | 
|---|
| 82 | ; | 
|---|
| 83 | SETERR(ERR) ;set the error into the error global array. | 
|---|
| 84 | ;accepts ERR as the error message | 
|---|
| 85 | ; | 
|---|
| 86 | N EXTTM,EXTPOS,LAST | 
|---|
| 87 | S EXTPOS=$P(^SCTM(404.57,POS,0),U,1) | 
|---|
| 88 | S EXTTM=$P(^SCTM(404.51,TM,0),U,1) | 
|---|
| 89 | ; | 
|---|
| 90 | ;sets up the name of the provider for this position | 
|---|
| 91 | I '$D(^TMP("SCMC",$J,"ERR",EXTTM,EXTPOS)) DO | 
|---|
| 92 | .N VAR,SCDATES,SCMCPROV,SCMCERR | 
|---|
| 93 | .S SCDATES("INCL")=1 | 
|---|
| 94 | .S VAR=$$PRTP^SCAPMC8(POS,"SCDATES","SCMCPROV","SCMCERR") | 
|---|
| 95 | .I 'VAR Q | 
|---|
| 96 | .;there should be only one provider for this day | 
|---|
| 97 | .S ^TMP("SCMC",$J,"ERR",EXTTM,EXTPOS)=$S($D(SCMCPROV(1)):$P(SCMCPROV(1),U,2),1:"No active provider") | 
|---|
| 98 | .Q | 
|---|
| 99 | ; | 
|---|
| 100 | ; | 
|---|
| 101 | I '$D(^TMP("SCMC",$J,"ERR",EXTTM,EXTPOS,DFN)) S ^TMP("SCMC",$J,"ERR",EXTTM,EXTPOS,DFN,1)=PAT_"^"_SSN_"^"_ASGNDTE | 
|---|
| 102 | ; | 
|---|
| 103 | S LAST=$O(^TMP("SCMC",$J,"ERR",EXTTM,EXTPOS,DFN,9999999),-1) | 
|---|
| 104 | S ^TMP("SCMC",$J,"ERR",EXTTM,EXTPOS,DFN,LAST+1)=ERR | 
|---|
| 105 | Q | 
|---|
| 106 | ; | 
|---|
| 107 | ; | 
|---|
| 108 | CONVERT ;performs two checks then calls the tag to conver data. | 
|---|
| 109 | ; | 
|---|
| 110 | N ERR,VARONE,REASSIGN | 
|---|
| 111 | D BPTOTCNT | 
|---|
| 112 | ; | 
|---|
| 113 | S VARONE=$$YSPTTPPC^SCMCTPU2(DFN,ASGNDTI,1) | 
|---|
| 114 | I 'VARONE DO | 
|---|
| 115 | .IF $P(VARONE,U,2)["future" D FUTURE^SCMCCV1 I 1 | 
|---|
| 116 | .E  S ERR="-"_$P(VARONE,U,2) D SETERR(ERR) | 
|---|
| 117 | .Q | 
|---|
| 118 | ; | 
|---|
| 119 | S VARONE='$$CHKTM(POSASGN,.ERR) | 
|---|
| 120 | ; | 
|---|
| 121 | I $D(ERR) D BPERCNT | 
|---|
| 122 | I '$D(ERR) DO | 
|---|
| 123 | .I SCMCFIX="F" D @$S($D(REASSIGN):"REASGN",1:"CHANGE^SCMCCV1("_POSASGN_")") | 
|---|
| 124 | .D BPFXCNT ;also counts a fix if in check mode. | 
|---|
| 125 | .Q | 
|---|
| 126 | ; | 
|---|
| 127 | CONQ Q | 
|---|
| 128 | ; | 
|---|
| 129 | ; | 
|---|
| 130 | REASGN ;discharge old PC Attending and makes new PC Practitioner for today. | 
|---|
| 131 | ; | 
|---|
| 132 | N VARTHREE,RETURN,FIELDS,SCCONER | 
|---|
| 133 | S SCCONER="^TMP(""SCMC"",$J,""JUNK"")" | 
|---|
| 134 | S VARTHREE=$$INPTTP^SCAPMC(DFN,POSASGN,DT-1,SCCONER) | 
|---|
| 135 | I 'VARTHREE S ERR="-Could not discharge old PC Attending Assignment "_POSASGN D SETERR(ERR) Q | 
|---|
| 136 | S FIELDS(.05)=1,FIELDS(.06)=$G(DUZ,.5),FIELDS(.07)=DT | 
|---|
| 137 | S RETURN=$$ACPTTP^SCAPMC21(DFN,POS,"FIELDS",DT,SCCONER) | 
|---|
| 138 | K @SCCONER | 
|---|
| 139 | I $P(RETURN,U,2)=1 Q | 
|---|
| 140 | D REOPEN^SCMCCV1 | 
|---|
| 141 | S ERR="-Could not create a new position assignment.  PC Attending reactivated." D SETERR(ERR) | 
|---|
| 142 | Q | 
|---|
| 143 | ; | 
|---|
| 144 | ; | 
|---|
| 145 | CHKTM(ASGIEN,ERR) ;Performs checks on the team assignments | 
|---|
| 146 | ; | 
|---|
| 147 | N TMASGN,RES,POSASGNZ | 
|---|
| 148 | S RES=1 | 
|---|
| 149 | ; | 
|---|
| 150 | S POSASGNZ=$G(^SCPT(404.43,ASGIEN,0)) | 
|---|
| 151 | I POSASGNZ="" S ERR="-Missing Patient Team Position Assignment.",RES=0 D SETERR(ERR) | 
|---|
| 152 | ; | 
|---|
| 153 | S TMASGN=$P(POSASGNZ,U,1) | 
|---|
| 154 | I +TMASGN'>0 S ERR="-Bad team assignment pointer.",RES=0 D SETERR(ERR) | 
|---|
| 155 | ; | 
|---|
| 156 | S TMASGN=$G(^SCPT(404.42,TMASGN,0)) | 
|---|
| 157 | I TMASGN="" S ERR="-Missing Team Assignment.",RES=0 D SETERR(ERR) | 
|---|
| 158 | ; | 
|---|
| 159 | I $P(TMASGN,U,9)>0 S ERR="-Patient Team Assignment status is discharged.",RES=0 D SETERR(ERR) | 
|---|
| 160 | ; | 
|---|
| 161 | I $P(TMASGN,U,8)'=1 S ERR="-PC Role only allowed if Patient Team Assignment is for Primary Care",RES=0 D SETERR(ERR) | 
|---|
| 162 | ; | 
|---|
| 163 | CHKQ Q RES | 
|---|
| 164 | ; | 
|---|
| 165 | ; | 
|---|
| 166 | MAIL ;sets up message for conversion and delivers. | 
|---|
| 167 | ; | 
|---|
| 168 | N XMY,XMTEST,XMSUB,XMDUZ,CNTR | 
|---|
| 169 | ; | 
|---|
| 170 | D INIT^SCMCCV1 | 
|---|
| 171 | I '$D(^TMP("SCMC",$J)) D | 
|---|
| 172 | . D SET("") | 
|---|
| 173 | . D SET("No PC Attending Assignments to evaluate!") | 
|---|
| 174 | . Q | 
|---|
| 175 | E  D | 
|---|
| 176 | . D TEXT | 
|---|
| 177 | . D TOTALS | 
|---|
| 178 | . D ERRORS | 
|---|
| 179 | . Q | 
|---|
| 180 | D ^XMD | 
|---|
| 181 | Q | 
|---|
| 182 | ; | 
|---|
| 183 | ; | 
|---|
| 184 | TEXT ;fills in the text of the message | 
|---|
| 185 | ; | 
|---|
| 186 | D HDR | 
|---|
| 187 | I SCMCTYPE="A" D LISTA | 
|---|
| 188 | I SCMCTYPE="T" D LISTT | 
|---|
| 189 | I SCMCTYPE="P" D LISTP | 
|---|
| 190 | I ZSTOP D STOPPED | 
|---|
| 191 | Q | 
|---|
| 192 | ; | 
|---|
| 193 | ; | 
|---|
| 194 | HDR ;header for check mode. | 
|---|
| 195 | ; | 
|---|
| 196 | D SET("The conversion software was run in a "_$S(SCMCFIX="C":"'CHECK'",1:"'FIX'")_" mode.") | 
|---|
| 197 | ; | 
|---|
| 198 | I SCMCFIX="C" D SET("No actual conversion took place.") | 
|---|
| 199 | E  DO | 
|---|
| 200 | .D SET("When possible the PC Attending assignment was changed to PC Practitioner.") | 
|---|
| 201 | .D SET("If it could not be converted an error message is listed and the assignment was left in its original state.") | 
|---|
| 202 | .Q | 
|---|
| 203 | ; | 
|---|
| 204 | D SET("") | 
|---|
| 205 | Q | 
|---|
| 206 | ; | 
|---|
| 207 | ; | 
|---|
| 208 | LISTA ; | 
|---|
| 209 | D SET("All PCMM Teams and Positions were reviewed.") | 
|---|
| 210 | Q | 
|---|
| 211 | ; | 
|---|
| 212 | ; | 
|---|
| 213 | LISTT ; | 
|---|
| 214 | N VAR | 
|---|
| 215 | D SET("Team(s):") | 
|---|
| 216 | S VAR=0 | 
|---|
| 217 | F  S VAR=$O(SCMCTM(VAR)) Q:VAR=""  D SET($P(^SCTM(404.51,VAR,0),U,1)) | 
|---|
| 218 | D SET(" ") | 
|---|
| 219 | D SET("All positions for each team are included.") | 
|---|
| 220 | Q | 
|---|
| 221 | ; | 
|---|
| 222 | ; | 
|---|
| 223 | LISTP ; | 
|---|
| 224 | N VAR | 
|---|
| 225 | D SET("Team:") | 
|---|
| 226 | S VAR=$O(SCMCTM(0)) | 
|---|
| 227 | D SET($P(^SCTM(404.51,VAR,0),U,1)) | 
|---|
| 228 | D SET(" ") | 
|---|
| 229 | D SET("Position(s):") | 
|---|
| 230 | S VAR=0 | 
|---|
| 231 | F  S VAR=$O(SCMCPOS(VAR)) Q:VAR=""  D SET($P(^SCTM(404.57,VAR,0),U,1)) | 
|---|
| 232 | Q | 
|---|
| 233 | ; | 
|---|
| 234 | ; | 
|---|
| 235 | TOTALS ;fills the totals into the message. | 
|---|
| 236 | ; | 
|---|
| 237 | D SET(" ") | 
|---|
| 238 | D SET(" ") | 
|---|
| 239 | D SET("Assignments reviewed: "_$P(SCMCCNT,U,1)) | 
|---|
| 240 | D SET("Assignments "_$S(SCMCFIX="C":"that would have been ",1:"")_"converted: "_$P(SCMCCNT,U,2)) | 
|---|
| 241 | D SET("Assignments that could not be converted: "_$P(SCMCCNT,U,3)) | 
|---|
| 242 | D SET(" ") | 
|---|
| 243 | Q | 
|---|
| 244 | ; | 
|---|
| 245 | ; | 
|---|
| 246 | ERRORS ;load in the error messages into the report. | 
|---|
| 247 | ; | 
|---|
| 248 | ;^TMP("SCMC",$J,"ERR",TEAM,POSITION,DFN,1) = PATIENT^SSN^ASSIGNMENT DATE | 
|---|
| 249 | ; | 
|---|
| 250 | N VAR | 
|---|
| 251 | D SET(" ") | 
|---|
| 252 | D SET(" ") | 
|---|
| 253 | D SET("The following assignments could not be converted and why:") | 
|---|
| 254 | D SET(" ") | 
|---|
| 255 | D SET("Patient Name            SSN     Team           Position        Assignment Date") | 
|---|
| 256 | D SET("------------------------------------------------------------------------------") | 
|---|
| 257 | ; | 
|---|
| 258 | N TM,POS,ASGNDT,DFN | 
|---|
| 259 | S TM="" | 
|---|
| 260 | F  S TM=$O(^TMP("SCMC",$J,"ERR",TM)) Q:TM=""  DO | 
|---|
| 261 | .D SET(" ") | 
|---|
| 262 | .D SET(" ") | 
|---|
| 263 | .D SET("Team==>     "_TM) | 
|---|
| 264 | .S POS="" F  S POS=$O(^TMP("SCMC",$J,"ERR",TM,POS)) Q:POS=""  DO | 
|---|
| 265 | ..D SET("Position==> "_POS_"  ("_^TMP("SCMC",$J,"ERR",TM,POS)_")") | 
|---|
| 266 | ..F DFN=0:0 S DFN=$O(^TMP("SCMC",$J,"ERR",TM,POS,DFN)) Q:DFN=""  DO | 
|---|
| 267 | ...N PAT,VAR1,LP,ERR,TITLE | 
|---|
| 268 | ...S VAR1=^TMP("SCMC",$J,"ERR",TM,POS,DFN,1) | 
|---|
| 269 | ...S TITLE=$P(VAR1,U,1) | 
|---|
| 270 | ...D PADTO(25,.TITLE) | 
|---|
| 271 | ...S TITLE=TITLE_$E($P(VAR1,U,2),6,9) | 
|---|
| 272 | ...D PADTO(31,.TITLE) | 
|---|
| 273 | ...S TITLE=TITLE_$E(TM,1,15) | 
|---|
| 274 | ...D PADTO(48,.TITLE) | 
|---|
| 275 | ...S TITLE=TITLE_$E(POS,1,15) | 
|---|
| 276 | ...D PADTO(65,.TITLE) | 
|---|
| 277 | ...S TITLE=TITLE_$P(VAR1,U,3) | 
|---|
| 278 | ...D SET(TITLE) | 
|---|
| 279 | ...F LP=2:1 S ERR=$G(^TMP("SCMC",$J,"ERR",TM,POS,DFN,LP)) Q:ERR=""  D SET("  "_ERR) | 
|---|
| 280 | ...Q | 
|---|
| 281 | ..Q | 
|---|
| 282 | .Q | 
|---|
| 283 | Q | 
|---|
| 284 | ; | 
|---|
| 285 | ; | 
|---|
| 286 | PADTO(TOT,VAR) ; | 
|---|
| 287 | S VAR=$$LJ^XLFSTR(VAR,TOT) | 
|---|
| 288 | Q | 
|---|
| 289 | ; | 
|---|
| 290 | ; | 
|---|
| 291 | SET(X) ;sets data into the correct mail storage global | 
|---|
| 292 | ; | 
|---|
| 293 | S CNTR=CNTR+1 | 
|---|
| 294 | S ^TMP("SCMC",$J,"MSG",CNTR,0)=X | 
|---|
| 295 | Q | 
|---|
| 296 | ; | 
|---|
| 297 | ; | 
|---|
| 298 | STOPPED ; | 
|---|
| 299 | D SET(" ") | 
|---|
| 300 | D SET("*** The conversion job was stopped by request.") | 
|---|
| 301 | D SET("*** Some data was still processed.") | 
|---|
| 302 | D SET("*** Contact your IRM for more information. ***") | 
|---|
| 303 | Q | 
|---|