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

BGPMUA12.m

Go to the documentation of this file.
  1. BGPMUA12 ; IHS/MSC/MGH - MI measure NQF0002 ;20-Jul-2011 14:39;DU
  1. ;;11.1;IHS CLINICAL REPORTING SYSTEM;**1**;JUN 27, 2011;Build 106
  1. ;Code to collect meaningful use reports
  1. ENTRY1 ;EP Entry point for NQA0002 for pharyngitis
  1. N START,END,BGPNUM,BGPDEN,BGPNUM,STRING,BGPHYPER,BGPHYPL
  1. N IEN,INV,VISIT,DATA,VDATE,VALUE,EXCEPT,FIRST,VIEN,EXCEPT,RESULT
  1. N CNT,THROAT,NUM,EXC,OUTENC,VENC,DIABDX,ERENC
  1. S (BGPDEN,BGPNUM,RESULT)=0
  1. S START=9999999-BGPBDATE,END=9999999-BGPEDATE,VALUE=0
  1. S START=START_".2359"
  1. S (STRING,STRING2)="",DIABDX=0
  1. S (DIAB,EXC,NUM)=0
  1. ;Pts must be >=2 and <19
  1. ;No need to check further if no age match
  1. Q:BGPAGEE<2!(BGPAGEE>18)
  1. S CNT=0
  1. S FIRST=END-0.1 F S FIRST=$O(^AUPNVSIT("AA",DFN,FIRST)) Q:FIRST=""!($P(FIRST,".",1)>START) D
  1. .S IEN=0 F S IEN=$O(^AUPNVSIT("AA",DFN,FIRST,IEN)) Q:'+IEN D
  1. ..;Check provider, Only visits for chosen provider
  1. ..Q:'$$PRV^BGPMUUT1(IEN,BGPPROV)
  1. ..S OUTENC=$$VSTCPT^BGPMUUT1(DFN,IEN,"BGPMU ENCOUNTER OUTPT")
  1. ..I +OUTENC D VSTSTORE Q
  1. ..S ERENC=$$VSTCPT^BGPMUUT1(DFN,IEN,"BGPMU ENCOUNTER ED CPT")
  1. ..I +ERENC D VSTSTORE Q
  1. ..S VENC=$$VSTPOV^BGPMUUT3(DFN,IEN,"BGPMU ENC OUTPATIENT ICD")
  1. ..I +VENC D VSTSTORE Q
  1. ;Next check to see if the patient is in the denominator
  1. ;Need a DX of phargngitis on one of the visits AND a prescription for antibiotics
  1. I $D(VIEN)>0 D
  1. .S THROAT=$$PHARYNG(DFN,CNT,.VIEN)
  1. .I +THROAT D
  1. ..;If the patient has pharyngitis and a DX for antibiotics, check to see if they are in the numerator
  1. ..S NUM=$$NUM1(DFN,THROAT)
  1. ..D TOTAL1(DFN,THROAT,NUM)
  1. Q
  1. VSTSTORE ;Store compliant visit in array
  1. S CNT=CNT+1
  1. S VDATE=$P($G(^AUPNVSIT(IEN,0)),U,1)
  1. S VIEN(CNT)=IEN_U_VDATE
  1. Q
  1. TOTAL1(DFN,THROAT,NUM) ;See where this patient ends up
  1. N PTCNT,EXCCT,DENCT,NUMCT,NOTNUM,TOTALS,DXTIME,DEN
  1. S TOTALS=$G(^TMP("BGPMU0002",$J,BGPMUTF,"TOT"))
  1. S DENCT=+$G(^TMP("BGPMU0002",$J,BGPMUTF,"DEN"))
  1. S NUMCT=+$G(^TMP("BGPMU0002",$J,BGPMUTF,"NUM"))
  1. S NOTNUM=+$G(^TMP("BGPMU0002",$J,BGPMUTF,"NOT"))
  1. S PTCNT=TOTALS
  1. S PTCNT=PTCNT+1
  1. S (DEN,DXTIME)=""
  1. S DENCT=DENCT+1 S ^TMP("BGPMU0002",$J,BGPMUTF,"DEN")=DENCT
  1. I $P(THROAT,U,3)'="" S DXTIME=$$DATE^BGPMUUTL($P(DIAB,U,3))
  1. ;S DEN=$P(THROAT,U,2)_" "_DXTIME
  1. I $D(STRING(1)) S DEN="EN:"_STRING(1)
  1. I $D(STRING(2)) S DEN=DEN_";PHA: "_STRING(2)
  1. I $D(STRING(3)) S DEN=DEN_";MED:"_STRING(3)
  1. I +NUM D
  1. .S NUMCT=NUMCT+1 S ^TMP("BGPMU0002",$J,BGPMUTF,"NUM")=NUMCT
  1. .I BGPMUTF="C" S ^TMP("BGPMU0002",$J,"PAT",BGPMUTF,"NUM",PTCNT)=DFN_U_DEN_U_"M:"_$P(NUM,U,2)_";"_$P(NUM,U,3)
  1. E D
  1. .S NOTNUM=NOTNUM+1 S ^TMP("BGPMU0002",$J,BGPMUTF,"NOT")=NOTNUM
  1. .I BGPMUTF="C" S ^TMP("BGPMU0002",$J,"PAT",BGPMUTF,"NOT",PTCNT)=DFN_U_DEN_U_"NM:"_$P(NUM,U,2)_";"_$P(NUM,U,3)
  1. S ^TMP("BGPMU0002",$J,BGPMUTF,"TOT")=PTCNT
  1. ;Setup iCare array for patient
  1. S BGPICARE("MU.EP.0002.1",BGPMUTF)=1_U_+NUM_U_U_U_DEN_";"_$P(NUM,U,2)_";"_$P(NUM,U,3)
  1. Q
  1. NUM1(DFN,DATA) ;Look for wide range of items to satisfy this measure
  1. N FOUND,DT1,DT2,IEN,RESULT,TAX,VST,MDTE,PHARCPT
  1. N LABIEN,MICRO,VAL,VAL2,DATA2,RESULT2,PHARLNC,PHARMI
  1. S FOUND=0
  1. S VST=$P(DATA,U,2),MDTE=$P(DATA,U,3)
  1. ;Set date 3 days before medication and 3 days after
  1. N X1,X2,X S X1=MDTE,X2=-3 D C^%DTC S DT1=X
  1. N X1,X2,X S X1=MDTE_".2359",X2=+3 D C^%DTC S DT2=X
  1. ;Check for lab results between these 2 dates
  1. ;First, check V Lab
  1. S PHARLNC=$$COLD^BGPMUUT2(DFN,DT1,DT2,"BGPMU LAB LOINC STREP TEST")
  1. I +PHARLNC S FOUND=1_U_"LAB "_$$DATE^BGPMUUTL($P(PHARLNC,U,3)) Q FOUND
  1. D LABCPT^BGPMUUT5(.DATA,DFN,"BGPMU LAB CPT STREP TEST",BGPBDATE,BGPEDATE)
  1. S VAL="" S VAL=$O(DATA(VAL))
  1. I +VAL S FOUND=1_U_"LAB "_$$DATE^BGPMUUTL(9999999-VAL) Q FOUND
  1. ;Second, check for a micro test in V MICRO
  1. S MICROLNC=$$MICRO^BGPMUUT5(DFN,DT1,DT2,"BGPMU LAB LOINC STREP TEST")
  1. I +MICROLNC S FOUND=1_U_"LAB "_$$DATE^BGPMUUTL($P(MICROLNC,U,1)) Q FOUND
  1. ;Finally, check V CPT
  1. S PHARCPT=$$CPT^BGPMUUT1(DFN,DT1,DT2,"BGPMU LAB CPT STREP TEST")
  1. I +PHARCPT S FOUND=1_U_"CPT "_$$DATE^BGPMUUTL($P(PHARCPT,U,3))
  1. Q FOUND
  1. PHARYNG(DFN,CNT,VIEN) ;Check patient for Pharyngitis
  1. N DX,MEDS,FOUND,IX,VST,VDATE,TAX
  1. S FOUND=0,MEDS=0
  1. S IX=0 F S IX=$O(VIEN(IX)) Q:IX=""!(IX>CNT)!(+FOUND) D
  1. .S VST=$P(VIEN(IX),U,1)
  1. .S VDATE=$P(VIEN(IX),U,2)
  1. .S TAX="BGPMU PHARYNGITIS DX"
  1. .S DX=$$VSTPOV^BGPMUUT3(DFN,VST,TAX)
  1. .;If this visit has a DX of pharyngitis, check for prescription within 3 days
  1. .I +DX S MEDS=$$MED(DFN,VST,VDATE)
  1. .I +MEDS D
  1. ..S STRING(1)=$$DATE^BGPMUUTL(VDATE)
  1. ..S STRING(2)=$$DATE^BGPMUUTL($P(DX,U,3))
  1. ..S STRING(3)=$$DATE^BGPMUUTL($P(MEDS,U,3))
  1. ..S FOUND=1_U_VST_U_$P(MEDS,U,3)
  1. Q FOUND
  1. MED(DFN,VISIT,VDTE) ;If we have found a DX of pharyngitis, we need to find the prescription
  1. N RX,TAX,DT1,DT2,DRUG,OLDDRUG,VALID
  1. S RX=0,VALID=1
  1. S VDTE=$P(VDTE,".",1)
  1. S VDTE2=VDTE_".2359"
  1. ;Check for RX on up to 3 days later
  1. N X1,X2,X S X1=VDTE2,X2=+3 D C^%DTC S DT1=X
  1. S TAX="BGPMU PHARYNGITIS MEDS NDCS"
  1. S DRUG=$$FIND^BGPMUUT8(DFN,TAX,VDTE,BGPPROV,DT1,VALID)
  1. ;Prescription found, now go back and make sure pt hasn't been on antibiotics in the last 30 days
  1. I +DRUG D
  1. .N X1,X2,X S X1=VDTE,X2=-30 D C^%DTC S DT2=X
  1. .S OLDDRUG=$$FIND^BGPMUUT8(DFN,TAX,DT2,"",VDTE,VALID)
  1. .I +OLDDRUG=0 S RX=DRUG
  1. Q RX