1 | SCRPMTA ;ALB/REW/PDR - Team Reassignment APIs:APPTTM ; AUG 1998
|
---|
2 | ;;5.3;scheduling;**148,157**;aug 13, 1993
|
---|
3 | ; Reassign patient Team, called from RPC ='SC FILE PAT TM REASGN' (PTFILE^SCMRBK - PTFILE^SCMRBK)
|
---|
4 | ;
|
---|
5 | ;;1.0
|
---|
6 | ; MAKE A SINGLE PATIENT TEAM REASSIGNMENT
|
---|
7 | ACPTTM(DFN,SCTMTO,SCFIELDA,SCACT,FASIEN,SCERR) ;add a patient to a team (pt tmassgn - #404.42)
|
---|
8 | ; input:
|
---|
9 | ; DFN = pointer to PATIENT file (#2)
|
---|
10 | ; SCTMTO = pointer to TEAM file (#404.51) "TO" Team
|
---|
11 | ; SCFIELDA= array of additional fields to be added for 404.42
|
---|
12 | ; SCACT = date to activate [default=DT]
|
---|
13 | ; FASIEN = IEN of source team assignment
|
---|
14 | ; SCERR = array NAME to store error messages.
|
---|
15 | ; [ex. ^TMP("ORXX",$J)]
|
---|
16 | ;
|
---|
17 | ; Output:
|
---|
18 | ; Returned = ien of 404.42 - 0 if none after^new?^Message
|
---|
19 | ; SCERR() = Array of DIALOG file messages(errors) .
|
---|
20 | ; Foramt:
|
---|
21 | ; Subscript: Sequential # from 1 to n
|
---|
22 | ; Piece Description
|
---|
23 | ; 1 IEN of DIALOG file
|
---|
24 | N SCPTTM,SCESEQ,SCPARM,SCIEN,SC,SCFLD,SCNEWTM,SCDTPAR,SCMESS
|
---|
25 | ;
|
---|
26 | ;
|
---|
27 | I '$$OKDATA D G APTTMQ ;check/setup variables
|
---|
28 | . D ERROR("Failed initial data check","",10)
|
---|
29 | ;
|
---|
30 | ; PROCESS REASSIGNMENT
|
---|
31 | ; get destination team assignment parameters if already existing assignment
|
---|
32 | I '$$GETTMPAR(DFN,SCTMTO,SCACT,.SCERR,.SCDTPAR,.SCPTTM) D G APTTMQ ; BAIL if error
|
---|
33 | . D ERROR("Unable to get list of team assignments for patient",FASIEN,20)
|
---|
34 | ; Make sure this reassignment doesn't set up more than 1 primary care team for PT
|
---|
35 | I $$INVALMOV(SCPTTM,FASIEN,SCDTPAR) D G APTTMQ ; BAIL if error
|
---|
36 | . D ERROR("Patient already has a primary care assignment",FASIEN,30)
|
---|
37 | ;
|
---|
38 | ; check for currently active destination assignment and discharge if so
|
---|
39 | I $$ACTIVDES(SCDTPAR,SCACT) D G:SCPTTM APTTMQ ; BAIL OUT if discharge unsuccessfull
|
---|
40 | . I $$DISTMOK(DFN,SCPTTM,SCACT,DUZ,"Destination") S SCPTTM="" Q ; going to create a new team
|
---|
41 | . D ERROR("Unable to discharge current destination assignment",SCPTTM,40)
|
---|
42 | ;
|
---|
43 | ; discharge source team
|
---|
44 | I '$$DISTMOK(DFN,FASIEN,SCACT,DUZ,"Source") D G APTTMQ
|
---|
45 | . ; error messages setup within call to DISTMOK
|
---|
46 | . S SCPTTM=""
|
---|
47 | ;
|
---|
48 | ; Move the patient to destination team and create destination team if necessary
|
---|
49 | I '$$MOVPATOK(DFN,SCACT,SCTMTO,SCFIELDA,SCDTPAR,.SCPTTM,DUZ) D G APTTMQ
|
---|
50 | . D ERROR("Unable to move patient to destination team",FASIEN,50)
|
---|
51 | ;
|
---|
52 | APTTMQ ;
|
---|
53 | ;B
|
---|
54 | Q +$G(SCPTTM)_U_+$G(SCNEWTM)_U_$G(SCMESS)
|
---|
55 | ;
|
---|
56 | ;-------------------- SUBS -------------------------------
|
---|
57 | ;
|
---|
58 | PTTMACT(DFN,SCTMTO,SCDT,SCERR) ;what is patient/team assignment on a given date-time into the future? Return 404.42 ien or 0
|
---|
59 | N SCTMLST,SCOK,SCPTTMDT
|
---|
60 | S SCOK=0
|
---|
61 | S SCPTTMDT("BEGIN")=SCDT,SCPTTMDT("END")=3990101,SCPTTMDT("INCL")=0
|
---|
62 | IF $$TMPT^SCAPMC3(DFN,"SCPTTMDT","","SCTMLST",.SCERR) S:$D(SCTMLST("SCTM",SCTMTO)) SCOK=$O(SCTMLST("SCTM",SCTMTO,0))
|
---|
63 | Q SCOK
|
---|
64 | ;
|
---|
65 | OKDATA() ;setup/check variables
|
---|
66 | N SCOK
|
---|
67 | S SCOK=1
|
---|
68 | D INIT^SCAPMCU1(.SCOK)
|
---|
69 | IF '$D(^DPT(DFN,0))!('$D(^SCTM(404.51,SCTMTO,0))) D S SCOK=0
|
---|
70 | . S SCPARM("PATIENT")=DFN
|
---|
71 | . S SCPARM("TEAM")=SCTMTO
|
---|
72 | . D ERR^SCAPMCU1(SCESEQ,4045101,.SCPARM,"",.SCERR)
|
---|
73 | S:'$G(SCACT) SCACT=DT
|
---|
74 | Q SCOK
|
---|
75 | ;
|
---|
76 | DISTMOK(DFN,TMIEN,SCACT,SCDUZ,SD) ; Discharge patient from Team Assignment
|
---|
77 | ; DFN = pointer to patient
|
---|
78 | ; TMIEN = Ptr to Team Assignment File 404.42 for Team being discharged
|
---|
79 | ; SCAT = Discharge Date
|
---|
80 | ; SCDUZ = DUZ of user making reassignment
|
---|
81 | ; SD = text indicating "source" or "destination" team
|
---|
82 | N SC,SCTEC,DISDAT
|
---|
83 | ;
|
---|
84 | Q:TMIEN="" TMIEN ; Don't try to update this record if don't get IEN
|
---|
85 | S DISDAT=SCACT ; init discharge date
|
---|
86 | ; discharge for previous day if assignment date prior to today
|
---|
87 | I $P($G(^SCPT(404.42,TMIEN,0)),U,2)'>$$PREVDAY(SCACT) S DISDAT=$$PREVDAY(SCACT)
|
---|
88 | ; Discharge Position assignments first, to prevent posibility of orphan positions
|
---|
89 | D DISCHPOS(DFN,TMIEN,DISDAT,SCERR,.SCTEC) ; Discharge from any position Assignments on this team
|
---|
90 | I SCTEC S SCTEC=$$INPTTM^SCAPMC(DFN,TMIEN,DISDAT,SCERR) ; Discharge from team Assignments
|
---|
91 | I 'SCTEC D ERROR("Unable to discharge "_SD_" team",FASIEN,500) Q 0 ; BAIL OUT
|
---|
92 | Q SCTEC
|
---|
93 | ;
|
---|
94 | DISCHPOS(DFN,TMASGN,SCAT,SCERR,SCTEC) ;Discharge positition assignments
|
---|
95 | ; DFN = ptr to patient
|
---|
96 | ; TMASGN = ptr to team assignment
|
---|
97 | ; SCAT = discharge date
|
---|
98 | N POSASGN,EM,GD,OK
|
---|
99 | S (EM,GD)=""
|
---|
100 | S OK=1
|
---|
101 | S SCTEC=1 ; initialize successfull pos discharge since may not be any pos to discharge
|
---|
102 | S POSASGN=0
|
---|
103 | F S POSASGN=$O(^SCPT(404.43,"B",TMASGN,POSASGN)) Q:POSASGN="" D
|
---|
104 | . S SCTEC=$$INPTTP^SCAPMC(DFN,POSASGN,SCAT,SCERR) ; discharge position
|
---|
105 | . I SCTEC S GD=GD_POSASGN_","
|
---|
106 | . I 'SCTEC D
|
---|
107 | .. S EM=EM_POSASGN_","
|
---|
108 | .. S OK=0
|
---|
109 | I 'OK D
|
---|
110 | . I GD'="" D ERROR("able to discharge these source positions: "_GD_" unable to discharge these: "_EM,POSASGN,300) Q
|
---|
111 | . D ERROR("unable to discharge any of the team positions: "_EM,POSASGN,400)
|
---|
112 | Q
|
---|
113 | ;
|
---|
114 | PREVDAY(DAY) ; GET PREVIOUS DAY
|
---|
115 | ; DAY = DATE IN FILEMAN FORMAT
|
---|
116 | N X,X1,X2
|
---|
117 | S X1=DAY,X2=-1
|
---|
118 | D C^%DTC
|
---|
119 | Q X
|
---|
120 | ;
|
---|
121 | GETTMPAR(DFN,SCTMTO,SCDT,SCERR,SCTMPAR,SCPTTM) ; RETURN team parameters
|
---|
122 | ; SCTMPAR is returned as:
|
---|
123 | ; Piece Description
|
---|
124 | ; 1 IEN of TEAM file entry
|
---|
125 | ; 2 Name of team
|
---|
126 | ; 3 IEN of file #404.42 (Pt Tm Assignment)
|
---|
127 | ; 4 current effective date
|
---|
128 | ; 5 current inactivate date (if any)
|
---|
129 | ; 6 pointer to 403.47 (purpose)
|
---|
130 | ; 7 Name of Purpose
|
---|
131 | ; 8 Is this the pt's PC Team?
|
---|
132 | ; 9 IEN of PC team assignment - added to record -PDR
|
---|
133 | N SCTMLST,SCPTTMDT,PCTM
|
---|
134 | S (SCPTTM,SCTMPAR,PCTM)="" ; initialize dest team IEN and dest team parameters
|
---|
135 | ; get a list of active or future active teams for this patient
|
---|
136 | S SCPTTMDT("BEGIN")=SCDT,SCPTTMDT("END")=3990101,SCPTTMDT("INCL")=0
|
---|
137 | I $$TMPT^SCAPMC3(DFN,"SCPTTMDT","","SCTMLST",.SCERR) D
|
---|
138 | . S PCTM=$$GETPCTM(.SCTMLST) ; get the PC team if any for this patient
|
---|
139 | . S:$D(SCTMLST("SCTM",SCTMTO)) SCPTTM=$O(SCTMLST("SCTM",SCTMTO,0))
|
---|
140 | . I SCPTTM D ; get the team parameters
|
---|
141 | .. S SCN=$O(SCTMLST("SCTM",SCTMTO,SCPTTM,"")) ; ordered list
|
---|
142 | .. S SCTMPAR=$G(SCTMLST(SCN)) ; basic team parameters
|
---|
143 | S $P(SCTMPAR,U,9)=+PCTM ; add ien of PC team as 9th piece
|
---|
144 | Q '$D(@SCERR)
|
---|
145 | ;
|
---|
146 | GETPCTM(TMLIST) ; FIND THE PC TEAM FOR THIS PATIENT
|
---|
147 | N SN,PT
|
---|
148 | S (PT,SN)=0
|
---|
149 | F S SN=$O(TMLIST(SN)) Q:'SN D Q:PT
|
---|
150 | . I $P(TMLIST(SN),U,8) S PT=$P(TMLIST(SN),U,3)
|
---|
151 | Q PT
|
---|
152 | ;
|
---|
153 | FUASSN(SCDTPAR,SCDT) ; is there a future assignment?
|
---|
154 | Q $P(SCTMPAR,U,4)>SCDT
|
---|
155 | ;
|
---|
156 | FUDISCHG(SCTMPAR,SCDT) ;IS THERE A FUTURE DISCHARGE?
|
---|
157 | Q $P(SCTMPAR,U,5)>SCDT
|
---|
158 | ;
|
---|
159 | MOVPATOK(DFN,SCACT,SCTMTO,SCFIELDA,SCTMPAR,SCPTTM,SCDUZ) ; DID MOVE GO OK?
|
---|
160 | N SCFLD,SCED
|
---|
161 | S SCED=0
|
---|
162 | I SCPTTM D ; setup for edit of existing dest assignment record
|
---|
163 | . S SCPTTM=SCPTTM_"," ; IENS format
|
---|
164 | . I $$FUASSN(SCTMPAR,SCACT) S SCED=1 ; the new assign date wil be entered below
|
---|
165 | . I $$FUDISCHG(SCTMPAR,SCACT) D ; is there a future discharge for the dest team?
|
---|
166 | .. S SCED=1
|
---|
167 | .. S SC($J,404.42,SCPTTM,.09)="" ; remove discharge date
|
---|
168 | . I SCED D ; editing the existing assignment - setup edit documentation fields
|
---|
169 | .. S SC($J,404.42,SCPTTM,.13)=@SCFIELDA@(.11) ; last edited by set to entered by
|
---|
170 | .. S SC($J,404.42,SCPTTM,.14)=@SCFIELDA@(.12) ; last edit time set to enter date/time
|
---|
171 | .. K @SCFIELDA@(.11) ; dispose of entered by (SCFIELDA array is set in SCMRBK)
|
---|
172 | .. K @SCFIELDA@(.12) ; dispose of entry date/time
|
---|
173 | ;
|
---|
174 | I '(+SCPTTM) S SCPTTM="+1," ; setup for new team
|
---|
175 | ;
|
---|
176 | S SCFLD=0 ; add additional fields from workstation if any
|
---|
177 | F S SCFLD=$O(@SCFIELDA@(SCFLD)) Q:'SCFLD D
|
---|
178 | . S SC($J,404.42,SCPTTM,SCFLD)=@SCFIELDA@(SCFLD)
|
---|
179 | ; core fields for new team assignment
|
---|
180 | S SC($J,404.42,SCPTTM,.01)=DFN
|
---|
181 | S SC($J,404.42,SCPTTM,.02)=SCACT
|
---|
182 | S SC($J,404.42,SCPTTM,.03)=SCTMTO
|
---|
183 | ;
|
---|
184 | I 'SCED D UPDATE^DIE("","SC($J)","SCIEN","SCERR") ; new entry
|
---|
185 | I SCED D FILE^DIE("","SC($J)","SCERR") ; edit existing entry
|
---|
186 | ;
|
---|
187 | IF $D(@SCERR) D
|
---|
188 | . K SCIEN
|
---|
189 | . S SCPTTM=""
|
---|
190 | ELSE D
|
---|
191 | . I SCPTTM'="+1," Q ; BAIL OUT - was edit to existing assignement record
|
---|
192 | . S SCPTTM=$G(SCIEN(1)) ; new assignment record set up
|
---|
193 | . S SCNEWTM=1
|
---|
194 | . D AFTERTM^SCMCDD1(SCPTTM)
|
---|
195 | Q '$D(@SCERR)
|
---|
196 | ;
|
---|
197 | INVALMOV(DTMIEN,STMIEN,TMPAR) ; IS THIS A VALID REASSIGNMENT?
|
---|
198 | ; can't have a pc team reassignment if patient has an existing PC team assignment
|
---|
199 | ; and it is not
|
---|
200 | ; 1: the src team (move from src to dest discharges src, result only 1 pc team) OR
|
---|
201 | ; 2: the destination team (already existing assignment)
|
---|
202 | I $$PCASSGN,$$OTHPCTM(DTMIEN,STMIEN,TMPAR) Q 1
|
---|
203 | Q 0
|
---|
204 | ;
|
---|
205 | PCASSGN() ; IS THE REASSIGNMENT DESTINATION TO BE PC?
|
---|
206 | Q @SCFIELDA@(.08)=1
|
---|
207 | ;
|
---|
208 | OTHPCTM(DTMIEN,STMIEN,TMPAR) ; IS THERE ALREADY PC TEAM ASSIGNMENT?
|
---|
209 | I $P(TMPAR,U,9)=0 Q 0 ; no other primary care assignments
|
---|
210 | I 'DTMIEN Q $P(TMPAR,U,9)'=STMIEN ; true if PC team is not source team
|
---|
211 | Q $P(TMPAR,U,9)'=DTMIEN ; true if existing dest team assign is not pc team
|
---|
212 | ;
|
---|
213 | ACTIVDES(SCDTPAR,SCACT) ; IS THE DESTINATION ASSIGNMENT ACTIVE?
|
---|
214 | ; SCDTPAR = Destination Team assignment parameter string
|
---|
215 | N DISDT,ASNDT
|
---|
216 | S DISDT=$P(SCDTPAR,U,5)
|
---|
217 | I DISDT="" S DISDT=9999999
|
---|
218 | S ASNDT=$P(SCDTPAR,U,4)
|
---|
219 | ; ACTIVE if assign date is not in future and
|
---|
220 | ; there is no discharge date, or the discharge date is in the future
|
---|
221 | I (ASNDT'>SCACT)&(DISDT>SCACT) Q 1
|
---|
222 | Q 0
|
---|
223 | ;
|
---|
224 | ERROR(TXT,ID,ERN) ; ERROR PROCESSOR
|
---|
225 | S SCMESS=TXT_" IEN="_ID_" (ER#="_ERN_")"
|
---|
226 | S SCPTTM=0 ; return no assignment ien
|
---|
227 | ;S ^TMP("PDR",$J,$H,DFN)=SCMESS
|
---|
228 | Q
|
---|