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

BDMUTL.m

Go to the documentation of this file.
  1. BDMUTL ; IHS/CMI/LAB - Area Database Utility Routine ; 14 Sep 2015 12:41 PM
  1. ;;2.0;DIABETES MANAGEMENT SYSTEM;**5,8,9,10,11,12**;JUN 14, 2007;Build 51
  1. ;
  1. SNOMED(YR,LIST,SMC) ;EP - is snomed code smc on the list for the year
  1. I 'YR S YR=2019
  1. I LIST="" Q ""
  1. I SMC="" Q ""
  1. NEW YRI,LISTI
  1. S YRI=$O(^BDMSNME("B",YR,0)) I 'YRI Q ""
  1. S LISTI=$O(^BDMSNME(YRI,11,"B",LIST,0)) I 'LISTI Q ""
  1. I $D(^BDMSNME(YRI,11,LISTI,11,"B",SMC)) Q 1
  1. Q ""
  1. GETIMMS(P,EDATE,C,BDMX) ;EP
  1. K BDMX
  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 BDMX(D)=Y
  1. .Q
  1. Q
  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
  1. ANCONT(P,C,ED) ;EP - ANALPHYLAXIS CONTRAINDICATION
  1. NEW X
  1. S X=0,G="",Y=$O(^AUTTIMM("C",C,0)) I Y F S X=$O(^BIPC("AC",P,Y,X)) Q:X'=+X!(G) D
  1. .S R=$P(^BIPC(X,0),U,3)
  1. .Q:R=""
  1. .Q:'$D(^BICONT(R,0))
  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. .I $P(^BICONT(R,0),U,1)="Anaphylaxis" S G="2 No - Contraindication Anaphylaxis"
  1. Q G
  1. DEMO(P,T) ;EP - called to exclude demo patients
  1. I $G(P)="" Q 0
  1. I $G(T)="" S T="I"
  1. I T="I" Q 0
  1. NEW R
  1. S R=""
  1. I T="E" D Q R
  1. .I $P($G(^DPT(P,0)),U)["DEMO,PATIENT" S R=1 Q
  1. .NEW %
  1. .S %=$O(^DIBT("B","RPMS DEMO PATIENT NAMES",0))
  1. .I '% S R=0 Q
  1. .I $D(^DIBT(%,1,P)) S R=1 Q
  1. I T="O" D Q R
  1. .I $P($G(^DPT(P,0)),U)["DEMO,PATIENT" S R=0 Q
  1. .NEW %
  1. .S %=$O(^DIBT("B","RPMS DEMO PATIENT NAMES",0))
  1. .I '% S R=1 Q
  1. .I $D(^DIBT(%,1,P)) S R=0 Q
  1. .S R=1 Q
  1. Q 0
  1. ;
  1. RZERO(V,L) ;ep right zero fill
  1. NEW %,I
  1. S %=$L(V),Z=L-% F I=1:1:Z S V=V_"0"
  1. Q V
  1. LZERO(V,L) ;EP - left zero fill
  1. NEW %,I
  1. S %=$L(V),Z=L-% F I=1:1:Z S V="0"_V
  1. Q V
  1. LBLK(V,L) ;EP -left blank fill
  1. NEW %,I
  1. S %=$L(V),Z=L-% F I=1:1:Z S V=" "_V
  1. Q V
  1. RBLK(V,L) ;EP right blank fill
  1. NEW %,I
  1. S %=$L(V),Z=L-% F I=1:1:Z S V=V_" "
  1. Q V
  1. ;
  1. DEMOCHK(R) ;EP - check demo pat
  1. NEW DIR,DA
  1. S R=-1
  1. S DIR(0)="S^I:Include ALL Patients;E:Exclude DEMO Patients;O:Include ONLY DEMO Patients",DIR("A")="Demo Patient Inclusion/Exclusion",DIR("B")="E"
  1. KILL DA D ^DIR KILL DIR
  1. I $D(DIRUT) S R=-1 Q
  1. S R=Y
  1. Q
  1. ;
  1. ICD(VAL,TAXNM,TYP) ;EP -- check to see if value is in taxonomy in ^TMP("BDMTMP",$J,Taxonomy Name
  1. ;add 3rd param with pass type
  1. I $G(VAL)="" Q 0
  1. I $G(TAXNM)="" Q 0
  1. I $G(TYP)="" Q 0
  1. I $G(BDMJOB)=""!($G(BDMBTH)="") Q $$ICD^ATXCHK(VAL,$O(^ATXAX("B",TAXNM,0)),TYP)
  1. I '$D(^XTMP("BDMTAX",BDMJOB,BDMBTH,TAXNM)) Q $$ICD^ATXCHK(VAL,$O(^ATXAX("B",TAXNM,0)),TYP)
  1. I $D(^XTMP("BDMTAX",BDMJOB,BDMBTH,TAXNM,VAL)) Q 1
  1. Q 0
  1. ;
  1. UNFOLDTX(YEAR) ;EP -- unfold all taxes for dm audit into ^TMP("BDMTMP",$J,Taxonomy Name
  1. ;lets go through all the taxonomies needed here and put them in above location
  1. ;need to check DMS Taxonomies Used option to determine
  1. K ^XTMP("BDMTAX",BDMJOB,BDMBTH)
  1. I '$D(^ICDS(0)) Q ;only in icd10 environment
  1. N BDMYR,BDMDA,BDMTAX,BDMFL,BDMTAXI,BDMVAL,BDMTYP,BDMTGT
  1. S BDMYR=$O(^BDMTAXS("B",YEAR,0))
  1. Q:'BDMYR
  1. S BDMDA=0 F S BDMDA=$O(^BDMTAXS(BDMYR,11,BDMDA)) Q:'BDMDA D
  1. . S BDMTAX=$P($G(^BDMTAXS(BDMYR,11,BDMDA,0)),U)
  1. . S BDMFL=$P($G(^BDMTAXS(BDMYR,11,BDMDA,0)),U,2)
  1. . S BDMTYP=$S(BDMFL=60:"L",1:"")
  1. . S BDMTAXI=$O(^ATXAX("B",BDMTAX,0))
  1. . I BDMTYP="L" D
  1. .. S BDMTAXI=$O(^ATXLAB("B",BDMTAX,0))
  1. . S BDMTGT="^XTMP("_"""BDMTAX"""_","_BDMJOB_","_""""_BDMBTH_""""_","_""""_BDMTAX_""""_")"
  1. . ;D BLDTAX^ATXAPI(BDMTAX,BDMTGT,BDMTAXI,BDMTYP)
  1. . D BLDTAX^BDMTAPI(BDMTAX,BDMTGT,BDMTAXI,BDMTYP)
  1. Q
  1. BUILDSML(Y) ;EP - BUILD SNOMED LISTS FROM SUBSETS
  1. NEW BDMDA,N,OUT,X,BDMY,C,S
  1. I $T(SUBLST^BSTSAPI)="" Q ;NO SNOMED STUFF INSTALLED
  1. S BDMY=$O(^BDMSNME("B",Y,0))
  1. S BDMDA=0 F S BDMDA=$O(^BDMSNME(BDMY,11,BDMDA)) Q:BDMDA'=+BDMDA D
  1. .Q:'$P(^BDMSNME(BDMY,11,BDMDA,0),U,2)
  1. .S N=$P(^BDMSNME(BDMY,11,BDMDA,0),U,1) ;subset name
  1. .K ^TMP($J,"SUB")
  1. .S OUT=$NA(^TMP($J,"SUB"))
  1. .S X=$$SUBLST^BSTSAPI(OUT,N) ;
  1. .I '$O(^TMP($J,"SUB",0)) Q ;NO CODES??
  1. .;BUILD INDEX
  1. .S S=0
  1. .K ^BDMSNME(BDMY,11,BDMDA,11)
  1. .S C=0 F S C=$O(^TMP($J,"SUB",C)) Q:C'=+C S I=$P(^TMP($J,"SUB",C),U,1) I I]"" S ^BDMSNME(BDMY,11,BDMDA,11,C,0)=I,S=S+1
  1. .S ^BDMSNME(BDMY,11,BDMDA,11,0)="^9003202.60111101^"_S_U_S
  1. .K ^TMP($J,"SUB")
  1. .S DIK="^BDMSNME(" D IXALL^DIK
  1. .Q
  1. Q
  1. ;
  1. ICDDX(C,D,S,I) ;PEP - CHECK FOR ICD10
  1. I $T(ICDDX^ICDEX)]"" Q $$ICDDX^ICDEX(C,$G(D),,$G(I))
  1. Q $$ICDDX^ICDCODE(C,$G(D),$G(I))
  1. ;
  1. ICDOP(C,D,S,I) ;PEP - CHECK FOR ICD10
  1. I $T(ICDOP^ICDEX)]"" Q $$ICDOP^ICDEX(C,$G(D),,$G(I))
  1. Q $$ICDOP^ICDCODE(C,$G(D),$G(I))
  1. ;
  1. VSTD(C,D) ;EP - CHECK FOR ICD10
  1. I $T(VSTD^ICDEX)]"" Q $$VSTD^ICDEX(C,$G(D))
  1. Q $$VSTD^ICDCODE(C,$G(D))
  1. ;
  1. VSTP(C,D) ;EP - CHECK FOR ICD10
  1. I $T(VSTP^ICDEX)]"" Q $$VSTP^ICDEX(C,$G(D))
  1. Q $$VSTP^ICDCODE(C,$G(D))
  1. ;
  1. ICDD(C,A,D) ;EP - CHECK FOR ICD10
  1. I $T(ICDD^ICDEX)]"" Q $$ICDD^ICDEX(C,A,$G(D))
  1. Q $$ICDD^ICDCODE(C,A,$G(D))
  1. CODEN(C,F) ;EP CHECK/GET CODE
  1. I $T(CODEN^ICDEX)]"" Q $$CODEN^ICDEX(C,F)
  1. Q $$CODEN^ICDCODE(C,F)
  1. PLCL(P,BDMY,A,ED,S,BD) ;EP - is DX on problem list 1 or 0
  1. I $G(P)="" Q ""
  1. I $G(A)="" Q ""
  1. I $G(S)="" S S=0
  1. I $G(ED)="" S ED=DT
  1. I $G(BD)="" S BD=$$DOB^AUPNPAT(P)
  1. S BDMY=$O(^BDMSNME("B",BDMY,0))
  1. N T,N S T=$O(^BDMSNME(BDMY,11,"B",A,0))
  1. I 'T Q ""
  1. N X,Y,I,A,D,G S (X,Y)=0,I="" F S X=$O(^AUPNPROB("AC",P,X)) Q:X'=+X!(I) I $D(^AUPNPROB(X,0)) D
  1. .Q:$P(^AUPNPROB(X,0),U,12)="D"
  1. .I S Q:$P(^AUPNPROB(X,0),U,12)="I"
  1. .S A=0,D="",G="" F S A=$O(^AUPNPROB(X,14,A)) Q:A'=+A!(G) D
  1. ..S D=$$VD^APCLV($P(^AUPNPROB(X,14,A,0),U,1))
  1. ..I D'>ED,D'<BD S G=1 ;GOOD DATE
  1. .I 'G S A=0,D="" F S A=$O(^AUPNPROB(X,15,A)) Q:A'=+A!(G) D
  1. ..S D=$$VD^APCLV($P(^AUPNPROB(X,15,A,0),U,1))
  1. ..I D'>ED,D'<BD S G=1
  1. .I 'G I $P(^AUPNPROB(X,0),U,8)>ED!($P(^AUPNPROB(X,0),U,8)<BD) Q
  1. .S N=$$VAL^XBDIQ1(9000011,X,80001) I N]"",$D(^BDMSNME(BDMY,11,T,11,"B",N)) S I=1_U_N_U_$P(^AUPNPROB(X,0),U,3)
  1. Q I
  1. PLTAXND(P,A,E) ;EP - is dx on problem list as NOT DELETED
  1. ;P is dfn
  1. ;a is taxonomy name
  1. I $G(P)="" Q ""
  1. I $G(A)="" Q ""
  1. S E=$G(E)
  1. NEW T S T=$O(^ATXAX("B",A,0))
  1. I 'T Q "" ;bad taxonomy??
  1. NEW X,Y,I,D
  1. S (X,Y,I)=0
  1. F S X=$O(^AUPNPROB("AC",P,X)) Q:X'=+X!(I) D
  1. .Q:'$D(^AUPNPROB(X,0))
  1. .Q:$P(^AUPNPROB(X,0),U,12)="D"
  1. .S Y=$P(^AUPNPROB(X,0),U)
  1. .I E,$P(^AUPNPROB(X,0),U,13)>E Q ;if there is a doo and it is after report period skip
  1. .I E,$P(^AUPNPROB(X,0),U,8)>E Q ;entered after report period, skip
  1. .Q:'$$ICD^BGP8UTL2(Y,T,9)
  1. .S D=$P(^AUPNPROB(X,0),U,13)
  1. .I 'D S D=$P(^AUPNPROB(X,0),U,3)
  1. .S I=1_U_"Problem List: "_$$VAL^XBDIQ1(9000011,X,.01)_U_D
  1. .Q
  1. Q I
  1. PLTAXID(P,A,B,E) ;EP - is dx on problem list as either active or inactive?
  1. ;P is dfn
  1. ;a is taxonomy name
  1. I $G(P)="" Q ""
  1. I $G(A)="" Q ""
  1. S E=$G(E)
  1. S B=$G(B)
  1. NEW T S T=$O(^ATXAX("B",A,0))
  1. I 'T Q "" ;bad taxonomy??
  1. NEW X,Y,I,D,M,O
  1. S (X,Y,I)=0
  1. F S X=$O(^AUPNPROB("AC",P,X)) Q:X'=+X!(I) D
  1. .Q:'$D(^AUPNPROB(X,0))
  1. .Q:$P(^AUPNPROB(X,0),U,12)="D"
  1. .Q:$P(^AUPNPROB(X,0),U,12)="I"
  1. .S Y=$P(^AUPNPROB(X,0),U)
  1. .S O=$P(^AUPNPROB(X,0),U,13)
  1. .S M=$P(^AUPNPROB(X,0),U,3)
  1. .S D=$P(^AUPNPROB(X,0),U,8)
  1. .I D'<B,D'>E G CHK
  1. .I O,O'<B,O'>E G CHK
  1. .I M,M'<B,M'>E G CHK
  1. .Q
  1. CHK .;
  1. .Q:'$$ICD^BGP8UTL2(Y,T,9)
  1. .S I=1_U_"Problem List: "_$$VAL^XBDIQ1(9000011,X,.01)_U_$S(O="":M,1:O)_U_X
  1. .Q
  1. Q I