| [613] | 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
 | 
|---|