EMERGENCY Released SD*5.3*744 SEQ #601 Extracted from mail message **KIDS**:SD*5.3*744^ **INSTALL NAME** SD*5.3*744 "BLD",11718,0) SD*5.3*744^SCHEDULING^0^3200226^y "BLD",11718,1,0) ^^14^14^3200226^^ "BLD",11718,1,1,0) This patch is to correct a problem after patch SD*5.3*722 was released "BLD",11718,1,2,0) and overlayed previous code released in patch SD*5.3*717 for two routines "BLD",11718,1,3,0) (SDEC07B and SDEC08 only). "BLD",11718,1,4,0) "BLD",11718,1,5,0) This patch corrects the problem of appointment processing in VistA "BLD",11718,1,6,0) Scheduling (VS) Graphical User Interface (GUI) not invoking the event "BLD",11718,1,7,0) driver protocol (SDAM APPOINTMENT EVENTS) that roll and scroll VistA "BLD",11718,1,8,0) does. This protocol allows other apps to tie functionality, including "BLD",11718,1,9,0) interfaces to external systems such as Pyxis, Omnicell, and Emergency "BLD",11718,1,10,0) Department Information System (EDIS), to appointment events. Actions "BLD",11718,1,11,0) currently being executed for appointment events in legacy VistA will also "BLD",11718,1,12,0) be executed for appointments when those events. "BLD",11718,1,13,0) "BLD",11718,1,14,0) Only the make appointment and cancel appointment have been affected. "BLD",11718,4,0) ^9.64PA^^ "BLD",11718,6.3) 3 "BLD",11718,"ABPKG") n "BLD",11718,"KRN",0) ^9.67PA^1.5^25 "BLD",11718,"KRN",.4,0) .4 "BLD",11718,"KRN",.401,0) .401 "BLD",11718,"KRN",.402,0) .402 "BLD",11718,"KRN",.403,0) .403 "BLD",11718,"KRN",.5,0) .5 "BLD",11718,"KRN",.84,0) .84 "BLD",11718,"KRN",1.5,0) 1.5 "BLD",11718,"KRN",1.6,0) 1.6 "BLD",11718,"KRN",1.61,0) 1.61 "BLD",11718,"KRN",1.62,0) 1.62 "BLD",11718,"KRN",3.6,0) 3.6 "BLD",11718,"KRN",3.8,0) 3.8 "BLD",11718,"KRN",9.2,0) 9.2 "BLD",11718,"KRN",9.8,0) 9.8 "BLD",11718,"KRN",9.8,"NM",0) ^9.68A^2^2 "BLD",11718,"KRN",9.8,"NM",1,0) SDEC07B^^0^B61359550 "BLD",11718,"KRN",9.8,"NM",2,0) SDEC08^^0^B224217895 "BLD",11718,"KRN",9.8,"NM","B","SDEC07B",1) "BLD",11718,"KRN",9.8,"NM","B","SDEC08",2) "BLD",11718,"KRN",19,0) 19 "BLD",11718,"KRN",19.1,0) 19.1 "BLD",11718,"KRN",101,0) 101 "BLD",11718,"KRN",409.61,0) 409.61 "BLD",11718,"KRN",771,0) 771 "BLD",11718,"KRN",779.2,0) 779.2 "BLD",11718,"KRN",870,0) 870 "BLD",11718,"KRN",8989.51,0) 8989.51 "BLD",11718,"KRN",8989.52,0) 8989.52 "BLD",11718,"KRN",8993,0) 8993 "BLD",11718,"KRN",8994,0) 8994 "BLD",11718,"KRN","B",.4,.4) "BLD",11718,"KRN","B",.401,.401) "BLD",11718,"KRN","B",.402,.402) "BLD",11718,"KRN","B",.403,.403) "BLD",11718,"KRN","B",.5,.5) "BLD",11718,"KRN","B",.84,.84) "BLD",11718,"KRN","B",1.5,1.5) "BLD",11718,"KRN","B",1.6,1.6) "BLD",11718,"KRN","B",1.61,1.61) "BLD",11718,"KRN","B",1.62,1.62) "BLD",11718,"KRN","B",3.6,3.6) "BLD",11718,"KRN","B",3.8,3.8) "BLD",11718,"KRN","B",9.2,9.2) "BLD",11718,"KRN","B",9.8,9.8) "BLD",11718,"KRN","B",19,19) "BLD",11718,"KRN","B",19.1,19.1) "BLD",11718,"KRN","B",101,101) "BLD",11718,"KRN","B",409.61,409.61) "BLD",11718,"KRN","B",771,771) "BLD",11718,"KRN","B",779.2,779.2) "BLD",11718,"KRN","B",870,870) "BLD",11718,"KRN","B",8989.51,8989.51) "BLD",11718,"KRN","B",8989.52,8989.52) "BLD",11718,"KRN","B",8993,8993) "BLD",11718,"KRN","B",8994,8994) "BLD",11718,"QDEF") ^^^^NO^^^^NO^^NO "BLD",11718,"QUES",0) ^9.62^^ "BLD",11718,"REQB",0) ^9.611^1^1 "BLD",11718,"REQB",1,0) SD*5.3*740^1 "BLD",11718,"REQB","B","SD*5.3*740",1) "MBREQ") 0 "PKG",16,-1) 1^1 "PKG",16,0) SCHEDULING^SD^APPOINTMENTS,PROFILES,LETTERS,AMIS REPORTS "PKG",16,22,0) ^9.49I^1^1 "PKG",16,22,1,0) 5.3^2930813 "PKG",16,22,1,"PAH",1,0) 744^3200226 "PKG",16,22,1,"PAH",1,1,0) ^^14^14^3200226 "PKG",16,22,1,"PAH",1,1,1,0) This patch is to correct a problem after patch SD*5.3*722 was released "PKG",16,22,1,"PAH",1,1,2,0) and overlayed previous code released in patch SD*5.3*717 for two routines "PKG",16,22,1,"PAH",1,1,3,0) (SDEC07B and SDEC08 only). "PKG",16,22,1,"PAH",1,1,4,0) "PKG",16,22,1,"PAH",1,1,5,0) This patch corrects the problem of appointment processing in VistA "PKG",16,22,1,"PAH",1,1,6,0) Scheduling (VS) Graphical User Interface (GUI) not invoking the event "PKG",16,22,1,"PAH",1,1,7,0) driver protocol (SDAM APPOINTMENT EVENTS) that roll and scroll VistA "PKG",16,22,1,"PAH",1,1,8,0) does. This protocol allows other apps to tie functionality, including "PKG",16,22,1,"PAH",1,1,9,0) interfaces to external systems such as Pyxis, Omnicell, and Emergency "PKG",16,22,1,"PAH",1,1,10,0) Department Information System (EDIS), to appointment events. Actions "PKG",16,22,1,"PAH",1,1,11,0) currently being executed for appointment events in legacy VistA will also "PKG",16,22,1,"PAH",1,1,12,0) be executed for appointments when those events. "PKG",16,22,1,"PAH",1,1,13,0) "PKG",16,22,1,"PAH",1,1,14,0) Only the make appointment and cancel appointment have been affected. "QUES","XPF1",0) Y "QUES","XPF1","??") ^D REP^XPDH "QUES","XPF1","A") Shall I write over your |FLAG| File "QUES","XPF1","B") YES "QUES","XPF1","M") D XPF1^XPDIQ "QUES","XPF2",0) Y "QUES","XPF2","??") ^D DTA^XPDH "QUES","XPF2","A") Want my data |FLAG| yours "QUES","XPF2","B") YES "QUES","XPF2","M") D XPF2^XPDIQ "QUES","XPI1",0) YO "QUES","XPI1","??") ^D INHIBIT^XPDH "QUES","XPI1","A") Want KIDS to INHIBIT LOGONs during the install "QUES","XPI1","B") NO "QUES","XPI1","M") D XPI1^XPDIQ "QUES","XPM1",0) PO^VA(200,:EM "QUES","XPM1","??") ^D MG^XPDH "QUES","XPM1","A") Enter the Coordinator for Mail Group '|FLAG|' "QUES","XPM1","B") "QUES","XPM1","M") D XPM1^XPDIQ "QUES","XPO1",0) Y "QUES","XPO1","??") ^D MENU^XPDH "QUES","XPO1","A") Want KIDS to Rebuild Menu Trees Upon Completion of Install "QUES","XPO1","B") NO "QUES","XPO1","M") D XPO1^XPDIQ "QUES","XPZ1",0) Y "QUES","XPZ1","??") ^D OPT^XPDH "QUES","XPZ1","A") Want to DISABLE Scheduled Options, Menu Options, and Protocols "QUES","XPZ1","B") NO "QUES","XPZ1","M") D XPZ1^XPDIQ "QUES","XPZ2",0) Y "QUES","XPZ2","??") ^D RTN^XPDH "QUES","XPZ2","A") Want to MOVE routines to other CPUs "QUES","XPZ2","B") NO "QUES","XPZ2","M") D XPZ2^XPDIQ "RTN") 2 "RTN","SDEC07B") 0^1^B61359550^B60597834 "RTN","SDEC07B",1,0) SDEC07B ;ALB/SAT - VISTA SCHEDULING RPCS ;MAY 15, 2017 "RTN","SDEC07B",2,0) ;;5.3;Scheduling;**627,658,665,669,722,744**;Aug 13, 1993;Build 3 "RTN","SDEC07B",3,0) ; "RTN","SDEC07B",4,0) Q "RTN","SDEC07B",5,0) ; "RTN","SDEC07B",6,0) MAKE(BSDR) ;PEP; call to store appt made "RTN","SDEC07B",7,0) ; "RTN","SDEC07B",8,0) ; Make call using: S ERR=$$MAKE^SDEC07B(.ARRAY) "RTN","SDEC07B",9,0) ; "RTN","SDEC07B",10,0) ; Input Array - "RTN","SDEC07B",11,0) ; BSDR("PAT") = ien of patient in file 2 "RTN","SDEC07B",12,0) ; BSDR("CLN") = ien of clinic in file 44 "RTN","SDEC07B",13,0) ; BSDR("TYP") = C&P if appointment type is C&P, 3 for scheduled appts, 4 for walkins "RTN","SDEC07B",14,0) ; BSDR("COL") = collateral if appointment type is COLLATERAL OF VET. "RTN","SDEC07B",15,0) ; BSDR("APT") = Appointment type pointer to APPOINTMENT TYPE file 409.1 "RTN","SDEC07B",16,0) ; BSDR("ADT") = appointment date and time "RTN","SDEC07B",17,0) ; BSDR("LEN") = appointment length in minutes (5-120) "RTN","SDEC07B",18,0) ; BSDR("OI") = reason for appt - up to 150 characters "RTN","SDEC07B",19,0) ; BSDR("USR") = user who made appt "RTN","SDEC07B",20,0) ; BSDR("RES") = resource pointer to SDEC RESOURCE ^SDEC(409.831, "RTN","SDEC07B",21,0) ; BSDR("MTR") = MTRC flag (multiple appointments) 0=False (default) 1=True "RTN","SDEC07B",22,0) ; BSDR("DDT") = Desired Date of Appt in fm format "RTN","SDEC07B",23,0) ; BSDR("REQ") = Requested By - valid values are 1=PROVIDER 2=PATIENT or "" "RTN","SDEC07B",24,0) ; BSDR("LAB") = LAB date/time in fm format "RTN","SDEC07B",25,0) ; BSDR("EKG") = EKG date/time in fm format "RTN","SDEC07B",26,0) ; BSDR("XRA") = XRAY date/time in fm format "RTN","SDEC07B",27,0) ; BSDR("CON") = Consult link - pointer to file 123 "RTN","SDEC07B",28,0) ; BSDR("OVB") = overbook flag - 1=yes, this is an overbook "RTN","SDEC07B",29,0) ; BSDR("ELG") = Patient Eligibilty "RTN","SDEC07B",30,0) ; "RTN","SDEC07B",31,0) ;Output: error status and message "RTN","SDEC07B",32,0) ; = 0 or null: everything okay "RTN","SDEC07B",33,0) ; = 1^message: error and reason "RTN","SDEC07B",34,0) ; "RTN","SDEC07B",35,0) I '$D(^DPT(+$G(BSDR("PAT")),0)) Q 1_U_"Patient not on file: "_$G(BSDR("PAT")) "RTN","SDEC07B",36,0) I '$D(^SC(+$G(BSDR("CLN")),0)) Q 1_U_"Clinic not on file: "_$G(BSDR("CLN")) "RTN","SDEC07B",37,0) I "1234"'[$G(BSDR("TYP")) Q 1_U_"Appt Type error: "_$G(BSDR("TYP")) "RTN","SDEC07B",38,0) I $G(BSDR("ADT")) S BSDR("ADT")=+$E(BSDR("ADT"),1,12) ;remove seconds "RTN","SDEC07B",39,0) I $G(BSDR("ADT"))'?7N1".".4N Q 1_U_"Appt Date/Time error: "_$G(BSDR("ADT")) "RTN","SDEC07B",40,0) ; "RTN","SDEC07B",41,0) I ($G(BSDR("LEN"))<5)!($G(BSDR("LEN"))>240) Q 1_U_"Appt Length error: "_$G(BSDR("LEN")) "RTN","SDEC07B",42,0) I '$D(^VA(200,+$G(BSDR("USR")),0)) Q 1_U_"User Who Made Appt Error: "_$G(BSDR("USR")) "RTN","SDEC07B",43,0) I $D(^DPT(BSDR("PAT"),"S",BSDR("ADT"),0)),$P(^DPT(BSDR("PAT"),"S",BSDR("ADT"),0),U,2)'="C",$P(^DPT(BSDR("PAT"),"S",BSDR("ADT"),0),U,2)'="PC" Q 1_U_"Patient "_$$GET1^DIQ(2,BSDR("PAT")_",",.01)_" already has appt at "_$$FMTE^XLFDT(BSDR("ADT")) "RTN","SDEC07B",44,0) ; "RTN","SDEC07B",45,0) N DIC,DA,Y,X,DD,DO,DLAYGO "RTN","SDEC07B",46,0) N SDECERR "RTN","SDEC07B",47,0) N SDFU,SDNA,SDRET,SDSRT "RTN","SDEC07B",48,0) ; "RTN","SDEC07B",49,0) S BSDR("APT")=+$G(BSDR("APT")) "RTN","SDEC07B",50,0) S BSDR("COL")=+$G(BSDR("COL")) "RTN","SDEC07B",51,0) ;get scheduling request type AND next ava. appt. indicator "RTN","SDEC07B",52,0) S SDSRT=$$SDSRT(BSDR("TYP"),BSDR("MTR"),BSDR("DDT"),BSDR("REQ")) "RTN","SDEC07B",53,0) ; next ava.appt. indicator field 26 "RTN","SDEC07B",54,0) S SDNA=$P(SDSRT,U,2) "RTN","SDEC07B",55,0) ; scheduling request type field 25 "RTN","SDEC07B",56,0) S SDSRT=$P(SDSRT,U,1) "RTN","SDEC07B",57,0) ;determine if Follow-up visit field 28 "RTN","SDEC07B",58,0) S SDRET="" "RTN","SDEC07B",59,0) D PCSTGET^SDEC(.SDRET,BSDR("PAT"),BSDR("CLN")) "RTN","SDEC07B",60,0) S SDFU=$P($P(@SDRET@(1),U,2),$C(30,31),1) "RTN","SDEC07B",61,0) S SDFU=$S(SDFU="YES":1,1:0) "RTN","SDEC07B",62,0) K @SDRET "RTN","SDEC07B",63,0) ;store "RTN","SDEC07B",64,0) N SDECCOND "RTN","SDEC07B",65,0) S SDECCOND=0 I $D(^DPT(BSDR("PAT"),"S",BSDR("ADT"),0)),(($P(^DPT(BSDR("PAT"),"S",BSDR("ADT"),0),U,2)="C")!($P(^DPT(BSDR("PAT"),"S",BSDR("ADT"),0),U,2)="PC")) S SDECCOND=1 "RTN","SDEC07B",66,0) I SDECCOND=1 D "RTN","SDEC07B",67,0) . ; "un-cancel" existing appt in file 2 "RTN","SDEC07B",68,0) . N SDECFDA,SDECIENS,SDECMSG "RTN","SDEC07B",69,0) . S SDECIENS=BSDR("ADT")_","_BSDR("PAT")_"," "RTN","SDEC07B",70,0) . S SDECFDA(2.98,SDECIENS,".01")=$$NULLDEL(BSDR("CLN")) ;*zeb+19 722 2/19/19 completely replace old appt's data if overlaying; prevent chimera appt "RTN","SDEC07B",71,0) . S SDECFDA(2.98,SDECIENS,"3")=$$NULLDEL($S($G(^DPT(+$G(BSDR("PAT")),.1))'="":"I",1:"")) "RTN","SDEC07B",72,0) . S SDECFDA(2.98,SDECIENS,"5")=$$NULLDEL(BSDR("LAB")) ;lab date/time "RTN","SDEC07B",73,0) . S SDECFDA(2.98,SDECIENS,"6")=$$NULLDEL(BSDR("XRA")) ;xray date/time "RTN","SDEC07B",74,0) . S SDECFDA(2.98,SDECIENS,"7")=$$NULLDEL(BSDR("EKG")) ;ekg date/time "RTN","SDEC07B",75,0) . S SDECFDA(2.98,SDECIENS,"9")=$$NULLDEL(BSDR("TYP")) "RTN","SDEC07B",76,0) . S SDECFDA(2.98,SDECIENS,"9.5")=$$NULLDEL(BSDR("APT")) "RTN","SDEC07B",77,0) . S SDECFDA(2.98,SDECIENS,"13")=$$NULLDEL(BSDR("COL")) "RTN","SDEC07B",78,0) . S SDECFDA(2.98,SDECIENS,"14")="@" "RTN","SDEC07B",79,0) . S SDECFDA(2.98,SDECIENS,"15")="@" "RTN","SDEC07B",80,0) . S SDECFDA(2.98,SDECIENS,"16")="@" "RTN","SDEC07B",81,0) . S SDECFDA(2.98,SDECIENS,"17")="@" ;alb/sat 658 "RTN","SDEC07B",82,0) . S SDECFDA(2.98,SDECIENS,"19")=$$NULLDEL(DUZ) ;data entry clerk "RTN","SDEC07B",83,0) . S SDECFDA(2.98,SDECIENS,"20")=$$NOW^XLFDT "RTN","SDEC07B",84,0) . S SDECFDA(2.98,SDECIENS,"21")="@" ;outpatient encounter ;*zeb 722 2/26/19 clear to fix OE link issue if cancelled again "RTN","SDEC07B",85,0) . S SDECFDA(2.98,SDECIENS,"25")=$$NULLDEL(SDSRT) ;scheduling request type "RTN","SDEC07B",86,0) . S SDECFDA(2.98,SDECIENS,"26")=$$NULLDEL(SDNA) ;next ava. appt. indicator "RTN","SDEC07B",87,0) . S SDECFDA(2.98,SDECIENS,"27")=$$NULLDEL(BSDR("DDT")) ;desired date of appt "RTN","SDEC07B",88,0) . S SDECFDA(2.98,SDECIENS,"28")=$$NULLDEL(SDFU) ;follow-up visit yes/no "RTN","SDEC07B",89,0) . D FILE^DIE("","SDECFDA","SDECMSG") "RTN","SDEC07B",90,0) . N SDECTEMP S SDECTEMP=$$NULLDEL($G(SDECMSG)) "RTN","SDEC07B",91,0) E D I $G(SDECERR(1)) Q 1_U_"FileMan add to DPT error: Patient="_BSDR("PAT")_" Appt="_BSDR("ADT") "RTN","SDEC07B",92,0) . ; add appt to file 2 "RTN","SDEC07B",93,0) . N SDECFDA,SDECIENS,SDECMSG "RTN","SDEC07B",94,0) . S SDECIENS="?+2,"_BSDR("PAT")_"," "RTN","SDEC07B",95,0) . S SDECIENS(2)=BSDR("ADT") "RTN","SDEC07B",96,0) . S SDECFDA(2.98,SDECIENS,.01)=BSDR("CLN") "RTN","SDEC07B",97,0) . S SDECFDA(2.98,SDECIENS,"3")=$S($G(^DPT(+$G(BSDR("PAT")),.1))'="":"I",1:"") "RTN","SDEC07B",98,0) . S SDECFDA(2.98,SDECIENS,"5")=BSDR("LAB") ;lab date/time "RTN","SDEC07B",99,0) . S SDECFDA(2.98,SDECIENS,"6")=BSDR("XRA") ;xray date/time "RTN","SDEC07B",100,0) . S SDECFDA(2.98,SDECIENS,"7")=BSDR("EKG") ;ekg date/time "RTN","SDEC07B",101,0) . S SDECFDA(2.98,SDECIENS,"9")=BSDR("TYP") "RTN","SDEC07B",102,0) . S:+BSDR("APT") SDECFDA(2.98,SDECIENS,"9.5")=BSDR("APT") "RTN","SDEC07B",103,0) . S:+BSDR("COL") SDECFDA(2.98,SDECIENS,"13")=BSDR("COL") "RTN","SDEC07B",104,0) . S SDECFDA(2.98,SDECIENS,"14")="" "RTN","SDEC07B",105,0) . S SDECFDA(2.98,SDECIENS,"15")="" "RTN","SDEC07B",106,0) . S SDECFDA(2.98,SDECIENS,"16")="" "RTN","SDEC07B",107,0) . S SDECFDA(2.98,SDECIENS,"17")="" ;alb/sat 658 "RTN","SDEC07B",108,0) . S SDECFDA(2.98,SDECIENS,"19")=DUZ ;data entry clerk "RTN","SDEC07B",109,0) . S SDECFDA(2.98,SDECIENS,"20")=$$NOW^XLFDT "RTN","SDEC07B",110,0) . S SDECFDA(2.98,SDECIENS,"25")=SDSRT ;scheduling request type "RTN","SDEC07B",111,0) . S SDECFDA(2.98,SDECIENS,"26")=SDNA ;next ava. appt. indicator "RTN","SDEC07B",112,0) . S SDECFDA(2.98,SDECIENS,"27")=BSDR("DDT") ;desired date of appt "RTN","SDEC07B",113,0) . S SDECFDA(2.98,SDECIENS,"28")=SDFU ;follow-up visit yes/no "RTN","SDEC07B",114,0) . D UPDATE^DIE("","SDECFDA","SDECIENS","SDECERR(1)") "RTN","SDEC07B",115,0) ; add appt to file 44 "RTN","SDEC07B",116,0) K DIC,DA,X,Y,DLAYGO,DD,DO "RTN","SDEC07B",117,0) I '$D(^SC(BSDR("CLN"),"S",0)) S ^SC(BSDR("CLN"),"S",0)="^44.001DA^^" "RTN","SDEC07B",118,0) 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") "RTN","SDEC07B",119,0) . S DIC="^SC("_BSDR("CLN")_",""S"",",DA(1)=BSDR("CLN"),(X,DINUM)=BSDR("ADT") "RTN","SDEC07B",120,0) . S DIC("P")="44.001DA",DIC(0)="L",DLAYGO=44.001 "RTN","SDEC07B",121,0) . S Y=1 I '$D(@(DIC_X_")")) D FILE^DICN "RTN","SDEC07B",122,0) ; "RTN","SDEC07B",123,0) K DIC,DA,X,Y,DLAYGO,DD,DO,DINUM "RTN","SDEC07B",124,0) S DIC="^SC("_BSDR("CLN")_",""S"","_BSDR("ADT")_",1," "RTN","SDEC07B",125,0) S DA(2)=BSDR("CLN"),DA(1)=BSDR("ADT"),X=BSDR("PAT") "RTN","SDEC07B",126,0) S DIC("DR")="1////"_BSDR("LEN")_";3///"_$E($G(BSDR("OI")),1,150)_";7////"_BSDR("USR")_";8////"_$$NOW^XLFDT_";30////"_BSDR("ELG")_$S(+$G(BSDR("OVB")):";9////O",1:"") "RTN","SDEC07B",127,0) S DIC("P")="44.003PA",DIC(0)="L",DLAYGO=44.003 "RTN","SDEC07B",128,0) D FILE^DICN "RTN","SDEC07B",129,0) ;add consult link "RTN","SDEC07B",130,0) I $G(BSDR("CON")) D "RTN","SDEC07B",131,0) .N SDFDA,SDIEN "RTN","SDEC07B",132,0) .S SDIEN=+Y "RTN","SDEC07B",133,0) .Q:SDIEN=-1 "RTN","SDEC07B",134,0) .S SDFDA(44.003,SDIEN_","_BSDR("ADT")_","_BSDR("CLN")_",",688)=BSDR("CON") "RTN","SDEC07B",135,0) .D UPDATE^DIE("","SDFDA") "RTN","SDEC07B",136,0) ; removed quit so event driver could be called pwc 2/26/20 SD*5.3*744 "RTN","SDEC07B",137,0) ; call event driver "RTN","SDEC07B",138,0) NEW DFN,SDT,SDCL,SDDA,SDMODE "RTN","SDEC07B",139,0) S DFN=BSDR("PAT"),SDT=BSDR("ADT"),SDCL=BSDR("CLN"),SDMODE=2 "RTN","SDEC07B",140,0) S SDDA=$$SCIEN^SDECU2(BSDR("PAT"),BSDR("CLN"),BSDR("ADT")) "RTN","SDEC07B",141,0) D MAKE^SDAMEVT(DFN,SDT,SDCL,SDDA,SDMODE) "RTN","SDEC07B",142,0) Q 0 "RTN","SDEC07B",143,0) ; "RTN","SDEC07B",144,0) NULLDEL(STR) ;return "@" to delete a field if the new data would be null ;*zeb+tag 722 2/19/19 added to support APPADD "RTN","SDEC07B",145,0) Q $S(STR]"":STR,1:"@") "RTN","SDEC07B",146,0) ; "RTN","SDEC07B",147,0) SDSRT(TYP,MTR,DDT,REQ) ;get SCHEDULING REQUEST TYPE and NEXT AVA.APPT. INDICATOR "RTN","SDEC07B",148,0) ;INPUT: "RTN","SDEC07B",149,0) ; TYP = 3 for scheduled appts, 4 for walkins "RTN","SDEC07B",150,0) ; MTR = MTRC flag (multiple appointments) 0=False (default) 1=True "RTN","SDEC07B",151,0) ; DDT = Desired Date of Appt in fm format "RTN","SDEC07B",152,0) ; REQ = Requested By - valid values are 1=PROVIDER 2=PATIENT or "" "RTN","SDEC07B",153,0) ;RETURN: 2 ^ pieces: "RTN","SDEC07B",154,0) ; 1 - SCHEDULING REQUEST TYPE internal format - valid values: "RTN","SDEC07B",155,0) ; N:'NEXT AVAILABLE' APPT. "RTN","SDEC07B",156,0) ; C:OTHER THAN 'NEXT AVA.' (CLINICIAN REQ.) "RTN","SDEC07B",157,0) ; P:OTHER THAN 'NEXT AVA.' (PATIENT REQ.) "RTN","SDEC07B",158,0) ; W:WALKIN APPT. "RTN","SDEC07B",159,0) ; M:MULTIPLE APPT. BOOKING "RTN","SDEC07B",160,0) ; A:AUTO REBOOK "RTN","SDEC07B",161,0) ; O:OTHER THAN 'NEXT AVA.' APPT. "RTN","SDEC07B",162,0) ; 2 - NEXT AVA. APPT. INDICATOR internal format - valid values: "RTN","SDEC07B",163,0) ; N:'NEXT AVAILABLE' APPT. "RTN","SDEC07B",164,0) ; C:OTHER THAN 'NEXT AVA.' (CLINICIAN REQ.) "RTN","SDEC07B",165,0) ; P:OTHER THAN 'NEXT AVA.' (PATIENT REQ.) "RTN","SDEC07B",166,0) ; W:WALKIN APPT. "RTN","SDEC07B",167,0) ; M:MULTIPLE APPT. BOOKING "RTN","SDEC07B",168,0) ; A:AUTO REBOOK "RTN","SDEC07B",169,0) ; O:OTHER THAN 'NEXT AVA.' APPT. "RTN","SDEC07B",170,0) ; "RTN","SDEC07B",171,0) N RET "RTN","SDEC07B",172,0) S RET="" "RTN","SDEC07B",173,0) ;1. If user creates a walkin appointment would be W:WALKIN APPT, 0:NOT INDICATED TO BE A 'NEXT AVA.' APPT "RTN","SDEC07B",174,0) I TYP=4 Q "W^0" "RTN","SDEC07B",175,0) ;2. If user creates an rm request with MTRC flagged "RTN","SDEC07B",176,0) ; AND desired date is 'today' "RTN","SDEC07B",177,0) ; would be M:MULTIPLE APPT. BOOKING, 3:'NEXT AVA.' APPT. INDICATED BY USER & CALCULATION "RTN","SDEC07B",178,0) I +MTR,$P($$NOW^XLFDT,".",1)=DDT Q "M^3" "RTN","SDEC07B",179,0) ;3. If user creates an rm request with MTRC flagged "RTN","SDEC07B",180,0) ; AND desired date is not 'today' "RTN","SDEC07B",181,0) ; would be M:MULTIPLE APPT. BOOKING, 0:'NOT INDICATED TO BE A 'NEXT AVA.' APPT "RTN","SDEC07B",182,0) I +MTR,$P($$NOW^XLFDT,".",1)'=DDT Q "M^0" "RTN","SDEC07B",183,0) ;4. If the user enters a desired date for the clinic stop that is today "RTN","SDEC07B",184,0) ; then N:'NEXT AVAILABLE' APPT., 1:'NEXT AVA.' APPT. INDICATED BY USER "RTN","SDEC07B",185,0) I $P($$NOW^XLFDT(),".",1)=DDT Q "N^1" "RTN","SDEC07B",186,0) ;5. If the user enters a desired date not today "RTN","SDEC07B",187,0) ; AND the request is by patient "RTN","SDEC07B",188,0) ; then P:OTHER THAN 'NEXT AVA.' (PATIENT REQ.); 0:NOT INDICATED TO BE A 'NEXT AVA.' APPT. "RTN","SDEC07B",189,0) I $P($$NOW^XLFDT(),".",1)'=DDT,REQ=2 Q "P^0" "RTN","SDEC07B",190,0) ;6. If the user enters a desired date not today "RTN","SDEC07B",191,0) ; AND the request is by provider "RTN","SDEC07B",192,0) ; then C:OTHER THAN 'NEXT AVA.' (CLINICIAN REQ.); 0:NOT INDICATED TO BE A 'NEXT AVA.' APPT. "RTN","SDEC07B",193,0) I $P($$NOW^XLFDT(),".",1)'=DDT,REQ=1 Q "C^0" "RTN","SDEC07B",194,0) Q RET "RTN","SDEC07B",195,0) ; "RTN","SDEC07B",196,0) ;Create Appointment ;alb/sat 665 moved from SDEC07 "RTN","SDEC07B",197,0) APPVISTA(SDECLEN,SDECNOTE,DFN,SDECRESD,SDECSTART,SDECWKIN,SDCL,SDECI) ; "RTN","SDEC07B",198,0) N SDECC,SDECERR,SDECRNOD "RTN","SDEC07B",199,0) S SDECRNOD=$G(^SDEC(409.831,SDECRESD,0)) "RTN","SDEC07B",200,0) I SDECRNOD="" D ERR^SDEC07(SDECI+1,"SDEC07 Error: Unable to add appointment -- invalid Resource entry.") Q 1 "RTN","SDEC07B",201,0) S SDECERR="" "RTN","SDEC07B",202,0) I +SDCL,$D(^SC(SDCL,0)) D I +SDECERR D ERR^SDEC07(SDECI+1,SDECERR) Q SDECERR "RTN","SDEC07B",203,0) . S SDECC("PAT")=DFN "RTN","SDEC07B",204,0) . S SDECC("CLN")=SDCL "RTN","SDEC07B",205,0) . S SDECC("TYP")=3 ;3 for scheduled appts, 4 for walkins "RTN","SDEC07B",206,0) . S:SDECWKIN SDECC("TYP")=4 "RTN","SDEC07B",207,0) . S SDECC("ADT")=SDECSTART "RTN","SDEC07B",208,0) . S SDECC("LEN")=SDECLEN "RTN","SDEC07B",209,0) . S SDECC("OI")=$E($G(SDECNOTE),1,150) ;File 44 has 150 character limit on OTHER field "RTN","SDEC07B",210,0) . S SDECC("OI")=$TR(SDECC("OI"),";"," ") ;No semicolons allowed "RTN","SDEC07B",211,0) . S SDECC("OI")=$$STRIP^SDEC07(SDECC("OI")) ;Strip control characters from note "RTN","SDEC07B",212,0) . S SDECC("RES")=SDECRESD "RTN","SDEC07B",213,0) . S SDECC("USR")=DUZ "RTN","SDEC07B",214,0) . S SDECERR=$$MAKE^SDEC07B(.SDECC) "RTN","SDEC07B",215,0) . Q:SDECERR "RTN","SDEC07B",216,0) . D AVUPDT^SDEC07(SDCL,SDECSTART,SDECLEN) "RTN","SDEC07B",217,0) Q +SDECERR "RTN","SDEC08") 0^2^B224217895^B221710080 "RTN","SDEC08",1,0) SDEC08 ;ALB/SAT/JSM - VISTA SCHEDULING RPCS ;JUN 21, 2017 "RTN","SDEC08",2,0) ;;5.3;Scheduling;**627,651,658,665,722,740,744**;Aug 13, 1993;Build 3 "RTN","SDEC08",3,0) ;;Per VHA Directive 2004-038, this routine should not be modified "RTN","SDEC08",4,0) ; "RTN","SDEC08",5,0) Q "RTN","SDEC08",6,0) ; "RTN","SDEC08",7,0) APPDEL(SDECY,SDECAPTID,SDECTYP,SDECCR,SDECNOT,SDECDATE,SDUSER) ;Cancels appointment "RTN","SDEC08",8,0) ;APPDEL(SDECY,SDECAPTID,SDECTYP,SDECCR,SDECNOT,SDECDATE,SDUSER) external parameter tag is in SDEC "RTN","SDEC08",9,0) ;SDECAPTID - (required) pointer to SDEC APPOINTMENT file "RTN","SDEC08",10,0) ;SDECTYP - (required) appointment Status valid values: "RTN","SDEC08",11,0) ; C=CANCELLED BY CLINIC "RTN","SDEC08",12,0) ; PC=CANCELLED BY PATIENT "RTN","SDEC08",13,0) ;SDECCR - (optional) pointer to CANCELLATION REASON File (409.2) "RTN","SDEC08",14,0) ;SDECNOT - (optional) text representing user note "RTN","SDEC08",15,0) ;SDECDATE - (optional) Cancel Date/Time in external format; defaults to NOW "RTN","SDEC08",16,0) ;SDUSER - (optional) User that cancelled appt; defaults to current user "RTN","SDEC08",17,0) ;Returns error code in recordset field ERRORID "RTN","SDEC08",18,0) ; "RTN","SDEC08",19,0) N SDECNOD,SDECPATID,SDECSTART,DIK,DA,SDECID,SDECI,SDECZ,SDECERR "RTN","SDEC08",20,0) N SDECLOC,SDECLEN,SDECSCIEN,SDECSCIEN1 "RTN","SDEC08",21,0) N SDECNOEV,SDECSC1,SDRET "RTN","SDEC08",22,0) N %DT,X,Y "RTN","SDEC08",23,0) S SDECNOEV=1 ;Don't execute SDEC CANCEL APPOINTMENT protocol "RTN","SDEC08",24,0) S SDECSCIEN1=0 "RTN","SDEC08",25,0) ; "RTN","SDEC08",26,0) S SDECI=0 "RTN","SDEC08",27,0) S SDECY="^TMP(""SDEC08"","_$J_",""APPDEL"")" "RTN","SDEC08",28,0) K @SDECY "RTN","SDEC08",29,0) S @SDECY@(SDECI)="T00020ERRORID"_$C(30) "RTN","SDEC08",30,0) S SDECI=SDECI+1 "RTN","SDEC08",31,0) ;validate SDEC APPOINTMENT pointer (required) "RTN","SDEC08",32,0) I '$D(^SDEC(409.84,+$G(SDECAPTID),0)) D ADERR(SDECI,.SDECY,"SDEC08: Invalid Appointment ID",+$G(SDECAPTID),0) Q ;BI/SD*5.3*740 added ADERR "RTN","SDEC08",33,0) ;validate appointment status type (required) "RTN","SDEC08",34,0) S SDECTYP=$G(SDECTYP) "RTN","SDEC08",35,0) S SDECTYP=$S(SDECTYP="C":"C",SDECTYP="CANCELLED BY CLINIC":"C",SDECTYP="PC":"PC",SDECTYP="CANCELLED BY PATIENT":"PC",1:"") "RTN","SDEC08",36,0) I SDECTYP="" D ADERR(SDECI,.SDECY,"SDEC08: Invalid status type",+$G(SDECAPTID),0) Q ;BI/SD*5.3*740 added ADERR "RTN","SDEC08",37,0) ;validate CANCELLATION REASON pointer (optional) "RTN","SDEC08",38,0) S SDECCR=$G(SDECCR) "RTN","SDEC08",39,0) I SDECCR'="" I '$D(^SD(409.2,+SDECCR,0)) S SDECCR=$O(^SD(409.2,"B","SDECCR",0)) "RTN","SDEC08",40,0) ;validate SDECNOT "RTN","SDEC08",41,0) S SDECNOT=$TR($G(SDECNOT),"^"," ") ;alb/sat 658 - strip out ^ "RTN","SDEC08",42,0) ;validate cancel date/time "RTN","SDEC08",43,0) S SDECDATE=$G(SDECDATE) "RTN","SDEC08",44,0) I SDECDATE'="" S %DT="T" S X=SDECDATE D ^%DT S SDECDATE=Y I Y=-1 S SDECDATE="" "RTN","SDEC08",45,0) I $G(SDECDATE)="" S SDECDATE=$$NOW^XLFDT "RTN","SDEC08",46,0) ;validate user "RTN","SDEC08",47,0) S SDUSER=$G(SDUSER) "RTN","SDEC08",48,0) I SDUSER'="" I '$D(^VA(200,+SDUSER,0)) S SDUSER="" "RTN","SDEC08",49,0) I SDUSER="" S SDUSER=DUZ "RTN","SDEC08",50,0) ; "RTN","SDEC08",51,0) ;Delete APPOINTMENT entries "RTN","SDEC08",52,0) S SDECNOD=^SDEC(409.84,SDECAPTID,0) "RTN","SDEC08",53,0) S SDECPATID=$P(SDECNOD,U,5) "RTN","SDEC08",54,0) S SDECSTART=$P(SDECNOD,U) "RTN","SDEC08",55,0) ; "RTN","SDEC08",56,0) ;Lock SDEC node "RTN","SDEC08",57,0) L +^SDEC(409.84,SDECPATID):5 I '$T D ADERR(SDECI+1,.SDECY,"Another user is working with this patient's record. Please try again later",+SDECPATID,0) Q ;BI/SD *5.3*740 "RTN","SDEC08",58,0) ;cancel check-in if walk-in "RTN","SDEC08",59,0) I $P(SDECNOD,U,13)="y" D "RTN","SDEC08",60,0) .S SDRET="" "RTN","SDEC08",61,0) .D CHECKIN^SDEC25(.SDRET,SDECAPTID,"@") "RTN","SDEC08",62,0) ;cancel SDEC APPOINTMENT record "RTN","SDEC08",63,0) D SDECCAN(SDECAPTID,SDECTYP,SDECCR,SDECNOT,SDECDATE,SDUSER,1) "RTN","SDEC08",64,0) ; "RTN","SDEC08",65,0) S SDECSC1=$P(SDECNOD,U,7) ;RESOURCEID "RTN","SDEC08",66,0) I SDECSC1]"",$D(^SDEC(409.831,SDECSC1,0)) D I +$G(SDECZ) S SDECERR=+SDECZ D ADERR(SDECI,.SDECY,$P(SDECZ,U,2),+SDECPATID,1) Q ;BI/SD*5.3*740 added ADERR "RTN","SDEC08",67,0) . S SDECNOD=^SDEC(409.831,SDECSC1,0) "RTN","SDEC08",68,0) . S SDECLOC=$P(SDECNOD,U,4) ;HOSPITAL LOCATION "RTN","SDEC08",69,0) . Q:'+SDECLOC "RTN","SDEC08",70,0) . S SDECSCIEN=$$SCIEN^SDECU2(SDECPATID,SDECLOC,SDECSTART) I SDECSCIEN="" D I 'SDECZ Q ;Q:SDECZ "RTN","SDEC08",71,0) . . S SDECERR="SDEC08: Unable to find associated appointment for this patient. " "RTN","SDEC08",72,0) . . S SDECZ=1 "RTN","SDEC08",73,0) . . I '$D(^SDEC(409.831,SDECSC1,20)) S SDECZ=0 Q "RTN","SDEC08",74,0) . . N SDEC1 "RTN","SDEC08",75,0) . . S SDEC1=0 "RTN","SDEC08",76,0) . . F S SDEC1=$O(^SDEC(409.831,SDECSC1,20,SDEC1)) Q:'+SDEC1 Q:SDECZ=0 D "RTN","SDEC08",77,0) . . . Q:'$D(^SDEC(409.831,SDECSC1,20,SDEC1,0)) "RTN","SDEC08",78,0) . . . S SDECLOC=$P(^SDEC(409.831,SDECSC1,20,SDEC1,0),U) "RTN","SDEC08",79,0) . . . S SDECSCIEN=$$SCIEN^SDECU2(SDECPATID,SDECLOC,SDECSTART) I +SDECSCIEN S SDECZ=0 Q "RTN","SDEC08",80,0) . S SDECERR="SDEC08: CANCEL^SDEC08 Returned " "RTN","SDEC08",81,0) . I SDECLOC']"" S SDECZ="0^Unable to find associated appointment for this patient." Q "RTN","SDEC08",82,0) . I '$D(^SC(SDECLOC,0)) S SDECZ="0^Unable to find associated appointment for this patient." Q "RTN","SDEC08",83,0) . S SDECNOD=$G(^SC(SDECLOC,"S",SDECSTART,1,+SDECSCIEN,0)) "RTN","SDEC08",84,0) . I SDECNOD="" S SDECZ="0^Unable to find associated appointment for this patient." Q "RTN","SDEC08",85,0) . S SDECLEN=$P(SDECNOD,U,2) "RTN","SDEC08",86,0) . D APCAN(.SDECZ,SDECLOC,SDECPATID,SDECSTART,SDECAPTID,SDECLEN) "RTN","SDEC08",87,0) . Q:+$G(SDECZ) "RTN","SDEC08",88,0) . D AVUPDT(SDECLOC,SDECSTART,SDECLEN) "RTN","SDEC08",89,0) . D AR433D^SDECAR2(SDECAPTID) "RTN","SDEC08",90,0) L -^SDEC(409.84,SDECPATID) "RTN","SDEC08",91,0) S SDECI=SDECI+1 "RTN","SDEC08",92,0) S @SDECY@(SDECI)=""_$C(30) "RTN","SDEC08",93,0) S SDECI=SDECI+1 "RTN","SDEC08",94,0) S @SDECY@(SDECI)=$C(31) "RTN","SDEC08",95,0) Q "RTN","SDEC08",96,0) ; "RTN","SDEC08",97,0) ADERR(SDECI,SDECY,SDECERR,SDECPATID,LOCK) ;Error processing BI/SD*5.3*740 "RTN","SDEC08",98,0) S SDECI=SDECI+1 "RTN","SDEC08",99,0) S SDECERR=$TR(SDECERR,"^","~") "RTN","SDEC08",100,0) S @SDECY@(SDECI)=SDECERR_$C(30) "RTN","SDEC08",101,0) S SDECI=SDECI+1 "RTN","SDEC08",102,0) S @SDECY@(SDECI)=$C(31) "RTN","SDEC08",103,0) I LOCK=1 L -^SDEC(409.84,SDECPATID) "RTN","SDEC08",104,0) Q "RTN","SDEC08",105,0) ; "RTN","SDEC08",106,0) AVUPDT(SDECSCD,SDECSTART,SDECLEN) ;Update Clinic availability "RTN","SDEC08",107,0) ;See SDCNP0 "RTN","SDEC08",108,0) N HSI,I,S,SB,SD,SDDIF,SI,SL,SS,ST,STARTDAY,STR,X,Y "RTN","SDEC08",109,0) S (SD,S)=SDECSTART "RTN","SDEC08",110,0) S I=SDECSCD "RTN","SDEC08",111,0) Q:'$D(^SC(I,"ST",SD\1,1)) "RTN","SDEC08",112,0) S SL=^SC(I,"SL"),X=$P(SL,U,3),STARTDAY=$S($L(X):X,1:8),SB=STARTDAY-1/100,X=$P(SL,U,6),HSI=$S(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) "RTN","SDEC08",113,0) S SL=SDECLEN "RTN","SDEC08",114,0) S S=^SC(I,"ST",SD\1,1),Y=SD#1-SB*100,ST=Y#1*SI\.6+(Y\1*SI),SS=SL*HSI/60 "RTN","SDEC08",115,0) I Y'<1 F I=ST+ST:SDDIF S Y=$E(STR,$F(STR,$E(S,I+1))) Q:Y="" S S=$E(S,1,I)_Y_$E(S,I+2,999),SS=SS-1 Q:SS'>0 "RTN","SDEC08",116,0) S ^SC(SDECSCD,"ST",SD\1,1)=S "RTN","SDEC08",117,0) Q "RTN","SDEC08",118,0) ; "RTN","SDEC08",119,0) APCAN(SDECZ,SDECLOC,SDECDFN,SDECSD,SDECAPTID,SDECLEN) ; "RTN","SDEC08",120,0) ;Cancel appointment for patient SDECDFN in clinic SDECSC1 at time SDECSD "RTN","SDEC08",121,0) N SDECPNOD,SDECC,DA,DIE,DPTST,DR,%H "RTN","SDEC08",122,0) ;save data into SDEC APPOINTMENT in case of un-cancel (status & appt length) "RTN","SDEC08",123,0) S SDECPNOD=^DPT(SDECPATID,"S",SDECSD,0) "RTN","SDEC08",124,0) S DPTST=$P(SDECPNOD,U,2) "RTN","SDEC08",125,0) S DIE=409.84 "RTN","SDEC08",126,0) S DA=SDECAPTID "RTN","SDEC08",127,0) S DR=".17///"_DPTST_";"_".18///"_SDECLEN "RTN","SDEC08",128,0) D ^DIE "RTN","SDEC08",129,0) S SDECC("PAT")=SDECDFN "RTN","SDEC08",130,0) S SDECC("CLN")=SDECLOC "RTN","SDEC08",131,0) S SDECC("TYP")=SDECTYP "RTN","SDEC08",132,0) S SDECC("ADT")=SDECSD "RTN","SDEC08",133,0) S %H=$H D YMD^%DTC "RTN","SDEC08",134,0) S SDECC("CDT")=SDECDATE ;X+% "RTN","SDEC08",135,0) S SDECC("NOT")=SDECNOT "RTN","SDEC08",136,0) S:+SDECCR SDECC("CR")=SDECCR "RTN","SDEC08",137,0) S SDECC("USR")=SDUSER "RTN","SDEC08",138,0) ; "RTN","SDEC08",139,0) S SDECZ=$$CANCEL(.SDECC) "RTN","SDEC08",140,0) Q "RTN","SDEC08",141,0) ; "RTN","SDEC08",142,0) SDECCAN(SDECAPTID,SDECTYP,SDECCR,SDECNOT,SDECDATE,SDUSER,SDF) ;cancel SDEC APPOINTMENT entry "RTN","SDEC08",143,0) ;SDECAPTID - (required) pointer to SDEC APPOINTMENT file "RTN","SDEC08",144,0) ;SDECTYP - (required) appointment Status valid values: "RTN","SDEC08",145,0) ; C=CANCELLED BY CLINIC "RTN","SDEC08",146,0) ; PC=CANCELLED BY PATIENT "RTN","SDEC08",147,0) ;SDECCR - (optional) pointer to CANCELLATION REASON File (409.2) "RTN","SDEC08",148,0) ;SDECNOT - (optional) text representing user note "RTN","SDEC08",149,0) ;SDECDATE - (optional) Cancel Date/Time in fm format; defaults to NOW) ; "RTN","SDEC08",150,0) ;SDF - (optional) flags "RTN","SDEC08",151,0) ; 1. called from GUI (update consult only if called from GUI) "RTN","SDEC08",152,0) ; 2. called from cancel in SDAM (CAN^SDCNP0) (do not reopen appt) "RTN","SDEC08",153,0) ;Cancel SDEC APPOINTMENT entry "RTN","SDEC08",154,0) N DFN,PROVIEN,Y "RTN","SDEC08",155,0) N SAVESTRT,SDAPTYP,SDCL,SDI,SDIEN,SDECIENS,SDECFDA,SDECMSG,SDECWP,SDRES,SDT ;alb/sat 651 add SAVESTRT and SDRES "RTN","SDEC08",156,0) S SDF=$G(SDF,0) "RTN","SDEC08",157,0) S DFN=$$GET1^DIQ(409.84,SDECAPTID_",",.05) ;alb/sat 658 "RTN","SDEC08",158,0) S SDT=$$GET1^DIQ(409.84,SDECAPTID_",",.01,"I") "RTN","SDEC08",159,0) S SAVESTRT=$$GET1^DIQ(409.84,SDECAPTID_",",.01) ;alb/sat 651 "RTN","SDEC08",160,0) S SDRES=$$GET1^DIQ(409.84,SDECAPTID_",",.07,"I") ;alb/sat 651 "RTN","SDEC08",161,0) S SDECIENS=SDECAPTID_"," "RTN","SDEC08",162,0) S SDECFDA(409.84,SDECIENS,.12)=$S($G(SDECDATE)'="":SDECDATE,1:$$NOW^XLFDT) "RTN","SDEC08",163,0) S SDECFDA(409.84,SDECIENS,.121)=$S($G(SDUSER)'="":SDUSER,1:DUZ) "RTN","SDEC08",164,0) S:$G(SDECCR)'="" SDECFDA(409.84,SDECIENS,.122)=SDECCR "RTN","SDEC08",165,0) S SDECFDA(409.84,SDECIENS,.17)=SDECTYP "RTN","SDEC08",166,0) K SDECMSG "RTN","SDEC08",167,0) D FILE^DIE("","SDECFDA","SDECMSG") "RTN","SDEC08",168,0) S SDAPTYP=$$GET1^DIQ(409.84,SDECAPTID_",",.22,"I") "RTN","SDEC08",169,0) ;alb/sat 658 modification begin "RTN","SDEC08",170,0) S SDECNOT=$G(SDECNOT),SDECNOT=$E(SDECNOT,1,160) "RTN","SDEC08",171,0) I $L(SDECNOT)>2,'$E(SDF,2) K SDECFDA S SDECFDA(2.98,SDT_","_DFN_",",17)=SDECNOT D UPDATE^DIE("","SDECFDA") "RTN","SDEC08",172,0) ;alb/sat 658 modification end "RTN","SDEC08",173,0) I $P(SDAPTYP,";",2)="GMR(123,",$E(SDF,1) D "RTN","SDEC08",174,0) .S SDCL=$$SDCL^SDECUTL(SDECAPTID) "RTN","SDEC08",175,0) .S PROVIEN=$$GET1^DIQ(44,SDCL_",",16,"I") "RTN","SDEC08",176,0) .D REQSET^SDEC07A($P(SDAPTYP,";",1),PROVIEN,"",2,SDECTYP,SDECNOT,SAVESTRT,SDRES) ;alb/sat 651 added SAVESTRT "RTN","SDEC08",177,0) I $P(SDAPTYP,";",2)="SDWL(409.3," D ;update EWL "RTN","SDEC08",178,0) .S DFN=$$GET1^DIQ(409.3,$P(SDAPTYP,";",1)_",",.01,"I") "RTN","SDEC08",179,0) .Q:DFN="" "RTN","SDEC08",180,0) .S SDIEN=0 F S SDIEN=$O(^SDWL(409.3,"B",DFN,SDIEN)) Q:SDIEN="" D "RTN","SDEC08",181,0) ..I $$GET1^DIQ(409.3,SDIEN_",",13,"I")=SDT D "RTN","SDEC08",182,0) ...K SDECFDA,SDECMSG,SDECWP "RTN","SDEC08",183,0) ...;S SDIEN=$P(SDAPTYP,";",1) "RTN","SDEC08",184,0) ...S SDECFDA(409.3,SDIEN_",",13)="@" "RTN","SDEC08",185,0) ...S SDECFDA(409.3,SDIEN_",",13.1)="@" "RTN","SDEC08",186,0) ...S SDECFDA(409.3,SDIEN_",",13.2)="@" "RTN","SDEC08",187,0) ...S SDECFDA(409.3,SDIEN_",",13.3)="@" "RTN","SDEC08",188,0) ...S SDECFDA(409.3,SDIEN_",",13.4)="@" "RTN","SDEC08",189,0) ...S SDECFDA(409.3,SDIEN_",",13.5)="@" "RTN","SDEC08",190,0) ...S SDECFDA(409.3,SDIEN_",",13.6)="@" "RTN","SDEC08",191,0) ...S SDECFDA(409.3,SDIEN_",",13.7)="@" "RTN","SDEC08",192,0) ...S SDECFDA(409.3,SDIEN_",",13.8)="@" "RTN","SDEC08",193,0) ...D UPDATE^DIE("","SDECFDA") "RTN","SDEC08",194,0) ...D:'$E(SDF,2) WLOPEN^SDECWL("","",SDIEN) ;alb/jsm 658 do not reopen if called from SDEC^SDCNP0 "RTN","SDEC08",195,0) I $P(SDAPTYP,";",2)="SDEC(409.85," D ;update APPT "RTN","SDEC08",196,0) .K SDECFDA,SDECMSG,SDECWP "RTN","SDEC08",197,0) .D:'$E(SDF,2) AROPEN^SDECAR("",SDECAPTID) ;alb/jsm 658 do not reopen if called from SDEC^SDCNP0 "RTN","SDEC08",198,0) .S SDIEN=$P(SDAPTYP,";",1) "RTN","SDEC08",199,0) .S SDECFDA(409.85,SDIEN_",",13)="@" "RTN","SDEC08",200,0) .S SDECFDA(409.85,SDIEN_",",13.1)="@" "RTN","SDEC08",201,0) .S SDECFDA(409.85,SDIEN_",",13.2)="@" "RTN","SDEC08",202,0) .S SDECFDA(409.85,SDIEN_",",13.3)="@" "RTN","SDEC08",203,0) .S SDECFDA(409.85,SDIEN_",",13.4)="@" "RTN","SDEC08",204,0) .S SDECFDA(409.85,SDIEN_",",13.5)="@" "RTN","SDEC08",205,0) .S SDECFDA(409.85,SDIEN_",",13.6)="@" "RTN","SDEC08",206,0) .S SDECFDA(409.85,SDIEN_",",13.7)="@" "RTN","SDEC08",207,0) .S SDECFDA(409.85,SDIEN_",",13.8)="@" "RTN","SDEC08",208,0) .D UPDATE^DIE("","SDECFDA") "RTN","SDEC08",209,0) Q "RTN","SDEC08",210,0) ; "RTN","SDEC08",211,0) CANEVT(SDECPAT,SDECSTART,SDECSC) ;EP Called by SDEC CANCEL APPOINTMENT event "RTN","SDEC08",212,0) ;when appointments cancelled via PIMS interface. "RTN","SDEC08",213,0) ;Propagates cancellation to SDECAPPT and raises refresh event to running GUI clients "RTN","SDEC08",214,0) N SDECFOUND,SDECRES "RTN","SDEC08",215,0) Q:+$G(SDECNOEV) "RTN","SDEC08",216,0) Q:'+$G(SDECSC) "RTN","SDEC08",217,0) S SDECFOUND=0 "RTN","SDEC08",218,0) I $D(^SDEC(409.831,"ALOC",SDECSC)) S SDECRES=$O(^SDEC(409.831,"ALOC",SDECSC,0)) S SDECFOUND=$$CANEVT1(SDECRES,SDECSTART,SDECPAT) "RTN","SDEC08",219,0) I SDECFOUND D CANEVT3(SDECRES) Q "RTN","SDEC08",220,0) Q "RTN","SDEC08",221,0) ; "RTN","SDEC08",222,0) CANEVT1(SDECRES,SDECSTART,SDECPAT) ; "RTN","SDEC08",223,0) ;Get appointment id in SDECAPT "RTN","SDEC08",224,0) ;If found, call SDECCAN(SDECAPPT) and return 1 "RTN","SDEC08",225,0) ;else return 0 "RTN","SDEC08",226,0) N SDECFOUND,SDECAPPT "RTN","SDEC08",227,0) S SDECFOUND=0 "RTN","SDEC08",228,0) Q:'+SDECRES SDECFOUND "RTN","SDEC08",229,0) Q:'$D(^SDEC(409.84,"ARSRC",SDECRES,SDECSTART)) SDECFOUND "RTN","SDEC08",230,0) S SDECAPPT=0 F S SDECAPPT=$O(^SDEC(409.84,"ARSRC",SDECRES,SDECSTART,SDECAPPT)) Q:'+SDECAPPT D Q:SDECFOUND "RTN","SDEC08",231,0) . S SDECNOD=$G(^SDEC(409.84,SDECAPPT,0)) Q:SDECNOD="" "RTN","SDEC08",232,0) . I $P(SDECNOD,U,5)=SDECPAT,$P(SDECNOD,U,12)="" S SDECFOUND=1 Q "RTN","SDEC08",233,0) I SDECFOUND,+$G(SDECAPPT) D SDECCAN(SDECAPPT,,,,,,1) "RTN","SDEC08",234,0) Q SDECFOUND "RTN","SDEC08",235,0) ; "RTN","SDEC08",236,0) CANEVT3(SDECRES) ; "RTN","SDEC08",237,0) ;Call RaiseEvent to notify GUI clients "RTN","SDEC08",238,0) ; "RTN","SDEC08",239,0) Q "RTN","SDEC08",240,0) N SDECRESN "RTN","SDEC08",241,0) S SDECRESN=$G(^SDEC(409.831,SDECRES,0)) "RTN","SDEC08",242,0) Q:SDECRESN="" "RTN","SDEC08",243,0) S SDECRESN=$P(SDECRESN,"^") "RTN","SDEC08",244,0) ;D EVENT^SDEC23("SCHEDULE-"_SDECRESN,"","","") "RTN","SDEC08",245,0) ;D EVENT^BMXMEVN("SDEC SCHEDULE",SDECRESN) "RTN","SDEC08",246,0) Q "RTN","SDEC08",247,0) ; "RTN","SDEC08",248,0) CANCEL(BSDR) ;EP; called to cancel appt "RTN","SDEC08",249,0) ; "RTN","SDEC08",250,0) ; Make call using: S ERR=$$CANCEL^SDEC08(.ARRAY) "RTN","SDEC08",251,0) ; "RTN","SDEC08",252,0) ; Input Array - "RTN","SDEC08",253,0) ; BSDR("PAT") = ien of patient in file 2 "RTN","SDEC08",254,0) ; BSDR("CLN") = ien of clinic in file 44 "RTN","SDEC08",255,0) ; BSDR("TYP") = C for canceled by clinic; PC for patient canceled "RTN","SDEC08",256,0) ; BSDR("ADT") = appointment date and time "RTN","SDEC08",257,0) ; BSDR("CDT") = cancel date and time "RTN","SDEC08",258,0) ; BSDR("USR") = user who canceled appt "RTN","SDEC08",259,0) ; BSDR("CR") = cancel reason - pointer to file 409.2 "RTN","SDEC08",260,0) ; BSDR("NOT") = cancel remarks - optional notes to 160 characters "RTN","SDEC08",261,0) ; "RTN","SDEC08",262,0) ;Output: error status and message "RTN","SDEC08",263,0) ; = 0 or null: everything okay "RTN","SDEC08",264,0) ; = 1^message: error and reason "RTN","SDEC08",265,0) ; "RTN","SDEC08",266,0) I '$D(^DPT(+$G(BSDR("PAT")),0)) Q 1_U_"Patient not on file: "_$G(BSDR("PAT")) "RTN","SDEC08",267,0) I '$D(^SC(+$G(BSDR("CLN")),0)) Q 1_U_"Clinic not on file: "_$G(BSDR("CLN")) "RTN","SDEC08",268,0) I ($G(BSDR("TYP"))'="C"),($G(BSDR("TYP"))'="PC") Q 1_U_"Cancel Status error: "_$G(BSDR("TYP")) "RTN","SDEC08",269,0) I $G(BSDR("ADT")) S BSDR("ADT")=+$E(BSDR("ADT"),1,12) ;remove seconds "RTN","SDEC08",270,0) I $G(BSDR("ADT"))'?7N1".".4N Q 1_U_"Appt Date/Time error: "_$G(BSDR("ADT")) "RTN","SDEC08",271,0) I $G(BSDR("CDT")) S BSDR("CDT")=+$E(BSDR("CDT"),1,12) ;remove seconds "RTN","SDEC08",272,0) I $G(BSDR("CDT"))'?7N1".".4N Q 1_U_"Cancel Date/Time error: "_$G(BSDR("CDT")) "RTN","SDEC08",273,0) I '$D(^VA(200,+$G(BSDR("USR")),0)) Q 1_U_"User Who Canceled Appt Error: "_$G(BSDR("USR")) "RTN","SDEC08",274,0) I '$D(^SD(409.2,+$G(BSDR("CR")))) Q 1_U_"Cancel Reason error: "_$G(BSDR("CR")) "RTN","SDEC08",275,0) ; "RTN","SDEC08",276,0) NEW IEN,DIE,DA,DR,SDMODE,HLAPTIEN ;*zeb+1 722 2/21/19 save IEN for canceling appt "RTN","SDEC08",277,0) S IEN=$$SCIEN^SDECU2(BSDR("PAT"),BSDR("CLN"),BSDR("ADT")),HLAPTIEN=IEN "RTN","SDEC08",278,0) I 'IEN Q 1_U_"Error trying to find appointment for cancel: Patient="_BSDR("PAT")_" Clinic="_BSDR("CLN")_" Appt="_BSDR("ADT") "RTN","SDEC08",279,0) ; "RTN","SDEC08",280,0) I $$CI^SDECU2(BSDR("PAT"),BSDR("CLN"),BSDR("ADT"),IEN) Q 1_U_"Patient already checked in; cannot cancel until check-in deleted: Patient="_BSDR("PAT")_" Clinic="_BSDR("CLN")_" Appt="_BSDR("ADT") "RTN","SDEC08",281,0) ; "RTN","SDEC08",282,0) ; remember before status "RTN","SDEC08",283,0) NEW SDATA,DFN,SDT,SDCL,SDDA,SDCPHDL "RTN","SDEC08",284,0) S DFN=BSDR("PAT"),SDT=BSDR("ADT"),SDCL=BSDR("CLN"),SDMODE=2,SDDA=IEN "RTN","SDEC08",285,0) S SDCPHDL=$$HANDLE^SDAMEVT(1),SDATA=SDDA_U_DFN_U_SDT_U_SDCL "RTN","SDEC08",286,0) D BEFORE^SDAMEVT(.SDATA,DFN,SDT,SDCL,SDDA,SDCPHDL) "RTN","SDEC08",287,0) ; "RTN","SDEC08",288,0) ; get user who made appt and date appt made from ^SC "RTN","SDEC08",289,0) ; because data in ^SC will be deleted "RTN","SDEC08",290,0) NEW USER,DATE "RTN","SDEC08",291,0) S USER=$P($G(^SC(SDCL,"S",SDT,1,IEN,0)),U,6) "RTN","SDEC08",292,0) S DATE=$P($G(^SC(SDCL,"S",SDT,1,IEN,0)),U,7) "RTN","SDEC08",293,0) ; "RTN","SDEC08",294,0) ; update file 2 info "RTN","SDEC08",295,0) NEW DIE,DA,DR "RTN","SDEC08",296,0) N SDFDA,SDIEN,SDMSG "RTN","SDEC08",297,0) S SDFDA="SDFDA(2.98,SDT_"",""_DFN_"","")" "RTN","SDEC08",298,0) S @SDFDA@(3)=BSDR("TYP") "RTN","SDEC08",299,0) S @SDFDA@(14)=BSDR("USR") "RTN","SDEC08",300,0) S @SDFDA@(15)=BSDR("CDT") "RTN","SDEC08",301,0) S:+$G(BSDR("CR")) @SDFDA@(16)=BSDR("CR") "RTN","SDEC08",302,0) S:$G(BSDR("NOT"))]"" @SDFDA@(17)=$E(BSDR("NOT"),1,160) "RTN","SDEC08",303,0) S @SDFDA@(19)=USER "RTN","SDEC08",304,0) S @SDFDA@(20)=DATE "RTN","SDEC08",305,0) D UPDATE^DIE("","SDFDA") "RTN","SDEC08",306,0) N SDPCE "RTN","SDEC08",307,0) S SDPCE=$P($G(^DPT(DFN,"S",SDT,0)),U,20) "RTN","SDEC08",308,0) D:+SDPCE EN^SDCODEL(SDPCE,2,"","CANCEL") ;remove OUTPATIENT ENCOUNTER link ;*zeb 10/25/18 722 pass in correct SDMODE and delete source "RTN","SDEC08",309,0) S $P(^SC(BSDR("CLN"),"S",BSDR("ADT"),1,HLAPTIEN,0),"^",9)="C" "RTN","SDEC08",310,0) ; call event driver "RTN","SDEC08",311,0) S SDATA=SDDA_U_DFN_U_SDT_U_SDCL "RTN","SDEC08",312,0) D CANCEL^SDAMEVT(.SDATA,DFN,SDT,SDCL,SDDA,SDMODE,SDCPHDL) ;*zeb 10/25/18 722 uncomment to re-enable event driver "RTN","SDEC08",313,0) Q 0 "RTN","SDEC08",314,0) ; "RTN","SDEC08",315,0) UNDOCANA(SDECY,SDECAPTID) ;Undo Cancel Appointment "RTN","SDEC08",316,0) ;UNDOCANA(SDECY,SDECAPTID) external parameter tag in SDEC "RTN","SDEC08",317,0) ;called by SDEC UNCANCEL APPT "RTN","SDEC08",318,0) ; SDECAPTID = ien of appointment in SDEC APPOINTMENT (^SDECAPPT) file 409.84 "RTN","SDEC08",319,0) N SDECDAM,SDECDEC,SDECI,SDECNOD,SDECPATID,SDECSTART "RTN","SDEC08",320,0) S SDECNOEV=1 ;Don't execute SDEC CANCEL APPOINTMENT protocol ;is this used? "RTN","SDEC08",321,0) ; "RTN","SDEC08",322,0) S SDECI=0 "RTN","SDEC08",323,0) K ^TMP("SDEC",$J) "RTN","SDEC08",324,0) S SDECY="^TMP(""SDEC"","_$J_")" "RTN","SDEC08",325,0) S ^TMP("SDEC",$J,SDECI)="T00020ERRORID"_$C(30) "RTN","SDEC08",326,0) I '+SDECAPTID D ERR(SDECI+1,"Invalid Appointment ID.",+$G(SDECAPTID),0) Q ;BI/SD*5.3*740 "RTN","SDEC08",327,0) I '$D(^SDEC(409.84,SDECAPTID,0)) D ERR(SDECI+1,"Invalid Appointment ID",+SDECAPTID,0) Q ;BI/SD*5.3*740 "RTN","SDEC08",328,0) ;Make sure appointment is cancelled "RTN","SDEC08",329,0) I $$GET1^DIQ(409.84,SDECAPTID_",",.12)="" D ERR(SDECI+1,"Appointment is not Cancelled.",+SDECAPTID,0) Q ;BI/SD*5.3*740 "RTN","SDEC08",330,0) S SDECNOD=^SDEC(409.84,SDECAPTID,0) "RTN","SDEC08",331,0) ;appts cancelled by patient cannot be un-cancelled. /* removed 9/17/2010 */ "RTN","SDEC08",332,0) ;I $P(^DPT($P(SDECNOD,U,5),"S",$P(SDECNOD,U,1),0),U,2)="PC" TROLLBACK D ERR(SDECI+1,"Cancelled by patient appointment cannot be uncancelled.") Q "RTN","SDEC08",333,0) ;get appointment data "RTN","SDEC08",334,0) S SDECNOD=^SDEC(409.84,SDECAPTID,0) "RTN","SDEC08",335,0) S SDECDAM=$P(SDECNOD,U,9) ;date appt made "RTN","SDEC08",336,0) S SDECDEC=$P(SDECNOD,U,8) ;data entry clerk "RTN","SDEC08",337,0) S SDECLEN=$P(SDECNOD,U,18) ;length of appt in minutes "RTN","SDEC08",338,0) S SDECNOTE=$G(^SDEC(409.84,SDECAPTID,1,1,0)) ;note from SDEC APPOINTMENT "RTN","SDEC08",339,0) S SDECPATID=$P(SDECNOD,U,5) ;pointer to VA PATIENT file 2 "RTN","SDEC08",340,0) S SDECSC1=$P($G(SDECNOD),U,7) ;resource "RTN","SDEC08",341,0) S SDECSTART=$P(SDECNOD,U) ;appt start time "RTN","SDEC08",342,0) S SDECWKIN=$P($G(SDECNOD),U,13) ;walk-in "RTN","SDEC08",343,0) ;lock SDEC node "RTN","SDEC08",344,0) L +^SDEC(409.84,SDECPATID):5 I '$T D ERR(SDECI+1,"Another user is working with this patient's record. Please try again later",+SDECPATID,0) Q ;BI/SD*5.3*740 "RTN","SDEC08",345,0) ;un-cancel SDEC APPOINTMENT "RTN","SDEC08",346,0) D SDECUCAN(SDECAPTID) "RTN","SDEC08",347,0) I SDECSC1]"",$D(^SDEC(409.831,SDECSC1,0)) D I +$G(SDECZ) S SDECERR=SDECERR_$P(SDECZ,U,2) D ERR(SDECI,SDECERR,+SDECPATID,1) Q ;BI/SD*5.3*740 "RTN","SDEC08",348,0) . S SDECLOC="" "RTN","SDEC08",349,0) . S SDECNOD=^SDEC(409.831,SDECSC1,0) "RTN","SDEC08",350,0) . S SDECLOC=$P(SDECNOD,U,4) ;HOSPITAL LOCATION ;support for single HOSPITAL LOCATION in SDEC RESOURCE "RTN","SDEC08",351,0) . I SDECLOC="" S SDECLOC=$$SDCL^SDECUTL(SDECAPTID) ;HOSPITAL LOCATION "RTN","SDEC08",352,0) . Q:'+SDECLOC "RTN","SDEC08",353,0) . ;un-cancel patient appointment and re-instate clinic appointment "RTN","SDEC08",354,0) . S SDECZ="" "RTN","SDEC08",355,0) . D APUCAN(.SDECZ,SDECLOC,SDECPATID,SDECSTART,SDECDAM,SDECDEC,SDECLEN,SDECNOTE,SDECSC1,SDECWKIN) "RTN","SDEC08",356,0) L -^SDEC(409.84,SDECPATID) "RTN","SDEC08",357,0) S SDECI=SDECI+1 "RTN","SDEC08",358,0) S ^TMP("SDEC",$J,SDECI)=""_$C(30) "RTN","SDEC08",359,0) S SDECI=SDECI+1 "RTN","SDEC08",360,0) S ^TMP("SDEC",$J,SDECI)=$C(31) "RTN","SDEC08",361,0) Q "RTN","SDEC08",362,0) ; "RTN","SDEC08",363,0) SDECUCAN(SDECAPTID) ;called internally to update SDEC APPOINTMENT by clearing cancel date/time "RTN","SDEC08",364,0) N PROVIEN,SDAPTYP,SDCL,SDRES "RTN","SDEC08",365,0) S SDECIENS=SDECAPTID_"," "RTN","SDEC08",366,0) S SDECFDA(409.84,SDECIENS,.12)="" "RTN","SDEC08",367,0) K SDECMSG "RTN","SDEC08",368,0) D FILE^DIE("","SDECFDA","SDECMSG") "RTN","SDEC08",369,0) S SDAPTYP=$$GET1^DIQ(409.84,SDECAPTID_",",.22,"I") "RTN","SDEC08",370,0) I $P(SDAPTYP,";",2)="GMR(123," D "RTN","SDEC08",371,0) .S SDCL=$$SDCL^SDECUTL(SDECAPTID) "RTN","SDEC08",372,0) .S PROVIEN=$$GET1^DIQ(44,SDCL_",",16,"I") "RTN","SDEC08",373,0) .D REQSET^SDEC07A($P(SDAPTYP,";",1),PROVIEN,"",1) "RTN","SDEC08",374,0) Q "RTN","SDEC08",375,0) ; "RTN","SDEC08",376,0) APUCAN(SDECZ,SDECLOC,SDECPATID,SDECSTART,SDECDAM,SDECDEC,SDECLEN,SDECNOTE,SDECRES,SDECWKIN) ; "RTN","SDEC08",377,0) ;un-Cancel appointment for patient SDECDFN in clinic SDECSC1 "RTN","SDEC08",378,0) ; SDECLOC = pointer to hospital location ^SC file 44 "RTN","SDEC08",379,0) ; SDECPATID = pointer to VA Patient ^DPT file 2 "RTN","SDEC08",380,0) ; SDECSTART = Appointment time "RTN","SDEC08",381,0) ; SDECDAM = Date appointment made in FM format "RTN","SDEC08",382,0) ; SDECDEC = Data entry clerk - pointer to NEW PERSON file 200 "RTN","SDEC08",383,0) N SDECC,%H "RTN","SDEC08",384,0) S SDECC("PAT")=SDECPATID "RTN","SDEC08",385,0) S SDECC("CLN")=SDECLOC "RTN","SDEC08",386,0) S SDECC("ADT")=SDECSTART "RTN","SDEC08",387,0) S SDECC("NOTE")=SDECNOTE ;user note "RTN","SDEC08",388,0) S SDECC("RES")=SDECRES "RTN","SDEC08",389,0) S SDECC("USR")=DUZ "RTN","SDEC08",390,0) S SDECC("LEN")=SDECLEN "RTN","SDEC08",391,0) S SDECC("WKIN")=SDECWKIN "RTN","SDEC08",392,0) ; "RTN","SDEC08",393,0) S SDECZ=$$UNCANCEL(.SDECC) "RTN","SDEC08",394,0) Q "RTN","SDEC08",395,0) ; "RTN","SDEC08",396,0) UNCANCEL(BSDR) ;PEP; called to un-cancel appt "RTN","SDEC08",397,0) ; "RTN","SDEC08",398,0) ; Make call using: S ERR=$$UNCANCEL(.ARRAY) "RTN","SDEC08",399,0) ; "RTN","SDEC08",400,0) ; Input Array - "RTN","SDEC08",401,0) ; BSDR("PAT") = ien of patient in file 2 "RTN","SDEC08",402,0) ; BSDR("CLN") = ien of clinic in file 44 "RTN","SDEC08",403,0) ; BSDR("ADT") = appointment date and time "RTN","SDEC08",404,0) ; BSDR("USR") = user who un-canceled appt "RTN","SDEC08",405,0) ; BSDR("NOTE") = appointment note from SDEC APPOINTMENT "RTN","SDEC08",406,0) ; BSDR("LEN") = appt length in minutes (numeric) "RTN","SDEC08",407,0) ; BSDR("RES") = resource "RTN","SDEC08",408,0) ; BSDR("WKIN")= walk-in "RTN","SDEC08",409,0) ; "RTN","SDEC08",410,0) ;Output: error status and message "RTN","SDEC08",411,0) ; = 0 or null: everything okay "RTN","SDEC08",412,0) ; = 1^message: error and reason "RTN","SDEC08",413,0) ; "RTN","SDEC08",414,0) N DPTNOD,DPTNODR "RTN","SDEC08",415,0) I '$D(^DPT(+$G(BSDR("PAT")),0)) Q 1_U_"Patient not on file: "_$G(BSDR("PAT")) "RTN","SDEC08",416,0) I '$D(^SC(+$G(BSDR("CLN")),0)) Q 1_U_"Clinic not on file: "_$G(BSDR("CLN")) "RTN","SDEC08",417,0) I $G(BSDR("ADT")) S BSDR("ADT")=+$E(BSDR("ADT"),1,12) ;remove seconds "RTN","SDEC08",418,0) I $G(BSDR("ADT"))'?7N1".".4N Q 1_U_"Appt Date/Time error: "_$G(BSDR("ADT")) "RTN","SDEC08",419,0) I '$D(^VA(200,+$G(BSDR("USR")),0)) Q 1_U_"User Who Canceled Appt Error: "_$G(BSDR("USR")) "RTN","SDEC08",420,0) ; "RTN","SDEC08",421,0) S SDECERR=$$APPVISTA^SDEC07B(BSDR("LEN"),BSDR("NOTE"),BSDR("PAT"),BSDR("RES"),BSDR("ADT"),BSDR("WKIN"),BSDR("CLN"),.SDECI) ;alb/sat 665 APPVISTA moved to SDEC07B "RTN","SDEC08",422,0) Q SDECERR "RTN","SDEC08",423,0) ; "RTN","SDEC08",424,0) ERR(SDECI,SDECERR,SDECPATID,LOCK) ;Error processing BI/SD*5.3*740 added two parameters "RTN","SDEC08",425,0) S SDECI=SDECI+1 "RTN","SDEC08",426,0) S SDECERR=$TR(SDECERR,"^","~") "RTN","SDEC08",427,0) ;TROLLBACK "RTN","SDEC08",428,0) S ^TMP("SDEC",$J,SDECI)=SDECERR_$C(30) "RTN","SDEC08",429,0) S SDECI=SDECI+1 "RTN","SDEC08",430,0) S ^TMP("SDEC",$J,SDECI)=$C(31) "RTN","SDEC08",431,0) I $G(LOCK)=1 L -^SDEC(409.84,SDECPATID) ;BI/SD*5.3*740 "RTN","SDEC08",432,0) Q "RTN","SDEC08",433,0) ; "RTN","SDEC08",434,0) ETRAP ;EP Error trap entry "RTN","SDEC08",435,0) D ^%ZTER "RTN","SDEC08",436,0) I '$D(SDECI) N SDECI S SDECI=999999 "RTN","SDEC08",437,0) S SDECI=SDECI+1 "RTN","SDEC08",438,0) D ERR(SDECI,"SDEC08 Error") "RTN","SDEC08",439,0) Q "VER") 8.0^22.2 "BLD",11718,6) ^601 **END** **END**