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

BGPMUD04.m

Go to the documentation of this file.
  1. BGPMUD04 ; IHS/MSC/SAT - MU measure NQF0012 ;06-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 HIV Screening
  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: PENTRY^BGPMUDP2
  1. ; Delimited Routine: DENTRY^BGPMUDD2
  1. N BGPP,BGPDEN,BGPNUM,BGPDT,BGPSEX,END,FIRST,IEN,START,VDATE,VIEN,VIEN1
  1. N BGPEDC,BGPENSTR,BGPEXC,BGPHFI,BGPHIV1,BGPHIV2,BGPLDATE,BGPSCRN
  1. S BGPDEN=0
  1. S BGPNUM=0
  1. S BGPEXC=0
  1. S BGPNSTR="" ; <NDC code> OR <CPT code> ; [date in FM format]
  1. S BGPDSTR=""
  1. S (BGPEDC,BGPENSTR,BGPLDATE,BGPP,BGPSCRN)=""
  1. K BGPPNA
  1. ;only check female
  1. S BGPSEX=$$SEX^AUPNPAT(DFN)
  1. Q:BGPSEX'="F"
  1. ;
  1. S BGPD="" ; diagnosis found for prenatal visit (list of dates by ;)
  1. ;
  1. ;look for a delivery live birth procedure during the reporting period
  1. S BGPP=$$DLBCPT(DFN,BGPBDATE,BGPEDATE,"BGPMU DELIVERY LIVE BIRTH CPT")
  1. ;S BGPP=$$CPT^BGPMUUT1(DFN,BGPBDATE,BGPEDATE,"BGPMU DELIVERY LIVE BIRTH CPT")
  1. I 'BGPP S BGPP=$$LASTDX^BGPMUUT2(DFN,BGPBDATE,BGPEDATE,"BGPMU DELIVERY LIVE BIRTH DX")
  1. Q:'BGPP
  1. ;
  1. ;look for prenatal visit with EP within 300 days of birth
  1. S START=9999999-$$FMADD^XLFDT($P(BGPP,U,3),-300),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 BGPD=""
  1. ...D EMD(DFN,VIEN,.BGPD,BGPDT) ;determine if ICD for prenatal visit
  1. ...S:BGPD'="" BGPPNA(BGPDT)=VIEN
  1. ;quit if no diagnosis for prenatal visit
  1. Q:'$D(BGPPNA)
  1. ;getting here means this patient is in the denominator
  1. S BGPDEN=1
  1. S VIEN1="",VIEN1=$O(BGPPNA(VIEN1))
  1. S BGPDSTR="DEL:"_$$DATE^BGPMUUTL($P(BGPP,U,3))_";"_"EN:"_$$DATE^BGPMUUTL(VIEN1)
  1. ;
  1. ;check for HIV screening within 30 days of first 2 prenatal visits
  1. S BGPCNT=0
  1. S BGPH="" F S BGPH=$O(BGPPNA(BGPH)) Q:BGPH="" Q:BGPCNT>1 Q:+BGPSCRN D
  1. .S BGPCNT=BGPCNT+1
  1. .S BGPDT=BGPH
  1. .K LABDATA
  1. .D LAB(.LABDATA,DFN,"BGPMU HIV PRENATAL SCRN LOINC","BGPMU HIV PRENATAL SCREEN CPT",BGPDT,$$FMADD^XLFDT(BGPDT,30))
  1. .I +LABDATA&($P($P(LABDATA,U,2),".",1)<=$$FMADD^XLFDT(BGPDT,30)) D
  1. ..S BGPNUM=1
  1. ..S BGPNSTR="M:HIV "_$$DATE^BGPMUUTL($P($P(LABDATA,U,2),".",1))
  1. ;
  1. ;setup 'not met' string
  1. I 'BGPNUM S BGPNSTR="NM:"
  1. ;
  1. ;Check exclusions if not in numerator
  1. I 'BGPNUM S BGPEXC=$$EXCLUDE(DFN)
  1. S:+BGPEXC BGPNSTR="Excluded"
  1. D TOTAL(DFN)
  1. ; check these
  1. K BGPP,BGPDEN,BGPNUM,BGPDT,BGPSEX,END,FIRST,IEN,START,VDATE,VIEN
  1. K BGPEDC,BGPENSTR,BGPEXC,BGPHFI,BGPHIV1,BGPHIV2,BGPLDATE,BGPPNA,BGPSCRN
  1. Q
  1. ;
  1. TOTAL(DFN) ;See where this patient ends up
  1. ; BGPNSTR = Numerator String: <Delivery Date text> ";" <Prenatal encounter date text> ";" <Numerator met LOINC and Date text>
  1. ; BGPDSTR = Numerator Not Met String: <Delivery Date text> ";" <Prenatal encounter date text> ";" <Numerator not met text>
  1. ; BGPESTR = Excluded String: <Delivery Date text> (empty 3rd ; piece indicates Excluded)
  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("BGPMU0012",$J,BGPMUTF,"TOT"))
  1. S NUMCT=+$G(^TMP("BGPMU0012",$J,BGPMUTF,"NUM"))
  1. S NOTCT=+$G(^TMP("BGPMU0012",$J,BGPMUTF,"NOT"))
  1. S DENCT=+$G(^TMP("BGPMU0012",$J,BGPMUTF,"DEN"))
  1. S EXCCT=+$G(^TMP("BGPMU0012",$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("BGPMU0012",$J,BGPMUTF,"DEN")=DENCT
  1. .S ^TMP("BGPMU0012",$J,"PAT",BGPMUTF,"DEN",DENCT)=DFN
  1. .I +BGPEXC D
  1. ..S EXCCT=EXCCT+1
  1. ..S ^TMP("BGPMU0012",$J,BGPMUTF,"EXC")=EXCCT
  1. ..S ^TMP("BGPMU0012",$J,"PAT",BGPMUTF,"EXC",PT1)=DFN_U_BGPDSTR_U_BGPNSTR
  1. .I '+BGPEXC D
  1. ..I BGPNUM D
  1. ...S NUMCT=NUMCT+1
  1. ...S ^TMP("BGPMU0012",$J,BGPMUTF,"NUM")=NUMCT
  1. ...S ^TMP("BGPMU0012",$J,"PAT",BGPMUTF,"NUM",PT1)=DFN_U_BGPDSTR_U_BGPNSTR
  1. ..I 'BGPNUM D
  1. ...S NOTCT=NOTCT+1
  1. ...S ^TMP("BGPMU0012",$J,BGPMUTF,"NOT")=NOTCT
  1. ...S ^TMP("BGPMU0012",$J,"PAT",BGPMUTF,"NOT",PT1)=DFN_U_BGPDSTR_U_BGPNSTR
  1. S ^TMP("BGPMU0012",$J,BGPMUTF,"TOT")=PTCNT_U_PT1
  1. ;Setup iCare array for patient
  1. S BGPICARE("MU.EP.0012.1",BGPMUTF)=BGPDEN_U_BGPNUM_U_""_U_$G(BGPDSTR)_";"_$G(BGPNSTR)
  1. Q
  1. ;
  1. ;look for ICD codes for prenatal visit
  1. EMD(DFN,VIEN,BGPD,BGPDT) ;
  1. N BGPI,BGPTMP
  1. S X=$$VSTPOV^BGPMUUT3(DFN,VIEN,"BGPMU PRENATAL VISIT DX")
  1. I +X S BGPD=BGPD_$S(BGPD'="":";",1:"")_$G(BGPDT)
  1. Q BGPD
  1. ;
  1. EXCLUDE(DFN) ;
  1. N BGPADM,BGPBIRTH,BGPHIV
  1. S REASON=0
  1. S BGPCNT=0
  1. S BGPBIRTH=$$GET1^DIQ(2,DFN_",",.03,"I")
  1. S BGPH="" F S BGPH=$O(BGPPNA(BGPH)) Q:BGPH="" Q:BGPCNT>2 Q:+REASON D
  1. .S BGPCNT=BGPCNT+1
  1. .S BGPDT=BGPH
  1. .S VIEN=BGPPNA(BGPH)
  1. .;check for HIV diagnosis during prenatal visit
  1. .S X=$$VSTPOV^BGPMUUT3(DFN,VIEN,"BGPMU HIV DX")
  1. .I +X S REASON=X Q
  1. .;check for HIV diagnosis prior to prenatal visit
  1. .S BGPADM=$$GET1^DIQ(9000010,VIEN_",",.01,"I")
  1. .S X=$$LASTDX^BGPMUUT2(DFN,$P(BGPBIRTH,".",1),$P(BGPADM,".",1),"BGPMU HIV DX")
  1. .I +X S REASON=X Q
  1. .;check for Lab refusal
  1. .S X=$$LABREF^BGPMUUT2(DFN,$P(BGPADM,".",1),$$FMADD^XLFDT($P(BGPADM,".",1),30),"BGPMU HIV PRENATAL SCRN LOINC","BGPMU HIV PRENATAL SCREEN CPT")
  1. .I +X S REASON=X Q
  1. ;check for active/inactive HIV diagnosis on problem list
  1. S BGPHIV=$$PLTAX^BGPMUUT1(DFN,"BGPMU HIV DX")
  1. I +BGPHIV S REASON=BGPHIV
  1. Q REASON
  1. ;
  1. DLBCPT(DFN,BDATE,EDATE,TAX) ;check for event date of CPT to be within date range
  1. N BGPR,BGPVCPT
  1. N CPTT,RESULT,TIEN,VCPT
  1. S (BGPR,BGPVCPT)=""
  1. S (CPTT,TIEN,VCPT)=""
  1. S RESULT=0
  1. ;check for valid input
  1. I '$G(DFN) Q 0
  1. I $G(TAX)="" Q 0
  1. I $G(EDATE)="" Q 0
  1. S TIEN="" S TIEN=$O(^ATXAX("B",TAX,TIEN)) Q:'TIEN 0
  1. I $G(BDATE)="" S BDATE=$$FMADD^XLFDT(EDATE,-365)
  1. ;check for CPT for patient checking CPT event dates
  1. F S BGPVCPT=$O(^AUPNVCPT("C",DFN,BGPVCPT)) Q:BGPVCPT="" Q:RESULT'=0 D
  1. .S VCPT=$P($G(^AUPNVCPT(BGPVCPT,0)),U,1),CPTT=$P($G(^ICPT(VCPT,0)),U,1)
  1. .I $$ICD^ATXCHK(CPTT,TIEN,1) D
  1. ..S CPTDATE=$P($P($G(^AUPNVCPT(BGPVCPT,12)),U,1),".",1)
  1. ..I (CPTDATE>=BDATE)&(CPTDATE<=EDATE) D
  1. ...S VST=$P($G(^AUPNVCPT(BGPVCPT,0)),U,3),VDATE=$P($G(^AUPNVSIT(VST,0)),U,1)
  1. ...S RESULT=1_U_CPTT_U_CPTDATE_U_VDATE
  1. Q RESULT
  1. ;
  1. LAB(LABDATA,DFN,LTAX,CTAX,BGPDT,EDATE) ;Look for LABs
  1. N BDT,CPT,CPTP,EDT,LOINC,LOINCP,VIEN,VLABP
  1. S LABDATA=0 ;1 U <COLLECTION DATE/TIME> U LOINC U CPT U <RESULT DATE/TIME>
  1. S LTIEN="" S LTIEN=$O(^ATXAX("B",LTAX,0))
  1. S CTIEN="" S CTIEN=$O(^ATXAX("B",CTAX,0))
  1. Q:('LTIEN)&('LTIEN) 0
  1. S BDT=9999999-BGPDT,EDT=9999999-EDATE
  1. F S EDT=$O(^AUPNVSIT("AA",DFN,EDT)) Q:EDT="" Q:$P(EDT,".",1)>BDT D
  1. .S VIEN="" F S VIEN=$O(^AUPNVSIT("AA",DFN,EDT,VIEN)) Q:VIEN="" D
  1. ..Q:'$D(^AUPNVLAB("AD",VIEN))
  1. ..I +LTIEN D
  1. ...S VLABP="" F S VLABP=$O(^AUPNVLAB("AD",VIEN,VLABP)) Q:VLABP="" Q:+LABDATA D
  1. ....S LOINCP=$P($G(^AUPNVLAB(VLABP,11)),U,13)
  1. ....S VLABDT=$P($G(^AUPNVLAB(VLABP,12)),U,1)
  1. ....S VLABRDT=$P($G(^AUPNVLAB(VLABP,12)),U,12)
  1. ....I +LOINCP D
  1. .....S LOINC=$P($G(^LAB(95.3,LOINCP,0)),U,1)_"-"_$P($G(^LAB(95.3,LOINCP,0)),U,15)
  1. .....I $D(^ATXAX(LTIEN,21,"B",LOINC)) S LABDATA=1_U_VLABDT_U_LOINC_U_U_VLABRDT
  1. ....I ('LABDATA)&(+CTIEN) D
  1. .....S LAB60=$P(^AUPNVLAB(VLABP,0),U,1)
  1. .....S SITE="" F S SITE=$O(^LAB(60,LAB60,1,SITE)) Q:SITE="" D
  1. ......S CPT=$P($G(^LAB(60,LAB60,1,SITE,3)),U,1)
  1. ......I (+CPT) I $D(^ATXAX(CTIEN,21,"B",CPT)) S LABDATA=1_U_VLABDT_U_U_CPT_U_VLABRDT
  1. Q LABDATA
  1. ;
  1. TEST ; debug target
  1. S U="^"
  1. S DT=$$DT^XLFDT()
  1. S DFN=608 ; DFN = patient code from VA PATIENT file
  1. S BGPBDATE=3100101 ; BGPBDATE = begin date of report
  1. S BGPEDATE=3101231 ; 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