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

BGPMUEPD.m

Go to the documentation of this file.
  1. BGPMUEPD ; IHS/MSC/MMT - EP Report Driver;02-Mar-2011 11:36;DU
  1. ;;11.1;IHS CLINICAL REPORTING SYSTEM;**1**;JUN 27, 2011;Build 106
  1. ;
  1. PROC ;EP
  1. D BQIKILL
  1. S BGPBT=$H
  1. D JRNL^BGPMUUTL
  1. S BGPJ=$J,BGPH=$H
  1. S BGPCHWC=0
  1. K ^XTMP("BGPMUEP",BGPJ,BGPH) ; not sure if I need this Timestamp stuff or if it should be Provider Specific
  1. D XTMP^BGPMUUTL("BGPMUEP","Meaningful Use EP Report")
  1. ;calculate 3 years before end of each time frame
  1. S BGP3YE=$$FMADD^XLFDT(BGPED,-1096)
  1. S BGPB3YE=$$FMADD^XLFDT(BGPBED,-1096)
  1. ;process each patient
  1. S DFN=0 F S DFN=$O(^AUPNPAT(DFN)) Q:DFN'=+DFN D
  1. .I $G(BGPDESGP) S P=$$DP(DFN) I P'=BGPDESGP Q
  1. .Q:'$D(^DPT(DFN,0))
  1. .Q:$P($G(^DPT(DFN,0)),U)["DEMO,PATIENT"
  1. .I $P($G(^BGPSITE(DUZ(2),0)),U,12) Q:$D(^DIBT($P(^BGPSITE(DUZ(2),0),U,12),1,DFN))
  1. .D PROCCY,PROCPY,PROCBY
  1. N ;
  1. S BGPET=$H
  1. Q
  1. ;
  1. PROCCY ;EP - current time period
  1. Q:'$D(^DPT(DFN,0))
  1. Q:$P(^DPT(DFN,0),U,2)=""
  1. Q:"FM"'[$P(^DPT(DFN,0),U,2)
  1. S BGPBDATE=BGPBD,BGPEDATE=BGPED,BGPTIME=1
  1. S BGP365=BGPBDATE
  1. S BGPACTUP=$$ACTUPAP(DFN,BGP3YE,BGPEDATE,BGPBEN)
  1. I 'BGPACTUP,'$G(BGPXPXPX),'$G(BGPIISO) Q
  1. S BGPACTCL=$$ACTCL(DFN,BGP3YE,BGPEDATE) ;active clinical
  1. S BGPAGEB=$$AGE^AUPNPAT(DFN,BGPBDATE)
  1. S BGPAGEE=$$AGE^AUPNPAT(DFN,BGPEDATE)
  1. S BGPSEX=$P(^DPT(DFN,0),U,2)
  1. I $G(BGPIISO)=1 S BGPACTUP=1,BGPACTCL=1 ;if in scheduling option, everyone is user pop/active clinical
  1. S BGPMUTF="C"
  1. D CALCMEAS
  1. Q
  1. PROCPY ;
  1. Q:'$D(^DPT(DFN,0))
  1. Q:$P(^DPT(DFN,0),U,2)=""
  1. Q:"FM"'[$P(^DPT(DFN,0),U,2)
  1. S BGPBDATE=BGPPBD,BGPEDATE=BGPPED,BGPTIME=2
  1. S BGP365=BGPBDATE
  1. S BGPACTUP=$$ACTUPAP(DFN,BGPB3YE,BGPEDATE,BGPBEN)
  1. I 'BGPACTUP Q ;if not in user pop, don't use patient
  1. S BGPACTCL=$$ACTCL(DFN,BGPB3YE,BGPEDATE) ;active clinical
  1. S BGPAGEB=$$AGE^AUPNPAT(DFN,BGPBDATE)
  1. S BGPAGEE=$$AGE^AUPNPAT(DFN,BGPEDATE)
  1. S BGPSEX=$P(^DPT(DFN,0),U,2)
  1. S BGPMUTF="P"
  1. D CALCMEAS
  1. Q
  1. PROCBY ;
  1. Q:'$D(^DPT(DFN,0))
  1. Q:$P(^DPT(DFN,0),U,2)=""
  1. Q:"FM"'[$P(^DPT(DFN,0),U,2)
  1. S BGPBDATE=BGPBBD,BGPEDATE=BGPBED,BGPTIME=3
  1. S BGP365=BGPBDATE
  1. S BGPACTUP=$$ACTUPAP(DFN,BGPB3YE,BGPEDATE,BGPBEN)
  1. I 'BGPACTUP Q ;if not in user pop, don't use patient
  1. S BGPACTCL=$$ACTCL(DFN,BGPB3YE,BGPEDATE) ;active clinical
  1. S BGPAGEB=$$AGE^AUPNPAT(DFN,BGPBDATE)
  1. S BGPAGEE=$$AGE^AUPNPAT(DFN,BGPEDATE)
  1. S BGPSEX=$P(^DPT(DFN,0),U,2)
  1. S BGPMUTF="B"
  1. D CALCMEAS
  1. Q
  1. CALCMEAS ;
  1. D CALCMEAS^BGPMUDCI
  1. Q
  1. V2(P,BDATE,EDATE) ;EP
  1. N A,B,X,G,V
  1. I '$D(^AUPNVSIT("AC",P)) Q ""
  1. K ^TMP($J,"A")
  1. S A="^TMP($J,""A"",",B=P_"^ALL VISITS;DURING "_$$FMTE^XLFDT(BDATE)_"-"_$$FMTE^XLFDT(EDATE),E=$$START1^APCLDF(B,A)
  1. I '$D(^TMP($J,"A",1)) Q ""
  1. S (X,G)=0 F S X=$O(^TMP($J,"A",X)) Q:X'=+X!(G>2) S V=$P(^TMP($J,"A",X),U,5) D
  1. .Q:'$D(^AUPNVSIT(V,0))
  1. .Q:'$P(^AUPNVSIT(V,0),U,9)
  1. .Q:$P(^AUPNVSIT(V,0),U,11)
  1. .Q:"SAHO"'[$P(^AUPNVSIT(V,0),U,7)
  1. .Q:"V"[$P(^AUPNVSIT(V,0),U,3)
  1. .Q:$P(^AUPNVSIT(V,0),U,6)=""
  1. .S G=G+1
  1. .Q
  1. Q $S(G<2:"",1:1)
  1. ;
  1. ACTUPAP(P,BDATE,EDATE,B) ;EP - is this patient in user pop?
  1. I B=1,$$BEN^AUPNPAT(P,"C")'="01" Q 0 ;must be Indian/Alaskan Native
  1. I B=2,$$BEN^AUPNPAT(P,"C")="01" Q 0 ;must not be I/A
  1. S DOD=$$DOD^AUPNPAT(P) I DOD]"",DOD<EDATE Q 0
  1. Q 1
  1. ;
  1. ACTCL(P,BDATE,EDATE) ;EP - clinical user
  1. N X,G,F,S,V,B
  1. S (X,G,F,S)=0 F S X=$O(^TMP($J,"A",X)) Q:X'=+X!(F) S V=$P(^TMP($J,"A",X),U,5) D
  1. .Q:'$D(^AUPNVSIT(V,0))
  1. .Q:'$P(^AUPNVSIT(V,0),U,9)
  1. .Q:$P(^AUPNVSIT(V,0),U,11)
  1. .Q:'$D(^AUPNVPRV("AD",V))
  1. .Q:"SAHO"'[$P(^AUPNVSIT(V,0),U,7)
  1. .Q:"V"[$P(^AUPNVSIT(V,0),U,3)
  1. .Q:$P(^AUPNVSIT(V,0),U,6)=""
  1. .S B=$$CLINIC^APCLV(V,"C")
  1. .Q:B=""
  1. .I G,S S F=1
  1. .Q
  1. Q $S(F:1,1:0)
  1. ;
  1. LASTVD(P,BDATE,EDATE) ;
  1. N A,B,V,X,G
  1. I '$D(^AUPNVSIT("AC",P)) Q ""
  1. K ^TMP($J,"A")
  1. S A="^TMP($J,""A"",",B=P_"^ALL VISITS;DURING "_$$FMTE^XLFDT(BDATE)_"-"_$$FMTE^XLFDT(EDATE),E=$$START1^APCLDF(B,A)
  1. I '$D(^TMP($J,"A",1)) Q ""
  1. S (X,G)=0 F S X=$O(^TMP($J,"A",X)) Q:X'=+X!(G) S V=$P(^TMP($J,"A",X),U,5) D
  1. .Q:'$D(^AUPNVSIT(V,0))
  1. .Q:'$P(^AUPNVSIT(V,0),U,9)
  1. .Q:$P(^AUPNVSIT(V,0),U,11)
  1. .Q:'$D(^AUPNVPRV("AD",V))
  1. .Q:"SAHO"'[$P(^AUPNVSIT(V,0),U,7)
  1. .Q:"V"[$P(^AUPNVSIT(V,0),U,3)
  1. .Q:$P(^AUPNVSIT(V,0),U,6)=""
  1. .S G=1
  1. .Q
  1. Q G
  1. ;
  1. LOINC(A,B) ;
  1. NEW %
  1. S %=$P($G(^LAB(95.3,A,9999999)),U,2)
  1. I %]"",$D(^ATXAX(B,21,"B",%)) Q 1
  1. S %=$P($G(^LAB(95.3,A,0)),U)_"-"_$P($G(^LAB(95.3,A,0)),U,15)
  1. I $D(^ATXAX(B,21,"B",%)) Q 1
  1. Q ""
  1. DP(P) ;
  1. I $P(^AUPNPAT(P,0),U,14) Q $P(^AUPNPAT(P,0),U,14)
  1. I $T(ALLDP^BDPAPI)="" Q ""
  1. NEW X
  1. D ALLDP^BDPAPI(P,"DESIGNATED PRIMARY PROVIDER",.X)
  1. Q $P($G(X("DESIGNATED PRIMARY PROVIDER")),U,2)
  1. ;
  1. BQI(BQIGREF,BGPPROV) ;PEP - iCARE
  1. ; Input parameters
  1. ; BQIGREF = Global reference to store data
  1. ; BGPPROV = Provider IEN
  1. Q:BQIGREF=""
  1. N BGPICARE,BGPIMEAS,BGPUMTF,BGPIIEN,BGPIDATA
  1. S BGPBT=$H
  1. D JRNL^BGPMUUTL
  1. S BGPJ=$J,BGPH=$H
  1. S BGPCHWC=0
  1. K ^XTMP("BGPMUEP",BGPJ,BGPH) ; not sure if I need this Timestamp stuff or if it should be Provider Specific
  1. D XTMP^BGPMUUTL("BGPMUEP","Meaningful Use EP Report")
  1. ;calculate 3 years before end of each time frame
  1. S BGP3YE=$$FMADD^XLFDT(BGPED,-1096)
  1. S BGPB3YE=$$FMADD^XLFDT(BGPBED,-1096)
  1. ;process each patient
  1. S DFN=0 F S DFN=$O(^AUPNPAT(DFN)) Q:DFN'=+DFN D
  1. .Q:'$D(^DPT(DFN,0))
  1. .Q:$P($G(^DPT(DFN,0)),U)["DEMO,PATIENT"
  1. .I $P($G(^BGPSITE(DUZ(2),0)),U,12) Q:$D(^DIBT($P(^BGPSITE(DUZ(2),0),U,12),1,DFN))
  1. .K BGPICARE
  1. .D PROCCY
  1. .I $G(BGPPBD)'="" D PROCPY
  1. .;Move patient data for all requested measures from array to the passed in global reference
  1. .; BGPICARE(INDICATOR_ID,Timeframe)=Denom Flag ^ Num Flag ^ Excl Flag ^ Denom disp ; Num disp ^ Excl disp
  1. .S BGPIMEAS=""
  1. .F S BGPIMEAS=$O(BGPICARE(BGPIMEAS)) Q:BGPIMEAS="" D
  1. ..S BGPMUTF=""
  1. ..F S BGPMUTF=$O(BGPICARE(BGPIMEAS,BGPMUTF)) Q:BGPMUTF="" D
  1. ...S BGPIDATA=$G(BGPICARE(BGPIMEAS,BGPMUTF))
  1. ...;Lookup indicator ID
  1. ...S BGPIIEN=$O(^BGPMUIND(90596.11,"C",BGPIMEAS,0))
  1. ...;Store into global - ONLY if measure ID exists
  1. ...I BGPIIEN'="" S @BQIGREF@(BGPPROV,DFN,BGPMUTF,BGPIIEN)=BGPIDATA
  1. D BQIKILL
  1. K BGPICARE,BGPIMEAS,BGPUMTF,BGPIIEN,BGPIDATA
  1. Q
  1. BQIKILL ; TEMPORARY Subroutine to kill off ^TMP globals created by running measure evals without printing
  1. ;This routine should be removed once a better system for killing off ^TMP globals has been implemented
  1. K ^TMP("BGPMU0001",$J)
  1. K ^TMP("BGPMU0002",$J)
  1. K ^TMP("BGPMU0004",$J)
  1. K ^TMP("BGPMU0012",$J)
  1. K ^TMP("BGPMU0013",$J)
  1. K ^TMP("BGPMU0014",$J)
  1. K ^TMP("BGPMU0018",$J)
  1. K ^TMP("BGPMU0024",$J)
  1. K ^TMP("BGPMU0027",$J)
  1. K ^TMP("BGPMU0028A",$J)
  1. K ^TMP("BGPMU0028B",$J)
  1. K ^TMP("BGPMU0031",$J)
  1. K ^TMP("BGPMU0032",$J)
  1. K ^TMP("BGPMU0033",$J)
  1. K ^TMP("BGPMU0034",$J)
  1. K ^TMP("BGPMU0036",$J)
  1. K ^TMP("BGPMU0038",$J)
  1. K ^TMP("BGPMU0041",$J)
  1. K ^TMP("BGPMU0043",$J)
  1. K ^TMP("BGPMU0047",$J)
  1. K ^TMP("BGPMU0052",$J)
  1. K ^TMP("BGPMU0055",$J)
  1. K ^TMP("BGPMU0056",$J)
  1. K ^TMP("BGPMU0059",$J)
  1. K ^TMP("BGPMU0061",$J)
  1. K ^TMP("BGPMU0062",$J)
  1. K ^TMP("BGPMU0064",$J)
  1. K ^TMP("BGPMU0067",$J)
  1. K ^TMP("BGPMU0068",$J)
  1. K ^TMP("BGPMU0070",$J)
  1. K ^TMP("BGPMU0073",$J)
  1. K ^TMP("BGPMU0074",$J)
  1. K ^TMP("BGPMU0075",$J)
  1. K ^TMP("BGPMU0081",$J)
  1. K ^TMP("BGPMU0083",$J)
  1. K ^TMP("BGPMU0084",$J)
  1. K ^TMP("BGPMU0086",$J)
  1. K ^TMP("BGPMU0088",$J)
  1. K ^TMP("BGPMU0089",$J)
  1. K ^TMP("BGPMU0105",$J)
  1. K ^TMP("BGPMU0385",$J)
  1. K ^TMP("BGPMU0387",$J)
  1. K ^TMP("BGPMU0389",$J)
  1. K ^TMP("BGPMU0421",$J)
  1. K ^TMP("BGPMU0575",$J)
  1. Q