| 1 | SCMCTMU ;ALB/REW - Team-Patient Utilities ; 1 May 95 | 
|---|
| 2 | ;;5.3;Scheduling;**41**;AUG 13, 1993 | 
|---|
| 3 | ;1 | 
|---|
| 4 | ACTTM(SCTM,SCDT) ;is the team  currently active? | 
|---|
| 5 | ; Used by computed field #300 (CURRENTLY ACTIVE?) OF file #404.51 | 
|---|
| 6 | ; Input: | 
|---|
| 7 | ;  SCTM  - Pointer to Team file #404.51 | 
|---|
| 8 | ;  SCDT  - Date to check for, Default=DT | 
|---|
| 9 | ; Returns: | 
|---|
| 10 | ;   1  if after effective date and before inactive date | 
|---|
| 11 | ;   0  if not yet active or inactivated | 
|---|
| 12 | ;   -1 if error | 
|---|
| 13 | ; | 
|---|
| 14 | Q $$DATES^SCAPMCU1(404.58,.SCTM,.SCDT) | 
|---|
| 15 | ; | 
|---|
| 16 | ENROLL(DFN,CLINIC,DATE) ;is this patient enrolled in this clinic on a date? | 
|---|
| 17 | ;Input: | 
|---|
| 18 | ;    DFN - ien of Patient file | 
|---|
| 19 | ; CLINIC - Pointer to file 44 | 
|---|
| 20 | ;   DATE - (Optional) Effective Date, default=DT | 
|---|
| 21 | ;Return: [1|Yes, he is enrolled;0|he is not] | 
|---|
| 22 | ; | 
|---|
| 23 | N SCCL,SCL1,SCNODE,SCACT,SCINACT,SCYES | 
|---|
| 24 | S SCYES=0 | 
|---|
| 25 | S SCCL=0 | 
|---|
| 26 | F  S SCCL=$O(^DPT(DFN,"DE","B",CLINIC,SCCL)) Q:'SCCL  D | 
|---|
| 27 | .S SCCL1=0 | 
|---|
| 28 | .F  S SCCL1=$O(^DPT(DFN,"DE",SCCL,1,SCCL1)) Q:'SCCL1  D | 
|---|
| 29 | ..S SCNODE=$G(^DPT(DFN,"DE",SCCL,1,SCCL1,0)) | 
|---|
| 30 | ..S SCACT=+SCNODE | 
|---|
| 31 | ..S SCINACT=$P(SCNODE,U,3) | 
|---|
| 32 | ..S:$S('SCACT:0,(SCACT>DATE):0,'SCINACT:1,(SCINACT<DATE):0,1:1) SCYES=1 | 
|---|
| 33 | Q SCYES | 
|---|
| 34 | ; | 
|---|
| 35 | RESTCONS(DFN) ;does this patient have restricted consults? | 
|---|
| 36 | ; for a clinic in which the patient is NOT enrolled, some patients/teams | 
|---|
| 37 | ; require more authority to enroll or make appointments | 
|---|
| 38 | ; this will often be used with $$ENROLL(dfn) to see if he is enrolled | 
|---|
| 39 | ; | 
|---|
| 40 | ; Input: DFN - ien of Patient File | 
|---|
| 41 | ; Return: [1|Yes, restrict 0|No | 
|---|
| 42 | Q 1 | 
|---|
| 43 | WHOCLIN(SDCL,DATE) ;give clinic & date return prt to 200 | 
|---|
| 44 | ; SDCL - ien of #44 | 
|---|
| 45 | ; DATE - effective date (optional) default =DT | 
|---|
| 46 | ; Returned: ien of 200 | 
|---|
| 47 | ; | 
|---|
| 48 | Q | 
|---|
| 49 | POSCLIN(SDCL,DATE) ;given clinic & date, return ptr to team position 404.57 | 
|---|
| 50 | ;  SDCL - ien of Hospital Location (#44) | 
|---|
| 51 | ;  Returned: If exactly one position for clinic - ien of team postion | 
|---|
| 52 | ;            else null | 
|---|
| 53 | ; | 
|---|
| 54 | N X,SCD | 
|---|
| 55 | S:'$G(DATE) DATE=DT | 
|---|
| 56 | S SCD=$O(^SCTM(404.57,"ACLINDT",+SDCL,-DATE)) ;SCD is the effective date | 
|---|
| 57 | S X=$O(^SCTM(404.57,"ACLINDT",+SDCL,+SCD,"")) ;position assoc w/ clinic | 
|---|
| 58 | Q $G(X) | 
|---|
| 59 | WHOPOS(SCTP,DATE) ;given position & date,return pointer to 200^name of pr | 
|---|
| 60 | ;SCTP - ien of Team Position File (#404.57) | 
|---|
| 61 | ; Date - (Optional) effective date - default=today | 
|---|
| 62 | ; | 
|---|
| 63 | Q $$GETPRTP^SCAPMCU2(SCTP,.DATE) | 
|---|
| 64 | DISPWHO(SCPOS,DATE) ;given position & date, return external of 200 | 
|---|
| 65 | ;SCPOS - ien of 404.48) | 
|---|
| 66 | ; DATE - (Optional) effective date - default=today | 
|---|
| 67 | ; | 
|---|
| 68 | N Y,SCP | 
|---|
| 69 | S:'$G(DATE) DATE=DT | 
|---|
| 70 | S SCP=$$WHOPOS(SCPOS,DATE) | 
|---|
| 71 | S:SCP Y=$S($D(^VA(200,+SCP,0)):$P(^(0),U,1),1:"Unknown") | 
|---|
| 72 | Q $G(Y) | 
|---|
| 73 | PR(SDNPI) ;Provider Display Data | 
|---|
| 74 | ; Input  -- SDNPI    New Person IEN | 
|---|
| 75 | ; Output -- Provider Display Data - Provider Name | 
|---|
| 76 | N Y | 
|---|
| 77 | S Y=$S($D(^VA(200,SDNPI,0)):$P(^(0),"^"),1:"Unknown") | 
|---|
| 78 | Q $G(Y) | 
|---|
| 79 | PTTMSCRN ;define dic('s') to ensure patient team position assignement is ok | 
|---|
| 80 | ; | 
|---|
| 81 | CK N SCTM,SCTMA | 
|---|
| 82 | S SCTMA=$P($G(^SCPT(404.43,Y,0)),U,1) | 
|---|
| 83 | S SCTM=$P($G(^SCPT(404.42,SCTMA,0)),U,3) | 
|---|
| 84 | S DIC("S")="IF $D(^SCTM(404.57,""C"","_SCTM_",Y))" | 
|---|
| 85 | Q | 
|---|
| 86 | OKPTTM(SCNODE,DA) ;check pt team assignment - 404.42 | 
|---|
| 87 | ; SCNODE is proposed new node | 
|---|
| 88 | Q 1 | 
|---|
| 89 | N OK,DFN,SCTM,SCACT,SCINACT,SCDTS,SCTMHIST,SCB4,SCAFT | 
|---|
| 90 | S OK=1 | 
|---|
| 91 | G:'DA QTOKTM | 
|---|
| 92 | S DFN=$P(SCNODE,U,1) | 
|---|
| 93 | S SCTM=$P(SCNODE,U,3) | 
|---|
| 94 | S SCACT=$P(SCNODE,U,2) | 
|---|
| 95 | S SCINACT=$P(SCNODE,U,9) | 
|---|
| 96 | S:$G(SCACT) SCDTS("BEGIN")=SCACT | 
|---|
| 97 | S:$D(SCACT) SCDTS("END")=$S(SCINACT:SCINACT,1:3990101) | 
|---|
| 98 | S:$D(SCDTS) SCDTS("INCL")=1 | 
|---|
| 99 | ;check patient (.01) - none now | 
|---|
| 100 | ;check team (.03) | 
|---|
| 101 | IF SCINACT&('SCACT) S OK=0_U_"Activation must be defined before Discharge" G QTOKTM | 
|---|
| 102 | IF SCTM&SCACT&DFN D | 
|---|
| 103 | .S SCTMHIST=$$ACTHIST^SCAPMCU2(404.58,.SCTM,.SCDTS) | 
|---|
| 104 | .S:'SCTMHIST OK=0_U_"Team Not Active" | 
|---|
| 105 | .;check assignment dt (.02) | 
|---|
| 106 | .;  - is there an assignment on exactly the same date in 404.42? | 
|---|
| 107 | .S SCPTTMA=0 F  S SCPTTMA=$O(^SCPT(404.42,"AIDT",DFN,SCTM,-SCACT,SCPTTMA)) Q:SCPTTMA=""!(SCPTTMA=DA)!(DA="")  S OK=0_U_"Already an activation for patient/team on this date" | 
|---|
| 108 | .;  - is there an assignment w/o a discharge before in 404.42? | 
|---|
| 109 | .S SCB4=$O(^SCPT(404.42,"AIDT",DFN,SCTM,-SCACT)) | 
|---|
| 110 | .S SCB4A=$O(^SCPT(404.42,"AIDT",DFN,SCTM,+SCB4,0)) | 
|---|
| 111 | .S:SCB4A&('$P($G(^SCPT(404.42,+SCB4A,0)),U,9)) OK=0_U_"Existing active patient/team assignment already" | 
|---|
| 112 | .;check inactivation dt (.09) | 
|---|
| 113 | .;  - if exists, is inactivation after assignment dt | 
|---|
| 114 | .S:SCINACT&(SCACT'<SCINACT) OK=0_U_"Activation must be before discharge" | 
|---|
| 115 | .;  - if there is a future assignment is it after this inactivation? | 
|---|
| 116 | .S SCAFT=-$O(^SCPT(404.42,"AIDT",DFN,SCTM,-SCINACT),-1) | 
|---|
| 117 | .S:SCAFT&(SCAFT'>SCINACT) OK=0_U_"Existing future activation before this inactivation" | 
|---|
| 118 | QTOKTM Q OK | 
|---|
| 119 | ; | 
|---|
| 120 | INSTPCTM(DFN,SCEFF) ;return institution & team for pt's pc team | 
|---|
| 121 | ; return ptr4^institution^sctm^team name | 
|---|
| 122 | N SCTM,SCINST,SCOK | 
|---|
| 123 | S SCOK=0 | 
|---|
| 124 | S SCTM=+$$GETPCTM^SCAPMCU2(.DFN,.SCEFF,1) | 
|---|
| 125 | S SCINST=+$P($G(^SCTM(404.51,+$G(SCTM),0)),U,7) | 
|---|
| 126 | S:SCTM&SCINST SCOK=1 | 
|---|
| 127 | Q $S('SCOK:0,1:SCTM_U_$P($G(^SCTM(404.51,SCTM,0)),U,1)_U_SCINST_U_$P($G(^DIC(4,SCINST,0)),U,1)) | 
|---|
| 128 | ; | 
|---|
| 129 | EVT(SCCVEVT,SCCVORG) ;Invoke encounter conversion event driver | 
|---|
| 130 | ; Input  -- SCCVEVT  Conversion event | 
|---|
| 131 | ;                    0=Estimate, 1=Convert, 2=Re-convert | 
|---|
| 132 | ;           SCCVORG  Originating process type | 
|---|
| 133 | ; Output -- ^TMP("SCCVEVT",$J, disposition array | 
|---|
| 134 | K DTOUT,DIROUT | 
|---|
| 135 | S X=+$O(^ORD(101,"B","SCMC ENCOUNTER CONVERSION EVENTS",0))_";ORD(101," | 
|---|
| 136 | I X D EN^XQOR | 
|---|
| 137 | K X,^TMP("SCCVEVT",$J) | 
|---|
| 138 | EVTQ Q | 
|---|