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

APCHSMU.m

Go to the documentation of this file.
  1. APCHSMU ; IHS/CMI/LAB - utilities for hmr ;
  1. ;;2.0;IHS PCC SUITE;**2,5,7,11,16**;MAY 14, 2009;Build 9
  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. DATEAGE(P,Y) ;EP
  1. I '$G(P) Q ""
  1. NEW D
  1. S D=$$DOB^AUPNPAT(P),D=($E(D,1,3)+Y)_$E(D,4,7)
  1. Q D
  1. WRITE ;EP - write out reminder
  1. I $G(APCHSGHR) D Q
  1. .NEW A,B
  1. .S B=""
  1. .S APCHSGHR(1)=$S($P(^APCHSURV(APCHSITI,0),U,4)]"":$P(^APCHSURV(APCHSITI,0),U,4),1:$P(^APCHSURV(APCHSITI,0),U))
  1. .S APCHSGHR(2)=$G(APCHLAST)
  1. .S APCHSGHR(3)=$$DATE($G(APCHLAST))
  1. .S A=0 F S A=$O(APCHSTEX(A)) Q:A'=+A S B=B_" "_APCHSTEX(A)
  1. .S APCHSGHR(4)=B
  1. .S APCHSGHR(5)=$G(APCHNEXT)
  1. .S APCHSGHR(6)=$P($G(APCHICAR),U,4)
  1. .S APCHSGHR(7)=$P($G(APCHICAR),U,5)
  1. .S APCHSGHR(8)=$P($G(APCHICAR),U,6)
  1. I 'APCHSANY D FIRST Q:$D(APCHSQIT) S APCHSANY=1,APCHSNPG=0
  1. X APCHSCKP Q:$D(APCHSQIT)
  1. I APCHSNPG W ?26,"LAST",?38,"NEXT",! S APCHSCT=0,APCHSNPG=0
  1. W !,$S($P(^APCHSURV(APCHSITI,0),U,4)]"":$P(^APCHSURV(APCHSITI,0),U,4),1:$P(^APCHSURV(APCHSITI,0),U))
  1. W ?26,$$DATE(APCHLAST)
  1. W ?36,APCHSTEX(1) F APCHSL=2:1 Q:'$D(APCHSTEX(APCHSL)) W !,?36,APCHSTEX(APCHSL)
  1. S APCHSCT=APCHSCT+1
  1. I '(APCHSCT#2) X APCHSCKP Q:$D(APCHSQIT) W:'APCHSNPG !
  1. K APCHSTEX Q
  1. ;
  1. FIRST ;EP
  1. X APCHSCKP Q:$D(APCHSQIT) X:'APCHSNPG APCHSBRK
  1. W ?26,"LAST",?38,"NEXT",!
  1. S APCHSCT=0
  1. Q
  1. ;
  1. INAC(X) ;EP - active?
  1. Q $P($G(^APCHSURV(X,0)),"^",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 of loinc taxonmy
  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. ...;Q ;IHS/CMI/LAB - don't check loinc codes
  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 ""
  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. INP ;EP - called from input transform
  1. I $G(X)="" K X Q
  1. ;I X="ONCE" Q
  1. I '(+X) D EN^DDIOL("Must begin with a numeric value.") K X Q
  1. I "MDY"'[$E(X,$L(X)) D EN^DDIOL("Must contain a D for Days, M for Months or Y for Years.") K X Q
  1. Q
  1. SITECRIT(M) ;EP - does the site have override age/sex ranges
  1. ;1= YES, 0=NO
  1. I '$G(M) Q 0
  1. I '$D(^APCHSURV(M,11)) Q 0 ;no
  1. NEW G,J,K
  1. S G=0,J=0 F S J=$O(^APCHSURV(M,11,J)) Q:J'=+J!(G) D
  1. .I '$O(^APCHSURV(M,11,J,11,0)) S G="" Q
  1. .S K=0 F S K=$O(^APCHSURV(M,11,J,11,K)) Q:K'=+K!(G) D
  1. ..I $P(^APCHSURV(M,11,J,11,K,0),U)]"",$P(^(0),U,3)]"" S G=1
  1. ..Q
  1. .Q
  1. Q G
  1. AGESEX(M,P,F) ;EP - is this patient correct sex,age for this reminder
  1. I '$G(F) S F=0
  1. I '$G(P) Q 0
  1. I '$G(M) Q 0
  1. NEW S,A,G,MIN,MAX,J,K
  1. S S=$P(^DPT(P,0),U,2),A=$$FMDIFF^XLFDT(DT,$P(^DPT(P,0),U,3))
  1. S G=""
  1. S J=0 F S J=$O(^APCHSURV(M,11,J)) Q:J'=+J!(G]"") D
  1. .Q:$P(^APCHSURV(M,11,J,0),"^")'=S&($P(^APCHSURV(M,11,J,0),"^")'="B")
  1. .I '$O(^APCHSURV(M,11,J,11,0)) S G="" Q ;no age ranges specified! Use default criteria
  1. .S K=0 F S K=$O(^APCHSURV(M,11,J,11,K)) Q:K'=+K!(G]"") D
  1. ..S MIN=$P(^APCHSURV(M,11,J,11,K,0),U),MIN=$$DAYS(MIN)
  1. ..Q:A<MIN ;patient is less than minimum days old
  1. ..S MAX=$P(^APCHSURV(M,11,J,11,K,0),U,2)
  1. ..I MAX="" S G=$$DAYS($P(^APCHSURV(M,11,J,11,K,0),"^",3)) Q ;if no max then it's a hit
  1. ..S MAX=$$DAYS(MAX)
  1. ..Q:A>MAX ;patient is over the max age
  1. ..I F=1 S G=1
  1. ..S G=$$DAYS($P(^APCHSURV(M,11,J,11,K,0),"^",3))
  1. ..Q
  1. .Q
  1. Q G
  1. ;
  1. MINAGE(R,P,F) ;EP - is this patient correct sex,age for this reminder
  1. I '$G(F) S F=0
  1. I '$G(P) Q 0
  1. I '$G(R) Q 0
  1. NEW S,A,G,MIN,MAX,J,K,M
  1. S M=99999999
  1. S S=$P(^DPT(P,0),U,2),A=$$FMDIFF^XLFDT(DT,$P(^DPT(P,0),U,3))
  1. S G=""
  1. S J=0 F S J=$O(^APCHSURV(R,11,J)) Q:J'=+J D
  1. .Q:$P(^APCHSURV(R,11,J,0),"^")'=S&($P(^APCHSURV(R,11,J,0),"^")'="B")
  1. .I '$O(^APCHSURV(R,11,J,11,0)) S G="" Q ;no age ranges specified! Use default criteria
  1. .S K=0 F S K=$O(^APCHSURV(R,11,J,11,K)) Q:K'=+K D
  1. ..S MIN=$P(^APCHSURV(R,11,J,11,K,0),U),MIN=$$DAYS(MIN)
  1. ..Q:A<MIN
  1. ..S MAX=$P(^APCHSURV(R,11,J,11,K,0),U,2)
  1. ..I MAX="" S G=$$DAYS($P(^APCHSURV(R,11,J,11,K,0),"^",3)) Q ;if no max then it's a hit
  1. ..S MAX=$$DAYS(MAX)
  1. ..Q:A>MAX ;patient is over the max age
  1. ..I MIN<M S M=MIN
  1. ..Q
  1. .Q
  1. I M="" Q M
  1. I M=9999999 Q ""
  1. Q (M\365.25)
  1. LASTITEM(P,V,T,F) ;EP - return last item V
  1. I $G(F)="" S F="D"
  1. NEW APCHY,%,E,Y K APCHY S %=P_"^LAST "_T_" "_V,E=$$START1^APCLDF(%,"APCHY(")
  1. Q $S(F="D":$P($G(APCHY(1)),"^"),F="B":$P($G(APCHY(1)),"^")_"^"_$P($G(APCHY(1)),"^",2),1:$P($G(APCHY(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. IPLSNO(P,T,B) ;EP - any problem list entry with a SNOMED in T
  1. Q $$IPLSNO^APCHSMU1(P,T)
  1. PLTAX(P,A,S,B) ;EP - is A CODE IN THIS TAXONOMY ACTIVE on problem list 1 or 0
  1. ;IF B=1 THEN COUNT INACTIVE
  1. I $G(P)="" Q ""
  1. I $G(A)="" Q ""
  1. S S=$G(S)
  1. S B=$G(B)
  1. N T 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. .Q:$P(^AUPNPROB(X,0),U,12)="D"
  1. .I 'B Q:$P(^AUPNPROB(X,0),U,12)="I" ;CMI/LAB - added per Susan 5/3/16
  1. .I S]"",$P(^AUPNPROB(X,0),U,12)'=S Q
  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. S T=+$$CODEABA^ICDEX(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)),$P(^AUPNPROB(X,0),U,12)'="D" S Y=$P(^AUPNPROB(X,0),U) I Y=T 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 ""
  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,$$FFD(F)),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,$$FFD(F)),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 Declined "
  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 APCHY,%,LPAP,T S LPAP="",%=P_"^LAST LAB PAP SMEAR",E=$$START1^APCLDF(%,"APCHY(")
  1. I $D(APCHY(1)) S LPAP=$P(APCHY(1),U)
  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. 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 APCHY S %=P_"^LAST DX V76.2",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 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 APCHY S %=P_"^LAST PROCEDURE 91.46",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. 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. 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))
  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 APCHY,%,E,Y K APCHY S %=P_"^FIRST "_T_" "_V,E=$$START1^APCLDF(%,"APCHY(")
  1. Q $S(F="D":$P($G(APCHY(1)),"^"),1:$P($G(APCHY(1)),"^",2))
  1. ;
  1. FFD(%) ;EP
  1. I '$G(%) Q .01
  1. NEW X,Y
  1. ;S X=$P(^DIC(%,0),U,1)
  1. S X=0,Y="" F S X=$O(^AUTTREFT(X)) Q:X'=+X I $P(^AUTTREFT(X,0),U,2)=% S Y=X
  1. I 'Y Q .01
  1. Q $S($P($G(^AUTTREFT(Y,0)),U,3)]"":$P(^AUTTREFT(Y,0),U,3),1:.01)
  1. ;
  1. GVHMR(P,I) ;PEP - can be called by any application
  1. ;Input: P - Patient DFN
  1. ; I - ien of health maintenance reminder from HEALTH SUMMARY MAINT ITEM file
  1. ;Output: Name of reminder^date of last (internal)^date of last (external)^NEXT column value of the HMR as displayed on the health summary^internal of next^visit ien (if available)^file found in^ien of file found in
  1. ;
  1. I '$G(P) Q "" ;not a valid patient
  1. I '$D(^AUPNPAT(P)) Q ""
  1. I '$D(^DPT(P)) Q ""
  1. I '$G(I) Q "" ;not a valid HMR ien
  1. I '$D(^APCHSURV(I)) Q "" ;not a valid HMR ien
  1. NEW APCHSGHR,D,R,APCHSDOB,APCHSEX,APCHSANY,APCHSITM,APCHSTEX,APCHSURX,APCHICAR
  1. NEW APCHSTEX,APCHOVR,APCHLAST,APCHNEXT,APCHSBWR,X,C,%,T,Y,APCHNUMD,S,R,APCHTAXN,APCHSINT,APCHT,APCHREF,APCHSCRI,APCHTEST,APCHLSIG,APCHLCOL,APCHLBE,APCHPBEG,N,APCHPNEU,APCHMMR,APCHY,APCHX
  1. K APCHSGHR
  1. S APCHSGHR=1,R=""
  1. I $P(^APCHSURV(I,0),U,3)="D" Q "" ;deleted HMR
  1. I '$P(^APCHSURV(I,0),U,6) Q "" ;not officially maintained by IHS
  1. I $P(^APCHSURV(I,0),U,7)'="R" ;not a reminder
  1. S D=$P(^APCHSURV(I,0),U,2)
  1. I D="" Q "" ;no program id
  1. S APCHSPAT=P
  1. S APCHSITI=I
  1. S APCHSDOB=$P(^DPT(APCHSPAT,0),U,3)
  1. S X1=DT,X2=APCHSDOB D ^%DTC S APCHSAGE=$$AGE^AUPNPAT(APCHSPAT)
  1. S APCHSEX=$P(^DPT(APCHSPAT,0),U,2)
  1. ;
  1. S (APCHSANY,APCHSITM)=0
  1. K APCHSTEX
  1. S APCHSURX="K APCHSTEX,APCHOVR,APCHICAR,APCHLAST,APCHNEXT,APCHSBWR,X,C,%,T,Y,APCHNUMD,S,R,APCHTAXN,APCHSINT,APCHT,APCHREF,APCHSCRI,APCHTEST,APCHLSIG,APCHLCOL,APCHLBE,APCHPBEG,N,APCHPNEU,APCHMMR,APCHY,APCHX,APCHLSIC,APCHLCOI,APCHLBEI"
  1. D @($P(D,";")_U_$P(D,";",2))
  1. ;W !!,APCHSGHR
  1. I $O(APCHSGHR(0))="" Q ""
  1. F D=1:1:8 I $D(APCHSGHR(D)) S $P(R,U,D)=$$TRIM^APCHS11C($G(APCHSGHR(D)))
  1. Q R
  1. ;
  1. GVTP(P,I,C,APCHRVAL) ;PEP - can be called by any application
  1. ;Input: P - Patient DFN
  1. ; I - ien of health maintenance reminder from HEALTH SUMMARY MAINT ITEM file (MUST BE A TYPE OF BEST PRACTICE PROMPT - .07 FIELD VALUE = T)
  1. ; C - width of output text, default is 80
  1. ;Output: ARRAY NAMED IN APCHRVAL Format:
  1. ; APCHRVAL(0)="1^NAME OF BEST PRACTICE PROMPT (.01 value of health summary maint item file)
  1. ; APCHRVAL(1-n) = array of Best Practice Prompt text formatted to C width
  1. ; APCHRVAL(0)="0^message" if no Best Practice Prompt value
  1. ;
  1. K APCHRVAL
  1. I '$G(P) S APCHRVAL(0)="0^No Patient identified" Q ;not a valid patient
  1. I '$D(^AUPNPAT(P)) S APCHRVAL(0)="0^No Patient identified" Q
  1. I '$D(^DPT(P)) S APCHRVAL(0)="0^No Patient identified" Q
  1. I '$G(I) S APCHRVAL(0)="0^No Best Practice Prompt identified" Q ;not a valid HMR ien
  1. I '$D(^APCHSURV(I)) S APCHRVAL(0)="0^Not a Best Practice Prompt" Q ;not a valid HMR ien
  1. I $P(^APCHSURV(I,0),U,7)'="T" S APCHRVAL(0)="0^Not a Best Practice Prompt" Q
  1. I $P(^APCHSURV(I,0),U,3)="D" S APCHRVAL(0)="0^Not a valid Best Practice Prompt" Q ;deleted HMR
  1. I '$P(^APCHSURV(I,0),U,6) S APCHRVAL(0)="0^Not a valid Best Practice Prompt" Q ;not officially maintained by IHS
  1. S D=$P(^APCHSURV(I,0),U,2)
  1. I D="" Q "" ;no program id
  1. NEW APCHSGHR,D,R,APCHSDOB,APCHSEX,APCHSANY,APCHSITM,APCHSTEX,APCHSURX,APCHICAR,APCHCOLW
  1. NEW APCHSTEX,APCHOVR,APCHLAST,APCHNEXT,APCHSBWR,X,%,T,Y,APCHNUMD,S,R,APCHTAXN,APCHSINT,APCHT,APCHREF,APCHSCRI,APCHTEST,APCHLSIG,APCHLCOL,APCHLBE,APCHPBEG,N,APCHPNEU,APCHMMR,APCHY,APCHX
  1. S APCHCOLW=$G(C)
  1. I C'>5 S APCHCOLW=80
  1. K APCHSGHR
  1. S APCHSGHR=1,R=""
  1. S D=$P(^APCHSURV(I,0),U,2)
  1. I D="" S APCHRVAL(0)="0^Not a valid Best Practice Prompt" Q
  1. S APCHSPAT=P
  1. S APCHSITI=I
  1. S APCHSDOB=$P(^DPT(APCHSPAT,0),U,3)
  1. S X1=DT,X2=APCHSDOB D ^%DTC S APCHSAGE=$$AGE^AUPNPAT(APCHSPAT)
  1. S APCHSEX=$P(^DPT(APCHSPAT,0),U,2)
  1. ;
  1. S (APCHSANY,APCHSITM)=0
  1. K APCHSTEX
  1. S APCHSURX="K APCHSTEX,APCHOVR,APCHICAR,APCHLAST,APCHNEXT,APCHSBWR,X,C,%,T,Y,APCHNUMD,S,R,APCHTAXN,APCHSINT,APCHT,APCHREF,APCHSCRI,APCHTEST,APCHLSIG,APCHLCOL,APCHLBE,APCHPBEG,N,APCHPNEU,APCHMMR,APCHY,APCHX,APCHLSIC,APCHLCOI,APCHLBEI"
  1. D @($P(D,";")_U_$P(D,";",2))
  1. Q
  1. ;
  1. REFUSAL(P,F,I,B,E) ;EP
  1. I '$G(P) Q ""
  1. I '$G(F) Q ""
  1. I '$G(I) Q ""
  1. I $G(B)="" Q ""
  1. I $G(E)="" Q ""
  1. NEW G,X,Y,%DT S X=B,%DT="P" D ^%DT S B=Y
  1. S X=E,%DT="P" D ^%DT S E=Y
  1. S (X,G)=0 F S X=$O(^AUPNPREF("AA",P,F,I,X)) Q:X'=+X!(G) S Y=0 F S Y=$O(^AUPNPREF("AA",P,F,I,X,Y)) Q:Y'=+Y S D=$P(^AUPNPREF(Y,0),U,3) I D'<B&(D'>E) S G="1^"_D_"^"_$P(^AUPNPREF(Y,0),U,7)
  1. Q G
  1. ;
  1. CPTREFT(P,BDATE,EDATE,T) ;EP - return ien of CPT entry
  1. I '$G(P) Q ""
  1. I '$G(T) Q ""
  1. I $G(EDATE)="" Q ""
  1. I $G(BDATE)="" S BDATE=$$FMADD^XLFDT(EDATE,-365)
  1. NEW G,X,Y,Z,I
  1. S G=""
  1. S I=0 F S I=$O(^AUPNPREF("AA",P,81,I)) Q:I=""!($P(G,U)) D
  1. .S (X,G)=0 F S X=$O(^AUPNPREF("AA",P,81,I,X)) Q:X'=+X!($P(G,U)) S Y=0 F S Y=$O(^AUPNPREF("AA",P,81,I,X,Y)) Q:Y'=+Y S D=$P(^AUPNPREF(Y,0),U,3) I D'<BDATE&(D'>EDATE) D
  1. ..Q:'$$ICD^ATXAPI(I,T,1)
  1. ..S G="1^"_D_"^"_$P(^AUPNPREF(Y,0),U,7)
  1. .Q
  1. Q G