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

BGPMUA02.m

Go to the documentation of this file.
  1. BGPMUA02 ; IHS/MSC/MGH - MI measure NQF0034 ;01-Mar-2011 15:36;MGH
  1. ;;11.1;IHS CLINICAL REPORTING SYSTEM;**1**;JUN 27, 2011;Build 106
  1. ;Code to collect meaningful use report for colorectal screening
  1. ENTRY ;EP
  1. N START,END,BGPNUM,BGPDEN,BGPNUM,AENC,BENC,BGPBIRTH,COLLECT
  1. N IEN,INV,VISIT,WTIEN,DATA,VDATE,VALUE,EXCEPT,FIRST,REF,VIEN,EXCEPT,AENC,BENC
  1. N BGPN1,BGPN3,RETVAL,BGPCOLI,BGPCOLP,BGPSIGI,BGPSIGP,BGPFOBTI,BGPCAPR,BGPFOBTC,BGPFOBTI,BGPDSTR,BGPNSTR
  1. N BGPFOBTP,BGPFOBTL,BGPCADXI,BGPCADXP,BGPCARMC,BGPCARMP,BGPENC,BGPFOBT,BGPSIG,BGPCOL,STRING1,STRING2
  1. S (BGPDEN,BGPNUM)=0
  1. ;Set a new begin date of 2 years prior to the reporting period end date
  1. N X1,X2,X S X1=BGPEDATE,X2=-730 D C^%DTC S BGPENC=X
  1. S START=9999999-BGPENC,END=9999999-BGPEDATE,VALUE=0,EXCEPT=0,COLLECT=0
  1. S BGPBIRTH=$P(^DPT(DFN,0),U,3)
  1. I BGPBIRTH="" S BGPBIRTH=BGPENC
  1. S RETVAL="",VIEN="" ;Return value
  1. S (STRING1,STRING2,BGPDSTR,BGPNSTR)=""
  1. ;Pts must be 50-74
  1. ;No need to check further if no age match
  1. Q:(BGPAGEE<50)!(BGPAGEE>74)
  1. ;Quit if the patient has a total colectomy by ICD0 or CPT
  1. S BGPCARMC=$$CPT^BGPMUUT1(DFN,BGPBIRTH,BGPEDATE,"BGPMU COLECTOMY CPT")
  1. Q:+BGPCARMC
  1. S BGPCARMP=$$LASTPRC^BGPMUUT2(DFN,BGPBIRTH,BGPEDATE,"BGPMU COLECTOMY ICDS")
  1. Q:+BGPCARMP
  1. S FIRST=END-0.1 F S FIRST=$O(^AUPNVSIT("AA",DFN,FIRST)) Q:FIRST=""!($P(FIRST,".",1)>START)!(RETVAL]"") D
  1. .S IEN=0 F S IEN=$O(^AUPNVSIT("AA",DFN,FIRST,IEN)) Q:'+IEN!(RETVAL]"") D
  1. ..;Check provider, Only visits for chosen provider
  1. ..Q:'$$PRV^BGPMUUT1(IEN,BGPPROV)
  1. ..;Quit if any visit in the last 2 years does not have a valid E&M code
  1. ..S AENC=$$VSTCPT^BGPMUUT1(DFN,IEN,"BGPMU COLON ENC EM")
  1. ..S BENC=$$VSTPOV^BGPMUUT3(DFN,IEN,"BGPMU COLON ENC DX")
  1. ..Q:(AENC=0)&(BENC=0)
  1. ..I +AENC S STRING1="ENCC:"_$P(AENC,U,2)
  1. ..I +BENC S STRING1="ENCC:"_$P(BENC,U,2)
  1. ..S DATA=$G(^AUPNVSIT(IEN,0))
  1. ..S VDATE=$P($G(^AUPNVSIT(IEN,0)),U,1),VIEN=IEN
  1. Q:'+VIEN
  1. S BGPDSTR=$P(VDATE,".",1)
  1. S STRING2=""
  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. ;Set a new begin date of 10 years prior to the visit for colonoscopy
  1. N X1,X2,X S X1=BGPEDATE,X2=-3650 D C^%DTC S BGPCOL=X
  1. ;Set a new begin date of 5 years prior to the visit to find sigmoidoscopy
  1. N X1,X2,X S X1=BGPEDATE,X2=-1825 D C^%DTC S BGPSIG=X
  1. ;Set a new begin date of 1 year prior to the visit to find FOBT
  1. N X1,X2,X S X1=BGPEDATE,X2=-365 D C^%DTC S BGPFOBT=X
  1. ;Check for colonoscopy in the last 10 years
  1. S BGPCOLP=$$CPT^BGPMUUT1(DFN,BGPCOL,BGPEDATE,"BGPMU COLONOSCOPY CPT")
  1. I +BGPCOLP=1 S VALUE=BGPCOLP,STRING2="COLC:"_$P(BGPCOLP,U,2),BGPNSTR=$P(BGPCOLP,U,2)_";"_$P($P(BGPCOLP,U,3),".",1) G EXCCHK
  1. S BGPCOLI=$$LASTPRC^BGPMUUT2(DFN,BGPCOL,BGPEDATE,"BGPMU COLONOSCOPY PROCEDURE")
  1. I +BGPCOLI=1 S VALUE=BGPCOLI,STRING2="COLI:"_$P(BGPCOLI,U,2),BGPNSTR=$P(BGPCOLI,U,2)_";"_$P($P(BGPCOLI,U,3),".",1) G EXCCHK
  1. ;Check for sigmoidoscopy in the last 5 years
  1. S BGPSIGP=$$CPT^BGPMUUT1(DFN,BGPSIG,BGPEDATE,"BGPMU SIGMOIDOSCOPY CPT")
  1. I +BGPSIGP=1 S VALUE=BGPSIGP,STRING2=STRING2_";SIGC:"_$P(BGPSIGP,U,2),BGPNSTR=$P(BGPSIGP,U,2)_";"_$P($P(BGPSIGP,U,3),".",1) G EXCCHK
  1. S BGPSIGI=$$LASTPRC^BGPMUUT2(DFN,BGPSIG,BGPEDATE,"BGPMU SIGMOIDOSCOPY PROCEDURES")
  1. I +BGPSIGI=1 S VALUE=BGPSIGI,STRING2=STRING2_";SIGI:"_$P(BGPSIGI,U,2),BGPNSTR=$P(BGPSIGI,U,2)_";"_$P($P(BGPSIGI,U,3),".",1) G EXCCHK
  1. ;Check for FOBT in the last year
  1. S BGPFOBTC=$$CPT^BGPMUUT1(DFN,BGPFOBT,BGPEDATE,"BGPMU FOBT CPTS")
  1. I +BGPFOBTC=1 S VALUE=BGPFOBTC,STRING2=STRING2_";FOBC:"_$P(BGPFOBTC,U,2),BGPNSTR=$P(BGPFOBTC,U,2)_";"_$P($P(BGPFOBTC,U,3),".",1) G EXCCHK
  1. S BGPFOBTI=$$LASTDX^BGPMUUT2(DFN,BGPFOBT,BGPEDATE,"BGPMU FOBT ICD CODES")
  1. I +BGPFOBTI=1 S VALUE=BGPFOBTI,STRING2=STRING2_";FOBI:"_$P(BGPFOBTI,U,2),BGPNSTR=$P(BGPFOBTI,U,2)_";"_$P($P(BGPFOBTI,U,3),".",1) G EXCCHK
  1. S BGPFOBTL=$$LOINC^BGPMUUT2(DFN,BGPFOBT,BGPEDATE,"BGPMU FOBT LOINC")
  1. I +BGPFOBTL S BGPLOINC=$P($G(^AUPNVLAB($P(BGPFOBTL,U,2),11)),U,13) S VALUE="1^"_BGPFOBTL,STRING2=STRING2_";FOBL:"_BGPLOINC,BGPNSTR=BGPLOINC_";"_$P($P(BGPFOBTL,U,1),".",1) G EXCCHK
  1. ;I +BGPFOBTL S VALUE="1^"_BGPFOBTL,STRING2=STRING2_";FOBL:"_$P(BGPFOBTL,U,2),BGPNSTR=$P(BGPFOBTL,U,2)_";"_$P($P(BGPFOBTL,U,1),".",1) G EXCCHK
  1. EXCCHK ;Exclude if the patient has a colon cancer diagnosis
  1. ;Colon cancer is by ICD or CPT code
  1. I '+VALUE D
  1. .S BGPCADXI=$$LASTDX^BGPMUUT2(DFN,BGPBIRTH,BGPEDATE,"BGPMU COLON CANCER DX")
  1. .I +BGPCADXI=1 S EXCEPT=BGPCADXI,STRING1=STRING1_";CCD:"_$P(BGPCADXI,U,2)
  1. .S BGPCADXP=$$CPT^BGPMUUT1(DFN,BGPBIRTH,BGPEDATE,"BGPMU COLON CANCER STUDY")
  1. .I +BGPCADXP=1 S EXCEPT=BGPCADXP,STRING1=STRING1_";CCS:"_$P(BGPCADXP,U,2)
  1. .S BGPCAPR=$$PLTAX^BGPMUUT1(DFN,"BGPMU COLON CANCER DX")
  1. .I +BGPCAPR=1 S EXCEPT=BGPCAPR,STRING1=STRING1_";CCP:"_$P(BGPCAPR,U,2)
  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("BGPMU0034",$J,BGPMUTF,"TOT"))
  1. S EXCCT=+$G(^TMP("BGPMU0034",$J,BGPMUTF,"EXC"))
  1. S DENCT=+$G(^TMP("BGPMU0034",$J,BGPMUTF,"DEN"))
  1. S NUMCT=+$G(^TMP("BGPMU0034",$J,BGPMUTF,"NUM"))
  1. S PTCNT=TOTALS
  1. S PTCNT=PTCNT+1
  1. ;Do not include those with total colectomy in the denomiator
  1. ;Q:+COLLECT
  1. S DENCT=DENCT+1 S ^TMP("BGPMU0034",$J,BGPMUTF,"DEN")=DENCT
  1. ;If Colon Cancer Dx, put in exception list
  1. I +EXCEPT D
  1. .S EXCCT=EXCCT+1 S ^TMP("BGPMU0034",$J,BGPMUTF,"EXC")=EXCCT
  1. .I BGPMUTF="C" S ^TMP("BGPMU0034",$J,"PAT",BGPMUTF,"EXC",PTCNT)=DFN_U_STRING1_U_STRING2_U_$G(BGPDSTR)_U_"Excluded"
  1. E D
  1. .I +VALUE D
  1. ..S NUMCT=NUMCT+1 S ^TMP("BGPMU0034",$J,BGPMUTF,"NUM")=NUMCT
  1. ..I BGPMUTF="C" S ^TMP("BGPMU0034",$J,"PAT",BGPMUTF,"NUM",PTCNT)=DFN_U_STRING1_U_STRING2_U_$G(BGPDSTR)_U_$G(BGPNSTR)
  1. .E I BGPMUTF="C" S ^TMP("BGPMU0034",$J,"PAT",BGPMUTF,"DEN",PTCNT)=DFN_U_STRING1_U_STRING2_U_$G(BGPDSTR)_U_$G(BGPNSTR)
  1. S ^TMP("BGPMU0034",$J,BGPMUTF,"TOT")=PTCNT
  1. ;Setup iCare array for patient
  1. S BGPICARE("MU.EP.0034.1",BGPMUTF)='EXCEPT_U_+VALUE_U_+EXCEPT_U_$G(BGPDSTR)_";"_$G(BGPNSTR)_U_$P(EXCEPT,U,2)
  1. Q
  1. ;
  1. TEST ;
  1. S U="^"
  1. S DT=$P($$NOW^XLFDT(),".",1)
  1. S DTIME=9000
  1. S IOSTBM="$C(27,91)_(+IOTM)_$C(59)_(+IOBM)_$C(114)"
  1. D DUZ^XUP(2)
  1. ;MERGE DUZ=^TMP("ZSAT","DUZ")
  1. D ^%ZIS
  1. S DFN=568 ; DFN = patient code from VA PATIENT file
  1. S BGPBDATE=3110101 ; BGPBDATE = begin date of report
  1. S BGPEDATE=3111231 ; BGPEDATE = end date of report
  1. S BGPAGEE=$$AGE^AUPNPAT(DFN,BGPEDATE)
  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