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