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