| 1 | SCMCTPU2 ;ALB/REW - Team Position Utilities ; 9 Jun 1995
 | 
|---|
| 2 |  ;;5.3;Scheduling;**41,148,204**;AUG 13, 1993
 | 
|---|
| 3 |  ;1
 | 
|---|
| 4 | YSPTTPPC(DFN,SCACT,SCROLE) ;is it ok to give patient a new pc position
 | 
|---|
| 5 |  ;  
 | 
|---|
| 6 |  ;  Return [OK:1,Not OK: 0^Message]
 | 
|---|
| 7 |  Q:"2^1"'[$G(SCROLE) "0^Bad PC Role"
 | 
|---|
| 8 |  N SCOK,SCX,SCTP,SCROLETX
 | 
|---|
| 9 |  S SCROLETX=$S(SCROLE=1:"Practitioner",(SCROLE=2):"Attending",1:"Error")
 | 
|---|
| 10 |  ;does pt have a current pc position?
 | 
|---|
| 11 |  S SCTP=$$GETPCTP^SCAPMCU2(DFN,DT,SCROLE)
 | 
|---|
| 12 |  IF SCTP>0 S SCOK="0^Pt has current PC "_SCROLETX_" Position Assignment"_U_SCTP G QTOKPC
 | 
|---|
| 13 |  ;does pt have a future pc position?
 | 
|---|
| 14 |  S SCX=$O(^SCPT(404.43,"APCPOS",DFN,SCROLE,SCACT))
 | 
|---|
| 15 |  IF SCX D  G QTOKPC
 | 
|---|
| 16 |  .S SCTP=$O(^SCPT(404.43,"APCPOS",DFN,SCROLE,+SCX,0))
 | 
|---|
| 17 |  .S SCOK="0^Patient has future PC Assignment to the "_$P($G(^SCTM(404.57,+SCTP,0)),U,1)_" position."_U_SCTP
 | 
|---|
| 18 |  S SCOK=1
 | 
|---|
| 19 | QTOKPC Q SCOK
 | 
|---|
| 20 |  ;
 | 
|---|
| 21 | OKACPTTP(DFN,SCTP,DATE,ACTIVE) ;is it ok to activate pt pos assignment?
 | 
|---|
| 22 |  N SCOK,SCDT,SCNODE,SCINACT
 | 
|---|
| 23 |  S SCOK=1
 | 
|---|
| 24 |  G:'$D(^SCPT(404.43,"ADFN",DFN)) ENDOK  ;quick check
 | 
|---|
| 25 |  ;is position active now(if checking)?
 | 
|---|
| 26 |  IF $G(ACTIVE) D  G:'SCOK ENDOK
 | 
|---|
| 27 |  . S SCOK=+$$ACTTP^SCMCTPU(SCTP,DATE)
 | 
|---|
| 28 |  ;is the patient assigned to this position either now or in future?
 | 
|---|
| 29 |  S SCDT=$O(^SCPT(404.43,"ADFN",DFN,SCTP,3990101),-1)
 | 
|---|
| 30 |  S SCPTTP=$O(^SCPT(404.43,"ADFN",DFN,SCTP,+SCDT,0))
 | 
|---|
| 31 |  IF SCPTTP D
 | 
|---|
| 32 |  .S SCNODE=$G(^SCPT(404.43,SCPTTP,0))
 | 
|---|
| 33 |  .S SCINACT=$P(SCNODE,U,4)
 | 
|---|
| 34 |  .IF ('SCINACT)!(SCINACT>DATE) D
 | 
|---|
| 35 |  ..S SCOK=0   ;no inactive date or inact after date
 | 
|---|
| 36 | ENDOK Q SCOK
 | 
|---|
| 37 |  ;
 | 
|---|
| 38 | PCRLPTTP(DFN,SCTP,DATE) ; can position be pc practitioner or pc attending
 | 
|---|
| 39 |  ; return yes pract^yes attend
 | 
|---|
| 40 |  Q $$CHKROLE(DFN,SCTP,DATE,1)_U_$$CHKROLE(DFN,SCTP,DATE,2)
 | 
|---|
| 41 |  ;
 | 
|---|
| 42 | CHKROLE(DFN,SCTP,DATE,ROLE) ;can position file role for patient?
 | 
|---|
| 43 |  ;this is not a stand-alone function
 | 
|---|
| 44 |  N SCCUR,SCDT,SCTPRL,SCPTTP,SCOK,SCNODE,SCINACT,SCACT
 | 
|---|
| 45 |  S SCOK=1
 | 
|---|
| 46 |  ;bp/cmf 204 change code begin
 | 
|---|
| 47 |  ;original code next line
 | 
|---|
| 48 |  ;IF $G(ROLE)&('$P($G(^SCTM(404.57,+$G(SCTP),0)),U,4)) S SCOK=0 G QTCHKRL
 | 
|---|
| 49 |  ;bp/cmf 204 new code begin
 | 
|---|
| 50 |  ;bp/cmf 204 new code end
 | 
|---|
| 51 |  I $G(ROLE) D  G:SCOK=0 QTCHKRL
 | 
|---|
| 52 |  . I '$P($G(^SCTM(404.57,+$G(SCTP),0)),U,4) S SCOK=0 Q
 | 
|---|
| 53 |  . N SCTM
 | 
|---|
| 54 |  . S SCTM=$P($G(^SCTM(404.57,SCTP,0)),U,2)
 | 
|---|
| 55 |  . I $P($G(^SCTM(404.51,SCTM,0)),U,5)'=1 S SCOK=0
 | 
|---|
| 56 |  . Q
 | 
|---|
| 57 |  ;bp/cmf 204 change code end
 | 
|---|
| 58 |  S SCDT=$O(^SCPT(404.43,"APCPOS",DFN,ROLE,3990101),-1)
 | 
|---|
| 59 |  S SCTPRL=$O(^SCPT(404.43,"APCPOS",DFN,ROLE,+SCDT,0))
 | 
|---|
| 60 |  S SCPTTP=$O(^SCPT(404.43,"APCPOS",DFN,ROLE,+SCDT,+SCTPRL,0))
 | 
|---|
| 61 |  ;check if active
 | 
|---|
| 62 |  IF SCPTTP D
 | 
|---|
| 63 |  .S SCNODE=$G(^SCPT(404.43,SCPTTP,0))
 | 
|---|
| 64 |  .S SCACT=$P(SCNODE,U,3)
 | 
|---|
| 65 |  .Q:(DATE=SCACT)&(SCTP=SCTPRL)  ;if this date & position (editing current
 | 
|---|
| 66 |  .S SCINACT=$P(SCNODE,U,4)
 | 
|---|
| 67 |  .IF SCINACT D
 | 
|---|
| 68 |  ..IF SCINACT>DATE D
 | 
|---|
| 69 |  ...S SCOK=0  ;no making pc role before currently defined
 | 
|---|
| 70 |  .ELSE  D
 | 
|---|
| 71 |  ..S SCOK=0   ;no making pc role without inactivating current
 | 
|---|
| 72 | QTCHKRL Q SCOK
 | 
|---|