source: Scheduling/trunk/m/BSDXAPI.m@ 1451

Last change on this file since 1451 was 1451, checked in by Sam Habiel, 12 years ago

removed transactions from BSDX07... still more work to be done though

File size: 17.4 KB
Line 
1BSDXAPI ; IHS/ANMC/LJF & VW/SMH - SCHEDULING APIs ; 6/19/12 5:42pm
2 ;;1.7T1;BSDX;;Aug 31, 2011;Build 18
3 ; Licensed under LGPL
4 ;
5 ;Orignal routine is BSDAPI by IHS/LJF, HMW, and MAW
6 ;local mods (many) by WV/SMH
7 ;Move to BSDX namespace as BSDXAPI from BSDAPI by WV/SMH
8 ; Change History:
9 ; 2010-11-5: (1.42)
10 ; - Fixed errors having to do uncanceling patient appointments if it was a patient cancelled appointment.
11 ; - Use new style Fileman API for storing appointments in file 44 in $$MAKE due to problems with legacy API.
12 ; 2010-11-12: (1.42)
13 ; - Changed ="C" to ["C" in SCIEN. Cancelled appointments can be "PC" as well.
14 ; 2010-12-5 (1.42)
15 ; Added an entry point to update the patient note in file 44.
16 ; 2010-12-6 (1.42)
17 ; MAKE1 incorrectly put info field in BSDR("INFO") rather than BSDR("OI")
18 ; 2010-12-8 (1.42)
19 ; Removed restriction on max appt length. Even though this restriction
20 ; exists in fileman (120 minutes), PIMS ignores it. Therefore, I
21 ; will ignore it here too.
22 ; 2011-01-25 (v.1.5)
23 ; Added entry point $$RMCI to remove checked in appointments.
24 ; In $$CANCEL, if the appointment is checked in, delete check-in rather than
25 ; spitting an error message to the user saying 'Delete the check-in'
26 ; Changed all lines that look like this:
27 ; I $G(BSDR("ADT"))'?7N1".".4N Q 1_U_"Appt Date/Time error: "_$G(BSDR("ADT"))
28 ; to:
29 ; I $G(BSDR("ADT"))'?7N.1".".4N Q 1_U_"Appt Date/Time error: "_$G(BSDR("ADT"))
30 ; to allow for date at midnight which does not have a dot at the end.
31 ; 2011-01-26 (v.1.5)
32 ; More user friendly message if patient already has appointment in $$MAKE:
33 ; Spits out pt name and user friendly date.
34 ; 2012-06-18 (v 1.7)
35 ; Removing transacions. Means that code SHOULD NOT fail. Took all checks
36 ; out for making an appointment to MAKECK. We call this first to make sure
37 ; that the appointment is okay to make before committing to make it. We
38 ; still have the provision to delete the data though if we fail when we
39 ; actually make the appointment
40 ;
41MAKE1(DFN,CLIN,TYP,DATE,LEN,INFO) ; Simplified PEP w/ parameters for $$MAKE - making appointment
42 ; Call like this for DFN 23435 having an appointment at Hospital Location 33
43 ; have 3 (scheduled) or 4 (walkin) appt at Dec 20, 2009 @ 10:11:59 for 30 minutes appt
44 ; for Baby foxes hallucinations.
45 ; S RESULT=$$MAKE1^BSDXAPI(23435,33,(3 or 4),3091220.221159,30,"I see Baby foxes")
46 S BSDR("PAT")=DFN ;DFN
47 S BSDR("CLN")=CLIN ;Hosp Loc IEN
48 S BSDR("TYP")=TYP ;3 sched or 4 walkin
49 S BSDR("ADT")=DATE ;Appointment date in FM format
50 S BSDR("LEN")=LEN ;Appt len upto 240 (min)
51 S BSDR("OI")=INFO ;Reason for appt - up to 150 char
52 S BSDR("USR")=DUZ ;Person who made appt - current user
53 Q $$MAKE(.BSDR)
54 ;
55MAKE(BSDR) ;PEP; call to store appt made
56 ;
57 ; Make call using: S ERR=$$MAKE^BSDXAPI(.ARRAY)
58 ;
59 ; Input Array -
60 ; BSDR("PAT") = ien of patient in file 2
61 ; BSDR("CLN") = ien of clinic in file 44
62 ; BSDR("TYP") = 3 for scheduled appts, 4 for walkins
63 ; BSDR("ADT") = appointment date and time
64 ; BSDR("LEN") = appointment length in minutes (*1.42 limit removed)
65 ; BSDR("OI") = reason for appt - up to 150 characters
66 ; BSDR("USR") = user who made appt
67 ;
68 ;Output: error status and message
69 ; = 0 or null: everything okay
70 ; = 1^message: error and reason
71 ;
72 N BSDXMKCK S BSDXMKCK=$$MAKECK(.BSDR) ; Check if we can make appointment
73 I BSDXMKCK Q BSDXMKCK ; If we can't, quit with the reason why.
74 ;
75 ;Otherwise, we continue
76 ;
77 N BSDXFDA,BSDXIENS,BSDXMSG ; FILE/UPDATE^DIE variables
78 ;
79 I $D(^DPT(BSDR("PAT"),"S",BSDR("ADT"),0)),$P(^(0),U,2)["C" D
80 . ; "un-cancel" existing appt in file 2
81 . S BSDXIENS=BSDR("ADT")_","_BSDR("PAT")_","
82 . S BSDXFDA(2.98,BSDXIENS,".01")=BSDR("CLN")
83 . S BSDXFDA(2.98,BSDXIENS,"3")=""
84 . S BSDXFDA(2.98,BSDXIENS,"9")=BSDR("TYP")
85 . S BSDXFDA(2.98,BSDXIENS,"9.5")=9
86 . S BSDXFDA(2.98,BSDXIENS,"14")=""
87 . S BSDXFDA(2.98,BSDXIENS,"15")=""
88 . S BSDXFDA(2.98,BSDXIENS,"16")=""
89 . S BSDXFDA(2.98,BSDXIENS,"19")=""
90 . S BSDXFDA(2.98,BSDXIENS,"20")=$$NOW^XLFDT
91 . D FILE^DIE("","BSDXFDA","BSDXMSG")
92 Q:$D(BSDXMSG) 1_U_"Fileman edit to DPT error: Patient="_BSDR("PAT")_" Appt="_BSDR("ADT")_" Error="_BSDXMSG("DIERR",1,"TEXT",1)
93 ;
94 E D ; File new appointment/edit existing appointment in file 2
95 . S BSDXIENS="?+2,"_BSDR("PAT")_","
96 . S BSDXIENS(2)=BSDR("ADT")
97 . S BSDXFDA(2.98,BSDXIENS,.01)=BSDR("CLN")
98 . S BSDXFDA(2.98,BSDXIENS,"9")=BSDR("TYP")
99 . S BSDXFDA(2.98,BSDXIENS,"9.5")=9
100 . S BSDXFDA(2.98,BSDXIENS,"20")=$$NOW^XLFDT
101 . D UPDATE^DIE("","BSDXFDA","BSDXIENS","BSDXMSG")
102 Q:$D(BSDXMSG) 1_U_"FileMan add to DPT error: Patient="_BSDR("PAT")_" Appt="_BSDR("ADT")_" Error="_BSDXMSG("DIERR",1,"TEXT",1)
103 ;
104 ; add appt to file 44. This adds it to the FIRST subfile (Appointment)
105 N DIC,DA,Y,X,DD,DO,DLAYGO
106 I '$D(^SC(BSDR("CLN"),"S",0)) S ^SC(BSDR("CLN"),"S",0)="^44.001DA^^"
107 I '$D(^SC(BSDR("CLN"),"S",BSDR("ADT"),0)) D I Y<1 Q 1_U_"Error adding date to file 44: Clinic="_BSDR("CLN")_" Date="_BSDR("ADT")
108 . S DIC="^SC("_BSDR("CLN")_",""S"",",DA(1)=BSDR("CLN"),(X,DINUM)=BSDR("ADT")
109 . S DIC("P")="44.001DA",DIC(0)="L",DLAYGO=44.001
110 . S Y=1 I '$D(@(DIC_X_")")) D FILE^DICN
111 ;
112 ; add appt for file 44, second subfile (Appointment/Patient)
113 ; Sep 28 2010: Changed old style API to new style API. Keep for reference //smh
114 ;K DIC,DA,X,Y,DLAYGO,DD,DO,DINUM
115 ;S DIC="^SC("_BSDR("CLN")_",""S"","_BSDR("ADT")_",1,"
116 ;S DA(2)=BSDR("CLN"),DA(1)=BSDR("ADT"),X=BSDR("PAT")
117 ;S DIC("DR")="1///"_BSDR("LEN")_";3///"_$E($G(BSDR("OI")),1,150)_";7///`"_BSDR("USR")_";8///"_$P($$NOW^XLFDT,".")
118 ;S DIC("P")="44.003PA",DIC(0)="L",DLAYGO=44.003
119 ;D FILE^DICN
120 ;
121 N BSDXIENS S BSDXIENS="?+1,"_BSDR("ADT")_","_BSDR("CLN")_","
122 N BSDXFDA
123 S BSDXFDA(44.003,BSDXIENS,.01)=BSDR("PAT")
124 S BSDXFDA(44.003,BSDXIENS,1)=BSDR("LEN")
125 S BSDXFDA(44.003,BSDXIENS,3)=$E($G(BSDR("OI")),1,150)
126 S BSDXFDA(44.003,BSDXIENS,7)=BSDR("USR")
127 S BSDXFDA(44.003,BSDXIENS,8)=$P($$NOW^XLFDT,".")
128 N BSDXERR
129 D UPDATE^DIE("","BSDXFDA","","BSDXERR")
130 ;
131 I $D(BSDXERR) Q 1_U_"Error adding appt to file 44: Clinic="_BSDR("CLN")_" Date="_BSDR("ADT")_" Patient="_BSDR("PAT")_" Error: "_BSDXERR("DIERR",1,"TEXT",1)
132 ;
133 ; call event driver
134 NEW DFN,SDT,SDCL,SDDA,SDMODE
135 S DFN=BSDR("PAT"),SDT=BSDR("ADT"),SDCL=BSDR("CLN"),SDMODE=2
136 S SDDA=$$SCIEN(BSDR("PAT"),BSDR("CLN"),BSDR("ADT"))
137 D MAKE^SDAMEVT(DFN,SDT,SDCL,SDDA,SDMODE)
138 Q 0
139 ;
140MAKECK(BSDR) ; $$ - Is it okay to make an appointment? ; PEP
141 ; Input: Same as $$MAKE
142 ; Output: 1^error or 0 for success
143 ; NB: This subroutine saves no data. Only checks whether it's okay.
144 ;
145 I '$D(^DPT(+$G(BSDR("PAT")),0)) Q 1_U_"Patient not on file: "_$G(BSDR("PAT"))
146 I '$D(^SC(+$G(BSDR("CLN")),0)) Q 1_U_"Clinic not on file: "_$G(BSDR("CLN"))
147 I ($G(BSDR("TYP"))<3)!($G(BSDR("TYP"))>4) Q 1_U_"Appt Type error: "_$G(BSDR("TYP"))
148 I $G(BSDR("ADT")) S BSDR("ADT")=+$E(BSDR("ADT"),1,12) ;remove seconds
149 I $G(BSDR("ADT"))'?7N.1".".4N Q 1_U_"Appt Date/Time error: "_$G(BSDR("ADT"))
150 ;
151 ; Appt Length check removed in v 1.5
152 ;
153 I '$D(^VA(200,+$G(BSDR("USR")),0)) Q 1_U_"User Who Made Appt Error: "_$G(BSDR("USR"))
154 ; More verbose error message in v1.5
155 ; Following block to give an error message to user if there is already an appointment for patient. More verbose than others.
156 N BSDXERR ; place to store error message
157 I $D(^DPT(BSDR("PAT"),"S",BSDR("ADT"),0)),$P(^(0),U,2)'["C" DO QUIT BSDXERR ; If there's an appt in the "S" node of file 2 and it's not cancelled
158 . S BSDXERR=1_U_"Patient "_$P(^DPT(BSDR("PAT"),0),U)_" ("_BSDR("PAT")_") "
159 . S BSDXERR=BSDXERR_"already has appt at "_$$FMTE^XLFDT(BSDR("ADT"))
160 . N BSDXSCIEN S BSDXSCIEN=$P(^DPT(BSDR("PAT"),"S",BSDR("ADT"),0),U) ; Clinic IEN in ^SC (0 piece of 0 node of "S" multiple in file 2)
161 . N BSDXSCNAM S BSDXSCNAM=$P(^SC(BSDXSCIEN,0),U) ; PIMS Name of Clinic
162 . S BSDXERR=BSDXERR_$C(13,10)_"PIMS clinic: "_BSDXSCNAM ; tell the user of the PIMS clinic
163 . I $D(^BSDXRES("ALOC",BSDXSCIEN)) DO ; if the Clinic is linked to a BSDX Resource (we find out using the index ALOC in the BSDX RESOURCE file)
164 . . N BSDXRESIEN S BSDXRESIEN=$O(^BSDXRES("ALOC",BSDXSCIEN,""))
165 . . QUIT:'BSDXRESIEN ; Safeguard if index is corrupt
166 . . N BSDXRESNAM S BSDXRESNAM=$P(^BSDXRES(BSDXRESIEN,0),U)
167 . . S BSDXERR=BSDXERR_$C(13,10)_"Scheduling GUI clinic: "_BSDXRESNAM ; tell the user of the BSDX clinic
168 Q 0
169 ;
170UNMAKE(BSDR) ; Reverse Make - Private $$
171 ; Only used in Emergiencies where Fileman data filing fails.
172 ; If previous data exists, which caused an error, it's destroyed.
173 ; NB: ^DIK stops for nobody
174 ; Input: Same array as $$MAKE
175 ; Output: Always 0
176 NEW DIK,DA
177 S DIK="^DPT("_BSDR("PAT")_",""S"","
178 S DA(1)=BSDR("PAT"),DA=BSDX("ADT")
179 D ^DIK
180 ;
181 N IEN S IEN=$$SCIEN(BSDR("PAT"),BSDR("CLN"),BSDR("ADT"))
182 I 'IEN QUIT 0
183 ;
184 NEW DIK,DA
185 S DIK="^SC("_BSDR("CLN")_",""S"","_BSDR("ADT")_",1,"
186 S DA(2)=BSDR("CLN"),DA(1)=BSDR("ADT"),DA=IEN
187 D ^DIK
188 QUIT 0
189 ;
190CHECKIN1(DFN,CLIN,APDATE) ; Simplified PEP w/ parameters for $$CHECKIN - Checking in
191 ; Call like this for DFN 23435 checking in now at Hospital Location 33
192 ; for appt at Dec 20, 2009 @ 10:11:59
193 ; S RESULT=$$CHECKIN1^BSDXAPI(23435,33,3091220.221159)
194 S BSDR("PAT")=DFN ;DFN
195 S BSDR("CLN")=CLIN ;Hosp Loc IEN
196 S BSDR("ADT")=APDATE ;Appt Date
197 S BSDR("CDT")=$$NOW^XLFDT ;Check-in date defaults to now
198 S BSDR("USR")=DUZ ;Check-in user defaults to current
199 Q $$CHECKIN(.BSDR)
200 ;
201CHECKIN(BSDR) ;EP; call to add checkin info to appt; IHS/ITSC/LJF 12/23/2004 PATCH 1002
202 ;
203 ; Make call by using: S ERR=$$CHECKIN^BSDXAPI(.ARRAY)
204 ;
205 ; Input array -
206 ; BSDR("PAT") = ien of patient in file 2
207 ; BSDR("CLN") = ien of clinic in file 44
208 ; BSDR("ADT") = appt date/time
209 ; BSDR("CDT") = checkin date/time
210 ; BSDR("USR") = checkin user
211 ;
212 ; Output value -
213 ; = 0 means everything worked
214 ; = 1^message means error with reason message
215 ;
216 I '$D(^DPT(+$G(BSDR("PAT")),0)) Q 1_U_"Patient not on file: "_$G(BSDR("PAT"))
217 I '$D(^SC(+$G(BSDR("CLN")),0)) Q 1_U_"Clinic not on file: "_$G(BSDR("CLN"))
218 I $G(BSDR("ADT")) S BSDR("ADT")=+$E(BSDR("ADT"),1,12) ;remove seconds
219 I $G(BSDR("ADT"))'?7N.1".".4N Q 1_U_"Appt Date/Time error: "_$G(BSDR("ADT"))
220 I $G(BSDR("CDT")) S BSDR("CDT")=+$E(BSDR("CDT"),1,12) ;remove seconds
221 I $G(BSDR("CDT"))'?7N.1".".4N Q 1_U_"Checkin Date/Time error: "_$G(BSDR("CDT"))
222 I '$D(^VA(200,+$G(BSDR("USR")),0)) Q 1_U_"User Who Made Appt Error: "_$G(BSDR("USR"))
223 ;
224 ; find ien for appt in file 44
225 NEW IEN,DIE,DA,DR
226 S IEN=$$SCIEN(BSDR("PAT"),BSDR("CLN"),BSDR("ADT"))
227 I 'IEN Q 1_U_"Error trying to find appointment for checkin: Patient="_BSDR("PAT")_" Clinic="_BSDR("CLN")_" Appt="_BSDR("ADT")
228 ;
229 ; remember before status
230 NEW SDATA,DFN,SDT,SDCL,SDDA,SDCIHDL
231 S DFN=BSDR("PAT"),SDT=BSDR("ADT"),SDCL=BSDR("CLN"),SDMODE=2,SDDA=IEN
232 S SDCIHDL=$$HANDLE^SDAMEVT(1),SDATA=SDDA_U_DFN_U_SDT_U_SDCL
233 D BEFORE^SDAMEVT(.SDATA,DFN,SDT,SDCL,SDDA,SDCIHDL)
234 ;
235 ; set checkin
236 S DIE="^SC("_BSDR("CLN")_",""S"","_BSDR("ADT")_",1,"
237 S DA(2)=BSDR("CLN"),DA(1)=BSDR("ADT"),DA=IEN
238 S DR="309///"_BSDR("CDT")_";302///`"_BSDR("USR")_";305///"_$$NOW^XLFDT
239 D ^DIE
240 ;
241 ; set after status
242 S SDDA=$$SCIEN(BSDR("PAT"),BSDR("CLN"),BSDR("ADT"))
243 S SDCIHDL=$$HANDLE^SDAMEVT(1),SDATA=SDDA_U_DFN_U_SDT_U_SDCL
244 D AFTER^SDAMEVT(.SDATA,DFN,SDT,SDCL,SDDA,SDCIHDL)
245 ;
246 ; call event driver
247 D EVT^SDAMEVT(.SDATA,4,SDMODE,SDCIHDL)
248 Q 0
249 ;
250CANCEL1(DFN,CLIN,TYP,APDATE,REASON,INFO) ; PEP w/ parameters for $$CANCEL - cancelling appointment
251 ; Call like this for DFN 23435 cancelling an appointment at Hospital Location 33,
252 ; cancellation initiated by patient ("PC" rather than clinic "C"),
253 ; cancelling appt at Dec 20, 2009 @ 10:11:59 because of reason 1 in file 409.2 IEN (weather)
254 ; because foxes come out during bad weather.
255 ; S RESULT=$$CANCEL1^BSDXAPI(23435,33,"PC",3091220.221159,1,"Afraid of foxes")
256 S BSDR("PAT")=DFN
257 S BSDR("CLN")=CLIN
258 S BSDR("TYP")=TYP
259 S BSDR("ADT")=APDATE
260 S BSDR("CDT")=$$NOW^XLFDT
261 S BSDR("USR")=DUZ
262 S BSDR("CR")=REASON
263 S BSDR("NOT")=INFO
264 Q $$CANCEL(.BSDR)
265 ;
266CANCEL(BSDR) ;PEP; called to cancel appt
267 ;
268 ; Make call using: S ERR=$$CANCEL^BSDXAPI(.ARRAY)
269 ;
270 ; Input Array -
271 ; BSDR("PAT") = ien of patient in file 2
272 ; BSDR("CLN") = ien of clinic in file 44
273 ; BSDR("TYP") = C for canceled by clinic; PC for patient canceled
274 ; BSDR("ADT") = appointment date and time
275 ; BSDR("CDT") = cancel date and time
276 ; BSDR("USR") = user who canceled appt
277 ; BSDR("CR") = cancel reason - pointer to file 409.2
278 ; BSDR("NOT") = cancel remarks - optional notes to 160 characters
279 ;
280 ;Output: error status and message
281 ; = 0 or null: everything okay
282 ; = 1^message: error and reason
283 ;
284 I '$D(^DPT(+$G(BSDR("PAT")),0)) Q 1_U_"Patient not on file: "_$G(BSDR("PAT"))
285 I '$D(^SC(+$G(BSDR("CLN")),0)) Q 1_U_"Clinic not on file: "_$G(BSDR("CLN"))
286 I ($G(BSDR("TYP"))'="C"),($G(BSDR("TYP"))'="PC") Q 1_U_"Cancel Status error: "_$G(BSDR("TYP"))
287 I $G(BSDR("ADT")) S BSDR("ADT")=+$E(BSDR("ADT"),1,12) ;remove seconds
288 I $G(BSDR("ADT"))'?7N.1".".4N Q 1_U_"Appt Date/Time error: "_$G(BSDR("ADT"))
289 I $G(BSDR("CDT")) S BSDR("CDT")=+$E(BSDR("CDT"),1,12) ;remove seconds
290 I $G(BSDR("CDT"))'?7N.1".".4N Q 1_U_"Cancel Date/Time error: "_$G(BSDR("CDT"))
291 I '$D(^VA(200,+$G(BSDR("USR")),0)) Q 1_U_"User Who Canceled Appt Error: "_$G(BSDR("USR"))
292 I '$D(^SD(409.2,+$G(BSDR("CR")))) Q 1_U_"Cancel Reason error: "_$G(BSDR("CR"))
293 ;
294 NEW IEN,DIE,DA,DR
295 S IEN=$$SCIEN(BSDR("PAT"),BSDR("CLN"),BSDR("ADT"))
296 I 'IEN Q 1_U_"Error trying to find appointment for cancel: Patient="_BSDR("PAT")_" Clinic="_BSDR("CLN")_" Appt="_BSDR("ADT")
297 ;
298 ; BSDX 1.5 3110125
299 ; UJO/SMH - Add ability to remove check-in if the patient is checked in
300 ; I $$CI(BSDR("PAT"),BSDR("CLN"),BSDR("ADT"),IEN) Q 1_U_"Patient already checked in; cannot cancel until checkin deleted: Patient="_BSDR("PAT")_" Clinic="_BSDR("CLN")_" Appt="_BSDR("ADT")
301 ; Remove check-in if the patient is checked in.
302 N BSDXRESULT S BSDXRESULT=0 ; Result; should be zero if success; -1 + message if failure
303 I $$CI(BSDR("PAT"),BSDR("CLN"),BSDR("ADT"),IEN) SET BSDXRESULT=$$RMCI(BSDR("PAT"),BSDR("CLN"),BSDR("ADT"))
304 I BSDXRESULT Q BSDXRESULT
305 ;
306 ; remember before status
307 NEW SDATA,DFN,SDT,SDCL,SDDA,SDCPHDL
308 S DFN=BSDR("PAT"),SDT=BSDR("ADT"),SDCL=BSDR("CLN"),SDMODE=2,SDDA=IEN
309 S SDCPHDL=$$HANDLE^SDAMEVT(1),SDATA=SDDA_U_DFN_U_SDT_U_SDCL
310 D BEFORE^SDAMEVT(.SDATA,DFN,SDT,SDCL,SDDA,SDCPHDL)
311 ;
312 ; get user who made appt and date appt made from ^SC
313 ; because data in ^SC will be deleted
314 NEW USER,DATE
315 S USER=$P($G(^SC(SDCL,"S",SDT,1,IEN,0)),U,6)
316 S DATE=$P($G(^SC(SDCL,"S",SDT,1,IEN,0)),U,7)
317 ;
318 ; update file 2 info
319 NEW DIE,DA,DR
320 S DIE="^DPT("_DFN_",""S"",",DA(1)=DFN,DA=SDT
321 S DR="3///"_BSDR("TYP")_";14///`"_BSDR("USR")_";15///"_BSDR("CDT")_";16///`"_BSDR("CR")_";19///`"_USER_";20///"_DATE
322 S:$G(BSDR("NOT"))]"" DR=DR_";17///"_$E(BSDR("NOT"),1,160)
323 D ^DIE
324 ;
325 ; delete data in ^SC
326 NEW DIK,DA
327 S DIK="^SC("_BSDR("CLN")_",""S"","_BSDR("ADT")_",1,"
328 S DA(2)=BSDR("CLN"),DA(1)=BSDR("ADT"),DA=IEN
329 D ^DIK
330 ;
331 ; call event driver
332 D CANCEL^SDAMEVT(.SDATA,DFN,SDT,SDCL,SDDA,SDMODE,SDCPHDL)
333 Q 0
334 ;
335CI(PAT,CLINIC,DATE,SDIEN) ;PEP; -- returns 1 if appt already checked-in
336 NEW X
337 S X=$G(SDIEN) ;ien sent in call
338 I 'X S X=$$SCIEN(PAT,CLINIC,DATE) I 'X Q 0
339 S X=$P($G(^SC(CLINIC,"S",DATE,1,X,"C")),U)
340 Q $S(X:1,1:0)
341 ;
342RMCI(PAT,CLINIC,DATE) ;PEP; -- Remove Check-in; $$
343 ; PAT = DFN
344 ; CLINIC = SC IEN
345 ; DATE = FM Date/Time of Appointment
346 ;
347 ; Returns:
348 ; 0 if okay
349 ; -1 if failure
350 ;
351 ; Call like this: $$RMCI(233,33,3110102.1130)
352 ;
353 ; Move my variables into the ones used by SDAPIs (just a convenience)
354 NEW SDATA,DFN,SDT,SDCL,SDDA,SDCIHDL
355 S DFN=PAT,SDT=DATE,SDCL=CLINIC,SDMODE=2,SDDA=$$SCIEN(DFN,SDCL,SDT)
356 ;
357 I SDDA<1 QUIT 0 ; Appt cancelled; cancelled appts rm'ed from file 44
358 ;
359 ; remember before status
360 S SDCIHDL=$$HANDLE^SDAMEVT(1),SDATA=SDDA_U_DFN_U_SDT_U_SDCL
361 D BEFORE^SDAMEVT(.SDATA,DFN,SDT,SDCL,SDDA,SDCIHDL)
362 ;
363 ; remove check-in using filer.
364 N BSDXIENS S BSDXIENS=SDDA_","_DATE_","_CLINIC_","
365 S BSDXFDA(44.003,BSDXIENS,309)="@" ; CHECKED-IN
366 S BSDXFDA(44.003,BSDXIENS,302)="@" ; CHECK IN USER
367 S BSDXFDA(44.003,BSDXIENS,305)="@" ; CHECK IN ENTERED
368 N BSDXERR
369 D FILE^DIE("","BSDXFDA","BSDXERR")
370 I $D(BSDXERR) QUIT "-1~Can't file for Pat "_PAT_" in Clinic "_CLINIC_" at "_DATE_". Fileman reported an error: "_BSDXERR("DIERR",1,"TEXT",1)
371 ;
372 ; set after status
373 S SDDA=$$SCIEN(DFN,SDCL,SDT)
374 S SDCIHDL=$$HANDLE^SDAMEVT(1),SDATA=SDDA_U_DFN_U_SDT_U_SDCL
375 D AFTER^SDAMEVT(.SDATA,DFN,SDT,SDCL,SDDA,SDCIHDL)
376 ;
377 ; call event driver
378 D EVT^SDAMEVT(.SDATA,4,SDMODE,SDCIHDL)
379 QUIT 0
380 ;
381SCIEN(PAT,CLINIC,DATE) ;PEP; returns ien for appt in ^SC
382 NEW X,IEN
383 S X=0 F S X=$O(^SC(CLINIC,"S",DATE,1,X)) Q:'X Q:$G(IEN) D
384 . Q:$P($G(^SC(CLINIC,"S",DATE,1,X,0)),U,9)["C" ;cancelled
385 . I +$G(^SC(CLINIC,"S",DATE,1,X,0))=PAT S IEN=X
386 Q $G(IEN)
387 ;
388APPTYP(PAT,DATE) ;PEP; -- returns type of appt (scheduled or walk-in)
389 NEW X S X=$P($G(^DPT(PAT,"S",DATE,0)),U,7)
390 Q $S(X=3:"SCHED",X=4:"WALK-IN",1:"??")
391 ;
392CO(PAT,CLINIC,DATE,SDIEN) ;PEP; -- returns 1 if appt already checked-out
393 NEW X
394 S X=$G(SDIEN) ;ien sent in call
395 I 'X S X=$$SCIEN(PAT,CLINIC,DATE) I 'X Q 0
396 S X=$P($G(^SC(CLINIC,"S",DATE,1,X,"C")),U,3)
397 Q $S(X:1,1:0)
398 ;
399UPDATENT(PAT,CLINIC,DATE,NOTE) ; PEP; Update Note in ^SC for patient's appointment @ DATE
400 ; PAT = DFN
401 ; CLINIC = SC IEN
402 ; DATE = FM Date/Time of Appointment
403 ;
404 ; Returns:
405 ; 0 if okay
406 ; -1 if failure
407 N SCIEN S SCIEN=$$SCIEN(PAT,CLINIC,DATE) ; ien of appt in ^SC
408 I SCIEN<1 QUIT 0 ; Appt cancelled; cancelled appts rm'ed from file 44
409 N BSDXIENS S BSDXIENS=SCIEN_","_DATE_","_CLINIC_","
410 S BSDXFDA(44.003,BSDXIENS,3)=$E(NOTE,1,150)
411 N BSDXERR
412 D FILE^DIE("","BSDXFDA","BSDXERR")
413 I $D(BSDXERR) QUIT "-1~Can't file for Pat "_PAT_" in Clinic "_CLINIC_" at "_DATE_". Fileman reported an error: "_BSDXERR("DIERR",1,"TEXT",1)
414 QUIT 0
Note: See TracBrowser for help on using the repository browser.