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

APCLAPIU.m

Go to the documentation of this file.
  1. APCLAPIU ; IHS/CMI/LAB - visit data ;
  1. ;;2.0;IHS PCC SUITE;**2,6,10,11,16**;MAY 14, 2009;Build 9
  1. ;
  1. ;
  1. LASTITEM(P,APCLV,APCLT,BD,ED,APCLF) ;PEP - return last item APCLV OF TYPE APCLT DURING BD TO ED IN FORM APCLF
  1. I $G(APCLF)="" S APCLF="D"
  1. I $G(BD)="" S BD=$$DOB^AUPNPAT(P)
  1. I $G(ED)="" S ED=DT
  1. NEW APCLR,%,E,Y K APCLR S %=P_"^LAST "_APCLT_" "_APCLV_";DURING "_BD_"-"_ED,E=$$START1^APCLDF(%,"APCLR(")
  1. I '$D(APCLR(1)) Q ""
  1. I APCLF="D" Q $P(APCLR(1),U)
  1. Q $$V(APCLR(1),APCLT)
  1. ;
  1. V(Y,T) ;EP
  1. Q $P(Y,U,1)_"^"_$$T(T)_$P(Y,U,3)_"^"_$S($$F(T)]""&($$VF(T)]""):$$VAL^XBDIQ1($$F(T),+$P(Y,U,4),$$VF(T)),1:"")_"^"_$P(Y,U,5)_"^"_$$F(T)_"^"_+$P(Y,U,4)
  1. ;
  1. T(T) ;EP
  1. NEW X,Y
  1. S X=$O(^APCLCNTL("B","TERMS/FILE NUMBER",0))
  1. I X="" Q ""
  1. S Y=$O(^APCLCNTL(X,11,"B",T,0))
  1. I 'Y Q ""
  1. Q $P($G(^APCLCNTL(X,11,Y,0)),U,3)
  1. ;
  1. F(T) ;EP
  1. NEW X,Y
  1. S X=$O(^APCLCNTL("B","TERMS/FILE NUMBER",0))
  1. I X="" Q ""
  1. S Y=$O(^APCLCNTL(X,11,"B",T,0))
  1. I 'Y Q ""
  1. Q $P($G(^APCLCNTL(X,11,Y,0)),U,2)
  1. ;
  1. VF(T) ;EP
  1. NEW X,Y
  1. S X=$O(^APCLCNTL("B","TERMS/FILE NUMBER",0))
  1. I X="" Q ""
  1. S Y=$O(^APCLCNTL(X,11,"B",T,0))
  1. I 'Y Q ""
  1. Q $P($G(^APCLCNTL(X,11,Y,0)),U,4)
  1. ;
  1. LASTHF(P,C,BD,ED,F) ;PEP - get last factor in category C for patient P between BD and ED
  1. I '$G(P) Q ""
  1. I $G(C)="" Q ""
  1. I $G(F)="" S F=""
  1. I $G(BD)="" S BD=$$DOB^AUPNPAT(P)
  1. I $G(ED)="" S ED=DT
  1. S C=$O(^AUTTHF("B",C,0)) ;ien of category passed
  1. I '$G(C) Q ""
  1. S BD=9999999-BD,ED=9999999-ED
  1. NEW H,D,O S H=0,D=ED-1
  1. K O
  1. F S H=$O(^AUTTHF("AC",C,H)) Q:'+H D
  1. . Q:'$D(^AUPNVHF("AA",P,H))
  1. . F S D=$O(^AUPNVHF("AA",P,H,D)) Q:D'=+D D
  1. .. Q:D>BD
  1. .. S V=$O(^AUPNVHF("AA",P,H,D,0))
  1. .. S O(D)=(9999999-D)_"^HF: "_$$VAL^XBDIQ1(9000010.23,V,.01)_"^"_$$VAL^XBDIQ1(9000010.23,V,.06)_"^"_$P(^AUPNVHF(V,0),U,3)_"^9000010.23^"_V
  1. .. Q
  1. . Q
  1. S D=$O(O(0))
  1. I D="" Q D
  1. I F="D" Q (9999999-D)
  1. Q O(D)
  1. ;
  1. LASTBHDX(P,BD,ED,C,F) ;EP - find date of last BH dx of C, return date in fileman format
  1. NEW G,Y,V,D,E,X
  1. I $G(F)="" S F="D"
  1. I $G(BD)="" S BD=$$DOB^AUPNPAT(P)
  1. I $G(ED)="" S ED=DT
  1. I $G(C)="" Q ""
  1. S G=""
  1. S E=9999999-BD,D=9999999-ED-1_".99" F S D=$O(^AMHREC("AE",P,D)) Q:D'=+D!($P(D,".")>E)!(G]"") S V=0 F S V=$O(^AMHREC("AE",P,D,V)) Q:V'=+V!(G]"") D
  1. .Q:'$D(^AMHREC(V,0))
  1. .S X=0 F S X=$O(^AMHRPRO("AD",V,X)) Q:X'=+X!(G]"") S Y=$P($G(^AMHRPRO(X,0)),U) D
  1. ..Q:'Y
  1. ..S Y=$P($G(^AMHPROB(Y,0)),U)
  1. ..I Y=C S G=$P($P(^AMHREC(V,0),U),".")_"^BH DX: "_Y_"^"_$$VAL^XBDIQ1(9002011.01,X,.04)_"^^9002011.01^"_X
  1. I F="D" Q $P(G,U)
  1. Q G
  1. ;
  1. LASTBHDT(P,BD,ED,T,F) ;EP - find date of last BH dx of TAXONOMY T
  1. I $G(P)="" Q ""
  1. I $G(BD)="" S BD=$$DOB^AUPNPAT(P)
  1. I $G(ED)="" S ED=DT
  1. I $G(F)="" S F="D"
  1. S T=$G(T)
  1. NEW TIEN,G,Y,V,E,X,I
  1. S TIEN="" I T]"" S TIEN=$O(^ATXAX("B",T,0)) ;get taxonomy ien
  1. I TIEN="" Q ""
  1. S G=""
  1. S E=9999999-BD,D=9999999-ED-1_".99" F S D=$O(^AMHREC("AE",P,D)) Q:D'=+D!($P(D,".")>E)!(G]"") S V=0 F S V=$O(^AMHREC("AE",P,D,V)) Q:V'=+V!(G]"") D
  1. .Q:'$D(^AMHREC(V,0))
  1. .S X=0 F S X=$O(^AMHRPRO("AD",V,X)) Q:X'=+X!(G]"") S Y=$P($G(^AMHRPRO(X,0)),U) D
  1. ..Q:'Y
  1. ..S Y=$P($G(^AMHPROB(Y,0)),U)
  1. ..S I=$O(^ICD9("B",Y,0))
  1. ..Q:'$$ICD^ATXAPI(I,TIEN,9)
  1. ..S G=$P($P(^AMHREC(V,0),U),".")_"^BH DX: "_Y_"^"_$$VAL^XBDIQ1(9002011.01,X,.04)_"^^9002011.01^"_X
  1. I F="D" Q $P(G,U)
  1. Q G
  1. ;
  1. LASTBHED(P,BD,ED,C,F) ;EP - find date of last BH EDUC of C, return date in fileman format
  1. NEW G,Y,V,D,E,X
  1. S G=""
  1. S E=9999999-BD,D=9999999-ED-1_".99" F S D=$O(^AMHREC("AE",P,D)) Q:D'=+D!($P(D,".")>E)!(G]"") S V=0 F S V=$O(^AMHREC("AE",P,D,V)) Q:V'=+V!(G]"") D
  1. .Q:'$D(^AMHREC(V,0))
  1. .S X=0 F S X=$O(^AMHREDU("AD",V,X)) Q:X'=+X!(G]"") S Y=$P($G(^AMHREDU(X,0)),U) D
  1. ..Q:'Y
  1. ..S Y=$P($G(^AUTTEDT(Y,0)),U,2)
  1. ..I Y=C S G=$P($P(^AMHREC(V,0),U),".")_"^BH: "_Y_"^"_$$VAL^XBDIQ1(9002011.05,X,.08)_"^^9002011.05^"_X
  1. I F="D" Q $P(G,U)
  1. Q G
  1. ;
  1. LASTDXT(P,BD,ED,T,F) ;EP
  1. I '$G(P) Q ""
  1. I $G(BD)="" S BD=$$DOB^AUPNPAT(P)
  1. I $G(ED)="" S ED=DT
  1. I $G(F)="" S F="D"
  1. S T=$G(T)
  1. NEW A,B,C,D,E,TIEN,R,I
  1. S TIEN="" I T]"" S TIEN=$O(^ATXAX("B",T,0)) ;get taxonomy ien
  1. I TIEN="" Q ""
  1. S R="" ;return value
  1. S B=9999999-BD,E=9999999-ED ;get inverse date and begin at edate-1 and end when greater than begin date
  1. S D=E-1 F S D=$O(^AUPNVPOV("AA",P,D)) Q:D=""!(D>B)!(R]"") D
  1. .S I=0 F S I=$O(^AUPNVPOV("AA",P,D,I)) Q:I'=+I!(R]"") D
  1. ..S C=$P($G(^AUPNVPOV(I,0)),U)
  1. ..Q:C="" ;bad xref
  1. ..Q:'$D(^ICD9(C))
  1. ..I TIEN Q:'$$ICD^ATXAPI(C,TIEN,9)
  1. ..S R=(9999999-D)_"^DX: "_$P($$ICDDX^ICDEX(C,(9999999-D)),U,2)_"^"_$$VAL^XBDIQ1(9000010.07,I,.04)_"^"_$P(^AUPNVPOV(I,0),U,3)_"^9000010.07^"_I
  1. ..Q
  1. .Q
  1. I R="" Q ""
  1. I F="D" Q $P(R,U)
  1. Q R
  1. ;
  1. LASTPRCT(P,BD,ED,T,F) ;EP
  1. I '$G(P) Q ""
  1. I $G(BD)="" S BD=$$DOB^AUPNPAT(P)
  1. I $G(ED)="" S ED=DT
  1. I $G(F)="" S F="D"
  1. S T=$G(T)
  1. NEW A,B,C,D,E,TIEN,R,I
  1. S TIEN="" I T]"" S TIEN=$O(^ATXAX("B",T,0)) ;get taxonomy ien
  1. I TIEN="" Q ""
  1. S R="" ;return value
  1. S B=9999999-BD,E=9999999-ED ;get inverse date and begin at edate-1 and end when greater than begin date
  1. S D=E-1 F S D=$O(^AUPNVPRC("AA",P,D)) Q:D=""!(D>B)!(R]"") D
  1. .S I=0 F S I=$O(^AUPNVPRC("AA",P,D,I)) Q:I'=+I!(R]"") D
  1. ..S C=$P($G(^AUPNVPRC(I,0)),U)
  1. ..Q:C="" ;bad xref
  1. ..Q:'$D(^ICD0(C))
  1. ..I TIEN Q:'$$ICD^ATXAPI(C,TIEN,0)
  1. ..S R=(9999999-D)_"^PROC: "_$P($$ICDOP^ICDEX(C,(9999999-D),,"I"),U,2)_"^"_$$VAL^XBDIQ1(9000010.08,I,.04)_"^"_$P(^AUPNVPRC(I,0),U,3)_"^9000010.08^"_I
  1. ..Q
  1. .Q
  1. I R="" Q ""
  1. I F="D" Q $P(R,U)
  1. Q R
  1. ;
  1. LASTCPTT(P,BD,ED,T,F) ;EP
  1. I '$G(P) Q ""
  1. I $G(BD)="" S BD=$$DOB^AUPNPAT(P)
  1. I $G(ED)="" S ED=DT
  1. I $G(F)="" S F="D"
  1. S T=$G(T)
  1. NEW A,B,C,D,E,TIEN,R,I,V
  1. S TIEN="" I T]"" S TIEN=$O(^ATXAX("B",T,0)) ;get taxonomy ien
  1. I TIEN="" Q ""
  1. S R="" ;return value
  1. S B=9999999-BD,E=9999999-ED ;get inverse date and begin at edate-1 and end when greater than begin date
  1. S D=(E-1)_.9999 F S D=$O(^AUPNVSIT("AA",P,D)) Q:D=""!($P(D,".")>B)!(R]"") D
  1. .S V=0 F S V=$O(^AUPNVSIT("AA",P,D,V)) Q:V'=+V!(R]"") D
  1. ..Q:'$D(^AUPNVSIT(V,0))
  1. ..Q:'$D(^AUPNVCPT("AD",V)) ;no cpts
  1. ..S I=0 F S I=$O(^AUPNVCPT("AD",V,I)) Q:I'=+I!(R]"") D
  1. ...S C=$P($G(^AUPNVCPT(I,0)),U)
  1. ...Q:C="" ;bad xref
  1. ...Q:'$D(^ICPT(C))
  1. ...I TIEN Q:'$$ICD^ATXAPI(C,TIEN,1)
  1. ...S R=(9999999-$P(D,"."))_"^CPT: "_$P($$CPT^ICPTCOD(C,(9999999-$P(D,"."))),U,2)_"^"_$P($$CPT^ICPTCOD(C,(9999999-$P(D,"."))),U,3)_"^"_$P(^AUPNVCPT(I,0),U,3)_"^9000010.18^"_I
  1. ..Q
  1. .Q
  1. I R="" Q ""
  1. I F="D" Q $P(R,U)
  1. Q R
  1. ;
  1. LASTCPTI(P,BD,ED,T,F) ;EP
  1. I '$G(P) Q ""
  1. I $G(BD)="" S BD=$$DOB^AUPNPAT(P)
  1. I $G(ED)="" S ED=DT
  1. I $G(F)="" S F="D"
  1. S T=$G(T)
  1. NEW A,B,C,D,E,TIEN,R,I
  1. I T="" Q ""
  1. F A=1:1 S B=$P(T,";",A) Q:B="" S C=$P($$CPT^ICPTCOD(B),U,1) I C'=-1,C S TIEN(C)=""
  1. I '$D(TIEN) Q ""
  1. S R="" ;return value
  1. S B=9999999-BD,E=9999999-ED ;get inverse date and begin at edate-1 and end when greater than begin date
  1. S D=(E-1)_".9999" F S D=$O(^AUPNVSIT("AA",P,D)) Q:D=""!($P(D,".")>B)!(R]"") D
  1. .S V=0 F S V=$O(^AUPNVSIT("AA",P,D,V)) Q:V'=+V!(R]"") D
  1. ..Q:'$D(^AUPNVSIT(V,0))
  1. ..Q:'$D(^AUPNVCPT("AD",V)) ;no cpts
  1. ..S I=0 F S I=$O(^AUPNVCPT("AD",V,I)) Q:I'=+I!(R]"") D
  1. ...S C=$P($G(^AUPNVCPT(I,0)),U)
  1. ...Q:C="" ;bad xref
  1. ...Q:'$D(^ICPT(C))
  1. ...Q:'$D(TIEN(C))
  1. ...S R=(9999999-$P(D,"."))_"^CPT: "_$P($$CPT^ICPTCOD(C,(9999999-$P(D,"."))),U,2)_"^"_$P($$CPT^ICPTCOD(C,(9999999-$P(D,"."))),U,3)_"^"_$P(^AUPNVCPT(I,0),U,3)_"^9000010.18^"_I
  1. ..Q
  1. .Q
  1. I R="" Q ""
  1. I F="D" Q $P(R,U)
  1. Q R
  1. ;
  1. LASTBHME(P,BD,ED,C,F) ;EP - find date of last BH MEASUREMENT of C, return date in fileman format
  1. NEW G,Y,V,D,E,X
  1. S G=""
  1. S E=9999999-BD,D=9999999-ED-1_".99" F S D=$O(^AMHREC("AE",P,D)) Q:D'=+D!($P(D,".")>E)!(G]"") S V=0 F S V=$O(^AMHREC("AE",P,D,V)) Q:V'=+V!(G]"") D
  1. .Q:'$D(^AMHREC(V,0))
  1. .S X=0 F S X=$O(^AMHRMSR("AD",V,X)) Q:X'=+X!(G]"") S Y=$P($G(^AMHRMSR(X,0)),U) D
  1. ..Q:'Y
  1. ..S Y=$P($G(^AUTTMSR(Y,0)),U,1)
  1. ..I Y=C S G=$P($P(^AMHREC(V,0),U),".")_"^BH: "_Y_"^"_$$VAL^XBDIQ1(9002011.12,X,.04)_"^^9002011.12^"_X
  1. I F="D" Q $P(G,U)
  1. Q G
  1. ;
  1. LASTLAB(P,BD,ED,I,T,LO,LT,F,LTN) ;EP P is patient, I is ien of lab test, T is IEN of lab taxonomy, LO is ien of loinc code, LT is ien o f loinc taxonmy
  1. ;now get all loinc/taxonomy tests
  1. I '$G(P) Q ""
  1. I $G(BD)="" S BD=$$DOB^AUPNPAT(P)
  1. I $G(ED)="" S ED=DT
  1. I $G(F)="" S F="D"
  1. S T=$G(T)
  1. S I=$G(I)
  1. S LO=$G(LO)
  1. S LT=$G(LT)
  1. S LTN=$G(LTN)
  1. NEW R,D,L,X,B,E,J
  1. S R="",B=9999999-BD,E=9999999-ED
  1. S D=E-1 F S D=$O(^AUPNVLAB("AE",P,D)) Q:D'=+D!($P(D,".")>B)!(R]"") D
  1. .S L=0 F S L=$O(^AUPNVLAB("AE",P,D,L)) Q:L'=+L!(R]"") D
  1. ..S X=0 F S X=$O(^AUPNVLAB("AE",P,D,L,X)) Q:X'=+X!(R]"") D
  1. ...Q:'$D(^AUPNVLAB(X,0))
  1. ...I $G(I),L=I S R=$$LABR(X,D) Q
  1. ...I $G(T),$P(^AUPNVLAB(X,0),U),$D(^ATXLAB(T,21,"B",$P(^AUPNVLAB(X,0),U))) S R=$$LABR(X,D) Q
  1. ...I LTN]"",$P(^LAB(60,$P(^AUPNVLAB(X,0),U),0),U)=LTN S R=$$LABR(X,D) Q
  1. ...S J=$P($G(^AUPNVLAB(X,11)),U,13) Q:J=""
  1. ...Q:'$$LOINC(J,$G(LT),$G(LO))
  1. ...S R=$$LABR(X,D)
  1. ...Q
  1. I R="" Q ""
  1. I F="D" Q $P(R,U)
  1. Q R
  1. ;
  1. LABR(X,D) ;
  1. Q (9999999-D)_"^LAB: "_$$VAL^XBDIQ1(9000010.09,X,.01)_"^"_$P(^AUPNVLAB(X,0),U,4)_"^"_$P(^AUPNVLAB(X,0),U,3)_"^9000010.09^"_X
  1. ;
  1. LOINC(A,LT,LI) ;
  1. I '$G(LT),'$G(LI) Q "" ;no ien or taxonomy
  1. S LI=$G(LI)
  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. ;
  1. LASTRADT(P,BD,ED,T,F) ;EP
  1. I '$G(P) Q ""
  1. I $G(BD)="" S BD=$$DOB^AUPNPAT(P)
  1. I $G(ED)="" S ED=DT
  1. I $G(F)="" S F="D"
  1. S T=$G(T)
  1. NEW A,B,C,D,E,TIEN,R,I,J,K
  1. S TIEN="" I T]"" S TIEN=$O(^ATXAX("B",T,0)) ;get taxonomy ien
  1. I TIEN="" Q ""
  1. S R="" ;return value
  1. S B=9999999-BD,E=9999999-ED ;get inverse date and begin at edate-1 and end when greater than begin date
  1. S D=E-1 F S D=$O(^AUPNVSIT("AA",P,D)) Q:D=""!($P(D,".")>B)!(R]"") D
  1. .S V=0 F S V=$O(^AUPNVSIT("AA",P,D,V)) Q:V'=+V!(R]"") D
  1. ..Q:'$D(^AUPNVSIT(V,0))
  1. ..Q:'$D(^AUPNVRAD("AD",V)) ;no cpts
  1. ..S I=0 F S I=$O(^AUPNVRAD("AD",V,I)) Q:I'=+I!(R]"") D
  1. ...S C=$P($G(^AUPNVRAD(I,0)),U),J=$P($G(^RAMIS(71,+C,0)),U,9)
  1. ...Q:C="" ;bad xref
  1. ...Q:J="" ;no cpt code
  1. ...Q:'$D(^ICPT(J))
  1. ...I TIEN Q:'$$ICD^ATXAPI(J,TIEN,1)
  1. ...S R=(9999999-$P(D,"."))_"^RADIOLOGY: "_$P(^RAMIS(71,C,0),U)_" - "_$P($$CPT^ICPTCOD(J,(9999999-$P(D,"."))),U,2)_"^^"_$P(^AUPNVRAD(I,0),U,3)_"^9000010.22^"_I
  1. ..Q
  1. .Q
  1. I R="" Q ""
  1. I F="D" Q $P(R,U)
  1. Q R
  1. ;
  1. LASTBHCT(P,BD,ED,T,F) ;EP - find date of last BH CPT of TAXONOMY T
  1. I $G(P)="" Q ""
  1. I $G(BD)="" S BD=$$DOB^AUPNPAT(P)
  1. I $G(ED)="" S ED=DT
  1. I $G(F)="" S F="D"
  1. S T=$G(T)
  1. NEW TIEN,G,Y,V,E,X,I
  1. S TIEN="" I T]"" S TIEN=$O(^ATXAX("B",T,0)) ;get taxonomy ien
  1. I TIEN="" Q ""
  1. S G=""
  1. S E=9999999-BD,D=9999999-ED-1_".99" F S D=$O(^AMHREC("AE",P,D)) Q:D'=+D!($P(D,".")>E)!(G]"") S V=0 F S V=$O(^AMHREC("AE",P,D,V)) Q:V'=+V!(G]"") D
  1. .Q:'$D(^AMHREC(V,0))
  1. .S X=0 F S X=$O(^AMHRPROC("AD",V,X)) Q:X'=+X!(G]"") S Y=$P($G(^AMHRPROC(X,0)),U) D
  1. ..Q:'Y
  1. ..Q:'$$ICD^ATXAPI(Y,TIEN,1)
  1. ..S G=$P($P(^AMHREC(V,0),U),".")_"^BH CPT: "_$P(^ICPT(Y,0),U)_"^"_$$VAL^XBDIQ1(9002011.04,X,.04)_"^^9002011.04^"_X
  1. I F="D" Q $P(G,U)
  1. Q G
  1. ;
  1. ALLV(P,BD,ED,A,SC,CL) ;PEP - GET ALL VISITS
  1. I '$G(P) Q
  1. I $G(BD)="" S BD=$$DOB^AUPNPAT(P)
  1. I $G(ED)="" S ED=DT
  1. I $G(A)="" Q
  1. S SC=$G(SC)
  1. S CL=$G(CL)
  1. NEW B,C,D,V,E
  1. S B=9999999-BD,C=0,E=9999999-ED ;get inverse date and begin at edate-1 and end when greater than begin date
  1. S D=E-1,D=D_".9999" F S D=$O(^AUPNVSIT("AA",P,D)) Q:D=""!($P(D,".")>B) D
  1. .S V=0 F S V=$O(^AUPNVSIT("AA",P,D,V)) Q:V'=+V D
  1. ..I SC]"",$P(^AUPNVSIT(V,0),U,7)'=SC Q
  1. ..I CL,$P(^AUPNVSIT(V,0),U,8)'=CL Q
  1. ..S C=C+1
  1. ..S @A@(C)=(9999999-$P(D,"."))_"^^VISIT^^"_V
  1. ..Q
  1. .Q
  1. Q
  1. ALLLAB(P,BD,ED,T,LT,LN,A) ;EP
  1. ;P - patient
  1. ;BD - beginning date
  1. ;ED - ending date
  1. ;T - lab taxonomy
  1. ;LT - loinc taxonomy
  1. ;LN - lab test name
  1. ;return all lab tests that match in array A
  1. ;FORMAT: DATE^TEST NAME^RESULT^V LAB IEN^VISIT IEN
  1. I '$G(LT) S LT=""
  1. S LN=$G(LN)
  1. S T=$G(T)
  1. NEW D,V,G,X,J,B,E,C
  1. S B=9999999-BD,C=0,E=9999999-ED ;get inverse date and begin at edate-1 and end when greater than begin date
  1. S D=E-1,D=D_".9999" S G=0 F S D=$O(^AUPNVLAB("AE",P,D)) Q:D'=+D!($P(D,".")>B) D
  1. .S X=0 F S X=$O(^AUPNVLAB("AE",P,D,X)) Q:X'=+X D
  1. ..S Y=0 F S Y=$O(^AUPNVLAB("AE",P,D,X,Y)) Q:Y'=+Y D
  1. ...I 'T,'LT,LN="" D SETLAB Q
  1. ...I T,$D(^ATXLAB(T,21,"B",X)) D SETLAB Q
  1. ...I LN]"",$$VAL^XBDIQ1(9000010.09,Y,.01)=LN D SETLAB Q
  1. ...Q:'LT
  1. ...S J=$P($G(^AUPNVLAB(Y,11)),U,13) Q:J=""
  1. ...Q:'$$LOINC(J,LT)
  1. ...D SETLAB Q
  1. ...Q
  1. ..Q
  1. .Q
  1. Q
  1. SETLAB ;
  1. S C=C+1
  1. S @A@(C)=(9999999-$P(D,"."))_"^"_$$VAL^XBDIQ1(9000010.09,Y,.01)_"^"_$$VAL^XBDIQ1(9000010.09,Y,.04)_"^"_Y_"^"_$P(^AUPNVLAB(Y,0),U,3)
  1. Q
  1. IPLSNO(P,T) ;EP - any problem list entry with a SNOMED in T
  1. NEW OUT,IN,C,G,Y,X,I,SNL,SNI
  1. S OUT="SNL"
  1. S X=$$SUBLST^BSTSAPI(OUT,T)
  1. ;BUILD INDEX
  1. S C=0 F S C=$O(SNL(C)) Q:C'=+C S I=$P(SNL(C),U,1) I I]"" S SNI(I)=SNL(C)
  1. K SNL
  1. ;LOOP PROBLEM LIST
  1. S (X,G)=""
  1. F S X=$O(^AUPNPROB("APCT",P,X)) Q:X=""!(G) D
  1. .S Y=0 F S Y=$O(^AUPNPROB("APCT",P,X,Y)) Q:Y'=+Y!(G) D
  1. ..Q:'$D(^AUPNPROB(Y,0))
  1. ..Q:$P(^AUPNPROB(Y,0),U,12)="D" ;deleted
  1. ..Q:$P(^AUPNPROB(Y,0),U,12)="I" ;inactive
  1. ..I $D(SNI(X)) S G=1_U_$$CONCPT^AUPNVUTL(X)_" on their Problem List"
  1. Q G
  1. SNOMEDPV(P,BD,ED,T,F) ;EP - any problem list entry with a SNOMED in T
  1. NEW OUT,IN,C,G,Y,X,I,SNL,SNI,V
  1. I $G(T)="" Q ""
  1. I $G(BD)="" S BD=$$DOB^AUPNPAT(P)
  1. I $G(ED)="" S ED=DT
  1. I $G(F)="" S F="D"
  1. S OUT="SNL"
  1. S X=$$SUBLST^BSTSAPI(OUT,T)
  1. ;BUILD INDEX
  1. S C=0 F S C=$O(SNL(C)) Q:C'=+C S I=$P(SNL(C),U,1) I I]"" S SNI(I)=SNL(C)
  1. K SNL
  1. ;LOOP V POV FOR EACH CODE
  1. S C=0 F S C=$O(SNI(C)) Q:C="" D
  1. .S (X,G,D)=""
  1. .S D=$O(^AUPNVPOV("ASNC",P,C,0)) I D D
  1. ..S Y=9999999-D
  1. ..Q:Y<BD
  1. ..Q:Y>ED
  1. ..S X=$O(^AUPNVPOV("ASNC",P,C,D,0))
  1. ..Q:'X
  1. ..Q:'$D(^AUPNVPOV(X,0))
  1. ..S V=$P(^AUPNVPOV(X,0),U,3)
  1. ..S SNL(D)=(9999999-D)_U_"SNOMED: "_C_U_V_U_"9000010.07"_U_X
  1. S D=$O(SNL(0))
  1. I D="" Q ""
  1. I F="D" Q $P(SNL(D),U,1)
  1. Q SNL(D)