Home   Package List   Routine Alphabetical List   Global Alphabetical List   FileMan Files List   FileMan Sub-Files List   Package Component Lists   Package-Namespace Mapping  
Routine: SDEC07C

SDEC07C.m

Go to the documentation of this file.
  1. SDEC07C ;ALB/WTC/ZEB,KML,LAB - VISTA SCHEDULING RPCS ;JAN 12,2023
  1. ;;5.3;Scheduling;**686,694,816,820,837**;Aug 13, 1993;Build 4
  1. ;;Per VHA Directive 6402, this routine should not be modified
  1. ;
  1. ; Reference to $$LOCK1^ORX2 is supported by IA #867
  1. ; Reference to UNKL1^ORX2 is supported by IA #867
  1. Q
  1. ;
  1. ADDEVT(DFN,SDECSTART,SDECSC,SDCLA) ;EP
  1. ;Called by SDEC ADD APPOINTMENT protocol
  1. ;SDECSC=IEN of clinic in ^SC
  1. ;SDCLA=IEN for ^SC(SDECSC,"S",SDECSTART,1,SDCLA). Use to get Length & Note
  1. ;
  1. N SDECNOD,SDECLEN,SDECAPPTID,SDECNODP,SDECWKIN,SDECRES
  1. Q:+$G(SDECNOEV)
  1. I $D(^SDEC(409.831,"ALOC",SDECSC)) S SDECRES=$O(^SDEC(409.831,"ALOC",SDECSC,0))
  1. Q:'+$G(SDECRES)
  1. S SDECNOD=$G(^SC(SDECSC,"S",SDECSTART,1,SDCLA,0))
  1. Q:SDECNOD=""
  1. S SDECNODP=$G(^DPT(DFN,"S",SDECSTART,0))
  1. S SDECWKIN=""
  1. S:$P(SDECNODP,U,7)=4 SDECWKIN="WALKIN" ;Purpose of Visit field of DPT Appointment subfile
  1. S SDECLEN=$P(SDECNOD,U,2)
  1. Q:'+SDECLEN
  1. S SDECEND=$$FMADD^XLFDT(SDECSTART,0,0,SDECLEN,0)
  1. S SDECAPPTID=$$SDECADD^SDEC07(SDECSTART,SDECEND,DFN,SDECRES,SDECWKIN,,,,,SDECSC,,,,,,1,+SDECLEN) ;alb/sat 665 add SDECLEN
  1. Q:'+SDECAPPTID
  1. S SDECNOTE=$P(SDECNOD,U,4)
  1. I SDECNOTE]"" D SDECWP^SDEC07(SDECAPPTID,SDECNOTE)
  1. D ADDEVT3(SDECRES)
  1. Q
  1. ;
  1. ADDEVT3(SDECRES) ;
  1. ;Call RaiseEvent to notify GUI clients
  1. Q
  1. ;
  1. ;moved AVUPDT, DOW and DAY from SDEC07 because of XINDEX error for size pwc / SD*5.3*694
  1. ;
  1. AVUPDT(SDCL,SDECSTART,SDECLEN) ;Update Clinic availability
  1. ;SEE SDM1
  1. N %,ABORT,SDNOT,Y,DFN,SDVAL
  1. N SL,STARTDAY,X,SC,SB,HSI,SI,STR,SDDIF,SDMAX,SDDATE,SDDMAX,SDSDATE,CCXN,MXOK,COV,SDPROG
  1. N X1,SDEDT,X2,SD,SM,SS,S,SDLOCK,ST,I,SDECINC,SDPLUS
  1. S Y=SDCL ;,DFN=DFN ;renamed SDECPATID to DFN
  1. S SL=$G(^SC(+Y,"SL")),X=$P(SL,U,3),STARTDAY=$S($L(X):X,1:8),SC=Y,SB=STARTDAY-1/100,X=$P(SL,U,6),HSI=$S(X=1:X,X:X,1:4),SI=$S(X="":4,X<3:4,X:X,1:4),STR="#@!$* XXWVUTSRQPONMLKJIHGFEDCBA0123456789jklmnopqrstuvwxyz",SDDIF=$S(HSI<3:8/HSI,1:2) K Y
  1. ;Determine maximum days for scheduling
  1. S SDMAX(1)=$P($G(^SC(+SC,"SDP")),U,2) S:'SDMAX(1) SDMAX(1)=365
  1. S (SDMAX,SDDMAX)=$$FMADD^XLFDT(DT,SDMAX(1))
  1. S SDDATE=SDECSTART
  1. S SDSDATE=SDDATE,SDDATE=SDDATE\1
  1. 1 ;
  1. S CCXN=0 K MXOK,COV,SDPROT Q:$G(DFN)<0 S SC=+SC
  1. S X1=DT,SDEDT=365 S:$D(^SC(SC,"SDP")) SDEDT=$P(^SC(SC,"SDP"),"^",2)
  1. S X2=SDEDT D C^%DTC S SDEDT=X
  1. S Y=SDECSTART
  1. EN1 S (X,SD)=Y,SM=0 D DOW
  1. S I '$D(^SC(SC,"ST",$P(SD,"."),1)) S SS=+$O(^SC(+SC,"T"_Y,SD)) Q:SS'>0 Q:^(SS,1)="" S ^SC(+SC,"ST",$P(SD,"."),1)=$E($P($T(DAY),U,Y+2),1,2)_" "_$E(SD,6,7)_$J("",SI+SI-6)_^(1),^(0)=$P(SD,".")
  1. S S=SDECLEN
  1. ;Check if SDECLEN evenly divisible by appointment length
  1. S SDVAL=$P(SL,U)
  1. I SDECLEN<SDVAL S SDECLEN=SDVAL
  1. I SDECLEN#SDVAL'=0 D
  1. . S SDECINC=SDECLEN\SDVAL
  1. . S SDECINC=SDECINC+1
  1. . S SDECLEN=SDVAL*SDECINC
  1. S SL=S_U_$P(SL,U,2,99)
  1. SC S SDLOCK=$S('$D(SDLOCK):1,1:SDLOCK+1) Q:SDLOCK>9
  1. L +^SC(SC,"ST",$P(SD,"."),1):5 G:'$T SC
  1. S SDLOCK=0,S=^SC(SC,"ST",$P(SD,"."),1)
  1. S I=SD#1-SB*100,ST=I#1*SI\.6+($P(I,".")*SI),SS=SL*HSI/60*SDDIF+ST+ST
  1. I (I<1!'$F(S,"["))&(S'["CAN") L -^SC(SC,"ST",$P(SD,"."),1) Q
  1. I SM<7 S %=$F(S,"[",SS-1) S:'%!($P(SL,"^",6)<3) %=999 I $F(S,"]",SS)'<%!(SDDIF=2&$E(S,ST+ST+1,SS-1)["[") S SM=7
  1. ;
  1. SP I ST+ST>$L(S),$L(S)<80 S S=S_" " G SP
  1. S SDNOT=1
  1. S ABORT=0
  1. F I=ST+ST:SDDIF:SS-SDDIF D Q:ABORT
  1. . S ST=$E(S,I+1) S:ST="" ST=" "
  1. . S Y=$E(STR,$F(STR,ST)-2)
  1. . I S["CAN"!(ST="X"&($D(^SC(+SC,"ST",$P(SD,"."),"CAN")))) S ABORT=1 Q
  1. . I Y="" S ABORT=1 Q
  1. . S:Y'?1NL&(SM<6) SM=6 S ST=$E(S,I+2,999) S:ST="" ST=" " S S=$E(S,1,I)_Y_ST
  1. S ^SC(SC,"ST",$P(SD,"."),1)=S
  1. L -^SC(SC,"ST",$P(SD,"."),1)
  1. Q
  1. ;
  1. DOW N SDTMP S SDTMP=$E(X,1,3),Y=$E(X,4,5),Y=Y>2&'(SDTMP#4)+$E("144025036146",Y)
  1. F SDTMP=SDTMP:-1:281 S Y=SDTMP#4=1+1+Y
  1. S Y=$E(X,6,7)+Y#7
  1. Q
  1. ;
  1. DAY ;;^SUN^MON^TUES^WEDNES^THURS^FRI^SATUR
  1. ;
  1. Q
  1. ORDERLOCKCHECK(REQUESTYPE,APPTREQIEN,SDECI,DFN) ;
  1. ; sd*5.3*816 if RTC order cannot be locked then do not create appointment
  1. ; send back error message to client
  1. ;INPUT -
  1. ;REQUESTYPE - TYPE OF APPT REQUEST (e.g., APPT, RTC, VETERAN)
  1. ;APPTREQIEN - IEN of 409.85
  1. ;SDECI - Line counter for error array - passed in by reference
  1. ;DFN - ien of PATIENT file (#2)
  1. ; return ERROR = 0 or 1
  1. N ORDERID,ERROR,USER,LOCKFLG
  1. S LOCKFLG=0
  1. S ORDERID=$G(ORDERID)
  1. S ERROR=0
  1. I REQUESTYPE="RTC" D
  1. . S ORDERID=$$GET1^DIQ(409.85,APPTREQIEN,46,"I")
  1. . Q:'+ORDERID
  1. . I $D(^XTMP("ORLK-"_ORDERID)) D
  1. . . S LOCKFLG=1
  1. . . S USER=$$GET1^DIQ(200,$P($G(^XTMP("ORLK-"_ORDERID,1)),"^"),.01)
  1. . . D ERR^SDEC07(SDECI+1,"RTC Order is being edited by "_USER_". Please try again later.",DFN,1) S ERROR=1
  1. . I LOCKFLG'=1 D
  1. . . S LOCKFLG=$$LOCK1^ORX2(ORDERID)
  1. . . I +LOCKFLG D
  1. . . . D UNLK1^ORX2(ORDERID)
  1. . . I '(+LOCKFLG) D
  1. . . . D ERR^SDEC07(SDECI+1,"RTC Order is locked by another user. Please try again later.",DFN,1) S ERROR=1
  1. . . . S ERROR=1
  1. Q ERROR