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