Changeset 1466 for Scheduling/trunk/m/BSDXAPI.m
- Timestamp:
- Jul 3, 2012, 7:45:46 PM (12 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
Scheduling/trunk/m/BSDXAPI.m
r1464 r1466 1 BSDXAPI ; IHS/ANMC/LJF & VW/SMH - SCHEDULING APIs ; 6/29/12 12:19pm1 BSDXAPI ; IHS/ANMC/LJF & VW/SMH - SCHEDULING APIs ; 7/3/12 12:30pm 2 2 ;;1.7T1;BSDX;;Aug 31, 2011;Build 18 3 3 ; Licensed under LGPL 4 4 ; 5 ; Orignal routine is BSDAPI by IHS/LJF, HMW, and MAW5 ; Orignal routine is BSDAPI by IHS/LJF, HMW, and MAW 6 6 ; 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 11 ; a patient cancelled appointment. 12 ; - Use new style Fileman API for storing appointments in file 44 in 13 ; $$MAKE due to problems with legacy API. 14 ; 2010-11-12: (1.42) 15 ; - Changed ="C" to ["C" in SCIEN. Cancelled appointments can be "PC" as 16 ; well. 17 ; 2010-12-5 (1.42) 18 ; Added an entry point to update the patient note in file 44. 19 ; 2010-12-6 (1.42) 20 ; MAKE1 incorrectly put info field in BSDR("INFO") rather than BSDR("OI") 21 ; 2010-12-8 (1.42) 22 ; Removed restriction on max appt length. Even though this restriction 23 ; exists in fileman (120 minutes), PIMS ignores it. Therefore, I 24 ; will ignore it here too. 25 ; 2011-01-25 (v.1.5) 26 ; Added entry point $$RMCI to remove checked in appointments. 27 ; In $$CANCEL, if the appointment is checked in, delete check-in rather than 28 ; spitting an error message to the user saying 'Delete the check-in' 29 ; Changed all lines that look like this: 30 ; I $G(BSDR("ADT"))'?7N1".".4N Q 1_U_"Appt Date/Time error: "_$G(BSDR("ADT")) 31 ; to: 32 ; I $G(BSDR("ADT"))'?7N.1".".4N Q 1_U_"Appt Date/Time error: "_$G(BSDR("ADT")) 33 ; to allow for date at midnight which does not have a dot at the end. 34 ; 2011-01-26 (v.1.5) 35 ; More user friendly message if patient already has appointment in $$MAKE: 36 ; Spits out pt name and user friendly date. 37 ; 2012-06-18 (v 1.7) 38 ; Removing transacions. Means that code SHOULD NOT fail. Took all checks 39 ; out for making an appointment to MAKECK. We call this first to make sure 40 ; that the appointment is okay to make before committing to make it. We 41 ; still have the provision to delete the data though if we fail when we 42 ; actually make the appointment. 43 ; CANCELCK exists for the same purpose. 7 ; Move to BSDX namespace as BSDXAPI from BSDAPI by WV/SMH 8 ; Change history is located in BSDXAPI1 (to save space). 44 9 ; 45 10 MAKE1(DFN,CLIN,TYP,DATE,LEN,INFO) ; Simplified PEP w/ parameters for $$MAKE - making appointment … … 230 195 ; = 1^message means error with reason message 231 196 ; 197 I $G(BSDXDIE2) N X S X=1/0 198 ; 199 N BSDXERR S BSDXERR=$$CHECKICK(.BSDR) 200 I BSDXERR Q BSDXERR 201 ; 202 ; find ien for appt in file 44 203 NEW IEN,DIE,DA,DR 204 S IEN=$$SCIEN(BSDR("PAT"),BSDR("CLN"),BSDR("ADT")) 205 ; 206 ; remember before status 207 ; Failure analysis: Only ^TMP global is set here. 208 NEW SDATA,DFN,SDT,SDCL,SDDA,SDCIHDL,SDMODE 209 S DFN=BSDR("PAT"),SDT=BSDR("ADT"),SDCL=BSDR("CLN"),SDMODE=2,SDDA=IEN 210 S SDCIHDL=$$HANDLE^SDAMEVT(1),SDATA=SDDA_U_DFN_U_SDT_U_SDCL 211 D BEFORE^SDAMEVT(.SDATA,DFN,SDT,SDCL,SDDA,SDCIHDL) 212 ; 213 ; set checkin; Old Code -- keep for ref VEN/SMH 3 Jul 2012 214 ; S DIE="^SC("_BSDR("CLN")_",""S"","_BSDR("ADT")_",1," 215 ; S DA(2)=BSDR("CLN"),DA(1)=BSDR("ADT"),DA=IEN 216 ; S DR="309///"_BSDR("CDT")_";302///`"_BSDR("USR")_";305///"_$$NOW^XLFDT 217 ; D ^DIE 218 ; 219 I $D(BSDXSIMERR3) Q 1_U_"Simulated Error" 220 ; 221 ; Failure analysis: If this fails, no other changes were made in this routine 222 N BSDXIENS S BSDXIENS=IEN_","_BSDR("ADT")_","_BSDR("CLN")_"," 223 N BSDXFDA 224 S BSDXFDA(44.003,BSDXIENS,309)=BSDR("CDT") 225 S BSDXFDA(44.003,BSDXIENS,302)=BSDR("USR") 226 S BSDXFDA(44.003,BSDXIENS,305)=$$NOW^XLFDT() 227 N BSDXERR 228 D UPDATE^DIE("","BSDXFDA","BSDXERR") 229 ; 230 I $D(BSDXERR) Q 1_U_"Error checking in appointment to file 44. Error: "_BSDXERR("DIERR",1,"TEXT",1) 231 ; 232 ; set after status 233 S SDDA=$$SCIEN(BSDR("PAT"),BSDR("CLN"),BSDR("ADT")) 234 S SDCIHDL=$$HANDLE^SDAMEVT(1),SDATA=SDDA_U_DFN_U_SDT_U_SDCL 235 D AFTER^SDAMEVT(.SDATA,DFN,SDT,SDCL,SDDA,SDCIHDL) 236 ; 237 ; Point of no Return 238 ; call event driver 239 D EVT^SDAMEVT(.SDATA,4,SDMODE,SDCIHDL) 240 Q 0 241 ; 242 CHECKIC1(DFN,CLIN,APDATE) ; Simplified PEP w/ parameters for $$CHECKICK - 243 ; Check-in Check 244 ; Call like this for DFN 23435 checking in now at Hospital Location 33 245 ; for appt at Dec 20, 2009 @ 10:11:59 246 ; S RESULT=$$CHECKIC1^BSDXAPI(23435,33,3091220.221159) 247 N BSDR 248 S BSDR("PAT")=DFN ;DFN 249 S BSDR("CLN")=CLIN ;Hosp Loc IEN 250 S BSDR("ADT")=APDATE ;Appt Date 251 S BSDR("CDT")=$$NOW^XLFDT ;Check-in date defaults to now 252 S BSDR("USR")=DUZ ;Check-in user defaults to current 253 Q $$CHECKICK(.BSDR) 254 ; 255 CHECKICK(BSDR) ; $$ PEP; - Is it okay to check-in patient? 256 ; Input: Same as $$CHECKIN 257 ; Output: 0 if okay or 1^message if error 258 ; 259 I $G(BSDXSIMERR2) Q 1_U_"Simulated Error" 260 ; 232 261 I '$D(^DPT(+$G(BSDR("PAT")),0)) Q 1_U_"Patient not on file: "_$G(BSDR("PAT")) 233 262 I '$D(^SC(+$G(BSDR("CLN")),0)) Q 1_U_"Clinic not on file: "_$G(BSDR("CLN")) … … 239 268 ; 240 269 ; find ien for appt in file 44 241 NEW IEN,DIE,DA,DR 242 S IEN=$$SCIEN(BSDR("PAT"),BSDR("CLN"),BSDR("ADT")) 270 N IEN S IEN=$$SCIEN(BSDR("PAT"),BSDR("CLN"),BSDR("ADT")) 243 271 I 'IEN Q 1_U_"Error trying to find appointment for checkin: Patient="_BSDR("PAT")_" Clinic="_BSDR("CLN")_" Appt="_BSDR("ADT") 244 ;245 ; remember before status246 NEW SDATA,DFN,SDT,SDCL,SDDA,SDCIHDL,SDMODE247 S DFN=BSDR("PAT"),SDT=BSDR("ADT"),SDCL=BSDR("CLN"),SDMODE=2,SDDA=IEN248 S SDCIHDL=$$HANDLE^SDAMEVT(1),SDATA=SDDA_U_DFN_U_SDT_U_SDCL249 D BEFORE^SDAMEVT(.SDATA,DFN,SDT,SDCL,SDDA,SDCIHDL)250 ;251 ; set checkin252 S DIE="^SC("_BSDR("CLN")_",""S"","_BSDR("ADT")_",1,"253 S DA(2)=BSDR("CLN"),DA(1)=BSDR("ADT"),DA=IEN254 S DR="309///"_BSDR("CDT")_";302///`"_BSDR("USR")_";305///"_$$NOW^XLFDT255 D ^DIE256 ;257 ; set after status258 S SDDA=$$SCIEN(BSDR("PAT"),BSDR("CLN"),BSDR("ADT"))259 S SDCIHDL=$$HANDLE^SDAMEVT(1),SDATA=SDDA_U_DFN_U_SDT_U_SDCL260 D AFTER^SDAMEVT(.SDATA,DFN,SDT,SDCL,SDDA,SDCIHDL)261 ;262 ; call event driver263 D EVT^SDAMEVT(.SDATA,4,SDMODE,SDCIHDL)264 272 Q 0 265 273 ; … … 378 386 Q $S(X:1,1:0) 379 387 ; 380 RMCI(PAT,CLINIC,DATE) ;PEP; -- Remove Check-in; $$381 ; PAT = DFN382 ; CLINIC = SC IEN383 ; DATE = FM Date/Time of Appointment384 ;385 ; Returns:386 ; 0 if okay387 ; -1 if failure388 ;389 ; Call like this: $$RMCI(233,33,3110102.1130)390 ;391 ; Move my variables into the ones used by SDAPIs (just a convenience)392 NEW SDATA,DFN,SDT,SDCL,SDDA,SDCIHDL,SDMODE393 S DFN=PAT,SDT=DATE,SDCL=CLINIC,SDMODE=2,SDDA=$$SCIEN(DFN,SDCL,SDT)394 ;395 I SDDA<1 QUIT 0 ; Appt cancelled; cancelled appts rm'ed from file 44396 ;397 ; remember before status398 S SDCIHDL=$$HANDLE^SDAMEVT(1),SDATA=SDDA_U_DFN_U_SDT_U_SDCL399 D BEFORE^SDAMEVT(.SDATA,DFN,SDT,SDCL,SDDA,SDCIHDL)400 ;401 ; remove check-in using filer.402 N BSDXIENS S BSDXIENS=SDDA_","_DATE_","_CLINIC_","403 N BSDXFDA404 S BSDXFDA(44.003,BSDXIENS,309)="@" ; CHECKED-IN405 S BSDXFDA(44.003,BSDXIENS,302)="@" ; CHECK IN USER406 S BSDXFDA(44.003,BSDXIENS,305)="@" ; CHECK IN ENTERED407 N BSDXERR408 D FILE^DIE("","BSDXFDA","BSDXERR")409 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)410 ;411 ; set after status412 ; S SDDA=$$SCIEN(DFN,SDCL,SDT) ;smh -why is this here? SDDA won't change.413 S SDCIHDL=$$HANDLE^SDAMEVT(1),SDATA=SDDA_U_DFN_U_SDT_U_SDCL414 D AFTER^SDAMEVT(.SDATA,DFN,SDT,SDCL,SDDA,SDCIHDL)415 ;416 ; call event driver417 D EVT^SDAMEVT(.SDATA,4,SDMODE,SDCIHDL)418 QUIT 0419 ;420 388 SCIEN(PAT,CLINIC,DATE) ;PEP; returns ien for appt in ^SC 421 389 NEW X,IEN
Note:
See TracChangeset
for help on using the changeset viewer.