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

MMRSIPC2.m

Go to the documentation of this file.
  1. MMRSIPC2 ;MIA/LMT - Print MRSA IPEC Report Cont. (Contains functions to collect patient movements) ;02/15/17 10:35
  1. ;;1.0;MRSA PROGRAM TOOLS;**1,5**;Mar 22, 2009;Build 146
  1. ;
  1. ; Reference to ^DGPM("ATT"_X supported by ICR #1865
  1. ; Reference to ^DGPM("APTT"_X supported by ICR #2090
  1. ; Reference to ^DGPM(D0,0) supported by ICR #419
  1. ; Reference to ^DGPM("AMV"_X supported by ICR #419
  1. ; Reference to ^DPT("CN", supported by ICR #5431
  1. ;
  1. ;
  1. GETMOVE ;Collects ward movements for patients that were admitted or discharged in date range.
  1. ;
  1. ; ZEXCEPT: BYADM,MMRSLOC
  1. ;
  1. N LOC,DUPLOC,MMRSLOC2
  1. ;
  1. S LOC=0 F S LOC=$O(MMRSLOC(LOC)) Q:'LOC D
  1. . S DUPLOC=$$DUPLOC(LOC,.MMRSLOC)
  1. . I 'DUPLOC S MMRSLOC2(LOC)=""
  1. . I DUPLOC D
  1. . . I BYADM D GETADM(LOC)
  1. . . I 'BYADM D GETDIS(LOC)
  1. . . I 'BYADM D GETNODIS(LOC) ;For discharge\transmission report show list of patients that have not been discharged yet
  1. I '$D(MMRSLOC2) Q
  1. I BYADM D GETADM(0)
  1. I 'BYADM D GETDIS(0)
  1. I 'BYADM D GETNODIS(0) ;For discharge\transmission report show list of patients that have not been discharged yet
  1. ;
  1. Q
  1. ;
  1. GETADM(LOC) ;
  1. ;
  1. ; ZEXCEPT: MMRSLOC2,STRTDT
  1. ;
  1. N TT,MOVDT,MOVIFN,DFN,TRANTYPE,INWARD,INDATE,INIFN,INTT,OUTDATE,OUTIFN,OUTTT,NEXTIEN,LOCNAME,VAIP,INLOC
  1. N OUTWARD,PREVWARD
  1. ;
  1. F TT=1,2 S MOVDT=STRTDT-.0000001 F S MOVDT=$O(^DGPM("ATT"_TT,MOVDT)) Q:(MOVDT>ENDDT)!('MOVDT) D
  1. . S MOVIFN="" F S MOVIFN=$O(^DGPM("ATT"_TT,MOVDT,MOVIFN)) Q:'MOVIFN D
  1. . . D KVA^VADPT S DFN=$P($G(^DGPM(MOVIFN,0)),"^",3),VAIP("E")=MOVIFN D IN5^VADPT
  1. . . S TRANTYPE=$$TRANTYPE(+VAIP(4),+VAIP(2),VAIP(1),DFN)
  1. . . S PREVWARD=$P(TRANTYPE,U,2)
  1. . . S TRANTYPE=$P(TRANTYPE,U,1)
  1. . . I TRANTYPE<1!(TRANTYPE=3) Q
  1. . . S INWARD=+VAIP(5)
  1. . . I PREVWARD="" S PREVWARD=+VAIP(15,4)
  1. . . I TRANTYPE=2,'$$CNGWARD(LOC,PREVWARD,INWARD) Q
  1. . . Q:$$EXCWARD(LOC,INWARD)
  1. . . ;SET GLOBAL
  1. . . S INDATE=+VAIP(3)
  1. . . S INIFN=MOVIFN
  1. . . S INTT=TRANTYPE
  1. . . ;
  1. . . S (OUTDATE,OUTIFN,OUTTT)=" "
  1. . . F Q:(VAIP(16)="")!(OUTIFN) D
  1. . . . S TRANTYPE=$$TRANTYPE(+VAIP(16,3),+VAIP(16,2),VAIP(16),DFN)
  1. . . . S OUTWARD=$P(TRANTYPE,U,2)
  1. . . . S NEXTIEN=$P(TRANTYPE,U,3)
  1. . . . S TRANTYPE=$P(TRANTYPE,U,1)
  1. . . . I OUTWARD="" S OUTWARD=+VAIP(16,4)
  1. . . . I TRANTYPE=3 S OUTDATE=+VAIP(16,1),OUTIFN=VAIP(16),OUTTT=3
  1. . . . I TRANTYPE=2,$$CNGWARD(LOC,INWARD,OUTWARD) S OUTDATE=+VAIP(16,1),OUTIFN=VAIP(16),OUTTT=2
  1. . . . Q:OUTIFN
  1. . . . I NEXTIEN="" S NEXTIEN=VAIP(16)
  1. . . . D KVA^VADPT
  1. . . . S VAIP("E")=NEXTIEN
  1. . . . D IN5^VADPT
  1. . . ;
  1. . . S INLOC=$G(LOC)
  1. . . I +INLOC=0 S INLOC=$$GETLOC(INWARD,.MMRSLOC2)
  1. . . S LOCNAME=$P($G(^MMRS(104.3,INLOC,0)),U)
  1. . . S ^TMP($J,"MMRSIPC","D",LOCNAME,INDATE,DFN,OUTDATE)=INLOC_U_DFN_U_INDATE_U_INIFN_U_INTT_U_OUTDATE_U_OUTIFN_U_OUTTT
  1. ;
  1. D KVA^VADPT
  1. ;
  1. Q
  1. ;
  1. GETDIS(LOC) ;
  1. ;
  1. ; ZEXCEPT: MMRSLOC2,STRTDT
  1. ;
  1. N TT,MOVDT,MOVIFN,DFN,TRANTYPE,OUTDATE,OUTIFN,OUTTT,INWARD,INDATE,INIFN,INTT,PREVIEN,INLOC,LOCNAME,VAIP
  1. N NEXTWARD,PREVWARD
  1. ;
  1. F TT=2,3 S MOVDT=STRTDT-.0000001 F S MOVDT=$O(^DGPM("ATT"_TT,MOVDT)) Q:(MOVDT>ENDDT)!('MOVDT) D
  1. . S MOVIFN="" F S MOVIFN=$O(^DGPM("ATT"_TT,MOVDT,MOVIFN)) Q:'MOVIFN D
  1. . . D KVA^VADPT S DFN=$P($G(^DGPM(MOVIFN,0)),"^",3),VAIP("E")=MOVIFN D IN5^VADPT
  1. . . I +VAIP(2)=3,+VAIP(15,3)=2 Q ;Ignore discharges that are immediate following an Authorized Absence
  1. . . S TRANTYPE=$$TRANTYPE(+VAIP(4),+VAIP(2),VAIP(1),DFN)
  1. . . S NEXTWARD=$P(TRANTYPE,U,2)
  1. . . S TRANTYPE=$P(TRANTYPE,U,1)
  1. . . I NEXTWARD="" S NEXTWARD=+VAIP(5)
  1. . . I TRANTYPE<2 Q
  1. . . I TRANTYPE=2,'$$CNGWARD(LOC,+VAIP(15,4),NEXTWARD) Q
  1. . . I $$EXCWARD(LOC,+VAIP(15,4)) Q
  1. . . S OUTDATE=+VAIP(3)
  1. . . S OUTIFN=MOVIFN
  1. . . S OUTTT=TRANTYPE
  1. . . ;
  1. . . S INWARD=+VAIP(15,4)
  1. . . S (INDATE,INIFN,INTT)=""
  1. . . F Q:(VAIP(15)="")!(INIFN) D
  1. . . . S TRANTYPE=$$TRANTYPE(+VAIP(15,3),+VAIP(15,2),VAIP(15),DFN)
  1. . . . S PREVWARD=$P(TRANTYPE,U,2)
  1. . . . S PREVIEN=$P(TRANTYPE,U,3)
  1. . . . S TRANTYPE=$P(TRANTYPE,U,1)
  1. . . . I PREVIEN="" S PREVIEN=VAIP(15)
  1. . . . I TRANTYPE=1 S INDATE=+VAIP(15,1),INIFN=VAIP(15),INTT=1 ;,INWARD=+VAIP(15,4)
  1. . . . I TRANTYPE=2,'PREVWARD D
  1. . . . . D KVA^VADPT S VAIP("E")=PREVIEN D IN5^VADPT
  1. . . . . I $$CNGWARD(LOC,+VAIP(5),+VAIP(15,4)) S INDATE=+VAIP(3),INIFN=VAIP(1),INTT=2 ;,INWARD=+VAIP(16,4)
  1. . . . I TRANTYPE=2,PREVWARD,$$CNGWARD(LOC,PREVWARD,+VAIP(15,4)) S INDATE=+VAIP(15,1),INIFN=VAIP(15),INTT=2
  1. . . . Q:INIFN
  1. . . . D KVA^VADPT
  1. . . . S VAIP("E")=PREVIEN
  1. . . . D IN5^VADPT
  1. . . ;
  1. . . I '$G(INIFN) Q
  1. . . S INLOC=$G(LOC)
  1. . . I +INLOC=0 S INLOC=$$GETLOC(INWARD,.MMRSLOC2)
  1. . . S LOCNAME=$P($G(^MMRS(104.3,INLOC,0)),U)
  1. . . S ^TMP($J,"MMRSIPC","D",LOCNAME,INDATE,DFN,OUTDATE)=INLOC_U_DFN_U_INDATE_U_INIFN_U_INTT_U_OUTDATE_U_OUTIFN_U_OUTTT
  1. ;
  1. D KVA^VADPT
  1. ;
  1. Q
  1. ;
  1. GETNODIS(LOC) ;For Discharge/Transmission report, it adds patients that have not been discharged from the wards to the report
  1. ;
  1. ; ZEXCEPT: ENDDT,MMRSLOC2
  1. ;
  1. N WARD,DFN,TMP,EDT,TT,SDT,INWARD,IEN,INDATE,INTT,INIFN,INLOC,LOCNAME,VAIP
  1. N PREVIEN,PREVWARD
  1. ;
  1. S WARD="" F S WARD=$O(^DPT("CN",WARD)) Q:WARD="" D
  1. . S DFN=0 F S DFN=$O(^DPT("CN",WARD,DFN)) Q:'DFN S TMP(DFN)=""
  1. ;
  1. S EDT=$$NOW^XLFDT
  1. F TT=1:1:3 S SDT=ENDDT F S SDT=$O(^DGPM("AMV"_TT,SDT)) Q:'SDT!(SDT>EDT) D
  1. . S DFN=0 F S DFN=$O(^DGPM("AMV"_TT,SDT,DFN)) Q:'DFN S TMP(DFN)=""
  1. ;
  1. S DFN=0 F S DFN=$O(TMP(DFN)) Q:'DFN D
  1. . D KVA^VADPT
  1. . S VAIP("D")=ENDDT
  1. . D IN5^VADPT
  1. . I 'VAIP(1) Q
  1. . S INWARD=+VAIP(5)
  1. . Q:$$EXCWARD(LOC,INWARD)
  1. . ;
  1. . S INTT=$$TRANTYPE(+VAIP(4),+VAIP(2),VAIP(1),DFN)
  1. . S PREVWARD=$P(INTT,U,2)
  1. . S PREVIEN=$P(INTT,U,4)
  1. . S INTT=$P(INTT,U,1)
  1. . I PREVWARD="" S PREVWARD=+VAIP(15,4)
  1. . I PREVIEN="" S PREVIEN=VAIP(15)
  1. . F Q:(INTT=1)!(INTT=2&$$CNGWARD(LOC,+VAIP(5),PREVWARD))!(PREVIEN="") D
  1. . . S IEN=+PREVIEN
  1. . . D KVA^VADPT
  1. . . S VAIP("E")=IEN
  1. . . D IN5^VADPT
  1. . . S INTT=$$TRANTYPE(+VAIP(4),+VAIP(2),VAIP(1),DFN)
  1. . . S PREVWARD=$P(INTT,U,2)
  1. . . S PREVIEN=$P(INTT,U,4)
  1. . . S INTT=$P(INTT,U,1)
  1. . . I PREVWARD="" S PREVWARD=+VAIP(15,4)
  1. . . I PREVIEN="" S PREVIEN=VAIP(15)
  1. . ;
  1. . I INTT<1!(INTT>2) Q
  1. . S INDATE=+VAIP(3)
  1. . S INIFN=+VAIP(1)
  1. . I '$G(INIFN) Q
  1. . S INLOC=$G(LOC)
  1. . I +INLOC=0 S INLOC=$$GETLOC(INWARD,.MMRSLOC2)
  1. . S LOCNAME=$P($G(^MMRS(104.3,INLOC,0)),U)
  1. . S ^TMP($J,"MMRSIPC","D",LOCNAME,INDATE,DFN," ")=INLOC_U_DFN_U_INDATE_U_INIFN_U_INTT_U_" "_U_"0"_U_" "
  1. ;
  1. D KVA^VADPT
  1. ;
  1. Q
  1. ;
  1. CNGWARD(LOC,WARD1,WARD2) ;Did patient change wards?
  1. ;
  1. ; ZEXCEPT: MMRSLOC2
  1. ;
  1. I +$G(LOC)=0 S LOC=$$GETLOC(WARD1,.MMRSLOC2)
  1. I $D(^MMRS(104.3,LOC,1,"B",WARD1)),$D(^MMRS(104.3,LOC,1,"B",WARD2)) Q 0
  1. Q 1
  1. ;
  1. EXCWARD(LOC,WARD) ;Is this ward excluded from the reports?
  1. ;
  1. ; ZEXCEPT: MMRSLOC2
  1. ;
  1. I +$G(LOC)=0 S LOC=$$GETLOC(WARD,.MMRSLOC2)
  1. I LOC=0 Q 1
  1. I $D(^MMRS(104.3,LOC,1,"B",WARD)) Q 0
  1. Q 1
  1. ;
  1. DUPLOC(LOC,LCTNS) ;
  1. ;
  1. N RSLT,WARD,LOC2
  1. ;
  1. S RSLT=0
  1. S WARD=0 F S WARD=$O(^MMRS(104.3,LOC,1,"B",WARD)) Q:'WARD D
  1. .S LOC2=0 F S LOC2=$O(LCTNS(LOC2)) Q:'LOC2 D
  1. ..Q:LOC2=LOC
  1. ..I $D(^MMRS(104.3,LOC2,1,"B",WARD)) S RSLT=1
  1. Q RSLT
  1. ;
  1. GETLOC(WARD,LCTNS) ;
  1. ;
  1. N RSLT,LOC
  1. ;
  1. S RSLT=0
  1. S LOC=0 F S LOC=$O(LCTNS(LOC)) Q:'LOC!(RSLT) D
  1. .I $D(^MMRS(104.3,LOC,1,"B",WARD)) S RSLT=LOC
  1. Q RSLT
  1. ;
  1. TRANTYPE(MOVTYPE,TRANTYPE,MOVIEN,DFN) ;
  1. ;
  1. I MOVTYPE=46!(MOVTYPE=5)!(MOVTYPE=6)!(MOVTYPE=7)!(MOVTYPE=47)!(MOVTYPE=27)!(MOVTYPE=33)!(MOVTYPE=3)!(MOVTYPE=22) Q -1 ;MIA/LMT - Removed MOVTYPE 29 ;4/15/10
  1. I MOVTYPE=42!(MOVTYPE=20)!(MOVTYPE=1)!(MOVTYPE=45)!(MOVTYPE=23)!(MOVTYPE=25)!(MOVTYPE=26) Q -1
  1. I MOVTYPE=2!(MOVTYPE=43)!(MOVTYPE=13) Q 3
  1. I MOVTYPE=14!(MOVTYPE=24)!(MOVTYPE=44) Q 1
  1. S TRANTYPE=$$CHKOBS(DFN,MOVIEN,TRANTYPE)
  1. Q TRANTYPE
  1. ;
  1. CHKOBS(DFN,MOVIEN,TRANTYPE) ;
  1. ; Check if the patient is being discharged from a mixed observation ward (colocated with acute care
  1. ; patients) and being immediately admitted to acute care. If yes, we want to consider this
  1. ; discharge/admission as an interward transfer.
  1. ;
  1. ; ZEXCEPT: ODOBS,STRTDT
  1. ;
  1. N NEXTMOV,NEXTMOVDT,PREVMOV,PREVMOVDT,SPEC,TIMETOADM,VAIP,VAIP2
  1. ;
  1. I TRANTYPE=2 Q TRANTYPE
  1. ;
  1. S TIMETOADM=7200 ; 2HRS to allow between obs discharge and acute care admission
  1. ;
  1. D KVA^VADPT
  1. S VAIP("E")=MOVIEN
  1. D IN5^VADPT
  1. ;
  1. S SPEC=$$GET1^DIQ(45.7,+VAIP(8)_",",1,"I") ;ICR 1154 supported
  1. I TRANTYPE=3,+$$SPEC^DGPMOBS(SPEC)=1,'$$ONLYOBS(+VAIP(5)) D ;ICR 2664 supported
  1. . S NEXTMOVDT=$O(^DGPM("APTT1",DFN,+VAIP(3))) ;ICR 2090
  1. . S NEXTMOV=$O(^DGPM("APTT1",DFN,+NEXTMOVDT,0))
  1. . I 'NEXTMOV Q
  1. . D CALLIN5("VAIP2",DFN,NEXTMOV)
  1. . I $$FMDIFF^XLFDT(+VAIP2(3),+VAIP(3),2)<TIMETOADM D
  1. . . S TRANTYPE=2_U_+VAIP2(5)_U_NEXTMOV_U_VAIP2(16)
  1. ;
  1. I TRANTYPE=1 D
  1. . S PREVMOVDT=$O(^DGPM("APTT3",DFN,+VAIP(3)),-1)
  1. . S PREVMOV=$O(^DGPM("APTT3",DFN,+PREVMOVDT,0))
  1. . I 'PREVMOV Q
  1. . D CALLIN5("VAIP2",DFN,PREVMOV)
  1. . S SPEC=$$GET1^DIQ(45.7,+VAIP2(8)_",",1,"I") ;ICR 1154 supported
  1. . I +$$SPEC^DGPMOBS(SPEC)=1,'$$ONLYOBS(+VAIP2(5)),$$FMDIFF^XLFDT(+VAIP(3),+VAIP2(3),2)<TIMETOADM D
  1. . . S TRANTYPE=2_U_+VAIP2(5)_U_PREVMOV_U_VAIP2(15)
  1. . . ; In order not to double count bdoc for one-day obs patients that are admitted to acute care
  1. . . ; keep track of these in ODOBS for later adjustment of BDOC.
  1. . . ; If patient admitted and discharged from mixed obs on same calendar day
  1. . . ; and readmitted to acute care within two hours
  1. . . ; and acute care admission is same calendar day as adm/dis from obs
  1. . . ; and date falls within reporting period
  1. . . I '$G(STRTDT) Q
  1. . . I $P(+VAIP2(13,1),".")=$P(+VAIP2(3),"."),$P(+VAIP2(3),".")=$P(+VAIP(3),"."),(STRTDT-.000001)<+VAIP2(13,1) D Q
  1. . . . S ODOBS(+VAIP2(5))=$G(ODOBS(+VAIP2(5)))+1
  1. . . ;
  1. . . ; if patient admitted to obs on one calendar day and discharged on another
  1. . . ; and readmitted to acute care within two hours
  1. . . ; and acute care admission is same calendar day as adm/dis from obs
  1. . . ; and admitted and discharged from acute care on same calendar day
  1. . . ; and date falls within reporting period
  1. . . ; deduct one from inpatient discharge ward
  1. . . I $P(+VAIP2(13,1),".")'=$P(+VAIP2(3),"."),$P(+VAIP2(3),".")=$P(+VAIP(3),"."),$P(+VAIP(3),".")=$P(+VAIP(17,1),"."),(STRTDT-.000001)<+VAIP(3) D Q
  1. . . . S ODOBS(+VAIP(17,4))=$G(ODOBS(+VAIP(17,4)))+1
  1. ;
  1. Q TRANTYPE
  1. ;
  1. CALLIN5(RESULT,DFN,MOVIEN) ;
  1. ;
  1. N VAIP
  1. ;
  1. S VAIP("E")=MOVIEN
  1. S VAIP("V")=RESULT
  1. D IN5^VADPT
  1. Q
  1. ;
  1. ONLYOBS(WARD) ;
  1. ;
  1. N ONLYOBS,MMRSLOC
  1. ;
  1. S ONLYOBS=1
  1. ;
  1. S MMRSLOC=0
  1. F S MMRSLOC=$O(^MMRS(104.3,MMRSLOC)) Q:'MMRSLOC!('ONLYOBS) D
  1. . I '$D(^MMRS(104.3,MMRSLOC,1,"B",WARD)) Q
  1. . I $P($G(^MMRS(104.3,MMRSLOC,0)),U,3)?1(1"AC",1"CLC") S ONLYOBS=0
  1. ;
  1. Q ONLYOBS