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

BGPMUH12.m

Go to the documentation of this file.
  1. BGPMUH12 ;IHS/MSC/MGH - MI measure NQF0373-VTE-3 ;02-Mar-2011 16:21;DU
  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. ;BGPMUH11 - VTE Measure 2 - VTE started in 24hrs of arrival to ICU
  1. ;BGPMUH12 - VTE Measure 3 - VTE measure 3 - VTE pts on overlap therapy
  1. ENTRY ;PEP Vte measure 3 - VTE pts on overlap therapy
  1. ; Print routine - VTE3^BGPMUHP7
  1. ; Delimited output - VTE3^BGPMUHD6
  1. N START,END,BGPIEN,DFN,BGPVST,BGPISDX,BGPHSDX,BGPAGEE,BGPIPROB,BGPHPROB,EXC,NUM,BGPDIS,INWAR
  1. N BGPER,BGPADTMI,BGPDD,EVDT,PDTE,FIRST,EXCL,OPWAR,IPWAR,EXC,BGPVCODE,BGPVTEPB,BGPVTE,BGPVICD0
  1. S EXC=""
  1. ;Start by finding all admissions during the reporting period
  1. S START=BGPBDATE,EXCL="",OPWAR=0,IPWAR=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. ..S BGPAGEE=$$AGE^AUPNPAT(DFN,BGPEDATE)
  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. ..;Look for DX of VTE
  1. ..S BGPVTE=$$VSTPOVA^BGPMUUT3(DFN,BGPVST,"BGPMU VTE DX")
  1. ..;S BGPVTEPB=$$PLTAX^BGPMUUT1(DFN,"BGPMU VTE DX")
  1. ..;I (+BGPVTE!(+BGPVTEPB))&(BGPVCODE!(BGPVICD0)) D ;Must have DX of VTE
  1. ..I +BGPVTE D ;Must have DX of VTE
  1. ...S EXC=$$EXCLUDE(DFN,BGPIEN,BGPVST,BGPDIS,BGPADMIT)
  1. ...;If no exclusions see if they had Warfarin ordered at discharge
  1. ...I EXC="" D
  1. ....S OPWAR=$$OPWAR(DFN,BGPDIS)
  1. ....I '+OPWAR S EXC=OPWAR
  1. ...;If pt had warfarin in discharge, check and make sure pt had warfar on inpt
  1. ...I EXC="" D
  1. ....S INWAR=$$INWAR(DFN,BGPADMIT,BGPDD)
  1. ....I '+INWAR S EXC=INWAR
  1. ...;OK, now can evaluate overlaping therapy
  1. ...I EXC="" S NUM=$$NUMER(DFN,BGPADMIT,BGPDD,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("BGPMU0373",$J,BGPMUTF,"TOT"))
  1. S DENCT=+$G(^TMP("BGPMU0373",$J,BGPMUTF,"DEN"))
  1. S NUMCT=+$G(^TMP("BGPMU0373",$J,BGPMUTF,"NUM"))
  1. S EXCCT=+$G(^TMP("BGPMU0373",$J,BGPMUTF,"EXC"))
  1. S NOTCT=+$G(^TMP("BGPMU0373",$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("BGPMU0373",$J,BGPMUTF,"DEN")=DENCT
  1. I EXC'="" D
  1. .S EXCCT=EXCCT+1 S ^TMP("BGPMU0373",$J,BGPMUTF,"EXC")=EXCCT
  1. .I BGPMUTF="C" S ^TMP("BGPMU0373",$J,"PAT",BGPMUTF,"EXC",PTCNT)=DFN_U_DATE_U_$P(EXC,U,2)
  1. I EXC="" D
  1. .I +NUM D
  1. ..S NUMCT=NUMCT+1 S ^TMP("BGPMU0373",$J,BGPMUTF,"NUM")=NUMCT
  1. ..S ^TMP("BGPMU0373",$J,"PAT",BGPMUTF,"NUM",PTCNT)=DFN_U_DATE_U_$P(NUM,U,2)_U_$P(NUM,U,4)_U_$P(NUM,U,5)_U_$P(NUM,U,3)
  1. .I '+NUM D
  1. ..S ^TMP("BGPMU0373",$J,"PAT",BGPMUTF,"NOT",PTCNT)=DFN_U_DATE_U_$P(NUM,U,2)
  1. ..S NOTCT=NOTCT+1 S ^TMP("BGPMU0373",$J,BGPMUTF,"NOT")=NOTCT
  1. S ^TMP("BGPMU0373",$J,BGPMUTF,"TOT")=PTCNT
  1. S BGPICARE("MU.VTE.0373.1",BGPMUTF,DFN)=1_U_+$G(NUM)_U_+EXC_U_DATE_";"_$P($G(NUM),U,2)_","_$P($G(NUM),U,4)_","_$P($G(NUM),U,5)_","_$P($G(NUM),U,3)_";"_$P(EXC,U,2)
  1. Q
  1. EXCLUDE(DFN,BGPIEN,BGPVST,BGPDIS,BGPADMIT,OPWAR,IPWAR) ;See if there are exclusions
  1. N REASON,BGPLOS,BGPHOS,BGPCLIN,BGPECI,BGPALL,BGPREF,MED,PHARM,PHARMP,MECH,MECHP,FIRST,CPT
  1. N BGPVCODE,BGPRCODE,BGPVICD0
  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. ;Check for palliative Care
  1. S BGPHOS=$$HOSPICE^BGPMUH08(DFN,BGPVST)
  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. S BGPVCODE=$$VSTCPT^BGPMUUT1(DFN,BGPVST,"BGPMU VTE TEST CPT")
  1. S BGPRCODE=$$FIND^BGPMUUT7(DFN,"BGPMU VTE TEST CPT",BGPADMIT,BGPDD) ;RAD procedure check
  1. ;S BGPVICD0=$$VSTICD0^BGPMUUT3(DFN,BGPVST,"BGPMU VTE TEST ICD0") ;not in ORT
  1. ;I '+BGPRCODE&('BGPVCODE)&('+BGPVICD0) S REASON="1^No VTE Proc"
  1. I '+BGPRCODE&('BGPVCODE) S REASON="1^No VTE Proc"
  1. Q REASON
  1. NUMER(DFN,ADMIT,DISCH,TVST) ;Check to see if pt is in the numerator
  1. N TAX,MEDDTE,ENDDT,MEDIEN,STATUS,DRUG,DISPENSE,INR,RETURN
  1. N LABDATA,WARDATA,INJDATA,OVER,X,CNT
  1. S RETURN=0
  1. ;Get return list of INRs between admit and discharge
  1. S TAX="BGPMU LAB LOINC INR"
  1. D LAB^BGPMUUT5(.LABDATA,DFN,TAX,ADMIT,DISCH)
  1. ;Get array of inpt dates for which Warfarin was active
  1. S TAX="BGPMU WARFARIN NDCS"
  1. D MEDLIST(.WARDATA,DFN,ADMIT,DISCH,TAX)
  1. ;Get array of inpt dates for which concurrent anticoag therapy was active
  1. S TAX="BGPMU VTE ANTICOAG NDCS"
  1. D MEDLIST(.INJDATA,DFN,ADMIT,DISCH,TAX)
  1. ;Now loop through the list of warfarin dates and see if a corresponding
  1. ;date exists in the injectable list. If it does, increment the count of days
  1. ;If it doesn't, start over
  1. S CNT=0
  1. S X=0 F S X=$O(WARDATA(X)) Q:X="" D
  1. .I $D(INJDATA(X)) S CNT=CNT+1
  1. ;If the count >4, then check the latest INR to see if it was >2
  1. I CNT=0 Q 0 ;No overlap therapy
  1. I CNT>4 D
  1. .S INR=$$INRCK(.LABDATA,BGPDD)
  1. .I $P(INR,U,1)>1.99999 S RETURN=1_U_CNT_U_U_INR
  1. .;If its less then 2, must go home on concurrent therapy
  1. .I $P(INR,U,1)<2.0 D
  1. ..S OVER=$$OPINJ(DFN,BGPDIS)
  1. ..I OVER S RETURN=1_U_CNT_U_BGPDD_U_INR
  1. ;If the count <5, check for an outpt RX for overlap med
  1. I CNT<5 D
  1. .S INR=$$INRCK(.LABDATA,BGPDD)
  1. .S OVER=$$OPINJ(DFN,BGPDIS)
  1. .I OVER S RETURN=1_U_CNT_U_BGPDD_U_INR
  1. Q RETURN
  1. OPWAR(DFN,BGPDIS) ;Check to see if pt was discharged on Warfarin
  1. N DRUG,TAX,MEDTYPE,DDATE
  1. S MEDTYPE="OP",TAX="BGPMU WARFARIN NDCS"
  1. S DDATE=$P($G(^DGPM(BGPDIS,0)),U,1)
  1. S DRUG=$$FIND^BGPMUUT4(DFN,TAX,DDATE,MEDTYPE)
  1. Q DRUG
  1. INWAR(DFN,BGPADMIT,BGPDD) ;Check to see if Warfarin given in inpt
  1. N DRUG,TAX,MEDTYPE
  1. S MEDTYPE="UD",TAX="BGPMU WARFARIN NDCS"
  1. S DRUG=$$FIND^BGPMUUT4(DFN,TAX,BGPADMIT,MEDTYPE,BGPDD)
  1. Q DRUG
  1. MEDLIST(ARRAY,DFN,BGPADMIT,BGPDD,TAX) ;Check each day of inpt stay to see if med active
  1. N DRUG,MEDTYPE,BDATE,EDATE,DDATE,I,START,END
  1. S MEDTYPE="UD"
  1. ;Only use the date portion
  1. S BDATE=$P(BGPADMIT,".",1),EDATE=$$FMADD^XLFDT($P(BGPDD,".",1),1)
  1. S START=$$FMADD^XLFDT(BDATE,-1)
  1. F S START=$$FMADD^XLFDT(START,1) Q:START>EDATE D
  1. .S END=$$FMADD^XLFDT(START,+1)
  1. .S DRUG=$$FIND^BGPMUUT6(DFN,TAX,START,MEDTYPE,END)
  1. .I +DRUG S ARRAY(START)=DRUG
  1. S MEDTYPE="IV"
  1. S BDATE=$P(BGPADMIT,".",1),EDATE=$$FMADD^XLFDT($P(BGPDD,".",1),1)
  1. S START=$$FMADD^XLFDT(BDATE,-1)
  1. F S START=$$FMADD^XLFDT(START,1) Q:START>EDATE D
  1. .S END=$$FMADD^XLFDT(START,+1)
  1. .S DRUG=$$FIND^BGPMUUT6(DFN,TAX,START,MEDTYPE,END)
  1. .I +DRUG S ARRAY(START)=DRUG
  1. Q
  1. OPINJ(DFN,BGPDIS) ;Check to see if pt was discharged on concurrent therapy
  1. N DRUG,TAX,MEDTYPE,DDATE
  1. S MEDTYPE="OP",TAX="BGPMU VTE ANTICOAG NDCS"
  1. S DDATE=$P($G(^DGPM(BGPDIS,0)),U,1)
  1. S DRUG=$$FIND^BGPMUUT4(DFN,TAX,DDATE,MEDTYPE)
  1. Q DRUG
  1. INRCK(LABS,BGPDD) ;Find the INR prior to discharge date
  1. N VALUE,X,CK
  1. S VALUE=0
  1. S X="" F S X=$O(LABS(X)) Q:'+X!(+VALUE) D
  1. .S CK=9999999-X
  1. .Q:CK>BGPDD
  1. .I CK<BGPDD S VALUE=$G(LABS(X))
  1. Q VALUE_U_$$DATE^BGPMUUTL(CK)