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

SDESCHECKOUT.m

Go to the documentation of this file.
  1. SDESCHECKOUT ;ALB/BWF,CGP,JAS,ANU - Checkout Appointment - VISTA SCHEDULING RPCS ;JAN 11, 2024
  1. ;;5.3;Scheduling;**826,827,836,853,867,869**;Aug 13, 1993;Build 13
  1. ;;Per VHA Directive 6402, this routine should not be modified
  1. ; Reference to MAS PARAMETERS in ICR #483
  1. ; Reference to WARD LOCATION in ICR #1377
  1. ; Reference to MAS PARAMETERS in ICR #2296
  1. ; Reference to VISIT in ICR #2028
  1. ;
  1. Q
  1. CHECKOUT(SDECY,APPTIEN,CHKOUTDT) ;Check Out appt
  1. ; Returns SDECY
  1. ; Input -- APPTIEN Appt IEN from 409.84
  1. ; CHKOUTDT Appt Checkout Date/Time in ISO
  1. ;
  1. N CLINICIEN,SDASK,SDCOACT,SDDA,SDLNE,SDQUIET,APPTIENS,RESOURCE,ERRORS,DFN,APPTDATA,DFN,RESOURCE,CLINICIEN,CHKOUT
  1. S APPTIEN=$G(APPTIEN),CHKOUTDT=$G(CHKOUTDT)
  1. D VALAPPTIEN^SDESVALUTIL(.ERRORS,APPTIEN)
  1. S APPTIENS=APPTIEN_","
  1. D GETS^DIQ(409.84,APPTIENS,".01;.05;.07;.12;.16","I","APPTDATA")
  1. I $G(APPTDATA(409.84,APPTIENS,.12,"I")) D ERRLOG^SDESJSON(.ERRORS,322)
  1. S APPTDTTM=$G(APPTDATA(409.84,APPTIENS,.01,"I"))
  1. S DFN=$G(APPTDATA(409.84,APPTIENS,.05,"I"))
  1. S RESOURCE=$G(APPTDATA(409.84,APPTIENS,.07,"I"))
  1. S VPRV=$G(APPTDATA(409.84,APPTIENS,.16,"I"))
  1. S CLINICIEN=$$GET1^DIQ(409.831,RESOURCE,.04,"I")
  1. S CHKOUTDT=$$VALCHKOUTDT(.ERRORS,CHKOUTDT,CLINICIEN)
  1. I $D(ERRORS) S ERRORS("CheckOut",1)="" D BUILDJSON^SDESBUILDJSON(.SDECY,.ERRORS) Q
  1. ;
  1. S SDDA=0
  1. S SDASK=0
  1. S SDCOACT="CO"
  1. S SDLNE=""
  1. S SDQUIET=1
  1. ; Event driver "BEFORE" actions - from SD*5.3*717 10/25/18
  1. N SDATA,SDDA,SDCIHDL ;
  1. S SDDA=$$FIND(DFN,APPTDTTM,CLINICIEN)
  1. I 'SDDA D Q
  1. .D ERRLOG^SDESJSON(.ERRORS,317)
  1. .S ERRORS("CheckOut",1)="" D BUILDJSON^SDESBUILDJSON(.SDECY,.ERRORS)
  1. I '$$GET1^DIQ(44.003,SDDA_","_APPTDTTM_","_CLINICIEN_",",309,"I") D Q
  1. .D ERRLOG^SDESJSON(.ERRORS,318)
  1. .S ERRORS("CheckOut",1)="" D BUILDJSON^SDESBUILDJSON(.SDECY,.ERRORS)
  1. ;
  1. S SDATA=SDDA_U_DFN_U_APPTDTTM_U_CLINICIEN
  1. S SDCIHDL=$$HANDLE^SDAMEVT(1) ;
  1. ; Event driver "BEFORE"
  1. D BEFORE^SDAMEVT(.SDATA,DFN,APPTDTTM,CLINICIEN,SDDA,SDCIHDL) ;
  1. ; Appointment checkout
  1. D CHKOUT(DFN,APPTDTTM,CLINICIEN,SDDA,SDASK,CHKOUTDT,SDCOACT,SDLNE,APPTIEN,SDQUIET,VPRV,.ERRORS)
  1. ; Skip event driver actions if err occurred checking appointment out. - wtc SD*5.3*717 10/25/2018
  1. I $D(ERRORS) S ERRORS("CheckOut",1)="" D BUILDJSON^SDESBUILDJSON(.SDECY,.ERRORS) Q
  1. ; Event driver "AFTER"
  1. D AFTER^SDAMEVT(.SDATA,DFN,APPTDTTM,CLINICIEN,SDDA,SDCIHDL) ;
  1. ; Execute event driver. 5=check out (see #409.66), 2=non-interactive
  1. D EVT^SDAMEVT(.SDATA,5,2,SDCIHDL) ;
  1. S CHKOUT("CheckOut",1)="Checked Out." D BUILDJSON^SDESBUILDJSON(.SDECY,.CHKOUT)
  1. Q
  1. VALCHKOUTDT(ERRORS,CHKOUTDT,CLINIC) ;
  1. N CHKOUTDTFM,CHKIN
  1. S CHKIN=$$GET1^DIQ(409.84,APPTIEN,.03,"I")
  1. S CHKOUTDTFM=""
  1. I CHKOUTDT="" D ERRLOG^SDESJSON(.ERRORS,23) Q CHKOUTDTFM
  1. S CHKOUTDTFM=$$ISOTFM^SDAMUTDT(CHKOUTDT,CLINIC)
  1. I CHKOUTDTFM<0 D ERRLOG^SDESJSON(.ERRORS,24) Q CHKOUTDTFM
  1. I $P(CHKOUTDTFM,".",2)="" D ERRLOG^SDESJSON(.ERRORS,321) Q CHKOUTDTFM
  1. ; checkout time cannot be in the future
  1. I CHKOUTDTFM>$$NOW^XLFDT D ERRLOG^SDESJSON(.ERRORS,320) Q CHKOUTDTFM
  1. ; checkout time is after checkin time
  1. I CHKOUTDTFM'>CHKIN D ERRLOG^SDESJSON(.ERRORS,52,"Check Out time must be at least 1 minute after the Check In time of "_$TR($$FMTE^XLFDT(CHKIN),"@"," ")_".")
  1. Q CHKOUTDTFM
  1. ;
  1. FIND(DFN,APPTDTTM,CLINICIEN) ; -- return appt ifn for pat
  1. ; input: DFN := ifn of pat.
  1. ; APPTDTTM := appt d/t
  1. ; CLINICIEN := ifn of clinic
  1. ; output: [returned] := ifn if pat has appt on date/time
  1. ;
  1. N Y,FOUND,RET
  1. S RET=""
  1. S (Y,FOUND)=0
  1. F S Y=$O(^SC(CLINICIEN,"S",APPTDTTM,1,Y)) Q:'Y!(FOUND) D
  1. .I '$D(^SC(CLINICIEN,"S",APPTDTTM,1,Y,0)) Q
  1. .I DFN'=$$GET1^DIQ(44.003,Y_","_APPTDTTM_","_CLINICIEN_",",.01,"I") Q
  1. .I $D(^DPT(DFN,"S",APPTDTTM,0)),$$VALID(DFN,CLINICIEN,APPTDTTM,Y) S FOUND=1,RET=Y Q
  1. Q RET
  1. ;
  1. VALID(DFN,CLINICIEN,APPTDTTM,SDDA) ;
  1. ; input: DFN := ifn of pat.
  1. ; APPTDTTM := appt d/t
  1. ; CLINICIEN := ifn of clinic
  1. ; SDDA := ifn of appt
  1. ; output: [returned] := 1 for valid appt., 0 for not valid
  1. N APPTCAN44,APPTCAN2
  1. S APPTCAN44=$$GET1^DIQ(44.003,SDDA_","_APPTDTTM_","_CLINICIEN_",",310,"I")
  1. S APPTCAN2=$$GET1^DIQ(2.98,APPTDTTM_","_DFN_",",3,"I")
  1. Q $S(APPTCAN44'="C":1,APPTCAN2["C":1,1:0)
  1. ;
  1. ; from CO^SDEC25A
  1. CHKOUT(DFN,APPTDTTM,CLINICIEN,SDDA,SDASK,CHKOUTDT,SDCOACT,SDLNE,SDECAPTID,SDQUIET,VPRV,ERRORS) ;Appt Check Out
  1. ; Input -- DFN Patient file IEN
  1. ; APPTDTTM Appointment Date/Time
  1. ; CLINICIEN Hospital Location file IEN for Appt
  1. ; SDDA IEN in ^SC multiple or null [Optional]
  1. ; SDASK Ask Check Out Date/Time [Optional]
  1. ; CHKOUTDT Date/Time of Check Out [Optional]
  1. ; SDCOACT Appt Mgmt Check Out Action [Optional]
  1. ; SDLNE Appt Mgmt Line Number [Optional]
  1. ; Input -- SDECAPTID Appointment ID
  1. ; SDQUIET No Terminal output 0=allow display 1=do not allow
  1. ; VPRV V Provider IEN - pointer to V PROVIDER file
  1. ; ERRORS Returned Array of errors
  1. ;
  1. N SDCOQUIT,SDOE,SDATA
  1. S SDATA=$G(^DPT(DFN,"S",APPTDTTM,0))
  1. ;-- if new encounter, pass to PCE
  1. I $$NEW(APPTDTTM) D Q
  1. .N SDCOED
  1. .;ANU - Add ERRORS
  1. .S SDOE=$$GETAPT(DFN,APPTDTTM,CLINICIEN,.ERRORS)
  1. .I $D(ERRORS) Q
  1. .;
  1. .S SDCOED=$$CHK($TR($$STATUS(DFN,APPTDTTM,CLINICIEN,SDATA,SDDA),";","^"))
  1. .; -- appt has already been checked out
  1. .I $$CODT(DFN,APPTDTTM,CLINICIEN,SDDA)!(SDCOED) D Q
  1. ..D ERRLOG^SDESJSON(.ERRORS,319)
  1. .D CHKOUT2(SDOE,DFN,APPTDTTM,CLINICIEN,CHKOUTDT,SDECAPTID,SDQUIET,VPRV,.ERRORS)
  1. Q
  1. CODT(DFN,SDT,SDCL,SDDA) ; -- does appt have co date
  1. Q $$GET1^DIQ(44.003,SDDA_","_SDT_","_SDCL_",",303,"I")
  1. ;
  1. NEW(DATE) ;-- return 1 if SD is turned on for
  1. ; Visit Tracking and optionally check if the date is past
  1. ; the cut over date for the new PCE interface.
  1. ; INPUT : DATE (Optional) Date to check for cut over.
  1. ; OUTPUT: 1 Yes, 0 No
  1. N SDRES,SDX,SDY
  1. I '$G(DATE) S DATE=DT
  1. ;-- is Scheduling on ?
  1. S SDRES=0,SDY=$$PKGON^VSIT("SD")
  1. ;-- if date is it pass cut over?
  1. S SDX=1 I $G(DATE) S SDX=$$SWITCHCK^PXAPI(DATE)
  1. ;-- And together
  1. I SDX,SDY S SDRES=1
  1. Q SDRES
  1. ;
  1. GETAPT(DFN,SDT,SDCL,SDVIEN,ERRORS) ;
  1. ; ANU - Added ERRORS
  1. ; This utility will return the existing IEN for an Outpatient
  1. ; Encounter. If it fails to find an existing encounter,
  1. ; it will create a new Encounter and return the new IEN.
  1. ;
  1. ; Input -- DFN Patient file IEN
  1. ; SDT Appointment Date/Time
  1. ; SDCL Hospital Location file IEN for Appt
  1. ; SDVIEN Visit file pointer [optional]
  1. ; Output -- Outpatient Encounter file IEN
  1. N Y
  1. S Y=$$GET1^DIQ(2.98,SDT_","_DFN_",",21,"I")
  1. I 'Y D APPT(DFN,SDT,SDCL,$G(SDVIEN),.ERRORS)
  1. I $D(ERRORS) Q +$G(Y)
  1. I '$D(ERRORS) S Y=$$GET1^DIQ(2.98,SDT_","_DFN_",",21,"I")
  1. ;
  1. I Y D VIEN(Y,$G(SDVIEN))
  1. Q +$G(Y)
  1. ;
  1. ; FROM APPT^SDVSIT
  1. APPT(DFN,SDT,SDCL,SDVIEN,ERRORS) ; -- process appt
  1. ; input DFN = ien of patient file entry
  1. ; SDT = visit date internal format
  1. ; SDCL = ien of hospital location file entry
  1. ; SDVIEN = Visit file pointer [optional]
  1. ;
  1. N SDVSIT,SDOE,DA,DIE,DR,SDPT,SDSC,SDCL0,SDDA,SDLOCK,SDLCKS
  1. ;
  1. ; -- set lock data and lock
  1. S SDLOCK("DFN")=DFN
  1. S SDLOCK("EVENT DATE/TIME")=SDT
  1. ;ANU
  1. ;D LOCK(.SDLOCK)
  1. I '$$LOCK(.SDLOCK) D ERRLOG^SDESJSON(.ERRORS,174) Q
  1. ;
  1. ; -- set node vars
  1. S SDPT=$G(^DPT(DFN,"S",SDT,0))
  1. S SDCL0=$G(^SC(SDCL,0)),SDDA=+$$FIND^SDAM2(DFN,SDT,SDCL)
  1. S SDSC=$G(^SC(SDCL,"S",SDT,1,SDDA,0))
  1. S SDVSIT("CLN")=$P(SDCL0,U,7),SDVSIT("DIV")=$$DIV($P(SDCL0,U,15))
  1. ;
  1. ; -- do checks
  1. I 'SDPT!('SDSC)!($P(SDCL0,U,3)'="C") D UNLOCK(.SDLOCK) Q
  1. I SDCL,+SDPT'=SDCL D UNLOCK(.SDLOCK) Q
  1. I $P(SDPT,U,20) D UNLOCK(.SDLOCK) Q
  1. I 'SDVSIT("CLN")!('SDVSIT("DIV")) D UNLOCK(.SDLOCK)
  1. ;
  1. ; -- set the rest
  1. S SDVSIT("DFN")=DFN,SDVSIT("LOC")=SDCL
  1. S:$P(SDSC,U,10) SDVSIT("ELG")=$P(SDSC,U,10)
  1. S:$P(SDPT,U,16) SDVSIT("TYP")=$P(SDPT,U,16)
  1. ;
  1. ; -- call logic to add opt encounter(s)
  1. S SDVSIT("ORG")=1,SDVSIT("REF")=SDDA,SDOE=$$SDOE(SDT,.SDVSIT,$G(SDVIEN))
  1. I SDOE D
  1. .;869 - Convert ///
  1. .;N DA,DIE,DR
  1. .;S DA=SDT,DA(1)=DFN,DR="21////"_SDOE,DIE="^DPT("_DFN_",""S""," D ^DIE
  1. .N FDAIENS,ERR298,FDA298
  1. .S FDAIENS=SDT_","_DFN_","
  1. .S FDA298(2.98,FDAIENS,21)=SDOE
  1. .D FILE^DIE(,"FDA298","ERR298")
  1. .;
  1. D CSTOP(SDOE,SDCL,.SDVSIT,SDT) ;Process credit stop if applicable
  1. D UNLOCK(.SDLOCK)
  1. Q
  1. ; FROM LOCK^SDVSIT
  1. ; Anu - function to return lock error
  1. ; Status = 1 if success, 0 if fail
  1. LOCK(SDLOCK) ; -- lock "ADFN" node
  1. N SDC
  1. ;F L +^SCE("ADFN",+$G(SDLOCK("DFN")),+$G(SDLOCK("EVENT DATE/TIME"))):$G(DILOCKTM,3) Q:$T ;LLS - 05-JAN-15 - SD*5.3*630 added timeout on lock
  1. F SDC=1:1:5 L +^SCE("ADFN",+$G(SDLOCK("DFN")),+$G(SDLOCK("EVENT DATE/TIME"))):$G(DILOCKTM,3) Q:$T
  1. I $T Q 1
  1. Q 0
  1. ; FROM UNLOCK^SDVSIT
  1. UNLOCK(SDLOCK) ; -- unlock "ADFN" node
  1. L -^SCE("ADFN",+$G(SDLOCK("DFN")),+$G(SDLOCK("EVENT DATE/TIME")))
  1. Q
  1. ; FROM SDOE^SDVSIT
  1. SDOE(SDT,SDVSIT,SDVIEN,SDOEP) ; -- get visit & encounter
  1. N SDTR,SDI ;LLS 22-DEC-2014 - SD*5.3*630 - added
  1. S SDTR=9999999-$P(SDT,".") ;LLS 22-DEC-2014 - SD*5.3*630 - added
  1. I SDT["." S SDTR=SDTR_"."_$P(SDT,".",2) ;LLS 22-DEC-2014 - SD*5.3*630 - added
  1. I '$D(SDVSIT("PAR")),$G(SDVIEN)="" D ;LLS 22-DEC-2014 - SD*5.3*630 - added the following section
  1. .N SDVISARR,SDVIEN1
  1. .S SDVIEN1="" F S SDVIEN1=$O(^AUPNVSIT("AA",DFN,SDTR,SDVIEN1)) Q:SDVIEN1="" D Q:$G(SDVIEN)]""
  1. ..; COMPARE VISIT: SERVICE CATEGORY, POINTER TO CLINIC STOP FILE, POINTER TO #44
  1. ..; FILE, & ENCOUNTER TYPE BEFORE SELECTING EXISTING VISIT INSTEAD OF CREATING A NEW ONE
  1. ..D GETS^DIQ(9000010,SDVIEN1_",",".07;.08;.22;15003","I","SDVISARR")
  1. ..;Q:SDVISARR(9000010,SDVIEN1_",",.07,"I")'=$S($G(SDVSIT("SVC"))]"":SDVSIT("SVC"),$$INP^SDAM2(DFN,SDTR)="I":"I",1:"A")
  1. ..Q:SDVISARR(9000010,SDVIEN1_",",.07,"I")'=$S($G(SDVSIT("SVC"))]"":SDVSIT("SVC"),$$INP(DFN,SDTR)="I":"I",1:"A")
  1. ..Q:SDVISARR(9000010,SDVIEN1_",",.08,"I")'=$G(SDVSIT("CLN"))
  1. ..Q:SDVISARR(9000010,SDVIEN1_",",.22,"I")'=$G(SDVSIT("LOC"))
  1. ..Q:SDVISARR(9000010,SDVIEN1_",",15003,"I")'="P"
  1. ..S SDVIEN=SDVIEN1
  1. S SDVSIT("VST")=$G(SDVIEN)
  1. ; bwf - SD*826 - leaving calls to SDVSIT0 - consider bringing into SDES* namespace in the future
  1. I 'SDVSIT("VST") D VISIT^SDVSIT0(SDT,.SDVSIT)
  1. Q $$NEW^SDVSIT0(SDT,.SDVSIT)
  1. ;
  1. INP(DFN,VDATE) ; -- determine inpatient status ; dom is not an inpatient appt
  1. N SDINP,VAINDT,VADMVT,WARDLOC
  1. S SDINP="",VAINDT=VDATE D ADM^VADPT2 I 'VADMVT Q SDINP
  1. S WARDLOC=$$GET1^DIQ(405,VADMVT,.06,"I")
  1. I $$GET1^DIQ(43,1,16,"I"),$$GET1^DIQ(42,WARDLOC,.03,"I")="D" Q SDINP
  1. S SDINP="I"
  1. Q SDINP
  1. ;
  1. DIV(DIV) ; -- determine med div
  1. ; multi-div
  1. I $$GET1^DIQ(43,1,11,"I"),$D(^DG(40.8,+DIV,0)) Q DIV
  1. S DIV=+$O(^DG(40.8,0))
  1. Q DIV
  1. ;
  1. ; FROM CSTOP^SDVSIT
  1. CSTOP(SDOE,SDCL,SDVSIT,SDT) ;Process credit stop
  1. ;Input: SDOE=encounter ien
  1. ;Input: SDCL0=zeroeth node of HOSPITAL LOCATION file record
  1. ;Input: SDVSIT=visit data array (pass by reference)
  1. ;Input: SDT=encounter date/time
  1. ; -- does clinic have a credit stop code?
  1. ; -- process only if non non-count and not equal to credit
  1. ;
  1. N CREDSCODE,NONCOUNT,CLINSTOPCODE,CSTOPINACTDT,IENS,CLINDAT
  1. S IENS=SDCL_","
  1. D GETS^DIQ(44,IENS,"8;2502;2503","I","CLINDAT","ERR")
  1. S CREDSCODE=$G(CLINDAT(44,IENS,2503,"I"))
  1. S NONCOUNT=$G(CLINDAT(44,IENS,2502,"I"))
  1. S CLINSTOPCODE=$G(CLINDAT(44,IENS,8,"I"))
  1. S CSTOPINACTDT=$$GET1^DIQ(40.7,CLINSTOPCODE,2,"I")
  1. I SDOE,CREDSCODE,(CREDSCODE'=SDVSIT("CLN")),NONCOUNT'="Y" D
  1. .N X,SDVIENSV,SDVIENOR
  1. .; -- is stop code active?
  1. .I $S('CSTOPINACTDT:1,1:SDT<CSTOPINACTDT) D
  1. ..S SDVSIT("CLN")=CREDSCODE
  1. ..S SDVIENOR=$G(SDVSIT("ORG"))
  1. ..S SDVSIT("ORG")=4
  1. ..S SDVSIT("PAR")=SDOE
  1. ..S SDVIENSV=$G(SDVSIT("VST"))
  1. ..K SDVSIT("VST")
  1. ..S X=$$SDOE(SDT,.SDVSIT)
  1. ..I X D LOGDATA(X)
  1. ..; -- restore SDVSIT
  1. ..S SDVSIT("CLN")=CLINSTOPCODE
  1. ..S SDVSIT("ORG")=SDVIENOR
  1. ..S SDVSIT("VST")=SDVIENSV
  1. ..K SDVSIT("PAR")
  1. ..Q
  1. .Q
  1. Q
  1. LOGDATA(SDOE,SDLOG) ; -- log user, date/time and other data
  1. N DIE,DA,DR,Y,X
  1. S SDLOG("USER")=$G(DUZ)
  1. S SDLOG("DATE/TIME")=$$NOW^XLFDT()
  1. S DIE="^SCE(",DA=SDOE,DR="[SD ENCOUNTER LOG]" D ^DIE
  1. Q
  1. ;
  1. VIEN(SDOE,SDVIEN) ; -- stuff in Visit IEN if not already set
  1. ; -- needed for those sites that don't have
  1. ; scheduling turned on in Visit Tracking
  1. ; Required input SDOE = Outpatient Encounter pointer
  1. ; SDVIEN = Visit file pointer or null or zero
  1. ;
  1. ; -- quit if no vien passed
  1. Q:'SDVIEN
  1. ; -- quit is no encounter
  1. Q:'$D(^SCE(+SDOE,0))
  1. ; -- set visit ien if vien not already set
  1. I '$$GET1^DIQ(409.68,+SDOE,.05,"I") D
  1. .;869 - Convert ////
  1. .;S DIE="^SCE(",DA=SDOE,DR=".05////"_SDVIEN D ^DIE
  1. .N FDA40968,ERR40968
  1. .S FDA40968(409.68,SDOE_",",.05)=SDVIEN
  1. .D FILE^DIE(,"FDA40968","ERR40968") K FDA40968
  1. .;
  1. I '$$GET1^DIQ(409.68,+SDOE,.04,"I") D
  1. .;869 - Converting ////
  1. .N SDLOC,FDA40968,ERR40968
  1. .S SDLOC=$$GET1^DIQ(9000010,SDVIEN,.22,"I")
  1. .;I SDLOC S DIE="^SCE(",DA=SDOE,DR=".04////"_SDLOC D ^DIE
  1. .I SDLOC D
  1. ..S FDA40968(409.68,SDOE_",",.04)=SDLOC
  1. ..D FILE^DIE(,"FDA40968","ERR40968")
  1. Q
  1. ;
  1. ;CO^SDEC25B
  1. CHKOUT2(SDOE,DFN,APPTDTTM,CLINICIEN,CHKOUTDT,SDECAPTID,SDQUIET,VPRV,ERRORS) ;EP; called to ask check-out date/time ;SAT ADDED PARAMETERS CHKOUTDT, SDECAPTID, & SDQUIET
  1. ; Called by SDCO1
  1. ; SDOE = Outpatient Encounter IEN
  1. ; DFN = Patient IEN
  1. ; APPTDTTM = Appt Date/Time
  1. ; CLINICIEN = Clinic IEN
  1. ; CHKOUTDT = APPT CHECKOUT TIME [OPTIONAL - USED WHEN SDQUIET=1] USER ENTERED FORMAT
  1. ; SDECAPTID = APPT ID - POINTER TO ^SDECAPPT
  1. ; SDQUIET = ALLOW NO TERMINAL INPUT/OUTPUT 0=ALLOW; 1=DO NOT ALLOW
  1. ; VPRV = V Provider IEN - pointer to V PROVIDER file
  1. ; ERRORS = Returned Array of errors
  1. ;
  1. N DIE,DA,DR,SDECNOD,SDN,SDV,AUPNVSIT,PROVIEN40984,PSTAT
  1. ;
  1. ; 869 - Convert ///
  1. ;S DR="303///"_CHKOUTDT_";304///`"_DUZ_";306///"_$$NOW^XLFDT
  1. ;D ^DIE
  1. ;S DIE="^SC("_CLINICIEN_",""S"","_APPTDTTM_",1,"
  1. ;S DA(2)=CLINICIEN,DA(1)=APPTDTTM
  1. N IENS44,ERR44003,FDA
  1. S (DA,SDN)=$$SCIEN(DFN,CLINICIEN,APPTDTTM)
  1. S IENS44=$$GET44RECORDIENS^SDESCANCELAPPTS(CLINICIEN,APPTDTTM,DFN)
  1. S FDA(44.003,IENS44,303)=CHKOUTDT
  1. S FDA(44.003,IENS44,304)=DUZ
  1. S FDA(44.003,IENS44,306)=$$NOW^XLFDT
  1. D FILE^DIE(,"FDA","ERR44003") K ERR44003
  1. ;
  1. ; if checked out and status not updated, do it now
  1. I $$GET1^DIQ(44.003,DA_","_APPTDTTM_","_CLINICIEN_",",303,"I")]"" D
  1. .;UPDATE APPT SCHEDULE GLOBAL ^SDEC(409.84
  1. .I $G(SDECAPTID) D
  1. ..S PSTAT=$$GET1^DIQ(409.68,SDOE,.12,"I")
  1. ..;869 - Convert ///
  1. ..;S DA=SDECAPTID
  1. ..;S DR=".14///"_$G(CHKOUTDT)_";.19///"_PSTAT
  1. ..;D ^DIE
  1. ..N FDA40984,ERR40984
  1. ..S FDA40984(409.84,SDECAPTID_",",.14)=$G(CHKOUTDT)
  1. ..S FDA40984(409.84,SDECAPTID_",",.19)=$G(PSTAT)
  1. ..D FILE^DIE(,"FDA40984","ERR40984")
  1. ..;
  1. ..;possibly update VProvider
  1. ..S SDECNOD=^SDEC(409.84,SDECAPTID,0)
  1. ..S PROVIEN40984=$$GET1^DIQ(409.84,SDECAPTID,.15,"I")
  1. ..I $G(VPRV),PROVIEN40984 D
  1. ...;get SDEC appt schedule
  1. ...;869 - Convert ///
  1. ...;S DA=PROVIEN40984 ;S DR=".01///"_VPRV
  1. ...;D ^DIE
  1. ...N FDA91006,ERR91006
  1. ...S FDA91006(9000010.06,PROVIEN40984_",",.01)=VPRV
  1. ...D FILE^DIE(,"FDA91006","ERR91006") K FDA91006
  1. .;
  1. .Q:$$GET1^DIQ(409.68,SDOE,.12)="CHECKED OUT"
  1. .;869 - Convert ///
  1. .;S DIE=409.68,DA=SDOE,DR=".12///14;101///"_DUZ_";102///"_$$NOW^XLFDT
  1. .;D ^DIE
  1. .N FDA40968,ERR40968
  1. .S FDA40968(409.68,SDOE_",",.12)=14
  1. .S FDA40968(409.68,SDOE_",",101)=DUZ
  1. .S FDA40968(409.68,SDOE_",",102)=$$NOW^XLFDT
  1. .D FILE^DIE(,"FDA40968","ERR40968")
  1. .;
  1. .; if visit pointer stored, update visit checkout date/time
  1. .S SDV=$$GET1^DIQ(409.68,SDOE,.05,"I") Q:'SDV
  1. .Q:'$D(^AUPNVSIT(SDV,0)) Q:$$GET1^DIQ(9000010,SDV,.05,"I")'=DFN
  1. .Q:$$GET1^DIQ(9000010,SDV,.11,"I")=1 ;deleted
  1. .;cmi/maw 5/1/2009 PATCH 1010 RQMT 34
  1. .;869 - Convert ///
  1. .;S DIE="^AUPNVSIT(",DA=SDV
  1. .;S DR=".18///"_$$GET1^DIQ(44.003,SDN_","_APPTDTTM_","_CLINICIEN_",",303,"I")
  1. .;D ^DIE
  1. .N FDA9000010,ERR9000010
  1. .S FDA9000010(9000010,SDV_",",.18)=$$GET1^DIQ(44.003,SDN_","_APPTDTTM_","_CLINICIEN_",",303,"I")
  1. .D FILE^DIE(,"FDA9000010","ERR9000010") K FDA9000010
  1. .;
  1. Q
  1. ;
  1. SCIEN(PAT,CLINIC,DATE) ;PEP; returns ien for appt in ^SC
  1. NEW X,IEN
  1. S X=0 F S X=$O(^SC(CLINIC,"S",DATE,1,X)) Q:'X Q:$G(IEN) D
  1. . Q:$P($G(^SC(CLINIC,"S",DATE,1,X,0)),U,9)="C" ;cancelled
  1. . I +$G(^SC(CLINIC,"S",DATE,1,X,0))=PAT S IEN=X
  1. Q $G(IEN)
  1. ;
  1. ;
  1. CHK(SDSTB) ; -- is appointment checked out
  1. N Y
  1. I "^2^8^12^"[("^"_+SDSTB_"^"),$P(SDSTB,"^",3)["CHECKED OUT" S Y=1
  1. Q +$G(Y)
  1. ;
  1. STATUS(DFN,SDT,SDCL,SDATA,SDDA) ; -- return appt status
  1. ; input: DFN := ifn of pat.
  1. ; SDT := appt d/t
  1. ; SDCL := ifn of clinic
  1. ; SDATA := 0th node of pat appt entry
  1. ; SDDA := ifn for ^SC(clinic,"S",date,1,ifn) {optional}
  1. ; output: [returned] := appt status ifn ^ status name ^ print status ^
  1. ; check in d/t ^ check out d/t ^ adm mvt ifn
  1. ;
  1. ;S = status ; C = ci/co indicator ; Y = 'C' node ; P = print status
  1. N S,C,Y,P,VADMVT,VAINDT,STATUS,SDSCE,SDIEN,CHKINDT,CHKOUTDT
  1. ;
  1. ; -- get data for evaluation
  1. S:'$G(SDDA) SDDA=+$$FIND^SDAM2(DFN,SDT,SDCL)
  1. S CHKINDT=$$GET1^DIQ(44.003,SDDA_","_SDT_","_SDCL_",",309,"I")
  1. S CHKOUTDT=$$GET1^DIQ(44.003,SDDA_","_SDT_","_SDCL_",",303,"I")
  1. ;retrieve CHECK OUT from OUTPATIENT ENCOUNTER file if not in Hospital Location file/PURGED or edited
  1. S SDSCE=$$GET1^DIQ(2.98,SDT_","_DFN_",",21,"I")
  1. I SDSCE D ;pointer to OE
  1. .I CHKOUTDT="" S CHKOUTDT=$$GET1^DIQ(409.68,SDSCE,.07,"I")
  1. .S SDIEN=SDSCE_"," S STATUS=$$GET1^DIQ(409.68,SDIEN,.12)
  1. ;
  1. ; -- set initial status value ; non-count clinic?
  1. S S=$S($P(SDATA,"^",2)]"":$P($P($P(^DD(2.98,3,0),"^",3),$P(SDATA,"^",2)_":",2),";"),$P($G(^SC(SDCL,0)),U,17)="Y":"NON-COUNT",1:"")
  1. I SDSCE&(S="NO ACTION TAKEN") S S=""
  1. ;
  1. ; -- inpatient?
  1. S VAINDT=SDT D ADM^VADPT2
  1. I S["INPATIENT",$S('VADMVT:1,'$P(^DG(43,1,0),U,21):0,1:$P($G(^DIC(42,+$P($G(^DGPM(VADMVT,0)),U,6),0)),U,3)="D") S S=""
  1. ;
  1. ; -- determine ci/co indicator
  1. S C=$S(CHKOUTDT:"CHECKED OUT",CHKINDT:"CHECKED IN",S]"":"",SDT>(DT+.2359):"FUTURE",1:"NO ACTION TAKEN") S:S="" S=C
  1. ;
  1. I S="NO ACTION TAKEN",$P(SDT,".")=DT,C'["CHECKED" S C="TODAY"
  1. ; -- $$REQ & $$COCMP in SDM1A not used for speed
  1. I S="CHECKED OUT"!(S="CHECKED IN"),SDT'<$P(^DG(43,1,"SCLR"),U,23),'$P(SDATA,U,20) S S="NO ACTION TAKEN"
  1. ;
  1. ; -- determine print status
  1. S P=$S(S=C!(C=""):S,1:"")
  1. I P="" D
  1. .I S["INPATIENT",$P($G(^SC(SDCL,0)),U,17)'="Y",$P($G(^SCE(+$P(SDATA,U,20),0)),U,7)="" S P=$P(S," ")_"/ACT REQ" Q
  1. .I S="NO ACTION TAKEN",C="CHECKED OUT"!(C="CHECKED IN") S P="ACT REQ/"_C D Q
  1. ..I SDSCE I $P($G(^SCE(SDSCE,0)),U,7) S P="CHECKED OUT"
  1. .S P=$S(S="NO ACTION TAKEN":S,1:$P(S," "))_"/"_C
  1. I S["INPATIENT",C="" D
  1. .I SDT>(DT+.2359) S P=$P(S," ")_"/FUTURE" Q
  1. .S P=$P(S," ")_"/NO ACT TAKN"
  1. I S["INPATIENT" Q +$O(^SD(409.63,"AC",S,0))_";"_S_";"_P_";"_CHKINDT_";"_CHKOUTDT_";"_+VADMVT
  1. I S["NO-SHOW" Q +$O(^SD(409.63,"AC",S,0))_";"_S_";"_P_";"_CHKINDT_";"_CHKOUTDT_";"_+VADMVT
  1. I $G(SDSCE) I $D(^SCE(SDSCE,0)) D
  1. .I $G(STATUS)="NON-COUNT" D Q
  1. ..I CHKOUTDT S P="NON-COUNT/CHECKED OUT" Q
  1. ..I CHKINDT S P="NON-COUNT/CHECKED IN"
  1. .I $G(STATUS)="CHECKED OUT" S P="CHECKED OUT" Q
  1. .I CHKOUTDT S P="ACT REQ/CHECKED OUT" D Q
  1. ..I $G(STATUS)="ACTION REQUIRED" S S="NO ACTION TAKEN" Q
  1. ..I $G(STATUS)="" I $P($G(^SCE(SDSCE,0)),U,7) S P="CHECKED OUT"
  1. .I CHKINDT S P="ACT REQ/CHECKED IN" D
  1. ..I $G(STATUS)="ACTION REQUIRED" S S="NO ACTION TAKEN"
  1. Q +$O(^SD(409.63,"AC",S,0))_";"_S_";"_P_";"_CHKINDT_";"_CHKOUTDT_";"_+VADMVT