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

SDESNOSHOW.m

Go to the documentation of this file.
  1. SDESNOSHOW ;ALB/BWF,BLB,ANU - VISTA SCHEDULING RPCS NOSHOW/UNDO NOSHOW ; OCT 25, 2023
  1. ;;5.3;Scheduling;**831,835,847,853,864**;Aug 13, 1993;Build 15
  1. ;;Per VHA Directive 6402, this routine should not be modified
  1. ;
  1. Q
  1. NOSHOW(SDESRES,APPTIEN) ;
  1. N DFN,APPTDTTM,REQTYPE,PROVIDER,NOTE,RESOURCE,SDECNOEV,SDESENCOUNTER,REQIEN,APPTIENS,NOSHOW
  1. N SDATA,SDCIHDL,SDDA,CURRENTSTAT,CURNOSHOWDTTM,ERRORS,RESTYPE,CLINICIEN,RESULT,UPDSTAT,FDA
  1. S SDECNOEV=1 ;Don't execute protocol
  1. ;
  1. S APPTIEN=$G(APPTIEN)
  1. ;validate appointment ID
  1. D VALAPPTIEN^SDESVALUTIL(.ERRORS,APPTIEN)
  1. I $D(ERRORS) S ERRORS("NoShow",1)="" D BUILDJSON^SDESBUILDJSON(.SDESRES,.ERRORS) Q
  1. ;
  1. D GETVARS(APPTIEN,.CURRENTSTAT,.CURNOSHOWDTTM,.DFN,.APPTDTTM,.PROVIDER,.REQIEN,.NOSHOW,.REQTYPE,.USERIEN,.RESOURCE)
  1. S SDESNOSHOWDTTM=$$NOW^XLFDT
  1. ;
  1. ; check resource and clinic validity
  1. I 'RESOURCE D ERRLOG^SDESJSON(.ERRORS,282)
  1. S CLINICIEN=$$GET1^DIQ(409.831,RESOURCE,.04,"I")
  1. I 'CLINICIEN D ERRLOG^SDESJSON(.ERRORS,283)
  1. ; already in noshow status
  1. I NOSHOW!(CURRENTSTAT="N"!(CURNOSHOWDTTM]"")) D ERRLOG^SDESJSON(.ERRORS,367)
  1. I $D(ERRORS) S ERRORS("NoShow",1)="" D BUILDJSON^SDESBUILDJSON(.SDESRES,.ERRORS) Q
  1. ; make sure no-show is not occuring before appointment date/time
  1. I SDESNOSHOWDTTM<APPTDTTM S ERRORS("NoShow",1)="" D ERRLOG^SDESJSON(.ERRORS,369)
  1. I $D(ERRORS) S ERRORS("NoShow",1)="" D BUILDJSON^SDESBUILDJSON(.SDESRES,.ERRORS) Q
  1. ;
  1. ; Event driver "BEFORE" actions
  1. S SDDA=$$FIND^SDESCHECKOUT(DFN,APPTDTTM,CLINICIEN)
  1. D BEFOREEVT(.SDATA,DFN,APPTDTTM,CLINICIEN,.SDCIHDL)
  1. ;
  1. ; Process no show
  1. ;
  1. D UPDNOSHOWSTAT(.ERRORS,APPTIEN,USERIEN,SDESNOSHOWDTTM,1)
  1. ; if an error was returned, build the JSON and quit
  1. I $D(ERRORS) D Q
  1. .D ERRLOG^SDESJSON(.ERRORS,370)
  1. .S ERRORS("NoShow",1)="" D BUILDJSON^SDESBUILDJSON(.SDESRES,.ERRORS) Q
  1. ;
  1. D APPTNOSHOW(.ERRORS,CLINICIEN,DFN,APPTDTTM,USERIEN,SDESNOSHOWDTTM,APPTIEN)
  1. I $D(ERRORS) D Q
  1. .D ERRLOG^SDESJSON(.ERRORS,371)
  1. .S ERRORS("NoShow",1)=""
  1. .D BUILDJSON^SDESBUILDJSON(.SDESRES,.ERRORS)
  1. ;
  1. ; only update PID if the updates to 409.84 and 2.98 were successful
  1. ; PID CHANGE ALLOWED Field in 409.85 based on whether no-show or cancel no-show
  1. S UPDSTAT=$$GET1^DIQ(409.84,APPTIEN,.17,"I")
  1. I REQTYPE="APPT",UPDSTAT="N" D
  1. .S FDA(409.85,REQIEN_",",19)=""
  1. .S FDA(409.85,REQIEN_",",20)=""
  1. .S FDA(409.85,REQIEN_",",21)=""
  1. .; 864
  1. .;S FDA(409.85,REQIEN_",",23)="OPEN"
  1. .S FDA(409.85,REQIEN_",",23)="O"
  1. .S FDA(409.85,REQIEN_",",49)=1
  1. .D FILE^DIE("","FDA") K FDA
  1. ;
  1. ; fix action required in PCE after no-show from GUI
  1. ; SDESENCOUNTER - outpatient encounter
  1. ; Anu
  1. ;S SDESENCOUNTER=$$GETAPT^SDESCHECKOUT(DFN,APPTDTTM,CLINICIEN)
  1. S SDESENCOUNTER=$$GETAPT^SDESCHECKOUT(DFN,APPTDTTM,CLINICIEN,.ERRORS)
  1. I $D(ERRORS) D Q
  1. .D ERRLOG^SDESJSON(.ERRORS,174)
  1. .S ERRORS("NoShow",1)=""
  1. .D BUILDJSON^SDESBUILDJSON(.SDESRES,.ERRORS)
  1. ;
  1. I SDESENCOUNTER D EN^SDCODEL(SDESENCOUNTER,2,"","NOSHOW") ;suppress event logging for cancel checkout when no-showing
  1. ;
  1. ; Event driver "AFTER" actions
  1. D AFTEREVTS(.SDATA,DFN,APPTDTTM,CLINICIEN,SDDA,SDCIHDL)
  1. ;
  1. S RESULT("NoShow")="No-show complete."
  1. D BUILDJSON^SDESBUILDJSON(.SDESRES,.RESULT)
  1. Q
  1. UNDONOSHOW(SDESRES,APPTIEN) ;
  1. N DFN,APPTDTTM,REQTYPE,CONS,CONSULTIEN,PROVIDER,NOTE,RESOURCE,SDECNOEV,SDESENCOUNTER,REQIEN,APPTIENS,NOSHOW,RESTXT
  1. N CURRENTSTAT,CURNOSHOWDTTM,ERRORS,RESTYPE,CLINICIEN,RESULT,UPDSTAT,FDA
  1. N SDATA,SDCIHDL,SDDA
  1. S SDECNOEV=1 ;Don't execute protocol
  1. ;
  1. S APPTIEN=$G(APPTIEN)
  1. ;validate appointment ID
  1. D VALAPPTIEN^SDESVALUTIL(.ERRORS,APPTIEN)
  1. I $D(ERRORS) S ERRORS("UndoNoShow",1)="" D BUILDJSON^SDESBUILDJSON(.SDESRES,.ERRORS) Q
  1. ;
  1. D GETVARS(APPTIEN,.CURRENTSTAT,.CURNOSHOWDTTM,.DFN,.APPTDTTM,.PROVIDER,.REQIEN,.NOSHOW,.REQTYPE,.USERIEN,.RESOURCE)
  1. S SDESNOSHOWDTTM=""
  1. ;
  1. ; check resource and clinic validity
  1. I 'RESOURCE D ERRLOG^SDESJSON(.ERRORS,282)
  1. S CLINICIEN=$$GET1^DIQ(409.831,RESOURCE,.04,"I")
  1. I 'CLINICIEN D ERRLOG^SDESJSON(.ERRORS,283)
  1. ;
  1. ; if not in no-show already do not continue
  1. I 'NOSHOW!(CURRENTSTAT'="N") D ERRLOG^SDESJSON(.ERRORS,368)
  1. I $D(ERRORS) S ERRORS("UndoNoShow",1)="" D BUILDJSON^SDESBUILDJSON(.SDESRES,.ERRORS) Q
  1. ;
  1. ; Event driver "BEFORE" actions
  1. S SDDA=$$FIND^SDESCHECKOUT(DFN,APPTDTTM,CLINICIEN)
  1. D BEFOREEVT(.SDATA,DFN,APPTDTTM,CLINICIEN,.SDCIHDL)
  1. ;
  1. ; Process no show
  1. ;
  1. D UPDNOSHOWSTAT(.ERRORS,APPTIEN,USERIEN,SDESNOSHOWDTTM,0)
  1. ; if an error was returned, build the JSON and quit
  1. I $D(ERRORS) D Q
  1. .D ERRLOG^SDESJSON(.ERRORS,370)
  1. .S ERRORS("UndoNoShow",1)="" D BUILDJSON^SDESBUILDJSON(.SDESRES,.ERRORS) Q
  1. ;
  1. D APPTUNDONOSHOW(.ERRORS,CLINICIEN,DFN,APPTDTTM,USERIEN,SDESNOSHOWDTTM,APPTIEN)
  1. I $D(ERRORS) D Q
  1. .D ERRLOG^SDESJSON(.ERRORS,371)
  1. .S ERRORS("UndoNoShow",1)=""
  1. .D BUILDJSON^SDESBUILDJSON(.SDESRES,.ERRORS)
  1. ;
  1. ; only update PID if the updates to 409.84 and 2.98 were successful
  1. ; PID CHANGE ALLOWED Field in 409.85 based on whether no-show or cancel no-show
  1. S UPDSTAT=$$GET1^DIQ(409.84,APPTIEN,.17,"I")
  1. I REQTYPE="APPT",UPDSTAT'="N" D
  1. .S FDA(409.85,REQIEN_",",19)=""
  1. .S FDA(409.85,REQIEN_",",20)=""
  1. .S FDA(409.85,REQIEN_",",21)=""
  1. .; 864
  1. .;S FDA(409.85,REQIEN_",",23)="CLOSED"
  1. .S FDA(409.85,REQIEN_",",23)="C"
  1. .S FDA(409.85,REQIEN_",",49)=0
  1. .D FILE^DIE("","FDA") K FDA
  1. ;
  1. ;
  1. ; fix action required in PCE after no-show from GUI
  1. ; SDESENCOUNTER - outpatient encounter
  1. ; Anu
  1. ;S SDESENCOUNTER=$$GETAPT^SDESCHECKOUT(DFN,APPTDTTM,CLINICIEN)
  1. S SDESENCOUNTER=$$GETAPT^SDESCHECKOUT(DFN,APPTDTTM,CLINICIEN,.ERRORS)
  1. I $D(ERRORS) D Q
  1. .D ERRLOG^SDESJSON(.ERRORS,174)
  1. .S ERRORS("UndoNoShow",1)=""
  1. .D BUILDJSON^SDESBUILDJSON(.SDESRES,.ERRORS)
  1. ;
  1. I SDESENCOUNTER D EN^SDCODEL(SDESENCOUNTER,2,"","NOSHOW") ;suppress event logging for cancel checkout when no-showing
  1. ;
  1. ; Event driver "AFTER" actions
  1. ;
  1. ;remove undo no-show from grid; /BLB/
  1. ;
  1. I REQTYPE="CONSULT" D CONSREQUESTSET(PROVIDER,APPTDTTM,RESOURCE)
  1. D AFTEREVTS(.SDATA,DFN,APPTDTTM,CLINICIEN,SDDA,SDCIHDL)
  1. ;
  1. S RESULT("UndoNoShow")="Undo No-show complete."
  1. D BUILDJSON^SDESBUILDJSON(.SDESRES,.RESULT)
  1. Q
  1. ; get variables needed for processing
  1. GETVARS(APPTIEN,CURRENTSTAT,CURNOSHOWDTTM,DFN,APPTDTTM,PROVIDER,REQIEN,NOSHOW,REQTYPE,USERIEN,RESOURCE) ;
  1. N APPTIENS,APPTDAT,APPTERR
  1. S APPTIENS=APPTIEN_","
  1. D GETS^DIQ(409.84,APPTIENS,".01;.05;.07;.16;.17;.1;.101;.102;.22","I","APPTDAT","APPTERR")
  1. S CURRENTSTAT=$G(APPTDAT(409.84,APPTIENS,.17,"I"))
  1. S CURNOSHOWDTTM=$G(APPTDAT(409.84,APPTIENS,.101,"I"))
  1. S DFN=$G(APPTDAT(409.84,APPTIENS,.05,"I"))
  1. S APPTDTTM=$G(APPTDAT(409.84,APPTIENS,.01,"I"))
  1. S PROVIDER=$G(APPTDAT(409.84,APPTIENS,.16,"I"))
  1. S REQIEN=$P($G(APPTDAT(409.84,APPTIENS,.22,"I")),";")
  1. S NOSHOW=$G(APPTDAT(409.84,APPTIENS,.1,"I"))
  1. S REQTYPE=$$GET1^DIQ(409.84,APPTIENS,.22,"E")
  1. S USERIEN=$G(DUZ)
  1. S RESOURCE=$G(APPTDAT(409.84,APPTIENS,.07,"I"))
  1. Q
  1. ;
  1. CONSREQUESTSET(PROVIDER,APPTDTTM,RESOURCE) ;
  1. N REQTYPE,CONS,CONSULTIEN,NOTE
  1. S REQTYPE=$$GET1^DIQ(409.84,APPTIEN,.22,"E")
  1. I REQTYPE="CONSULT" D
  1. .S CONS=$$GET1^DIQ(409.84,APPTIEN,.22,"I")
  1. .S CONSULTIEN=$P(CONS,";",1)
  1. .S NOTE=$$GET1^DIQ(409.84,APPTIEN,1,"E")
  1. .D REQSET^SDESCONSULTUPD(CONSULTIEN,PROVIDER,,1,,NOTE,APPTDTTM,RESOURCE)
  1. Q
  1. ;
  1. ; update file 2 info
  1. ;Set noshow for patient DFN in CLINICIEN SDCL
  1. ;at time SDT
  1. APPTNOSHOW(ERRORS,SDCL,DFN,SDT,USERIEN,SDECCDT,SDAPID) ;
  1. N SDRTYP,SDECIENS,SDFDA,SDECMSG,IEN
  1. S SDECIENS=SDT_","_DFN_","
  1. S SDFDA(2.98,SDECIENS,3)="N"
  1. S SDFDA(2.98,SDECIENS,14)=USERIEN
  1. S SDFDA(2.98,SDECIENS,15)=SDECCDT
  1. D FILE^DIE("","SDFDA","SDECMSG")
  1. I $D(SDECMSG) D ERRLOG^SDESJSON(.ERRORS,52,$G(SDECMSG("DIERR",1,"TEXT",1))) Q
  1. D UPDCNSLT(SDAPID,DFN,SDCL,SDT)
  1. Q
  1. ; Remove no-show fields from file 2
  1. APPTUNDONOSHOW(ERRORS,SDCL,DFN,SDT,USERIEN,SDECCDT,SDAPID) ;
  1. N SDRTYP,SDECIENS,SDFDA,SDECMSG,IEN
  1. S SDECIENS=SDT_","_DFN_","
  1. S SDFDA(2.98,SDECIENS,3)=""
  1. S SDFDA(2.98,SDECIENS,14)=""
  1. S SDFDA(2.98,SDECIENS,15)=""
  1. D FILE^DIE("","SDFDA","SDECMSG")
  1. I $D(SDECMSG) D ERRLOG^SDESJSON(.ERRORS,52,$G(SDECMSG("DIERR",1,"TEXT",1))) Q
  1. D UPDCNSLT(SDAPID,DFN,SDCL,SDT)
  1. Q
  1. ; update consult
  1. UPDCNSLT(SDAPID,DFN,SDCL,SDT) ;
  1. N SDRTYP,IEN,SDRES
  1. S SDRTYP=$$GET1^DIQ(409.84,SDAPID_",",.22,"I")
  1. I $P(SDRTYP,";",2)="GMR(123," D
  1. .S IEN=$$SCIEN^SDECU2(DFN,SDCL,SDT)
  1. .D NOSHOW^SDCNSLT(SDCL,SDT,DFN,$P(SDRTYP,";",1),IEN)
  1. ;for Recall Request APPT NOSHOW
  1. I $P(SDRTYP,";",2)="SD(403.5," D REOPEN^SDESRECALLREQ(.SDESRES,APPTIEN,SDRTYP)
  1. Q
  1. ; set 409.84 no-show fields
  1. UPDNOSHOWSTAT(ERRORS,APPTIEN,USERIEN,SDESNOSHOWDTTM,NOSHOWSTAT) ;
  1. N SDFDA,SDECIENS,SDECMSG
  1. S SDECIENS=APPTIEN_","
  1. S SDFDA(409.84,SDECIENS,.1)=NOSHOWSTAT ;NOSHOW
  1. S SDFDA(409.84,SDECIENS,.101)=$G(SDESNOSHOWDTTM) ;NOSHOW DATE
  1. S SDFDA(409.84,SDECIENS,.102)=$G(USERIEN) ;NOSHOW USER
  1. S SDFDA(409.84,SDECIENS,.17)=$S(NOSHOWSTAT:"N",1:"") ; Update STATUS
  1. D FILE^DIE("","SDFDA","SDECMSG")
  1. I $D(SDECMSG("DIERR")) S SDECMSG=$G(SDECMSG("DIERR",1,"TEXT",1)) D ERRLOG^SDESJSON(.ERRORS,52,SDECMSG)
  1. Q
  1. ;
  1. BEFOREEVT(SDATA,DFN,APPTDTTM,CLINICIEN,SDCIHDL) ;
  1. S SDATA=SDDA_U_DFN_U_APPTDTTM_U_CLINICIEN
  1. S SDCIHDL=$$HANDLE^SDAMEVT(1)
  1. D BEFORE^SDAMEVT(.SDATA,DFN,APPTDTTM,CLINICIEN,SDDA,SDCIHDL)
  1. Q
  1. AFTEREVTS(SDATA,DFN,APPTDTTM,CLINICIEN,SDDA,SDCIHDL) ;
  1. D AFTER^SDAMEVT(.SDATA,DFN,APPTDTTM,CLINICIEN,SDDA,SDCIHDL)
  1. ; Execute event driver. 3=no show (see #409.66), 2=non-interactive
  1. D EVT^SDAMEVT(.SDATA,3,2,SDCIHDL) ;
  1. Q