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

BGPMUH10.m

Go to the documentation of this file.
  1. BGPMUH10 ;IHS/MSC/MGH - MI measure NQF0371-VTE-1 ;02-Mar-2011 16:06;MGH
  1. ;;11.0;IHS CLINICAL REPORTING;**4**;JAN 06, 2011;Build 84
  1. ;ED meaningful use hospital measures
  1. ;BGPMUH10 - VTE Measure 1 - VTE started in 24hrs of arrival
  1. ;
  1. ENTRY ;PEP Vte measure 1 NQF0371- VTE started in 24hrs of arrival
  1. ; Print routine - VTE1^BGPMUHP6
  1. ; Delimited output - VTE1^BGPMUHD5
  1. N START,END,BGPIEN,DFN,BGPVST,BGPISDX,BGPHSDX,BGPAGEE,BGPIPROB,BGPHPROB,SECOND,EXC,NUM,BGPDIS
  1. N BGPER,BGPADMIT,BGPDD
  1. ;Start by finding all admissions during the reporting period
  1. S START=BGPBDATE,NUM=0
  1. S END=BGPEDATE_".2359"
  1. F S START=$O(^DGPM("B",START)) Q:START=""!(START>END) D
  1. .S BGPIEN="" F S BGPIEN=$O(^DGPM("B",START,BGPIEN)) Q:BGPIEN="" D
  1. ..Q:$P($G(^DGPM(BGPIEN,0)),U,2)'=1 ;Only include admissions
  1. ..S DFN=$P($G(^DGPM(BGPIEN,0)),U,3)
  1. ..Q:DFN=""
  1. ..S BGPACTUP=$$ACTUPAP^BGPMUEHD(DFN,BGPBDATE,BGPEDATE,BGPBEN)
  1. ..I 'BGPACTUP,'$G(BGPXPXPX),'$G(BGPIISO) Q
  1. ..S BGPVST=$P($G(^DGPM(BGPIEN,0)),U,27) ;Get the visit
  1. ..Q:BGPVST=""
  1. ..S BGPDIS=$P($G(^DGPM(BGPIEN,0)),U,17) ;Don't use if pt is still an inpt
  1. ..Q:BGPDIS=""
  1. ..;Get the admit time & discharge times
  1. ..S BGPADMIT=$P($G(^DGPM(BGPIEN,0)),U,1)
  1. ..S BGPDD=$P($G(^DGPM(BGPDIS,0)),U,1)
  1. ..;get age at admission
  1. ..S BGPAGEE=$$AGE^AUPNPAT(DFN,$P(BGPADMIT,".",1))
  1. ..;Get the end of the second day
  1. ..S SECOND=$$FMADD^XLFDT(BGPADMIT,2),SECOND=SECOND_".2359"
  1. ..S EXC=$$EXCLUDE(DFN,BGPIEN,BGPVST,BGPDIS)
  1. ..;If no exclusions see if they had VTE prophylaxis
  1. ..I EXC="" S NUM=$$NUMER(DFN,BGPADMIT,BGPVST)
  1. ..;Now add it all up
  1. ..D TOTAL(BGPIEN)
  1. Q
  1. TOTAL(BGPIEN) ;add up the totals
  1. N PTCNT,EXCCT,DENCT,NUMCT,TOTALS,DATE,NOTCT
  1. S TOTALS=$G(^TMP("BGPMU0371",$J,BGPMUTF,"TOT"))
  1. S DENCT=+$G(^TMP("BGPMU0371",$J,BGPMUTF,"DEN"))
  1. S NUMCT=+$G(^TMP("BGPMU0371",$J,BGPMUTF,"NUM"))
  1. S EXCCT=+$G(^TMP("BGPMU0371",$J,BGPMUTF,"EXC"))
  1. S NOTCT=+$G(^TMP("BGPMU0371",$J,BGPMUTF,"NOT"))
  1. S PTCNT=TOTALS
  1. S PTCNT=PTCNT+1
  1. S DATE=$$DATE^BGPMUUTL($P($G(^DGPM(BGPIEN,0)),U,1))
  1. S DENCT=DENCT+1 S ^TMP("BGPMU0371",$J,BGPMUTF,"DEN")=DENCT
  1. I EXC'="" D
  1. .S EXCCT=EXCCT+1 S ^TMP("BGPMU0371",$J,BGPMUTF,"EXC")=EXCCT
  1. .I BGPMUTF="C" S ^TMP("BGPMU0371",$J,"PAT",BGPMUTF,"EXC",PTCNT)=DFN_U_DATE_U_$P(EXC,U,2)
  1. I EXC="" D
  1. .I +NUM=1 D
  1. ..S NUMCT=NUMCT+1 S ^TMP("BGPMU0371",$J,BGPMUTF,"NUM")=NUMCT
  1. ..S ^TMP("BGPMU0371",$J,"PAT",BGPMUTF,"NUM",PTCNT)=DFN_U_DATE_U_$P(NUM,U,3)_U_$P(NUM,U,2)
  1. .I +NUM=0 D
  1. ..S ^TMP("BGPMU0371",$J,"PAT",BGPMUTF,"NOT",PTCNT)=DFN_U_DATE_U_$P(NUM,U,3)_U_$P(NUM,U,2)
  1. ..S NOTCT=NOTCT+1 S ^TMP("BGPMU0371",$J,BGPMUTF,"NOT")=NOTCT
  1. S ^TMP("BGPMU0371",$J,BGPMUTF,"TOT")=PTCNT
  1. S BGPICARE("MU.VTE.0371.1",BGPMUTF,DFN)=1_U_+$G(NUM)_U_+EXC_U_DATE_";"_$P($G(NUM),U,3)_";"_$P(EXC,U,2)
  1. Q
  1. EXCLUDE(DFN,BGPIEN,BGPVST,BGPDIS) ;See if there are exclusions
  1. N REASON,BGPLOS,BGPHOS,BGPCLIN,BGPECI,BGPALL,BGPREF,BGWARD,BGPISDX,BGPHSDX,BGPVTE,BGPTS
  1. S REASON=""
  1. I BGPAGEE<18 S REASON="1^AGE" Q REASON
  1. ;Check for LOS
  1. S BGPLOS=$$LOS^BGPMUH08(BGPIEN,BGPDIS)
  1. I BGPLOS>120 S REASON="1^LOS" Q REASON
  1. I BGPLOS<2 S REASON="1^LOS" Q REASON
  1. ;
  1. ;Check for ICU AND Refusal of VTE Prophylaxis AND Reason for no VTE Prophylaxis
  1. ; ICU
  1. S BGWARD=$$ICUADM(DFN,BGPIEN,BGPADMIT,BGPDIS)
  1. ; refusal of VTE med
  1. S ICUADMIT=$P($P(BGWARD,U,2),".",1)
  1. S FIRST=$$FMADD^XLFDT(ICUADMIT,+1)
  1. S MED=$$MEDREF^BGPMUUT2(DFN,ICUADMIT,FIRST_".2359","BGPMU VTE PROPHYLAXIS")
  1. ; OR refusal of device application
  1. ; CPT code check
  1. S CPT=$$REFTAX^BGPMUUT2(DFN,81,"BGPMU VTE DEVICES CPT",ICUADMIT,FIRST_".2359")
  1. ; ICD0 code check
  1. S ICD0=$$REFTAX^BGPMUUT2(DFN,80.1,"BGPMU VTE DEVICES ICD0",BGPADMIT,FIRST_".2359")
  1. ; Reason for no VTE prophylaxis
  1. S MECH=$$VSTPOVB^BGPMUUT3(DFN,BGPVST,"BGPMU VTE EXCLUDE-MECH DX")
  1. I 'MECH S MECH=$$PLTAX^BGPMUUT1(DFN,"BGPMU VTE EXCLUDE-MECH DX")
  1. I (+BGWARD)&(+MED!+CPT!+ICD0)&(+MECH) S REASON="1^ICU/"_$S(+MED:"MED:"_MED,+CPT:"CPT:"_CPT,+ICD0:"ICD:"_ICD0,1:"")_"/"_MECH Q REASON
  1. ;
  1. ;Check for OB or behavioral health admissions
  1. ;S BGPTS=$$TS(DFN,BGPIEN,BGPDIS)
  1. S BGPTS=$$TS(DFN,BGPVST,BGPIEN)
  1. I +BGPTS S REASON=BGPTS Q REASON
  1. ;Check for palliative Care
  1. S BGPHOS=$$HOSPICE^BGPMUH06(DFN,BGPVST,BGPADMIT)
  1. I +BGPHOS S REASON=BGPHOS Q REASON
  1. ;Check for clinical trial
  1. S BGPCLIN=$$TRIAL^BGPMUH08(DFN,BGPVST)
  1. I +BGPCLIN S REASON=BGPCLIN Q REASON
  1. ;Check for a diagnosis of stroke
  1. S BGPISDX=$$VSTPOVA^BGPMUUT3(DFN,BGPVST,"BGPMU ISCHEMIC STROKE DX")
  1. I +BGPISDX S REASON=BGPISDX Q REASON
  1. S BGPHSDX=$$VSTPOVA^BGPMUUT3(DFN,BGPVST,"BGPMU HEMORRHAGIC STROKE DX")
  1. I +BGPHSDX S REASON=BGPHSDX Q REASON
  1. ;Check for a diagnosis of VTE
  1. S BGPVTE=$$VSTPOVA^BGPMUUT3(DFN,BGPVST,"BGPMU VTE DX")
  1. I +BGPVTE S REASON=BGPVTE Q REASON
  1. Q REASON
  1. NUMER(DFN,ADMIT,VST) ;Check to see if pt is in the numerator
  1. N TAX,MEDDTE,ENDDT,VTE,MEDIEN,STATUS,DRUG,DISPENSE,CPT,MED
  1. N TEDS,FIRST,GIVEN,NOTGIV,PROP,PHARM,PHARMP,MECH,MECHP,ICD0
  1. S VTE=0
  1. ;First, see if the pt has CPT for procedure in first 24hrs
  1. S FIRST=$$FMADD^XLFDT(ADMIT,+1)
  1. S TEDS=$$PALCPT^BGPMUUT3(DFN,VST,"BGPMU VTE DEVICES CPT",ADMIT)
  1. I +TEDS S VTE=TEDS_U_BGPDD Q VTE
  1. ;See, if the pt has ICD0 for procedures in first 24hrs
  1. S PROP=$$PALICD0^BGPMUUT3(DFN,VST,"BGP VTE DEVICES ICD0",ADMIT)
  1. I +PROP S VTE=PROP_U_BGPDD Q VTE
  1. ;See if the VTE CPT code was entered
  1. S GIVEN=$$PALCPT^BGPMUUT3(DFN,VST,"BGPMU VTE GIVEN CPT",ADMIT)
  1. I +GIVEN S VTE=GIVEN_U_BGPDD Q VTE
  1. ;Check for code that patient is not eligible
  1. S NOTGIV=$$PALCPT^BGPMUUT3(DFN,VST,"BGPMU VTE NOT GIVEN CPT",ADMIT)
  1. I +NOTGIV S VTE=$P(NOTGIV,U,1)_U_"NMI "_$P(NOTGIV,U,2)_U_BGPDD Q VTE
  1. ;Check diagnosis for whom VTE is not appropriate
  1. S PHARM=$$VSTPOVB^BGPMUUT3(DFN,BGPVST,"BGPMU VTE EXCLUDE PHARM DXS")
  1. I +PHARM S VTE=$P(PHARM,U,1)_U_"NMI "_$P(PHARM,U,2)_U_BGPDD Q VTE
  1. S PHARMP=$$PLTAX^BGPMUUT1(DFN,"BGPMU VTE EXCLUDE PHARM DXS")
  1. I +PHARMP S VTE=$P(PHARMP,U,1)_U_"NMI "_$P(PHARM,U,2)_U_BGPDD Q VTE
  1. S MECH=$$VSTPOVB^BGPMUUT3(DFN,BGPVST,"BGPMU VTE EXCLUDE-MECH DX")
  1. I +MECH S VTE=$P(MECH,U,1)_U_"NMI "_$P(MECH,U,2)_U_BGPDD Q VTE
  1. S MECHP=$$PLTAX^BGPMUUT1(DFN,"BGPMU VTE EXCLUDE-MECH DX")
  1. I +MECHP S VTE=MECHP_U_BGPDD Q VTE
  1. ;Check for refusal of VTE med
  1. S MED=$$MEDREF^BGPMUUT2(DFN,$P(ADMIT,"."),FIRST,"BGPMU VTE PROPHYLAXIS")
  1. I +MED S VTE=$P(MED,U,1)_U_"REF "_$P(MED,U,2)_U_BGPDD Q VTE
  1. ;Check for refusals of procedures
  1. S CPT=$$REFTAX^BGPMUUT2(DFN,81,"BGPMU VTE DEVICES CPT",$P(ADMIT,"."),$P(FIRST,"."))
  1. I +CPT S VTE=$P(CPT,U,1)_U_"REF "_$P(CPT,U,2)_U_BGPDD Q VTE
  1. S ICD0=$$REFTAX^BGPMUUT2(DFN,80.1,"BGPMU VTE DEVICES ICD0",$P(ADMIT,"."),$P(FIRST,"."))
  1. I +ICD0 S VTE=$P(ICD0,U,1)_U_"REF "_$P(ICD0,U,2)_U_BGPDD Q VTE
  1. ;Finally check for a BMCA code for antithrombotics
  1. S MEDDTE=ADMIT
  1. S FIRST=$P(FIRST,".",1)_".2359"
  1. F S MEDDTE=$O(^PSB(53.79,"AADT",DFN,MEDDTE)) Q:'+MEDDTE!(MEDDTE>FIRST)!(+VTE) D
  1. .S MEDIEN="" F S MEDIEN=$O(^PSB(53.79,"AADT",DFN,MEDDTE,MEDIEN)) Q:'+MEDIEN!(+VTE) D
  1. ..S STATUS=$P($G(^PSB(53.79,MEDIEN,0)),U,9)
  1. ..I STATUS="G"!(STATUS="I")!(STATUS="C") D ;Drug given
  1. ...S DISPENSE=0 F S DISPENSE=$O(^PSB(53.79,MEDIEN,.5,DISPENSE)) Q:'+DISPENSE!(+VTE) D
  1. ....S DRUG=$G(^PSB(53.79,MEDIEN,.5,DISPENSE,0))
  1. ....S DRUG=$P(DRUG,U,1)
  1. ....S TAX="BGPMU VTE PROPHYLAXIS"
  1. ....S VTE=$$NDC^BGPMUUT4(DRUG,TAX)
  1. ....I +VTE S VTE=$P(VTE,U,1)_U_"MED "_$P(VTE,U,2)_U_BGPDD
  1. Q VTE
  1. TS(DFN,BGPVST,BGPIEN) ;Check the treating specialty
  1. N IEN,TYPE,INV,TSIEN,TSDATA,TS,TN,OBDX,TSFLD
  1. S IEN=BGPIEN,INV="",TS=0
  1. S OBDX=$$VSTPOV^BGPMUUT3(DFN,BGPVST,"BGPMU VTE OB DXS")
  1. I +OBDX S TS=OBDX Q TS
  1. S INV="" F S INV=$O(^DGPM("ATS",DFN,IEN,INV)) Q:INV=""!(+TS) D
  1. .S TSIEN="" F S TSIEN=$O(^DGPM("ATS",DFN,IEN,INV,TSIEN)) Q:TSIEN=""!(+TS) D
  1. ..S TSDATA=$G(^DIC(45.7,TSIEN,0))
  1. ..Q:TSDATA=""
  1. ..S TN=$$GET1^DIQ(45.7,TSIEN,.01)
  1. ..S TS=$S(TN["MENTAL HEALTH":1,TN["ALCOHOLISM":1,TN["BEHAVIORAL HEALTH":1,TN["SUBSTANCE ABUSE":1,1:0)
  1. Q TS
  1. ICUADM(DFN,IEN,ADMIT,DISC) ;Check for ward location
  1. ; ICU admission check for day of or day after
  1. N WARDM,TIME,TRF,TYPE,FIRST,TDATE,WARD
  1. S WARDM=0
  1. S WARD=$$GET1^DIQ(405,IEN,.06)
  1. I WARD["ICU" S WARDM="1^"_ADMIT G ICULOS
  1. ;Check for transfer movements
  1. S TRF=IEN F S TRF=$O(^DGPM("C",DFN,TRF)) Q:TRF=""!(+WARD) D
  1. .S TYPE=$P($G(^DGPM(TRF,0)),U,2)
  1. .I TYPE=2 D ;This was a transfer movement
  1. ..S WARD=$$GET1^DIQ(405,TRF,.06)
  1. ..I WARD["ICU" D
  1. ...S FIRST=$$FMADD^XLFDT(ADMIT,+1),TDATE=$P($G(^DGPM(TRF,0)),U,1)
  1. ...I $P(TDATE,".",1)=$P(ADMIT,".",1)!($P(TDATE,".",1)=$P(FIRST,".",1)) S WARDM="1^"_$P(TDATE,".",1)
  1. Q:'WARDM 0
  1. ICULOS ;NOW CHECK LOS
  1. N ICULOS,TRF,TYPE,FIRST,TDATE,CNT,ARRAY,WARD,TIME
  1. S ICULOS=0,CNT=0
  1. S WARD=$$GET1^DIQ(405,IEN,.06)
  1. S CNT=CNT+1
  1. S ARRAY(CNT)=WARD_U_ADMIT ;Keep track of all admits to ICU
  1. ;Get all transfer movements
  1. S TRF=IEN F S TRF=$O(^DGPM("C",DFN,TRF)) Q:TRF="" D
  1. .S TYPE=$P($G(^DGPM(TRF,0)),U,2)
  1. .I TYPE=2 D ;This was a transfer movement
  1. ..S WARD=$$GET1^DIQ(405,TRF,.06)
  1. ..S CNT=CNT+1
  1. ..S TDATE=$P($G(^DGPM(TRF,0)),U,1)
  1. ..S ARRAY(CNT)=WARD_U_TDATE
  1. ;Now loop through all the admits and transfers looking for an ICU
  1. N I,X1,X2,J
  1. S I=0 F S I=$O(ARRAY(I)) Q:'+I D
  1. .I $P(ARRAY(I),U,1)["ICU" D
  1. .I I+1>CNT S X1=DISC
  1. .E S J=I+1,X1=$P(ARRAY(J),U,2)
  1. .S X2=$P(ARRAY(I),U,2)
  1. .S TIME=$$FMDIFF^XLFDT(X1,X2,1)
  1. .S ICULOS=TIME
  1. Q $S(+ICULOS:WARDM,1:0) ; 0=false; "1"=true; <Admit or transfer to ICU day of or day after admission> AND <ICU LOS is greater or equal to 1 day>