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

BGPMUUT3.m

Go to the documentation of this file.
  1. BGPMUUT3 ; IHS/MSC/MGH - Meaningful use utility calls ;02-Mar-2011 10:38;DU
  1. ;;11.1;IHS CLINICAL REPORTING SYSTEM;**1**;JUN 27, 2011;Build 106
  1. ;
  1. VSTPOV(DFN,VIEN,TAX) ;EP Check to see if the patient had an ICD on a particular visit
  1. N TIEN,X,G,ICD,ICDT,EVDT
  1. S G=0
  1. I '$G(DFN) Q 0
  1. I $G(TAX)="" Q 0
  1. I $G(VIEN)="" Q 0
  1. S TIEN="" S TIEN=$O(^ATXAX("B",TAX,TIEN)) I 'TIEN Q 0
  1. I '$D(^AUPNVSIT(VIEN,0)) Q 0
  1. I '$D(^AUPNVPOV("AD",VIEN)) Q 0
  1. S X=0 F S X=$O(^AUPNVPOV("AD",VIEN,X)) Q:X'=+X!(G) D
  1. .I $$ICD^ATXCHK($P(^AUPNVPOV(X,0),U),TIEN,9) S G=X
  1. .Q
  1. I 'G Q 0
  1. I G D
  1. .S ICD=$P($G(^AUPNVPOV(G,0)),U,1),ICDT=$P($G(^ICD9(ICD,0)),U,1)
  1. .S EVDT=$P($G(^AUPNVPOV(G,12)),U,1)
  1. .S G=1_U_ICDT_U_EVDT
  1. Q $S(G:G,1:0)
  1. VSTICD0(DFN,VIEN,TAX) ;EP Check to see if the patient had an ICD on a particular visit
  1. N TIEN,X,G,ICD,ICDT,EVDT
  1. S G=0
  1. I '$G(DFN) Q 0
  1. I $G(TAX)="" Q 0
  1. I $G(VIEN)="" Q 0
  1. S TIEN="" S TIEN=$O(^ATXAX("B",TAX,TIEN)) I 'TIEN Q 0
  1. I '$D(^AUPNVSIT(VIEN,0)) Q 0
  1. I '$D(^AUPNVPRC("AD",VIEN)) Q 0
  1. S X=0 F S X=$O(^AUPNVPRC("AD",VIEN,X)) Q:X'=+X!(G) D
  1. .I $$ICD^ATXCHK($P(^AUPNVPRC(X,0),U),TIEN,0) S G=X
  1. .Q
  1. I 'G Q 0
  1. I G D
  1. .S EVDT=$P($G(^AUPNVPRC(G,12)),U,1)
  1. .S ICD=$P($G(^AUPNVPRC(G,0)),U,1),ICDT=$P($G(^ICD0(ICD,0)),U,1)
  1. .S G=1_U_ICDT_U_EVDT_U_G
  1. Q $S(G:G,1:0)
  1. VSTPOVA(DFN,VIEN,TAX) ;EP Check to see if the patient had an ICD on a particular visit
  1. ; ALSO checks that the PRIMARY/SECONDARY flag is active
  1. ; AND that the MODIFIER field is NOT C,D,M,O,P, or S
  1. N TIEN,X,G,ICD,ICDT,EVDT,PSFLG,INPT
  1. S PSFLG=""
  1. S G=0
  1. I '$G(DFN) Q 0
  1. I $G(TAX)="" Q 0
  1. I $G(VIEN)="" Q 0
  1. S TIEN="" S TIEN=$O(^ATXAX("B",TAX,TIEN)) I 'TIEN Q 0
  1. I '$D(^AUPNVSIT(VIEN,0)) Q 0
  1. I '$D(^AUPNVPOV("AD",VIEN)) Q 0
  1. S X=0 F S X=$O(^AUPNVPOV("AD",VIEN,X)) Q:X'=+X!(G) D
  1. .I $$ICD^ATXCHK($P(^AUPNVPOV(X,0),U),TIEN,9) S G=X
  1. .Q
  1. I 'G Q 0
  1. I G D
  1. .S ICD=$P($G(^AUPNVPOV(G,0)),U,1),ICDT=$P($G(^ICD9(ICD,0)),U,1)
  1. .S EVDT=$P($G(^AUPNVPOV(G,12)),U,1)
  1. .S INPT=$P($G(^AUPNVPOV(G,0)),U,0)
  1. .S PSFLG=$$GET1^DIQ(9000010.07,G_",",.12,"I")
  1. .S MODFLG=$$GET1^DIQ(9000010.07,G_",",.06,"I")
  1. .S G=0
  1. .I (PSFLG="P")&(MODFLG=""!("CDMOPS"'[MODFLG)) S G=1_U_ICDT_U_EVDT_U_INPT
  1. Q $S(G:G,1:0)
  1. VSTPOVB(DFN,VIEN,TAX) ;EP Check to see if the patient had an ICD on a particular visit
  1. ; ALSO checks that the MODIFIER field is NOT C,D,M,O,P, or S
  1. N TIEN,X,G,ICD,ICDT,EVDT,INPT
  1. S PSFLG="",INPT=""
  1. S G=0
  1. I '$G(DFN) Q 0
  1. I $G(TAX)="" Q 0
  1. I $G(VIEN)="" Q 0
  1. S TIEN="" S TIEN=$O(^ATXAX("B",TAX,TIEN)) I 'TIEN Q 0
  1. I '$D(^AUPNVSIT(VIEN,0)) Q 0
  1. I '$D(^AUPNVPOV("AD",VIEN)) Q 0
  1. S X=0 F S X=$O(^AUPNVPOV("AD",VIEN,X)) Q:X'=+X!(G) D
  1. .I $$ICD^ATXCHK($P(^AUPNVPOV(X,0),U),TIEN,9) S G=X
  1. .Q
  1. I 'G Q 0
  1. I G D
  1. .S ICD=$P($G(^AUPNVPOV(G,0)),U,1),ICDT=$P($G(^ICD9(ICD,0)),U,1)
  1. .S EVDT=$P($G(^AUPNVPOV(G,12)),U,1)
  1. .S DONSET=$P($G(^AUPNVPOV(G,0)),U,17)
  1. .;if onset date is available use that over entry date
  1. .I +DONSET S EVDT=DONSET
  1. .S INPT=$P($G(^AUPNVPV(G,0)),U,22)
  1. .S MODFLG=$$GET1^DIQ(9000010.07,G_",",.06,"I")
  1. .S G=0
  1. .I MODFLG=""!("CDMOPS"'[MODFLG) S G=1_U_ICDT_U_EVDT_U_INPT
  1. Q $S(G:G,1:0)
  1. MEDTAX(DFN,NDC,TAX) ;EP Check to see if the NDC code is in a taxonomy
  1. N TIEN,X,G,ICD,ICDT,ATXBEG,ATXFLG,ATXEND,ATXEND
  1. S G=0,ATXFLG=0
  1. I '$G(DFN) Q 0
  1. I $G(TAX)="" Q 0
  1. I $G(NDC)="" Q 0
  1. S TIEN="" S TIEN=$O(^ATXAX("B",TAX,TIEN)) I 'TIEN Q 0
  1. S ATXBEG=0
  1. ;F S ATXBEG=$O(^ATXAX(TIEN,21,"AA",ATXBEG)) Q:ATXBEG=""!(ATXFLG=1) D
  1. ;.S ATXEND=$O(^ATXAX(TIEN,21,"AA",ATXBEG,0)) Q:ATXEND=""
  1. ;.Q:NDC<ATXBEG
  1. ;.I NDC'>ATXEND S ATXFLG=1 ;found code in taxonomy
  1. S ATXEND="" S ATXEND=$O(^ATXAX(TIEN,21,"B",NDC,ATXEND))
  1. I +ATXEND S G=1_U_NDC
  1. Q $S(G:G,1:0)
  1. COMFORT(DFN,VIEN,TAX,ADMIT,CMF) ;EP Check to see if the patient had this code in the first 24hrs of admisssion
  1. ; CMF = check modifier flag
  1. N TIEN,X,G,ICD,ICDT,ENT,FIRST
  1. S G=0
  1. I '$G(DFN) Q 0
  1. I $G(TAX)="" Q 0
  1. I $G(VIEN)="" Q 0
  1. S TIEN="" S TIEN=$O(^ATXAX("B",TAX,TIEN)) I 'TIEN Q 0
  1. I '$D(^AUPNVSIT(VIEN,0)) Q 0
  1. I '$D(^AUPNVPOV("AD",VIEN)) Q 0
  1. S X=0 F S X=$O(^AUPNVPOV("AD",VIEN,X)) Q:'+X!(G) D
  1. .S ENT=$P($G(^AUPNVPOV(X,12)),U,1)
  1. .I +ENT D
  1. ..S FIRST=$$FMADD^XLFDT(ADMIT,+1)
  1. ..I $P(ENT,".",1)=$P(ADMIT,".",1)!($P(ENT,".",1)=$P(FIRST,".",1)) D
  1. ...I $$ICD^ATXCHK($P(^AUPNVPOV(X,0),U),TIEN,9) S G=X
  1. I 'G Q 0
  1. I G&$G(CMF) D
  1. .S ICD=$P($G(^AUPNVPOV(G,0)),U,1),ICDT=$P($G(^ICD9(+ICD,0)),U,1)
  1. .S EVDT=$P($G(^AUPNVPOV(G,12)),U,1)
  1. .S MODFLG=$$GET1^DIQ(9000010.07,G_",",.06,"I")
  1. .S G=0
  1. .I MODFLG=""!("CDMOPS"'[MODFLG) S G=1_U_ICDT_U_EVDT
  1. I G&'$G(CMF) D
  1. .S ICD=$P($G(^AUPNVPOV(G,0)),U,1),ICDT=$P($G(^ICD9(+ICD,0)),U,1)
  1. .S G=1_U_ICDT
  1. Q $S(G:G,1:0)
  1. PLSTART(DFN,TAX,STAT,ADMIT) ;EP - is DX on problem list on day of admission or following day
  1. ;Input variables
  1. ;STAT - A for all problems, C for active problems, I for inactive
  1. ;DFN=IEN of the patient
  1. ;TAX=Name of the taxonomy
  1. I $G(DFN)="" Q 0
  1. I $G(TAX)="" Q 0
  1. I $G(STAT)="" S STAT="A"
  1. N TIEN,PLSTAT,EDT,FIRST
  1. S TIEN=$O(^ATXAX("B",TAX,0))
  1. I 'TIEN Q 0
  1. N PROB,ICE,I,Y
  1. S (PROB,ICD,I)=0
  1. F S PROB=$O(^AUPNPROB("AC",DFN,PROB)) Q:PROB'=+PROB!(+I) D
  1. .I $D(^AUPNPROB(PROB,0)) S ICD=$P($G(^AUPNPROB(PROB,0)),U),PLSTAT=$P($G(^AUPNPROB(PROB,0)),U,12)
  1. .S EDT=$P($G(^AUPNPROB(PROB,0)),U,8)
  1. .I +EDT D
  1. ..S FIRST=$$FMADD^XLFDT(ADMIT,+1)
  1. ..I $P(EDT,".",1)=$P(ADMIT,".",1)!($P(EDT,".",1)=$P(FIRST,".",1)) D
  1. ...I $$ICD^ATXCHK(ICD,TIEN,9) D
  1. ....I STAT="A" S Y=$$GET1^DIQ(80,ICD,.01) S I=1_U_Y
  1. ....I (STAT="C")&(PLSTAT="A") S Y=$$GET1^DIQ(80,ICD,.01) S I=1_U_Y
  1. ....I (STAT="I")&(PLSTAT="I") S Y=$$GET1^DIQ(80,ICD,.01) S I=1_U_Y
  1. Q I
  1. PALCPT(DFN,VIEN,TAX,ADMIT) ;EP - return ien of CPT entry if patient had this CPT in the first 24hrs after admission
  1. N TIEN,G,CPTT,CPT,FIRST,ENT
  1. I '$G(DFN) Q 0
  1. I $G(TAX)="" Q 0
  1. I $G(VIEN)="" Q 0
  1. I $G(ADMIT)="" Q 0
  1. S G=0
  1. S TIEN="" S TIEN=$O(^ATXAX("B",TAX,TIEN)) Q:'TIEN 0
  1. I '$D(^AUPNVSIT(VIEN,0)) Q 0
  1. I '$D(^AUPNVCPT("AD",VIEN)) Q 0
  1. S X=0 F S X=$O(^AUPNVCPT("AD",VIEN,X)) Q:'+X!(G) D
  1. .S ENT=$P($G(^AUPNVCPT(X,12)),U,1)
  1. .I +ENT D
  1. ..S FIRST=$$FMADD^XLFDT(ADMIT,+1)
  1. ..I $P(ENT,".",1)=$P(ADMIT,".",1)!($P(ENT,".",1)=$P(FIRST,".",1)) D
  1. ...I $$ICD^ATXCHK($P(^AUPNVCPT(X,0),U),TIEN,1) S G=X
  1. I 'G Q 0
  1. I G D
  1. .S CPT=$P($G(^AUPNVCPT(G,0)),U,1),CPTT=$P($G(^ICPT(CPT,0)),U,1)
  1. .S G=1_U_CPTT
  1. Q $S(G:G,1:0)
  1. PALICD0(DFN,VIEN,TAX,ADMIT) ;EP Check to see if the patient had an ICD0 in the first 24hrs after admission
  1. N TIEN,X,G,ICD,ICDT,ENT,FIRST
  1. S G=0
  1. I '$G(DFN) Q 0
  1. I $G(TAX)="" Q 0
  1. I $G(VIEN)="" Q 0
  1. S TIEN="" S TIEN=$O(^ATXAX("B",TAX,TIEN)) I 'TIEN Q 0
  1. I '$D(^AUPNVSIT(VIEN,0)) Q 0
  1. I '$D(^AUPNVPRC("AD",VIEN)) Q 0
  1. S X=0 F S X=$O(^AUPNVPRC("AD",VIEN,X)) Q:X'=+X!(G) D
  1. .S ENT=$P($G(^AUPNVCPT(X,12)),U,1)
  1. .I +ENT D
  1. ..S FIRST=$$FMADD^XLFDT(ADMIT,+1)
  1. ..I $P(ENT,".",1)=$P(ADMIT,".",1)!($P(ENT,".",1)=$P(FIRST,".",1)) D
  1. ...I $$ICD^ATXCHK($P(^AUPNVPRC(X,0),U),TIEN,0) S G=X
  1. I 'G Q 0
  1. I G D
  1. .S ICD=$P($G(^AUPNVPRC(G,0)),U,1),ICDT=$P($G(^ICD0(ICD,0)),U,1)
  1. .S G=1_U_ICDT
  1. Q $S(G:G,1:0)
  1. DTECPT(DFN,VIEN,TAX,ADMIT,ENDDT) ;EP - return ien of CPT entry if patient had this CPT entered in the time frame
  1. N TIEN,ED,BD,G,CPTT,CPT
  1. I '$G(DFN) Q 0
  1. I $G(TAX)="" Q 0
  1. I $G(VIEN)="" Q 0
  1. I $G(ADMIT)="" Q 0
  1. S G=0
  1. S TIEN="" S TIEN=$O(^ATXAX("B",TAX,TIEN)) Q:'TIEN 0
  1. I '$D(^AUPNVSIT(VIEN,0)) Q 0
  1. I '$D(^AUPNVCPT("AD",VIEN)) Q 0
  1. S X=0 F S X=$O(^AUPNVCPT("AD",VIEN,X)) Q:'+X!(G) D
  1. .S ENT=$P($G(^AUPNVCPT(X,12)),U,1)
  1. .I +ENT D
  1. ..I (ENT>ADMIT)&(ENT<ENDDT) D
  1. ...I $$ICD^ATXCHK($P(^AUPNVCPT(X,0),U),TIEN,1) S G=X
  1. I 'G Q 0
  1. I G D
  1. .S CPT=$P($G(^AUPNVCPT(G,0)),U,1),CPTT=$P($G(^ICPT(CPT,0)),U,1)
  1. .S G=1_U_CPTT
  1. Q $S(G:G,1:0)
  1. DTEICD0(DFN,VIEN,TAX,ADMIT,ENDDT) ;EP Check to see if the patient had an ICD0 stored in the dates selected
  1. N TIEN,X,G,ICD,ICDT,ENT,FIRST
  1. S G=0
  1. I '$G(DFN) Q 0
  1. I $G(TAX)="" Q 0
  1. I $G(VIEN)="" Q 0
  1. S TIEN="" S TIEN=$O(^ATXAX("B",TAX,TIEN)) I 'TIEN Q 0
  1. I '$D(^AUPNVSIT(VIEN,0)) Q 0
  1. I '$D(^AUPNVPRC("AD",VIEN)) Q 0
  1. S X=0 F S X=$O(^AUPNVPRC("AD",VIEN,X)) Q:X'=+X!(G) D
  1. .S ENT=$P($G(^AUPNVCPT(X,12)),U,1)
  1. .I +ENT D
  1. ..I (ENT>ADMIT)&(ENT<ENDDT) D
  1. ...I $$ICD^ATXCHK($P(^AUPNVPRC(X,0),U),TIEN,0) S G=X
  1. I 'G Q 0
  1. I G D
  1. .S ICD=$P($G(^AUPNVPRC(G,0)),U,1),ICDT=$P($G(^ICD0(ICD,0)),U,1)
  1. .S G=1_U_ICDT
  1. Q $S(G:G,1:0)