BDMDE1T ; IHS/CMI/LAB - 2017 DIABETES AUDIT ;
;;2.0;DIABETES MANAGEMENT SYSTEM;**10**;JUN 14, 2007;Build 12
;
;
TOBACCO(P,BDATE,EDATE) ;EP
I '$G(P) Q ""
NEW BDMTOB,BDMSDX,BDMXPND,BDM1320,BDMSCPT,BDMALL,D,%,F,BDMTOBS,BDMSBD,BDMTOBC,G
S BDMSBD=BDATE
D TOBACCOS ;get last hf in BDMTOBS, BDMTOBC
;now get date of latest health factor and check for any of these next things after the HF
S BDMSBD=$P(BDMTOBS,U,3)
S BDMSDX=$$DX(P,$S(BDMSBD:BDMSBD,1:BDATE),EDATE) ;get last dx in format code^date and compare to bdmdob
I BDMSDX]"",$P(BDMSDX,U,3)>BDMSBD S BDMTOBS=BDMSDX
S BDMSBD=$P(BDMTOBS,U,3)
S BDM1320=$$DENT(P,$S(BDMSBD:BDMSBD,1:BDATE),EDATE)
I BDM1320]"",$P(BDM1320,U,3)>BDMSBD S BDMTOBS=BDM1320
S BDMSBD=$P(BDMTOBS,U,3)
S BDMSCPT=$$CPTSM(P,$S(BDMSBD:BDMSBD,1:BDATE),EDATE)
I BDMSCPT]"",$P(BDMSCPT,U,3)>BDMSBD S BDMTOBS=BDMSCPT
Q BDMTOBS
;
DX(P,BDATE,EDATE) ;EP
NEW BDMG,T,X,G,Y,F,I,Z
S BDMG=$$LASTDXT^BDMAPIU(P,BDATE,EDATE,"BGP TOBACCO DXS","E")
I BDMG]"" D Q G
.S G=""
.S I=$P(BDMG,U,6)
.S F=$P(BDMG,U,5)
.S Z=$$VALI^XBDIQ1(F,I,.01)
.; check for non smoker dxs here as well
.I '$$ICD^BDMUTL(Z,"BGP TOBACCO USER DXS",9) S G="2^2 Not a Current User "_$P(BDMG,U,2)_" "_$P(BDMG,U,3)_" "_$$DATE^BDMS9B1($P(BDMG,U,1))_U_$P(BDMG,U,1) Q
.S G="1^1 Current User "_$P(BDMG,U,2)_" "_$P(BDMG,U,3)_" "_$$DATE^BDMS9B1($P(BDMG,U,1))_U_$P(BDMG,U,1) Q
S T=$O(^ATXAX("B","BGP TOBACCO DXS",0))
S X=0,G="" F S X=$O(^AUPNPROB("AC",P,X)) Q:X'=+X!(G]"") D
.Q:$P(^AUPNPROB(X,0),U,12)'="A"
.Q:$P(^AUPNPROB(X,0),U,3)>EDATE
.Q:$P(^AUPNPROB(X,0),U,3)<BDATE
.S Y=$P(^AUPNPROB(X,0),U)
.Q:'$$ICD^BDMUTL(Y,$P(^ATXAX(T,0),U),9) ;cmi/maw 05/15/2014 p8
.S Z=$P(^ICD9(Y,0),U,1)
.;see what the non smoker dxs are here in the BGP SMOKING DXS taxonomy and if many create a new taxonomy to point to
.I '$$ICD^BDMUTL(Z,"BGP TOBACCO USER DXS",9) S G="2^2 Not a Current User "_$P($$ICDDX^BDMUTL(Y),U,2)_" PROBLEM LIST "_" "_$$DATE^BDMS9B1($P(^AUPNPROB(X,0),U,3))_U_$P(^AUPNPROB(X,0),U,3)
.S G="1^1 Current User "_$P($$ICDDX^BDMUTL(Y),U,2)_" PROBLEM LIST "_" "_$$DATE^BDMS9B1($P(^AUPNPROB(X,0),U,3))_U_$P(^AUPNPROB(X,0),U,3)
.Q
Q G
TOBACCOS ;EP
K BDM
S BDMTOBS="",BDMTOBC=""
S BDMTOBS=$$LASTHF(P,"TOBACCO (SMOKING)",BDATE,EDATE) K O,D,H
S BDMTOBC=$$LASTHF(P,"TOBACCO (SMOKELESS - CHEWING/DIP)",BDATE,EDATE) K O,D,H
I '$O(^AUTTHF("B","TOBACCO (SMOKING)",0)) S BDMTOBS=$$LASTHF(P,"TOBACCO",BDATE,EDATE) K O,D,H
;if have both then take the one that indicates tobacco use
I $P(BDMTOBS,U)=1 Q
I $P(BDMTOBC,U)=1 S BDMTOBS=BDMTOBC Q
I BDMTOBS=2 Q
I BDMTOBC=2 S BDMTOBS=BDMTOBC Q
Q
;
LASTHF(P,C,BDATE,EDATE) ;EP - get last factor in category C for patient P
S C=$O(^AUTTHF("B",C,0)) ;ien of category passed
I '$G(C) Q ""
NEW H,D,O,F,Z
S (H,D)=0 K O
F S H=$O(^AUTTHF("AC",C,H)) Q:'+H D
.Q:'$D(^AUPNVHF("AA",P,H))
.S D="" F S D=$O(^AUPNVHF("AA",P,H,D)) Q:D'=+D D
..Q:(9999999-D)>EDATE ;after time frame
..Q:(9999999-D)<BDATE ;before time frame
..S Z=$O(^AUPNVHF("AA",P,H,D,0))
..S F=$$VAL^XBDIQ1(9000010.23,Z,.01)
..I F="SMOKER IN HOME"!(F="SMOKE FREE HOME")!(F["CEREMONIAL")!(F["EXPOSURE TO") Q
..S O(D)=$O(^AUPNVHF("AA",P,H,D,""))
.Q
S D=$O(O(0))
I D]"" D Q Z
.S Z=$$TUHF($$VAL^XBDIQ1(9000010.23,O(D),.01))
.S Z=Z_U_$S(Z=1:"1 Current User ",1:"2 Not a Current User ")_$$VAL^XBDIQ1(9000010.23,O(D),.01)_" "_$$DATE^BDMS9B1(9999999-D)_"^"_(9999999-D)
S (H,D)=0 K O
F S H=$O(^AUTTHF("AC",C,H)) Q:'+H D
.Q:'$D(^AUPNVHF("AA",P,H))
.S D="" F S D=$O(^AUPNVHF("AA",P,H,D)) Q:D'=+D D
..Q:(9999999-D)>EDATE ;after time frame
..Q:(9999999-D)<BDATE ;before time frame
..S Z=$O(^AUPNVHF("AA",P,H,D,0))
..S F=$$VAL^XBDIQ1(9000010.23,Z,.01)
..I F="SMOKER IN HOME"!(F="SMOKE FREE HOME")!(F["CEREMONIAL")!(F["EXPOSURE TO") S O(D)=$O(^AUPNVHF("AA",P,H,D,""))
.Q
S D=$O(O(0))
I D Q 2_"^2 Not a Current User "_$$VAL^XBDIQ1(9000010.23,O(D),.01)_" "_$$DATE^BDMS9B1(9999999-D)_"^"_(9999999-D)
Q "3^3 Not Documented"
;
TUHF(V) ;
I V="" Q 3
I V["CURRENT" Q 1
I V["CESSATION" Q 1
I V["HEAVY TOBACCO" Q 1
I V["LIGHT TOBACCO" Q 1
I V="SMOKELESS TOBACCO, STATUS UNKNOWN" Q 3
I V["STATUS UNKNOWN" Q 3
Q 2
;
DENT(P,BDATE,EDATE) ;EP
K ^TMP($J,"A")
NEW A,B,E,X,G,Z
S A="^TMP($J,""A"",",B=P_"^ALL VISITS;DURING "_$$DATE^BDMS9B1(BDATE)_"-"_$$DATE^BDMS9B1(EDATE),E=$$START1^APCLDF(B,A)
I '$D(^TMP($J,"A",1)) Q ""
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
.Q:'$D(^AUPNVSIT(V,0))
.Q:'$P(^AUPNVSIT(V,0),U,9)
.Q:$P(^AUPNVSIT(V,0),U,11)
.S Z=0 F S Z=$O(^AUPNVDEN("AD",V,Z)) Q:Z'=+Z!(G) S B=$P($G(^AUPNVDEN(Z,0)),U) I B S B=$P($G(^AUTTADA(B,0)),U) I B=1320 S G=1_U_$P($P(^AUPNVSIT(V,0),U),".")
.Q
K ^TMP($J,"A")
I G=0 Q ""
Q "1^1 Current User ADA 1320 "_$$DATE^BDMS9B1($P(G,U,2))_U_$P(G,U,2)
;
CPTSM(P,BDATE,EDATE) ;EP - did pat have smoking cpt?
NEW X,G,Z
S G=""
S X=$$LASTCPTT^BDMAPIU(P,BDATE,EDATE,"BGP TOBACCO SCREEN CPTS","E")
I X="" Q ""
S Z=$$VALI^XBDIQ1(9000010.18,$P(X,U,6),.01)
I '$$ICD^BDMUTL(Z,"BGP TOBACCO USER CPTS",1) Q "2^2 Not a Current User "_$P(X,U,2)_" "_$$DATE^BDMS9B1($P(X,U,1))_U_$P(X,U,1)
Q "1^1 Current User "_$P(X,U,2)_" "_$$DATE^BDMS9B1($P(X,U,1))_U_$P(X,U,1)
ENDS(P,BD,ED) ;EP
I $G(P)="" Q ""
NEW X
S X=$$LASTHF^BDMSMU(P,"ELECTRONIC NICOTINE DELIV SYSTEM (ENDS)","B",BD,ED)
I X="" Q "2^3"
I $P(X,U,1)["CURRENT"!($P(X,U,1)["CESSATION") Q "1^1^"_X
I $P(X,U,1)["PREVIOUS"!($P(X,U,1)["NEVER") Q "1^2^"_X
Q ""
BDMDE1T ; IHS/CMI/LAB - 2017 DIABETES AUDIT ;
+1 ;;2.0;DIABETES MANAGEMENT SYSTEM;**10**;JUN 14, 2007;Build 12
+2 ;
+3 ;
TOBACCO(P,BDATE,EDATE) ;EP
+1 IF '$GET(P)
QUIT ""
+2 NEW BDMTOB,BDMSDX,BDMXPND,BDM1320,BDMSCPT,BDMALL,D,%,F,BDMTOBS,BDMSBD,BDMTOBC,G
+3 SET BDMSBD=BDATE
+4 ;get last hf in BDMTOBS, BDMTOBC
DO TOBACCOS
+5 ;now get date of latest health factor and check for any of these next things after the HF
+6 SET BDMSBD=$PIECE(BDMTOBS,U,3)
+7 ;get last dx in format code^date and compare to bdmdob
SET BDMSDX=$$DX(P,$SELECT(BDMSBD:BDMSBD,1:BDATE),EDATE)
+8 IF BDMSDX]""
IF $PIECE(BDMSDX,U,3)>BDMSBD
SET BDMTOBS=BDMSDX
+9 SET BDMSBD=$PIECE(BDMTOBS,U,3)
+10 SET BDM1320=$$DENT(P,$SELECT(BDMSBD:BDMSBD,1:BDATE),EDATE)
+11 IF BDM1320]""
IF $PIECE(BDM1320,U,3)>BDMSBD
SET BDMTOBS=BDM1320
+12 SET BDMSBD=$PIECE(BDMTOBS,U,3)
+13 SET BDMSCPT=$$CPTSM(P,$SELECT(BDMSBD:BDMSBD,1:BDATE),EDATE)
+14 IF BDMSCPT]""
IF $PIECE(BDMSCPT,U,3)>BDMSBD
SET BDMTOBS=BDMSCPT
+15 QUIT BDMTOBS
+16 ;
DX(P,BDATE,EDATE) ;EP
+1 NEW BDMG,T,X,G,Y,F,I,Z
+2 SET BDMG=$$LASTDXT^BDMAPIU(P,BDATE,EDATE,"BGP TOBACCO DXS","E")
+3 IF BDMG]""
Begin DoDot:1
+4 SET G=""
+5 SET I=$PIECE(BDMG,U,6)
+6 SET F=$PIECE(BDMG,U,5)
+7 SET Z=$$VALI^XBDIQ1(F,I,.01)
+8 ; check for non smoker dxs here as well
+9 IF '$$ICD^BDMUTL(Z,"BGP TOBACCO USER DXS",9)
SET G="2^2 Not a Current User "_$PIECE(BDMG,U,2)_" "_$PIECE(BDMG,U,3)_" "_$$DATE^BDMS9B1($PIECE(BDMG,U,1))_U_$PIECE(BDMG,U,1)
QUIT
+10 SET G="1^1 Current User "_$PIECE(BDMG,U,2)_" "_$PIECE(BDMG,U,3)_" "_$$DATE^BDMS9B1($PIECE(BDMG,U,1))_U_$PIECE(BDMG,U,1)
QUIT
End DoDot:1
QUIT G
+11 SET T=$ORDER(^ATXAX("B","BGP TOBACCO DXS",0))
+12 SET X=0
SET G=""
FOR
SET X=$ORDER(^AUPNPROB("AC",P,X))
IF X'=+X!(G]"")
QUIT
Begin DoDot:1
+13 IF $PIECE(^AUPNPROB(X,0),U,12)'="A"
QUIT
+14 IF $PIECE(^AUPNPROB(X,0),U,3)>EDATE
QUIT
+15 IF $PIECE(^AUPNPROB(X,0),U,3)<BDATE
QUIT
+16 SET Y=$PIECE(^AUPNPROB(X,0),U)
+17 ;cmi/maw 05/15/2014 p8
IF '$$ICD^BDMUTL(Y,$PIECE(^ATXAX(T,0),U),9)
QUIT
+18 SET Z=$PIECE(^ICD9(Y,0),U,1)
+19 ;see what the non smoker dxs are here in the BGP SMOKING DXS taxonomy and if many create a new taxonomy to point to
+20 IF '$$ICD^BDMUTL(Z,"BGP TOBACCO USER DXS",9)
SET G="2^2 Not a Current User "_$PIECE($$ICDDX^BDMUTL(Y),U,2)_" PROBLEM LIST "_" "_$$DATE^BDMS9B1($PIECE(^AUPNPROB(X,0),U,3))_U_$PIECE(^AUPNPROB(X,0),U,3)
+21 SET G="1^1 Current User "_$PIECE($$ICDDX^BDMUTL(Y),U,2)_" PROBLEM LIST "_" "_$$DATE^BDMS9B1($PIECE(^AUPNPROB(X,0),U,3))_U_$PIECE(^AUPNPROB(X,0),U,3)
+22 QUIT
End DoDot:1
+23 QUIT G
TOBACCOS ;EP
+1 KILL BDM
+2 SET BDMTOBS=""
SET BDMTOBC=""
+3 SET BDMTOBS=$$LASTHF(P,"TOBACCO (SMOKING)",BDATE,EDATE)
KILL O,D,H
+4 SET BDMTOBC=$$LASTHF(P,"TOBACCO (SMOKELESS - CHEWING/DIP)",BDATE,EDATE)
KILL O,D,H
+5 IF '$ORDER(^AUTTHF("B","TOBACCO (SMOKING)",0))
SET BDMTOBS=$$LASTHF(P,"TOBACCO",BDATE,EDATE)
KILL O,D,H
+6 ;if have both then take the one that indicates tobacco use
+7 IF $PIECE(BDMTOBS,U)=1
QUIT
+8 IF $PIECE(BDMTOBC,U)=1
SET BDMTOBS=BDMTOBC
QUIT
+9 IF BDMTOBS=2
QUIT
+10 IF BDMTOBC=2
SET BDMTOBS=BDMTOBC
QUIT
+11 QUIT
+12 ;
LASTHF(P,C,BDATE,EDATE) ;EP - get last factor in category C for patient P
+1 ;ien of category passed
SET C=$ORDER(^AUTTHF("B",C,0))
+2 IF '$GET(C)
QUIT ""
+3 NEW H,D,O,F,Z
+4 SET (H,D)=0
KILL O
+5 FOR
SET H=$ORDER(^AUTTHF("AC",C,H))
IF '+H
QUIT
Begin DoDot:1
+6 IF '$DATA(^AUPNVHF("AA",P,H))
QUIT
+7 SET D=""
FOR
SET D=$ORDER(^AUPNVHF("AA",P,H,D))
IF D'=+D
QUIT
Begin DoDot:2
+8 ;after time frame
IF (9999999-D)>EDATE
QUIT
+9 ;before time frame
IF (9999999-D)<BDATE
QUIT
+10 SET Z=$ORDER(^AUPNVHF("AA",P,H,D,0))
+11 SET F=$$VAL^XBDIQ1(9000010.23,Z,.01)
+12 IF F="SMOKER IN HOME"!(F="SMOKE FREE HOME")!(F["CEREMONIAL")!(F["EXPOSURE TO")
QUIT
+13 SET O(D)=$ORDER(^AUPNVHF("AA",P,H,D,""))
End DoDot:2
+14 QUIT
End DoDot:1
+15 SET D=$ORDER(O(0))
+16 IF D]""
Begin DoDot:1
+17 SET Z=$$TUHF($$VAL^XBDIQ1(9000010.23,O(D),.01))
+18 SET Z=Z_U_$SELECT(Z=1:"1 Current User ",1:"2 Not a Current User ")_$$VAL^XBDIQ1(9000010.23,O(D),.01)_" "_$$DATE^BDMS9B1(9999999-D)_"^"_(9999999-D)
End DoDot:1
QUIT Z
+19 SET (H,D)=0
KILL O
+20 FOR
SET H=$ORDER(^AUTTHF("AC",C,H))
IF '+H
QUIT
Begin DoDot:1
+21 IF '$DATA(^AUPNVHF("AA",P,H))
QUIT
+22 SET D=""
FOR
SET D=$ORDER(^AUPNVHF("AA",P,H,D))
IF D'=+D
QUIT
Begin DoDot:2
+23 ;after time frame
IF (9999999-D)>EDATE
QUIT
+24 ;before time frame
IF (9999999-D)<BDATE
QUIT
+25 SET Z=$ORDER(^AUPNVHF("AA",P,H,D,0))
+26 SET F=$$VAL^XBDIQ1(9000010.23,Z,.01)
+27 IF F="SMOKER IN HOME"!(F="SMOKE FREE HOME")!(F["CEREMONIAL")!(F["EXPOSURE TO")
SET O(D)=$ORDER(^AUPNVHF("AA",P,H,D,""))
End DoDot:2
+28 QUIT
End DoDot:1
+29 SET D=$ORDER(O(0))
+30 IF D
QUIT 2_"^2 Not a Current User "_$$VAL^XBDIQ1(9000010.23,O(D),.01)_" "_$$DATE^BDMS9B1(9999999-D)_"^"_(9999999-D)
+31 QUIT "3^3 Not Documented"
+32 ;
TUHF(V) ;
+1 IF V=""
QUIT 3
+2 IF V["CURRENT"
QUIT 1
+3 IF V["CESSATION"
QUIT 1
+4 IF V["HEAVY TOBACCO"
QUIT 1
+5 IF V["LIGHT TOBACCO"
QUIT 1
+6 IF V="SMOKELESS TOBACCO, STATUS UNKNOWN"
QUIT 3
+7 IF V["STATUS UNKNOWN"
QUIT 3
+8 QUIT 2
+9 ;
DENT(P,BDATE,EDATE) ;EP
+1 KILL ^TMP($JOB,"A")
+2 NEW A,B,E,X,G,Z
+3 SET A="^TMP($J,""A"","
SET B=P_"^ALL VISITS;DURING "_$$DATE^BDMS9B1(BDATE)_"-"_$$DATE^BDMS9B1(EDATE)
SET E=$$START1^APCLDF(B,A)
+4 IF '$DATA(^TMP($JOB,"A",1))
QUIT ""
+5 SET (X,G)=0
FOR
SET X=$ORDER(^TMP($JOB,"A",X))
IF X'=+X!(G)
QUIT
SET V=$PIECE(^TMP($JOB,"A",X),U,5)
Begin DoDot:1
+6 IF '$DATA(^AUPNVSIT(V,0))
QUIT
+7 IF '$PIECE(^AUPNVSIT(V,0),U,9)
QUIT
+8 IF $PIECE(^AUPNVSIT(V,0),U,11)
QUIT
+9 SET Z=0
FOR
SET Z=$ORDER(^AUPNVDEN("AD",V,Z))
IF Z'=+Z!(G)
QUIT
SET B=$PIECE($GET(^AUPNVDEN(Z,0)),U)
IF B
SET B=$PIECE($GET(^AUTTADA(B,0)),U)
IF B=1320
SET G=1_U_$PIECE($PIECE(^AUPNVSIT(V,0),U),".")
+10 QUIT
End DoDot:1
+11 KILL ^TMP($JOB,"A")
+12 IF G=0
QUIT ""
+13 QUIT "1^1 Current User ADA 1320 "_$$DATE^BDMS9B1($PIECE(G,U,2))_U_$PIECE(G,U,2)
+14 ;
CPTSM(P,BDATE,EDATE) ;EP - did pat have smoking cpt?
+1 NEW X,G,Z
+2 SET G=""
+3 SET X=$$LASTCPTT^BDMAPIU(P,BDATE,EDATE,"BGP TOBACCO SCREEN CPTS","E")
+4 IF X=""
QUIT ""
+5 SET Z=$$VALI^XBDIQ1(9000010.18,$PIECE(X,U,6),.01)
+6 IF '$$ICD^BDMUTL(Z,"BGP TOBACCO USER CPTS",1)
QUIT "2^2 Not a Current User "_$PIECE(X,U,2)_" "_$$DATE^BDMS9B1($PIECE(X,U,1))_U_$PIECE(X,U,1)
+7 QUIT "1^1 Current User "_$PIECE(X,U,2)_" "_$$DATE^BDMS9B1($PIECE(X,U,1))_U_$PIECE(X,U,1)
ENDS(P,BD,ED) ;EP
+1 IF $GET(P)=""
QUIT ""
+2 NEW X
+3 SET X=$$LASTHF^BDMSMU(P,"ELECTRONIC NICOTINE DELIV SYSTEM (ENDS)","B",BD,ED)
+4 IF X=""
QUIT "2^3"
+5 IF $PIECE(X,U,1)["CURRENT"!($PIECE(X,U,1)["CESSATION")
QUIT "1^1^"_X
+6 IF $PIECE(X,U,1)["PREVIOUS"!($PIECE(X,U,1)["NEVER")
QUIT "1^2^"_X
+7 QUIT ""