BGP5D91 ; IHS/CMI/LAB - calc measures 29 Apr 2010 7:38 PM 14 Nov 2006 5:02 PM 12 Nov 2009 11:03 AM 07 Apr 2010 7:00 AM ;
;;15.1;IHS CLINICAL REPORTING;;MAY 06, 2015;Build 143
;
EOST ;
NEW BGPOXV,BGPD,BGPN
K BGPOXV
I 'BGPACTUP S BGPSTOP=1 Q ;no active user pop
I BGPAGEB<18 S BGPSTOP=1 Q ;don't process this measure, pt under 18
S BGPD1=0
S BGPN1=0,BGPVALUE=""
D TIAFIB(DFN,BGPBDATE,BGPEDATE,.BGPOXV)
;now evaluate result
S BGPD1=BGPOXV("DENOM")
I 'BGPD1 S BGPSTOP=1 Q
S BGPN1=$P(BGPOXV(0),U,1)
S BGPN2=$P(BGPOXV(0),U,2)
S BGPN3=$P(BGPOXV(0),U,3)
S BGPD="",BGPN=""
S C=0 F S C=$O(BGPOXV(C)) Q:C'=+C D
.S BGPN=$S(BGPN="":"Visit: ",1:BGPN_"; ")
.S BGPN=BGPN_$P(BGPOXV(C),U,1)_" THERAPY: "_$P($P(BGPOXV(C),U,2)," ",2,99)
.Q
;
S BGPVALUE="UP"_"|||"_BGPN
Q
;
TIAFIB(P,BDATE,EDATE,BGPR) ;EP
NEW A,X,V,BGPG,G,C,T,B,E,BGPX,BGPV,BGPD
K BGPR,BGPG,BGPX
S BGPR="",BGPR(0)=""
S X=P_"^ALL VISITS;DURING "_$$FMTE^XLFDT(BDATE)_"-"_$$FMTE^XLFDT(EDATE) S E=$$START1^APCLDF(X,"BGPG(")
I '$D(BGPG(1)) S BGPR("DENOM")=0 Q
;now go through and get rid of H and CHS
S T=$O(^ATXAX("B","BGP TIA DXS",0))
S A=0 F S A=$O(BGPG(A)) Q:A'=+A D
.S V=$P(BGPG(A),U,5)
.I '$D(^AUPNVSIT(V,0)) K BGPG(A) Q
.I $P(^AUPNVSIT(V,0),U,3)="C" K BGPG(A) Q
.I $P(^AUPNVSIT(V,0),U,7)'="H" K BGPG(A) Q
.S X=0,G=0,E=0,B=0 F S X=$O(^AUPNVPOV("AD",V,X)) Q:X'=+X D
..S C=$P($G(^AUPNVPOV(X,0)),U)
..Q:C=""
..I $$ICD^BGP5UTL2(C,T,9) S G=1,$P(BGPG(A),U,15)=$$VAL^XBDIQ1(9000010.07,X,.01)
..I $$ICD^BGP5UTL2(C,$O(^ATXAX("B","BGP ATRIAL FIBRILLATION DXS",0)),9) S E=1
.I G,E S B=1 ;have both
.I 'B K BGPG(A) ;no tia diagnosis
I '$D(BGPG) S BGPR("DENOM")=0 Q
;reorder the diagnoses by visit date
S A=0 F S A=$O(BGPG(A)) Q:A'=+A S V=$P(BGPG(A),U,5),D=$P($P($G(^AUPNVSIT(V,0)),U),"."),BGPX(D,V)=BGPG(A)
;now get the first one
S BGPD=0,BGPC=0 F S BGPD=$O(BGPX(BGPD)) Q:BGPD'=+BGPD D
.S BGPV=0 F S BGPV=$O(BGPX(BGPD,BGPV)) Q:BGPV'=+BGPV D
..S BGPC=BGPC+1,BGPR(BGPC)=BGPC_") "_$$DATE^BGP2UTL(BGPD)_" POV "_$P(BGPX(BGPD,BGPV),U,15)_" + POV 427.31" ;set denominator
..S G=$$ANTICOAG(P,$$FMADD^XLFDT(BGPD,-365),$$DSCHDATE^APCLV(BGPV),BGPD) ; any ANTICOAG?
..S $P(BGPR(BGPC),U,2)=BGPC_") "_$P(G,U,1) ;set numerator column
..S $P(BGPR(0),U,$P(G,U,2))=$P(BGPR(0),U,$P(G,U,2))+1
S BGPR("DENOM")=BGPC
Q
ANTICOAG(P,BDATE,EDATE,BGPAD) ;EP - was there ANTICOAG
NEW BGPD,X,N,E,Y,T,D,C,BGPLT,L,J,BGPG,S
K BGPG S Y="BGPG(",X=P_"^ALL MED;DURING "_$$FMTE^XLFDT(BDATE)_"-"_$$FMTE^XLFDT(EDATE) S E=$$START1^APCLDF(X,Y)
S X=0,G="" F S X=$O(BGPG(X)) Q:X'=+X!(G]"") D
.S N=+$P(BGPG(X),U,4) ;ien of v med
.S C=$$ANTIDRUG(N) ;not one of the drugs
.Q:'$P(C,U)
.;c=1^category of drug
.I $P(^AUPNVMED(N,0),U,8)]"",$P(^AUPNVMED(N,0),U,8)'>EDATE Q ;discontinued before discharge date
.S S=$P(^AUPNVMED(N,0),U,7)
.I $P($P(^AUPNVSIT($P(^AUPNVMED(N,0),U,3),0),U),".")=EDATE S G=$$DATE^BGP5UTL(EDATE)_" MET: "_$P(C,U,2)_"^1" ;PRESCRIBED ON DISCHARGE DATE
.S V=$P(^AUPNVMED(N,0),U,3)
.S V=$P($P(^AUPNVSIT(V,0),U),".")
.I $$FMADD^XLFDT(V,S)<EDATE Q ;not valid through discharge date
.S G=$$DATE^BGP5UTL(V)_" MET: "_$P(C,U,2)_"^1"
I G]"" Q G
Q "NOT MET: NO THERAPY^3"
;
ANTIDRUG(N) ;
NEW G,T,I
I '$D(^AUPNVMED(N,0)) Q 0
I $$UP^XLFSTR($P($G(^AUPNVMED(N,11)),U))["RETURNED TO STOCK" Q 0
S I=$P($G(^AUPNVMED(N,0)),U)
I 'I Q 0
S G=0
S T=$O(^ATXAX("B","DM AUDIT ASPIRIN DRUGS",0))
I T,$D(^ATXAX(T,21,"B",I)) Q "1^ASA"
S T=$O(^ATXAX("B","BGP CMS WARFARIN MEDS",0))
I T,$D(^ATXAX(T,21,"B",I)) Q "1^WARF"
S T=$O(^ATXAX("B","DM AUDIT ANTI-PLATELET DRUGS",0))
I T,$D(^ATXAX(T,21,"B",I)) Q "1^ANTI-PLT"
S G=$P(^PSDRUG(I,0),U,2)
I G="BL700" Q "1^ANTI-PLT"
I $P(^PSDRUG(I,0),U)["WARFARIN" Q "1^WARF"
I $$VAPI^BGP5D81(I,$O(^ATXAX("B","BGP CMS WARFARIN VAPI",0))) Q "1^WARF"
Q ""
;
EOOX ;
NEW BGPOXV,BGPD,BGPN
I 'BGPACTUP S BGPSTOP=1 Q ;no active user pop
I BGPAGEB<18 S BGPSTOP=1 Q ;don't process this measure, pt under 18
S BGPD1=0 ;Number of pneumonia visits
S BGPN1=0,BGPVALUE=""
K BGPOXV
D PNEUOX(DFN,BGPBDATE,BGPEDATE,.BGPOXV)
;now evaluate result
S BGPD1=BGPOXV("DENOM") ;number of pneumonia visits
I 'BGPD1 S BGPSTOP=1 Q ;no pneumonia visits
S BGPN1=$P(BGPOXV(0),U,1)
S BGPN2=$P(BGPOXV(0),U,2)
S BGPN3=$P(BGPOXV(0),U,3)
S BGPD="",BGPN=""
S C=0 F S C=$O(BGPOXV(C)) Q:C'=+C D
.S BGPD=BGPD_$S(BGPD]"":"; ",1:"")_$P(BGPOXV(C),U)
.S BGPN=BGPN_$S(BGPN]"":"; ",1:"")_$P(BGPOXV(C),U,2)
;
S BGPVALUE="UP,"_BGPD_"||| "_BGPN
Q
;
PNEUOX(P,BDATE,EDATE,BGPR) ;EP
NEW A,B,C,D,E,F,G,BGPG,BGPX,BGPD,BGPV,BGPC
K BGPG,BGPR
S BGPR="",BGPR(0)=""
S X=P_"^ALL DX [BGP CMS PNEUMONIA;DURING "_$$FMTE^XLFDT(BDATE)_"-"_$$FMTE^XLFDT(EDATE) S E=$$START1^APCLDF(X,"BGPG(")
I '$D(BGPG(1)) S BGPR("DENOM")=0 Q
;now go through and get rid of CHS or service category not A, O, S
S A=0 F S A=$O(BGPG(A)) Q:A'=+A D
.S V=$P(BGPG(A),U,5)
.I '$D(^AUPNVSIT(V,0)) K BGPG(A)
.I $P(^AUPNVSIT(V,0),U,3)="C" K BGPG(A)
.I "AOS"'[$P(^AUPNVSIT(V,0),U,7) K BGPG(A)
I '$D(BGPG) S BGPR("DENOM")=0 Q ;got rid of them all
;reorder the diagnoses by visit date
S A=0 F S A=$O(BGPG(A)) Q:A'=+A S V=$P(BGPG(A),U,5),D=$P($P($G(^AUPNVSIT(V,0)),U),"."),BGPX(D,V)=BGPG(A)
;now get the first one
S BGPD=0,BGPC=0 F S BGPD=$O(BGPX(BGPD)) Q:BGPD'=+BGPD D
.S BGPV=0 F S BGPV=$O(BGPX(BGPD,BGPV)) Q:BGPV'=+BGPV D
..S BGPC=BGPC+1,BGPR(BGPC)=BGPC_") "_$$DATE^BGP2UTL(BGPD)_" "_$P(BGPX(BGPD,BGPV),U,2) ;set denominator
..S G=$$OXSAT(BGPV) ; any o2 saturation on this visit?
..S $P(BGPR(BGPC),U,2)=BGPC_") "_$P(G,U,1) ;set numerator column
..S $P(BGPR(0),U,$P(G,U,2))=$P(BGPR(0),U,$P(G,U,2))+1
..;now delete out all visits that are <46 days difference and all other visits on the same day
..S V=BGPV F S V=$O(BGPX(BGPD,V)) Q:V'=+V K BGPX(BGPD,V)
..S D=BGPD,V=BGPV F S D=$O(BGPX(D)) Q:D'=+D D
...S V=0 F S V=$O(BGPX(D,V)) Q:V'=+V I $$FMDIFF^XLFDT(D,BGPD)<46 K BGPX(D,V)
S BGPR("DENOM")=BGPC
Q
;
OXSAT(V) ;was there ox sat at the visit
;get all O2 measurements on or after admission date
NEW BGPD,X,N,E,Y,T,D,C,BGPLT,L,J,BGPG,M,M1
S BGPG=""
S BGPD=$P($P(^AUPNVSIT(V,0),U),".")
;K BGPG S Y="BGPG(",X=P_"^ALL MEAS O2;DURING "_$$FMTE^XLFDT(BD)_"-"_$$FMTE^XLFDT(ED) S E=$$START1^APCLDF(X,Y)
S X=0 F S X=$O(^AUPNVMSR("AD",V,X)) Q:X'=+X!(BGPG]"") I $$VAL^XBDIQ1(9000010.01,X,.01)="O2" S BGPG=$$DATE^BGP2UTL(BGPD)_" O2 MEAS^1"
I BGPG]"" Q BGPG
;now check for cpts
S T=$O(^ATXAX("B","BGP CMS ABG CPTS",0))
S X=0 F S X=$O(^AUPNVCPT("AD",V,X)) Q:X'=+X!(BGPG]"") D
.Q:'$D(^AUPNVCPT(X,0))
.S C=$P(^AUPNVCPT(X,0),U)
.Q:'$$ICD^BGP5UTL2(C,T,1)
.S M=$$VAL^XBDIQ1(9000010.18,X,.08)
.S M1=$$VAL^XBDIQ1(9000010.18,X,.09)
.I $P(^ICPT(C,0),U)="3028F",(M="1P"!(M="2P")!(M="3P")!(M="4P")!(M="8P")) Q ;3028f and has modifier
.I $P(^ICPT(C,0),U)="3028F",(M1="1P"!(M="2P")!(M="3P")!(M="4P")!(M="8P")) Q ;3028f and has modifier
.S BGPG=$$DATE^BGP2UTL(BGPD)_" O2 SAT: CPT "_$P($$CPT^ICPTCOD(C),U,2)_"^1"
.Q
I BGPG]"" Q BGPG
;now check v tran
S T=$O(^ATXAX("B","BGP CMS ABG CPTS",0))
S X=0 F S X=$O(^AUPNVTC("AD",V,X)) Q:X'=+X!(BGPG]"") D
.Q:'$D(^AUPNVTC(X,0))
.S C=$P(^AUPNVTC(X,0),U,7)
.Q:C=""
.Q:'$$ICD^BGP5UTL2(C,T,1)
.S BGPG=$$DATE^BGP2UTL(BGPD)_" O2 SAT: CPT "_$P($$CPT^ICPTCOD(C),U,2)_"^1"
.Q
I BGPG]"" Q BGPG
;now check for lab tests
S T=$O(^ATXAX("B","BGP CMS ABG LOINC",0))
S BGPLT=$O(^ATXLAB("B","BGP CMS ABG TESTS",0))
S X=0 F S X=$O(^AUPNVLAB("AD",V,X)) Q:X'=+X!(BGPG]"") D
.Q:'$D(^AUPNVLAB(X,0))
.I BGPLT,$P(^AUPNVLAB(X,0),U),$D(^ATXLAB(BGPLT,21,"B",$P(^AUPNVLAB(X,0),U))) S BGPG=$$DATE^BGP2UTL(BGPD)_" O2 SAT: LAB "_$$VAL^XBDIQ1(9000010.09,X,.01)_"^1" Q
.Q:'T
.S J=$P($G(^AUPNVLAB(X,11)),U,13) Q:J=""
.Q:'$$LOINC^BGP2D21(J,T)
.S BGPG=$$DATE^BGP2UTL(BGPD)_" O2 SAT: LAB "_$$VAL^XBDIQ1(9000010.09,X,.01)_"^1" Q
I BGPG]"" Q BGPG
Q $$DATE^BGP2UTL(BGPD)_" None^3"
;
BGP5D91 ; IHS/CMI/LAB - calc measures 29 Apr 2010 7:38 PM 14 Nov 2006 5:02 PM 12 Nov 2009 11:03 AM 07 Apr 2010 7:00 AM ;
+1 ;;15.1;IHS CLINICAL REPORTING;;MAY 06, 2015;Build 143
+2 ;
EOST ;
+1 NEW BGPOXV,BGPD,BGPN
+2 KILL BGPOXV
+3 ;no active user pop
IF 'BGPACTUP
SET BGPSTOP=1
QUIT
+4 ;don't process this measure, pt under 18
IF BGPAGEB<18
SET BGPSTOP=1
QUIT
+5 SET BGPD1=0
+6 SET BGPN1=0
SET BGPVALUE=""
+7 DO TIAFIB(DFN,BGPBDATE,BGPEDATE,.BGPOXV)
+8 ;now evaluate result
+9 SET BGPD1=BGPOXV("DENOM")
+10 IF 'BGPD1
SET BGPSTOP=1
QUIT
+11 SET BGPN1=$PIECE(BGPOXV(0),U,1)
+12 SET BGPN2=$PIECE(BGPOXV(0),U,2)
+13 SET BGPN3=$PIECE(BGPOXV(0),U,3)
+14 SET BGPD=""
SET BGPN=""
+15 SET C=0
FOR
SET C=$ORDER(BGPOXV(C))
IF C'=+C
QUIT
Begin DoDot:1
+16 SET BGPN=$SELECT(BGPN="":"Visit: ",1:BGPN_"; ")
+17 SET BGPN=BGPN_$PIECE(BGPOXV(C),U,1)_" THERAPY: "_$PIECE($PIECE(BGPOXV(C),U,2)," ",2,99)
+18 QUIT
End DoDot:1
+19 ;
+20 SET BGPVALUE="UP"_"|||"_BGPN
+21 QUIT
+22 ;
TIAFIB(P,BDATE,EDATE,BGPR) ;EP
+1 NEW A,X,V,BGPG,G,C,T,B,E,BGPX,BGPV,BGPD
+2 KILL BGPR,BGPG,BGPX
+3 SET BGPR=""
SET BGPR(0)=""
+4 SET X=P_"^ALL VISITS;DURING "_$$FMTE^XLFDT(BDATE)_"-"_$$FMTE^XLFDT(EDATE)
SET E=$$START1^APCLDF(X,"BGPG(")
+5 IF '$DATA(BGPG(1))
SET BGPR("DENOM")=0
QUIT
+6 ;now go through and get rid of H and CHS
+7 SET T=$ORDER(^ATXAX("B","BGP TIA DXS",0))
+8 SET A=0
FOR
SET A=$ORDER(BGPG(A))
IF A'=+A
QUIT
Begin DoDot:1
+9 SET V=$PIECE(BGPG(A),U,5)
+10 IF '$DATA(^AUPNVSIT(V,0))
KILL BGPG(A)
QUIT
+11 IF $PIECE(^AUPNVSIT(V,0),U,3)="C"
KILL BGPG(A)
QUIT
+12 IF $PIECE(^AUPNVSIT(V,0),U,7)'="H"
KILL BGPG(A)
QUIT
+13 SET X=0
SET G=0
SET E=0
SET B=0
FOR
SET X=$ORDER(^AUPNVPOV("AD",V,X))
IF X'=+X
QUIT
Begin DoDot:2
+14 SET C=$PIECE($GET(^AUPNVPOV(X,0)),U)
+15 IF C=""
QUIT
+16 IF $$ICD^BGP5UTL2(C,T,9)
SET G=1
SET $PIECE(BGPG(A),U,15)=$$VAL^XBDIQ1(9000010.07,X,.01)
+17 IF $$ICD^BGP5UTL2(C,$ORDER(^ATXAX("B","BGP ATRIAL FIBRILLATION DXS",0)),9)
SET E=1
End DoDot:2
+18 ;have both
IF G
IF E
SET B=1
+19 ;no tia diagnosis
IF 'B
KILL BGPG(A)
End DoDot:1
+20 IF '$DATA(BGPG)
SET BGPR("DENOM")=0
QUIT
+21 ;reorder the diagnoses by visit date
+22 SET A=0
FOR
SET A=$ORDER(BGPG(A))
IF A'=+A
QUIT
SET V=$PIECE(BGPG(A),U,5)
SET D=$PIECE($PIECE($GET(^AUPNVSIT(V,0)),U),".")
SET BGPX(D,V)=BGPG(A)
+23 ;now get the first one
+24 SET BGPD=0
SET BGPC=0
FOR
SET BGPD=$ORDER(BGPX(BGPD))
IF BGPD'=+BGPD
QUIT
Begin DoDot:1
+25 SET BGPV=0
FOR
SET BGPV=$ORDER(BGPX(BGPD,BGPV))
IF BGPV'=+BGPV
QUIT
Begin DoDot:2
+26 ;set denominator
SET BGPC=BGPC+1
SET BGPR(BGPC)=BGPC_") "_$$DATE^BGP2UTL(BGPD)_" POV "_$PIECE(BGPX(BGPD,BGPV),U,15)_" + POV 427.31"
+27 ; any ANTICOAG?
SET G=$$ANTICOAG(P,$$FMADD^XLFDT(BGPD,-365),$$DSCHDATE^APCLV(BGPV),BGPD)
+28 ;set numerator column
SET $PIECE(BGPR(BGPC),U,2)=BGPC_") "_$PIECE(G,U,1)
+29 SET $PIECE(BGPR(0),U,$PIECE(G,U,2))=$PIECE(BGPR(0),U,$PIECE(G,U,2))+1
End DoDot:2
End DoDot:1
+30 SET BGPR("DENOM")=BGPC
+31 QUIT
ANTICOAG(P,BDATE,EDATE,BGPAD) ;EP - was there ANTICOAG
+1 NEW BGPD,X,N,E,Y,T,D,C,BGPLT,L,J,BGPG,S
+2 KILL BGPG
SET Y="BGPG("
SET X=P_"^ALL MED;DURING "_$$FMTE^XLFDT(BDATE)_"-"_$$FMTE^XLFDT(EDATE)
SET E=$$START1^APCLDF(X,Y)
+3 SET X=0
SET G=""
FOR
SET X=$ORDER(BGPG(X))
IF X'=+X!(G]"")
QUIT
Begin DoDot:1
+4 ;ien of v med
SET N=+$PIECE(BGPG(X),U,4)
+5 ;not one of the drugs
SET C=$$ANTIDRUG(N)
+6 IF '$PIECE(C,U)
QUIT
+7 ;c=1^category of drug
+8 ;discontinued before discharge date
IF $PIECE(^AUPNVMED(N,0),U,8)]""
IF $PIECE(^AUPNVMED(N,0),U,8)'>EDATE
QUIT
+9 SET S=$PIECE(^AUPNVMED(N,0),U,7)
+10 ;PRESCRIBED ON DISCHARGE DATE
IF $PIECE($PIECE(^AUPNVSIT($PIECE(^AUPNVMED(N,0),U,3),0),U),".")=EDATE
SET G=$$DATE^BGP5UTL(EDATE)_" MET: "_$PIECE(C,U,2)_"^1"
+11 SET V=$PIECE(^AUPNVMED(N,0),U,3)
+12 SET V=$PIECE($PIECE(^AUPNVSIT(V,0),U),".")
+13 ;not valid through discharge date
IF $$FMADD^XLFDT(V,S)<EDATE
QUIT
+14 SET G=$$DATE^BGP5UTL(V)_" MET: "_$PIECE(C,U,2)_"^1"
End DoDot:1
+15 IF G]""
QUIT G
+16 QUIT "NOT MET: NO THERAPY^3"
+17 ;
ANTIDRUG(N) ;
+1 NEW G,T,I
+2 IF '$DATA(^AUPNVMED(N,0))
QUIT 0
+3 IF $$UP^XLFSTR($PIECE($GET(^AUPNVMED(N,11)),U))["RETURNED TO STOCK"
QUIT 0
+4 SET I=$PIECE($GET(^AUPNVMED(N,0)),U)
+5 IF 'I
QUIT 0
+6 SET G=0
+7 SET T=$ORDER(^ATXAX("B","DM AUDIT ASPIRIN DRUGS",0))
+8 IF T
IF $DATA(^ATXAX(T,21,"B",I))
QUIT "1^ASA"
+9 SET T=$ORDER(^ATXAX("B","BGP CMS WARFARIN MEDS",0))
+10 IF T
IF $DATA(^ATXAX(T,21,"B",I))
QUIT "1^WARF"
+11 SET T=$ORDER(^ATXAX("B","DM AUDIT ANTI-PLATELET DRUGS",0))
+12 IF T
IF $DATA(^ATXAX(T,21,"B",I))
QUIT "1^ANTI-PLT"
+13 SET G=$PIECE(^PSDRUG(I,0),U,2)
+14 IF G="BL700"
QUIT "1^ANTI-PLT"
+15 IF $PIECE(^PSDRUG(I,0),U)["WARFARIN"
QUIT "1^WARF"
+16 IF $$VAPI^BGP5D81(I,$ORDER(^ATXAX("B","BGP CMS WARFARIN VAPI",0)))
QUIT "1^WARF"
+17 QUIT ""
+18 ;
EOOX ;
+1 NEW BGPOXV,BGPD,BGPN
+2 ;no active user pop
IF 'BGPACTUP
SET BGPSTOP=1
QUIT
+3 ;don't process this measure, pt under 18
IF BGPAGEB<18
SET BGPSTOP=1
QUIT
+4 ;Number of pneumonia visits
SET BGPD1=0
+5 SET BGPN1=0
SET BGPVALUE=""
+6 KILL BGPOXV
+7 DO PNEUOX(DFN,BGPBDATE,BGPEDATE,.BGPOXV)
+8 ;now evaluate result
+9 ;number of pneumonia visits
SET BGPD1=BGPOXV("DENOM")
+10 ;no pneumonia visits
IF 'BGPD1
SET BGPSTOP=1
QUIT
+11 SET BGPN1=$PIECE(BGPOXV(0),U,1)
+12 SET BGPN2=$PIECE(BGPOXV(0),U,2)
+13 SET BGPN3=$PIECE(BGPOXV(0),U,3)
+14 SET BGPD=""
SET BGPN=""
+15 SET C=0
FOR
SET C=$ORDER(BGPOXV(C))
IF C'=+C
QUIT
Begin DoDot:1
+16 SET BGPD=BGPD_$SELECT(BGPD]"":"; ",1:"")_$PIECE(BGPOXV(C),U)
+17 SET BGPN=BGPN_$SELECT(BGPN]"":"; ",1:"")_$PIECE(BGPOXV(C),U,2)
End DoDot:1
+18 ;
+19 SET BGPVALUE="UP,"_BGPD_"||| "_BGPN
+20 QUIT
+21 ;
PNEUOX(P,BDATE,EDATE,BGPR) ;EP
+1 NEW A,B,C,D,E,F,G,BGPG,BGPX,BGPD,BGPV,BGPC
+2 KILL BGPG,BGPR
+3 SET BGPR=""
SET BGPR(0)=""
+4 SET X=P_"^ALL DX [BGP CMS PNEUMONIA;DURING "_$$FMTE^XLFDT(BDATE)_"-"_$$FMTE^XLFDT(EDATE)
SET E=$$START1^APCLDF(X,"BGPG(")
+5 IF '$DATA(BGPG(1))
SET BGPR("DENOM")=0
QUIT
+6 ;now go through and get rid of CHS or service category not A, O, S
+7 SET A=0
FOR
SET A=$ORDER(BGPG(A))
IF A'=+A
QUIT
Begin DoDot:1
+8 SET V=$PIECE(BGPG(A),U,5)
+9 IF '$DATA(^AUPNVSIT(V,0))
KILL BGPG(A)
+10 IF $PIECE(^AUPNVSIT(V,0),U,3)="C"
KILL BGPG(A)
+11 IF "AOS"'[$PIECE(^AUPNVSIT(V,0),U,7)
KILL BGPG(A)
End DoDot:1
+12 ;got rid of them all
IF '$DATA(BGPG)
SET BGPR("DENOM")=0
QUIT
+13 ;reorder the diagnoses by visit date
+14 SET A=0
FOR
SET A=$ORDER(BGPG(A))
IF A'=+A
QUIT
SET V=$PIECE(BGPG(A),U,5)
SET D=$PIECE($PIECE($GET(^AUPNVSIT(V,0)),U),".")
SET BGPX(D,V)=BGPG(A)
+15 ;now get the first one
+16 SET BGPD=0
SET BGPC=0
FOR
SET BGPD=$ORDER(BGPX(BGPD))
IF BGPD'=+BGPD
QUIT
Begin DoDot:1
+17 SET BGPV=0
FOR
SET BGPV=$ORDER(BGPX(BGPD,BGPV))
IF BGPV'=+BGPV
QUIT
Begin DoDot:2
+18 ;set denominator
SET BGPC=BGPC+1
SET BGPR(BGPC)=BGPC_") "_$$DATE^BGP2UTL(BGPD)_" "_$PIECE(BGPX(BGPD,BGPV),U,2)
+19 ; any o2 saturation on this visit?
SET G=$$OXSAT(BGPV)
+20 ;set numerator column
SET $PIECE(BGPR(BGPC),U,2)=BGPC_") "_$PIECE(G,U,1)
+21 SET $PIECE(BGPR(0),U,$PIECE(G,U,2))=$PIECE(BGPR(0),U,$PIECE(G,U,2))+1
+22 ;now delete out all visits that are <46 days difference and all other visits on the same day
+23 SET V=BGPV
FOR
SET V=$ORDER(BGPX(BGPD,V))
IF V'=+V
QUIT
KILL BGPX(BGPD,V)
+24 SET D=BGPD
SET V=BGPV
FOR
SET D=$ORDER(BGPX(D))
IF D'=+D
QUIT
Begin DoDot:3
+25 SET V=0
FOR
SET V=$ORDER(BGPX(D,V))
IF V'=+V
QUIT
IF $$FMDIFF^XLFDT(D,BGPD)<46
KILL BGPX(D,V)
End DoDot:3
End DoDot:2
End DoDot:1
+26 SET BGPR("DENOM")=BGPC
+27 QUIT
+28 ;
OXSAT(V) ;was there ox sat at the visit
+1 ;get all O2 measurements on or after admission date
+2 NEW BGPD,X,N,E,Y,T,D,C,BGPLT,L,J,BGPG,M,M1
+3 SET BGPG=""
+4 SET BGPD=$PIECE($PIECE(^AUPNVSIT(V,0),U),".")
+5 ;K BGPG S Y="BGPG(",X=P_"^ALL MEAS O2;DURING "_$$FMTE^XLFDT(BD)_"-"_$$FMTE^XLFDT(ED) S E=$$START1^APCLDF(X,Y)
+6 SET X=0
FOR
SET X=$ORDER(^AUPNVMSR("AD",V,X))
IF X'=+X!(BGPG]"")
QUIT
IF $$VAL^XBDIQ1(9000010.01,X,.01)="O2"
SET BGPG=$$DATE^BGP2UTL(BGPD)_" O2 MEAS^1"
+7 IF BGPG]""
QUIT BGPG
+8 ;now check for cpts
+9 SET T=$ORDER(^ATXAX("B","BGP CMS ABG CPTS",0))
+10 SET X=0
FOR
SET X=$ORDER(^AUPNVCPT("AD",V,X))
IF X'=+X!(BGPG]"")
QUIT
Begin DoDot:1
+11 IF '$DATA(^AUPNVCPT(X,0))
QUIT
+12 SET C=$PIECE(^AUPNVCPT(X,0),U)
+13 IF '$$ICD^BGP5UTL2(C,T,1)
QUIT
+14 SET M=$$VAL^XBDIQ1(9000010.18,X,.08)
+15 SET M1=$$VAL^XBDIQ1(9000010.18,X,.09)
+16 ;3028f and has modifier
IF $PIECE(^ICPT(C,0),U)="3028F"
IF (M="1P"!(M="2P")!(M="3P")!(M="4P")!(M="8P"))
QUIT
+17 ;3028f and has modifier
IF $PIECE(^ICPT(C,0),U)="3028F"
IF (M1="1P"!(M="2P")!(M="3P")!(M="4P")!(M="8P"))
QUIT
+18 SET BGPG=$$DATE^BGP2UTL(BGPD)_" O2 SAT: CPT "_$PIECE($$CPT^ICPTCOD(C),U,2)_"^1"
+19 QUIT
End DoDot:1
+20 IF BGPG]""
QUIT BGPG
+21 ;now check v tran
+22 SET T=$ORDER(^ATXAX("B","BGP CMS ABG CPTS",0))
+23 SET X=0
FOR
SET X=$ORDER(^AUPNVTC("AD",V,X))
IF X'=+X!(BGPG]"")
QUIT
Begin DoDot:1
+24 IF '$DATA(^AUPNVTC(X,0))
QUIT
+25 SET C=$PIECE(^AUPNVTC(X,0),U,7)
+26 IF C=""
QUIT
+27 IF '$$ICD^BGP5UTL2(C,T,1)
QUIT
+28 SET BGPG=$$DATE^BGP2UTL(BGPD)_" O2 SAT: CPT "_$PIECE($$CPT^ICPTCOD(C),U,2)_"^1"
+29 QUIT
End DoDot:1
+30 IF BGPG]""
QUIT BGPG
+31 ;now check for lab tests
+32 SET T=$ORDER(^ATXAX("B","BGP CMS ABG LOINC",0))
+33 SET BGPLT=$ORDER(^ATXLAB("B","BGP CMS ABG TESTS",0))
+34 SET X=0
FOR
SET X=$ORDER(^AUPNVLAB("AD",V,X))
IF X'=+X!(BGPG]"")
QUIT
Begin DoDot:1
+35 IF '$DATA(^AUPNVLAB(X,0))
QUIT
+36 IF BGPLT
IF $PIECE(^AUPNVLAB(X,0),U)
IF $DATA(^ATXLAB(BGPLT,21,"B",$PIECE(^AUPNVLAB(X,0),U)))
SET BGPG=$$DATE^BGP2UTL(BGPD)_" O2 SAT: LAB "_$$VAL^XBDIQ1(9000010.09,X,.01)_"^1"
QUIT
+37 IF 'T
QUIT
+38 SET J=$PIECE($GET(^AUPNVLAB(X,11)),U,13)
IF J=""
QUIT
+39 IF '$$LOINC^BGP2D21(J,T)
QUIT
+40 SET BGPG=$$DATE^BGP2UTL(BGPD)_" O2 SAT: LAB "_$$VAL^XBDIQ1(9000010.09,X,.01)_"^1"
QUIT
End DoDot:1
+41 IF BGPG]""
QUIT BGPG
+42 QUIT $$DATE^BGP2UTL(BGPD)_" None^3"
+43 ;