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

BGPMUD05.m

Go to the documentation of this file.
  1. BGPMUD05 ; IHS/MSC/SAT - MU measure NQF0014 ;14-JUN-2011 15:43;DU
  1. ;;11.1;IHS CLINICAL REPORTING SYSTEM;**1**;JUN 27, 2011;Build 106
  1. ;code to collect meaningful use report Prenatal Anti-D Immune Globulin
  1. ENTRY ;EP
  1. ; expects:
  1. ; DFN = patient code from VA PATIENT file
  1. ; BGPBDATE = begin date of report
  1. ; BGPEDATE = end date of report
  1. ; BGPPROV = provider code from NEW PERSON file
  1. ; BGPMUTF = timeframe variable - "C"=current year; "P"=previous year; "B"=baseline year
  1. ; Print Routine: P14ENT^BGPMUDP3
  1. ; Delimited Routine: D14ENT^BGPMUDD3
  1. N BGP3,BGPDEN,BGPDSTR,BGPDT,BGPEXC,BGPNSTR,BGPNUM,BGPP,BGPRHO,BGPSEX,BGPUNSEN
  1. N END,EXC,FIRST,IEN,START,VIEN,ESTDOC
  1. S (BGPDEN,BGPEXC,BGPNUM)=0
  1. S (BGPNSTR,BGPDSTR,BGP3)=""
  1. ;only check female
  1. S BGPSEX=$$SEX^AUPNPAT(DFN)
  1. Q:BGPSEX'="F"
  1. ;
  1. ;look for a delivery live birth procedure during the reporting period
  1. S BGPP=$$DLBCPT^BGPMUD04(DFN,BGPBDATE,BGPEDATE,"BGPMU DELIVERY LIVE BIRTH CPT")
  1. Q:'BGPP
  1. S ESTDOC=$$FMADD^XLFDT($P(BGPP,U,3),-300)
  1. ;
  1. ;look for prenatal visit with EP within 300 days of birth
  1. S START=9999999-ESTDOC,END=9999999-$P(BGPP,U,3)
  1. S FIRST=END-0.1 F S FIRST=$O(^AUPNVSIT("AA",DFN,FIRST)) Q:FIRST=""!($P(FIRST,".",1)>START) D
  1. .S VIEN=0 F S VIEN=$O(^AUPNVSIT("AA",DFN,FIRST,VIEN)) Q:'+VIEN D
  1. ..S BGPDT=$P($P($G(^AUPNVSIT(VIEN,0)),U,1),".",1)
  1. ..;Check provider, determine if there are visits with ICD codes for prenatal visit
  1. ..I $$PRV^BGPMUUT1(VIEN,BGPPROV) D
  1. ...S X=$$VSTPOV^BGPMUUT3(DFN,VIEN,"BGPMU PRENATAL VISIT DX")
  1. ...I +X S BGP3=BGP3_$S(BGP3'="":";",1:"")_$G(BGPDT)
  1. ;quit if no diagnosis for prenatal visit
  1. Q:BGP3=""
  1. ;
  1. S BGPUNSEN=$$UNSEN(DFN)
  1. Q:'BGPUNSEN
  1. ;getting here means patient is in the denominator
  1. S BGPDEN=1
  1. S BGPDSTR="DEL:"_$$DATE^BGPMUUTL($P(BGPP,U,3))_";EN:"_$$DATE^BGPMUUTL($P(BGP3,";"))
  1. ;
  1. ;determine if patient was given anti-d immune globulin between 118-90 days before the delivery date
  1. S BGPNUM=$$FIND^BGPMUUT8(DFN,"BGPMU ANTI-D IMMUNE GLOBUL NDC",$$FMADD^XLFDT($P(BGPP,U,3),-118),"",$$FMADD^XLFDT($P(BGPP,U,3),-90))
  1. ;
  1. ;check for exclusions
  1. I +BGPNUM D
  1. .S BGPNSTR="M:MED "_$$DATE^BGPMUUTL($P(BGPNUM,U,3))
  1. E D
  1. .S EXC=$$MEDREF^BGPMUUT2(DFN,ESTDOC,$P(BGPP,U,3),"BGPMU ANTI-D IMMUNE GLOBUL NDC")
  1. .S:EXC BGPEXC=1,BGPNSTR="Excluded" ;patient is excluded
  1. .S:'EXC BGPNSTR="NM:"
  1. ;
  1. D TOTAL(DFN)
  1. ;
  1. K BGP3,BGPDEN,BGPDSTR,BGPDT,BGPEXC,BGPNSTR,BGPNUM,BGPP,BGPRHO,BGPSEX,BGPUNSEN
  1. K END,EXC,FIRST,IEN,START,VIEN,ESTDOC
  1. Q
  1. UNSEN(DFN) ;Determine if patient is Rh negative and unsensitized
  1. N BGPRHT,RHTVAL,BGPABO,ABOVAL,BGPABO1,LIEN,VAL,DATA
  1. S (RHTVAL,ABOVAL)=""
  1. ;check for Rh type in blood bank
  1. S BGPRHT=$$RHTYPE^BGPMUUT5(DFN)
  1. S:+BGPRHT RHTVAL=$P(BGPRHT,U,2)
  1. ;check for Rh type in V LAB
  1. I '+BGPRHT D
  1. .S BGPRHT=$$LOINC^BGPMUUT2(DFN,"",$P(BGPP,U,3),"BGPMU RH TYPE LOINC")
  1. .I +BGPRHT D
  1. ..S LIEN=$P(BGPRHT,U,2)
  1. ..S RHTVAL=$P($G(^AUPNVLAB(LIEN,0)),U,4)
  1. Q:('BGPRHT)!((RHTVAL'="N")&(RHTVAL'="NEG")&(RHTVAL'="NEGATIVE")) 0
  1. ;check for result of antibody screen (indirect COOMBS)
  1. S BGPABO=$$ANTI^BGPMUUT5(DFN)
  1. S:+BGPABO ABOVAL=$P(BGPABO,U,2)
  1. I '+BGPABO D
  1. .S BGPABO=$$LOINC^BGPMUUT2(DFN,ESTDOC,$P(BGPP,U,3),"BGPMU INDIRECT COOMBS LOINC")
  1. .I +BGPABO D
  1. ..S ABOVAL=$P($G(^AUPNVLAB($P(BGPABO,U,2),0)),U,4)
  1. .E D
  1. ..;check for HDL via CPT codes in LAB
  1. ..D LABCPT^BGPMUUT5(.DATA,DFN,"BGPMU INDIRECT COOMBS CPT",ESTDOC,$P(BGPP,U,3))
  1. ..S VAL="" S VAL=$O(DATA(VAL))
  1. ..I +VAL D
  1. ...S ABOVAL=$G(DATA(VAL))
  1. ...S BGPABO=1_(9999999-VAL)
  1. Q:('BGPABO)!((ABOVAL'="N")&(ABOVAL'="NEG")&(ABOVAL'="NEGATIVE")) 0
  1. Q 1
  1. ;
  1. ;
  1. ;CODE BELOW IS NO LONGER USED - NO MENTION OF RHOGAM OR ICD'S IN THE DENOMINATOR CRITERIA
  1. ;FROM Dr. Advani: Per Terry's recommendation earlier, we do not include system reasons until we implement full hl7 3.0 RIM codes for this.
  1. ;if no anti-body screening, look for ICD on problem list
  1. S BGPRHO=0
  1. I $P(BGPABO,U,2)=0 D
  1. .S BGPABO1=$$LASTDX^BGPMUUT2(DFN,BGPBDATE,BGPEDATE,"BGPMU CTRL HIGH BP HYP DX")
  1. .S:BGPABO1="" BGPABO1=$$PLTAX^BGPMUUT1(DFN,"BGPMU CTRL HIGH BP HYP DX")
  1. Q:'BGPABO1 0
  1. ;if unsensitized
  1. S:$P(BGPABO,U,2)="N" BGPRHO=$$FIND^BGPMUUT7(DFN,"BGPMU PRENATAL RHOGAM CPT",BGPBDATE,BGPEDATE)
  1. Q:'BGPRHO 0
  1. ;if sensitized check for sensitization ICD codes in problems list
  1. S:$P(BGPABO,U,2)="P" BGPRHO=$$PLTAX^BGPMUUT1(DFN,"BGPMU PRENATAL SENSITIZED ICD")
  1. Q:'BGPRHO 0
  1. Q 1
  1. ;
  1. TOTAL(DFN) ;See where this patient ends up
  1. ; BGPDSTR = Denominator string: encounter dates in FM format pieced by ";"
  1. ; BGPNSTR = Numerator string: <health factor text> ";" <health factor edit date in FM format>
  1. ;if we got here, this patient is in the denominator
  1. N BGPDT,PTCNT,DENCT,NUMCT,NOTCT,TOTALS,PT1
  1. S TOTALS=$G(^TMP("BGPMU0014",$J,BGPMUTF,"TOT"))
  1. S NUMCT=+$G(^TMP("BGPMU0014",$J,BGPMUTF,"NUM"))
  1. S NOTCT=+$G(^TMP("BGPMU0014",$J,BGPMUTF,"NOT"))
  1. S DENCT=+$G(^TMP("BGPMU0014",$J,BGPMUTF,"DEN"))
  1. S EXCCT=+$G(^TMP("BGPMU0014",$J,BGPMUTF,"EXC"))
  1. S PTCNT=$P(TOTALS,U,1),PT1=$P(TOTALS,U,2)
  1. S PTCNT=PTCNT+1
  1. S PT1=PT1+1
  1. I BGPDEN D
  1. .S DENCT=DENCT+1 S ^TMP("BGPMU0014",$J,BGPMUTF,"DEN")=DENCT
  1. .S ^TMP("BGPMU0014",$J,BGPMUTF,"DEN","PAT",DENCT)=DFN
  1. .I BGPEXC D
  1. ..S EXCCT=EXCCT+1
  1. ..S ^TMP("BGPMU0014",$J,BGPMUTF,"EXC")=EXCCT
  1. ..S ^TMP("BGPMU0014",$J,"PAT",BGPMUTF,"EXC",PT1)=DFN_U_BGPDSTR_U_"Excluded"
  1. .I 'BGPEXC D
  1. ..I BGPNUM D
  1. ...S NUMCT=NUMCT+1
  1. ...S ^TMP("BGPMU0014",$J,BGPMUTF,"NUM")=NUMCT
  1. ...S ^TMP("BGPMU0014",$J,"PAT",BGPMUTF,"NUM",PT1)=DFN_U_BGPDSTR_U_BGPNSTR
  1. ..I 'BGPNUM D
  1. ...S NOTCT=NOTCT+1
  1. ...S ^TMP("BGPMU0014",$J,BGPMUTF,"NOT")=NOTCT
  1. ...S ^TMP("BGPMU0014",$J,"PAT",BGPMUTF,"NOT",PT1)=DFN_U_BGPDSTR_U_BGPNSTR
  1. S ^TMP("BGPMU0014",$J,BGPMUTF,"TOT")=PTCNT_U_PT1
  1. ;Setup iCare array for patient
  1. S BGPICARE("MU.EP.0014.1",BGPMUTF)=+BGPDEN_U_+BGPNUM_U_+BGPEXC_U_$G(BGPDSTR)_";"_$G(BGPNSTR)
  1. Q
  1. ;
  1. TEST ; debug target
  1. ;S U="^"
  1. ;S DT=$$DT^XLFDT()
  1. ;S DFN=184 ; DFN = patient code from VA PATIENT file
  1. ;S BGPBDATE=3100401 ; BGPBDATE = begin date of report
  1. ;S BGPEDATE=3110401 ; BGPEDATE = end date of report
  1. ;S BGPPROV=2 ; BGPPROV = provider code from NEW PERSON file
  1. ;S BGPMUTF="C" ; BGPMUTF = timeframe variable - "C"=current year; "P"=previous year; "B"=baseline year
  1. ;D ENTRY
  1. Q