Ignore:
Timestamp:
Jul 3, 2012, 7:45:46 PM (12 years ago)
Author:
Sam Habiel
Message:

Refactoring BSDX25 continued...

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:19pm
     1BSDXAPI ; IHS/ANMC/LJF & VW/SMH - SCHEDULING APIs ; 7/3/12 12:30pm
    22        ;;1.7T1;BSDX;;Aug 31, 2011;Build 18
    33        ; Licensed under LGPL 
    44        ;
    5         ;Orignal routine is BSDAPI by IHS/LJF, HMW, and MAW
     5        ; Orignal routine is BSDAPI by IHS/LJF, HMW, and MAW
    66        ; 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).
    449        ;
    4510MAKE1(DFN,CLIN,TYP,DATE,LEN,INFO)       ; Simplified PEP w/ parameters for $$MAKE - making appointment
     
    230195        ;              = 1^message means error with reason message
    231196        ;
     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        ;
     242CHECKIC1(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        ;
     255CHECKICK(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        ;
    232261        I '$D(^DPT(+$G(BSDR("PAT")),0)) Q 1_U_"Patient not on file: "_$G(BSDR("PAT"))
    233262        I '$D(^SC(+$G(BSDR("CLN")),0)) Q 1_U_"Clinic not on file: "_$G(BSDR("CLN"))
     
    239268        ;
    240269        ; 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"))
    243271        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 status
    246         NEW SDATA,DFN,SDT,SDCL,SDDA,SDCIHDL,SDMODE
    247         S DFN=BSDR("PAT"),SDT=BSDR("ADT"),SDCL=BSDR("CLN"),SDMODE=2,SDDA=IEN
    248         S SDCIHDL=$$HANDLE^SDAMEVT(1),SDATA=SDDA_U_DFN_U_SDT_U_SDCL
    249         D BEFORE^SDAMEVT(.SDATA,DFN,SDT,SDCL,SDDA,SDCIHDL)
    250         ;
    251         ; set checkin
    252         S DIE="^SC("_BSDR("CLN")_",""S"","_BSDR("ADT")_",1,"
    253         S DA(2)=BSDR("CLN"),DA(1)=BSDR("ADT"),DA=IEN
    254         S DR="309///"_BSDR("CDT")_";302///`"_BSDR("USR")_";305///"_$$NOW^XLFDT
    255         D ^DIE
    256         ;
    257         ; set after status
    258         S SDDA=$$SCIEN(BSDR("PAT"),BSDR("CLN"),BSDR("ADT"))
    259         S SDCIHDL=$$HANDLE^SDAMEVT(1),SDATA=SDDA_U_DFN_U_SDT_U_SDCL
    260         D AFTER^SDAMEVT(.SDATA,DFN,SDT,SDCL,SDDA,SDCIHDL)
    261         ;
    262         ; call event driver
    263         D EVT^SDAMEVT(.SDATA,4,SDMODE,SDCIHDL)
    264272        Q 0
    265273        ;
     
    378386        Q $S(X:1,1:0)
    379387        ;
    380 RMCI(PAT,CLINIC,DATE)    ;PEP; -- Remove Check-in; $$
    381         ; PAT = DFN
    382         ; CLINIC = SC IEN
    383         ; DATE = FM Date/Time of Appointment
    384         ;
    385         ; Returns:
    386         ; 0 if okay
    387         ; -1 if failure
    388         ;
    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,SDMODE
    393         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 44
    396         ;
    397         ; remember before status
    398         S SDCIHDL=$$HANDLE^SDAMEVT(1),SDATA=SDDA_U_DFN_U_SDT_U_SDCL
    399         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 BSDXFDA
    404         S BSDXFDA(44.003,BSDXIENS,309)="@" ; CHECKED-IN
    405         S BSDXFDA(44.003,BSDXIENS,302)="@" ; CHECK IN USER
    406         S BSDXFDA(44.003,BSDXIENS,305)="@" ; CHECK IN ENTERED
    407         N BSDXERR
    408         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 status
    412         ; 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_SDCL
    414         D AFTER^SDAMEVT(.SDATA,DFN,SDT,SDCL,SDDA,SDCIHDL)
    415         ;
    416         ; call event driver
    417         D EVT^SDAMEVT(.SDATA,4,SDMODE,SDCIHDL)
    418         QUIT 0
    419         ;
    420388SCIEN(PAT,CLINIC,DATE)  ;PEP; returns ien for appt in ^SC
    421389        NEW X,IEN
Note: See TracChangeset for help on using the changeset viewer.