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

BGPMUA03.m

Go to the documentation of this file.
  1. BGPMUA03 ; IHS/MSC/MGH - MI measure NQF0031 ;29-Nov-2011 7:37;MMT
  1. ;;12.1;IHS CLINICAL REPORTING;;MAY 17, 2012;Build 66
  1. ;Code to collect meaningful use report for breast cancer 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. N START,END,BGPNUM,BGPDEN,BGPNUM,AENC,BENC,BGPX,MASTCNT
  1. N IEN,INV,VISIT,WTIEN,DATA,VDATE,VALUE,RESULT,FIRST,REF,VIEN,EXCEPT
  1. N BGPN1,BGPN3,RETVAL,BGPMUMAM,BGPMAS,AENC,BENC,BGPBIRTH,BGPMAM,BGPMAM2,BGPMAM3,BGPMAM4
  1. N BGPENC,BGPBICPT,BGPUICPT,BGPBIICD,BGPUIICD,STRING1,STRING2
  1. N BGPDT,BGPDSTR,BGPNSTR
  1. S (BGPDEN,BGPNUM,RESULT)=0
  1. S (BGPDSTR,BGPNSTR)=""
  1. S START=9999999-BGPBDATE,END=9999999-BGPEDATE,VALUE=0
  1. S START2Y=9999999-$$FMADD^XLFDT(BGPEDATE,-730)
  1. S RETVAL="",VIEN="" ;Return value
  1. S BGPSEX=$$SEX^AUPNPAT(DFN)
  1. Q:BGPSEX="M" ;Patients must be female
  1. ;Pts must be 41-69
  1. ;No need to check further if no age match
  1. Q:(BGPAGEE<41)!(BGPAGEE>68)
  1. ;find outpatient encounter with provider within 2 years of BGPEDATE
  1. S FIRST=END-0.1 F S FIRST=$O(^AUPNVSIT("AA",DFN,FIRST)) Q:FIRST=""!($P(FIRST,".",1)>START2Y)!(+VIEN) D
  1. .S IEN=0 F S IEN=$O(^AUPNVSIT("AA",DFN,FIRST,IEN)) Q:'+IEN!(VIEN]"") D
  1. ..;Check provider, Only visits for chosen provider
  1. ..Q:'$$PRV^BGPMUUT1(IEN,BGPPROV)
  1. ..;Check E&M
  1. ..S AENC=$$VSTCPT^BGPMUUT1(DFN,IEN,"BGPMU MAMMOGRAM ENC EM")
  1. ..S BENC=$$VSTPOV^BGPMUUT3(DFN,IEN,"BGPMU MAMMOGRAM ENC ICD")
  1. ..Q:(AENC=0)&(BENC=0)
  1. ..S DATA=$G(^AUPNVSIT(IEN,0))
  1. ..S VDATE=$P($G(^AUPNVSIT(IEN,0)),U,1),VIEN=IEN
  1. I +VIEN D
  1. .S (STRING1,STRING2)=""
  1. .K BGPX
  1. .S MASTCNT=0
  1. .;Set a new begin date of 2 years prior to the visit
  1. .N X1,X2,X S X1=VDATE,X2=-730 D C^%DTC S BGPENC=X
  1. .S BGPDT=$P($P($G(^AUPNVSIT(VIEN,0)),U,1),".",1)
  1. .I AENC S STRING1="ENCC:"_$P(AENC,U,2)
  1. .I BENC S STRING1="ENCC:"_$P(BENC,U,2)
  1. .S BGPBIRTH=$P(^DPT(DFN,0),U,3)
  1. .I BGPBIRTH="" S BGPBIRTH=BGPENC
  1. .;First, check for bilateral mastectomy
  1. .S BGPBICPT=$$CPT("B")
  1. .I +BGPBICPT S VALUE=BGPBICPT,RETVAL=1 Q
  1. .;Then check for 2 unilateral CPT codes
  1. .S BGPUICPT=$$CPT("U")
  1. .I +BGPUICPT S VALUE=BGPUICPT,RETVAL=1 Q
  1. .;Quit if patient has ICD0 code for bilateral mastectomy on record
  1. .S BGPBIICD=$$LASTPRC^BGPMUUT2(DFN,BGPBIRTH,BGPEDATE,"BGPMU BILAT MASTECTOMY ICD")
  1. .I +BGPBIICD S VALUE=BGPBIICD,RETVAL=1 Q
  1. .;Check for 2 unilateral ICD0 codes
  1. .S BGPUIICD=$$ICD0("U")
  1. .I +BGPUIICD S VALUE=BGPUIICD,RETVAL=1 Q
  1. .;getting here means the patient is in the denominator
  1. .S BGPDSTR=BGPDT
  1. .;Check for mammogram in the last 2 years
  1. .S BGPMAM=$$CPT^BGPMUUT1(DFN,BGPENC,BGPEDATE,"BGPMU MAMMOGRAM CPTS")
  1. .I +BGPMAM=1 S RESULT=BGPMAM
  1. .S BGPMAM2=$$LASTPRC^BGPMUUT2(DFN,BGPENC,BGPEDATE,"BGPMU MAMMOGRAM ICD")
  1. .I +BGPMAM2=1 S RESULT=BGPMAM2
  1. .S BGPMAM3=$$LASTDX^BGPMUUT2(DFN,BGPENC,BGPEDATE,"BGPMU MAMMOGRAM DX")
  1. .I +BGPMAM3=1 S RESULT=BGPMAM3
  1. .S BGPMAM4=$$RAD^BGPMUUT1(DFN,BGPENC,BGPEDATE,"BGPMU MAMMOGRAM CPTS",7)
  1. .I +BGPMAM4 S RESULT=1_U_BGPMAM4
  1. .I +BGPMAM S STRING2="MAMC:"_$P(BGPMAM,U,2),BGPNSTR=$P(BGPMAM,U,2)_";"_$P($P(BGPMAM,U,3),".",1)
  1. .I +BGPMAM2 D
  1. ..I STRING2="" S STRING2="MAMP:"+$P(BGPMAM2,U,2),BGPNSTR=$P(BGPMAM2,U,2)_";"_$P($P(BGPMAM2,U,3),".",1)
  1. ..I STRING2'="" S STRING2=STRING2_";MAMP:"+$P(BGPMAM2,U,2),BGPNSTR=$P(BGPMAM2,U,2)_";"_$P($P(BGPMAM2,U,3),".",1)
  1. .I +BGPMAM3 D
  1. ..I STRING2="" S STRING2="MAMD:"+$P(BGPMAM3,U,2),BGPNSTR=$P(BGPMAM3,U,2)_";"_$P($P(BGPMAM3,U,3),".",1)
  1. ..I STRING2'="" S STRING2=STRING2_";MAMD:"+$P(BGPMAM3,U,2),BGPNSTR=$P(BGPMAM3,U,2)_";"_$P($P(BGPMAM3,U,3),".",1)
  1. .I +BGPMAM4 D
  1. ..I STRING2="" S STRING2="MAMC:"+$P(BGPMAM4,U,2),BGPNSTR=$P(BGPMAM4,U,2)_";"_$P($P(BGPMAM4,U,1),".",1)
  1. ..I STRING2'="" S STRING2=STRING2_";MAMC:"+$P(BGPMAM4,U,2),BGPNSTR=$P(BGPMAM4,U,2)_";"_$P($P(BGPMAM4,U,1),".",1)
  1. .D TOTAL(DFN,VIEN,BGPDSTR,BGPNSTR)
  1. Q
  1. TOTAL(DFN,VIEN,BGPDSTR,BGPNSTR) ;See where this patient ends up
  1. N PTCNT,EXCCT,DENCT,NUMCT,TOTALS
  1. S TOTALS=$G(^TMP("BGPMU0031",$J,BGPMUTF,"TOT"))
  1. S DENCT=+$G(^TMP("BGPMU0031",$J,BGPMUTF,"DEN"))
  1. S NUMCT=+$G(^TMP("BGPMU0031",$J,BGPMUTF,"NUM"))
  1. S NOTCT=+$G(^TMP("BGPMU0031",$J,BGPMUTF,"NOT"))
  1. S PTCNT=TOTALS
  1. S PTCNT=PTCNT+1
  1. ;Do not include those with 2 mastectomies in the denominator
  1. Q:+VALUE
  1. S DENCT=DENCT+1 S ^TMP("BGPMU0031",$J,BGPMUTF,"DEN")=DENCT
  1. I +RESULT D
  1. .S NUMCT=NUMCT+1 S ^TMP("BGPMU0031",$J,BGPMUTF,"NUM")=NUMCT
  1. .I BGPMUTF="C" S ^TMP("BGPMU0031",$J,"PAT",BGPMUTF,"NUM",PTCNT)=DFN_U_STRING1_U_STRING2_U_$G(BGPDSTR)_U_$G(BGPNSTR)
  1. E S ^TMP("BGPMU0031",$J,"PAT",BGPMUTF,"NOT",PTCNT)=DFN_U_STRING1_U_$G(STRING2)_U_$G(BGPDSTR)_U_$G(BGPNSTR) I BGPMUTF="C" S ^TMP("BGPMU0031",$J,"PAT",BGPMUTF,"DEN",PTCNT)=DFN_U_STRING1_U_U_$G(BGPDSTR)_U_$G(BGPNSTR)
  1. S ^TMP("BGPMU0031",$J,BGPMUTF,"TOT")=PTCNT
  1. ;Setup iCare array for patient
  1. S BGPICARE("MU.EP.0031.1",BGPMUTF)=1_U_+RESULT_U_""_U_$G(BGPDSTR)_";"_$G(BGPNSTR)
  1. Q
  1. CPT(CODE) ;See if the patient has the CPT codes for mastectomy
  1. N VAL,TAX,FOUND,VISIT,CPT,MDATE,CPTCODE,MOD1,MOD2
  1. S VAL=0
  1. ;loop through all cpt codes up to Edate and if any match quit
  1. S TAX=$O(^ATXAX("B","BGPMU MASTECTOMY CPT",0))
  1. I TAX S FOUND="" D
  1. .S CPT=0 F S CPT=$O(^AUPNVCPT("AC",DFN,CPT)) Q:CPT'=+CPT!(FOUND]"") D
  1. ..S VISIT=$P($G(^AUPNVCPT(CPT,0)),U,3)
  1. ..Q:VISIT=""
  1. ..S MDATE=$P($P($G(^AUPNVSIT(VISIT,0)),U),".") ;date done
  1. ..Q:MDATE=""
  1. ..I MDATE>BGPEDATE Q
  1. ..S CPTCODE=$P(^AUPNVCPT(CPT,0),U)
  1. ..Q:'$$ICD^ATXCHK(CPTCODE,TAX,1)
  1. ..S:CODE="U" MASTCNT=MASTCNT+1
  1. ..S MOD1=$P(^AUPNVCPT(CPT,0),U,8)
  1. ..S MOD2=$P(^AUPNVCPT(CPT,0),U,9)
  1. ..D MODIFY(MOD1,MOD2)
  1. I 'FOUND S FOUND=0
  1. Q FOUND
  1. ICD0(CODE) ;See if the patient has the CPT codes for mastectomy
  1. N VAL,TAX,FOUND,VISIT,ICD0,MDATE,ICDCODE,MOD1,MOD2,DATA
  1. S VAL=0,DATA=0
  1. ;loop through all ICD0 codes up to Edate and if any match quit
  1. S TAX=$O(^ATXAX("B","BGPMU UNI MASTECTOMY ICDS",0))
  1. I TAX S FOUND="" D
  1. .S ICD0=0 F S ICD0=$O(^AUPNVPRC("AC",DFN,ICD0)) Q:ICD0'=+ICD0!(FOUND]"") D
  1. ..S VISIT=$P($G(^AUPNVPRC(ICD0,0)),U,3)
  1. ..Q:VISIT=""
  1. ..S MDATE=$P($P($G(^AUPNVPRC(ICD0,0)),U,6),".")
  1. ..I MDATE="" S MDATE=$P($P($G(^AUPNVSIT(VISIT,0)),U),".") ;date done
  1. ..Q:MDATE=""
  1. ..I MDATE>BGPEDATE Q
  1. ..S ICDCODE=$P(^AUPNVPRC(ICD0,0),U)
  1. ..Q:'$$ICD^ATXCHK(ICDCODE,TAX,0)
  1. ..S:CODE="U" MASTCNT=MASTCNT+1
  1. ..S MOD1=$P(^AUPNVPRC(ICD0,0),U,17)
  1. ..S MOD2=$P(^AUPNVPRC(ICD0,0),U,18)
  1. ..D MODIFY(MOD1,MOD2)
  1. I 'FOUND S FOUND=0
  1. Q FOUND
  1. MODIFY(MOD1,MOD2) ;Check for modifiers
  1. N MOD,DATE2
  1. S MOD=""
  1. S:MOD1 MOD=$P($G(@$$MODGBL@(MOD1,0)),U,1)
  1. S:MOD2 MOD=$P($G(@$$MODGBL@(MOD2,0)),U,1)
  1. I (MOD1=50)!(MOD2=50) S FOUND=1
  1. I CODE="U"&(MASTCNT=1) D
  1. .S BGPX(MASTCNT)=MDATE_U_MOD
  1. I CODE="U"&(MASTCNT>1) D
  1. .I MDATE'=$P(BGPX(1),U,1) S FOUND=1
  1. Q
  1. MODGBL() Q $S($$CSVACT():"^DIC(81.3)",$G(DUZ("AG"))="I":"^AUTTCMOD",1:"^DIC(81.3)")
  1. CSVACT(RTN) ;EP
  1. Q $S(DUZ("AG")'="I":1,$$VERSION^XPDUTL("BCSV")="":0,'$L($G(RTN)):1,1:$T(+0^@RTN)'="")