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

APCHPWH4.m

Go to the documentation of this file.
  1. APCHPWH4 ; IHS/CMI/LAB - PCC HEALTH SUMMARY - MAIN DRIVER PART 2 ;
  1. ;;2.0;IHS PCC SUITE;**3,6,7,11**;MAY 14, 2009;Build 58
  1. ;
  1. ;EO MEASURES IN PWH
  1. EO ;EP - EO measures
  1. Q ;;PLEASE NOTE THIS COMPONENT IS BEING DISABLE, I DIDN'T DELETE IT SINCE IT MAY BE
  1. ;;POINTED TO BUT NOTHING WILL DISPLAY
  1. I '$O(^APCHPWHT(APCHPWHT,1,APCHSORD,11,0)) Q ;no measures defined
  1. NEW APCHSTO,APCHSTM,APCHSTCE
  1. D SUBHEAD^APCHPWHU
  1. D S^APCHPWH1("QUALITY OF CARE TRANSPARENCY REPORT CARD - This report looks at")
  1. D S^APCHPWH1("6 quality measures. This report card enables you to compare your")
  1. D S^APCHPWH1("personal results to those on the IHS Quality of Care website at:")
  1. D S^APCHPWH1("http://www.ihs.gov/NonMedicalPrograms/quality/. Your personal ")
  1. D S^APCHPWH1("information is listed below.")
  1. ;
  1. ;go through each one
  1. S APCHSTO=0 F S APCHSTO=$O(^APCHPWHT(APCHPWHT,1,APCHSORD,11,APCHSTO)) Q:APCHSTO'=+APCHSTO D
  1. .S APCHSTM=$P($G(^APCHPWHT(APCHPWHT,1,APCHSORD,11,APCHSTO,0)),U,2)
  1. .Q:'APCHSTM
  1. .Q:'$D(^APCHPWHE(APCHSTM,0))
  1. .S APCHSTCE=$G(^APCHPWHE(APCHSTM,1))
  1. .I APCHSTCE="" Q
  1. .X APCHSTCE
  1. .Q
  1. Q
  1. ;
  1. DGC ;EP - diabetes and glycemic control
  1. NEW APCHX
  1. Q:$$AGE^AUPNPAT(APCHSDFN,DT)<18
  1. D S^APCHPWH1("Diabetes and Glycemic (A1c) Control",1)
  1. I '$$DMDX^APCHPWH2(APCHSDFN) D Q
  1. .D S^APCHPWH1("This section only reports on people who have diabetes. You do not")
  1. .D S^APCHPWH1("have diabetes, so you are not included in this report.")
  1. .Q
  1. S APCHX=$$HGBA1C(APCHSDFN,$$FMADD^XLFDT(DT,-365),DT) ;365 days ago
  1. I APCHX="" D K APCHX Q
  1. .D S^APCHPWH1("Your A1c was not checked in the past year. We recommend that you have ")
  1. .D S^APCHPWH1("your A1c checked at least twice a year.")
  1. .Q
  1. I $P(APCHX,U,2)="" D Q
  1. .D S^APCHPWH1("Your A1c was checked on "_$P(APCHX,U)_" but there is no result on file. We")
  1. .D S^APCHPWH1("recommend that you ask your provider about your A1c value.")
  1. D S^APCHPWH1("Your A1c value on "_$P(APCHX,U)_" was "_$P(APCHX,U,2)_". An A1c")
  1. D S^APCHPWH1("less than 7% means good blood sugar control. An A1c of more than 9% means")
  1. D S^APCHPWH1("that you may need better blood sugar control.")
  1. Q
  1. HGBA1C(P,BDATE,EDATE,APCHRR) ;EP - get result of HGBA1c in past year. If no result pass null
  1. ;pass back date_u_result
  1. S APCHRR=$G(APCHRR)
  1. I $G(BDATE)="" S BDATE=$$DOB^AUPNPAT(P)
  1. I $G(EDATE)="" S EDATE=DT
  1. NEW APCHG,APCHT,APCHC,E,%,L,T,APCHLT,D,X,J,C,G
  1. S APCHC=0
  1. I 'APCHRR S G=$$LASTCPTT^APCLAPIU(P,BDATE,EDATE,"BGP HGBA1C CPTS","A") I G]"" S APCHC=APCHC+1,APCHT((9999999-$P(G,U,1)),APCHC)=U_$P(G,U,2)
  1. ;now get all loinc/taxonomy tests
  1. S T=$O(^ATXAX("B","BGP HGBA1C LOINC CODES",0))
  1. S APCHLT=$O(^ATXLAB("B","DM AUDIT HGB A1C TAX",0))
  1. S B=9999999-BDATE,E=9999999-EDATE S D=E-1 F S D=$O(^AUPNVLAB("AE",P,D)) Q:D'=+D!(D>B) D
  1. .S L=0 F S L=$O(^AUPNVLAB("AE",P,D,L)) Q:L'=+L D
  1. ..S X=0 F S X=$O(^AUPNVLAB("AE",P,D,L,X)) Q:X'=+X D
  1. ...Q:'$D(^AUPNVLAB(X,0))
  1. ...I APCHRR,$P(^AUPNVLAB(X,0),U,4)="" Q
  1. ...I APCHRR,$$UP^XLFSTR($P(^AUPNVLAB(X,0),U,4))="COMMENT" Q
  1. ...I APCHLT,$P(^AUPNVLAB(X,0),U),$D(^ATXLAB(APCHLT,21,"B",$P(^AUPNVLAB(X,0),U))) S APCHC=APCHC+1,APCHT(D,APCHC)=$P(^AUPNVLAB(X,0),U,4)_U_"LAB: "_$$VAL^XBDIQ1(9000010.09,X,.01) Q
  1. ...Q:'T
  1. ...S J=$P($G(^AUPNVLAB(X,11)),U,13) Q:J=""
  1. ...Q:'$$LOINC(J,T)
  1. ...S APCHC=APCHC+1,APCHT(D,APCHC)=$P(^AUPNVLAB(X,0),U,4)_U_"LAB LOINC: "_$$VAL^XBDIQ1(9000010.09,X,.01)_" "_$P(^AUPNVLAB(X,11),U,13)
  1. ...Q
  1. I '$D(APCHT) Q "" ;no tests
  1. ; now get rid of all on same day where 1 has a result and the other doesn't
  1. S D=0,APCHC=0 F S D=$O(APCHT(D)) Q:D'=+D S C=0,G=0 F S C=$O(APCHT(D,C)) Q:C'=+C D
  1. .I $P(APCHT(D,C),U,1)]"" S APCHC=APCHC+1
  1. .I APCHC>0,$P(APCHT(D,C),U,1)="" K APCHT(D,C)
  1. S D=0,G=""
  1. S D=$O(APCHT(D))
  1. S C=0,C=$O(APCHT(D,C))
  1. S X=$P(APCHT(D,C),U,1)
  1. I X="",$G(APCHRR) Q ""
  1. I X="" D Q G
  1. .S G=""
  1. .I $P(APCHT(D,C),U,2)="CPT: 3046F" S G=$$FMTE^XLFDT(9999999-D)_U_">9.0%"_U_(9999999-D) Q
  1. .I $P(APCHT(D,C),U,2)="CPT: 3047F" S G=$$FMTE^XLFDT(9999999-D)_U_"<= 9.0%"_U_(9999999-D) Q
  1. .I $P(APCHT(D,C),U,2)="CPT: 3044F" S G=$$FMTE^XLFDT(9999999-D)_U_"< 7.0%"_U_(9999999-D) Q
  1. .I $P(APCHT(D,C),U,2)="CPT: 3045F" S G=$$FMTE^XLFDT(9999999-D)_U_"7.0-9.0%"_U_(9999999-D) Q
  1. .Q
  1. Q $$FMTE^XLFDT((9999999-D))_U_X_U_(9999999-D)
  1. ;
  1. DLDL ;EP - LDL
  1. NEW APCHX
  1. Q:$$AGE^AUPNPAT(APCHSDFN,DT)<18
  1. D S^APCHPWH1("Diabetes and LDL Control",1)
  1. I '$$DMDX^APCHPWH2(APCHSDFN) D Q
  1. .D S^APCHPWH1("This section only reports on people who have diabetes. You do not")
  1. .D S^APCHPWH1("have diabetes, so you are not included in this report.")
  1. .Q
  1. S APCHX=$$LDL(APCHSDFN,$$FMADD^XLFDT(DT,-365),DT,1) ;365 days ago
  1. I APCHX="" D K APCHX Q
  1. .D S^APCHPWH1("Your LDL was not checked in the past year. We recommend that you have ")
  1. .D S^APCHPWH1("your LDL checked at least once a year.")
  1. .Q
  1. D S^APCHPWH1("Your LDL value on "_$$FMTE^XLFDT($P(APCHX,U))_" was "_$P(APCHX,U,2)_$S($P(APCHX,U,3)]"":" "_$P(APCHX,U,3),1:"")_". An LDL less than 100 mg/dl")
  1. D S^APCHPWH1("is good. Sometimes it is better to have a lower LDL value. Talk to your")
  1. D S^APCHPWH1("health care provider about an LDL value that is good for you.")
  1. Q
  1. ;
  1. LDL(P,BDATE,EDATE,NORES) ;EP
  1. NEW APCHG,APCHT,APCHC,APCHLT,T,B,E,D,L,X,R,G,C,%
  1. K APCHG,APCHT,APCHC
  1. S APCHC=0
  1. S NORES=$G(NORES)
  1. ;now get all loinc/taxonomy tests
  1. S T=$O(^ATXAX("B","BGP LDL LOINC CODES",0))
  1. S APCHLT=$O(^ATXLAB("B","DM AUDIT LDL CHOLESTEROL TAX",0))
  1. S B=9999999-BDATE,E=9999999-EDATE S D=E-1 F S D=$O(^AUPNVLAB("AE",P,D)) Q:D'=+D!(D>B) D
  1. .S L=0 F S L=$O(^AUPNVLAB("AE",P,D,L)) Q:L'=+L D
  1. ..S X=0 F S X=$O(^AUPNVLAB("AE",P,D,L,X)) Q:X'=+X D
  1. ...Q:'$D(^AUPNVLAB(X,0))
  1. ...I $G(NORES) Q:$P(^AUPNVLAB(X,0),U,4)=""
  1. ...S R=$P(^AUPNVLAB(X,0),U,4)
  1. ...I $G(NORES),'R Q
  1. ...I $G(NORES),$$UP^XLFSTR(X)["COMMENT" Q
  1. ...I APCHLT,$P(^AUPNVLAB(X,0),U),$D(^ATXLAB(APCHLT,21,"B",$P(^AUPNVLAB(X,0),U))) S APCHC=APCHC+1,APCHT(D,APCHC)=$P(^AUPNVLAB(X,0),U,4)_U_$P($G(^AUPNVLAB(X,11)),U,1) Q
  1. ...Q:'T
  1. ...S J=$P($G(^AUPNVLAB(X,11)),U,13) Q:J=""
  1. ...Q:'$$LOINC(J,T)
  1. ...S R=$P(^AUPNVLAB(X,0),U,4)
  1. ...S APCHC=APCHC+1,APCHT(D,APCHC)=R_U_$P($G(^AUPNVLAB(X,11)),U,1)
  1. ...Q
  1. ; now got though and set return value of done 1 or 0^VALUE^date
  1. S D=0,G="" F S D=$O(APCHT(D)) Q:D'=+D!(G]"") D
  1. .S C=0 F S C=$O(APCHT(D,C)) Q:C'=+C!(G]"") D
  1. ..S X=$P(APCHT(D,C),U)
  1. ..S G=(9999999-D)_U_X_U_$P(APCHT(D,C),U,2)
  1. ..Q
  1. Q G
  1. ;
  1. LOINC(A,B) ;EP
  1. NEW %
  1. S %=$P($G(^LAB(95.3,A,9999999)),U,2)
  1. I %]"",$D(^ATXAX(B,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(B,21,"B",%)) Q 1
  1. Q ""
  1. ;
  1. DBP ;EP
  1. Q:$$AGE^AUPNPAT(APCHSDFN,DT)<18
  1. NEW APCHX
  1. D S^APCHPWH1("Diabetes and BP Control",1)
  1. I '$$DMDX^APCHPWH2(APCHSDFN) D Q
  1. .D S^APCHPWH1("This section only reports on people who have diabetes. You do not")
  1. .D S^APCHPWH1("have diabetes, so you are not included in this report.")
  1. .Q
  1. S APCHX=$$LASTITEM^APCLAPIU(APCHSDFN,"BP","MEASUREMENT",$$FMADD^XLFDT(DT,-365),DT,"A")
  1. I APCHX="" D K APCHX Q
  1. .D S^APCHPWH1("Your Blood Pressure was not checked in the past year. We recommend that")
  1. .D S^APCHPWH1("you have your Blood Pressure checked at least three times a year.")
  1. .Q
  1. D S^APCHPWH1("Your Blood Pressure on "_$$FMTE^XLFDT($P(APCHX,U))_" was "_$P(APCHX,U,3)_". A blood pressure that is")
  1. D S^APCHPWH1("less than or equal to 140/90 is good for some people. If you have diabetes")
  1. D S^APCHPWH1("or kidney problems, you may want your blood pressure to be less than 130/80.")
  1. D S^APCHPWH1("Talk to your health care provider about a blood pressure that is good for you.")
  1. Q
  1. ;
  1. FLU ;EP - FLU
  1. NEW APCHX
  1. D S^APCHPWH1("Flu Shot (Influenza) Vaccine",1)
  1. I $$AGE^AUPNPAT(APCHSDFN,DT)<50 D Q
  1. .D S^APCHPWH1("This section only reports on people who are 50 years of age or older.")
  1. .D S^APCHPWH1("You are younger than 50, so you are not included in this report.")
  1. .Q
  1. S APCHX=$$LASTFLU^APCLAPI4(APCHSDFN,$$FMADD^XLFDT(DT,-365),DT,"A")
  1. I APCHX="" D K APCHX Q
  1. .D S^APCHPWH1("You did not have a flu shot this year. We recommend that you have a flu shot")
  1. .D S^APCHPWH1("every year.")
  1. .Q
  1. D S^APCHPWH1("You had your flu shot on "_$$FMTE^XLFDT($P(APCHX,U))_". We recommend that you have a ")
  1. D S^APCHPWH1("flu shot every year.")
  1. Q
  1. ;
  1. O2 ;EP - OXYGEN ASSESSMENT
  1. NEW APCHX,X,Y
  1. I $$AGE^AUPNPAT(APCHSDFN,DT)<18 D Q
  1. .D S^APCHPWH1("")
  1. D S^APCHPWH1("Assessment of Oxygen Status",1)
  1. D PNEUOX(APCHSDFN,$$FMADD^XLFDT(DT,-365),DT,.APCHX)
  1. ;
  1. I 'APCHX("DENOM")!($$AGE^AUPNPAT(APCHSDFN,DT)<18) D Q
  1. .D S^APCHPWH1("This section only reports on people who came to the clinic or emergency")
  1. .D S^APCHPWH1("room with pneumonia. You did not come to the clinic this year with")
  1. .D S^APCHPWH1("pneumonia so you are not included in this report.")
  1. .Q
  1. S X=0 F S X=$O(APCHX(X)) Q:X'=+X D
  1. .S Y=$$FMTE^XLFDT($P(APCHX(X),U,3))
  1. .D S^APCHPWH1("You came to the hospital with pneumonia on "_Y_". The goal is to have",1)
  1. .D S^APCHPWH1("your oxygen level checked within 24 hours of your hospital visit. Your")
  1. .D S^APCHPWH1("oxygen level was "_$S($P(APCHX(X),U,2)["NOT MET":"not ",1:"")_"checked within 24 hours of your hospital visit.")
  1. Q
  1. ;
  1. PNEUOX(P,BDATE,EDATE,APCHR) ;EP
  1. NEW A,B,C,D,E,F,G,APCHG,APCHX,APCHD,APCHV,APCHC
  1. K APCHG,APCHR
  1. S APCHR="",APCHR(0)=""
  1. S X=P_"^ALL DX [BGP CMS PNEUMONIA;DURING "_$$FMTE^XLFDT(BDATE)_"-"_$$FMTE^XLFDT(EDATE) S E=$$START1^APCLDF(X,"APCHG(")
  1. I '$D(APCHG(1)) S APCHR("DENOM")=0 Q
  1. ;now go through and get rid of CHS or service category not A, O, S
  1. S A=0 F S A=$O(APCHG(A)) Q:A'=+A D
  1. .S V=$P(APCHG(A),U,5)
  1. .I '$D(^AUPNVSIT(V,0)) K APCHG(A)
  1. .I $P(^AUPNVSIT(V,0),U,3)="C" K APCHG(A)
  1. .I "AOS"'[$P(^AUPNVSIT(V,0),U,7) K APCHG(A)
  1. I '$D(APCHG) S APCHR("DENOM")=0 Q ;got rid of them all
  1. ;reorder the diagnoses by visit date
  1. S A=0 F S A=$O(APCHG(A)) Q:A'=+A S V=$P(APCHG(A),U,5),D=$P($P($G(^AUPNVSIT(V,0)),U),"."),APCHX(D,V)=APCHG(A)
  1. ;now get the first one
  1. S APCHD=0,APCHC=0 F S APCHD=$O(APCHX(APCHD)) Q:APCHD'=+APCHD D
  1. .S APCHV=0 F S APCHV=$O(APCHX(APCHD,APCHV)) Q:APCHV'=+APCHV D
  1. ..S APCHC=APCHC+1,APCHR(APCHC)=APCHC_") "_$$FMTE^XLFDT(APCHD)_" "_$P(APCHX(APCHD,APCHV),U,2) ;set denominator
  1. ..S G=$$OXSAT(APCHV) ; any o2 saturation on this visit?
  1. ..S $P(APCHR(APCHC),U,2)=APCHC_") "_$P(G,U,1) ;set numerator column
  1. ..S $P(APCHR(APCHC),U,3)=APCHD
  1. ..S $P(APCHR(0),U,$P(G,U,2))=$P(APCHR(0),U,$P(G,U,2))+1
  1. ..;now delete out all visits that are <46 days difference and all other visits on the same day
  1. ..S V=APCHV F S V=$O(APCHX(APCHD,V)) Q:V'=+V K APCHX(APCHD,V)
  1. ..S D=APCHD,V=APCHV F S D=$O(APCHX(D)) Q:D'=+D D
  1. ...S V=0 F S V=$O(APCHX(D,V)) Q:V'=+V I $$FMDIFF^XLFDT(D,APCHD)<46 K APCHX(D,V)
  1. S APCHR("DENOM")=APCHC
  1. Q
  1. ;
  1. OXSAT(V) ;was there ox sat at the visit
  1. ;get all O2 measurements on or after admission date
  1. NEW APCHD,X,N,E,Y,T,D,C,APCHLT,L,J,APCHG,M,M1
  1. S APCHG=""
  1. S APCHD=$P($P(^AUPNVSIT(V,0),U),".")
  1. ;K APCHG S Y="APCHG(",X=P_"^ALL MEAS O2;DURING "_$$FMTE^XLFDT(BD)_"-"_$$FMTE^XLFDT(ED) S E=$$START1^APCLDF(X,Y)
  1. S X=0 F S X=$O(^AUPNVMSR("AD",V,X)) Q:X'=+X!(APCHG]"") I $$VAL^XBDIQ1(9000010.01,X,.01)="O2",'$P($G(^AUPNVMSR(X,2)),U,1) S APCHG=$$FMTE^XLFDT(APCHD)_" MET O2 SAT^1"
  1. I APCHG]"" Q APCHG
  1. ;now check for cpts
  1. S T=$O(^ATXAX("B","BGP CMS ABG CPTS",0))
  1. S X=0 F S X=$O(^AUPNVCPT("AD",V,X)) Q:X'=+X!(APCHG]"") D
  1. .Q:'$D(^AUPNVCPT(X,0))
  1. .S C=$P(^AUPNVCPT(X,0),U)
  1. .Q:'$$ICD^ATXAPI(C,T,1)
  1. .S M=$$VAL^XBDIQ1(9000010.18,X,.08)
  1. .S M1=$$VAL^XBDIQ1(9000010.18,X,.09)
  1. .I $P(^ICPT(C,0),U)="3028F",(M="1P"!(M="2P")!(M="3P")!(M="4P")!(M="8P")) Q ;3028f and has modifier
  1. .I $P(^ICPT(C,0),U)="3028F",(M1="1P"!(M="2P")!(M="3P")!(M="4P")!(M="8P")) Q ;3028f and has modifier
  1. .S APCHG=$$FMTE^XLFDT(APCHD)_" MET CPT ["_$P($$CPT^ICPTCOD(C),U,2)_"]^1"
  1. .Q
  1. I APCHG]"" Q APCHG
  1. ;now check v tran
  1. S T=$O(^ATXAX("B","BGP CMS ABG CPTS",0))
  1. S X=0 F S X=$O(^AUPNVTC("AD",V,X)) Q:X'=+X!(APCHG]"") D
  1. .Q:'$D(^AUPNVTC(X,0))
  1. .S C=$P(^AUPNVTC(X,0),U,7)
  1. .Q:C=""
  1. .Q:'$$ICD^ATXAPI(C,T,1)
  1. .S APCHG=$$FMTE^XLFDT(APCHD)_" MET CPT/TRAN ["_$P($$CPT^ICPTCOD(C),U,2)_"]^1"
  1. .Q
  1. I APCHG]"" Q APCHG
  1. ;now check for lab tests
  1. S T=$O(^ATXAX("B","BGP CMS ABG LOINC",0))
  1. S APCHLT=$O(^ATXLAB("B","BGP CMS ABG TESTS",0))
  1. S X=0 F S X=$O(^AUPNVLAB("AD",V,X)) Q:X'=+X!(APCHG]"") D
  1. .Q:'$D(^AUPNVLAB(X,0))
  1. .I APCHLT,$P(^AUPNVLAB(X,0),U),$D(^ATXLAB(APCHLT,21,"B",$P(^AUPNVLAB(X,0),U))) S APCHG=$$FMTE^XLFDT(APCHD)_" MET "_$$VAL^XBDIQ1(9000010.09,X,.01)_"^1" Q
  1. .Q:'T
  1. .S J=$P($G(^AUPNVLAB(X,11)),U,13) Q:J=""
  1. .Q:'$$LOINC(J,T)
  1. .S APCHG=$$FMTE^XLFDT(APCHD)_" MET "_$$VAL^XBDIQ1(9000010.09,X,.01)_"^1" Q
  1. I APCHG]"" Q APCHG
  1. ;now go get refusals of any of the above
  1. ;
  1. S G=$$REFUSAL^APCHSMU(P,9999999.07,$O(^AUTTMSR("B","O2",0)),APCHD,APCHD)
  1. I G Q $$FMTE^XLFDT(APCHD)_" NOT MET DECLINED O2 SAT^2"
  1. ;refusal of lab tests
  1. S T=$O(^ATXLAB("B","BGP CMS ABG TESTS",0))
  1. S L=0 F S L=$O(^ATXLAB(T,21,"B",L)) Q:L'=+L!(APCHG]"") D
  1. .S G=$$REFUSAL^APCHSMU(P,60,L,APCHD,APCHD)
  1. .I G S APCHG=$$FMTE^XLFDT(APCHD)_" NOT MET DECLINED LAB^2"
  1. I APCHG]"" Q APCHG
  1. S G=$$CPTREFT^APCHSMU(P,APCHD,APCHD,$O(^ATXAX("B","BGP CMS ABG CPTS",0)))
  1. I G Q $$FMTE^XLFDT(APCHD)_" NOT MET DECLINED CPT^2"
  1. Q $$FMTE^XLFDT(APCHD)_" NOT MET; NO ASSMT^3"
  1. ;