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

BDGAD4.m

Go to the documentation of this file.
  1. BDGAD4 ; IHS/ANMC/LJF - A&D DISCHARGES ;
  1. ;;5.3;PIMS;**1003,1005,1009,1013,1018,1019**;MAY 28, 2004;Build 3
  1. ;IHS/ITSC/LJF 06/03/2005 PATCH 1003 added code for multiple discharges per patient
  1. ;IHS/OIT/LJF 12/29/2005 PATCH 1005 changed AGE^BDGF2 to official API
  1. ;cmi/anch/maw 02/11/2008 added fix in GATHER PATCH 1009
  1. ;ihs/cmi/maw 09/14/2011 added check of service being DAY SURGERY
  1. ;
  1. LOOP ;--loop discharges
  1. NEW DGDT,DFN,IFN
  1. S DGDT=DGBEG
  1. F S DGDT=$O(^DGPM("AMV3",DGDT)) Q:'DGDT!(DGDT>DGEND) D
  1. . S DFN=0 F S DFN=$O(^DGPM("AMV3",DGDT,DFN)) Q:'DFN D
  1. .. S IFN=0 F S IFN=$O(^DGPM("AMV3",DGDT,DFN,IFN)) Q:'IFN D GATHER
  1. Q
  1. ;
  1. GATHER ; gather info on discharges and put counts into arrays
  1. NEW ADM,ADULT,OLDWD,OLDSV,OLDSVN,X,TYPE,LOS,D0,PIECE,NAME,DATA
  1. S ADM=$P(^DGPM(IFN,0),U,14) ;admit ien
  1. S ADULT=$S($$AGE<$$ADULT^BDGPAR:0,1:1) ;1=adult, 0=peds
  1. S TYPE=$$GET1^DIQ(405,IFN,.04) ;type of disch
  1. S D0=ADM D EN^DGPMLOS S LOS=$P(X,U,5) ;length of stay
  1. ;
  1. S OLDWD=$P($G(^DGPM(+$$PRIORMVT^BDGF1(DGDT,ADM,DFN),0)),U,6) ;old ward
  1. ;ihs/cmi/maw 08/07/2015 this line needs to be removed or counts will be off, interward transfers are being created without a ward causing the counts and errors
  1. ;Q:'$G(OLDWD) ;cmi/maw 2/11/2008 added for no ward being returned PATCH 1009
  1. ;
  1. S OLDSV=$P(^DGPM(+$$PRIORTXN^BDGF1(DGDT,ADM,DFN),0),U,9) ;old srv
  1. S OLDSVN=$$GET1^DIQ(45.7,OLDSV,.01)
  1. I OLDSVN["OBSERVATION" S LOS=$$LOSHRS^BDGF1(ADM,DGDT,DFN) ;los-hours
  1. ;
  1. ; collect patient data for report
  1. S NAME=$$GET1^DIQ(2,DFN,.01),X=$S(OLDSVN["OBSERVATION":"O",OLDSVN="DAY SURGERY":"D",1:"I")
  1. Q:$$DEMO^APCLUTL(DFN,"E") ;ihs/cmi/maw patch 1019
  1. S DATA=OLDSV_U_OLDWD
  1. ;IHS/OIT/LJF 12/29/2005 PATCH 1005 changed AGE call to official API
  1. ;I BDGFRM="D" S DATA=DATA_U_$$LASTPRV^BDGF1(ADM,DFN)_U_$$AGE^BDGF2(DFN,+$G(^DGPM(ADM,0))) ;add provider and age at admission
  1. I BDGFRM="D" S DATA=DATA_U_$$LASTPRV^BDGF1(ADM,DFN)_U_$$AGE^AUPNPAT(DFN,+$G(^DGPM(ADM,0))) ;add provider and age at admission
  1. ;
  1. I TYPE["DEATH" D
  1. . S ^TMP("BDGAD",$J,"DEATH",NAME,DFN)=DATA
  1. ;
  1. ;IHS/ITSC/LJF 6/3/2005 PATCH 1003
  1. E D
  1. . I OLDSVN="NEWBORN" D
  1. .. ;S ^TMP("BDGAD",$J,"DSCH","N",NAME,DFN)=DATA
  1. .. S ^TMP("BDGAD",$J,"DSCH","N",NAME,DFN,IFN)=DATA
  1. . ;E S ^TMP("BDGAD",$J,"DSCH",X,NAME,DFN)=DATA
  1. . E S ^TMP("BDGAD",$J,"DSCH",X,NAME,DFN,IFN)=DATA
  1. ;end of PATCH 1003 changes
  1. ;
  1. Q:$G(BDGREP) ;reprint, not recalculating
  1. ;
  1. ;
  1. ; -- increment counts in ADT Census files
  1. ; --- discharge for service within ward
  1. ; ---- set zero node if needed
  1. I '$D(^BDGCWD(OLDWD,1,BDGT,1,OLDSV)) D
  1. . S ^BDGCWD(OLDWD,1,BDGT,1,OLDSV,0)=OLDSV
  1. . S $P(^BDGCWD(OLDWD,1,BDGT,1,0),U,3,4)=OLDSV_U_($P(^BDGCWD(OLDWD,1,BDGT,1,0),U,4)+1)
  1. ;
  1. ; ---- increment discharge/death counts
  1. S PIECE=$S(ADULT:4,1:14)
  1. I TYPE["DEATH" D
  1. . S $P(^BDGCWD(OLDWD,1,BDGT,1,OLDSV,0),U,(PIECE+3))=$P($G(^BDGCWD(OLDWD,1,BDGT,1,OLDSV,0)),U,(PIECE+3))+1
  1. . S $P(^BDGCWD(OLDWD,1,BDGT,0),U,7)=$P($G(^BDGCWD(OLDWD,1,BDGT,0)),U,7)+1
  1. . S $P(^BDGCTX(OLDSV,1,BDGT,0),U,(PIECE+3))=$P($G(^BDGCTX(OLDSV,1,BDGT,0)),U,(PIECE+3))+1
  1. E D
  1. . S $P(^BDGCWD(OLDWD,1,BDGT,1,OLDSV,0),U,PIECE)=$P($G(^BDGCWD(OLDWD,1,BDGT,1,OLDSV,0)),U,PIECE)+1
  1. . S $P(^BDGCWD(OLDWD,1,BDGT,0),U,4)=$P($G(^BDGCWD(OLDWD,1,BDGT,0)),U,4)+1
  1. . S $P(^BDGCTX(OLDSV,1,BDGT,0),U,PIECE)=$P($G(^BDGCTX(OLDSV,1,BDGT,0)),U,PIECE)+1
  1. ;
  1. ; --- increment LOS (inpt in days/observations in hours)
  1. I OLDSVN["OBSERVATION" S PIECE=$S(ADULT:11,1:21)
  1. E S PIECE=$S(ADULT:9,1:19)
  1. S $P(^BDGCWD(OLDWD,1,BDGT,0),U,$S(PIECE=19:9,PIECE=21:11,1:PIECE))=$P(^BDGCWD(OLDWD,1,BDGT,0),U,$S(PIECE=19:9,PIECE=21:11,1:PIECE))+LOS
  1. S $P(^BDGCTX(OLDSV,1,BDGT,0),U,PIECE)=$P(^BDGCTX(OLDSV,1,BDGT,0),U,PIECE)+LOS
  1. S $P(^BDGCWD(OLDWD,1,BDGT,1,OLDSV,0),U,PIECE)=$P(^BDGCWD(OLDWD,1,BDGT,1,OLDSV,0),U,PIECE)+LOS
  1. ;
  1. ; --- increment one day inpatients
  1. I (DGDT\1)=($P(^DGPM(ADM,0),U)\1) D
  1. . S $P(^BDGCWD(OLDWD,1,BDGT,0),U,8)=$P(^BDGCWD(OLDWD,1,BDGT,0),U,8)+1
  1. . S PIECE=$S(ADULT:8,1:18)
  1. . S $P(^BDGCTX(OLDSV,1,BDGT,0),U,PIECE)=$P(^BDGCTX(OLDSV,1,BDGT,0),U,PIECE)+1
  1. . S $P(^BDGCWD(OLDWD,1,BDGT,1,OLDSV,0),U,PIECE)=$P(^BDGCWD(OLDWD,1,BDGT,1,OLDSV,0),U,PIECE)+1
  1. ;
  1. Q
  1. ;
  1. AGE() ;--age at admit
  1. NEW X,X1,X2
  1. S X1=+$G(^DGPM(ADM,0)) ;admit date
  1. S X2=$P($G(^DPT(DFN,0)),U,3) D ^%DTC ;date of birth
  1. Q:'X "" Q X\365.25
  1. ;