- APCM24CI ;IHS/CMI/LAB - MU REPORT;
- ;;1.0;IHS MU PERFORMANCE REPORTS;**5,6**;MAR 26, 2012;Build 65
- ;
- CALCIND ;EP - CALCULATE ALL MEASURES
- ;for this patient get all of their visits in the EHR reporting period and save in APCMVSTS for use in all measures
- K APCMVSTS,APCMHVTP,APCMPEVT
- D ALLV^APCLAPIU(DFN,APCMBDAT,APCMEDAT,"APCMVSTS")
- I APCMRPTT=1 S APCMP=0 F S APCMP=$O(APCMPRV(APCMP)) Q:APCMP'=+APCMP D
- .K APCMSC
- .F X="A","O","M","S" S APCMSC(X)=""
- .S APCMHV=$$HADV(DFN,APCMP,APCMBDAT,APCMEDAT,.APCMVSTS,.APCMSC)
- .I APCMHV S APCMHVTP(APCMP)=APCMHV
- .K APCMSC
- .F X="A","O","S" S APCMSC(X)=""
- .S APCMPEHV=$$HADV(DFN,APCMP,APCMBDAT,APCMEDAT,.APCMVSTS,.APCMSC)
- .I APCMPEHV S APCMPEVT(APCMP)=APCMPEHV
- .K APCMSC
- ;all measures except attestation and non-patient
- I APCMRPTT=2 D
- .S APCMHV=$$HADVH(DFN,APCMFAC,APCMBDAT,APCMEDAT,.APCMVSTS,APCMMETH) I APCMHV S APCMHVTP(APCMFAC)=APCMHV
- .S APCMVDOD=$$VDOD(DFN,APCMFAC,APCMBDAT,APCMEDAT,.APCMVSTS) ;did patient have an H visit with Death as discharge type
- S APCMIC=0 F S APCMIC=$O(APCMIND(APCMIC)) Q:APCMIC'=+APCMIC D
- .Q:$P(^APCM24OB(APCMIC,0),U,6)="A"
- .Q:$P(^APCM24OB(APCMIC,0),U,12)=0
- .K APCMSTOP,APCMVAL,APCMVALU,A,B,C,D,E,F,G,H,I,J,K,M,N,O,P,Q,R,S,T,V,W,X,Y,Z
- .S APCMVALU=""
- .I $D(^APCM24OB(APCMIC,1)) X ^APCM24OB(APCMIC,1)
- Q
- CALCINDA ;EP - CALCULATE ATTESTATION MEASURES
- S APCMIC=0 F S APCMIC=$O(APCMIND(APCMIC)) Q:APCMIC'=+APCMIC D
- .;Q:$P(^APCM24OB(APCMIC,0),U,6)="R"
- .Q:$P(^APCM24OB(APCMIC,0),U,12)=1
- .K APCMSTOP,APCMVAL,APCMVALU,A,B,C,D,E,F,G,H,I,J,K,M,N,O,P,Q,R,S,T,V,W,X,Y,Z,APCMVALU
- .K APCMN1,APCMD1
- .S APCMVALU=""
- .I $D(^APCM24OB(APCMIC,1)) X ^APCM24OB(APCMIC,1)
- Q
- S1(BQITYP,BQIVAL) ; Return data by patient for iCare into global reference BQIGREF
- ;Input Variables
- ; BQITYP - Type of value
- ; D = Denominator
- ; N = Numerator
- ; BQIVAL - Value of the type; 0 or 1
- ;Assumed variables
- ; APCMVALUE - the measure value
- ; BQIGREF - global reference where data will be stored temporarily
- ; APCMIC - Indicator IEN
- ; APCMI - Individual Indicator IEN
- ; DFN - Patient IEN
- ;
- ; If no value of BQIGREF, then it's the regular GPRA report calling the code
- ; and nothing needs to be set for iCare.
- Q:$G(BQIGREF)=""
- ;
- ; If no denominator or numerator value, then it doesn't need to be set for iCare
- I '$G(BQIVAL) Q
- ;
- NEW BQITIT,BQILTIT,BQILTIT1,BQILTIT2,BQILTIT3,BQILDTI1,BQILDTI2
- NEW BQIDTIT,BQIFTIT,BQITWEN,BQICURR,BQIIDTA,BQIDTA,BQILDTI3
- S BQIIDTA=$G(^APCM24OB(APCMI,0))
- S BQIDTA=$G(^APCM24OB(APCMI,14))
- ;
- ; Get the Individual Indicator TITLE (1404)
- S BQITIT=$P(BQIDTA,U,4)
- ;
- ; Get the Individual Indicator LINE TITLE 1 (.15)
- S BQILTIT1=$P(BQIIDTA,U,15)
- I BQILTIT1="" Q
- ; Get the Individual Indicator LINE TITLE 2 and 3 (.16,.19)
- S BQILTIT2=$P(BQIIDTA,U,16)
- S BQILTIT3=$P(BQIIDTA,U,19)
- S BQILTIT=BQILTIT1_" "_BQILTIT2_" "_BQILTIT3
- ;
- ; Get the Individual Indicator LOCAL DENOM TITLE 1, 2, and 3 (.17,.18,.21)
- S BQILDTI1=$P(BQIIDTA,U,17)
- S BQILDTI2=$P(BQIIDTA,U,18)
- S BQILDTI3=$P(BQIIDTA,U,21)
- S BQIDTIT=BQILDTI1_" "_BQILDTI2_" "_BQILDTI3
- ;
- ; Full title is all title fields
- S BQIFTIT=BQITIT_" "_BQILTIT_" "_BQIDTIT
- S $P(@BQIGREF@(DFN,APCMIC,APCMI),"^",1)=BQIFTIT
- ;
- ; Get the GOAL 2014 value and the GOAL 06 value
- S BQITWEN=$P(BQIDTA,U,3)
- S BQICURR=$P(BQIDTA,U,8)
- ;
- I BQITYP="N" S $P(@BQIGREF@(DFN,APCMIC,APCMI),"^",2)=$G(BQIVAL)
- ;
- I BQITYP="D" S $P(@BQIGREF@(DFN,APCMIC,APCMI),"^",3)=$G(BQIVAL)
- ;
- ; Set the Indicator TITLE (.03)
- S $P(@BQIGREF@(DFN,APCMIC),U,1)=$P(^APCM24OB(APCMIC,0),U,3)
- S $P(@BQIGREF@(DFN,APCMIC),U,2)=$G(APCMVALU)
- I BQITWEN'="" S $P(@BQIGREF@(DFN,APCMIC),U,3)=BQITWEN
- I BQICURR'="" S $P(@BQIGREF@(DFN,APCMIC),U,4)=BQICURR
- Q
- HADV(P,R,BD,ED,VSTS,SC) ;EP - had visit of A, O, R, S with provider R in time frame BD-ED
- ;PATCH 1 excludes ER and case management clinics
- ;patch 1 provider must be primary only
- ; so, in summary, the patient must have at least 1 A,O,R,M, non-ER, non-case man visit
- ; where this provider is the primary provider
- I '$G(P) Q ""
- I '$G(R) Q ""
- I '$G(BD) Q ""
- I '$G(ED) Q ""
- I '$D(^AUPNPAT(P,0)) Q ""
- I '$D(^VA(200,R,0)) Q ""
- NEW V,X,Y,G,S
- S G=""
- S X=0 F S X=$O(VSTS(X)) Q:X'=+X!(G) D
- .S V=$P(VSTS(X),U,5)
- .I '$D(^AUPNVSIT(V,0)) Q
- .I $P(^AUPNVSIT(V,0),U,11) Q ;deleted
- .;I "AOSM"'[$P(^AUPNVSIT(V,0),U,7) Q ;not correct service category
- .S S=$P(^AUPNVSIT(V,0),U,7)
- .Q:S="" ;no service category
- .Q:'$D(SC(S))
- .S C=$$CLINIC^APCLV(V,"C")
- .I C=30 Q ;no ER per Carmen patch 1
- .I C=77 Q ;no case management clinic 77 per Chris
- .I C=76 Q ;no lab
- .I C=63 Q ;no radiology
- .I C=39 Q ;no pharmacy
- .S Y=$$PRIMPROV^APCLV(V,"I")
- .I 'Y Q
- .I Y'=R Q ;not this provider
- .;S Y=0 F S Y=$O(^AUPNVPRV("AD",V,Y)) Q:Y'=+Y!(G) D
- .;.I $P($G(^AUPNVPRV(Y,0)),U)'=R Q
- .S G=$$VD^APCLV(V)
- Q G ;quit on the date of the visit
- ;
- HADVH(P,R,BD,ED,VSTS,APCMMETH) ;EP - had visit H or ER A,O,S,M
- I '$G(P) Q ""
- I '$G(R) Q ""
- I '$G(BD) Q ""
- I '$G(ED) Q ""
- I '$D(^AUPNPAT(P,0)) Q ""
- I '$D(^DIC(4,R,0)) Q ""
- NEW V,X,Y,G,C
- S G=""
- S X=0 F S X=$O(VSTS(X)) Q:X'=+X!(G) D
- .S V=$P(VSTS(X),U,5)
- .I '$D(^AUPNVSIT(V,0)) Q
- .I $P(^AUPNVSIT(V,0),U,11) Q ;deleted
- .I $P(^AUPNVSIT(V,0),U,6)'=R Q ;not correct facility
- .I $P(^AUPNVSIT(V,0),U,7)="H" S G=$$VD^APCLV(V) Q
- .I APCMMETH="O",$P(^AUPNVSIT(V,0),U,7)="O" S G=$$VD^APCLV(V) Q
- .Q:APCMMETH="O"
- .I $P(^AUPNVSIT(V,0),U,7)'="A" Q ;not correct service category
- .S C=$$CLINIC^APCLV(V,"C")
- .I C'=30 Q
- .S G=$$VD^APCLV(V)
- Q G ;quit on the date of the visit
- VDOD(P,R,BD,ED,VSTS) ;EP - had visit H or ER A,O,S,M
- I '$G(P) Q ""
- I '$G(R) Q ""
- I '$G(BD) Q ""
- I '$G(ED) Q ""
- I '$D(^AUPNPAT(P,0)) Q ""
- I '$D(^DIC(4,R,0)) Q ""
- NEW V,X,Y,G,C,H,D
- S G=""
- S X=0 F S X=$O(^AUPNVINP("AC",P,X)) Q:X'=+X!(G) D
- .S V=$P($G(^AUPNVINP(X,0)),U,3)
- .Q:'V
- .I '$D(^AUPNVSIT(V,0)) Q
- .I $P(^AUPNVSIT(V,0),U,11) Q ;deleted
- .I $P(^AUPNVSIT(V,0),U,6)'=R Q ;not correct facility
- .I $P(^AUPNVSIT(V,0),U,7)'="H" Q
- .;get discharge type
- .S D=$$VAL^XBDIQ1(9000010.02,X,.06)
- .I D["DEATH" S G=X
- .;I $$VAL^XBDIQ1(9000010.02,H,6102)="EXPIRED"
- Q G ;quit on the IEN OF THE V HOSP
- APCM24CI ;IHS/CMI/LAB - MU REPORT;
- +1 ;;1.0;IHS MU PERFORMANCE REPORTS;**5,6**;MAR 26, 2012;Build 65
- +2 ;
- CALCIND ;EP - CALCULATE ALL MEASURES
- +1 ;for this patient get all of their visits in the EHR reporting period and save in APCMVSTS for use in all measures
- +2 KILL APCMVSTS,APCMHVTP,APCMPEVT
- +3 DO ALLV^APCLAPIU(DFN,APCMBDAT,APCMEDAT,"APCMVSTS")
- +4 IF APCMRPTT=1
- SET APCMP=0
- FOR
- SET APCMP=$ORDER(APCMPRV(APCMP))
- IF APCMP'=+APCMP
- QUIT
- Begin DoDot:1
- +5 KILL APCMSC
- +6 FOR X="A","O","M","S"
- SET APCMSC(X)=""
- +7 SET APCMHV=$$HADV(DFN,APCMP,APCMBDAT,APCMEDAT,.APCMVSTS,.APCMSC)
- +8 IF APCMHV
- SET APCMHVTP(APCMP)=APCMHV
- +9 KILL APCMSC
- +10 FOR X="A","O","S"
- SET APCMSC(X)=""
- +11 SET APCMPEHV=$$HADV(DFN,APCMP,APCMBDAT,APCMEDAT,.APCMVSTS,.APCMSC)
- +12 IF APCMPEHV
- SET APCMPEVT(APCMP)=APCMPEHV
- +13 KILL APCMSC
- End DoDot:1
- +14 ;all measures except attestation and non-patient
- +15 IF APCMRPTT=2
- Begin DoDot:1
- +16 SET APCMHV=$$HADVH(DFN,APCMFAC,APCMBDAT,APCMEDAT,.APCMVSTS,APCMMETH)
- IF APCMHV
- SET APCMHVTP(APCMFAC)=APCMHV
- +17 ;did patient have an H visit with Death as discharge type
- SET APCMVDOD=$$VDOD(DFN,APCMFAC,APCMBDAT,APCMEDAT,.APCMVSTS)
- End DoDot:1
- +18 SET APCMIC=0
- FOR
- SET APCMIC=$ORDER(APCMIND(APCMIC))
- IF APCMIC'=+APCMIC
- QUIT
- Begin DoDot:1
- +19 IF $PIECE(^APCM24OB(APCMIC,0),U,6)="A"
- QUIT
- +20 IF $PIECE(^APCM24OB(APCMIC,0),U,12)=0
- QUIT
- +21 KILL APCMSTOP,APCMVAL,APCMVALU,A,B,C,D,E,F,G,H,I,J,K,M,N,O,P,Q,R,S,T,V,W,X,Y,Z
- +22 SET APCMVALU=""
- +23 IF $DATA(^APCM24OB(APCMIC,1))
- XECUTE ^APCM24OB(APCMIC,1)
- End DoDot:1
- +24 QUIT
- CALCINDA ;EP - CALCULATE ATTESTATION MEASURES
- +1 SET APCMIC=0
- FOR
- SET APCMIC=$ORDER(APCMIND(APCMIC))
- IF APCMIC'=+APCMIC
- QUIT
- Begin DoDot:1
- +2 ;Q:$P(^APCM24OB(APCMIC,0),U,6)="R"
- +3 IF $PIECE(^APCM24OB(APCMIC,0),U,12)=1
- QUIT
- +4 KILL APCMSTOP,APCMVAL,APCMVALU,A,B,C,D,E,F,G,H,I,J,K,M,N,O,P,Q,R,S,T,V,W,X,Y,Z,APCMVALU
- +5 KILL APCMN1,APCMD1
- +6 SET APCMVALU=""
- +7 IF $DATA(^APCM24OB(APCMIC,1))
- XECUTE ^APCM24OB(APCMIC,1)
- End DoDot:1
- +8 QUIT
- S1(BQITYP,BQIVAL) ; Return data by patient for iCare into global reference BQIGREF
- +1 ;Input Variables
- +2 ; BQITYP - Type of value
- +3 ; D = Denominator
- +4 ; N = Numerator
- +5 ; BQIVAL - Value of the type; 0 or 1
- +6 ;Assumed variables
- +7 ; APCMVALUE - the measure value
- +8 ; BQIGREF - global reference where data will be stored temporarily
- +9 ; APCMIC - Indicator IEN
- +10 ; APCMI - Individual Indicator IEN
- +11 ; DFN - Patient IEN
- +12 ;
- +13 ; If no value of BQIGREF, then it's the regular GPRA report calling the code
- +14 ; and nothing needs to be set for iCare.
- +15 IF $GET(BQIGREF)=""
- QUIT
- +16 ;
- +17 ; If no denominator or numerator value, then it doesn't need to be set for iCare
- +18 IF '$GET(BQIVAL)
- QUIT
- +19 ;
- +20 NEW BQITIT,BQILTIT,BQILTIT1,BQILTIT2,BQILTIT3,BQILDTI1,BQILDTI2
- +21 NEW BQIDTIT,BQIFTIT,BQITWEN,BQICURR,BQIIDTA,BQIDTA,BQILDTI3
- +22 SET BQIIDTA=$GET(^APCM24OB(APCMI,0))
- +23 SET BQIDTA=$GET(^APCM24OB(APCMI,14))
- +24 ;
- +25 ; Get the Individual Indicator TITLE (1404)
- +26 SET BQITIT=$PIECE(BQIDTA,U,4)
- +27 ;
- +28 ; Get the Individual Indicator LINE TITLE 1 (.15)
- +29 SET BQILTIT1=$PIECE(BQIIDTA,U,15)
- +30 IF BQILTIT1=""
- QUIT
- +31 ; Get the Individual Indicator LINE TITLE 2 and 3 (.16,.19)
- +32 SET BQILTIT2=$PIECE(BQIIDTA,U,16)
- +33 SET BQILTIT3=$PIECE(BQIIDTA,U,19)
- +34 SET BQILTIT=BQILTIT1_" "_BQILTIT2_" "_BQILTIT3
- +35 ;
- +36 ; Get the Individual Indicator LOCAL DENOM TITLE 1, 2, and 3 (.17,.18,.21)
- +37 SET BQILDTI1=$PIECE(BQIIDTA,U,17)
- +38 SET BQILDTI2=$PIECE(BQIIDTA,U,18)
- +39 SET BQILDTI3=$PIECE(BQIIDTA,U,21)
- +40 SET BQIDTIT=BQILDTI1_" "_BQILDTI2_" "_BQILDTI3
- +41 ;
- +42 ; Full title is all title fields
- +43 SET BQIFTIT=BQITIT_" "_BQILTIT_" "_BQIDTIT
- +44 SET $PIECE(@BQIGREF@(DFN,APCMIC,APCMI),"^",1)=BQIFTIT
- +45 ;
- +46 ; Get the GOAL 2014 value and the GOAL 06 value
- +47 SET BQITWEN=$PIECE(BQIDTA,U,3)
- +48 SET BQICURR=$PIECE(BQIDTA,U,8)
- +49 ;
- +50 IF BQITYP="N"
- SET $PIECE(@BQIGREF@(DFN,APCMIC,APCMI),"^",2)=$GET(BQIVAL)
- +51 ;
- +52 IF BQITYP="D"
- SET $PIECE(@BQIGREF@(DFN,APCMIC,APCMI),"^",3)=$GET(BQIVAL)
- +53 ;
- +54 ; Set the Indicator TITLE (.03)
- +55 SET $PIECE(@BQIGREF@(DFN,APCMIC),U,1)=$PIECE(^APCM24OB(APCMIC,0),U,3)
- +56 SET $PIECE(@BQIGREF@(DFN,APCMIC),U,2)=$GET(APCMVALU)
- +57 IF BQITWEN'=""
- SET $PIECE(@BQIGREF@(DFN,APCMIC),U,3)=BQITWEN
- +58 IF BQICURR'=""
- SET $PIECE(@BQIGREF@(DFN,APCMIC),U,4)=BQICURR
- +59 QUIT
- HADV(P,R,BD,ED,VSTS,SC) ;EP - had visit of A, O, R, S with provider R in time frame BD-ED
- +1 ;PATCH 1 excludes ER and case management clinics
- +2 ;patch 1 provider must be primary only
- +3 ; so, in summary, the patient must have at least 1 A,O,R,M, non-ER, non-case man visit
- +4 ; where this provider is the primary provider
- +5 IF '$GET(P)
- QUIT ""
- +6 IF '$GET(R)
- QUIT ""
- +7 IF '$GET(BD)
- QUIT ""
- +8 IF '$GET(ED)
- QUIT ""
- +9 IF '$DATA(^AUPNPAT(P,0))
- QUIT ""
- +10 IF '$DATA(^VA(200,R,0))
- QUIT ""
- +11 NEW V,X,Y,G,S
- +12 SET G=""
- +13 SET X=0
- FOR
- SET X=$ORDER(VSTS(X))
- IF X'=+X!(G)
- QUIT
- Begin DoDot:1
- +14 SET V=$PIECE(VSTS(X),U,5)
- +15 IF '$DATA(^AUPNVSIT(V,0))
- QUIT
- +16 ;deleted
- IF $PIECE(^AUPNVSIT(V,0),U,11)
- QUIT
- +17 ;I "AOSM"'[$P(^AUPNVSIT(V,0),U,7) Q ;not correct service category
- +18 SET S=$PIECE(^AUPNVSIT(V,0),U,7)
- +19 ;no service category
- IF S=""
- QUIT
- +20 IF '$DATA(SC(S))
- QUIT
- +21 SET C=$$CLINIC^APCLV(V,"C")
- +22 ;no ER per Carmen patch 1
- IF C=30
- QUIT
- +23 ;no case management clinic 77 per Chris
- IF C=77
- QUIT
- +24 ;no lab
- IF C=76
- QUIT
- +25 ;no radiology
- IF C=63
- QUIT
- +26 ;no pharmacy
- IF C=39
- QUIT
- +27 SET Y=$$PRIMPROV^APCLV(V,"I")
- +28 IF 'Y
- QUIT
- +29 ;not this provider
- IF Y'=R
- QUIT
- +30 ;S Y=0 F S Y=$O(^AUPNVPRV("AD",V,Y)) Q:Y'=+Y!(G) D
- +31 ;.I $P($G(^AUPNVPRV(Y,0)),U)'=R Q
- +32 SET G=$$VD^APCLV(V)
- End DoDot:1
- +33 ;quit on the date of the visit
- QUIT G
- +34 ;
- HADVH(P,R,BD,ED,VSTS,APCMMETH) ;EP - had visit H or ER A,O,S,M
- +1 IF '$GET(P)
- QUIT ""
- +2 IF '$GET(R)
- QUIT ""
- +3 IF '$GET(BD)
- QUIT ""
- +4 IF '$GET(ED)
- QUIT ""
- +5 IF '$DATA(^AUPNPAT(P,0))
- QUIT ""
- +6 IF '$DATA(^DIC(4,R,0))
- QUIT ""
- +7 NEW V,X,Y,G,C
- +8 SET G=""
- +9 SET X=0
- FOR
- SET X=$ORDER(VSTS(X))
- IF X'=+X!(G)
- QUIT
- Begin DoDot:1
- +10 SET V=$PIECE(VSTS(X),U,5)
- +11 IF '$DATA(^AUPNVSIT(V,0))
- QUIT
- +12 ;deleted
- IF $PIECE(^AUPNVSIT(V,0),U,11)
- QUIT
- +13 ;not correct facility
- IF $PIECE(^AUPNVSIT(V,0),U,6)'=R
- QUIT
- +14 IF $PIECE(^AUPNVSIT(V,0),U,7)="H"
- SET G=$$VD^APCLV(V)
- QUIT
- +15 IF APCMMETH="O"
- IF $PIECE(^AUPNVSIT(V,0),U,7)="O"
- SET G=$$VD^APCLV(V)
- QUIT
- +16 IF APCMMETH="O"
- QUIT
- +17 ;not correct service category
- IF $PIECE(^AUPNVSIT(V,0),U,7)'="A"
- QUIT
- +18 SET C=$$CLINIC^APCLV(V,"C")
- +19 IF C'=30
- QUIT
- +20 SET G=$$VD^APCLV(V)
- End DoDot:1
- +21 ;quit on the date of the visit
- QUIT G
- VDOD(P,R,BD,ED,VSTS) ;EP - had visit H or ER A,O,S,M
- +1 IF '$GET(P)
- QUIT ""
- +2 IF '$GET(R)
- QUIT ""
- +3 IF '$GET(BD)
- QUIT ""
- +4 IF '$GET(ED)
- QUIT ""
- +5 IF '$DATA(^AUPNPAT(P,0))
- QUIT ""
- +6 IF '$DATA(^DIC(4,R,0))
- QUIT ""
- +7 NEW V,X,Y,G,C,H,D
- +8 SET G=""
- +9 SET X=0
- FOR
- SET X=$ORDER(^AUPNVINP("AC",P,X))
- IF X'=+X!(G)
- QUIT
- Begin DoDot:1
- +10 SET V=$PIECE($GET(^AUPNVINP(X,0)),U,3)
- +11 IF 'V
- QUIT
- +12 IF '$DATA(^AUPNVSIT(V,0))
- QUIT
- +13 ;deleted
- IF $PIECE(^AUPNVSIT(V,0),U,11)
- QUIT
- +14 ;not correct facility
- IF $PIECE(^AUPNVSIT(V,0),U,6)'=R
- QUIT
- +15 IF $PIECE(^AUPNVSIT(V,0),U,7)'="H"
- QUIT
- +16 ;get discharge type
- +17 SET D=$$VAL^XBDIQ1(9000010.02,X,.06)
- +18 IF D["DEATH"
- SET G=X
- +19 ;I $$VAL^XBDIQ1(9000010.02,H,6102)="EXPIRED"
- End DoDot:1
- +20 ;quit on the IEN OF THE V HOSP
- QUIT G