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

APCHS72.m

Go to the documentation of this file.
  1. APCHS72 ; IHS/CMI/LAB - PART 7 OF APCHS -- SUMMARY PRODUCTION COMPONENTS ;
  1. ;;2.0;IHS PCC SUITE;**2,5**;MAY 14, 2009
  1. ;
  1. ;
  1. MEDS ;EP - called from component - <SETUP>
  1. ;Q:'$D(^AUPNVMED("AC",APCHSPAT))
  1. X APCHSCKP Q:$D(APCHSQIT) I 'APCHSNPG W ! X APCHSBRK
  1. ; <BUILD>
  1. S Z="",Y=$S(+$P(^APCHSCTL(APCHSTYP,1,APCHSEGT,0),U,4):$P(^APCHSCTL(APCHSTYP,1,APCHSEGT,0),U,4),1:"")
  1. I Y?1N.N!(Y?1N.N1"D") S Y=+Y
  1. I Y?1N.N1"M" S Y=+Y*30
  1. I Y?1N.N1"Y" S Y=Y*365
  1. D GETMEDS(APCHSPAT,Y,Z,$$VALI^XBDIQ1(9001015,APCHSTYP,3.5))
  1. D DISPLAY
  1. ;hold meds
  1. D HOLDDSP^APCHS7
  1. Q:$D(APCHSQIT)
  1. ;now display MED refusals
  1. S APCHST="MEDICATION",APCHSFN=50 D DISPREF^APCHS3C
  1. D MEDRU^APCHS7
  1. K APCHST,APCHSFN
  1. MEDX ;
  1. K ^TMP($J,"APCHSAOM"),^TMP($J,"APCHSBCM"),^TMP("APCHSMEDS",$J)
  1. K APCHSX
  1. K X1,X2,X,Y
  1. Q
  1. ;
  1. DISPLAY ;
  1. I $D(^TMP("APCHSMEDS",$J,"C")) W ?4,"LAST OF EACH CHRONIC MEDICATION (no limit on days)",?57,"Last fill date",!! D
  1. .S APCHSX=0 F S APCHSX=$O(^TMP("APCHSMEDS",$J,"C",APCHSX)) Q:APCHSX'=+APCHSX!($D(APCHSQIT)) X APCHSCKP Q:$D(APCHSQIT) W ^TMP("APCHSMEDS",$J,"C",APCHSX),!
  1. I $D(^TMP("APCHSMEDS",$J,"A")) W !?4,"LAST OF EACH OTHER MEDICATION "_APCHSEGL_"",?57,"Last fill date",!! D
  1. .S APCHSX=0 F S APCHSX=$O(^TMP("APCHSMEDS",$J,"A",APCHSX)) Q:APCHSX'=+APCHSX!($D(APCHSQIT)) X APCHSCKP Q:$D(APCHSQIT) W ^TMP("APCHSMEDS",$J,"A",APCHSX),!
  1. Q
  1. GETMEDS(DFN,Y,Z,SIGT) ;PEP - return array of meds for patient P
  1. ;optionally Y is defined as the max # of days back the acute meds
  1. ;to be included
  1. ;optionally Z is the max # of days of chronic meds to be included
  1. ;the array will contain all chronic meds (listed first and ordered
  1. ;by NDC class
  1. ;and then all acute meds listed in NDC class order
  1. ;the array is ^TMP("APCHSMEDS",$J,"C" - chronic
  1. ;and ^TMP("APCHSMEDS",$J,"A" - other (non-chronic)
  1. NEW A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,V,W,X,%
  1. K ^TMP($J,"APCHSAOM"),^TMP($J,"APCHSBCM"),^TMP("APCHSMEDS",$J)
  1. I '$G(DFN) Q
  1. I '$D(^DPT(DFN)) Q ;not a valid patient
  1. I '$G(Y) S Y=""
  1. I '$G(Z) S Z=""
  1. ;store dates
  1. I Y S Y="-"_Y S Y=9999999-$$FMADD^XLFDT(DT,Y)
  1. E S Y=9999999
  1. I Z S Z="-"_Z S Z=9999999-$$FMADD^XLFDT(DT,Z)
  1. E S Z=9999999
  1. ;gather up all chronic meds ever, store last of each 1
  1. NEW I
  1. S I=0 F S I=$O(^AUPNVMED("AA",DFN,I)) Q:I=""!(I>Z) D
  1. .NEW X S X=0 F S X=$O(^AUPNVMED("AA",DFN,I,X)) Q:X'=+X D
  1. ..Q:'$D(^AUPNVMED(X,0))
  1. ..I $D(^TMP($J,"APCHSBCM",$P(^AUPNVMED(X,0),U))) Q
  1. ..Q:'$$CHRONIC(X) ;not marked as chronic in prescription file
  1. ..S ^TMP($J,"APCHSBCM",$P(^AUPNVMED(X,0),U))=X
  1. ..Q
  1. .Q
  1. OTH ;gather up all others by date range in components, get last of each
  1. NEW I S I=0 F S I=$O(^AUPNVMED("AA",DFN,I)) Q:I=""!(I>Y) D
  1. .S X=0 F S X=$O(^AUPNVMED("AA",DFN,I,X)) Q:X="" D
  1. ..Q:'$D(^AUPNVMED(X,0))
  1. ..I $D(^TMP($J,"APCHSAOM",$P(^AUPNVMED(X,0),U))) Q
  1. ..Q:$$CHRONIC(X)
  1. ..S ^TMP($J,"APCHSAOM",$P(^AUPNVMED(X,0),U))=X
  1. ..Q
  1. .Q
  1. ;NOW MERGE IN NON VA MEDS FROM PS(55
  1. NONVA ; S DFN=APCHSPAT,PSOACT=1 D ^PSOHCSUM
  1. ;quit if chronic
  1. S X=0 F S X=$O(^PS(55,APCHSPAT,"NVA",X)) Q:X'=+X D
  1. .I $P($G(^PS(55,APCHSPAT,"NVA",X,999999911)),U,1),$D(^AUPNVMED($P(^PS(55,APCHSPAT,"NVA",X,999999911),U,1),0)) Q
  1. .;S L=$P(^PS(55,APCHSPAT,"NVA",X,0),U,9)
  1. .;:'L
  1. .S L=$P($P($G(^PS(55,APCHSPAT,"NVA",X,0)),U,10),".")
  1. .S L=9999999-L
  1. .Q:L>APCHSDLM
  1. .S D=$P(^PS(55,APCHSPAT,"NVA",X,0),U,2) ;DRUG
  1. .I D="" S D="NO DRUG IEN"
  1. .S N=$S(D:$P(^PSDRUG(D,0),U,1),1:$P(^PS(50.7,$P(^PS(55,APCHSPAT,"NVA",X,0),U,1),0),U,1)) ;NAME
  1. .S ^TMP($J,"APCHSAOM",$S(D:D,1:N))=U_$P(^PS(55,APCHSPAT,"NVA",X,0),U,6)_U_N_U_$P(^PS(55,APCHSPAT,"NVA",X,0),U,4)_" "_$P(^PS(55,APCHSPAT,"NVA",X,0),U,5)_U_$P(^PS(55,APCHSPAT,"NVA",X,0),U,7)_U_(9999999-L)_U_$S(D:$P(^PSDRUG(D,0),U,1),1:N)
  1. REORDER ;
  1. ;reorder by NDC or by name
  1. NEW I,N,O,S,M S (C,I)=0 F S I=$O(^TMP($J,"APCHSBCM",I)) Q:I'=+I S C=C+1,N=$$VAL^XBDIQ1(50,I,25),O="ZZZ-"_$$VAL^XBDIQ1(50,I,.01) S S=$S(N]"":N,1:O),M(S,C)=^TMP($J,"APCHSBCM",I)
  1. NEW I,N,O,S,A S (C,I)=0 F S I=$O(^TMP($J,"APCHSAOM",I)) Q:I="" S C=C+1,N=$S(I:$$VAL^XBDIQ1(50,I,25),1:""),O="ZZZ-"_$S(I:$$VAL^XBDIQ1(50,I,.01),1:I) S S=$S(N]"":N,1:O),A(S,C)=^TMP($J,"APCHSAOM",I)
  1. NEW APCHSX,APCHSC,I,N S APCHSX=0,I="C" F S APCHSX=$O(M(APCHSX)) Q:APCHSX="" S APCHSC=0 F S APCHSC=$O(M(APCHSX,APCHSC)) Q:APCHSC'=+APCHSC S N=M(APCHSX,APCHSC) D SETARRAY
  1. NEW APCHSX,APCHSC,I,N S APCHSX=0,I="A" F S APCHSX=$O(A(APCHSX)) Q:APCHSX="" S APCHSC=0 F S APCHSC=$O(A(APCHSX,APCHSC)) Q:APCHSC'=+APCHSC S N=A(APCHSX,APCHSC) D SETARRAY
  1. K ^TMP("APCHSMEDS",$J,"C",0),^TMP("APCHSMEDS",$J,"A",0)
  1. K ^TMP($J,"APCHSBCM"),^TMP($J,"APCHSAOM")
  1. Q
  1. CHRONIC(N) ;EP
  1. I '$G(N) Q ""
  1. I '$D(^AUPNVMED(N)) Q ""
  1. NEW X,Y,P
  1. S P=$P(^AUPNVMED(N,0),U,2)
  1. S X=$S($D(^PSRX("APCC",N)):$O(^(N,0)),1:0)
  1. S Y=$S(+X:$D(^PS(55,P,"P","CP",X)),1:0)
  1. I 'Y Q ""
  1. Q 1
  1. SETARRAY ;DISPLAY MEDICATION
  1. I 'N D SETNVA Q
  1. S %=^AUPNVMED(N,0)
  1. ;d = external value of date, t=internal value of date
  1. S V=$P(%,U,3) I V S T=$P($P(^AUPNVSIT(V,0),U),"."),D=$$FMTE^XLFDT(T,"2D")
  1. I 'V S (D,T)="<???>"
  1. S E=$P(%,U,8),Q=$P(%,U,6),G=$P(%,U,5),T=$P(%,U,7)_" days"
  1. S K=$S($P(N,U,4)="":$P(^PSDRUG(+%,0),U,1),1:$P(N,U,4))
  1. S B="" I E S B="-- D/C "_$$FMTE^XLFDT(E,"2D")
  1. S APCHORTS=$P($G(^AUPNVMED(N,11)),U)
  1. I APCHORTS["RETURNED TO STOCK",E S B="--RTS "_$$FMTE^XLFDT(E,"2D")
  1. D SIG S G=$$LOW^XLFSTR(Z)
  1. D SITE ;I S]"" S G=G_" ["_S_"]"
  1. S X="",$E(X,2)=K,X=X_" "_G_" "_" # "_$S(Q:Q,1:"?")_" "_T_" "_D_" "_B D S(X)
  1. I S]"" S X="",$E(X,5)="Dispensed at: "_S D S(X)
  1. Q
  1. SETNVA ;
  1. S D=$P(N,U,6)
  1. I 'D S D="<???>"
  1. I D S D=$$FMTE^XLFDT(D,"2D")
  1. S E=$P(N,U,5)
  1. S G=$P(N,U,4)
  1. S K=$P(N,U,7)
  1. S B="" I E S B="-- D/C"_$$FMTE^XLFDT(E,"2D")
  1. D SIG S G=$$LOW^XLFSTR(Z)
  1. S X="",$E(X,2)=K,X=X_" "_G_" "_D_" "_B D S(X)
  1. S X="",$E(X,5)="Dispensed at: (EHR Outside Medication)" D S(X)
  1. Q
  1. ;
  1. SIG ;CONSTRUCT THE FULL TEXT FROM THE ENCODED SIG
  1. I $G(SIGT)="S" S Z=G Q
  1. NEW P S Z="" F P=1:1:$L(G," ") S X=$P(G," ",P) I X]"" D
  1. . S Y=$O(^PS(51,"B",X,0)) I Y>0 S X=$P(^PS(51,Y,0),"^",2) I $D(^(9)) S Y=$P(G," ",P-1),Y=$E(Y,$L(Y)) S:Y>1 X=$P(^(9),"^",1)
  1. . S Z=Z_X_" "
  1. Q
  1. ;
  1. SITE ;DETERMINE IF OUTSIDE LOCATION INFO PRESENT
  1. S S=""
  1. I $D(^AUPNVSIT(V,21))#2 S S=$P(^(21),U) Q
  1. Q:$P(^AUPNVSIT(V,0),U,6)=""
  1. I $P(^AUPNVSIT(V,0),U,6)'=DUZ(2) S S=$E($P(^DIC(4,$P(^AUPNVSIT(V,0),U,6),0),U),1,30)
  1. Q
  1. S(Y,F,C,T) ;set up array
  1. NEW X
  1. I '$G(F) S F=0
  1. I '$G(T) S T=0
  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. I '$D(^TMP("APCHSMEDS",$J,I,0)) S ^TMP("APCHSMEDS",$J,I,0)=0
  1. S %=$P(^TMP("APCHSMEDS",$J,I,0),U)+1,$P(^TMP("APCHSMEDS",$J,I,0),U)=%
  1. S ^TMP("APCHSMEDS",$J,I,%)=X
  1. Q