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

BGPMUUT2.m

Go to the documentation of this file.
  1. BGPMUUT2 ; IHS/MSC/MGH - MEANINGFUL USE UTILITIES 02 Jul 2008 2:07 PM ;01-Mar-2011 15:32;DU
  1. ;;12.1;IHS CLINICAL REPORTING;;MAY 17, 2012;Build 66
  1. ;
  1. ;
  1. NPI(USR) ;EP - Return the NPI for the selected Provider
  1. Q $S($D(^VA(200,USR,"NPI")):$P(^VA(200,USR,"NPI"),U),1:"UNKNOWN")
  1. TIN(USR) ;EP - Return the Tax ID number for selected Provider
  1. Q $S($D(^VA(200,USR,"TPB")):$P(^VA(200,USR,"TPB"),U,2),1:"UNKNOWN")
  1. INITIALS(USR) ;Return the initials for selected Provider
  1. Q $S($D(^VA(200,USR,0)):$P(^VA(200,USR,0),U,2),1:"UNKNOWN")
  1. LASTDX(DFN,BDATE,EDATE,TAX) ;EP
  1. I '$G(DFN) Q 0
  1. ;RETURN BGPDX4=1 or 0^dx code^date found^IEN OF ICD CODE^IEN OF V POV
  1. S (BGPDX1,BGPDX2,BGPDX3,BGPDX4,BGPTX5)=""
  1. I $G(BDATE)="" S BDATE=$P(^DPT(DFN,0),U,3) ;if no date then set to DOB
  1. I $G(EDATE)="" S EDATE=DT ;if no end date then set to today
  1. S BGPTX5=$O(^ATXAX("B",TAX,0)) ;get taxonomy ien
  1. I BGPTX5="" Q 0 ;not a valid taxonomy
  1. S BGPDX4=0 ;return value
  1. S BGPDXBD=9999999-BDATE,BGPDXED=9999999-EDATE ;get inverse date and begin at edate-1 and end when greater than begin date
  1. S BGPDX1=BGPDXED-1 F S BGPDX1=$O(^AUPNVPOV("AA",DFN,BGPDX1)) Q:BGPDX1=""!(BGPDX1>BGPDXBD)!(BGPDX4'=0) D
  1. .S BGPDX2=0 F S BGPDX2=$O(^AUPNVPOV("AA",DFN,BGPDX1,BGPDX2)) Q:BGPDX2'=+BGPDX2!(BGPDX4'=0) D
  1. ..S BGPDX3=$P($G(^AUPNVPOV(BGPDX2,0)),U)
  1. ..Q:BGPDX3="" ;bad xref
  1. ..Q:'$D(^ICD9(BGPDX3))
  1. ..Q:'$$ICD^ATXCHK(BGPDX3,BGPTX5,9)
  1. ..S BGPDX4=1_"^"_$P($$ICDDX^ICDCODE(BGPDX3),U,2)_"^"_(9999999-BGPDX1)_"^"_BGPDX3_"^"_BGPDX2
  1. Q BGPDX4
  1. LASTDXI(P,T,BDATE,EDATE,SC) ;EP
  1. ; P = DFN
  1. ; T = Diagnosis Code
  1. ; SC = Cause of DX (see field 07 of V POV file)
  1. I '$G(P) Q ""
  1. S SC=$G(SC)
  1. ;RETURN BGPDX4=1 or 0^dx code^date found^IEN OF ICD CODE^IEN OF V POV
  1. NEW BGPDX1,BGPDX2,BGPDX3,BGPDX5,BGPTX5,BGPDX4,BGPDXV
  1. S (BGPDX1,BGPDX2,BGPDX3,BGPDX4,BGPTX5)=""
  1. I $G(BDATE)="" S BDATE=$P(^DPT(P,0),U,3) ;if no date then set to DOB
  1. I $G(EDATE)="" S EDATE=DT ;if no end date then set to today
  1. ;S BGPTX5=$O(^ICD9("AB",T,0)) ;get taxonomy ien
  1. S BGPTX5=+$$CODEN^ICDCODE(T,80)
  1. I BGPTX5'>0 Q "" ;not a valid code
  1. S BGPDX4="" ;return value
  1. S BGPDXBD=9999999-BDATE,BGPDXED=9999999-EDATE ;get inverse date and begin at edate-1 and end when greater than begin date
  1. S BGPDX1=BGPDXED-1 F S BGPDX1=$O(^AUPNVPOV("AA",P,BGPDX1)) Q:BGPDX1=""!(BGPDX1>BGPDXBD)!(BGPDX4]"") D
  1. .S BGPDX2=0 F S BGPDX2=$O(^AUPNVPOV("AA",P,BGPDX1,BGPDX2)) Q:BGPDX2'=+BGPDX2!(BGPDX4]"") D
  1. ..S BGPDX3=$P($G(^AUPNVPOV(BGPDX2,0)),U)
  1. ..Q:BGPDX3="" ;bad xref
  1. ..Q:BGPDX3'=BGPTX5
  1. ..S BGPDXV=$P(^AUPNVPOV(BGPDX2,0),U,3)
  1. ..I '$D(^AUPNVSIT(BGPDXV,0)) Q ;no visit entry
  1. ..I SC]"",SC'[$P(^AUPNVSIT(BGPDXV,0),U,7)
  1. ..S BGPDX4=1_"^"_$P($$ICDDX^ICDCODE(BGPDX3),U,2)_"^"_(9999999-BGPDX1)_"^"_BGPDX3_"^"_BGPDX2
  1. ..Q
  1. .Q
  1. Q BGPDX4
  1. LASTPRC(DFN,BDATE,EDATE,TAX) ;EP
  1. I '$G(DFN) Q 0
  1. ;RETURN BGPDX4=1 or 0^dx code^date found^IEN OF ICD CODE^IEN OF V PROC
  1. S (BGPDX1,BGPDX2,BGPDX3,BGPDX4,BGPTX5)=""
  1. I $G(BDATE)="" S BDATE=$P(^DPT(DFN,0),U,3) ;if no date then set to DOB
  1. I $G(EDATE)="" S EDATE=DT ;if no end date then set to today
  1. S BGPTX5=$O(^ATXAX("B",TAX,0)) ;get taxonomy ien
  1. I BGPTX5="" Q "" ;not a valid taxonomy
  1. S BGPDX4=0 ;return value
  1. S BGPDXBD=9999999-BDATE,BGPDXED=9999999-EDATE ;get inverse date and begin at edate-1 and end when greater than begin date
  1. S BGPDX1=BGPDXED-1 F S BGPDX1=$O(^AUPNVPRC("AA",DFN,BGPDX1)) Q:BGPDX1=""!(BGPDX1>BGPDXBD)!(+BGPDX4) D
  1. .S BGPDX2=0 F S BGPDX2=$O(^AUPNVPRC("AA",DFN,BGPDX1,BGPDX2)) Q:BGPDX2'=+BGPDX2!(+BGPDX4) D
  1. ..S BGPDX3=$P($G(^AUPNVPRC(BGPDX2,0)),U)
  1. ..Q:BGPDX3="" ;bad xref
  1. ..Q:'$$ICD^ATXCHK(BGPDX3,BGPTX5,0)
  1. ..S BGPDX4=1_"^"_$P($$ICDOP^ICDCODE(BGPDX3),U,2)_"^"_(9999999-BGPDX1)_"^"_BGPDX3_"^"_BGPDX2
  1. ..Q
  1. .Q
  1. Q BGPDX4
  1. ;
  1. LASTPRCI(P,T,BDATE,EDATE) ;EP
  1. I '$G(P) Q ""
  1. ;RETURN BGPDX4=1 or 0^dx code^date found^IEN OF ICD CODE^IEN OF V PROC
  1. S (BGPDX1,BGPDX2,BGPDX3,BGPDX4,BGPTX5)=""
  1. I $G(BDATE)="" S BDATE=$P(^DPT(P,0),U,3) ;if no date then set to DOB
  1. I $G(EDATE)="" S EDATE=DT ;if no end date then set to today
  1. ;S BGPTX5=$O(^ICD0("AB",T,0)) ;get ICD PROC ien
  1. S BGPTX5=+$$CODEN^ICDCODE(T,80.1)
  1. I BGPTX5'>0 Q "" ;not a valid PROC
  1. S BGPDX4="" ;return value
  1. S BGPDXBD=9999999-BDATE,BGPDXED=9999999-EDATE ;get inverse date and begin at edate-1 and end when greater than begin date
  1. S BGPDX1=BGPDXED-1 F S BGPDX1=$O(^AUPNVPRC("AA",P,BGPDX1)) Q:BGPDX1=""!(BGPDX1>BGPDXBD)!(BGPDX4]"") D
  1. .S BGPDX2=0 F S BGPDX2=$O(^AUPNVPRC("AA",P,BGPDX1,BGPDX2)) Q:BGPDX2'=+BGPDX2!(BGPDX4]"") D
  1. ..S BGPDX3=$P($G(^AUPNVPRC(BGPDX2,0)),U)
  1. ..Q:BGPDX3="" ;bad xref
  1. ..Q:BGPTX5'=BGPDX3
  1. ..S BGPDX4=1_"^"_$P($$ICDOP^ICDCODE(BGPDX3),U,2)_"^"_(9999999-BGPDX1)_"^"_BGPDX3_"^"_BGPDX2
  1. ..Q
  1. .Q
  1. Q BGPDX4
  1. FIRSTPRC(P,T,BDATE,EDATE) ;EP
  1. I '$G(P) Q ""
  1. ;RETURN BGPDX4=1 or 0^dx code^date found^IEN OF ICD CODE^IEN OF V PROC
  1. S (BGPDX1,BGPDX2,BGPDX3,BGPDX4,BGPTX5)=""
  1. I $G(BDATE)="" S BDATE=$P(^DPT(P,0),U,3) ;if no date then set to DOB
  1. I $G(EDATE)="" S EDATE=DT ;if no end date then set to today
  1. S BGPTX5=$O(^ATXAX("B",T,0)) ;get taxonomy ien
  1. I BGPTX5="" Q "" ;not a valid taxonomy
  1. S BGPDX4="" ;return value
  1. S BGPX=0 F S BGPX=$O(^AUPNVPRC("AC",P,BGPX)) Q:BGPX'=+BGPX!(BGPDX4]"") D
  1. .S BGPDX3=$P($G(^AUPNVPRC(BGPX,0)),U)
  1. .Q:BGPDX3="" ;BAD XREF
  1. .Q:'$$ICD^ATXCHK(BGPDX3,BGPTX5,0)
  1. .S D=$P(^AUPNVPRC(BGPX,0),U,3)
  1. .Q:'D
  1. .S D=$P($P($G(^AUPNVSIT(D,0)),U),".")
  1. .Q:D<BDATE
  1. .Q:D>EDATE
  1. .S BGPDX4=1_"^"_$P($$ICDOP^ICDCODE(BGPDX3),U,2)_"^"_D_"^"_BGPDX3_"^"_BGPX
  1. .Q
  1. Q BGPDX4
  1. NMIREF(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) D
  1. .S Y=0 F S Y=$O(^AUPNPREF("AA",P,F,I,X,Y)) Q:Y'=+Y D
  1. ..Q:$P(^AUPNPREF(Y,0),U,7)'="N"
  1. ..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. REFUSAL(P,F,I,B,E) ;EP (PAT,FILE,ITEM,BDT,EDT)
  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. ;backup the begin date by 1 day to accomodate the > check below
  1. S B=$$FMADD^XLFDT(B,-1)
  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. MEDREF(PAT,BDT,EDT,TAX) ;EP
  1. NEW G,X,Y,%DT,NDC,NDCCODE,REASON,NDCF
  1. ;S X=BDT,%DT="P" D ^%DT S BDT=Y
  1. ;S X=EDT,%DT="P" D ^%DT S EDT=Y
  1. S (ITEM,G)=0 F S ITEM=$O(^AUPNPREF("AA",PAT,50,ITEM)) Q:'+ITEM!(G) D
  1. .;See if this item is in the taxonomy
  1. .S NDC=$P($G(^PSDRUG(ITEM,2)),U,4)
  1. .Q:'NDC
  1. .;Setup the NDC code for a proper lookup in the taxonomy
  1. .S NDCCODE=$$RJ^XLFSTR($P(NDC,"-"),5,0)_$$RJ^XLFSTR($P(NDC,"-",2),4,0)_$$RJ^XLFSTR($P(NDC,"-",3),2,0)
  1. .;call the taxonomy lookup
  1. .S NDCF=$$MEDTAX^BGPMUUT3(DFN,NDCCODE,TAX)
  1. .I +NDCF D
  1. ..;Now check dates and reason
  1. ..S X=0 F S X=$O(^AUPNPREF("AA",PAT,50,ITEM,X)) Q:X'=+X!(G) D
  1. ...S Y=0 F S Y=$O(^AUPNPREF("AA",PAT,50,ITEM,X,Y)) Q:Y'=+Y D
  1. ....S D=$P(^AUPNPREF(Y,0),U,3) I D'<BDT&(D'>EDT) D
  1. .....S REASON=$P(^AUPNPREF(Y,0),U,7)
  1. .....I REASON="R"!(REASON="N") S G="1^"_D_"^"_$P(^AUPNPREF(Y,0),U,7)
  1. Q G
  1. RADREF(P,BDATE,EDATE,T) ;EP - return ien of CPT entry if patient had this CPT
  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,71,I)) Q:I=""!($P(G,U)) D
  1. .S (X,G)=0 F S X=$O(^AUPNPREF("AA",P,71,I,X)) Q:X'=+X!($P(G,U)) S Y=0 F S Y=$O(^AUPNPREF("AA",P,71,I,X,Y)) Q:Y'=+Y S D=$P(^AUPNPREF(Y,0),U,3) I D'<BDATE&(D'>EDATE) D
  1. ..S C=$P($G(^RAMIS(71,I,0)),U,9) Q:C=""
  1. ..Q:'$$ICD^ATXCHK(C,T,1)
  1. ..S G="1^"_D_"^"_$P(^AUPNPREF(Y,0),U,7)
  1. .Q
  1. Q G
  1. LABREF(P,BDATE,EDATE,LT,CT) ;EP - return date and reason for refusal of LAB (LOINC)
  1. ; P = Patient IEN
  1. ; BDATE = begin date to search
  1. ; EDATE = end date to search
  1. ; LT = Taxonomy name for LOINC check
  1. ; CT = Taxonomy name for CPT check
  1. I '$G(P) Q ""
  1. I $G(LT)="" 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 C=""
  1. S G=0
  1. S I=0 F S I=$O(^AUPNPREF("AA",P,60,I)) Q:I=""!($P(G,U)) D
  1. .S (X,G)=0 F S X=$O(^AUPNPREF("AA",P,60,I,X)) Q:X'=+X!($P(G,U)) S Y=0 F S Y=$O(^AUPNPREF("AA",P,60,I,X,Y)) Q:Y'=+Y S D=$P(^AUPNPREF(Y,0),U,3) I D'<BDATE&(D'>EDATE) D
  1. ..S BGPH=0 F S BGPH=$O(^LAB(60,I,1,BGPH)) Q:BGPH'>0 D
  1. ...S L=$P($G(^LAB(60,I,1,BGPH,95.3)),U,1)
  1. ...I L'="" I $$LOINCREF(L,LT) S G="1^"_D_"^"_$P(^AUPNPREF(Y,0),U,7)
  1. ...Q:+G
  1. ...S C=$P($G(^LAB(60,I,1,BGPH,3)),U,1)
  1. ...I L'="" I $$ICD^ATXCHK(C,CT,1) S G="1^"_D_"^"_$P(^AUPNPREF(Y,0),U,7)
  1. Q G
  1. LOINCREF(C,T) ;check taxonomy T for LOINC code; passed in LOINC code might not have the check digit
  1. N TIEN
  1. S TIEN="" S TIEN=$O(^ATXAX("B",T,TIEN)) Q:'TIEN 0
  1. Q +$O(^ATXAX(TIEN,21,"B",$P(C,"-",1)_"-"))
  1. ;
  1. LASTECOD(P,T,BDATE,EDATE) ;EP
  1. N BGPDX1,BGPDX2,BGPDX3,BGPDX4,BGPDX5,BGPDX6,BGPDX7,BGPDXBD,BGPDXED
  1. I '$G(P) Q ""
  1. ;RETURN BGPDX4=1 or 0^dx code^date found^IEN OF ICD CODE^IEN OF V POV
  1. S (BGPDX1,BGPDX2,BGPDX3,BGPDX4,BGPDX5,BGPDX6,BGPDX7)=""
  1. I $G(BDATE)="" S BDATE=$P(^DPT(P,0),U,3) ;if no date then set to DOB
  1. I $G(EDATE)="" S EDATE=DT ;if no end date then set to today
  1. S BGPTX5=$O(^ATXAX("B",T,0)) ;get taxonomy ien
  1. I BGPTX5="" Q "" ;not a valid taxonomy
  1. S BGPDX4="" ;return value
  1. S BGPDXBD=9999999-BDATE,BGPDXED=9999999-EDATE ;get inverse date and begin at edate-1 and end when greater than begin date
  1. S BGPDX1=BGPDXED-1 F S BGPDX1=$O(^AUPNVPOV("AA",P,BGPDX1)) Q:BGPDX1=""!(BGPDX1>BGPDXBD)!(BGPDX4]"") D
  1. .S BGPDX2=0 F S BGPDX2=$O(^AUPNVPOV("AA",P,BGPDX1,BGPDX2)) Q:BGPDX2'=+BGPDX2!(BGPDX4]"") D
  1. ..F BGPDX6=9,18,19 S BGPDX3=$P($G(^AUPNVPOV(BGPDX2,0)),U,BGPDX6) D
  1. ...Q:BGPDX3="" ;no ecode
  1. ...I $$ICD^ATXCHK(BGPDX3,BGPTX5,9) S BGPDX4=1_"^"_$P($$ICDDX^ICDCODE(BGPDX3),U,2)_"^"_(9999999-BGPDX1)_"^"_BGPDX3_"^"_BGPDX2
  1. ..Q
  1. .Q
  1. Q BGPDX4
  1. REFTAX(PAT,FILE,TAX,BEG,END) ;EP - refused an item in a taxonomy
  1. I '$G(PAT) Q 0
  1. I '$G(FILE) Q 0
  1. I $G(TAX)="" Q 0
  1. I $G(BEG)="" Q 0
  1. I $G(END)="" Q 0
  1. NEW G,X,Y,%DT,T1,TIEN,T1PTR
  1. S X=BEG,%DT="P" D ^%DT S BEG=Y
  1. ;S X=END,%DT="P" D ^%DT S E=Y
  1. S TIEN=$O(^ATXAX("B",TAX,0)) ;get taxonomy ien
  1. S T1=0,G="" F S T1=$O(^ATXAX(TIEN,21,"B",T1)) Q:T1=""!(G) D
  1. .S T1PTR=$S(FILE=80:$P($$ICDDX^ICDCODE(T1),U),FILE=80.1:$P($$ICDOP^ICDCODE(T1),U),FILE=81:$P($$CPT^ICPTCOD(T1),U),1:X)
  1. .S (X,G)=0 F S X=$O(^AUPNPREF("AA",PAT,FILE,T1PTR,X)) Q:X'=+X!(G) D
  1. ..S Y=0 F S Y=$O(^AUPNPREF("AA",PAT,FILE,T1PTR,X,Y)) Q:Y'=+Y D
  1. ...S D=$P(^AUPNPREF(Y,0),U,3) I D'<BEG&(D'>END) D
  1. ....I $P(^AUPNPREF(Y,0),U,7)="R"!($P(^AUPNPREF(Y,0),U,7)="N") S G="1^"_D_"^"_$P(^AUPNPREF(Y,0),U,7)_"^"_T1
  1. Q G
  1. CPTREFT(P,BDATE,EDATE,T) ;EP - return ien of CPT entry if patient had this CPT
  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^ATXCHK(I,T,1)
  1. ..S G="1^"_D_"^"_$P(^AUPNPREF(Y,0),U,7)
  1. .Q
  1. Q G
  1. PRCREFT(P,BDATE,EDATE,T) ;EP - return ien of CPT entry if patient had this CPT
  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,80.1,I)) Q:I=""!($P(G,U)) D
  1. .S (X,G)=0 F S X=$O(^AUPNPREF("AA",P,80.1,I,X)) Q:X'=+X!($P(G,U)) S Y=0 F S Y=$O(^AUPNPREF("AA",P,80.1,I,X,Y)) Q:Y'=+Y S D=$P(^AUPNPREF(Y,0),U,3) I D'<BDATE&(D'>EDATE) D
  1. ..Q:'$$ICD^ATXCHK(I,T,0)
  1. ..S G="1^"_D_"^"_$P(^AUPNPREF(Y,0),U,7)
  1. .Q
  1. Q G
  1. LOINC(DFN,BDATE,EDATE,TAX) ;Retuns IEN of Lab test if pt has this LOINC code
  1. N IEN,CODE,B,E,D,L,G,X,J
  1. S (CODE,B,E,D,L,G,X,J)=""
  1. S IEN=$O(^ATXAX("B",TAX,0))
  1. Q:'IEN
  1. S B=9999999-BDATE,E=9999999-EDATE S D=E-1 F S D=$O(^AUPNVLAB("AE",DFN,D)) Q:D'=+D!(D>B)!(G]"") D
  1. .S L=0 F S L=$O(^AUPNVLAB("AE",DFN,D,L)) Q:L'=+L!(G]"") D
  1. ..S X=0 F S X=$O(^AUPNVLAB("AE",DFN,D,L,X)) Q:X'=+X!(G]"") D
  1. ...Q:'$D(^AUPNVLAB(X,0))
  1. ...S J=$P($G(^AUPNVLAB(X,11)),U,13) Q:J=""
  1. ...I $$LOINC2(J,IEN) D
  1. ....S G=(9999999-D)_U_X Q
  1. Q G
  1. ;
  1. LOINC2(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",%)) S CODE=% Q 1
  1. Q ""
  1. ;
  1. COLD(DFN,BDATE,EDATE,TAX) ;Retuns IEN of Lab test if pt has this LOINC code
  1. N IEN,CODE,COLDTE,B,E,D,L,G,X,J
  1. S (CODE,B,E,D,L,G,X,J)=""
  1. S IEN=$O(^ATXAX("B",TAX,0))
  1. Q:'IEN
  1. S B=9999999-BDATE,E=9999999-EDATE S D=E-1 F S D=$O(^AUPNVLAB("AE",DFN,D)) Q:D'=+D!(D>B)!(G]"") D
  1. .S L=0 F S L=$O(^AUPNVLAB("AE",DFN,D,L)) Q:L'=+L!(G]"") D
  1. ..S X=0 F S X=$O(^AUPNVLAB("AE",DFN,D,L,X)) Q:X'=+X!(G]"") D
  1. ...Q:'$D(^AUPNVLAB(X,0))
  1. ...S J=$P($G(^AUPNVLAB(X,11)),U,13) Q:J=""
  1. ...S COLDTE=$P($G(^AUPNVLAB(X,12)),U,1)
  1. ...Q:COLDTE<BDATE!(COLDTE>EDATE)
  1. ...I $$LOINC2(J,IEN) D
  1. ....S G=(9999999-D)_U_X_U_$P($G(^AUPNVLAB(X,12)),U,1) Q
  1. Q G
  1. ;
  1. GETIMMS(P,EDATE,C,BGPX,CPTLST) ;EP
  1. K BGPX
  1. NEW X,Y,I,Z,V
  1. S X=0 F S X=$O(^AUPNVIMM("AC",P,X)) Q:X'=+X D
  1. .Q:'$D(^AUPNVIMM(X,0)) ;happens
  1. .S Y=$P(^AUPNVIMM(X,0),U)
  1. .Q:'Y ;happens too
  1. .S I=$P($G(^AUTTIMM(Y,0)),U,3) ;get HL7/CVX code
  1. .F Z=1:1:$L(C,U) I I=$P(C,U,Z) S V=$P(^AUPNVIMM(X,0),U,3) I V S D=$P($P($G(^AUPNVSIT(V,0)),U),".") I D]"",D'>EDATE S BGPX(D)=Y_U_V
  1. .Q
  1. I $D(CPTLST) D GIMMCPT(P,EDATE,CPTLST,.BGPX)
  1. Q
  1. GIMMCPT(P,EDATE,CPTLST,BGPX) ;
  1. N V,G,X,Y,Z
  1. S ED=9999999-EDATE,BD=9999999-$$DOB^AUPNPAT(P),G=0
  1. F S ED=$O(^AUPNVSIT("AA",P,ED)) Q:ED=""!($P(ED,".")>BD) D
  1. .S V=0 F S V=$O(^AUPNVSIT("AA",P,ED,V)) Q:V'=+V D
  1. ..Q:'$D(^AUPNVSIT(V,0))
  1. ..S X=0 F S X=$O(^AUPNVCPT("AD",V,X)) Q:X'=+X D
  1. ...S Y=$P(^AUPNVCPT(X,0),U) S Y=$P($$CPT^ICPTCOD(Y),U,2) I $$CPTCHK(CPTLST,Y) S BGPX(9999999-$P(ED,"."))=Y_U_V_U_1
  1. ..S X=0 F S X=$O(^AUPNVTC("AD",V,X)) Q:X'=+X D
  1. ...S Y=$P(^AUPNVTC(X,0),U,7) Q:'Y S Y=$P($$CPT^ICPTCOD(Y),U,2) I $$CPTCHK(CPTLST,Y) S BGPX(9999999-$P(ED,"."))=Y_U_V_U_1
  1. Q
  1. CPTCHK(CPTLST,Y) ;Check if variable Y is in CPTLST
  1. N I,FF
  1. S FF=0
  1. F I=1:1:$L(CPTLST,U) I $P(CPTLST,U,I)=Y S FF=1 Q
  1. Q FF
  1. IMMREF(P,IMM,BD,ED) ;EP
  1. NEW X,Y,G,D,R
  1. I 'IMM Q ""
  1. S (X,G)=0,Y=$O(^AUTTIMM("C",IMM,0))
  1. I 'Y Q ""
  1. F S X=$O(^BIPC("AC",P,Y,X)) Q:X'=+X D
  1. .S R=$P(^BIPC(X,0),U,3)
  1. .Q:R=""
  1. .Q:'$D(^BICONT(R,0))
  1. .Q:$P(^BICONT(R,0),U,1)'["Refusal"
  1. .S D=$P(^BIPC(X,0),U,4)
  1. .Q:D=""
  1. .Q:$P(^BIPC(X,0),U,4)<BD
  1. .Q:$P(^BIPC(X,0),U,4)>ED
  1. .S G=G+1
  1. Q G