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

APCHPST2.m

Go to the documentation of this file.
  1. APCHPST2 ; IHS/CMI/LAB - Patient Health Summary - Post Visit ;
  1. ;;2.0;IHS PCC SUITE;;MAY 14, 2009
  1. ;
  1. ;
  1. ;
  1. EP ;EP - meds/ allergies/ measurements
  1. MEDS ;
  1. S X="Medicines are important - it helps to know" D S(X,1)
  1. S X="",$E(X,5)="Why you will take it?" D S(X)
  1. S X="",$E(X,5)="When to take it?" D S(X)
  1. S X="",$E(X,5)="How much to take?" D S(X)
  1. S X="",$E(X,5)="What to do if you forget to take it?" D S(X)
  1. S X="",$E(X,5)="What could happen if you forget or take too much." D S(X)
  1. S X="Knowing these things will help the medicine work best for you." D S(X)
  1. S X="Here is a list of the medicines you are taking:" D S(X)
  1. S X="" D S(X)
  1. ;
  1. ;get all "active" meds
  1. S APCHSDLM=$$FMADD^XLFDT(DT,-365),APCHSDLM=9999999-APCHSDLM
  1. S APCHSIVD=0,APCHSMCT=0 F APCHSQ=0:0 S APCHSIVD=$O(^AUPNVMED("AA",APCHSDFN,APCHSIVD)) Q:APCHSIVD=""!(APCHSIVD>APCHSDLM) S APCHSMX=0 F APCHSQ=0:0 S APCHSMX=$O(^AUPNVMED("AA",APCHSDFN,APCHSIVD,APCHSMX)) Q:APCHSMX="" D MEDBLD
  1. I $G(APCHSMCT)=0 S X="",$E(X,5)="No current meds on file" D S(X)
  1. S APCHSMED=""
  1. F S APCHSMED=$O(APCHSM(APCHSMED)) Q:$G(APCHSMED)']"" D
  1. .S X="",$E(X,10)=APCHSMED D S(X)
  1. .Q
  1. S X="Some other questions to ask your doctor, nurse or pharmacist about" D S(X,1)
  1. S X="your medications:" D S(X)
  1. S X="",$E(X,5)="Each medicine has 2 names -- the company name and a generic name" D S(X)
  1. S X="",$E(X,5)="of the ingredient." D S(X)
  1. S X="",$E(X,5)="What is the medicine supposed to do?" D S(X)
  1. S X="",$E(X,5)="When should I see or feel that the medicine is working?" D S(X)
  1. S X="",$E(X,5)="What are things that I might see or feel, called side effects?" D S(X)
  1. S X="",$E(X,5)="What should I do if they occur?" D S(X)
  1. S X="",$E(X,5)="Is the medicine for just a short time -- days or weeks -- or months/years?" D S(X)
  1. S X="",$E(X,5)="Are there any foods, drinks, other medicines, dietary supplements that" D S(X)
  1. S X="",$E(X,5)="will keep the medicine from working or make it dangerous?" D S(X)
  1. ;
  1. ALLERG ;
  1. S X="Allergies, reactions that you've had to medicines or other things are very" D S(X,1)
  1. S X="important. Below are the allergies that we know. If anything is wrong or" D S(X)
  1. S X="missing, please let your provider know." D S(X)
  1. S X="" D S(X)
  1. S APCHSALD=0,APCHSALP=0,APCHSALG=0
  1. D EN^APCHPALG ;get allergies from allergy tracking and problem list
  1. ;I $D(APCHENT) S X="",$E(X,5)="From Allergy Tracking System:",$E(X,45)="(v)=verified (u)=unverified" D S(X)
  1. I $D(APCHENT) S X="",$E(X,5)="From Allergy Tracking System:" D S(X)
  1. I $D(APCHENT("A")) F S APCHSALD=$O(APCHENT("A",APCHSALD)) Q:APCHSALD'=+APCHSALD D
  1. .Q:$G(APCHSALD)']""
  1. .F I $D(APCHENT("A")) S APCHSALP=$O(APCHENT("A",APCHSALD,APCHSALP)) Q:APCHSALP="" Q:APCHSALD'=+APCHSALD D
  1. ..S APCHSALG=1
  1. ..S X="",$E(X,5)=$G(APCHENT("A",APCHSALD,APCHSALP)) D S(X)
  1. ..Q
  1. I $D(APCHENT("P")) F S APCHSALD=$O(APCHENT("P",APCHSALD)) Q:APCHSALD'=+APCHSALD D
  1. .Q:$G(APCHSALD)']""
  1. .F I $D(APCHENT("P")) S APCHSALP=$O(APCHENT("P",APCHSALD,APCHSALP)) Q:APCHSALP="" Q:APCHSALD'=+APCHSALD D
  1. ..S APCHSALG=1
  1. ..S X="",$E(X,5)=$G(APCHENT("P",APCHSALD,APCHSALP)) D S(X)
  1. ..Q
  1. I $D(APCHENT("U")) F S APCHSALD=$O(APCHENT("U",APCHSALD)) Q:APCHSALD'=+APCHSALD D
  1. .Q:$G(APCHSALD)']""
  1. .F I $D(APCHENT("U")) S APCHSALP=$O(APCHENT("U",APCHSALD,APCHSALP)) Q:APCHSALP="" Q:APCHSALD'=+APCHSALD D
  1. ..S APCHSALG=1
  1. ..S X="",$E(X,5)=$G(APCHENT("A",APCHSALD,APCHSALP)) D S(X)
  1. ..Q
  1. ;
  1. S APCHSALD=0,APCHSALP=0,APCHSAPR=0
  1. D PROBA^APCHPALG ;get allergies from Problem List
  1. I $D(APCHSPT) S X="",$E(X,5)="From Problem List" D S(X,1)
  1. I $D(APCHSPT) F S APCHSALD=$O(APCHSPT(APCHSALD)) Q:APCHSALD'=+APCHSALD D
  1. .S APCHSALP=$O(APCHSPT(APCHSALP))
  1. .Q:APCHSALP'=+APCHSALP
  1. .S APCHSAPR=1
  1. .S X="",$E(X,5)=$G(APCHSPT(APCHSALP)) D S(X)
  1. .Q
  1. I APCHSALG=0,APCHSAPR=0 S X="",$E(X,5)="No allergies on file." D S(X)
  1. ;
  1. MEAS ;
  1. S X="Weight is a good measure of health - and it depends on how tall you are." D S(X,1)
  1. D GETHWBBP(APCHSDFN)
  1. ;Convert APCHX("HT") to ft & inches
  1. I $G(APCHX("HT"))]"" S APCHFEET=APCHX("HT")/12,APCHINCH=$P(APCHFEET,".",2),APCHINCH="."_APCHINCH*12,APCHINCH=$J(APCHINCH,2,0),APCHFEET=$P(APCHFEET,".")
  1. I $G(APCHX("HT"))]"" S X="",$E(X,5)="You are "_APCHFEET_" feet and "_APCHINCH_" inches tall." D S(X)
  1. ;
  1. I $G(APCHX("WT"))="" S X="",$E(X,5)="No weight on file." D S(X)
  1. I $G(APCHX("HT"))']"" S X="",$E(X,5)="No height on file." D S(X)
  1. I $G(APCHX("WT"))]"" S X="",$E(X,5)="Your last weight is "_$J(APCHX("WT"),3,0)_" pounds." D S(X)
  1. I $G(APCHX("WT"))]"",$$FMDIFF^XLFDT(DT,APCHX("WTD"))>120 S X="",$E(X,5)="You should have your weight rechecked at your next visit" D S(X)
  1. I $G(APCHX("WTD"))]"",APCHX("WTD")=DT,$G(APCHX("BMI"))]"" D
  1. .S X="",$E(X,5)="Your Body Mass Index today was "_APCHX("BMI")_". This is a good way to" D S(X)
  1. .S X="",$E(X,5)="compare your height and weight." D S(X)
  1. .Q
  1. I $G(APCHX("WTD"))]"",APCHX("WTD")<DT,$G(APCHX("BMI"))]"" D
  1. .S X="",$E(X,5)="Your Body Mass Index on "_$$FMTE^XLFDT(APCHX("WTD"))_" was "_APCHX("BMI")_"." D S(X)
  1. .Q
  1. I $G(APCHX("BMI"))]"",APCHX("BMI")<25 S X="",$E(X,5)="You are at a healthy weight. Keep up the good work!" D S(X)
  1. I APCHX("BMI")>26 D
  1. .S X="",$E(X,5)="You are above a healthy weight. Too much weight can lead to lots" D S(X)
  1. .S X="",$E(X,5)="of health problems - diabetes, heart disease, back pain, leg pains," D S(X)
  1. .S X="",$E(X,5)="and more. Ask your provider about things you can do to fix your weight." D S(X)
  1. .Q
  1. ;
  1. I $G(APCHX("BP"))]"" S APCHSBP=$P(APCHX("BP"),"/"),APCHDBP=$P(APCHX("BP"),"/",2),X="Blood pressure is a good measure of health." D S(X,1)
  1. I $G(APCHX("BP"))]"" S X="",$E(X,5)="Your last blood pressure was "_APCHSBP_" over "_APCHDBP_" on "_$$FMTE^XLFDT(APCHX("BPD"))_"." D S(X) D
  1. .I $$AGE^AUPNPAT(APCHSDFN)>21,$$FMDIFF^XLFDT(DT,APCHX("BPD"))>365 S X="",$E(X,5)="You should have your blood pressure checked at your next visit." D S(X)
  1. .I $$AGE^AUPNPAT(APCHSDFN)>3,$$AGE^AUPNPAT(APCHSDFN)<22,$$FMDIFF^XLFDT(DT,APCHX("BPD"))>720 S X="You should have your blppd pressure checked at your next visit" D S(X)
  1. .Q
  1. I $$AGE^AUPNPAT(APCHSDFN)>21,$G(APCHX("BP"))']"" S X="Blood pressure is a good measure of health." D S(X,1) S X="",$E(X,5)="You should have your blood pressure checked at your next visit." D S(X)
  1. I $$AGE^AUPNPAT(APCHSDFN)>3,$$AGE^AUPNPAT(APCHSDFN)<22,$G(APCHX("BP"))']"" S X="Blood pressure is a good measure of health." D S(X,1) S X="",$E(X,5)="You should have your blood pressure checked at your next visit." D S(X)
  1. S(Y,F,C,T) ;set up array
  1. I '$G(F) S F=0
  1. I '$G(T) S T=0
  1. NEW %,X
  1. ;blank lines
  1. F F=1:1:F S X="" D S1
  1. S X=Y
  1. I $G(C) S L=$L(Y),T=(80-L)/2 D D S1 Q
  1. .F %=1:1:(T-1) S X=" "_X
  1. F %=1:1:T S X=" "_Y
  1. D S1
  1. Q
  1. S1 ;
  1. S %=$P(^TMP("APCHPHS",$J,"PHS",0),U)+1,$P(^TMP("APCHPHS",$J,"PHS",0),U)=%
  1. S ^TMP("APCHPHS",$J,"PHS",%)=X
  1. Q
  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. GETHWBBP(P) ;get last height, height date, weight, weight date, BMI and BP for patient P, return in APCHX("HT"),APCHX("HTD"),APCHX("WT"),APCHX("WTD"),APCHX("BMI")
  1. K APCHX
  1. S APCHX("HT")="",APCHX("HTD")="",APCHX("WT")="",APCHX("WTD")="",APCHX("BMI")="",APCHX("WC")="",APCHX("WCD")=""
  1. LASTHT ;
  1. Q:'$D(^AUPNVSIT("AC",P))
  1. Q:'$D(^AUPNVMSR("AC",P))
  1. NEW APCHY
  1. S %=P_"^LAST MEAS HT" NEW X S E=$$START1^APCLDF(%,"APCHY(") S APCHX("HT")=$P($G(APCHY(1)),U,2),APCHX("HTD")=$P($G(APCHY(1)),U)
  1. S APCHX("HT")=$S(APCHX("HT")]"":$J(APCHX("HT"),2,0),1:"")
  1. LASTWT ;
  1. K APCHY S %=P_"^LAST MEAS WT" NEW X S E=$$START1^APCLDF(%,"APCHY(") S APCHX("WT")=$P($G(APCHY(1)),U,2),APCHX("WTD")=$P($G(APCHY(1)),U)
  1. LASTBP ;
  1. K APCHY S %=P_"^LAST MEAS BP" NEW X S E=$$START1^APCLDF(%,"APCHY(") S APCHX("BP")=$P($G(APCHY(1)),U,2),APCHX("BPD")=$P($G(APCHY(1)),U)
  1. LASTWC ;
  1. K APCHY S %=P_"^LAST MEAS WC" NEW X S E=$$START1^APCLDF(%,"APCHY(") S APCHX("WC")=$P($G(APCHY(1)),U,2),APCHX("WCD")=$P($G(APCHY(1)),U)
  1. BMI ;
  1. I $$AGE^AUPNPAT(P)<19,(APCHX("WTD")'=APCHX("HTD")) Q
  1. I APCHX("WT")=""!('APCHX("HT")) Q
  1. S %=""
  1. S W=APCHX("WT")*.45359,H=(APCHX("HT")*0.0254),H=(H*H),%=(W/H),%=$J(%,4,1)
  1. S APCHX("BMI")=%
  1. Q
  1. ;
  1. MEDBLD ;BUILD ARRAY OF MEDICATIONS
  1. ;
  1. K APCHSRXP,APCHSCOT
  1. Q:'$D(^AUPNVMED(APCHSMX,0))
  1. S APCHSN=^AUPNVMED(APCHSMX,0)
  1. Q:'$D(^PSDRUG($P(APCHSN,U,1)))
  1. S APCHSDTM=-APCHSIVD\1+9999999 ;Visit date from V Med .03 field
  1. Q:$P(APCHSN,U,8)]"" ;date discontinued
  1. S APCHSRXP=$S($D(^PSRX("APCC",APCHSMX)):$O(^(APCHSMX,0)),1:0) ;RX IEN
  1. I APCHSRXP>0 S RX0=^PSRX(APCHSRXP,0),RX2=^PSRX(APCHSRXP,2) D RXSTAT Q:ST="EXPIRED"!(ST="CANCELLED")!(ST="DELETED") ;CALCULATE RX STATUS
  1. I $G(APCHSRXP)'>0 S APCHSCOT=1 ;may be using COTS or med entered via PCC data entry
  1. I $P($G(^AUPNVMED(APCHSMX,12)),U,9)]"" S APCHSCOT=1 ;external key present
  1. S APCHSSTA=$P($G(^PSRX(APCHSRXP,0)),U,15) ;Active? RX File status
  1. Q:$G(APCHSSTA)>10 ;status is expired, deleted or cancelled
  1. S APCHSDYS=$P($G(APCHSN),U,7) ;days supply
  1. ;Q:APCHSDYS=1 ;quit if only 1 day supply
  1. I $G(APCHSCOT)=1,$G(APCHSDYS)]"",$$FMDIFF^XLFDT(DT,APCHSDTM)>$G(APCHSDYS) Q
  1. Q:$P($G(^AUPNVMED(APCHSMX,0)),U,6)=1 ;quit if qty=1
  1. S APCHSMFX=$P(^PSDRUG(+APCHSN,0),U) D ;compare Drug File .01 field & V Med Name of Non Table Drug
  1. .Q:$P(APCHSN,U,4)=""
  1. .I $P($G(APCHSN),U,4)]"",$P($G(APCHSN),U,4)=$P(^PSDRUG(+APCHSN,0),U) Q
  1. .I $P($G(APCHSN),U,4)]"",$P($G(APCHSN),U,4)'=$P(^PSDRUG(+APCHSN,0),U) S APCHSMFX=$P(APCHSN,U,4)
  1. .Q
  1. I $G(APCHSM(APCHSMFX)) Q ;quit if med already exists
  1. S APCHSM(APCHSMFX)=+APCHSN_U_APCHSDYS ;PSDRUG ien^days supply
  1. I $G(APCHSRXP)>0 S $P(APCHSM(APCHSMFX),U,3)=APCHSRXP ;^PSRX ien
  1. S $P(APCHSM(APCHSMFX),U,4)=$G(ST) ;status from RXSTAT
  1. S APCHSMCT=APCHSMCT+1 ;number of active meds
  1. Q
  1. ;
  1. GETLABSX ;get lab tests ordered today
  1. ;
  1. S APCHLR=$G(^DPT(APCHSDFN,"LR"))
  1. I $G(APCHLR)]"" S APCHLRO=0,APCHTSTP=0 D
  1. .F S APCHLRO=$O(^LRO(69,DT,1,"AA",APCHLR,APCHLRO)) Q:APCHLRO="" Q:APCHLRO'=+APCHLRO D
  1. ..F S APCHTSTP=$O(^LRO(69,DT,1,APCHLRO,2,"B",APCHTSTP)) Q:APCHTSTP'=+APCHTSTP D
  1. ...S APCHTCTR=$O(^LRO(69,DT,1,APCHLRO,2,"B",APCHTSTP,0))
  1. ...S APCHTEST=$P(^LAB(60,APCHTSTP,0),U)
  1. ...S APCHTST(APCHTEST)=""
  1. ...Q
  1. ;
  1. ;
  1. RXSTAT ;gets status of rx ... TAKEN FROM PSOFUNC ROUTINE
  1. Q:$G(APCHSRXP)'>0
  1. S J=APCHSRXP
  1. S ST0=+$P(RX0,"^",15) I ST0<12,$O(^PS(52.5,"B",J,0)),$D(^PS(52.5,+$O(^(0)),0)),'$G(^("P")) S ST0=5
  1. I ST0<12,$P(RX2,"^",6)'>DT S ST0=11
  1. S ST=$P("ERROR^ACTIVE^NON-VERIFIED^REFILL FILL^HOLD^PENDING DUE TO DRUG INTERACTION^SUSPENDED^^^^^DONE^EXPIRED^CANCELLED^DELETED","^",ST0+2),$P(RX0,"^",15)=ST0
  1. Q