- APCM13E2 ; IHS/CMI/LAB - IHS MU ;
- ;;1.0;IHS MU PERFORMANCE REPORTS;**2,4,5,6**;MAR 26, 2012;Build 65
- ;;;;;;Build 3
- TEST ;
- S APCMRPTT=1
- S DFN=118876
- S APCMP=5948
- S APCMHVTP(APCMP)=""
- S APCMPRV(APCMP)=""
- K APCM100R
- S APCMIC=1
- S APCMRPT=1
- S APCMTIME=1
- S APCMBDAT=3100101
- S APCMEDAT=3101231
- Q
- CPOE ;EP - CALCULATE CPOE MEDICATIONS MEASURE
- ;for each provider or for the facility find out if this
- ;patient had a visit of A, O, R, S to this provider or facility
- ;if so, then count all med orders to that provider from these
- ;visits and update denom/numerator counts
- ;
- ;if they had any prescription that had a nature of order of electronic
- ;they are in the numerator
- NEW APCMP
- S (APCMD1,APCMN1)=0
- I APCMRPTT=1 D Q
- .S APCMP=0 F S APCMP=$O(APCMPRV(APCMP)) Q:APCMP'=+APCMP D
- ..I $D(APCM100R(APCMP,APCMTIME)) S F=$P(^APCM13OB(APCMIC,0),U,11) D S^APCM13E1(APCMRPT,APCMIC,"Provider is excluded from this measure as he/she had < 100 prescriptions issued during the EHR reporting period.",APCMP,APCMRPTT,APCMTIME,F,1) Q
- ..;Q:'$D(APCMHVTP(APCMP)) ;no visits to this provider for this patient so don't bother, the patient is not in the denominator
- ..D CPOE1
- .Q
- I APCMRPTT=2 D
- .S APCMP=APCMFAC
- .;Q:'$D(APCMHVTP(APCMP))
- .D CPOE1
- .Q
- Q
- CPOE1 ;
- K APCMRXS
- S APCMHP=$$HADRX(DFN,APCMBDAT,APCMEDAT,APCMP,.APCMRXS,APCMRPTT) ;return # of denom - orders^numerator - ordered by CPOE, ARRAY OF PRESCRIPTIONS
- Q:APCMHP="" ;no prescriptions with an issue date in report period
- ;set denominator value into field
- S F=$P(^APCM13OB(APCMIC,0),U,8) ;denom field for this measure
- D S^APCM13E1(APCMRPT,APCMIC,$P(APCMHP,U,1),APCMP,APCMRPTT,APCMTIME,F)
- S V=""
- S APCMVALU=$P(APCMHP,U,1)_" Med orders|||w/CPOE: "_$P(APCMHP,U,2)_" ; w/o CPOE: "_$P(APCMHP,U,1)-$P(APCMHP,U,2)
- S F=$P(^APCM13OB(APCMIC,0),U,9)
- D S^APCM13E1(APCMRPT,APCMIC,$P(APCMHP,U,2),APCMP,APCMRPTT,APCMTIME,F)
- CPOEL D SETLIST^APCM13E1
- Q
- HADRX(P,BD,ED,PROV,RXS,RPT) ;EP - did patient have a RX in file 52 with an issue date
- ;between BD and ED
- I '$G(P) Q ""
- I '$G(BD) Q ""
- I '$G(ED) Q ""
- I '$D(^AUPNPAT(P,0)) Q ""
- NEW EXDT,IFN,ID,G,DENOM,NUMER,H,X,I,D,V,DISPG,STOP
- S G="",(DENOM,NUMER)=0
- ;FOR EP REPORT
- I RPT=1 D
- .S DISPG=$O(^ORD(100.98,"B","OUTPATIENT MEDICATIONS",0))
- .Q:'DISPG
- .S D=9999999-(ED_".9999"),STOP=(9999999-(BD_".000001")),VP=P_";DPT("
- .F S D=$O(^OR(100,"ACT",VP,D)) Q:D>STOP D
- ..S X=0 F S X=$O(^OR(100,"ACT",VP,D,DISPG,X)) Q:X'=+X D
- ...S O=0 F S O=$O(^OR(100,"ACT",VP,D,DISPG,X,O)) Q:O=+O D
- ....S V=$P($G(^OR(100,O,0)),U,4)
- ....Q:V'=PROV ;not correct provider
- ....S V=$P($G(^OR(100,X,0)),U,10)
- ...I V,$D(^SC(V,0)) S C=$P(^SC(V,0),U,7) I C Q:$P($G(^DIC(40.7,C,0)),U,2)=30
- ...S DENOM=DENOM+1
- ...;now see if any are not written
- ...S B=$P($G(^OR(100,X,0)),U,10)
- ...Q:B=""
- ...Q:'$$ORES(B,$P(D,"."))
- ...S N=""
- ...S A=0 F S A=$O(^OR(100,X,8,A)) Q:A'=+A!(N) D
- ....Q:'$D(^OR(100,O,8,X,0))
- ....S B=$P(^OR(100,O,8,X,0),U,12)
- ....Q:B=1
- ....Q:B=""
- ....S N=1 S NUMER=NUMER+1
- I RPT=2 D
- .S D=BD
- .F S D=$O(^OR(100,"AF",D)) Q:$P(D,".",1)>ED D
- ..S X=0 F S X=$O(^OR(100,"AF",D,X)) Q:X'=+X D
- ...S V=$P(^OR(100,X,0),U,2)
- ...Q:V'["DPT"
- ...Q:+V'=P
- ...Q:'$$HOSP(X,PROV) ;
- ...S DENOM=DENOM+1
- ...;now see if any are not written
- ...S B=$P($G(^OR(100,X,0)),U,6)
- ...Q:B=""
- ...Q:'$$ORES(B,ID)
- ...S N=""
- ...S A=0 F S A=$O(^OR(100,O,8,A)) Q:A'=+A!(N) D
- ....Q:'$D(^OR(100,O,8,A,0))
- ....S B=$P(^OR(100,O,8,A,0),U,12)
- ....Q:B=1
- ....Q:B=""
- ....S N=1 S NUMER=NUMER+1 ;,$P(RXS(X),U,3)=$P($P(^OR(100,O,8,A,0),U),".")_U_$P(^ORD(100.02,B,0),U,1)_U_$P(^OR(100,O,0),U)
- Q DENOM_U_NUMER
- HOSP(O,FAC) ;
- NEW V,L,C
- S V=$$VAL^XBDIQ1(100,O,23)
- I V="IV MEDICATIONS" Q 1
- I V="UNIT DOSE MEDICATIONS" Q 1
- I V="INPATIENT MEDICATIONS" Q 1
- I V'="OUTPATIENT MEDICATIONS" Q 0
- S L=$P($G(^OR(100,O,0)),U,10)
- I L,$D(^SC(L,0)) S C=$P(^SC(L,0),U,15) I C,C'=FAC Q 0
- I L,$D(^SC(L,0)) S C=$P(^SC(L,0),U,7) I C,$P($G(^DIC(40.7,C,0)),U,2)=30 Q 1
- Q 0
- ORES(R,D) ;EP - DID PROVIDER HAVE ORES OR ORESLE ON DATE D
- I '$G(R) Q ""
- I '$D(^VA(200,R,0)) Q ""
- NEW K,J
- S K=$O(^DIC(19.1,"B","ORES",0))
- S J=$O(^DIC(19.1,"B","ORELSE",0))
- I $D(^VA(200,R,51,K,0)),$P(^VA(200,R,51,K,0),U,3)'>D Q 1
- I $D(^VA(200,R,51,J,0)),$P(^VA(200,R,51,J,0),U,3)'>D Q 1
- Q ""
- DEMO ;EP - CALCULATE DEMOGRAPHICS
- ;for each provider or for the facility find out if this
- ;patient had a visit of A, O, R, S to this provider or facility
- ;if so, then check to see if they had dob, preferred language, gender, race, ethnicity recorded
- NEW APCMP
- S (APCMD1,APCMN1)=0
- I APCMRPTT=1 D Q
- .S APCMP=0 F S APCMP=$O(APCMPRV(APCMP)) Q:APCMP'=+APCMP D
- ..Q:'$D(APCMHVTP(APCMP)) ;DID NOT SEE THIS PATIENT
- ..D DEMO1
- I APCMRPTT=2 D
- .S APCMP=APCMFAC
- .Q:'$D(APCMHVTP(APCMP))
- .D DEMO1
- .Q
- Q
- DEMO1 ;set denominator value into field
- S F=$P(^APCM13OB(APCMIC,0),U,8) ;denom field for this measure
- D S^APCM13E1(APCMRPT,APCMIC,1,APCMP,APCMRPTT,APCMTIME,F)
- S APCMVALU="VISIT: "_$$DATE^APCM1UTL(APCMHVTP(APCMP))
- ;numerator?
- S APCMEP=$$HASDEMO(DFN,APCMBDAT,APCMEDAT,APCMRPTT,$G(APCMVDOD))
- S APCMVALU=APCMVALU_"|||"_$S($P(APCMEP,U,1)=1:"MEETS OBJECTIVE: ",1:"DOES NOT MEET OBJECTIVE: ")_$P(APCMEP,U,2)_"|||"_$P(APCMEP,U,1)
- S F=$P(^APCM13OB(APCMIC,0),U,9)
- D S^APCM13E1(APCMRPT,APCMIC,$P(APCMEP,U,1),APCMP,APCMRPTT,APCMTIME,F)
- D SETLIST^APCM13E1
- Q
- HASDEMO(P,BD,ED,T,DODV) ;
- NEW PL,G,R,E,D,C,Y,X,B,Z
- S C=0
- S T=$G(T)
- S DODV=$G(DODV)
- S (PL,G,R,E,D)=""
- ;preferred language
- S X=0 F S X=$O(^AUPNPAT(P,86,X)) Q:X'=+X!(PL]"") D
- .S B=$P(^AUPNPAT(P,86,X,0),U)
- .Q:B>ED
- .S C=C+1,PL="Preferred Language"
- S G=$P(^DPT(P,0),U,2) I G]"" S C=C+1,G="Gender"
- S R=""
- I $T(RACE^AGUTL)]"" S R=$$RACE^AGUTL(P)
- I R S C=C+1,R="Race" I 1
- E S R=$$VAL^XBDIQ1(2,P,.06) I R]"" S C=C+1,R="Race"
- S Z=0 F S Z=$O(^DPT(P,.06,Z)) Q:Z'=+Z!(E]"") D
- .S E=$P($G(^DPT(P,.06,Z,0)),U,1)
- .Q:E=""
- .S E="Ethnicity",C=C+1
- .Q
- I $P(^DPT(P,0),U,3)]"" S D="DOB",C=C+1
- I T=2,$G(DODV) G HASDEMOH
- I C=5 Q 1_U_"Has: "_PL_";"_G_";"_R_";"_E_";"_D
- Q 0_U_"Has: "_PL_";"_G_";"_R_";"_E_";"_D
- HASDEMOH ;did patient die in the hospital during report period? if so is dod and underlying cause there?
- NEW VDOD,L,UCD
- S UCD=""
- S VDOD=$$DOD^AUPNPAT(P)
- I VDOD]"" S C=C+1,VDOD="DOD"
- S L=$$VAL^XBDIQ1(9000001,P,1114)
- I L]"" S C=C+1,UCD="UCD"
- I C=7 Q 1_U_"Has: "_PL_";"_G_";"_R_";"_E_";"_D_";"_VDOD_";"_UCD
- Q 0_U_"Has: "_PL_";"_G_";"_R_";"_E_";"_D_";"_VDOD_";"_UCD
- ;
- PL ;EP - CALCULATE PROBLEM LIST
- ;for each provider or for the facility find out if this
- ;patient had a visit of A, O, R, S to this provider or facility
- ;if so, then check to see if they any problems on their problem list (skip deleted) or a NAP documented in report period
- NEW APCMP
- S (APCMD1,APCMN1)=0
- I APCMRPTT=1 D Q
- .S APCMP=0 F S APCMP=$O(APCMPRV(APCMP)) Q:APCMP'=+APCMP D
- ..Q:'$D(APCMHVTP(APCMP)) ;no visits to this provider for this patient so don't bother, the patient is not in the denominator
- ..D PL1
- ..Q
- I APCMRPTT=2 D
- .S APCMP=APCMFAC
- .Q:'$D(APCMHVTP(APCMP))
- .D PL1
- .Q
- Q
- PL1 ;set denominator value into field
- S F=$P(^APCM13OB(APCMIC,0),U,8) ;denom field for this measure
- D S^APCM13E1(APCMRPT,APCMIC,1,APCMP,APCMRPTT,APCMTIME,F)
- S APCMVALU="VISIT: "_$$DATE^APCM1UTL(APCMHVTP(APCMP))
- ;numerator?
- S APCMEP=$$HASPL(DFN,APCMBDAT,APCMEDAT)
- S APCMVALU=APCMVALU_"|||"_$P(APCMEP,U,2)_"|||"_$P(APCMEP,U,1)
- S F=$P(^APCM13OB(APCMIC,0),U,9)
- D S^APCM13E1(APCMRPT,APCMIC,$P(APCMEP,U,1),APCMP,APCMRPTT,APCMTIME,F)
- D SETLIST^APCM13E1
- Q
- HASPL(P,BD,ED) ;does patient have a problem entered before end of report period
- ;
- NEW A,B,C,D,E
- S E=""
- S A=0 F S A=$O(^AUPNPROB("AC",P,A)) Q:A'=+A!(E]"") D
- .;if date entered is after the ED don't count it
- .Q:'$D(^AUPNPROB(A,0))
- .Q:$P(^AUPNPROB(A,0),U,8)>ED ;after end date of report period
- .I $P(^AUPNPROB(A,0),U,12)'="D" S E=1_U_"Problem Entry: "_$$VAL^XBDIQ1(9000011,A,.01)_" entered on "_$$VAL^XBDIQ1(9000011,A,.08) Q
- .;since it's deleted, deletion date must not be before time period
- .S D=$P($P($G(^AUPNPROB(A,2)),U,2),".") ;date deleted
- .Q:D>ED
- .Q:D<BD
- .S E="1^Problem Entry: "_$$VAL^XBDIQ1(9000011,A,.01)_" entered on "_$$VAL^XBDIQ1(9000011,A,.08)
- I E]"" Q E
- ;no problems on PL so how about a NAP before end of time period
- S C=$O(^AUTTCRA("B","NO ACTIVE PROBLEMS",0))
- I 'C Q ""
- S A=0 F S A=$O(^AUPNVRUP("AC",P,A)) Q:A'=+A!(E]"") D
- .Q:'$D(^AUPNVRUP(A,0)) ;oops
- .Q:$P(^AUPNVRUP(A,0),U,1)'=C ;not NAP
- .S D=$$VD^APCLV($P(^AUPNVRUP(A,0),U,3))
- .Q:D>ED
- .S E="1^No Active Problems on "_$$DATE^APCM1UTL(D)
- Q E
- MEDL ;EP - CALCULATE MEDICATION LIST
- ;for each provider or for the facility find out if this
- ;patient had a visit of A, O, R, S to this provider or facility
- ;d
- NEW APCMP
- S (APCMD1,APCMN1)=0
- I APCMRPTT=1 D Q
- .S APCMP=0 F S APCMP=$O(APCMPRV(APCMP)) Q:APCMP'=+APCMP D
- ..Q:'$D(APCMHVTP(APCMP)) ;no visits to this provider for this patient so don't bother, the patient is not in the denominator
- ..D MEDL1
- ..Q
- .Q
- I APCMRPTT=2 D
- .S APCMP=APCMFAC
- .Q:'$D(APCMHVTP(APCMP))
- .D MEDL1
- .Q
- Q
- MEDL1 ;set denominator value into field
- S F=$P(^APCM13OB(APCMIC,0),U,8) ;denom field for this measure
- D S^APCM13E1(APCMRPT,APCMIC,1,APCMP,APCMRPTT,APCMTIME,F)
- S APCMVALU="VISIT: "_$$DATE^APCM1UTL(APCMHVTP(APCMP))
- ;numerator?
- S APCMEP=$$HASML(DFN,APCMBDAT,APCMEDAT)
- S APCMVALU=APCMVALU_"|||"_$P(APCMEP,U,2)_"|||"_$P(APCMEP,U,1)
- S F=$P(^APCM13OB(APCMIC,0),U,9)
- D S^APCM13E1(APCMRPT,APCMIC,$P(APCMEP,U,1),APCMP,APCMRPTT,APCMTIME,F)
- D SETLIST^APCM13E1
- Q
- HASML(P,BDT,EDT) ;EP
- N RXIEN,ACTIEN,RTSDT,FILLDT,A0,FDTLP,IEN,G,DC,EXP,SDT,X,I,DRG,L,V,EXDT,IFN,ID,D365
- ;between BD and ED
- I '$G(P) Q ""
- I '$G(BDT) Q ""
- I '$G(EDT) Q ""
- I '$D(^AUPNPAT(P,0)) Q ""
- S G=""
- NAM ;look for "No Active Medications" anytime during the report period
- S C=$O(^AUTTCRA("B","NO ACTIVE MEDICATIONS",0))
- I 'C G RXS
- ;GET most recent visit date
- S A=0 F S A=$O(^AUPNVRUP("AC",P,A)) Q:A'=+A!(G]"") D
- .Q:'$D(^AUPNVRUP(A,0)) ;oops
- .Q:$P(^AUPNVRUP(A,0),U,1)'=C ;not NAM
- .S D=$$VD^APCLV($P(^AUPNVRUP(A,0),U,3))
- .Q:D<BDT ;before beg date
- .Q:D>EDT ;after end date
- .S G="1^No Active Medications on "_$$DATE^APCM1UTL(D)
- I G Q G
- RXS ;
- S G=""
- S D365=$$FMADD^XLFDT(BDT,-365)
- S EXDT=$$FMADD^XLFDT(BDT,-(365*3))
- F S EXDT=$O(^PS(55,P,"P","A",EXDT)) Q:'EXDT!(G]"") S IFN=0 F S IFN=$O(^PS(55,P,"P","A",EXDT,IFN)) Q:'IFN!(G]"") D:$D(^PSRX(IFN,0))
- .Q:$P($G(^PSRX(IFN,"STA")),"^")=13 ;deleted
- .Q:'$P(^PSRX(IFN,0),U,6) ; Prescription must have a drug
- .S ID=$P(^PSRX(IFN,0),U,13) ;issue date
- .Q:ID<D365
- .Q:ID>EDT
- .S DC=$P($G(^PSRX(IFN,3)),U,5) ;dc date
- .I DC]"" Q:DC<BDT ;IF DC'ED DATE IF MUST BE ON OR AFTER 1ST DATE OF TIME PERIOD
- .S G=1_U_$$DATE^APCM1UTL(ID)_" Rx: "_$P(^PSRX(IFN,0),U,1) Q
- I G]"" Q G
- ;now check NVA meds
- NVA ; Set Non-VA Med Orders in the ^TMP Global
- S G=""
- F I=0:0 S I=$O(^PS(55,P,"NVA",I)) Q:'I!(G]"") S X=$G(^PS(55,P,"NVA",I,0)) D
- .Q:'$P(X,"^")
- .S DRG=$S($P(X,"^",2):$P($G(^PSDRUG($P(X,"^",2),0)),"^"),1:$P(^PS(50.7,$P(X,"^"),0),"^")_" "_$P(^PS(50.606,$P(^PS(50.7,$P(X,"^"),0),"^",2),0),"^"))
- .I $P(X,"^",7),$P(X,"^",7)<BDT Q ;DC'ED
- .S SDT=$P(X,"^",10) I 'SDT Q ;NO documented date
- .I SDT>EDT Q ;documented date after end date
- .Q:$P(X,U,6)]""
- .S G=1_U_"NVA: "_$$DATE^APCM1UTL($P(X,U,10))_" Item: "_DRG
- I G]"" Q G
- Q G
- ; Return boolean flag indicating valid patient
- PATVRY(RX,PAT) ;EP
- Q:PAT="*" 1
- Q +$P($G(^PSRX(RX,0)),U,2)=PAT
- ; Return release date for dispense
- DSPRDT(RX,TYP,SIEN) ;EP
- Q $S($G(SIEN):+$P($G(^PSRX(RX,$S(TYP="ADP":"P",1:1),SIEN,0)),U,$S(TYP="ADP":19,1:18)),1:+$P(^PSRX(RX,2),U,13))
- APCM13E2 ; IHS/CMI/LAB - IHS MU ;
- +1 ;;1.0;IHS MU PERFORMANCE REPORTS;**2,4,5,6**;MAR 26, 2012;Build 65
- +2 ;;;;;;Build 3
- TEST ;
- +1 SET APCMRPTT=1
- +2 SET DFN=118876
- +3 SET APCMP=5948
- +4 SET APCMHVTP(APCMP)=""
- +5 SET APCMPRV(APCMP)=""
- +6 KILL APCM100R
- +7 SET APCMIC=1
- +8 SET APCMRPT=1
- +9 SET APCMTIME=1
- +10 SET APCMBDAT=3100101
- +11 SET APCMEDAT=3101231
- +12 QUIT
- CPOE ;EP - CALCULATE CPOE MEDICATIONS MEASURE
- +1 ;for each provider or for the facility find out if this
- +2 ;patient had a visit of A, O, R, S to this provider or facility
- +3 ;if so, then count all med orders to that provider from these
- +4 ;visits and update denom/numerator counts
- +5 ;
- +6 ;if they had any prescription that had a nature of order of electronic
- +7 ;they are in the numerator
- +8 NEW APCMP
- +9 SET (APCMD1,APCMN1)=0
- +10 IF APCMRPTT=1
- Begin DoDot:1
- +11 SET APCMP=0
- FOR
- SET APCMP=$ORDER(APCMPRV(APCMP))
- IF APCMP'=+APCMP
- QUIT
- Begin DoDot:2
- +12 IF $DATA(APCM100R(APCMP,APCMTIME))
- SET F=$PIECE(^APCM13OB(APCMIC,0),U,11)
- DO S^APCM13E1(APCMRPT,APCMIC,"Provider is excluded from this measure as he/she had < 100 prescriptions issued during the EHR reporting period.",APCMP,APCMRPTT,APCMTIME,F,1)
- QUIT
- +13 ;Q:'$D(APCMHVTP(APCMP)) ;no visits to this provider for this patient so don't bother, the patient is not in the denominator
- +14 DO CPOE1
- End DoDot:2
- +15 QUIT
- End DoDot:1
- QUIT
- +16 IF APCMRPTT=2
- Begin DoDot:1
- +17 SET APCMP=APCMFAC
- +18 ;Q:'$D(APCMHVTP(APCMP))
- +19 DO CPOE1
- +20 QUIT
- End DoDot:1
- +21 QUIT
- CPOE1 ;
- +1 KILL APCMRXS
- +2 ;return # of denom - orders^numerator - ordered by CPOE, ARRAY OF PRESCRIPTIONS
- SET APCMHP=$$HADRX(DFN,APCMBDAT,APCMEDAT,APCMP,.APCMRXS,APCMRPTT)
- +3 ;no prescriptions with an issue date in report period
- IF APCMHP=""
- QUIT
- +4 ;set denominator value into field
- +5 ;denom field for this measure
- SET F=$PIECE(^APCM13OB(APCMIC,0),U,8)
- +6 DO S^APCM13E1(APCMRPT,APCMIC,$PIECE(APCMHP,U,1),APCMP,APCMRPTT,APCMTIME,F)
- +7 SET V=""
- +8 SET APCMVALU=$PIECE(APCMHP,U,1)_" Med orders|||w/CPOE: "_$PIECE(APCMHP,U,2)_" ; w/o CPOE: "_$PIECE(APCMHP,U,1)-$PIECE(APCMHP,U,2)
- +9 SET F=$PIECE(^APCM13OB(APCMIC,0),U,9)
- +10 DO S^APCM13E1(APCMRPT,APCMIC,$PIECE(APCMHP,U,2),APCMP,APCMRPTT,APCMTIME,F)
- CPOEL DO SETLIST^APCM13E1
- +1 QUIT
- HADRX(P,BD,ED,PROV,RXS,RPT) ;EP - did patient have a RX in file 52 with an issue date
- +1 ;between BD and ED
- +2 IF '$GET(P)
- QUIT ""
- +3 IF '$GET(BD)
- QUIT ""
- +4 IF '$GET(ED)
- QUIT ""
- +5 IF '$DATA(^AUPNPAT(P,0))
- QUIT ""
- +6 NEW EXDT,IFN,ID,G,DENOM,NUMER,H,X,I,D,V,DISPG,STOP
- +7 SET G=""
- SET (DENOM,NUMER)=0
- +8 ;FOR EP REPORT
- +9 IF RPT=1
- Begin DoDot:1
- +10 SET DISPG=$ORDER(^ORD(100.98,"B","OUTPATIENT MEDICATIONS",0))
- +11 IF 'DISPG
- QUIT
- +12 SET D=9999999-(ED_".9999")
- SET STOP=(9999999-(BD_".000001"))
- SET VP=P_";DPT("
- +13 FOR
- SET D=$ORDER(^OR(100,"ACT",VP,D))
- IF D>STOP
- QUIT
- Begin DoDot:2
- +14 SET X=0
- FOR
- SET X=$ORDER(^OR(100,"ACT",VP,D,DISPG,X))
- IF X'=+X
- QUIT
- Begin DoDot:3
- +15 SET O=0
- FOR
- SET O=$ORDER(^OR(100,"ACT",VP,D,DISPG,X,O))
- IF O=+O
- QUIT
- Begin DoDot:4
- +16 SET V=$PIECE($GET(^OR(100,O,0)),U,4)
- +17 ;not correct provider
- IF V'=PROV
- QUIT
- +18 SET V=$PIECE($GET(^OR(100,X,0)),U,10)
- End DoDot:4
- +19 IF V
- IF $DATA(^SC(V,0))
- SET C=$PIECE(^SC(V,0),U,7)
- IF C
- IF $PIECE($GET(^DIC(40.7,C,0)),U,2)=30
- QUIT
- +20 SET DENOM=DENOM+1
- +21 ;now see if any are not written
- +22 SET B=$PIECE($GET(^OR(100,X,0)),U,10)
- +23 IF B=""
- QUIT
- +24 IF '$$ORES(B,$PIECE(D,"."))
- QUIT
- +25 SET N=""
- +26 SET A=0
- FOR
- SET A=$ORDER(^OR(100,X,8,A))
- IF A'=+A!(N)
- QUIT
- Begin DoDot:4
- +27 IF '$DATA(^OR(100,O,8,X,0))
- QUIT
- +28 SET B=$PIECE(^OR(100,O,8,X,0),U,12)
- +29 IF B=1
- QUIT
- +30 IF B=""
- QUIT
- +31 SET N=1
- SET NUMER=NUMER+1
- End DoDot:4
- End DoDot:3
- End DoDot:2
- End DoDot:1
- +32 IF RPT=2
- Begin DoDot:1
- +33 SET D=BD
- +34 FOR
- SET D=$ORDER(^OR(100,"AF",D))
- IF $PIECE(D,".",1)>ED
- QUIT
- Begin DoDot:2
- +35 SET X=0
- FOR
- SET X=$ORDER(^OR(100,"AF",D,X))
- IF X'=+X
- QUIT
- Begin DoDot:3
- +36 SET V=$PIECE(^OR(100,X,0),U,2)
- +37 IF V'["DPT"
- QUIT
- +38 IF +V'=P
- QUIT
- +39 ;
- IF '$$HOSP(X,PROV)
- QUIT
- +40 SET DENOM=DENOM+1
- +41 ;now see if any are not written
- +42 SET B=$PIECE($GET(^OR(100,X,0)),U,6)
- +43 IF B=""
- QUIT
- +44 IF '$$ORES(B,ID)
- QUIT
- +45 SET N=""
- +46 SET A=0
- FOR
- SET A=$ORDER(^OR(100,O,8,A))
- IF A'=+A!(N)
- QUIT
- Begin DoDot:4
- +47 IF '$DATA(^OR(100,O,8,A,0))
- QUIT
- +48 SET B=$PIECE(^OR(100,O,8,A,0),U,12)
- +49 IF B=1
- QUIT
- +50 IF B=""
- QUIT
- +51 ;,$P(RXS(X),U,3)=$P($P(^OR(100,O,8,A,0),U),".")_U_$P(^ORD(100.02,B,0),U,1)_U_$P(^OR(100,O,0),U)
- SET N=1
- SET NUMER=NUMER+1
- End DoDot:4
- End DoDot:3
- End DoDot:2
- End DoDot:1
- +52 QUIT DENOM_U_NUMER
- HOSP(O,FAC) ;
- +1 NEW V,L,C
- +2 SET V=$$VAL^XBDIQ1(100,O,23)
- +3 IF V="IV MEDICATIONS"
- QUIT 1
- +4 IF V="UNIT DOSE MEDICATIONS"
- QUIT 1
- +5 IF V="INPATIENT MEDICATIONS"
- QUIT 1
- +6 IF V'="OUTPATIENT MEDICATIONS"
- QUIT 0
- +7 SET L=$PIECE($GET(^OR(100,O,0)),U,10)
- +8 IF L
- IF $DATA(^SC(L,0))
- SET C=$PIECE(^SC(L,0),U,15)
- IF C
- IF C'=FAC
- QUIT 0
- +9 IF L
- IF $DATA(^SC(L,0))
- SET C=$PIECE(^SC(L,0),U,7)
- IF C
- IF $PIECE($GET(^DIC(40.7,C,0)),U,2)=30
- QUIT 1
- +10 QUIT 0
- ORES(R,D) ;EP - DID PROVIDER HAVE ORES OR ORESLE ON DATE D
- +1 IF '$GET(R)
- QUIT ""
- +2 IF '$DATA(^VA(200,R,0))
- QUIT ""
- +3 NEW K,J
- +4 SET K=$ORDER(^DIC(19.1,"B","ORES",0))
- +5 SET J=$ORDER(^DIC(19.1,"B","ORELSE",0))
- +6 IF $DATA(^VA(200,R,51,K,0))
- IF $PIECE(^VA(200,R,51,K,0),U,3)'>D
- QUIT 1
- +7 IF $DATA(^VA(200,R,51,J,0))
- IF $PIECE(^VA(200,R,51,J,0),U,3)'>D
- QUIT 1
- +8 QUIT ""
- DEMO ;EP - CALCULATE DEMOGRAPHICS
- +1 ;for each provider or for the facility find out if this
- +2 ;patient had a visit of A, O, R, S to this provider or facility
- +3 ;if so, then check to see if they had dob, preferred language, gender, race, ethnicity recorded
- +4 NEW APCMP
- +5 SET (APCMD1,APCMN1)=0
- +6 IF APCMRPTT=1
- Begin DoDot:1
- +7 SET APCMP=0
- FOR
- SET APCMP=$ORDER(APCMPRV(APCMP))
- IF APCMP'=+APCMP
- QUIT
- Begin DoDot:2
- +8 ;DID NOT SEE THIS PATIENT
- IF '$DATA(APCMHVTP(APCMP))
- QUIT
- +9 DO DEMO1
- End DoDot:2
- End DoDot:1
- QUIT
- +10 IF APCMRPTT=2
- Begin DoDot:1
- +11 SET APCMP=APCMFAC
- +12 IF '$DATA(APCMHVTP(APCMP))
- QUIT
- +13 DO DEMO1
- +14 QUIT
- End DoDot:1
- +15 QUIT
- DEMO1 ;set denominator value into field
- +1 ;denom field for this measure
- SET F=$PIECE(^APCM13OB(APCMIC,0),U,8)
- +2 DO S^APCM13E1(APCMRPT,APCMIC,1,APCMP,APCMRPTT,APCMTIME,F)
- +3 SET APCMVALU="VISIT: "_$$DATE^APCM1UTL(APCMHVTP(APCMP))
- +4 ;numerator?
- +5 SET APCMEP=$$HASDEMO(DFN,APCMBDAT,APCMEDAT,APCMRPTT,$GET(APCMVDOD))
- +6 SET APCMVALU=APCMVALU_"|||"_$SELECT($PIECE(APCMEP,U,1)=1:"MEETS OBJECTIVE: ",1:"DOES NOT MEET OBJECTIVE: ")_$PIECE(APCMEP,U,2)_"|||"_$PIECE(APCMEP,U,1)
- +7 SET F=$PIECE(^APCM13OB(APCMIC,0),U,9)
- +8 DO S^APCM13E1(APCMRPT,APCMIC,$PIECE(APCMEP,U,1),APCMP,APCMRPTT,APCMTIME,F)
- +9 DO SETLIST^APCM13E1
- +10 QUIT
- HASDEMO(P,BD,ED,T,DODV) ;
- +1 NEW PL,G,R,E,D,C,Y,X,B,Z
- +2 SET C=0
- +3 SET T=$GET(T)
- +4 SET DODV=$GET(DODV)
- +5 SET (PL,G,R,E,D)=""
- +6 ;preferred language
- +7 SET X=0
- FOR
- SET X=$ORDER(^AUPNPAT(P,86,X))
- IF X'=+X!(PL]"")
- QUIT
- Begin DoDot:1
- +8 SET B=$PIECE(^AUPNPAT(P,86,X,0),U)
- +9 IF B>ED
- QUIT
- +10 SET C=C+1
- SET PL="Preferred Language"
- End DoDot:1
- +11 SET G=$PIECE(^DPT(P,0),U,2)
- IF G]""
- SET C=C+1
- SET G="Gender"
- +12 SET R=""
- +13 IF $TEXT(RACE^AGUTL)]""
- SET R=$$RACE^AGUTL(P)
- +14 IF R
- SET C=C+1
- SET R="Race"
- IF 1
- +15 IF '$TEST
- SET R=$$VAL^XBDIQ1(2,P,.06)
- IF R]""
- SET C=C+1
- SET R="Race"
- +16 SET Z=0
- FOR
- SET Z=$ORDER(^DPT(P,.06,Z))
- IF Z'=+Z!(E]"")
- QUIT
- Begin DoDot:1
- +17 SET E=$PIECE($GET(^DPT(P,.06,Z,0)),U,1)
- +18 IF E=""
- QUIT
- +19 SET E="Ethnicity"
- SET C=C+1
- +20 QUIT
- End DoDot:1
- +21 IF $PIECE(^DPT(P,0),U,3)]""
- SET D="DOB"
- SET C=C+1
- +22 IF T=2
- IF $GET(DODV)
- GOTO HASDEMOH
- +23 IF C=5
- QUIT 1_U_"Has: "_PL_";"_G_";"_R_";"_E_";"_D
- +24 QUIT 0_U_"Has: "_PL_";"_G_";"_R_";"_E_";"_D
- HASDEMOH ;did patient die in the hospital during report period? if so is dod and underlying cause there?
- +1 NEW VDOD,L,UCD
- +2 SET UCD=""
- +3 SET VDOD=$$DOD^AUPNPAT(P)
- +4 IF VDOD]""
- SET C=C+1
- SET VDOD="DOD"
- +5 SET L=$$VAL^XBDIQ1(9000001,P,1114)
- +6 IF L]""
- SET C=C+1
- SET UCD="UCD"
- +7 IF C=7
- QUIT 1_U_"Has: "_PL_";"_G_";"_R_";"_E_";"_D_";"_VDOD_";"_UCD
- +8 QUIT 0_U_"Has: "_PL_";"_G_";"_R_";"_E_";"_D_";"_VDOD_";"_UCD
- +9 ;
- PL ;EP - CALCULATE PROBLEM LIST
- +1 ;for each provider or for the facility find out if this
- +2 ;patient had a visit of A, O, R, S to this provider or facility
- +3 ;if so, then check to see if they any problems on their problem list (skip deleted) or a NAP documented in report period
- +4 NEW APCMP
- +5 SET (APCMD1,APCMN1)=0
- +6 IF APCMRPTT=1
- Begin DoDot:1
- +7 SET APCMP=0
- FOR
- SET APCMP=$ORDER(APCMPRV(APCMP))
- IF APCMP'=+APCMP
- QUIT
- Begin DoDot:2
- +8 ;no visits to this provider for this patient so don't bother, the patient is not in the denominator
- IF '$DATA(APCMHVTP(APCMP))
- QUIT
- +9 DO PL1
- +10 QUIT
- End DoDot:2
- End DoDot:1
- QUIT
- +11 IF APCMRPTT=2
- Begin DoDot:1
- +12 SET APCMP=APCMFAC
- +13 IF '$DATA(APCMHVTP(APCMP))
- QUIT
- +14 DO PL1
- +15 QUIT
- End DoDot:1
- +16 QUIT
- PL1 ;set denominator value into field
- +1 ;denom field for this measure
- SET F=$PIECE(^APCM13OB(APCMIC,0),U,8)
- +2 DO S^APCM13E1(APCMRPT,APCMIC,1,APCMP,APCMRPTT,APCMTIME,F)
- +3 SET APCMVALU="VISIT: "_$$DATE^APCM1UTL(APCMHVTP(APCMP))
- +4 ;numerator?
- +5 SET APCMEP=$$HASPL(DFN,APCMBDAT,APCMEDAT)
- +6 SET APCMVALU=APCMVALU_"|||"_$PIECE(APCMEP,U,2)_"|||"_$PIECE(APCMEP,U,1)
- +7 SET F=$PIECE(^APCM13OB(APCMIC,0),U,9)
- +8 DO S^APCM13E1(APCMRPT,APCMIC,$PIECE(APCMEP,U,1),APCMP,APCMRPTT,APCMTIME,F)
- +9 DO SETLIST^APCM13E1
- +10 QUIT
- HASPL(P,BD,ED) ;does patient have a problem entered before end of report period
- +1 ;
- +2 NEW A,B,C,D,E
- +3 SET E=""
- +4 SET A=0
- FOR
- SET A=$ORDER(^AUPNPROB("AC",P,A))
- IF A'=+A!(E]"")
- QUIT
- Begin DoDot:1
- +5 ;if date entered is after the ED don't count it
- +6 IF '$DATA(^AUPNPROB(A,0))
- QUIT
- +7 ;after end date of report period
- IF $PIECE(^AUPNPROB(A,0),U,8)>ED
- QUIT
- +8 IF $PIECE(^AUPNPROB(A,0),U,12)'="D"
- SET E=1_U_"Problem Entry: "_$$VAL^XBDIQ1(9000011,A,.01)_" entered on "_$$VAL^XBDIQ1(9000011,A,.08)
- QUIT
- +9 ;since it's deleted, deletion date must not be before time period
- +10 ;date deleted
- SET D=$PIECE($PIECE($GET(^AUPNPROB(A,2)),U,2),".")
- +11 IF D>ED
- QUIT
- +12 IF D<BD
- QUIT
- +13 SET E="1^Problem Entry: "_$$VAL^XBDIQ1(9000011,A,.01)_" entered on "_$$VAL^XBDIQ1(9000011,A,.08)
- End DoDot:1
- +14 IF E]""
- QUIT E
- +15 ;no problems on PL so how about a NAP before end of time period
- +16 SET C=$ORDER(^AUTTCRA("B","NO ACTIVE PROBLEMS",0))
- +17 IF 'C
- QUIT ""
- +18 SET A=0
- FOR
- SET A=$ORDER(^AUPNVRUP("AC",P,A))
- IF A'=+A!(E]"")
- QUIT
- Begin DoDot:1
- +19 ;oops
- IF '$DATA(^AUPNVRUP(A,0))
- QUIT
- +20 ;not NAP
- IF $PIECE(^AUPNVRUP(A,0),U,1)'=C
- QUIT
- +21 SET D=$$VD^APCLV($PIECE(^AUPNVRUP(A,0),U,3))
- +22 IF D>ED
- QUIT
- +23 SET E="1^No Active Problems on "_$$DATE^APCM1UTL(D)
- End DoDot:1
- +24 QUIT E
- MEDL ;EP - CALCULATE MEDICATION LIST
- +1 ;for each provider or for the facility find out if this
- +2 ;patient had a visit of A, O, R, S to this provider or facility
- +3 ;d
- +4 NEW APCMP
- +5 SET (APCMD1,APCMN1)=0
- +6 IF APCMRPTT=1
- Begin DoDot:1
- +7 SET APCMP=0
- FOR
- SET APCMP=$ORDER(APCMPRV(APCMP))
- IF APCMP'=+APCMP
- QUIT
- Begin DoDot:2
- +8 ;no visits to this provider for this patient so don't bother, the patient is not in the denominator
- IF '$DATA(APCMHVTP(APCMP))
- QUIT
- +9 DO MEDL1
- +10 QUIT
- End DoDot:2
- +11 QUIT
- End DoDot:1
- QUIT
- +12 IF APCMRPTT=2
- Begin DoDot:1
- +13 SET APCMP=APCMFAC
- +14 IF '$DATA(APCMHVTP(APCMP))
- QUIT
- +15 DO MEDL1
- +16 QUIT
- End DoDot:1
- +17 QUIT
- MEDL1 ;set denominator value into field
- +1 ;denom field for this measure
- SET F=$PIECE(^APCM13OB(APCMIC,0),U,8)
- +2 DO S^APCM13E1(APCMRPT,APCMIC,1,APCMP,APCMRPTT,APCMTIME,F)
- +3 SET APCMVALU="VISIT: "_$$DATE^APCM1UTL(APCMHVTP(APCMP))
- +4 ;numerator?
- +5 SET APCMEP=$$HASML(DFN,APCMBDAT,APCMEDAT)
- +6 SET APCMVALU=APCMVALU_"|||"_$PIECE(APCMEP,U,2)_"|||"_$PIECE(APCMEP,U,1)
- +7 SET F=$PIECE(^APCM13OB(APCMIC,0),U,9)
- +8 DO S^APCM13E1(APCMRPT,APCMIC,$PIECE(APCMEP,U,1),APCMP,APCMRPTT,APCMTIME,F)
- +9 DO SETLIST^APCM13E1
- +10 QUIT
- HASML(P,BDT,EDT) ;EP
- +1 NEW RXIEN,ACTIEN,RTSDT,FILLDT,A0,FDTLP,IEN,G,DC,EXP,SDT,X,I,DRG,L,V,EXDT,IFN,ID,D365
- +2 ;between BD and ED
- +3 IF '$GET(P)
- QUIT ""
- +4 IF '$GET(BDT)
- QUIT ""
- +5 IF '$GET(EDT)
- QUIT ""
- +6 IF '$DATA(^AUPNPAT(P,0))
- QUIT ""
- +7 SET G=""
- NAM ;look for "No Active Medications" anytime during the report period
- +1 SET C=$ORDER(^AUTTCRA("B","NO ACTIVE MEDICATIONS",0))
- +2 IF 'C
- GOTO RXS
- +3 ;GET most recent visit date
- +4 SET A=0
- FOR
- SET A=$ORDER(^AUPNVRUP("AC",P,A))
- IF A'=+A!(G]"")
- QUIT
- Begin DoDot:1
- +5 ;oops
- IF '$DATA(^AUPNVRUP(A,0))
- QUIT
- +6 ;not NAM
- IF $PIECE(^AUPNVRUP(A,0),U,1)'=C
- QUIT
- +7 SET D=$$VD^APCLV($PIECE(^AUPNVRUP(A,0),U,3))
- +8 ;before beg date
- IF D<BDT
- QUIT
- +9 ;after end date
- IF D>EDT
- QUIT
- +10 SET G="1^No Active Medications on "_$$DATE^APCM1UTL(D)
- End DoDot:1
- +11 IF G
- QUIT G
- RXS ;
- +1 SET G=""
- +2 SET D365=$$FMADD^XLFDT(BDT,-365)
- +3 SET EXDT=$$FMADD^XLFDT(BDT,-(365*3))
- +4 FOR
- SET EXDT=$ORDER(^PS(55,P,"P","A",EXDT))
- IF 'EXDT!(G]"")
- QUIT
- SET IFN=0
- FOR
- SET IFN=$ORDER(^PS(55,P,"P","A",EXDT,IFN))
- IF 'IFN!(G]"")
- QUIT
- IF $DATA(^PSRX(IFN,0))
- Begin DoDot:1
- +5 ;deleted
- IF $PIECE($GET(^PSRX(IFN,"STA")),"^")=13
- QUIT
- +6 ; Prescription must have a drug
- IF '$PIECE(^PSRX(IFN,0),U,6)
- QUIT
- +7 ;issue date
- SET ID=$PIECE(^PSRX(IFN,0),U,13)
- +8 IF ID<D365
- QUIT
- +9 IF ID>EDT
- QUIT
- +10 ;dc date
- SET DC=$PIECE($GET(^PSRX(IFN,3)),U,5)
- +11 ;IF DC'ED DATE IF MUST BE ON OR AFTER 1ST DATE OF TIME PERIOD
- IF DC]""
- IF DC<BDT
- QUIT
- +12 SET G=1_U_$$DATE^APCM1UTL(ID)_" Rx: "_$PIECE(^PSRX(IFN,0),U,1)
- QUIT
- End DoDot:1
- +13 IF G]""
- QUIT G
- +14 ;now check NVA meds
- NVA ; Set Non-VA Med Orders in the ^TMP Global
- +1 SET G=""
- +2 FOR I=0:0
- SET I=$ORDER(^PS(55,P,"NVA",I))
- IF 'I!(G]"")
- QUIT
- SET X=$GET(^PS(55,P,"NVA",I,0))
- Begin DoDot:1
- +3 IF '$PIECE(X,"^")
- QUIT
- +4 SET DRG=$SELECT($PIECE(X,"^",2):$PIECE($GET(^PSDRUG($PIECE(X,"^",2),0)),"^"),1:$PIECE(^PS(50.7,$PIECE(X,"^"),0),"^")_" "_$PIECE(^PS(50.606,$PIECE(^PS(50.7,$PIECE(X,"^"),0),"^",2),0),"^"))
- +5 ;DC'ED
- IF $PIECE(X,"^",7)
- IF $PIECE(X,"^",7)<BDT
- QUIT
- +6 ;NO documented date
- SET SDT=$PIECE(X,"^",10)
- IF 'SDT
- QUIT
- +7 ;documented date after end date
- IF SDT>EDT
- QUIT
- +8 IF $PIECE(X,U,6)]""
- QUIT
- +9 SET G=1_U_"NVA: "_$$DATE^APCM1UTL($PIECE(X,U,10))_" Item: "_DRG
- End DoDot:1
- +10 IF G]""
- QUIT G
- +11 QUIT G
- +12 ; Return boolean flag indicating valid patient
- PATVRY(RX,PAT) ;EP
- +1 IF PAT="*"
- QUIT 1
- +2 QUIT +$PIECE($GET(^PSRX(RX,0)),U,2)=PAT
- +3 ; Return release date for dispense
- DSPRDT(RX,TYP,SIEN) ;EP
- +1 QUIT $SELECT($GET(SIEN):+$PIECE($GET(^PSRX(RX,$SELECT(TYP="ADP":"P",1:1),SIEN,0)),U,$SELECT(TYP="ADP":19,1:18)),1:+$PIECE(^PSRX(RX,2),U,13))