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

BHSMU.m

Go to the documentation of this file.
  1. BHSMU ;IHS/CIA/MGH - Health Summary Utilities ;30-Nov-2015 10:26;DU
  1. ;;1.0;HEALTH SUMMARY COMPONENTS;**2,4,9,12**;March 17, 2006;Build 3
  1. ;===================================================================
  1. ;Taken from APCHSMU
  1. ; IHS/CMI/LAB - utilities for hmr ; [ 09/08/04 10:39 AM ]
  1. ;;2.0;IHS RPMS/PCC Health Summary;**8,10,11,12**;JUN 24, 1997
  1. ;Patch 2 changed for Code set versioning
  1. ;Patch 12 changed to use new API
  1. ;
  1. D1(D) ;EP - DATE WITH 4 YR
  1. I $G(D)="" Q ""
  1. Q $E(D,4,5)_"/"_$E(D,6,7)_"/"_(1700+$E(D,1,3))
  1. DATE(D) ;EP - convert to slashed date
  1. I $G(D)="" Q ""
  1. Q $E(D,4,5)_"/"_$E(D,6,7)_"/"_$E(D,2,3)
  1. ;
  1. LASTLAB(P,APCHI,APCHT,APCHL,APCHLT,F) ;EP P is patient, APCHI is ien of lab test, APCHT is IEN of lab taxonomy, APCHL is ien of loinc code, APCHLT is ien o f loinc taxonmy
  1. ;now get all loinc/taxonomy tests
  1. N J,L
  1. I $G(F)="" S F="D"
  1. S APCHC=""
  1. S D=0 F S D=$O(^AUPNVLAB("AE",P,D)) Q:D'=+D!(APCHC) D
  1. .S L=0 F S L=$O(^AUPNVLAB("AE",P,D,L)) Q:L'=+L!(APCHC) D
  1. ..S X=0 F S X=$O(^AUPNVLAB("AE",P,D,L,X)) Q:X'=+X!(APCHC) D
  1. ...Q:'$D(^AUPNVLAB(X,0))
  1. ...I $G(APCHI),L=APCHI S APCHC=(9999999-D) Q
  1. ...I $G(APCHT),$P(^AUPNVLAB(X,0),U),$D(^ATXLAB(APCHT,21,"B",$P(^AUPNVLAB(X,0),U))) S APCHC=(9999999-D) Q
  1. ...S J=$P($G(^AUPNVLAB(X,11)),U,13) Q:J=""
  1. ...Q:'$$LOINC(J,$G(APCHLT),$G(APCHL))
  1. ...S APCHC=(9999999-D)
  1. ...Q
  1. Q APCHC
  1. LOINC(A,LT,LI) ;
  1. I '$G(LT),'$G(LI) Q "" ;no ien or taxonomy
  1. I A,LI,A=LI Q 1
  1. NEW %
  1. S %=$P($G(^LAB(95.3,A,9999999)),U,2)
  1. I %]"",LT,$D(^ATXAX(LT,21,"B",%)) Q 1
  1. S %=$P($G(^LAB(95.3,A,0)),U)_"-"_$P($G(^LAB(95.3,A,0)),U,15)
  1. I $D(^ATXAX(LT,21,"B",%)) Q 1
  1. Q ""
  1. LASTITEM(P,V,T,F) ;EP - return last item V
  1. I $G(F)="" S F="D"
  1. NEW BHSY,%,E,Y K BHSY S %=P_"^LAST "_T_" "_V,E=$$START1^APCLDF(%,"BHSY(")
  1. Q $S(F="D":$P($G(BHSY(1)),"^"),1:$P($G(BHSY(1)),"^",2))
  1. ;
  1. OVR(P,I) ;EP - return date^prov^comments
  1. I $G(P)="" Q ""
  1. I $G(I)="" Q ""
  1. I '$D(^AUPNHMRO("AA",I,P)) Q ""
  1. NEW % S %=$O(^AUPNHMRO("AA",I,P,0)),%=$O(^AUPNHMRO("AA",I,P,%,0))
  1. I '$D(^AUPNHMRO(%,0)) Q ""
  1. Q $P(^AUPNHMRO(%,0),U,3)_"^"_$$VAL^XBDIQ1(9000025,%,.04)_"^"_$P(^AUPNHMRO(%,0),U,5)
  1. DAYS(V) ;
  1. I V["Y" Q +V*365.25
  1. I V["M" Q +V*30.5
  1. I V["D" Q +V
  1. Q ""
  1. PLTAX(P,A,S) ;EP - is DM on problem list 1 or 0
  1. I $G(P)="" Q ""
  1. I $G(A)="" Q ""
  1. S S=$G(S)
  1. N T,TAXARR
  1. S T=$O(^ATXAX("B",A,0))
  1. I 'T Q ""
  1. N X,Y,I S (X,Y,I)=0 F S X=$O(^AUPNPROB("AC",P,X)) Q:X'=+X!(I) I $D(^AUPNPROB(X,0)) D
  1. .S Y=$P(^AUPNPROB(X,0),U)
  1. .Q:'$$ICD^ATXAPI(Y,T,9)
  1. .S I=1
  1. Q I
  1. PLCODE(P,A,F) ;EP
  1. I $G(P)="" Q ""
  1. I $G(A)="" Q ""
  1. I $G(F)="" S F=1
  1. N T
  1. I $$AICD^BHSUTL S T=+$$CODEN^ICDEX(A,80)
  1. E S T=+$$CODEN^ICDCODE(A,80)
  1. I 'T Q ""
  1. N X,Y,I S (X,Y,I)=0 F S X=$O(^AUPNPROB("AC",P,X)) Q:X'=+X!(I) I $D(^AUPNPROB(X,0)) S Y=$P(^AUPNPROB(X,0),U) I $$ICD^ATXAPI(Y,T,9) S I=X
  1. I F=1 Q I
  1. I F=2 Q X
  1. Q ""
  1. REF(P,F,I,D,T) ;EP - dm item refused?
  1. I '$G(P) Q ""
  1. I '$G(F) Q ""
  1. I '$G(I) Q ""
  1. I $G(D)="" S D=""
  1. I $G(T)="" S T="E"
  1. NEW X,N S X=$O(^AUPNPREF("AA",P,F,I,0))
  1. I 'X Q "" ;none of this item was refused
  1. S N=$O(^AUPNPREF("AA",P,F,I,X,0))
  1. NEW Y S Y=9999999-X
  1. I D]"",Y>D Q $S(T="I":Y,1:$$TYPEREF(N)_$E($$VAL^XBDIQ1(F,I,.01),1,(44-$L($$TYPEREF(N))))_"^on "_$$FMTE^XLFDT(Y))_"^"_Y
  1. I D]"",Y<D Q "" ;REFUSED BEFORE DATE OF THE LAST
  1. I T="I" Q Y ;quit on internal form of date
  1. Q $$TYPEREF(N)_$E($$VAL^XBDIQ1(F,I,.01),1,(44-$L($$TYPEREF(N))))_"^on "_$$FMTE^XLFDT(Y)_"^"_Y
  1. TYPEREF(N) ;EP
  1. NEW % S %=$P(^AUPNPREF(N,0),U,7)
  1. I %="R"!(%="") Q "Patient Refused "
  1. I %="N" Q "Not Medically Indicated "
  1. I %="F" Q "No Response to F/U "
  1. I %="U" Q "Unable to Screen "
  1. Q $$VAL^XBDIQ1(9000022,N,.07)
  1. LASTPAP(P) ;EP - return last pap date
  1. I $$SEX^AUPNPAT(P)'="F" Q ""
  1. NEW BHSY,%,LPAP,T S LPAP="",%=P_"^LAST LAB PAP SMEAR",E=$$START1^APCLDF(%,"BHSY(")
  1. I $D(BHSY(1)) S LPAP=$P(BHSY(1),U)
  1. K BHSY S %=P_"^LAST LAB [BGP PAP SMEAR TAX",E=$$START1^APCLDF(%,"BHSY(")
  1. I $D(BHSY(1)) D
  1. .Q:LPAP>$P(BHSY(1),U)
  1. .S LPAP=$P(BHSY(1),U)
  1. I $$VERSION^XPDUTL("BW")>2 D
  1. .S X=$P($$WHAPI^BWVPAT1(P,$O(^BWVPDT("B","PAP SMEAR",0))),U)
  1. .I X D
  1. ..Q:LPAP>X
  1. ..S LPAP=X
  1. I $$VERSION^XPDUTL("BW")<3 D
  1. .S X="" S T="PAP SMEAR",T=$O(^BWPN("B",T,0))
  1. .I T S X=$$WH^APCHSMU2(P,$$DOB^AUPNPAT(P),DT,T,3)
  1. .I X]"" D
  1. ..Q:LPAP>X
  1. ..S LPAP=X
  1. K BHSY S %=P_"^LAST DX V76.2",E=$$START1^APCLDF(%,"BHSY(")
  1. I $D(BHSY(1)) D
  1. .S V=$P(BHSY(1),U,5) S V=$$PRIMPROV^APCLV(V,"F") I V,$P($G(^DIC(7,V,9999999)),U,3)'="Y" Q
  1. .Q:LPAP>$P(BHSY(1),U)
  1. .S LPAP=$P(BHSY(1),U)
  1. K BHSY S %=P_"^LAST DX V72.31",E=$$START1^APCLDF(%,"BHSY(")
  1. I $D(BHSY(1)) D
  1. .S V=$P(BHSY(1),U,5) S V=$$PRIMPROV^APCLV(V,"F") I V,$P($G(^DIC(7,V,9999999)),U,3)'="Y" Q
  1. .Q:LPAP>$P(BHSY(1),U)
  1. .S LPAP=$P(BHSY(1),U)
  1. K APCHY S %=P_"^LAST DX V72.32",E=$$START1^APCLDF(%,"APCHY(")
  1. I $D(APCHY(1)) D
  1. .S V=$P(APCHY(1),U,5) S V=$$PRIMPROV^APCLV(V,"F") I V,$P($G(^DIC(7,V,9999999)),U,3)'="Y" Q
  1. .Q:LPAP>$P(APCHY(1),U)
  1. .S LPAP=$P(APCHY(1),U)
  1. K APCHY S %=P_"^LAST DX V76.47",E=$$START1^APCLDF(%,"APCHY(")
  1. I $D(APCHY(1)) D
  1. .S V=$P(APCHY(1),U,5) S V=$$PRIMPROV^APCLV(V,"F") I V,$P($G(^DIC(7,V,9999999)),U,3)'="Y" Q
  1. .Q:LPAP>$P(APCHY(1),U)
  1. .S LPAP=$P(APCHY(1),U)
  1. F APCHC="795.01","795.02","795.03","795.05","795.06","795.08","795.09" D
  1. .K APCHY S %=P_"^LAST DX "_APCHC,E=$$START1^APCLDF(%,"APCHY(")
  1. .I $D(APCHY(1)) D
  1. ..S V=$P(APCHY(1),U,5) S V=$$PRIMPROV^APCLV(V,"F") I V,$P($G(^DIC(7,V,9999999)),U,3)'="Y" Q
  1. ..Q:LPAP>$P(APCHY(1),U)
  1. ..S LPAP=$P(APCHY(1),U)
  1. K BHSY S %=P_"^LAST PROCEDURE 91.46",E=$$START1^APCLDF(%,"BHSY(")
  1. I $D(BHSY(1)) D
  1. .Q:LPAP>$P(BHSY(1),U)
  1. .S LPAP=$P(BHSY(1),U)
  1. S T=$O(^ATXAX("B","BGP CPT PAP",0))
  1. S X=$$CPT^APCHSMU2(P,$P(^DPT(P,0),U,3),DT,T,3)
  1. I X D
  1. .Q:LPAP>X
  1. .S LPAP=X
  1. Q $G(LPAP)
  1. LASTFLU(P,C) ;EP - return last flu shot date
  1. NEW BHSY,%,LFLU,T,E S LFLU="",%=P_"^LAST IMMUNIZATION "_C,E=$$START1^APCLDF(%,"BHSY(")
  1. I $D(BHSY(1)) S LFLU=$P(BHSY(1),U)
  1. K BHSY S %=P_"^LAST DX V04.8",E=$$START1^APCLDF(%,"BHSY(")
  1. I $D(BHSY(1)) D
  1. .Q:LFLU>$P(BHSY(1),U)
  1. .S LFLU=$P(BHSY(1),U)
  1. K BHSY S %=P_"^LAST DX V06.6",E=$$START1^APCLDF(%,"BHSY(")
  1. I $D(BHSY(1)) D
  1. .Q:LFLU>$P(BHSY(1),U)
  1. .S LFLU=$P(BHSY(1),U)
  1. K BHSY S %=P_"^LAST PROCEDURE 99.52",E=$$START1^APCLDF(%,"BHSY(")
  1. I $D(BHSY(1)) D
  1. .Q:LFLU>$P(BHSY(1),U)
  1. .S LFLU=$P(BHSY(1),U)
  1. K BHSY NEW % F %=1:1 S T=$T(FLUCPTS+%^APCHSMU1) Q:$P(T,";;",2)="" S T=$P(T,";;",2),T=$O(^ICPT("B",T,0)) I T S BHSY(1)=$O(^AUPNVCPT("AA",P,T,0)) I BHSY(1) S BHSY(1)=9999999-BHSY(1) D
  1. .Q:LFLU>$P(BHSY(1),U)
  1. .S LFLU=$P(BHSY(1),U)
  1. Q $G(LFLU)
  1. LASTBE(P) ;EP
  1. I '$G(P) Q ""
  1. NEW BHSY,LBE,%,E,T,X,Y,V S LBE=""
  1. K BHSY S %=P_"^LAST PROCEDURE 87.64",E=$$START1^APCLDF(%,"BHSY(")
  1. I $D(BHSY(1)) S LBE=$P(BHSY(1),U)
  1. K BHSY NEW % F %=1:1 S T=$T(BECPTS+%^APCHSMU1) Q:$P(T,";;",2)="" S T=$P(T,";;",2),T=$O(^ICPT("B",T,0)) I T S BHSY(1)=$O(^AUPNVCPT("AA",P,T,0)) I BHSY(1) S BHSY(1)=9999999-BHSY(1) D
  1. .Q:LBE>$P(BHSY(1),U)
  1. .S LBE=$P(BHSY(1),U)
  1. S (X,Y,V)=0 F S X=$O(^AUPNVRAD("AC",P,X)) Q:X'=+X D
  1. .S V=$P(^AUPNVRAD(X,0),U,3),V=$P($P($G(^AUPNVSIT(V,0)),U),".")
  1. .S Y=$P(^AUPNVRAD(X,0),U),Y=$P($G(^RAMIS(71,Y,0)),U,9)
  1. .I Y=74280,V>LBE S LBE=V Q
  1. .I Y=74270,V>LBE S LBE=V Q
  1. .I Y=74275,V>LBE S LBE=V Q
  1. Q $G(LBE)
  1. LASTCOLO(P) ;EP
  1. I '$G(P) Q ""
  1. NEW BHSY,LCOLO,%,E,T S LCOLO=""
  1. K BHSY S %=P_"^LAST PROCEDURE 45.43",E=$$START1^APCLDF(%,"BHSY(")
  1. I $D(BHSY(1)) S LCOLO=$P(BHSY(1),U)
  1. K BHSY S %=P_"^LAST PROCEDURE 45.22",E=$$START1^APCLDF(%,"BHSY(")
  1. I $D(BHSY(1)) D
  1. .Q:LCOLO>$P(BHSY(1),U)
  1. .S LCOLO=$P(BHSY(1),U)
  1. K BHSY S %=P_"^LAST PROCEDURE 45.23",E=$$START1^APCLDF(%,"BHSY(")
  1. I $D(BHSY(1)) D
  1. .Q:LCOLO>$P(BHSY(1),U)
  1. .S LCOLO=$P(BHSY(1),U)
  1. K BHSY S %=P_"^LAST PROCEDURE 45.25",E=$$START1^APCLDF(%,"BHSY(")
  1. I $D(BHSY(1)) D
  1. .Q:LCOLO>$P(BHSY(1),U)
  1. .S LCOLO=$P(BHSY(1),U)
  1. ;K BHSY NEW % F %=1:1 S T=$T(COLOCPTS+%^APCHSMU1) Q:$P(T,";;",2)="" S T=$P(T,";;",2),T=$O(^ICPT("B",T,0)) I T S BHSY(1)=$O(^AUPNVCPT("AA",P,T,0)) I BHSY(1) S BHSY(1)=9999999-BHSY(1) D
  1. ;.Q:LCOLO>$P(BHSY(1),U)
  1. ;.S LCOLO=$P(BHSY(1),U)
  1. S T=$O(^ATXAX("B","BGP COLO CPTS",0))
  1. S X=$$CPT^APCHSMU2(P,$P(^DPT(P,0),U,3),DT,T,3)
  1. I X D
  1. .S LCOLO=X
  1. Q $G(LCOLO)
  1. LASTSIG(P) ;EP
  1. I '$G(P) Q ""
  1. NEW BHSY,LSIG,%,E,T S LSIG=""
  1. K BHSY S %=P_"^LAST PROCEDURE 45.24",E=$$START1^APCLDF(%,"BHSY(")
  1. I $D(BHSY(1)) S LSIG=$P(BHSY(1),U)
  1. K BHSY S %=P_"^LAST PROCEDURE 48.23",E=$$START1^APCLDF(%,"BHSY(")
  1. I $D(BHSY) D
  1. .Q:LSIG>$P(BHSY(1),U)
  1. .S LSIG=$P(BHSY(1),U)
  1. K BHSY NEW % F %=1:1 S T=$T(SIGCPTS+%^APCHSMU1) Q:$P(T,";;",2)="" S T=$P(T,";;",2),T=$O(^ICPT("B",T,0)) I T S BHSY(1)=$O(^AUPNVCPT("AA",P,T,0)) I BHSY(1) S BHSY(1)=9999999-BHSY(1) D
  1. .Q:LSIG>$P(BHSY(1),U)
  1. .S LSIG=$P(BHSY(1),U)
  1. Q $G(LSIG)
  1. LASTVISI(P) ;EP - get last vision exam (exam,measurments)
  1. I '$G(P) Q ""
  1. NEW D,%
  1. S D=$$LASTITEM(P,"19","EXAM")
  1. S %=$$LASTITEM(P,"07","MEASUREMENT")
  1. I %]D S D=%
  1. S %=$$LASTITEM(P,"08","MEASUREMENT")
  1. I %]D S D=%
  1. Q D
  1. LASTHEAR(P) ;EP
  1. I '$G(P) Q ""
  1. NEW D,%
  1. S D=$$LASTITEM(P,"17","EXAM")
  1. S %=$$LASTITEM(P,"23","EXAM")
  1. I %>D S D=%
  1. S %=$$LASTITEM(P,"24","EXAM")
  1. I %>D S D=%
  1. S %=$$LASTITEM(P,"09","MEASUREMENT")
  1. I %>D S D=%
  1. S %=$$LASTITEM(P,10,"MEASUREMENT")
  1. I %>D S D=%
  1. Q D
  1. LASTHF(P,C,F) ;EP - get last factor in category C for patient P
  1. I '$G(P) Q ""
  1. I $G(C)="" Q ""
  1. I $G(F)="" S F=""
  1. S C=$O(^AUTTHF("B",C,0)) ;ien of category passed
  1. I '$G(C) Q ""
  1. NEW H,D,O S H=0 K O
  1. F S H=$O(^AUTTHF("AC",C,H)) Q:'+H D
  1. . Q:'$D(^AUPNVHF("AA",P,H))
  1. . S D=$O(^AUPNVHF("AA",P,H,""))
  1. . Q:'D
  1. . S O(D)=$O(^AUPNVHF("AA",P,H,D,""))
  1. . Q
  1. S D=$O(O(0))
  1. I D="" Q D
  1. I F="N" Q $$VAL^XBDIQ1(9000010.23,O(D),.01)
  1. I F="S" Q $P($G(^AUPNVHF(O(D),0)),U,6)
  1. I F="B" Q $$VAL^XBDIQ1(9000010.23,O(D),.01)_" "_$$FMTE^XLFDT((9999999-D))
  1. Q 9999999-D
  1. ;
  1. FRSTITEM(P,V,T,F) ;EP - return last item V
  1. I $G(F)="" S F="D"
  1. NEW BHSY,%,E,Y K BHSY S %=P_"^FIRST "_T_" "_V,E=$$START1^APCLDF(%,"BHSY(")
  1. Q $S(F="D":$P($G(BHSY(1)),"^"),1:$P($G(BHSY(1)),"^",2))
  1. ;