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

SDES2CHECKIN.m

Go to the documentation of this file.
  1. SDES2CHECKIN ;ALB/LAB,TJB,JAS - SDES VISTA SCHEDULING SDES2 CHECKIN ;May 1,2024@10:00
  1. ;;5.3;Scheduling;**866,878**;Aug 13, 1993;Build 11
  1. ;;Per VHA Directive 6402, this routine should not be modified
  1. Q
  1. ; Copied from SDESCHECKIN to be in SDES2 namespace
  1. ; CHECKIN(SDRETURN,SDAPPTIEN,SDCHECKINDTTIM,SDPROVIDER) ;Check in appointment
  1. CHECKIN(SDRETURN,SDCONTEXT,SDPARAM) ;Check in appointment
  1. ;INPUT -
  1. ; SDCONTEXT("ACHERON AUDIT ID") = Up to 40 Character unique ID number. Ex: 11d9dcc6-c6a2-4785-8031-8261576fca37
  1. ; SDCONTEXT("PATIENT DFN") = The DFN/IEN of the target patient from the calling application.
  1. ; SDCONTEXT("PATIENT ICN") = The ICN of the target patient from the calling application.
  1. ; SDCONTEXT("USER DUZ") = The DUZ of the user taking action in the calling application.
  1. ; SDCONTEXT("USER SECID") = The SECID of the user taking action in the calling application.
  1. ;
  1. ; SDPARAM("APPOINTMENT IEN")=IEN The appointment IEN from the SDES APPOINTMENT (#409.84) file. (required)
  1. ; SDPARAM("CHECKIN DATE TIME")=DATE ISO DATE and TIME to check-in the patient (required)
  1. ; SDPARAM("PROVIDER")=IEN IEN of the PROVIDER in file NEW PERSON (#200)
  1. ;
  1. ;RETURN PARMETER:
  1. ; {
  1. ; "Checkin":[
  1. ; "Checked In."
  1. ; ]
  1. ; }
  1. ;
  1. N BSDVSTN,EMSG,ERRORS,RETURN
  1. N SDECNOD,DFN,SDECSTART,DIK,DA,SDECID,SDECI,SDECIENS,SDECVEN,SDCLINICIEN
  1. N SDECNOEV,SDECCAN,SDRESOURCE,%DT,X,Y
  1. S SDECNOEV=1 ;Don't execute protocol
  1. ;
  1. D VALCONTEXT^SDES2VALCONTEXT(.ERRORS,.SDCONTEXT)
  1. I $D(ERRORS) S ERRORS("Checkin",1)="" D BUILDJSON^SDES2JSON(.SDRETURN,.ERRORS) Q
  1. D VALIDATEAPPT(.ERRORS,$G(SDPARAM("APPOINTMENT IEN")))
  1. D:'$D(ERRORS) ASSIGNCLININFO($G(SDPARAM("APPOINTMENT IEN")),.SDCLINICIEN,.SDCLINSTOP) ;need clinic ien for checkin time conversion
  1. S SDPARAM("CHECKIN DATE TIME")=$G(SDPARAM("CHECKIN DATE TIME"))
  1. I '$D(ERRORS) S SDPARAM("CHECKIN DATE TIME")=$$VALIDATECHKINDT(.ERRORS,SDPARAM("CHECKIN DATE TIME"),SDCLINICIEN)
  1. D VALPROVIDER^SDES2VAL200(.ERRORS,$G(SDPARAM("PROVIDER")))
  1. I $D(ERRORS) S ERRORS("Checkin",1)="" M RETURN=ERRORS
  1. I '$D(ERRORS) D
  1. . D PROCESSCHECKIN(SDPARAM("APPOINTMENT IEN"),$G(SDPARAM("PROVIDER")),SDCLINICIEN,$G(SDCONTEXT("USER DUZ")),SDCLINSTOP,SDPARAM("CHECKIN DATE TIME"),$G(SDCONTEXT("ACHERON AUDIT ID")),.ERRORS)
  1. I '$D(ERRORS) D
  1. . S RETURN("Checkin")="Checked in"
  1. D BUILDJSON^SDES2JSON(.SDRETURN,.RETURN)
  1. Q
  1. ;
  1. VALIDATEAPPT(ERRORS,SDAPPTIEN) ;validate SDEC appointment ID
  1. ;invalid appointment ID is error 15
  1. N RET
  1. D VALFILEIEN^SDES2VALUTIL(.RET,.ERRORS,"409.84",SDAPPTIEN,1,,14,15)
  1. Q
  1. ;
  1. VALIDATECHKINDT(ERRORS,SDCHECKINDTTIM,SDCLINICIEN) ;validate checkin date/time (required)
  1. ; need to change to accept ISO 8601 date/time
  1. S SDCHECKINDTTIM=$$VALISODTTM^SDES2VALISODTTM(.ERRORS,$G(SDCHECKINDTTIM),SDCLINICIEN,1,21,22)
  1. Q SDCHECKINDTTIM
  1. ;
  1. ASSIGNCLININFO(SDAPPTIEN,CLINICIEN,CLINICSTOP) ;
  1. S CLINICIEN=$$GET1^DIQ(409.831,$$GET1^DIQ(409.84,SDAPPTIEN,.07,"I"),.04,"I")
  1. S CLINICSTOP=$$GET1^DIQ(44,CLINICIEN,8,"I")
  1. Q
  1. ;
  1. PROCESSCHECKIN(SDAPPTIEN,SDPROVIDER,SDCLINICIEN,SDDUZ,SDCLINICSTOP,SDCHECKINDTTIM,SDACHAUDIT,ERRORS) ;
  1. N DFN,SDECSTART,SDRESOURCE
  1. S DFN=$$GET1^DIQ(409.84,SDAPPTIEN,.05,"I") ; must use variable name DFN as it is needed to be defined for event logic.
  1. S SDECSTART=$$GET1^DIQ(409.84,SDAPPTIEN,.01,"I")
  1. S SDRESOURCE=$$GET1^DIQ(409.84,SDAPPTIEN,.07,"I")
  1. ; Hospital Location is required for CHECKIN
  1. I 'SDCLINICIEN]"",'$D(^SC(+SDCLINICIEN,0)) D ERRLOG^SDES2JSON(.ERRORS,342) Q
  1. I SDRESOURCE]"",$D(^SDEC(409.831,SDRESOURCE,0)) D
  1. . ;
  1. . ; Event driver "BEFORE" actions
  1. . N SDATA,SDDA,SDCIHDL ;
  1. . S SDDA=$$FIND(DFN,SDECSTART,SDCLINICIEN)
  1. . S SDATA=SDDA_U_DFN_U_SDECSTART_U_SDCLINICIEN,SDCIHDL=$$HANDLE^SDAMEVT(1) ;
  1. . D BEFORE^SDAMEVT(.SDATA,DFN,SDECSTART,SDCLINICIEN,SDDA,SDCIHDL) ;
  1. . ;
  1. . ; Checkin SDEC APPOINTMENT entry
  1. . D SDECCHK(SDAPPTIEN,SDCHECKINDTTIM,SDPROVIDER,$G(SDACHAUDIT)) ; sets field .03 (Checkin), in file 409.84
  1. . D APCHK(SDCLINICIEN,DFN,SDCHECKINDTTIM,SDECSTART,SDDUZ,SDCLINICSTOP,SDPROVIDER)
  1. . ;
  1. . ; Event driver "AFTER" actions
  1. . D AFTER^SDAMEVT(.SDATA,DFN,SDECSTART,SDCLINICIEN,SDDA,SDCIHDL) ;
  1. . ;
  1. . ; Execute event driver. 4=check in (see #409.66), 2=non-interactive
  1. . ;
  1. . D EVT^SDAMEVT(.SDATA,4,2,SDCIHDL)
  1. . Q
  1. ;
  1. Q
  1. ;
  1. SDECCHK(SDAPPTIEN,SDCHECKINDTTIM,SDPROVIDER,SDACHAUDIT) ;
  1. N SDECFDA,SDECMSG
  1. S SDECIENS=SDAPPTIEN_","
  1. S SDECFDA(409.84,SDECIENS,.03)=SDCHECKINDTTIM
  1. S SDECFDA(409.84,SDECIENS,.04)=$S(SDCHECKINDTTIM'="":$$NOW^XLFDT,1:"")
  1. S:$G(SDPROVIDER) SDECFDA(409.84,SDECIENS,.16)=SDPROVIDER
  1. S:$G(SDACHAUDIT)'="" SDECFDA(409.84,SDECIENS,100)=SDACHAUDIT
  1. D FILE^DIE("","SDECFDA","SDECMSG")
  1. Q
  1. ;
  1. FIND(DFN,APPTDTTM,CLINICIEN) ; -- return appt ifn for pat
  1. ; input: DFN := ifn of pat.
  1. ; APPTDTTM := appt d/t
  1. ; SDCL := ifn of clinic
  1. ; output: [returned] := ifn if pat has appt on date/time
  1. ;
  1. N CLNAPPTIEN,FND,APPTIEN
  1. S CLNAPPTIEN=99999
  1. S APPTIEN=0
  1. S FND=0
  1. F S CLNAPPTIEN=$O(^SC(CLINICIEN,"S",APPTDTTM,1,CLNAPPTIEN),-1) Q:('CLNAPPTIEN)!(FND) D
  1. . I $D(^SC(CLINICIEN,"S",APPTDTTM,1,CLNAPPTIEN,0)) D
  1. . . I DFN=+^SC(CLINICIEN,"S",APPTDTTM,1,CLNAPPTIEN,0) D
  1. . . . I $D(^DPT(+DFN,"S",APPTDTTM,0)) D
  1. . . . . I $$VALID(DFN,CLINICIEN,APPTDTTM,CLNAPPTIEN) D
  1. . . . . . S FND=1
  1. . . . . . S APPTIEN=CLNAPPTIEN
  1. Q APPTIEN
  1. ;
  1. APCHK(SDRESCLIN,DFN,SDCHECKINDTTIM,SDECSTART,SDDUZ,SDCLINSTOP,SDPROVIDER) ;
  1. ;Checkin appointment for patient DFN in clinic SDRESCLIN
  1. ;at time SDECSD
  1. N BSDMSG,SDECC
  1. S SDECC("PAT")=DFN
  1. S SDECC("HOS LOC")=SDRESCLIN
  1. S SDECC("CLINIC CODE")=SDCLINSTOP
  1. S SDECC("PROVIDER")=SDPROVIDER
  1. S SDECC("APPT DATE")=SDECSTART
  1. S SDECC("CDT")=SDCHECKINDTTIM
  1. S SDECC("USR")=$S(SDDUZ'="":SDDUZ,1:DUZ) ; DUZ
  1. ;Required by NEW API:
  1. S SDECC("SRV CAT")="A"
  1. S SDECC("TIME RANGE")=-1
  1. S SDECC("VISIT DATE")=SDCHECKINDTTIM
  1. S SDECC("SITE")=$$GETSITECODE(SDRESCLIN)
  1. S SDECC("VISIT TYPE")="V"
  1. S SDECC("CLN")=SDECC("HOS LOC")
  1. S SDECC("ADT")=SDECC("APPT DATE")
  1. ;
  1. N SDECOUT
  1. D GETVISIT^SDES2GETVISIT(.SDECOUT,.SDECC)
  1. Q
  1. ;
  1. VALID(DFN,CLINICIEN,APPTDTTM,SDDA) ; -- return valid appt. 1 for valid appt., 0 for not valid
  1. Q:($$GET1^DIQ(44.003,SDDA_","_APPTDTTM_","_CLINICIEN_",",310,"I")'="C") 1
  1. Q:($$GET1^DIQ(2.98,APPTDTTM_","_DFN_",",3,"I")["C") 1
  1. Q 0
  1. ;
  1. GETSITECODE(CLINICIEN) ; Get the SITE/INSTITUTION from the CLINIC IEN otherwise use DUZ(2)
  1. N SDDIV,CLINICSITECODE
  1. S SDDIV=$$GET1^DIQ(44,CLINICIEN_",",3.5,"I")
  1. S CLINICSITECODE=$$GET1^DIQ(40.8,SDDIV_",",.07,"I")
  1. Q $S(+CLINICSITECODE:CLINICSITECODE,1:DUZ(2))
  1. ;
  1. BUILDERROR(RESULT,JSONRETURN) ;
  1. N RETURNERROR
  1. M RETURNERROR=RESULT
  1. D BUILDJSON^SDESBUILDJSON(.JSONRETURN,.RETURNERROR)
  1. Q
  1. ;