source: Scheduling/trunk/m/BSDX25.m@ 1328

Last change on this file since 1328 was 1187, checked in by Sam Habiel, 14 years ago

Changes to BSDX01 to prevent Scheduled,dc'ed,completed radiology appointments from being cancelled. Updated files to T2.

File size: 8.3 KB
RevLine 
[1161]1BSDX25 ; VW/UJO/SMH - WINDOWS SCHEDULING RPCS ; 4/28/11 10:24am
[1187]2 ;;1.6T2;BSDX;;May 16, 2011
[1161]3 ; Licensed under LGPL
[614]4 ;
[1114]5 ; Change Log:
6 ; 3110106: SMH -> Changed Check-in EP - Removed unused paramters. Will change C#
[614]7 ;
[1114]8 ;
[1116]9UT ; Unit Tests
10 ; Make appointment, checkin, then uncheckin
[1114]11 N ZZZ
12 N APPTTIME S APPTTIME=$E($$NOW^XLFDT(),1,12)
13 D APPADD^BSDX07(.ZZZ,APPTTIME,APPTTIME+.0001,3,"Dr Office",30,"Sam's Note",1)
14 N APPTID S APPTID=+^BSDXTMP($J,1)
15 N HL S HL=$$GET1^DIQ(9002018.4,APPTID,".07:.04","I")
16 D CHECKIN^BSDX25(.ZZZ,APPTID,$$NOW^XLFDT())
17 IF '$P(^BSDXAPPT(APPTID,0),U,3) WRITE "ERROR IN CHECKIN 1",!
18 IF '+$G(^SC(HL,"S",APPTTIME,1,1,"C")) WRITE "ERROR IN CHECKIN 2",!
19 D RMCI^BSDX25(.ZZZ,APPTID)
20 IF $P(^BSDXAPPT(APPTID,0),U,3) WRITE "ERROR IN UNCHECKIN 1",!
21 IF $G(^SC(HL,"S",APPTTIME,1,1,"C")) WRITE "ERROR IN UNCHECKIN 2",!
22 D RMCI^BSDX25(.ZZZ,APPTID) ; again, test sanity in repeat
23 IF $P(^BSDXAPPT(APPTID,0),U,3) WRITE "ERROR IN UNCHECKIN 1",!
24 IF $G(^SC(HL,"S",APPTTIME,1,1,"C")) WRITE "ERROR IN UNCHECKIN 2",!
25 ; now test various error conditions
26 ; Test Error 1
27 D RMCI^BSDX25(.ZZZ,)
28 IF +^BSDXTMP($J,1)'=-1 WRITE "ERROR IN ETest 1",!
29 ; Test Error 2
30 D RMCI^BSDX25(.ZZZ,234987234398)
31 IF +^BSDXTMP($J,1)'=-2 WRITE "ERROR IN Etest 2",!
32 ; Tests for 3 to 5 difficult to produce
33 ; Error tests follow: Mumps error test; Transaction restartability
34 N bsdxdie S bsdxdie=1
35 D RMCI^BSDX25(.ZZZ,APPTID)
36 IF +^BSDXTMP($J,1)'=-20 WRITE "ERROR IN Etest 3",!
37 K bsdxdie
38 N bsdxrestart S bsdxrestart=1
39 D RMCI^BSDX25(.ZZZ,APPTID)
40 IF +^BSDXTMP($J,1)'=0 WRITE "Error in Etest 4",!
41 QUIT
[614]42CHECKIND(BSDXY,BSDXAPTID,BSDXCDT,BSDXCC,BSDXPRV,BSDXROU,BSDXVCL,BSDXVFM,BSDXOG) ;EP
43 ;Entry point for debugging
44 ;
45 ;I +$G(^BSDXDBUG("BREAK","CHECKIN")),+$G(^BSDXDBUG("BREAK"))=DUZ D DEBUG^%Serenji("CHECKIN^BSDX25(.BSDXY,BSDXAPTID,BSDXCDT,BSDXCC,BSDXPRV,BSDXROU,BSDXVCL,BSDXVFM,BSDXOG)",$P(^BSDXDBUG("BREAK"),U,2))
46 Q
47 ;
[1085]48CHECKIN(BSDXY,BSDXAPTID,BSDXCDT) ; ,BSDXCC,BSDXPRV,BSDXROU,BSDXVCL,BSDXVFM,BSDXOG) ;EP Check in appointment
[1064]49 ; Private to GUI; use BSDXAPI for general API to checkin patients
[1114]50 ; Parameters:
51 ; BSDXY: Global Out
52 ; BSDXAPTID: Appointment ID in ^BSDXAPPT
53 ; BSDXCDT: Checkin Date --> Changed
54 ; BSDXCC: Clinic Stop IEN (not used)
55 ; BSDXPRV: Provider IEN (not used)
56 ; BSDXROU: Print Routing Slip? (not used)
57 ; BSDXVCL: PCC+ Clinic IEN (not used)
58 ; BSDXVFM: PCC+ Form IEN (not used)
59 ; BSDXOG: PCC+ Outguide (true or false)
60 ;
61 ; Output:
62 ; ADO.net table with 1 column ErrorID, 1 row result
63 ; - 0 if all okay
64 ; - Another number or text if not
[1113]65
[614]66 N BSDXNOD,BSDXPATID,BSDXSTART,DIK,DA,BSDXID,BSDXI,BSDXZ,BSDXIENS,BSDXVEN
67 N BSDXNOEV
68 S BSDXNOEV=1 ;Don't execute protocol
69 ;
70 D ^XBKVAR S X="ERROR^BSDX25",@^%ZOSF("TRAP")
71 S BSDXI=0
72 K ^BSDXTMP($J)
73 S BSDXY="^BSDXTMP("_$J_")"
74 S ^BSDXTMP($J,0)="T00020ERRORID"_$C(30)
75 I '+BSDXAPTID D ERR("BSDX25: Invalid Appointment ID") Q
76 I '$D(^BSDXAPPT(BSDXAPTID,0)) D ERR("BSDX08: Invalid Appointment ID") Q
[1064]77 ; Remove Date formatting v.1.5. Client will send date as FM Date.
78 ;S:BSDXCDT["@0000" BSDXCDT=$P(BSDXCDT,"@")
79 ;S %DT="T",X=BSDXCDT D ^%DT S BSDXCDT=Y
[1085]80 S BSDXCDT=+BSDXCDT ; Strip off zeros if C# sends them
[614]81 I BSDXCDT=-1 D ERR(70) Q
82 I BSDXCDT>$$NOW^XLFDT S BSDXCDT=$$NOW^XLFDT
83 ;Checkin BSDX APPOINTMENT entry
84 D BSDXCHK(BSDXAPTID,BSDXCDT)
85 S BSDXNOD=^BSDXAPPT(BSDXAPTID,0)
86 S BSDXPATID=$P(BSDXNOD,U,5)
87 S BSDXSTART=$P(BSDXNOD,U)
88 ;
89 S BSDXSC1=$P(BSDXNOD,U,7) ;RESOURCEID
90 I BSDXSC1]"",$D(^BSDXRES(BSDXSC1,0)) D I +$G(BSDXZ) D ERR($P(BSDXZ,U,2)) Q
91 . S BSDXNOD=^BSDXRES(BSDXSC1,0)
92 . S BSDXSC1=$P(BSDXNOD,U,4) ;HOSPITAL LOCATION
93 . I BSDXSC1]"",$D(^SC(BSDXSC1,0)) D APCHK(.BSDXZ,BSDXSC1,BSDXPATID,BSDXCDT,BSDXSTART)
94 ;
95 S BSDXI=BSDXI+1
96 S ^BSDXTMP($J,BSDXI)="0"_$C(30)
97 S BSDXI=BSDXI+1
98 S ^BSDXTMP($J,BSDXI)=$C(31)
99 Q
100 ;
101BSDXCHK(BSDXAPTID,BSDXCDT) ;
102 ;
103 S BSDXIENS=BSDXAPTID_","
104 S BSDXFDA(9002018.4,BSDXIENS,.03)=BSDXCDT
105 D FILE^DIE("","BSDXFDA","BSDXMSG")
106 Q
107 ;
108APCHK(BSDXZ,BSDXSC1,BSDXDFN,BSDXCDT,BSDXSTART) ;
109 ;Checkin appointment for patient BSDXDFN in clinic BSDXSC1
110 ;at time BSDXSTART
111 S BSDXZ=$$CHECKIN1^BSDXAPI(BSDXDFN,BSDXSC1,BSDXSTART)
112 Q
113 ;
[1116]114RMCI(BSDXY,BSDXAPPTID) ; EP - Remove Check-in from BSDX APPT and 2/44
[1113]115 ; Called by RPC [Fill in later]
116 ;
117 ; Parameters to pass:
118 ; APPTID: IEN in file BSDX APPOINTMENT
119 ;
120 ; Return in global array:
121 ; Record set with Column ERRORID; value of 0 AOK; other value
122 ; --> means that something went wrong
[1114]123 ;
124 ; Error Reference:
125 ; -1~Invalid Appointment ID (not passed)
126 ; -2~Invalid Appointment ID (Doesn't exist in ^BSDXAPPT)
127 ; -3~DB has corruption. Call Tech Support. (Resource ID doesn't exist in BSDXAPPT)
128 ; -4~DB has corruption. Call Tech Support. (Resource ID in BSDXAPPT doesnt exist in BSDXRES)
129 ; -5~BSDXAPI Error. Message depends on error.
130 ; -20~Mumps Error
131 ;
[1113]132 N BSDXNOEV S BSDXNOEV=1 ;Don't execute protocol
133 ;
134 N $ET S $ET="G ERROR^BSDX25" ; Error Trap
135 ;
136 ; Set return variable and kill contents
[1115]137 S BSDXY=$NAME(^BSDXTMP($J))
[1113]138 K @BSDXY
139 ;
140 N BSDXI S BSDXI=0 ; Initialize Counter
141 ;
142 S ^BSDXTMP($J,BSDXI)="T00020ERRORID"_$C(30) ; Header of ADO recordset
143 ;
[1114]144 TSTART (BSDXI):SERIAL ; Perform Autolocking
[1113]145 ;
[1114]146 ;;;test
147 I $g(bsdxdie) S X=8/0
148 ;;;
149 I $g(bsdxrestart) k bsdxrestart TRESTART
150 ;;;test
151 ;
[1113]152 ; Check for Appointment ID (passed and exists in file)
[1114]153 I '+$G(BSDXAPPTID) D ERR("-1~Invalid Appointment ID") QUIT
154 I '$D(^BSDXAPPT(BSDXAPPTID,0)) D ERR("-2~Invalid Appointment ID") QUIT
[1113]155 ;
156 ; Remove checkin from BSDX APPOINTMENT entry
[1114]157 D BSDXCHK(BSDXAPPTID,"@")
[1113]158 ;
159 ; Now, remove checkin from PIMS files 2/44
[1114]160 N BSDXNOD S BSDXNOD=^BSDXAPPT(BSDXAPPTID,0)
[1113]161 N BSDXPATID S BSDXPATID=$P(BSDXNOD,U,5) ; DFN
162 N BSDXSTART S BSDXSTART=$P(BSDXNOD,U) ; Start Date
163 N BSDXSC1 S BSDXSC1=$P(BSDXNOD,U,7) ; Resource ID
164 ;
165 ; If the resource doesn't exist, error out. DB is corrupt.
[1114]166 I 'BSDXSC1 D ERR("-3~DB has corruption. Call Tech Support.") QUIT
167 I '$D(^BSDXRES(BSDXSC1,0)) D ERR("-4~DB has corruption. Call Tech Support.") QUIT
[1113]168 ;
169 N BSDXNOD S BSDXNOD=^BSDXRES(BSDXSC1,0) ; Resource 0 node
170 S BSDXSC1=$P(BSDXNOD,U,4) ;HOSPITAL LOCATION
171 ;
172 N BSDXZ ; Scratch variable to hold error message
[1114]173 I BSDXSC1]"",$D(^SC(BSDXSC1,0)) S BSDXZ=$$RMCI^BSDXAPI(BSDXPATID,BSDXSC1,BSDXSTART)
174 I +$G(BSDXZ) D ERR("-5~"_$P(BSDXZ,U,2)) QUIT
[1113]175 ;
176 TCOMMIT ; Save Data into Globals
177 ;
178 ; Return ADO recordset
179 S BSDXI=BSDXI+1
180 S ^BSDXTMP($J,BSDXI)="0"_$C(30)
181 S BSDXI=BSDXI+1
182 S ^BSDXTMP($J,BSDXI)=$C(31)
183 Q
184 ;
[614]185CHKEVT(BSDXPAT,BSDXSTART,BSDXSC) ;EP Called by BSDX CHECKIN APPOINTMENT event
186 ;when appointments CHECKIN via PIMS interface.
187 ;Propagates CHECKIN to BSDXAPPT and raises refresh event to running GUI clients
188 ;
189 Q:+$G(BSDXNOEV)
190 Q:'+$G(BSDXSC)
191 N BSDXSTAT,BSDXFOUND,BSDXRES
192 S BSDXSTAT=""
193 S:$G(SDATA("AFTER","STATUS"))["CHECKED IN" BSDXSTAT=$P(SDATA("AFTER","STATUS"),"^",4)
194 S BSDXFOUND=0
195 I $D(^BSDXRES("ALOC",BSDXSC)) S BSDXRES=$O(^BSDXRES("ALOC",BSDXSC,0)) S BSDXFOUND=$$CHKEVT1(BSDXRES,BSDXSTART,BSDXPAT,BSDXSTAT)
196 I BSDXFOUND D CHKEVT3(BSDXRES) Q
197 I $D(^BXDXRES("ASSOC",BSDXSC)) S BSDXRES=$O(^BSDXRES("ASSOC",BSDXSC,0)) S BSDXFOUND=$$CHKEVT1(BSDXRES,BSDXSTART,BSDXPAT,BSDXSTAT)
198 I BSDXFOUND D CHKEVT3(BSDXRES)
199 Q
200 ;
201CHKEVT1(BSDXRES,BSDXSTART,BSDXPAT,BSDXSTAT) ;
202 ;Get appointment id in BSDXAPT
203 ;If found, call BSDXNOS(BSDXAPPT) and return 1
204 ;else return 0
205 N BSDXFOUND,BSDXAPPT
206 S BSDXFOUND=0
207 Q:'+$G(BSDXRES) BSDXFOUND
208 Q:'$D(^BSDXAPPT("ARSRC",BSDXRES,BSDXSTART)) BSDXFOUND
209 S BSDXAPPT=0 F S BSDXAPPT=$O(^BSDXAPPT("ARSRC",BSDXRES,BSDXSTART,BSDXAPPT)) Q:'+BSDXAPPT D Q:BSDXFOUND
210 . S BSDXNOD=$G(^BSDXAPPT(BSDXAPPT,0)) Q:BSDXNOD=""
211 . I $P(BSDXNOD,U,5)=BSDXPAT,$P(BSDXNOD,U,12)="" S BSDXFOUND=1 Q
212 I BSDXFOUND,+$G(BSDXAPPT) D BSDXCHK(BSDXAPPT,BSDXSTAT)
213 Q BSDXFOUND
214 ;
215CHKEVT3(BSDXRES) ;
216 ;Call RaiseEvent to notify GUI clients
217 ;
218 N BSDXRESN
219 S BSDXRESN=$G(^BSDXRES(BSDXRES,0))
220 Q:BSDXRESN=""
221 S BSDXRESN=$P(BSDXRESN,"^")
222 D EVENT^BMXMEVN("BSDX SCHEDULE",BSDXRESN)
223 Q
224 ;
225ERROR ;
[1114]226 S $ETRAP="D ^%ZTER HALT" ; Emergency Error Trap for the wise
[1116]227 ; Rollback, otherwise ^XTER will be empty from future rollback
228 I $TL>0 TROLLBACK
229 D ^%ZTER
230 S $EC="" ; Clear Error
231 ; Log error message and send to client
[1113]232 D ERR("-20~Mumps Error")
[614]233 Q
234 ;
[1113]235ERR(BSDXERR) ;Error processing
236 I $TLEVEL>0 TROLLBACK
[1114]237 S BSDXERR=$G(BSDXERR)
238 S BSDXERR=$P(BSDXERR,"~")_"~"_$TEXT(+0)_":"_$P(BSDXERR,"~",2) ; Append Routine Name
239 S BSDXI=$G(BSDXI)+1
[614]240 S ^BSDXTMP($J,BSDXI)=BSDXERR_$C(30)
241 S BSDXI=BSDXI+1
242 S ^BSDXTMP($J,BSDXI)=$C(31)
[1113]243 QUIT
Note: See TracBrowser for help on using the repository browser.