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

VSITSTAT.m

Go to the documentation of this file.
  1. VSITSTAT ;ISL/PKR - Visit Tracking in/out patient Update Protocol for ADT ;4/23/97
  1. ;;1.0;PCE PATIENT CARE ENCOUNTER;**76**;Aug 12, 1996
  1. ; Patch PX*1*76 changes the 2nd line of all VSIT* routines to reflect
  1. ; the incorporation of the module into PCE. For historical reference,
  1. ; the old (VISIT TRACKING) 2nd line is included below to reference VSIT
  1. ; patches.
  1. ;
  1. ;;2.0;VISIT TRACKING;**2**;Aug 12, 1996
  1. ;
  1. EN ;Main entry point called by ADT event driver, process adm and d/c only.
  1. I '$D(^UTILITY("DGPM",$J,1))&'$D(^UTILITY("DGPM",$J,3)) G ENQ
  1. W:'$G(DGQUIET) !!,"Updating visit status..."
  1. ;
  1. N MAXDATE,TOFFSET
  1. S MAXDATE=9999999
  1. S TOFFSET=.0000001
  1. ;
  1. ;Build a time ordered list of visits for this patient.
  1. N DATE,TIME,VDT,VIEN
  1. S VDT=""
  1. F S VDT=$O(^AUPNVSIT("AA",DFN,VDT)) Q:'VDT D
  1. . S VIEN="",VIEN=$O(^AUPNVSIT("AA",DFN,VDT,VIEN))
  1. . S DATE=$P(VDT,".",1)
  1. . S TIME=VDT-DATE
  1. . S DATE=MAXDATE-DATE+TIME
  1. . S ^TMP("VSITSTAT",$J,DFN,DATE,VIEN)=""
  1. ;
  1. ;Try to get information for the complete movement.
  1. S VAIP("E")=DGPMDA
  1. D IN5^VADPT
  1. ;
  1. ;Setup the admission information.
  1. N ADMA,ADMIT
  1. S ADMIT=$$ADMISSIO(.ADMA)
  1. ;
  1. ;Setup the discharge information.
  1. N DISA,DISCHG
  1. S DISCHG=$$DISCHARG(.DISA)
  1. ;
  1. ;We must have a value either for the admission after or previous.
  1. I (ADMA("A")="")&(ADMA("P")="") D Q
  1. . W !,"VSITSTAT FATAL ERROR -- NO ADMISSION TIME"
  1. ;
  1. N IN,INOUT,OUT,SDBEG,SDEND
  1. S IN=1,OUT=0
  1. ;
  1. ;General, this handles admission add and parts of admission change
  1. ;delete change.
  1. I (+ADMA("A")>0)&(ADMA("A")'=ADMA("P")) D
  1. . S SDBEG=ADMA("A")-TOFFSET
  1. . I DISCHG S SDEND=DISA("A")
  1. . E S SDEND=MAXDATE
  1. . S INOUT=IN
  1. . D SCANUPD(SDBEG,SDEND,INOUT)
  1. ;
  1. ;Admission change. We only need to worry about a latter time. The
  1. ;earlier case is entirely handled above.
  1. I (+ADMA("P")>0)&(+ADMA("P")<+ADMA("A")) D
  1. . S SDBEG=ADMA("P")
  1. . S SDEND=ADMA("A")-TOFFSET
  1. . S INOUT=OUT
  1. . D SCANUPD(SDBEG,SDEND,INOUT)
  1. ;
  1. ;Admission delete.
  1. I (+ADMA("P")>0)&(ADMA("A")="") D
  1. . S SDBEG=ADMA("P")-TOFFSET
  1. . I +DISA("P")>0 S SDEND=DISA("P")
  1. . E S SDEND=MAXDATE
  1. . S INOUT=OUT
  1. . D SCANUPD(SDBEG,SDEND,INOUT)
  1. ;
  1. ;Discharge add.
  1. I (ADMA("A")=ADMA("P"))&(+DISA("A")>0) D
  1. . S SDBEG=DISA("A")+TOFFSET
  1. . S SDEND=MAXDATE
  1. . S INOUT=OUT
  1. . D SCANUPD(SDBEG,SDEND,INOUT)
  1. ;
  1. ;Discharge change. We only need to worry about an earlier discharge
  1. ;time.
  1. I (+DISA("A")>0)&(+DISA("A")<+DISA("P")) D
  1. . S SDBEG=DISA("A")+TOFFSET
  1. . S SDEND=DISA("P")
  1. . S INOUT=OUT
  1. . D SCANUPD(SDBEG,SDEND,INOUT)
  1. ;
  1. ;Discharge delete.
  1. I (ADMA("A")=ADMA("P"))&(+DISA("P")>0)&(DISA("A")="") D
  1. . S SDBEG=ADMA("A")-TOFFSET
  1. . S SDEND=DISA("P")
  1. . S INOUT=IN
  1. . D SCANUPD(SDBEG,SDEND,INOUT)
  1. ;
  1. W:'$G(DGQUIET) "completed."
  1. ;
  1. ENQ ;
  1. K ^TMP("VSITSTAT",$J,DFN)
  1. D KVA^VADPT
  1. Q
  1. ;
  1. ;=======================================================================
  1. ADMISSIO(ADMA) ;Return true if there is an admission.
  1. ;
  1. ;If the movement is just a change in discharge time UTILITY(...1,...)
  1. ;will not exist.
  1. N MVMNT
  1. S MVMNT="",MVMNT=$O(^UTILITY("DGPM",$J,1,MVMNT))
  1. I MVMNT D
  1. . S ADMA("A")=$P($G(^UTILITY("DGPM",$J,1,MVMNT,"A")),U,1)
  1. . S ADMA("P")=$P($G(^UTILITY("DGPM",$J,1,MVMNT,"P")),U,1)
  1. E D
  1. . S ADMA("A")=$P(VAIP(13,1),U,1)
  1. . I VAIP(13)=DGPMDA S ADMA("P")=$P(DGPMP,U,1)
  1. . E S ADMA("P")=""
  1. Q 1
  1. ;
  1. ;=======================================================================
  1. DISCHARG(DISA) ;Return true if there is a discharge.
  1. N MVMNT,RETVAL
  1. S MVMNT="",MVMNT=$O(^UTILITY("DGPM",$J,3,MVMNT))
  1. I MVMNT D
  1. . S DISA("A")=$P($G(^UTILITY("DGPM",$J,3,MVMNT,"A")),U,1)
  1. . S DISA("P")=$P($G(^UTILITY("DGPM",$J,3,MVMNT,"P")),U,1)
  1. E D
  1. . S DISA("A")=$P(VAIP(17,1),U,1)
  1. . I VAIP(17)=DGPMDA S DISA("P")=$P(DGPMP,U,1)
  1. . E S DISA("P")=""
  1. I DISA("A")>0 S RETVAL=1
  1. E S RETVAL=0
  1. Q RETVAL
  1. ;
  1. ;=======================================================================
  1. SCANUPD(VSITBEG,VSITEND,INOUT) ;Scan range of visits and update
  1. ; input:
  1. ; VSITBEG := begin date
  1. ; VSITEND := end date
  1. ; INOUT := visit status
  1. ;
  1. N VSIT,VSITDT,VSITIEN
  1. S VSITDT=VSITBEG
  1. F S VSITDT=$O(^TMP("VSITSTAT",$J,DFN,VSITDT)) Q:('VSITDT)!(VSITDT>VSITEND) D
  1. . S VSITIEN="",VSITIEN=$O(^TMP("VSITSTAT",$J,DFN,VSITDT,VSITIEN))
  1. . S VSIT("IEN")=VSITIEN
  1. . S VSIT("IO")=INOUT
  1. . S VSIT("SVC")=$$UPDSCAT(VSITIEN,INOUT)
  1. . D UPD^VSIT
  1. ;
  1. Q
  1. ;=======================================================================
  1. UPDSCAT(VSITIEN,INOUT) ;Set the Service Category for in or outpatient.
  1. N CSC,NSC
  1. S (CSC,NSC)=$P($G(^AUPNVSIT(VSITIEN,0)),U,7)
  1. I (CSC="A")!(CSC="I") D
  1. . I INOUT S NSC="I"
  1. . E S NSC="A"
  1. ;
  1. I (CSC="D")!(CSC="X") D
  1. . I INOUT S NSC="D"
  1. . E S NSC="X"
  1. ;
  1. ;If the current Service Category was not A, I, D, or X return the original.
  1. Q NSC
  1. ;