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

BGPMUG07.m

Go to the documentation of this file.
  1. BGPMUG07 ; IHS/MSC/MMT - MI measure NQF0389 ;06-Sep-2011 13:06;DU
  1. ;;11.1;IHS CLINICAL REPORTING SYSTEM;**1**;JUN 27, 2011;Build 106
  1. ;Code to collect meaningful use reports
  1. ENTRY ;EP Entry point for Prostate Cancer
  1. N START,END,STRING
  1. N IEN,INV,VISIT,DATA,VDATE,VALUE,EXCEPT,FIRST,VIEN
  1. N CNT,DEN,NUM,EXC,OUTENC,PROSTDX
  1. S START=9999999-BGPBDATE,END=9999999-BGPEDATE,VALUE=0
  1. S START=START_".2359"
  1. S (STRING,STRING2)=""
  1. S (DEN,EXC,NUM)=0
  1. ;Must be Male
  1. Q:BGPSEX="F"
  1. ;First check for Prostate Cancer Dx since that will eliminate most patients
  1. S BGPBIRTH=$$DOB^AUPNPAT(DFN)
  1. S PROSTDX=$$PROSTATE(DFN,BGPBIRTH,BGPEDATE)
  1. Q:'PROSTDX
  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 PROSTATE OUTPT ENC")
  1. ..I +OUTENC D VSTSTORE Q
  1. ;Next check to see if the patient is in the denominator
  1. S DEN=$$DEN(DFN,BGPBDATE,BGPEDATE,CNT,.VIEN,PROSTDX)
  1. I +DEN D
  1. .;If the patient is in denominator, check to see if they are in the numerator
  1. .S NUM=$$NUM1(DFN,$P(PROSTDX,U,3),$P(DEN,U,2))
  1. .;If not in the numerator,see if they are an exception
  1. .I +NUM=0 S EXC=$$EXCEPT(DFN,$P(PROSTDX,U,3),$P(DEN,U,2),.VIEN)
  1. .D TOTAL1(DFN,DEN,NUM,EXC)
  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. S STRING(CNT)=$$DATE^BGPMUUTL(VDATE)
  1. Q
  1. TOTAL1(DFN,DEN,NUM,EXC) ;See where this patient ends up
  1. N PTCNT,EXCCT,DENCT,NUMCT,NOTNUM,TOTALS,DXTIME
  1. S TOTALS=+$G(^TMP("BGPMU0389",$J,BGPMUTF,"TOT"))
  1. S DENCT=+$G(^TMP("BGPMU0389",$J,BGPMUTF,"DEN"))
  1. S NUMCT=+$G(^TMP("BGPMU0389",$J,BGPMUTF,"NUM"))
  1. S EXCCT=+$G(^TMP("BGPMU0389",$J,BGPMUTF,"EXC"))
  1. S NOTNUM=+$G(^TMP("BGPMU0389",$J,BGPMUTF,"NOT"))
  1. S PTCNT=TOTALS
  1. S PTCNT=PTCNT+1
  1. S DENCT=DENCT+1 S ^TMP("BGPMU0389",$J,BGPMUTF,"DEN")=DENCT
  1. S DENSTR=$P(DEN,U,3)
  1. I +EXC D
  1. .S EXCCT=EXCCT+1 S ^TMP("BGPMU0389",$J,BGPMUTF,"EXC")=EXCCT
  1. .I BGPMUTF="C" S ^TMP("BGPMU0389",$J,"PAT",BGPMUTF,"EXC",PTCNT)=DFN_U_DENSTR_U_"Excluded"
  1. I +NUM D
  1. .S NUMCT=NUMCT+1 S ^TMP("BGPMU0389",$J,BGPMUTF,"NUM")=NUMCT
  1. .I BGPMUTF="C" S ^TMP("BGPMU0389",$J,"PAT",BGPMUTF,"NUM",PTCNT)=DFN_U_DENSTR_U_"M:"_$P(NUM,U,2)
  1. I +NUM=0&(+EXC=0) D
  1. .S NOTNUM=NOTNUM+1 S ^TMP("BGPMU0389",$J,BGPMUTF,"NOT")=NOTNUM
  1. .I BGPMUTF="C" S ^TMP("BGPMU0389",$J,"PAT",BGPMUTF,"NOT",PTCNT)=DFN_U_DENSTR_U_"NM:"_$P(NUM,U,2)
  1. S ^TMP("BGPMU0389",$J,BGPMUTF,"TOT")=PTCNT
  1. ;Setup iCare array for patient
  1. S BGPICARE("MU.EP.0389.1",BGPMUTF)=1_U_+NUM_U_+EXC_U_DENSTR_";"_$P(NUM,U,2)
  1. Q
  1. PROSTATE(DFN,BDATE,EDATE) ;Look for Prostate Cancer V POV or PROBLEM
  1. N DX
  1. S DX=0
  1. S DX=$$LASTDX^BGPMUUT2(DFN,BDATE,EDATE,"BGPMU PROSTATE CANCER DX")
  1. I +DX Q 1_U_$P(DX,U,2,3)
  1. S DX=$$PLTAX^BGPMUUT1(DFN,"BGPMU PROSTATE CANCER DX","C",EDATE)
  1. I +DX Q 2_U_$P(DX,U,2,3)
  1. Q DX
  1. DEN(DFN,BGPBDATE,BGPEDATE,CNT,VIEN,PROSTDX) ;Check if Pt is in denominator
  1. N TRTMNT,PROC,PROCDT,AJCC,ANTIG,VLABIEN,ANTIVAL,GLETST,GLEVAL,DATA
  1. K DATA
  1. S TRTMNT=0,ANTIVAL=""
  1. ;Treatment procedure done?
  1. S PROC=$$CPT^BGPMUUT1(DFN,BGPBDATE,BGPEDATE,"BGPMU PROSTATE CANCER TRMT CPT")
  1. G:'PROC DENQ
  1. S PROCDT=$P(PROC,U,3)
  1. ;Stage eval?
  1. S AJCC=$$CPT^BGPMUUT1(DFN,"",PROCDT,"BGPMU PROSTATE CANCER STAGE")
  1. G:'AJCC DENQ
  1. ;Antigen tested?
  1. S ANTIG=$$LOINC^BGPMUUT2(DFN,"",PROCDT,"BGPMU LAB LOINC PROSTATE ANTIG")
  1. I +ANTIG D
  1. .S VLABIEN=$P(ANTIG,U,2)
  1. .S ANTIVAL=$P($G(^AUPNVLAB(VLABIEN,0)),U,4)
  1. E D
  1. .D LABCPT^BGPMUUT5(.DATA,DFN,"BGPMU LAB CPT PROSTATE ANTIGEN","",PROCDT)
  1. .S VAL="" S VAL=$O(DATA(VAL))
  1. .I +VAL D
  1. ..S ANTIVAL=$G(DATA(VAL))
  1. ..S ANTIG=(9999999-VAL)_U_ANTIVAL
  1. G:ANTIVAL="" DENQ
  1. ;Gleason test performed?
  1. S GLETST=$$LOINC^BGPMUUT2(DFN,"",PROCDT,"BGPMU LAB LOINC GLEASON TEST")
  1. G:'GLETST DENQ
  1. S VLABIEN=$P(GLETST,U,2)
  1. S GLEVAL=$P($G(^AUPNVLAB(VLABIEN,0)),U,4)
  1. G:GLEVAL="" DENQ
  1. ;check values and set return var
  1. S:(ANTIVAL<=10)&(GLEVAL<=6) TRTMNT=1_U_PROCDT_U_$$DENSTR(DFN)
  1. DENQ Q TRTMNT
  1. DENSTR(DFN) ;Generate display string for Denom
  1. N STRING
  1. S STRING="PCDX:"_$$DATE^BGPMUUTL($P(PROSTDX,U,3))
  1. S STRING=STRING_";PCTM:"_$$DATE^BGPMUUTL(PROCDT)
  1. S STRING=STRING_";AJCC:"_$$DATE^BGPMUUTL($P(AJCC,U,3))
  1. S STRING=STRING_";ANT:"_$$DATE^BGPMUUTL($P(ANTIG,U))
  1. S STRING=STRING_";GLE:"_$$DATE^BGPMUUTL($P(GLETST,U))
  1. Q STRING
  1. NUM1(DFN,BDATE,EDATE) ;This one has backward Numerator logic - return 1 if NOT met
  1. N FOUND,PMED
  1. S FOUND=1
  1. ;Look for V RADIOLOGY event for bone scan study
  1. S SCAN=$$RAD^BGPMUUT1(DFN,BDATE,EDATE,"BGPMU PROSTATE BONE SCAN CPT",7)
  1. ;return TRUE if no bone scan study found
  1. I +SCAN Q 0_U_"BSDS:"_$$DATE^BGPMUUTL($P(SCAN,U))
  1. ;Look for ORDER for bone scan study
  1. S SCAN=$$FIND^BGPMUUT7(DFN,"BGPMU PROSTATE BONE SCAN CPT",BDATE,EDATE) ;RAD procedure check
  1. I +SCAN Q 0_U_"BSDS:"_$$DATE^BGPMUUTL($P(SCAN,U))
  1. Q FOUND
  1. EXCEPT(DFN,BDATE,EDATE,VIEN) ;Check exclusion criteria
  1. N LAST,RESULT,OOP,RAD,CHEMO,METDX,METPL,PMED,ALLER,REF,TAX
  1. S RESULT=0
  1. S DX=$$LASTDX^BGPMUUT2(DFN,BDATE,EDATE,"BGPMU 0389 EXCLUSIONS DX")
  1. I +DX S RESULT=1 Q RESULT
  1. S DX=$$PLTAX^BGPMUUT1(DFN,"BGPMU 0389 EXCLUSIONS DX","C",EDATE)
  1. I +DX S RESULT=1 Q RESULT
  1. S PROC=$$CPT^BGPMUUT1(DFN,BDATE,EDATE,"BGPMU 0389 EXCLUSIONS CPT")
  1. I +PROC S RESULT=1 Q RESULT
  1. Q RESULT