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