Ignore:
Timestamp:
Jun 25, 2012, 8:54:59 PM (12 years ago)
Author:
Sam Habiel
Message:

refactored BSDX26; still working on BSDX08

File:
1 edited

Legend:

Unmodified
Added
Removed
  • Scheduling/trunk/m/BSDXAPI.m

    r1456 r1460  
    1 BSDXAPI ; IHS/ANMC/LJF & VW/SMH - SCHEDULING APIs ; 6/22/12 4:25pm
     1BSDXAPI ; IHS/ANMC/LJF & VW/SMH - SCHEDULING APIs ; 6/25/12 6:13pm
    22        ;;1.7T1;BSDX;;Aug 31, 2011;Build 18
    33        ; Licensed under LGPL 
     
    4444        ; for Baby foxes hallucinations.
    4545        ; S RESULT=$$MAKE1^BSDXAPI(23435,33,(3 or 4),3091220.221159,30,"I see Baby foxes")
     46        N BSDR
    4647        S BSDR("PAT")=DFN       ;DFN
    4748        S BSDR("CLN")=CLIN      ;Hosp Loc IEN
     
    108109        ;
    109110        ; add appt to file 44. This adds it to the FIRST subfile (Appointment)
    110         N DIC,DA,Y,X,DD,DO,DLAYGO
     111        N DIC,DA,Y,X,DD,DO,DLAYGO,DINUM
    111112        I '$D(^SC(BSDR("CLN"),"S",0)) S ^SC(BSDR("CLN"),"S",0)="^44.001DA^^"
    112113        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")
     
    202203        ; for appt at Dec 20, 2009 @ 10:11:59
    203204        ; S RESULT=$$CHECKIN1^BSDXAPI(23435,33,3091220.221159)
     205        N BSDR
    204206        S BSDR("PAT")=DFN          ;DFN
    205207        S BSDR("CLN")=CLIN         ;Hosp Loc IEN
     
    238240        ;
    239241        ; remember before status
    240         NEW SDATA,DFN,SDT,SDCL,SDDA,SDCIHDL
     242        NEW SDATA,DFN,SDT,SDCL,SDDA,SDCIHDL,SDMODE
    241243        S DFN=BSDR("PAT"),SDT=BSDR("ADT"),SDCL=BSDR("CLN"),SDMODE=2,SDDA=IEN
    242244        S SDCIHDL=$$HANDLE^SDAMEVT(1),SDATA=SDDA_U_DFN_U_SDT_U_SDCL
     
    264266        ; because foxes come out during bad weather.
    265267        ; S RESULT=$$CANCEL1^BSDXAPI(23435,33,"PC",3091220.221159,1,"Afraid of foxes")
     268        N BSDR
    266269        S BSDR("PAT")=DFN
    267270        S BSDR("CLN")=CLIN
     
    292295        ;   = 1^message:  error and reason
    293296        ;
     297        ; Okay to Cancel? Call Cancel Check.
    294298        N BSDXCANCK S BSDXCANCK=$$CANCELCK(.BSDR)
    295299        I BSDXCANCK Q BSDXCANCK
     
    297301        ; BSDX 1.5 3110125
    298302        ; UJO/SMH - Add ability to remove check-in if the patient is checked in
    299         ; 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")
    300         ; Remove check-in if the patient is checked in.
    301         N BSDXRESULT S BSDXRESULT=0 ; Result; should be zero if success; -1 + message if failure
    302         NEW IEN S IEN=$$SCIEN(BSDR("PAT"),BSDR("CLN"),BSDR("ADT"))
    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         ; NB: Failure point 1: we fail here nothing has happened yet
     303        ; VEN/SMH on 3120625/v1.7 - PIMS doesn't care if patient is already checked in
     304        ; Lets you remove appointment anyways! Not like RPMS.
     305        ; Plus... deleting checkin affects S node on 44, which is DELETED anyways!
    306306        ;
    307307        ; remember before status
    308         NEW SDATA,DFN,SDT,SDCL,SDDA,SDCPHDL
     308        NEW SDATA,DFN,SDT,SDCL,SDDA,SDCPHDL,SDMODE
    309309        S DFN=BSDR("PAT"),SDT=BSDR("ADT"),SDCL=BSDR("CLN"),SDMODE=2,SDDA=IEN
    310310        S SDCPHDL=$$HANDLE^SDAMEVT(1),SDATA=SDDA_U_DFN_U_SDT_U_SDCL
    311311        D BEFORE^SDAMEVT(.SDATA,DFN,SDT,SDCL,SDDA,SDCPHDL)
    312         ; NB: Here only globals are set. Nothing else.
     312        ; NB: Here only ^TMP globals are set with before values.
    313313        ;
    314314        ; get user who made appt and date appt made from ^SC
     
    318318        S DATE=$P($G(^SC(SDCL,"S",SDT,1,IEN,0)),U,7)
    319319        ;
    320         ; update file 2 info
    321         NEW DIE,DA,DR
    322         S DIE="^DPT("_DFN_",""S"",",DA(1)=DFN,DA=SDT
    323         S DR="3///"_BSDR("TYP")_";14///`"_BSDR("USR")_";15///"_BSDR("CDT")_";16///`"_BSDR("CR")_";19///`"_USER_";20///"_DATE
    324         S:$G(BSDR("NOT"))]"" DR=DR_";17///"_$E(BSDR("NOT"),1,160)
    325         D ^DIE
    326         ; Failure point 2: If we fail here, it means that the check-in was removed;
    327         ; but the appointment wasn't cancelled.
    328         ; To roll back, we should restore the check-in. However, I would rather not
    329         ; do that. This code will only fail if there's something wrong in the DB.
    330         ; (deleted field for example). If I try to restore the check-in, I just
    331         ; may excercerbate the problem.
    332         ;
    333         ; delete data in ^SC
     320        ; update file 2 info --old code
     321        ;NEW DIE,DA,DR
     322        ;S DIE="^DPT("_DFN_",""S"",",DA(1)=DFN,DA=SDT
     323        ;S DR="3///"_BSDR("TYP")_";14///`"_BSDR("USR")_";15///"_BSDR("CDT")_";16///`"_BSDR("CR")_";19///`"_USER_";20///"_DATE
     324        ;S:$G(BSDR("NOT"))]"" DR=DR_";17///"_$E(BSDR("NOT"),1,160)
     325        ;D ^DIE
     326        N BSDXIENS S BSDXIENS=SDT_","_DFN_","
     327        N BSDXFDA
     328        S BSDXFDA(2.98,BSDXIENS,3)=BSDR("TYP")
     329        S BSDXFDA(2.98,BSDXIENS,14)=BSDR("USR")
     330        S BSDXFDA(2.98,BSDXIENS,15)=BSDR("CDT")
     331        S BSDXFDA(2.98,BSDXIENS,16)=BSDR("CR")
     332        S BSDXFDA(2.98,BSDXIENS,19)=USER
     333        S BSDXFDA(2.98,BSDXIENS,20)=DATE
     334        S:$G(BSDR("NOT"))]"" BSDXFDA(2.98,BSDXIENS,17)=$E(BSDR("NOT"),1,160)
     335        N BSDXERR
     336        D FILE^DIE("","BSDXFDA","BSDXERR")
     337        I $D(BSDXERR) Q 1_U_"Cannot cancel appointment in File 2"
     338        ; Failure point 1: If we fail here, nothing has happened yet.
     339        ; No rollback needed in ^BSDXAPPT
     340        ;
     341        ; delete data in ^SC -- this does not (typically) fail. Fileman won't stop
    334342        NEW DIK,DA
    335343        S DIK="^SC("_BSDR("CLN")_",""S"","_BSDR("ADT")_",1,"
    336344        S DA(2)=BSDR("CLN"),DA(1)=BSDR("ADT"),DA=IEN
    337345        D ^DIK
    338         ; Failure point 3: If we fail here, we need to restore the cancel date,
    339         ; and possibly, the check-in.
    340         ;
    341         ; call event driver
     346        ; Failure point 2: not expected to happen here
     347        ;
     348        ; call event driver -- point of no return
    342349        D CANCEL^SDAMEVT(.SDATA,DFN,SDT,SDCL,SDDA,SDMODE,SDCPHDL)
    343350        Q 0
     
    378385        ;
    379386        ; Move my variables into the ones used by SDAPIs (just a convenience)
    380         NEW SDATA,DFN,SDT,SDCL,SDDA,SDCIHDL
     387        NEW SDATA,DFN,SDT,SDCL,SDDA,SDCIHDL,SDMODE
    381388        S DFN=PAT,SDT=DATE,SDCL=CLINIC,SDMODE=2,SDDA=$$SCIEN(DFN,SDCL,SDT)
    382389        ;
     
    389396        ; remove check-in using filer.
    390397        N BSDXIENS S BSDXIENS=SDDA_","_DATE_","_CLINIC_","
     398        N BSDXFDA
    391399        S BSDXFDA(44.003,BSDXIENS,309)="@" ; CHECKED-IN
    392400        S BSDXFDA(44.003,BSDXIENS,302)="@" ; CHECK IN USER
     
    397405        ;
    398406        ; set after status
    399         S SDDA=$$SCIEN(DFN,SDCL,SDT)
     407        ; S SDDA=$$SCIEN(DFN,SDCL,SDT) ;smh -why is this here? SDDA won't change.
    400408        S SDCIHDL=$$HANDLE^SDAMEVT(1),SDATA=SDDA_U_DFN_U_SDT_U_SDCL
    401409        D AFTER^SDAMEVT(.SDATA,DFN,SDT,SDCL,SDDA,SDCIHDL)
     
    437445        ; 0 if okay
    438446        ; -1 if failure
     447        ;
     448        ; ERROR SIMULATION
     449        I $G(BSDXSIMERR1) QUIT "-1~Simulated Error"
     450        ;
    439451        N SCIEN S SCIEN=$$SCIEN(PAT,CLINIC,DATE) ; ien of appt in ^SC
    440452        I SCIEN<1 QUIT 0    ; Appt cancelled; cancelled appts rm'ed from file 44
    441453        N BSDXIENS S BSDXIENS=SCIEN_","_DATE_","_CLINIC_","
    442         S BSDXFDA(44.003,BSDXIENS,3)=$E(NOTE,1,150)
     454        N BSDXFDA S BSDXFDA(44.003,BSDXIENS,3)=$E(NOTE,1,150)
    443455        N BSDXERR
    444456        D FILE^DIE("","BSDXFDA","BSDXERR")
Note: See TracChangeset for help on using the changeset viewer.