| 1 | SDAPIAP ;ALB/MJK - Outpatient API/Appointments ; 22 FEB 1994 11:30 am
 | 
|---|
| 2 |  ;;5.3;Scheduling;**27,132**;08/13/93
 | 
|---|
| 3 |  ;
 | 
|---|
| 4 | EN(DFN,SDT,SDCL,SDUZ,SDMODE,SDVIEN) ; -- check api for appts
 | 
|---|
| 5 |  N SDDA,SDOE
 | 
|---|
| 6 |  S SDOE=0
 | 
|---|
| 7 |  ; -- verify that check-out can occur
 | 
|---|
| 8 |  D CHECK(DFN,SDT,SDCL,.SDDA) I $$ERRCHK^SDAPIER() G ENQ
 | 
|---|
| 9 |  ;
 | 
|---|
| 10 |  ; -- file check-out data ; get encount ien
 | 
|---|
| 11 |  S SDOE=$$FILE(DFN,SDT,SDCL,SDUZ,SDDA,SDMODE,$G(SDVIEN))
 | 
|---|
| 12 |  ;
 | 
|---|
| 13 | ENQ Q SDOE
 | 
|---|
| 14 |  ;
 | 
|---|
| 15 | CHECK(DFN,SDT,SDCL,SDDA) ; -- check if event can occur/allowed
 | 
|---|
| 16 |  N SDATA,STATUS
 | 
|---|
| 17 |  ; -- error if appt node doesn't exist
 | 
|---|
| 18 |  S SDATA=$G(^DPT(DFN,"S",SDT,0))
 | 
|---|
| 19 |  I SDATA="" D ERRFILE^SDAPIER(100,SDT_U_DFN) G CHECKQ
 | 
|---|
| 20 |  ;
 | 
|---|
| 21 |  ; -- error if different clinic
 | 
|---|
| 22 |  I +SDATA'=SDCL D ERRFILE^SDAPIER(101,+SDATA_U_SDCL) G CHECKQ
 | 
|---|
| 23 |  ;
 | 
|---|
| 24 |  ; -- error if no slot for appt
 | 
|---|
| 25 |  S SDDA=$$FIND^SDAM2(DFN,SDT,SDCL) I 'SDDA D ERRFILE^SDAPIER(102,SDT_U_SDCL) G CHECKQ
 | 
|---|
| 26 |  ;
 | 
|---|
| 27 |  ; -- get appt status data 
 | 
|---|
| 28 |  S STATUS=$$STATUS^SDAM1(DFN,SDT,SDCL,SDATA,SDDA)
 | 
|---|
| 29 |  ;
 | 
|---|
| 30 |  ; -- error if current status won't allow checking-out
 | 
|---|
| 31 |  I '$D(^SD(409.63,"ACO",1,+STATUS)) D ERRFILE^SDAPIER(103,$P(STATUS,";",2)) G CHECKQ
 | 
|---|
| 32 |  ;
 | 
|---|
| 33 |  ; -- warning if already checked-out
 | 
|---|
| 34 |  I $P(STATUS,";",2)="CHECKED OUT" D ERRFILE^SDAPIER(1100)
 | 
|---|
| 35 |  ;
 | 
|---|
| 36 |  ; -- error if appt date if after today
 | 
|---|
| 37 |  I SDT>(DT+.2359) D ERRFILE^SDAPIER(104,SDT) G CHECKQ
 | 
|---|
| 38 | CHECKQ Q
 | 
|---|
| 39 |  ;
 | 
|---|
| 40 | FILE(DFN,SDT,SDCL,SDUZ,SDDA,SDMODE,SDVIEN) ; -- file data
 | 
|---|
| 41 |  N SDATA,SDHDL,SDOE,SDCOMPF,SDLOG
 | 
|---|
| 42 |  S SDOE=""
 | 
|---|
| 43 |  ;
 | 
|---|
| 44 |  ; -- setup event driver data
 | 
|---|
| 45 |  D BEFORE^SDCO1(.SDATA,DFN,SDT,SDCL,SDDA,.SDHDL)
 | 
|---|
| 46 |  ;
 | 
|---|
| 47 |  ; -- set elig for appt
 | 
|---|
| 48 |  D ELIG^SDCO1(DFN,SDT,SDCL,SDDA) ; may need to expand
 | 
|---|
| 49 |  ;
 | 
|---|
| 50 |  ; -- get encounter ien ; error if none returned
 | 
|---|
| 51 |  S SDOE=$$GETAPT^SDVSIT2(DFN,SDT,SDCL,$G(SDVIEN))
 | 
|---|
| 52 |  I 'SDOE D ERRFILE^SDAPIER(110) G FILEQ
 | 
|---|
| 53 |  ;
 | 
|---|
| 54 |  ; -- time stamp check-out and log data
 | 
|---|
| 55 |  D DT(DFN,SDT,SDCL,SDDA,$G(@SDROOT@("DATE/TIME")))
 | 
|---|
| 56 |  D LOGDATA(SDOE)
 | 
|---|
| 57 |  ;
 | 
|---|
| 58 |  ; -- process data
 | 
|---|
| 59 |  D FILE^SDAPICO(SDOE,SDUZ)
 | 
|---|
| 60 |  ;
 | 
|---|
| 61 |  ; -- update check-out completion
 | 
|---|
| 62 |  D EN^SDCOM(SDOE,SDMODE,SDHDL,.SDCOMPF)
 | 
|---|
| 63 |  ;
 | 
|---|
| 64 |  ; -- set visit change flag for event driver
 | 
|---|
| 65 |  D CHANGE^SDAMEVT4(.SDHDL,$P($G(^SCE(SDOE,0)),U,8),$G(@SDROOT@("VISIT CHANGE FLAGS")))
 | 
|---|
| 66 |  ;
 | 
|---|
| 67 |  ; -- get after values and invoke event driver
 | 
|---|
| 68 |  D AFTER^SDAMEVT(.SDATA,DFN,SDT,SDCL,SDDA,SDHDL)
 | 
|---|
| 69 |  D EVT^SDAMEVT(.SDATA,5,SDMODE,SDHDL)
 | 
|---|
| 70 |  ;
 | 
|---|
| 71 |  ; -- cleanup event driver vars
 | 
|---|
| 72 |  D CLEAN^SDAMEVT(SDHDL)
 | 
|---|
| 73 |  ;
 | 
|---|
| 74 | FILEQ Q SDOE
 | 
|---|
| 75 |  ;
 | 
|---|
| 76 | DT(DFN,SDT,SDCL,SDDA,SDCODT) ; -- time stamp check out date
 | 
|---|
| 77 |  ; -- NOTE: this code duplicates at DT^SDCO1 but silent
 | 
|---|
| 78 |  N %DT,DR,SDCIDT,X,DIE,DA
 | 
|---|
| 79 |  S:'$D(^SC(SDCL,"S",0)) ^(0)="^44.001DA^^"
 | 
|---|
| 80 |  S X=$G(^SC(SDCL,"S",SDT,1,SDDA,"C")),SDCIDT=+X
 | 
|---|
| 81 |  ;IF $P(X,U,3) G DTQ
 | 
|---|
| 82 |  S DR="" IF $G(SDCODT) S DR="303R////"_$S(SDCODT<SDCIDT:SDCIDT,1:SDCODT)
 | 
|---|
| 83 |  IF DR]"" D DIE^SDCO1(SDCL,SDT,SDDA,DR)
 | 
|---|
| 84 | DTQ Q
 | 
|---|
| 85 |  ;
 | 
|---|
| 86 | LOGDATA(SDOE,SDLOG) ; -- log user, date/time and other data
 | 
|---|
| 87 |  N DIE,DA,DR,Y,X
 | 
|---|
| 88 |  S SDLOG("USER")=$S(+$G(SDUZ):+SDUZ,1:$G(DUZ)) ; -- editing user
 | 
|---|
| 89 |  S SDLOG("DATE/TIME")=$$NOW^XLFDT()            ; -- last edited 
 | 
|---|
| 90 |  S DIE="^SCE(",DA=SDOE,DR="[SD ENCOUNTER LOG]" D ^DIE
 | 
|---|
| 91 |  Q
 | 
|---|
| 92 |  ;
 | 
|---|