Home   Package List   Routine Alphabetical List   Global Alphabetical List   FileMan Files List   FileMan Sub-Files List   Package Component Lists   Package-Namespace Mapping  
Routine: BDMLPM

BDMLPM.m

Go to the documentation of this file.
  1. BDMLPM ; IHS/CMI/LAB - CALCULATE LAST PAP MAM ; 20 Oct 2017 1:17 PM
  1. ;;2.0;DIABETES MANAGEMENT SYSTEM;**1,2,8,9,10,11,12**;JUN 14, 2007;Build 51
  1. ;
  1. ;
  1. LASTPAP(P) ;EP - return last pap date
  1. Q:$P($G(^DPT(+$G(P),0)),U,2)'="F" ""
  1. I $$HYSTER(P) Q ""
  1. N APCHY,%,LPAP,T
  1. S LPAP=""
  1. S %=P_"^LAST LAB PAP SMEAR"
  1. S E=$$START1^APCLDF(%,"APCHY(")
  1. S:$G(APCHY(1))>LPAP LPAP=+APCHY(1)
  1. ;
  1. K APCHY S %=P_"^LAST LAB [BGP PAP SMEAR TAX",E=$$START1^APCLDF(%,"APCHY(")
  1. I $D(APCHY(1)) D
  1. .Q:LPAP>$P(APCHY(1),U)
  1. .S LPAP=$P(APCHY(1),U)
  1. ;
  1. K APCHY
  1. F X="V76.2" S %=P_"^LAST DX "_X D
  1. .S E=$$START1^APCLDF(%,"APCHY(")
  1. .S:$G(APCHY(1))>LPAP LPAP=+APCHY(1)
  1. K APCHY
  1. S %=P_"^LAST PROCEDURE [BGP HYSTERECTOMY PROCEDURES"
  1. S E=$$START1^APCLDF(%,"APCHY(")
  1. S:$G(APCHY(1))>LPAP LPAP=+APCHY(1)
  1. K APCHY
  1. F X=88141:1:88148,88150,88152:1:88158,88164:1:88167 D
  1. .S T=$O(^ICPT("B",X,0))
  1. .Q:'T
  1. .S APCHY(1)=$O(^AUPNVCPT("AA",P,T,0))
  1. .Q:'APCHY(1)
  1. .S APCHY(1)=9999999-APCHY(1)
  1. .S:APCHY(1)>LPAP LPAP=$P(APCHY(1),U)
  1. Q $G(LPAP)
  1. ;
  1. HYSTER(P) ;EP has patient had hysterectomy?
  1. I '$G(P) Q ""
  1. I '$D(^AUPNVPRC("AC",P)) Q ""
  1. ;NEW F,S,C S (F,S)=0 F S F=$O(^AUPNVPRC("AC",P,F)) Q:F'=+F!(S) S C=$P(^ICD0(+^AUPNVPRC(F,0),0),U) D ;cmi/anch/maw 8/27/2007 orig line patch 1
  1. NEW F,S,C S (F,S)=0 F S F=$O(^AUPNVPRC("AC",P,F)) Q:F'=+F!(S) S C=+^AUPNVPRC(F,0) D ;cmi/anch/maw 8/27/2007 code set versioning patch 1
  1. .;S:C=68.3!(C=68.4)!(C=68.5)!(C=68.6)!(C=68.7)!(C=68.9) S=1
  1. .I $$ICD^BDMUTL(C,"BGP HYSTERECTOMY PROCEDURES",0)
  1. I S=1 Q 1
  1. S T="HYSTERECTOMY",T=$O(^BWPN("B",T,0))
  1. I T D I X Q 1
  1. .S X=$$WH(P,$$DOB^AUPNPAT(P),DT,T,1)
  1. S T=$O(^ATXAX("B","BGP HYSTERECTOMY CPTS",0))
  1. I T D I X Q 1
  1. .S X=$$CPT(P,$P(^DPT(P,0),U,3),DT,"BGP HYSTERECTOMY CPTS",1)
  1. Q ""
  1. WH(P,BDATE,EDATE,T,F) ;EP
  1. I '$G(P) Q ""
  1. I '$G(T) Q ""
  1. I '$G(F) S F=1
  1. I $G(EDATE)="" Q ""
  1. I $G(BDATE)="" S BDATE=$$FMADD^XLFDT(EDATE,-365)
  1. ;go through procedures in a date range for this patient, check proc type
  1. NEW D,X,Y,G,V
  1. S (G,V)=0 F S V=$O(^BWPCD("C",P,V)) Q:V=""!(G) D
  1. .Q:'$D(^BWPCD(V,0))
  1. .I $P(^BWPCD(V,0),U,4)'=T Q
  1. .S D=$P(^BWPCD(V,0),U,12)
  1. .Q:D<BDATE
  1. .Q:D>EDATE
  1. .S G=V
  1. .Q
  1. I 'G Q ""
  1. I F=1 Q $S(G:1,1:"")
  1. I F=2 Q G
  1. I F=3 S D=$P(^BWPCD(G,0),U,12) Q D
  1. I F=4 S D=$P(^BWPCD(G,0),U,12) Q $$FMTE^XLFDT(D)
  1. Q ""
  1. CPT(P,BDATE,EDATE,T,F) ;EP - return ien of CPT entry if patient had this CPT
  1. I '$G(P) Q ""
  1. I '$G(T) Q ""
  1. I '$G(F) S F=1
  1. I $G(EDATE)="" Q ""
  1. I $G(BDATE)="" S BDATE=$$FMADD^XLFDT(EDATE,-365)
  1. ;go through visits in a date range for this patient, check cpts
  1. NEW D,BD,ED,X,Y,D,G,V
  1. S ED=9999999-EDATE,BD=9999999-BDATE,G=0
  1. F S ED=$O(^AUPNVSIT("AA",P,ED)) Q:ED=""!($P(ED,".")>BD)!(G) D
  1. .S V=0 F S V=$O(^AUPNVSIT("AA",P,ED,V)) Q:V'=+V!(G) D
  1. ..Q:'$D(^AUPNVSIT(V,0))
  1. ..Q:'$D(^AUPNVCPT("AD",V))
  1. ..S X=0 F S X=$O(^AUPNVCPT("AD",V,X)) Q:X'=+X!(G) D
  1. ...I $$ICD^ATXCHK($P(^AUPNVCPT(X,0),U),T,1) S G=X
  1. ...Q
  1. ..Q
  1. .Q
  1. I 'G Q ""
  1. I F=1 Q $S(G:1,1:"")
  1. I F=2 Q G
  1. I F=3 S V=$P(^AUPNVCPT(G,0),U,3) I V Q $P($P($G(^AUPNVSIT(V,0)),U),".")
  1. I F=4 S V=$P(^AUPNVCPT(G,0),U,3) I V Q $$FMTE^XLFDT($P($P($G(^AUPNVSIT(V,0)),U),"."))
  1. I F=5 S V=$P(^AUPNVCPT(G,0),U,3) I V Q $P($P($G(^AUPNVSIT(V,0)),U),".")_"^"_$P($$CPT^ICPTCOD($P(^AUPNVCPT(G,0),U),0),U,2)
  1. Q ""
  1. LASTMAM(P) ;EP
  1. Q:$P($G(^DPT(+$G(P),0)),U,2)'="F" ""
  1. N LMAM,T,APCHY,%
  1. S LMAM=""
  1. F X=76090:1:76092 S %=P_"^LAST RAD "_X D
  1. .S E=$$START1^APCLDF(%,"APCHY(")
  1. .S:$G(APCHY(1))>LMAM LMAM=+APCHY(1)
  1. K APCHY
  1. F X="V76.11","V76.12" S %=P_"^LAST DX "_X D
  1. .S E=$$START1^APCLDF(%,"APCHY(")
  1. .S:$G(APCHY(1))>LMAM LMAM=+APCHY(1)
  1. K APCHY
  1. F X=87.36,87.37 S %=P_"^LAST PROCEDURE "_X D
  1. .S E=$$START1^APCLDF(%,"APCHY(")
  1. .S:$G(APCHY(1))>LMAM LMAM=+APCHY(1)
  1. K APCHY
  1. F %=76090:1:76092 S T=$O(^ICPT("B",%,0)) D:T
  1. .S APCHY(1)=$O(^AUPNVCPT("AA",P,T,0))
  1. .Q:'APCHY(1)
  1. .S APCHY(1)=9999999-APCHY(1)
  1. .S:$G(APCHY(1))>LMAM LMAM=+APCHY(1)
  1. F %=76090:1:76092 S G=$$REFDF^BDMS9B3(P,71,$O(^RAMIS(71,"D",%,0)),$G(LMAM)) Q:G]""
  1. I $G(G)]"" Q $G(LMAM)_"^"_G
  1. Q $G(LMAM)
  1. MAS(P,EDATE) ;EPmastectomy before end of time frame
  1. N BDMT
  1. K BDMT S %=P_"^LAST PROCEDURE 85.42;DURING "_$$FMTE^XLFDT($$DOB^AUPNPAT(P))_"-"_$$FMTE^XLFDT(EDATE),E=$$START1^APCLDF(%,"BDMT(")
  1. I $D(BDMT(1)) Q 1
  1. K BDMT S %=P_"^LAST PROCEDURE 85.44;DURING "_$$FMTE^XLFDT($$DOB^AUPNPAT(P))_"-"_$$FMTE^XLFDT(EDATE),E=$$START1^APCLDF(%,"BDMT(")
  1. I $D(BDMT(1)) Q 1
  1. K BDMT S %=P_"^LAST PROCEDURE 85.46;DURING "_$$FMTE^XLFDT($$DOB^AUPNPAT(P))_"-"_$$FMTE^XLFDT(EDATE),E=$$START1^APCLDF(%,"BDMT(")
  1. I $D(BDMT(1)) Q 1
  1. K BDMT S %=P_"^LAST PROCEDURE 85.48;DURING "_$$FMTE^XLFDT($$DOB^AUPNPAT(P))_"-"_$$FMTE^XLFDT(EDATE),E=$$START1^APCLDF(%,"BDMT(")
  1. I $D(BDMT(1)) Q 1
  1. ;check cpt codes for bilateral
  1. ;loop through all cpt codes up to Edate and if any match quit
  1. S (X,Y,Z,G)=0 K BDMTX
  1. S T=$O(^ICPT("B",19180,0)),T1=$O(^ICPT("B",19200,0)),T2=$O(^ICPT("B",19220,0)),T3=$O(^ICPT("B",19240,0))
  1. I T,$D(^AUPNVCPT("AA",P,T)) S %="" D I %]"" Q 1
  1. .S E=0 F S E=$O(^AUPNVCPT("AA",P,T,E)) Q:E'=+E!(%]"") D
  1. ..S D=9999999-E ;date done
  1. ..I D>EDATE Q
  1. ..S Y=0 F S Y=$O(^AUPNVCPT("AA",P,T,E,Y)) Q:Y'=+Y D
  1. ...S BDMTX(E)=""
  1. ...S M=$P(^AUPNVCPT(Y,0),U,8) I M S M=$P($G(^AUTTCMOD(M,0)),U) I M=50 S %=1
  1. ...S M=$P(^AUPNVCPT(Y,0),U,9) I M S M=$P($G(^AUTTCMOD(M,0)),U) I M=50 S %=1
  1. ..Q
  1. .Q
  1. I T1,$D(^AUPNVCPT("AA",P,T1)) S %="" D I %]"" Q 1
  1. .S E=0 F S E=$O(^AUPNVCPT("AA",P,T1,E)) Q:E'=+E!(%]"") D
  1. ..S D=9999999-E ;date done
  1. ..I D>EDATE Q
  1. ..S Y=0 F S Y=$O(^AUPNVCPT("AA",P,T1,E,Y)) Q:Y'=+Y D
  1. ...S BDMTX(E)=""
  1. ...S M=$P(^AUPNVCPT(Y,0),U,8) I M S M=$P($G(^AUTTCMOD(M,0)),U) I M=50 S %=1
  1. ...S M=$P(^AUPNVCPT(Y,0),U,9) I M S M=$P($G(^AUTTCMOD(M,0)),U) I M=50 S %=1
  1. ..Q
  1. .Q
  1. I T2,$D(^AUPNVCPT("AA",P,T2)) S %="" D I %]"" Q 1
  1. .S E=0 F S E=$O(^AUPNVCPT("AA",P,T2,E)) Q:E'=+E!(%]"") D
  1. ..S D=9999999-E ;date done
  1. ..I D>EDATE Q
  1. ..S Y=0 F S Y=$O(^AUPNVCPT("AA",P,T2,E,Y)) Q:Y'=+Y D
  1. ...S BDMTX(E)=""
  1. ...S M=$P(^AUPNVCPT(Y,0),U,8) I M S M=$P($G(^AUTTCMOD(M,0)),U) I M=50 S %=1
  1. ...S M=$P(^AUPNVCPT(Y,0),U,9) I M S M=$P($G(^AUTTCMOD(M,0)),U) I M=50 S %=1
  1. ..Q
  1. .Q
  1. I T3,$D(^AUPNVCPT("AA",P,T3)) S %="" D I %]"" Q 1
  1. .S E=0 F S E=$O(^AUPNVCPT("AA",P,T3,E)) Q:E'=+E!(%]"") D
  1. ..S D=9999999-E ;date done
  1. ..I D>EDATE Q
  1. ..S Y=0 F S Y=$O(^AUPNVCPT("AA",P,T3,E,Y)) Q:Y'=+Y D
  1. ...S BDMTX(D)=""
  1. ...S M=$P(^AUPNVCPT(Y,0),U,8) I M S M=$P($G(^AUTTCMOD(M,0)),U) I M=50 S %=1
  1. ...S M=$P(^AUPNVCPT(Y,0),U,9) I M S M=$P($G(^AUTTCMOD(M,0)),U) I M=50 S %=1
  1. ..Q
  1. .Q
  1. ;see if 2 on different dates
  1. K BDMT S %=P_"^ALL PROCEDURE [BGP MASTECTOMY PROCEDURES;DURING "_$$FMTE^XLFDT($$DOB^AUPNPAT(P))_"-"_$$FMTE^XLFDT(EDATE),E=$$START1^APCLDF(%,"BDMT(")
  1. S X=0 F S X=$O(BDMT(X)) Q:X'=+X S BDMTX($P(BDMT(X),U))=""
  1. S %=0,X=0,C=0 F S X=$O(BDMTX(X)) Q:X'=+X S C=C+1
  1. I C>1 Q 1
  1. Q 0
  1. DIETEDUC(P,BDATE,EDATE) ;EP
  1. NEW D,BD,ED,X,Y,%DT,D,G,APCLVRD,V,APCL,RD,NRD
  1. S (RD,NRD)=""
  1. S X=BDATE,%DT="P" D ^%DT S BD=Y
  1. S X=EDATE,%DT="P" D ^%DT S ED=Y
  1. S D=0,(RD,NRD)="",G="" ;is this right???
  1. F S D=$O(^AUPNVSIT("AA",P,D)) Q:D=""!($P(D,".")>(9999999-BD))!(G]"") D
  1. .S V=0 F S V=$O(^AUPNVSIT("AA",P,D,V)) Q:V'=+V D
  1. ..Q:'$D(^AUPNVSIT(V,0))
  1. ..Q:$P(^AUPNVSIT(V,0),U,11)
  1. ..Q:'$P(^AUPNVSIT(V,0),U,9)
  1. ..;Q:'$D(^AUPNVPOV("AD",V))
  1. ..;Q:'$D(^AUPNVPRV("AD",V))
  1. ..Q:$$DNKA^BDMD917(V)
  1. ..Q:$P(^AUPNVSIT(V,0),U,3)="C"
  1. ..Q:$$CLINIC^APCLV(V,"C")=52
  1. ..I $$PRIMPROV^APCLV(V,"D")=29 S G=D Q
  1. ..I $$PRIMPROV^APCLV(V,"D")="07" S G=D Q
  1. ..I $$PRIMPROV^APCLV(V,"D")="34" S G=D Q
  1. ..S X=0 F S X=$O(^AUPNVPOV("AD",V,X)) Q:X'=+X I $$ICD^BDMUTL($$VALI^XBDIQ1(9000010.07,X,.01),"BGP DIETARY SURVEILLANCE DXS",9) S G=D
  1. ..I G Q
  1. ..S X=0 F S X=$O(^AUPNVCPT("AD",V,X)) Q:X'=+X S Z=$$VAL^XBDIQ1(9000010.07,X,.01) I Z=97802!(Z=97803)!(Z=97804) S G=D
  1. ..S T=$O(^ATXAX("B","DM AUDIT DIET EDUC TOPICS",0))
  1. ..I G Q
  1. ..S X=0 F S X=$O(^AUPNVPED("AD",V,X)) Q:X'=+X D
  1. ...S Y=$P(^AUPNVPED(X,0),U)
  1. ...I T,$D(^ATXAX(T,21,"AA",Y)) S G=D
  1. ...S J=$P(^AUTTEDT(Y,0),U,2)
  1. ...I $P(J,"-",2)="N" S G=D Q
  1. ...I $P(J,"-",2)="DT" S G=D Q
  1. ...I $P(J,"-",2)="MNT" S G=D Q
  1. ...I $P(J,"-",1)="MNT" S G=D Q
  1. ...I $P(J,"-",1)="DMCN" S G=D Q
  1. .Q
  1. Q G
  1. PC(V) ;return provider discipline of educ provider
  1. I 'V Q ""
  1. NEW X S X=$P(^AUPNVPED(V,0),U,5)
  1. I 'X Q ""
  1. I $P(^DD(9000010.16,.05,0),U,2)[200 Q $$PROVCLSC^XBFUNC1(X)
  1. NEW A S A=$P(^DIC(6,X,0),U,4)
  1. I 'A Q ""
  1. Q $P($G(^DIC(7,A,9999999)),U)
  1. EXEDUC(P,BDATE,EDATE) ;EP
  1. NEW D,BD,ED,X,Y,%DT,D,G,APCLVRD,V,APCL,RD,NRD
  1. S (RD,NRD)=""
  1. S X=BDATE,%DT="P" D ^%DT S BD=Y
  1. S X=EDATE,%DT="P" D ^%DT S ED=Y
  1. S D=0,(RD,NRD)="",G="" ;is this right???
  1. F S D=$O(^AUPNVSIT("AA",P,D)) Q:D=""!($P(D,".")>(9999999-BD))!(G]"") D
  1. .S V=0 F S V=$O(^AUPNVSIT("AA",P,D,V)) Q:V'=+V D
  1. ..Q:'$D(^AUPNVSIT(V,0))
  1. ..Q:$P(^AUPNVSIT(V,0),U,11)
  1. ..Q:'$P(^AUPNVSIT(V,0),U,9)
  1. ..;Q:'$D(^AUPNVPOV("AD",V))
  1. ..;Q:'$D(^AUPNVPRV("AD",V))
  1. ..Q:$$DNKA^BDMD917(V)
  1. ..Q:$P(^AUPNVSIT(V,0),U,3)="C"
  1. ..S X=0 F S X=$O(^AUPNVPOV("AD",V,X)) Q:X'=+X I $$ICD^BDMUTL($$VALI^XBDIQ1(9000010.07,X,.01),"BGP EXERCISE COUNSELING DXS",9) S G=D
  1. ..I G Q
  1. ..S T=$O(^ATXAX("B","DM AUDIT EXERCISE EDUC TOPICS",0))
  1. ..S X=0 F S X=$O(^AUPNVPED("AD",V,X)) Q:X'=+X D
  1. ...S Y=$P(^AUPNVPED(X,0),U)
  1. ...I T,$D(^ATXAX(T,21,"AA",Y)) S G=D
  1. ...S J=$P(^AUTTEDT(Y,0),U,2)
  1. ...I $P(J,"-",2)="EX" S G=D Q
  1. .Q
  1. Q G
  1. OTHEDUC(P,BDATE,EDATE) ;EP
  1. NEW D,BD,ED,X,Y,%DT,D,G,APCLVRD,V,APCL,RD,NRD
  1. S (RD,NRD)=""
  1. S X=BDATE,%DT="P" D ^%DT S BD=Y
  1. S X=EDATE,%DT="P" D ^%DT S ED=Y
  1. S D="",(RD,NRD)="",G="" ;is this right???
  1. F S D=$O(^AUPNVSIT("AA",P,D)) Q:D=""!($P(D,".")>(9999999-BD))!(G]"") D
  1. .S V=0 F S V=$O(^AUPNVSIT("AA",P,D,V)) Q:V'=+V D
  1. ..Q:'$D(^AUPNVSIT(V,0))
  1. ..Q:$P(^AUPNVSIT(V,0),U,11)
  1. ..Q:'$P(^AUPNVSIT(V,0),U,9)
  1. ..;Q:'$D(^AUPNVPOV("AD",V))
  1. ..;Q:'$D(^AUPNVPRV("AD",V))
  1. ..Q:$$DNKA^BDMD917(V)
  1. ..Q:$P(^AUPNVSIT(V,0),U,3)="C"
  1. ..S T=$O(^ATXAX("B","DM AUDIT OTHER EDUC TOPICS",0))
  1. ..S X=0 F S X=$O(^AUPNVPED("AD",V,X)) Q:X'=+X D
  1. ...S Y=$P(^AUPNVPED(X,0),U)
  1. ...S J=$P(^AUTTEDT(Y,0),U,2)
  1. ...I $P(J,"-",2)="EX" Q
  1. ...I $P(J,"-",2)="N" Q
  1. ...I $P(J,"-",2)="DT" Q
  1. ...I $P(J,"-",2)="MNT" Q
  1. ...I $P(J,"-",1)="MNT" Q
  1. ...I $P(J,"-",1)="DMCN" Q
  1. ...I T,$D(^ATXAX(T,21,"AA",Y)) S G=D Q
  1. ...I $P(J,"-",1)="250" S G=D Q
  1. ...I $P(J,"-",1)="DM" S G=D Q
  1. ...I $P(J,"-",1)="DMC" S G=D Q
  1. ...I $P(J,"-",1)]"",$$SNOMED^BDMUTL(2019,"PXRM DIABETES",$P(J,"-",1)) S G=D Q
  1. ...N CODE
  1. ...S CODE=$P($$CODEN^BDMUTL($P(T,"-",1),80),"~")
  1. ...I CODE>0 D Q
  1. ....N TAX
  1. ....S TAX=$O(^ATXAX("B","SURVEILLANCE DIABETES",0))
  1. ....I $$ICD^BDMUTL(CODE,$P(^ATXAX(TAX,0),U),9) S G=D
  1. ...I $P(J,"-",1)]"",$$SNOMED^BDMUTL(2019,"PXRM DIABETES",$P(J,"-",1)) S G=$$VD^APCLV($P(^AUPNVPED(I,0),U,3))
  1. Q G