- BGP8D24A ;IHS/CMI/LAB - sti measure;
- ;;18.1;IHS CLINICAL REPORTING;;MAY 25, 2018;Build 66
- ;
- KEYSTI(P,BDATE,EDATE) ;EP - return key sti's
- NEW X,Y,Z,A,B,C,D,R,N,BD,ED,BGPD,BGPRES,BGPCNTI,BGPCNTN,BGPCNTH,BGPCNTR,BGPRESD,BGPRESN,BGPY
- S BD=$$FMADD^XLFDT(BDATE,-60)
- S ED=$$FMADD^XLFDT(BDATE,300)
- ;S ED=EDATE ;LORI
- S (BGPRESD,BGPRESN,BGPCNTI,BGPCNTN,BGPCNTH,BGPCNTR,BGPHIV)="" ;RETURN VALUE
- HIV ;get first HIV dx, if in time window count as an incident, if not don't
- S BGPHIV=$$HIVDX(P,$$DOB^AUPNPAT(P),ED)
- I BGPHIV,$P(BGPHIV,U,1)'<BD S BGPCNTI=BGPCNTI+1,BGPCNTI($P(BGPHIV,U,1),BGPCNTI)=BGPHIV,$P(BGPCNTI($P(BGPHIV,U),BGPCNTI),U,9)="HIV" ;,BGPRES=BGPRES_$S(BGPRES="":"",1:", ")_$$DATE^BGP8UTL($P($P(^AUPNVSIT($P(BGPG(1),U,5),0),U),"."))_" (HIV)"
- CHL ;chlamydia
- NEW BGPG
- S BGPD=BD
- S C=0,R=""
- F D Q:'$D(BGPG(1))
- .K BGPG
- .S X=P_"^FIRST DX [BKM CHLAMYDIA DXS;DURING "_$$FMTE^XLFDT(BGPD)_"-"_$$FMTE^XLFDT(ED) S E=$$START1^APCLDF(X,"BGPG(")
- .Q:'$D(BGPG(1))
- .S BGPD=$$FMADD^XLFDT($P(BGPG(1),U,1),61)
- .;S BGPRES=BGPRES_$S(BGPRES="":"",1:", ")_$$DATE^BGP8UTL($P($P(^AUPNVSIT($P(BGPG(1),U,5),0),U),"."))_" (CHL)"
- .S BGPCNTI=BGPCNTI+1
- .S BGPCNTI($P(BGPG(1),U,1),BGPCNTI)=BGPG(1),$P(BGPCNTI($P(BGPG(1),U),BGPCNTI),U,9)="CHL"
- .D NEED
- GON ;
- K BGPG
- S BGPD=BD
- F D Q:'$D(BGPG(1))
- .K BGPG
- .S X=P_"^FIRST DX [BKM GONORRHEA DXS;DURING "_$$FMTE^XLFDT(BGPD)_"-"_$$FMTE^XLFDT(ED) S E=$$START1^APCLDF(X,"BGPG(")
- .Q:'$D(BGPG(1))
- .S BGPD=$$FMADD^XLFDT($P(BGPG(1),U,1),61)
- .;S BGPRES=BGPRES_$S(BGPRES="":"",1:", ")_$$DATE^BGP8UTL($P($P(^AUPNVSIT($P(BGPG(1),U,5),0),U),"."))_" (GON)"
- .S BGPCNTI=BGPCNTI+1
- .S BGPCNTI($P(BGPG(1),U,1),BGPCNTI)=BGPG(1),$P(BGPCNTI($P(BGPG(1),U),BGPCNTI),U,9)="GON"
- .D NEED
- SYH ;
- K BGPG
- S BGPD=BD
- F D Q:'$D(BGPG(1))
- .K BGPG
- .S X=P_"^FIRST DX [BKM SYPHILIS DXS;DURING "_$$FMTE^XLFDT(BGPD)_"-"_$$FMTE^XLFDT(ED) S E=$$START1^APCLDF(X,"BGPG(")
- .Q:'$D(BGPG(1))
- .S BGPD=$$FMADD^XLFDT($P(BGPG(1),U,1),61)
- .;S BGPRES=BGPRES_$S(BGPRES="":"",1:", ")_$$DATE^BGP8UTL($P($P(^AUPNVSIT($P(BGPG(1),U,5),0),U),"."))_" (SYH)"
- .S BGPCNTI=BGPCNTI+1
- .S BGPCNTI($P(BGPG(1),U,1),BGPCNTI)=BGPG(1),$P(BGPCNTI($P(BGPG(1),U),BGPCNTI),U,9)="SYH"
- .D NEED
- ;NOW COUNT ALL SCREENINGS DONE FOR ALL INCIDENCES
- S BGPD=0 F S BGPD=$O(BGPCNTI(BGPD)) Q:BGPD'=+BGPD D
- .S BGPY=0 F S BGPY=$O(BGPCNTI(BGPD,BGPY)) Q:BGPY'=+BGPY D
- ..Q:'$P(BGPCNTI(BGPD,BGPY),U,10) ;DOESN'T NEED A SCREEN
- ..S X=$$HIVTEST^BGP8D8(P,$$FMADD^XLFDT(BGPD,-30),$$FMADD^XLFDT(BGPD,60))
- ..I X S BGPCNTH=BGPCNTH+1,$P(BGPCNTI(BGPD,BGPY),U,11)=$P(X,U,2) Q
- ..S X=$$REFHIV(P,BDATE,EDATE)
- ..I X S BGPCNTR=BGPCNTR+1,$P(BGPCNTI(BGPD,BGPY),U,20)=$P(X,U,2)
- S D=0
- I 'BGPCNTI Q ""
- F S D=$O(BGPCNTI(D)) Q:D'=+D D
- .S Y=0 F S Y=$O(BGPCNTI(D,Y)) Q:Y'=+Y D
- ..S R=Y_") "_$$DATE^BGP8UTL($P(BGPCNTI(D,Y),U,1))_" "_$P(BGPCNTI(D,Y),U,9)_" "_$P(BGPCNTI(D,Y),U,2)
- ..S BGPRESD=BGPRESD_$S(BGPRESD]"":" ",1:"")_R
- ..I '$P(BGPCNTI(D,Y),U,10),$P(BGPCNTI(D,Y),U,9)'="HIV" S N=Y_") HIV-Contraind "_$$DATE^BGP8UTL($P(BGPHIV,U,1))_" Prior DX "_$P(BGPHIV,U,2) G R
- ..I '$P(BGPCNTI(D,Y),U,10),$P(BGPCNTI(D,Y),U,9)="HIV" S N=Y_") HIV-N/A" G R
- ..I $P(BGPCNTI(D,Y),U,10) S N=$P(BGPCNTI(D,Y),U,11) D
- ...I N]"" S N=Y_") HIV-Y "_N Q
- ...S N=$P(BGPCNTI(D,Y),U,20) I N]"" S N=Y_") HIV-"_N Q
- ...S N=Y_") HIV-N"
- R ..S BGPRESN=BGPRESN_$S(BGPRESN]"":" ",1:"")_N
- ;ZW BGPCNTI
- Q BGPCNTI_U_BGPCNTN_U_BGPCNTH_U_BGPCNTR_U_BGPRESD_U_BGPRESN
- NEED ;
- I BGPHIV,$P(BGPHIV,U,1)'>$P(BGPG(1),U,1) Q ;DOESN'T NEED HIV SCREEN AS ALREADY HAS HIV
- S BGPCNTN=BGPCNTN+1 ;needs a screen
- S $P(BGPCNTI($P(BGPG(1),U),BGPCNTI),U,10)=1 ;needs a screen
- Q
- REFHIV(P,BDATE,EDATE) ;
- NEW T,BGPT,G,BGPT1
- S T=""
- S T=$$CPTREFT^BGP8UTL1(P,BDATE,EDATE,$O(^ATXAX("B","BGP CPT HIV TESTS",0)),"R")
- I T S T=1_U_"Refused CPT "_$P(T,U,4)_U_$$DATE^BGP8UTL($P(T,U,2)) Q T
- S BGPT=$O(^ATXLAB("B","BGP HIV TEST TAX",0))
- I BGPT D I $P(G,U) Q 1_U_"Refused Lab "_U_$$DATE^BGP8UTL($P(G,U,2))
- .S (G,BGPT1)=0 F S BGPT1=$O(^ATXLAB(BGPT,21,"B",BGPT1)) Q:BGPT1=""!($P(G,U)) D
- ..S G=$$REFUSAL^BGP8UTL1(P,60,BGPT1,BDATE,EDATE)
- Q ""
- HIVDX(P,BDATE,EDATE) ;EP - any HIV dx ever or PL
- NEW BGPG,G,Y,X,T,E
- K BGPG
- S Y="BGPG("
- S BDATE=$G(BDATE)
- I BDATE="" S BDATE=$P(^DPT(P,0),U,3)
- S X=P_"^FIRST DX [BGP HIV/AIDS DXS;DURING "_$$FMTE^XLFDT(BDATE)_"-"_$$FMTE^XLFDT(EDATE) S E=$$START1^APCLDF(X,Y)
- I $D(BGPG(1)) Q $P(BGPG(1),U)_U_"POV "_$P(BGPG(1),U,2)
- S T=$O(^ATXAX("B","BGP HIV/AIDS 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)="D"
- .;Q:$P(^AUPNPROB(X,0),U,12)="I"
- .Q:$P(^AUPNPROB(X,0),U,8)>EDATE
- .I $P(^AUPNPROB(X,0),U,13)]"",$P(^AUPNPROB(X,0),U,13)>EDATE Q ;doo
- .S Y=$P(^AUPNPROB(X,0),U)
- .Q:'$$ICD^BGP8UTL2(Y,T,9)
- .S G=$P(^AUPNPROB(X,0),U,8) Q
- .S S=$$VAL^XBDIQ1(9000011,X,80001)
- .I S]"",$D(^XTMP("BGPSNOMEDSUBSET",$J,"PXRM HIV",S)) S G=$P(^AUPNPROB(X,0),U,8) Q
- .Q
- Q G
- BGP8D24A ;IHS/CMI/LAB - sti measure;
- +1 ;;18.1;IHS CLINICAL REPORTING;;MAY 25, 2018;Build 66
- +2 ;
- KEYSTI(P,BDATE,EDATE) ;EP - return key sti's
- +1 NEW X,Y,Z,A,B,C,D,R,N,BD,ED,BGPD,BGPRES,BGPCNTI,BGPCNTN,BGPCNTH,BGPCNTR,BGPRESD,BGPRESN,BGPY
- +2 SET BD=$$FMADD^XLFDT(BDATE,-60)
- +3 SET ED=$$FMADD^XLFDT(BDATE,300)
- +4 ;S ED=EDATE ;LORI
- +5 ;RETURN VALUE
- SET (BGPRESD,BGPRESN,BGPCNTI,BGPCNTN,BGPCNTH,BGPCNTR,BGPHIV)=""
- HIV ;get first HIV dx, if in time window count as an incident, if not don't
- +1 SET BGPHIV=$$HIVDX(P,$$DOB^AUPNPAT(P),ED)
- +2 ;,BGPRES=BGPRES_$S(BGPRES="":"",1:", ")_$$DATE^BGP8UTL($P($P(^AUPNVSIT($P(BGPG(1),U,5),0),U),"."))_" (HIV)"
- IF BGPHIV
- IF $PIECE(BGPHIV,U,1)'<BD
- SET BGPCNTI=BGPCNTI+1
- SET BGPCNTI($PIECE(BGPHIV,U,1),BGPCNTI)=BGPHIV
- SET $PIECE(BGPCNTI($PIECE(BGPHIV,U),BGPCNTI),U,9)="HIV"
- CHL ;chlamydia
- +1 NEW BGPG
- +2 SET BGPD=BD
- +3 SET C=0
- SET R=""
- +4 FOR
- Begin DoDot:1
- +5 KILL BGPG
- +6 SET X=P_"^FIRST DX [BKM CHLAMYDIA DXS;DURING "_$$FMTE^XLFDT(BGPD)_"-"_$$FMTE^XLFDT(ED)
- SET E=$$START1^APCLDF(X,"BGPG(")
- +7 IF '$DATA(BGPG(1))
- QUIT
- +8 SET BGPD=$$FMADD^XLFDT($PIECE(BGPG(1),U,1),61)
- +9 ;S BGPRES=BGPRES_$S(BGPRES="":"",1:", ")_$$DATE^BGP8UTL($P($P(^AUPNVSIT($P(BGPG(1),U,5),0),U),"."))_" (CHL)"
- +10 SET BGPCNTI=BGPCNTI+1
- +11 SET BGPCNTI($PIECE(BGPG(1),U,1),BGPCNTI)=BGPG(1)
- SET $PIECE(BGPCNTI($PIECE(BGPG(1),U),BGPCNTI),U,9)="CHL"
- +12 DO NEED
- End DoDot:1
- IF '$DATA(BGPG(1))
- QUIT
- GON ;
- +1 KILL BGPG
- +2 SET BGPD=BD
- +3 FOR
- Begin DoDot:1
- +4 KILL BGPG
- +5 SET X=P_"^FIRST DX [BKM GONORRHEA DXS;DURING "_$$FMTE^XLFDT(BGPD)_"-"_$$FMTE^XLFDT(ED)
- SET E=$$START1^APCLDF(X,"BGPG(")
- +6 IF '$DATA(BGPG(1))
- QUIT
- +7 SET BGPD=$$FMADD^XLFDT($PIECE(BGPG(1),U,1),61)
- +8 ;S BGPRES=BGPRES_$S(BGPRES="":"",1:", ")_$$DATE^BGP8UTL($P($P(^AUPNVSIT($P(BGPG(1),U,5),0),U),"."))_" (GON)"
- +9 SET BGPCNTI=BGPCNTI+1
- +10 SET BGPCNTI($PIECE(BGPG(1),U,1),BGPCNTI)=BGPG(1)
- SET $PIECE(BGPCNTI($PIECE(BGPG(1),U),BGPCNTI),U,9)="GON"
- +11 DO NEED
- End DoDot:1
- IF '$DATA(BGPG(1))
- QUIT
- SYH ;
- +1 KILL BGPG
- +2 SET BGPD=BD
- +3 FOR
- Begin DoDot:1
- +4 KILL BGPG
- +5 SET X=P_"^FIRST DX [BKM SYPHILIS DXS;DURING "_$$FMTE^XLFDT(BGPD)_"-"_$$FMTE^XLFDT(ED)
- SET E=$$START1^APCLDF(X,"BGPG(")
- +6 IF '$DATA(BGPG(1))
- QUIT
- +7 SET BGPD=$$FMADD^XLFDT($PIECE(BGPG(1),U,1),61)
- +8 ;S BGPRES=BGPRES_$S(BGPRES="":"",1:", ")_$$DATE^BGP8UTL($P($P(^AUPNVSIT($P(BGPG(1),U,5),0),U),"."))_" (SYH)"
- +9 SET BGPCNTI=BGPCNTI+1
- +10 SET BGPCNTI($PIECE(BGPG(1),U,1),BGPCNTI)=BGPG(1)
- SET $PIECE(BGPCNTI($PIECE(BGPG(1),U),BGPCNTI),U,9)="SYH"
- +11 DO NEED
- End DoDot:1
- IF '$DATA(BGPG(1))
- QUIT
- +12 ;NOW COUNT ALL SCREENINGS DONE FOR ALL INCIDENCES
- +13 SET BGPD=0
- FOR
- SET BGPD=$ORDER(BGPCNTI(BGPD))
- IF BGPD'=+BGPD
- QUIT
- Begin DoDot:1
- +14 SET BGPY=0
- FOR
- SET BGPY=$ORDER(BGPCNTI(BGPD,BGPY))
- IF BGPY'=+BGPY
- QUIT
- Begin DoDot:2
- +15 ;DOESN'T NEED A SCREEN
- IF '$PIECE(BGPCNTI(BGPD,BGPY),U,10)
- QUIT
- +16 SET X=$$HIVTEST^BGP8D8(P,$$FMADD^XLFDT(BGPD,-30),$$FMADD^XLFDT(BGPD,60))
- +17 IF X
- SET BGPCNTH=BGPCNTH+1
- SET $PIECE(BGPCNTI(BGPD,BGPY),U,11)=$PIECE(X,U,2)
- QUIT
- +18 SET X=$$REFHIV(P,BDATE,EDATE)
- +19 IF X
- SET BGPCNTR=BGPCNTR+1
- SET $PIECE(BGPCNTI(BGPD,BGPY),U,20)=$PIECE(X,U,2)
- End DoDot:2
- End DoDot:1
- +20 SET D=0
- +21 IF 'BGPCNTI
- QUIT ""
- +22 FOR
- SET D=$ORDER(BGPCNTI(D))
- IF D'=+D
- QUIT
- Begin DoDot:1
- +23 SET Y=0
- FOR
- SET Y=$ORDER(BGPCNTI(D,Y))
- IF Y'=+Y
- QUIT
- Begin DoDot:2
- +24 SET R=Y_") "_$$DATE^BGP8UTL($PIECE(BGPCNTI(D,Y),U,1))_" "_$PIECE(BGPCNTI(D,Y),U,9)_" "_$PIECE(BGPCNTI(D,Y),U,2)
- +25 SET BGPRESD=BGPRESD_$SELECT(BGPRESD]"":" ",1:"")_R
- +26 IF '$PIECE(BGPCNTI(D,Y),U,10)
- IF $PIECE(BGPCNTI(D,Y),U,9)'="HIV"
- SET N=Y_") HIV-Contraind "_$$DATE^BGP8UTL($PIECE(BGPHIV,U,1))_" Prior DX "_$PIECE(BGPHIV,U,2)
- GOTO R
- +27 IF '$PIECE(BGPCNTI(D,Y),U,10)
- IF $PIECE(BGPCNTI(D,Y),U,9)="HIV"
- SET N=Y_") HIV-N/A"
- GOTO R
- +28 IF $PIECE(BGPCNTI(D,Y),U,10)
- SET N=$PIECE(BGPCNTI(D,Y),U,11)
- Begin DoDot:3
- +29 IF N]""
- SET N=Y_") HIV-Y "_N
- QUIT
- +30 SET N=$PIECE(BGPCNTI(D,Y),U,20)
- IF N]""
- SET N=Y_") HIV-"_N
- QUIT
- +31 SET N=Y_") HIV-N"
- End DoDot:3
- R SET BGPRESN=BGPRESN_$SELECT(BGPRESN]"":" ",1:"")_N
- End DoDot:2
- End DoDot:1
- +1 ;ZW BGPCNTI
- +2 QUIT BGPCNTI_U_BGPCNTN_U_BGPCNTH_U_BGPCNTR_U_BGPRESD_U_BGPRESN
- NEED ;
- +1 ;DOESN'T NEED HIV SCREEN AS ALREADY HAS HIV
- IF BGPHIV
- IF $PIECE(BGPHIV,U,1)'>$PIECE(BGPG(1),U,1)
- QUIT
- +2 ;needs a screen
- SET BGPCNTN=BGPCNTN+1
- +3 ;needs a screen
- SET $PIECE(BGPCNTI($PIECE(BGPG(1),U),BGPCNTI),U,10)=1
- +4 QUIT
- REFHIV(P,BDATE,EDATE) ;
- +1 NEW T,BGPT,G,BGPT1
- +2 SET T=""
- +3 SET T=$$CPTREFT^BGP8UTL1(P,BDATE,EDATE,$ORDER(^ATXAX("B","BGP CPT HIV TESTS",0)),"R")
- +4 IF T
- SET T=1_U_"Refused CPT "_$PIECE(T,U,4)_U_$$DATE^BGP8UTL($PIECE(T,U,2))
- QUIT T
- +5 SET BGPT=$ORDER(^ATXLAB("B","BGP HIV TEST TAX",0))
- +6 IF BGPT
- Begin DoDot:1
- +7 SET (G,BGPT1)=0
- FOR
- SET BGPT1=$ORDER(^ATXLAB(BGPT,21,"B",BGPT1))
- IF BGPT1=""!($PIECE(G,U))
- QUIT
- Begin DoDot:2
- +8 SET G=$$REFUSAL^BGP8UTL1(P,60,BGPT1,BDATE,EDATE)
- End DoDot:2
- End DoDot:1
- IF $PIECE(G,U)
- QUIT 1_U_"Refused Lab "_U_$$DATE^BGP8UTL($PIECE(G,U,2))
- +9 QUIT ""
- HIVDX(P,BDATE,EDATE) ;EP - any HIV dx ever or PL
- +1 NEW BGPG,G,Y,X,T,E
- +2 KILL BGPG
- +3 SET Y="BGPG("
- +4 SET BDATE=$GET(BDATE)
- +5 IF BDATE=""
- SET BDATE=$PIECE(^DPT(P,0),U,3)
- +6 SET X=P_"^FIRST DX [BGP HIV/AIDS DXS;DURING "_$$FMTE^XLFDT(BDATE)_"-"_$$FMTE^XLFDT(EDATE)
- SET E=$$START1^APCLDF(X,Y)
- +7 IF $DATA(BGPG(1))
- QUIT $PIECE(BGPG(1),U)_U_"POV "_$PIECE(BGPG(1),U,2)
- +8 SET T=$ORDER(^ATXAX("B","BGP HIV/AIDS DXS",0))
- +9 SET X=0
- SET G=""
- FOR
- SET X=$ORDER(^AUPNPROB("AC",P,X))
- IF X'=+X!(G]"")
- QUIT
- Begin DoDot:1
- +10 IF $PIECE(^AUPNPROB(X,0),U,12)="D"
- QUIT
- +11 ;Q:$P(^AUPNPROB(X,0),U,12)="I"
- +12 IF $PIECE(^AUPNPROB(X,0),U,8)>EDATE
- QUIT
- +13 ;doo
- IF $PIECE(^AUPNPROB(X,0),U,13)]""
- IF $PIECE(^AUPNPROB(X,0),U,13)>EDATE
- QUIT
- +14 SET Y=$PIECE(^AUPNPROB(X,0),U)
- +15 IF '$$ICD^BGP8UTL2(Y,T,9)
- QUIT
- +16 SET G=$PIECE(^AUPNPROB(X,0),U,8)
- QUIT
- +17 SET S=$$VAL^XBDIQ1(9000011,X,80001)
- +18 IF S]""
- IF $DATA(^XTMP("BGPSNOMEDSUBSET",$JOB,"PXRM HIV",S))
- SET G=$PIECE(^AUPNPROB(X,0),U,8)
- QUIT
- +19 QUIT
- End DoDot:1
- +20 QUIT G