| 1 | SCMCCV ;ALB/REW - PCMM Conversion of Patient File Fields ; 1 Feb 1996
 | 
|---|
| 2 |  ;;5.3;Scheduling;**41**;AUG 13, 1993
 | 
|---|
| 3 | EN ; 
 | 
|---|
| 4 |  ; Variables:
 | 
|---|
| 5 |  ;     SCASSIGN: 1=Make Patient Assignments if unambiguous (0=No,default)
 | 
|---|
| 6 |  ;     SCDT:     Date to make assignments (Default=DT)
 | 
|---|
| 7 |  ;     SCYESTM:  1=Make Pt Tm as well as Pt Posit Assmnts,default(0=No)
 | 
|---|
| 8 |  ;     SCNOPRPT  1=Don't print patient-detail lines
 | 
|---|
| 9 |  ;
 | 
|---|
| 10 |  N SCOK,DFN,SCPCNODE,SCLIST,SCTMPLST,SCHISTAR,SCASSIGN,SCYESTM,SCTM,Y,SCSTOP,SCPAGE,SCNOPRPT,SCTEAMAR,SCNOW,SCSUB
 | 
|---|
| 11 |  N SCLSEQ,SCN,SCESEQ,SCPARM,SCP,SCBEGIN,SCEND,SCINCL,SCDTS
 | 
|---|
| 12 |  IF '$$OKASK D MESS("Search aborted","!?5") G QTEN
 | 
|---|
| 13 |  IF '$D(IO("Q")) D
 | 
|---|
| 14 |  .U IO
 | 
|---|
| 15 |  .D REP
 | 
|---|
| 16 |  .D ^%ZISC
 | 
|---|
| 17 |  ELSE  D
 | 
|---|
| 18 |  .F X="SCASSIGN","SCYESTM","SCDT","SCNOPRPT" S ZTSAVE(X)=""
 | 
|---|
| 19 |  .S Y=$$QUE("SC Patient-Team/Practitioner"_$S('SCASSIGN:"Report Only",1:"Report and Assignment"),"REP^SCMCCV")
 | 
|---|
| 20 | QTEN Q
 | 
|---|
| 21 |  ;
 | 
|---|
| 22 | OKASK() ;
 | 
|---|
| 23 |  N SCOK,DIR
 | 
|---|
| 24 |  ;do you want to assign or just get a report?
 | 
|---|
| 25 |  S DIR(0)="Y"
 | 
|---|
| 26 |  S DIR("B")="NO"
 | 
|---|
| 27 |  S DIR("A")="Do you want to assign patients right now?"
 | 
|---|
| 28 |  S DIR("A",1)=""
 | 
|---|
| 29 |  S DIR("A",2)=""
 | 
|---|
| 30 |  S DIR("A",3)="  YES = Assign Patients to Teams and Team Positions"
 | 
|---|
| 31 |  S DIR("A",4)="  NO  = Just print report to see how things would be"
 | 
|---|
| 32 |  D ^DIR
 | 
|---|
| 33 |  IF $D(DTOUT)!$D(DUOUT)!$D(DIROUT) S SCOK=0 G QTASK
 | 
|---|
| 34 |  S SCASSIGN=Y
 | 
|---|
| 35 |  ;do you want to omit printing patients?
 | 
|---|
| 36 |  S DIR(0)="Y"
 | 
|---|
| 37 |  S DIR("B")="YES"
 | 
|---|
| 38 |  S DIR("A")="Do you want to omit printing patients?"
 | 
|---|
| 39 |  S DIR("A",1)=""
 | 
|---|
| 40 |  S DIR("A",2)=""
 | 
|---|
| 41 |  S DIR("A",3)="  NO  = Print detail line for each patient that is assignable"
 | 
|---|
| 42 |  S DIR("A",4)="  YES = Just print Team & Practitioner information"
 | 
|---|
| 43 |  D ^DIR
 | 
|---|
| 44 |  IF $D(DTOUT)!$D(DUOUT)!$D(DIROUT) S SCOK=0 G QTASK
 | 
|---|
| 45 |  S SCNOPRPT=Y
 | 
|---|
| 46 |  IF '$D(SCASSIGN) S SCASSIGN=0
 | 
|---|
| 47 |  IF '$D(SCDT) S SCDT=DT
 | 
|---|
| 48 |  IF '$D(SCYESTM) S SCYESTM=1
 | 
|---|
| 49 |  S SCOK=$$GETDEV
 | 
|---|
| 50 | QTASK Q SCOK
 | 
|---|
| 51 |  ;
 | 
|---|
| 52 | REP ;non-interactive portion
 | 
|---|
| 53 |  Q:$$FIRST^SCMCRU  ;check for task end
 | 
|---|
| 54 |  IF '$$OKINIT() G QTEN
 | 
|---|
| 55 |  D MESS("  ..Ok")
 | 
|---|
| 56 |  IF '$$OKBUILD G QRP
 | 
|---|
| 57 |  D MESS("  ..Ok")
 | 
|---|
| 58 |  IF '$$OKREPORT G QRP
 | 
|---|
| 59 |  D MESS("  ..Ok")
 | 
|---|
| 60 |  IF '$$OKCLEAN G QRP
 | 
|---|
| 61 |  D MESS("  ..Ok")
 | 
|---|
| 62 | QRP Q
 | 
|---|
| 63 |  ;
 | 
|---|
| 64 | OKINIT() ;
 | 
|---|
| 65 |  N SCOK
 | 
|---|
| 66 |  S SCOK=1
 | 
|---|
| 67 |  D MESS(">>> Checking Programmer Variables:","!,?5")
 | 
|---|
| 68 |  IF +$G(DUZ)'>0!($G(U)'="^")!('$D(DT)) D  Q 0
 | 
|---|
| 69 |  . S XPDABORT=1
 | 
|---|
| 70 |  . D MESS("You must first initialize Programmer Environment by running ^XUP")
 | 
|---|
| 71 |  . S SCOK=0
 | 
|---|
| 72 |  S SCLIST="SCTMPLST"
 | 
|---|
| 73 |  D INIT^SCAPMCU1(.SCOK)
 | 
|---|
| 74 |  D NOW^%DTC
 | 
|---|
| 75 |  S SCNOW=%
 | 
|---|
| 76 |  S SCHISTAR(.05)=1      ;pc practitioner
 | 
|---|
| 77 |  S SCHISTAR(.06)=DUZ    ;user entering
 | 
|---|
| 78 |  S SCHISTAR(.07)=SCNOW  ;date entered
 | 
|---|
| 79 |  S SCTEAMAR(.08)=1      ;pc team
 | 
|---|
| 80 |  S SCTEAMAR(.11)=DUZ    ;user
 | 
|---|
| 81 |  S SCTEAMAR(.12)=SCNOW  ;date enter=now
 | 
|---|
| 82 |  Q SCOK
 | 
|---|
| 83 |  ;
 | 
|---|
| 84 | OKBUILD() ;
 | 
|---|
| 85 |  N SCOK
 | 
|---|
| 86 |  S SCOK=1
 | 
|---|
| 87 |  D MESS(">>> Looping through PC Nodes of PATIENT File","!,?5")
 | 
|---|
| 88 |  S DFN=0
 | 
|---|
| 89 |  F  S DFN=$O(^DPT(DFN)) Q:'DFN  S SCPCNODE=$G(^DPT(DFN,"PC")) IF SCPCNODE]"" D  D:'(DFN#100) MESS(".")
 | 
|---|
| 90 |  .S ^TMP("SCMC",$J,"TMPRPT",+$P(SCPCNODE,U,2),+$P(SCPCNODE,U,1),DFN)=""
 | 
|---|
| 91 |  Q SCOK
 | 
|---|
| 92 |  ;
 | 
|---|
| 93 | OKREPORT() ;
 | 
|---|
| 94 |  N SCOK,SCTM,SCPR,SCTMNODE
 | 
|---|
| 95 |  S SCOK=1
 | 
|---|
| 96 |  D MESS(">>> Producing PATIENT File PC Report","!?5")
 | 
|---|
| 97 |  D MESS("    Checking Team/Practitioner Assignments:","!?10")
 | 
|---|
| 98 |  S SCTM=0
 | 
|---|
| 99 |  F  S SCTM=$O(^TMP("SCMC",$J,"TMPRPT",SCTM)) Q:'SCTM!$G(SCSTOP)  D
 | 
|---|
| 100 |  .S SCTMNODE=$G(^SCTM(404.51,SCTM,0))
 | 
|---|
| 101 |  .D MESS(">>>Team: "_$$DISPTM(SCTM),"!!?10")
 | 
|---|
| 102 |  .IF '$$OKTEAM(SCTM,SCDT) D
 | 
|---|
| 103 |  ..S SCOK=0
 | 
|---|
| 104 |  ..;D MESS("Problem(s) with Practitioner Assignments","!?15")
 | 
|---|
| 105 |  Q SCOK
 | 
|---|
| 106 |  ;
 | 
|---|
| 107 | OKTEAM(SCTM,SCDT) ;return 1 if exactly 1 posit for each team assignment
 | 
|---|
| 108 |  ;needs 'tmp('scmc',$j,'tmpr' array defined
 | 
|---|
| 109 |  ;return count of positions pract is assigned to to team
 | 
|---|
| 110 |  N SCOK,SC200,SCTMND,SCFLD,SCF
 | 
|---|
| 111 |  S SCOK=1
 | 
|---|
| 112 |  S SCTMND=$G(^SCTM(404.51,+$G(SCTM),0))
 | 
|---|
| 113 |  F SCFLD=3,6,7 IF '$P(SCTMND,U,SCFLD) D  ;check required fields
 | 
|---|
| 114 |  .S SCOK=0
 | 
|---|
| 115 |  .S SCF=$$DDNAME^SCMCRU(404.51,(SCFLD*.01))
 | 
|---|
| 116 |  .D MESS(SCF_" (#"_(SCFLD*.01)_") of Team required.  Enter via PCMM ","!?20")
 | 
|---|
| 117 |  G:'SCOK QTOKTM
 | 
|---|
| 118 |  S SCOK=$$ACTTM^SCMCTMU(SCTM,SCDT)
 | 
|---|
| 119 |  IF 'SCOK D  G QTOKTM
 | 
|---|
| 120 |  .N SCX
 | 
|---|
| 121 |  .S SCX=$D(^SCTM(404.58,SCTM,"AIDT",SCTM))
 | 
|---|
| 122 |  .D:'SCX MESS(" Never activated - Edit via PCMM")
 | 
|---|
| 123 |  .D:SCX MESS(" Not active on "_SCDT)
 | 
|---|
| 124 |  IF SCOK<0 D  G QTOKTM
 | 
|---|
| 125 |  .D MESS(" Error in setup")
 | 
|---|
| 126 |  IF $D(^TMP("SCMC",$J,"TMPRPT",SCTM,0)) D
 | 
|---|
| 127 |  .D MESS("Team Assignment Only","!?15")
 | 
|---|
| 128 |  .D:'SCNOPRPT MESS("Patients to be assigned to this team:","!?20")
 | 
|---|
| 129 |  .S DFN=0 F  S DFN=$O(^TMP("SCMC",$J,"TMPRPT",SCTM,0,DFN)) Q:'DFN  D
 | 
|---|
| 130 |  ..D MESS($$DISPPT(DFN),"!?25")
 | 
|---|
| 131 |  ..S SCX=$$NMPCTM^SCAPMCU2(DFN,SCDT,1)
 | 
|---|
| 132 |  ..D:SCX&(+SCX=SCTM)&('SCNOPRPT) MESS("Already assigned","!?27")
 | 
|---|
| 133 |  ..D:SCX&(+SCX'=SCTM)&('SCNOPRPT) MESS("Previously assigned to "_$P(SCX,U,2),"!?27")
 | 
|---|
| 134 |  ..Q:SCX
 | 
|---|
| 135 |  ..D:$G(SCASSIGN) PCUPDTM(DFN)
 | 
|---|
| 136 |  .D:$G(SCASSIGN) MAILLST^SCMCTMM(SCTM,"SCTEAMAR",SCDT,"^TMP(""SCMC"",$J,""NEWTM"",SCTM)")
 | 
|---|
| 137 |  .F SCSUB="NEWTM","BADTM" K ^TMP("SCMC",$J,SCSUB,SCTM)
 | 
|---|
| 138 |  S SC200=0
 | 
|---|
| 139 |  F  S SC200=$O(^TMP("SCMC",$J,"TMPRPT",SCTM,SC200)) Q:'SC200  D
 | 
|---|
| 140 |  .N SCTMPLST,SCCNT,SCTP,SCX,DFN
 | 
|---|
| 141 |  .D MESS("Practitioner: "_$$DISP200(SC200),"!?15")
 | 
|---|
| 142 |  .IF '$D(^VA(200,SC200,0)) D
 | 
|---|
| 143 |  ..S SCOK=0
 | 
|---|
| 144 |  ..D MESS("Bad Practitioner Assignment"_$S(SCNOPRPT:"",1:" for the following patient(s):"),"!?15")
 | 
|---|
| 145 |  ..S DFN=0 F  S DFN=$O(^TMP("SCMC",$J,"TMPRPT",SCTM,SC200,DFN)) Q:'DFN  D
 | 
|---|
| 146 |  ...D MESS($$DISPPT(DFN),"!?25")
 | 
|---|
| 147 |  .ELSE  D
 | 
|---|
| 148 |  .S:'$$TPPR^SCAPMC(SC200,"SCDTS",,,"SCTMPLST($J)",.SCERR) SCOK=0
 | 
|---|
| 149 |  .S SCXTP=0 F SCCNT=0:1 S SCXTP=$O(SCTMPLST($J,"SCTP",SCTM,SCXTP)) Q:'SCXTP  S SCTP=SCXTP D MESS("Position: "_$$DISPTP(SCTP),"!?17")
 | 
|---|
| 150 |  .;if no team-position assignments for pract
 | 
|---|
| 151 |  .IF 'SCCNT D
 | 
|---|
| 152 |  ..S SCOK=0
 | 
|---|
| 153 |  ..D MESS("is assigned to "_SCCNT_" positions on team","!?20")
 | 
|---|
| 154 |  ..D MESS("you need to assign him/her to a position on the team","!?20")
 | 
|---|
| 155 |  ..S ^TMP("SCMC",$J,"NO_TP",SCTM,SC200)=""
 | 
|---|
| 156 |  .;if exactly one practitioner assignment to team
 | 
|---|
| 157 |  .IF SCCNT=1 D
 | 
|---|
| 158 |  ..D:'SCNOPRPT MESS("Patients to be assigned to this position:","!?20")
 | 
|---|
| 159 |  ..S DFN=0 F  S DFN=$O(^TMP("SCMC",$J,"TMPRPT",SCTM,SC200,DFN)) Q:'DFN  D
 | 
|---|
| 160 |  ...D MESS($$DISPPT(DFN),"!?25")
 | 
|---|
| 161 |  ...S SCX=$$NMPCTP^SCAPMCU2(DFN,SCDT,1)
 | 
|---|
| 162 |  ...D:SCX&(+SCX=SCTP)&('SCNOPRPT) MESS("Already assigned","!?27")
 | 
|---|
| 163 |  ...D:SCX&(+SCX'=SCTP)&('SCNOPRPT) MESS("Previously assigned to "_$P(SCX,U,2),"!?27")
 | 
|---|
| 164 |  ...Q:SCX
 | 
|---|
| 165 |  ...D:$G(SCASSIGN) PCUPD(DFN)
 | 
|---|
| 166 |  ..D:$G(SCASSIGN) MAILLST^SCMCTPM(SCTP,"SCHISTAR",SCDT,"^TMP(""SCMC"",$J,""NEWTP"",SCTP)","^TMP(""SCMC"",$J,""OLDTP"",SCTP)","^TMP(""SCMC"",$J,""BADTP"",SCTP)")
 | 
|---|
| 167 |  ..D:$G(SCASSIGN) MAILLST^SCMCTMM(SCTM,"SCTEAMAR",SCDT,"^TMP(""SCMC"",$J,""NEWTM"",SCTM)")
 | 
|---|
| 168 |  ..F SCSUB="NEWTP","OLDTP","BADTP" K ^TMP("SCMC",$J,SCSUB,SCTP)
 | 
|---|
| 169 |  ..K ^TMP("SCMC",$J,"NEWTM",SCTM)
 | 
|---|
| 170 |  .;if multiple positin assignments for team for pract
 | 
|---|
| 171 |  .IF SCCNT>1 D
 | 
|---|
| 172 |  ..S SCOK=0
 | 
|---|
| 173 |  ..D MESS("Practitioner is assigned to "_SCCNT_" positions on team","!?20")
 | 
|---|
| 174 |  ..D MESS("because there is more than one position for this team","!?20")
 | 
|---|
| 175 |  ..D MESS("and practitioner, there will be no patient assignments","!?20")
 | 
|---|
| 176 |  ..S SCTP=0 F  S SCTP=$O(SCTMPLST($J,SCTM,SCTP)) Q:'SCTP  S ^TMP("SCMC",$J,"MULT_TP",SCTM,SC200,SCTP)=""
 | 
|---|
| 177 |  .IF SCCNT=1 S ^TMP("SCMC",$J,"ONE_TP",SCTM,SC200,SCTP)=""
 | 
|---|
| 178 | QTOKTM Q SCOK
 | 
|---|
| 179 |  ;
 | 
|---|
| 180 | PCUPD(DFN) ;
 | 
|---|
| 181 |  N SCX,SCNOMAIL
 | 
|---|
| 182 |  S SCNOMAIL=1
 | 
|---|
| 183 |  ;This is NOT a stand-alone procedure
 | 
|---|
| 184 |  S SCX=$$ACPTTP^SCAPMC(DFN,SCTP,"SCHISTAR",SCDT,.SCERR,SCYESTM)
 | 
|---|
| 185 |  IF SCX D
 | 
|---|
| 186 |  .D MESS("File #404.43 ien = "_+SCX,"!?30")
 | 
|---|
| 187 |  .IF $P(SCX,U,2) D
 | 
|---|
| 188 |  ..D MESS("  New Entry")
 | 
|---|
| 189 |  ..S ^TMP("SCMC",$J,"NEWTP",SCTP,DFN)=""
 | 
|---|
| 190 |  ..IF $P(SCX,U,4) D
 | 
|---|
| 191 |  ...D MESS(" Team Assignment Made.  IEN="_$P(SCX,U,3),"!?30")
 | 
|---|
| 192 |  ...S ^TMP("SCMC",$J,"NEWTM",SCTM,DFN)=""
 | 
|---|
| 193 |  .ELSE  D
 | 
|---|
| 194 |  ..D MESS("  Already Assigned")
 | 
|---|
| 195 |  ..S ^TMP("SCMC",$J,"OLDTP",SCTP,DFN)=""
 | 
|---|
| 196 |  ELSE  D
 | 
|---|
| 197 |  .D MESS(" - NOT saved")
 | 
|---|
| 198 |  .S ^TMP("SCMC",$J,"BADTP",+$G(SCTP),DFN)=""
 | 
|---|
| 199 |  .D:('$P(SCX,U,2))&('$P(SCX,U,4))&('$P(SCX,U,3)) MESS("No Patient Team Assignment","!?30")
 | 
|---|
| 200 |  Q
 | 
|---|
| 201 |  ;
 | 
|---|
| 202 | PCUPDTM(DFN) ;
 | 
|---|
| 203 |  N SCX,SCNOMAIL
 | 
|---|
| 204 |  S SCNOMAIL=1
 | 
|---|
| 205 |  ;This is NOT a stand-alone procedure
 | 
|---|
| 206 |  S SCX=$$ACPTTM^SCAPMC(DFN,SCTM,"SCTEAMAR",SCDT,.SCERR)
 | 
|---|
| 207 |  IF SCX D
 | 
|---|
| 208 |  .D MESS("File #404.42 ien = "_+SCX,"!?30")
 | 
|---|
| 209 |  .IF $P(SCX,U,2) D
 | 
|---|
| 210 |  ..D MESS("  New Entry")
 | 
|---|
| 211 |  ..S ^TMP("SCMC",$J,"NEWTM",SCTM,DFN)=""
 | 
|---|
| 212 |  ELSE  D
 | 
|---|
| 213 |  .D MESS(" - NOT saved")
 | 
|---|
| 214 |  .S ^TMP("SCMC",$J,"BADTM",+$G(SCTM),DFN)=""
 | 
|---|
| 215 |  Q
 | 
|---|
| 216 |  ;
 | 
|---|
| 217 | OKCLEAN() ;
 | 
|---|
| 218 |  D MESS(">>> Cleaning up ^TMP(""SCMC"" global","!?5")
 | 
|---|
| 219 |  N SCOK
 | 
|---|
| 220 |  S SCOK=1
 | 
|---|
| 221 |  ;K ^TMP("SCMC",$J)
 | 
|---|
| 222 |  Q SCOK
 | 
|---|
| 223 |  ;
 | 
|---|
| 224 | DISP200(SC200) ;
 | 
|---|
| 225 |  Q $P($G(^VA(200,SC200,0)),U,1)_" [#"_SC200_"]"
 | 
|---|
| 226 |  ;
 | 
|---|
| 227 | DISPTP(SCTP) ;
 | 
|---|
| 228 |  Q $P($G(^SCTM(404.57,SCTP,0)),U,1)_" [#"_SCTP_"]"
 | 
|---|
| 229 |  ;
 | 
|---|
| 230 | DISPTM(SCTM) ;
 | 
|---|
| 231 |  Q $P($G(^SCTM(404.51,SCTM,0)),U,1)_" [#"_SCTM_"]"
 | 
|---|
| 232 |  ;
 | 
|---|
| 233 | DISPPT(DFN) ;
 | 
|---|
| 234 |  Q $S(SCNOPRPT:"",1:$E($P($G(^DPT(DFN,0)),U,1),1,21)_" [SSN#:"_$P($G(^DPT(DFN,0)),U,9)_"]")
 | 
|---|
| 235 |  ;
 | 
|---|
| 236 | MESS(TEXT,FORMAT) ;
 | 
|---|
| 237 |  Q:$G(SCSTOP)!($G(TEXT)="")
 | 
|---|
| 238 |  S FORMAT=$G(FORMAT,"?5")
 | 
|---|
| 239 |  D OUT^SCMCRU(TEXT,FORMAT)
 | 
|---|
| 240 |  Q
 | 
|---|
| 241 |  ;
 | 
|---|
| 242 | GETDEV() ;
 | 
|---|
| 243 |  N SCOK
 | 
|---|
| 244 |  S SCOK=0
 | 
|---|
| 245 |  S %ZIS="PMQ" D ^%ZIS  G:POP QTGDV
 | 
|---|
| 246 |  S SCOK=1
 | 
|---|
| 247 | QTGDV Q (SCOK)
 | 
|---|
| 248 |  ;
 | 
|---|
| 249 | QUE(NAME,START) ;
 | 
|---|
| 250 |  ;  Needed: ZTSAVE array
 | 
|---|
| 251 |  ;  NAME   = description
 | 
|---|
| 252 |  ;  START  = starting point of routine
 | 
|---|
| 253 |  S ZTDESC=NAME,ZTRTN=START
 | 
|---|
| 254 |  D ^%ZTLOAD W:$D(ZTSK) !,"TASK #",ZTSK
 | 
|---|
| 255 |  D HOME^%ZIS K IO("Q")
 | 
|---|
| 256 |  Q ZTSK
 | 
|---|