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

BHSMEA.m

Go to the documentation of this file.
  1. BHSMEA ;IHS/CIA/MGH - Health Summary for Measurements and immunizations ;30-Nov-2015 10:26;DU
  1. ;;1.0;HEALTH SUMMARY COMPONENTS;**1,2,3,4,5,7,9,12**;March 17, 2006;Build 3
  1. ;===================================================================
  1. ;Taken from APCHS2
  1. ; IHS/TUCSON/LAB - PART 2 OF APCHS -- SUMMARY PRODUCTION COMPONENTS ;
  1. ;;2.0;IHS RPMS/PCC Health Summary;**2,3**;JUN 24, 1997
  1. ;IHS/CMI/LAB - patch 2 fixed AGE subroutine
  1. ;IHS/CMI/LAB - patch 3 new imm package
  1. ;Creation of VA health summary components from IHS health summary components
  1. ;for V measurement file and immunizations
  1. ;Patch 2 for patch 16 and CVS changes
  1. ;Patch 3 to fix a bug in the display
  1. ;Patch 4 added qualifiers for vitals
  1. ;Patch 5 fixed a bug with items with / in them
  1. ;Patch 12 Used new API for taxonomies
  1. ;
  1. MEAS ; ******************** MEASUREMENTS * 9000010.01 *******
  1. ; <SETUP>
  1. N BHSPAT,Y,ARRAY
  1. S BHSPAT=DFN
  1. Q:'$D(^AUPNVMSR("AA",BHSPAT))
  1. ; <DISPLAY>
  1. D CKP^GMTSUP Q:$D(GMTSQIT) W !
  1. S BHSMT="" F BHSQ=0:0 S BHSMT=$O(^AUPNVMSR("AA",BHSPAT,BHSMT)) Q:BHSMT="" S BHSND2=GMTSNDM D MEASDTYP Q:$D(GMTSQIT)
  1. D WRTOUT
  1. ; <CLEANUP>
  1. MEASX K BHSMT,BHSMT2,BHSMT3,BHSDFN,BHSND2,BHSDAT
  1. Q
  1. MEASDTYP S BHSMT2=$S($D(^AUTTMSR(BHSMT,0)):$P(^(0),U,1),1:BHSMT) S BHSMT3=BHSMT2
  1. S (BHSIVD,BHSDFN)="" F S BHSIVD=$O(^AUPNVMSR("AA",BHSPAT,BHSMT,BHSIVD)) Q:BHSIVD=""!(BHSIVD>GMTSDLM) S BHSND2=BHSND2-1 Q:BHSND2=-1 D MEASDSP
  1. I BHSMT3="" D CKP^GMTSUP Q:$D(GMTSQIT) W !
  1. Q
  1. MEASDSP ;
  1. ;IHS/MSC/MGH changed lookup o find more than one vital during a visit
  1. ;Patch 3 fixed a bug in display of items with a / in them
  1. N DATA,V,T,BHSDAT2
  1. S BHSDFN="" F S BHSDFN=$O(^AUPNVMSR("AA",BHSPAT,BHSMT,BHSIVD,BHSDFN)) Q:BHSDFN="" D
  1. .Q:$P($G(^AUPNVMSR(BHSDFN,2)),U,1) ;entered in error
  1. .S V=$P(^AUPNVMSR(BHSDFN,0),U,3) Q:$P($G(^AUPNVSIT(V,0)),U,7)="H" ;exclude inpatient
  1. .S BHSDAT=$P($G(^AUPNVMSR(BHSDFN,12)),U,1) S X=BHSDAT
  1. .I BHSDAT="" S (X,BHSDAT)=-BHSIVD\1+9999999
  1. .D REGDTM^GMTSU
  1. .S BHSDAT2=X
  1. .S ARRAY(BHSMT2,BHSDAT)=BHSDFN_"^"_BHSDAT2
  1. Q
  1. WRTOUT ;Write out the vitals
  1. N I,BHSDAT,BHSDFN,BHSDAT2,BHSMT,BHSX,PO2,PREG
  1. D CKP^GMTSUP Q:$D(GMTSQIT)
  1. S BHSMT2=""
  1. S BHSMT="" F S BHSMT=$O(ARRAY(BHSMT)) Q:BHSMT="" D
  1. .I BHSMT'=BHSMT2 W !,BHSMT S BHSMT2=BHSMT
  1. .S BHSDAT="" F S BHSDAT=$O(ARRAY(BHSMT,BHSDAT)) Q:BHSDAT="" D
  1. ..S BHSDFN=$P($G(ARRAY(BHSMT,BHSDAT)),U,1)
  1. ..S BHSDAT2=$P($G(ARRAY(BHSMT,BHSDAT)),U,2)
  1. ..;W:GMTSNPG!(BHSMT3]"") BHSMT2 S BHSMT3="" W ?5,BHSDAT2
  1. ..W ?5,BHSDAT2
  1. ..S DATA=$P($G(^AUPNVMSR(BHSDFN,0)),U,4)
  1. ..I $P(DATA,".",2)'="" S DATA=+$J(DATA,0,2)
  1. ..I BHSMT="BMI" D
  1. ...S PREG=$$PREG(DFN,"",BHSDFN)
  1. ...I PREG=1 S DATA=DATA_"*"
  1. ..W ?22,DATA
  1. ..I BHSMT="O2" D
  1. ...S PO2=$P($G(^AUPNVMSR(BHSDFN,0)),U,10)
  1. ...W ?32,"Supplemental O2: "_PO2,!
  1. ..I '$O(^AUPNVMSR(BHSDFN,5,0)) W ! Q ;no qualifiers
  1. ..S C=0,X=0,D=0 F S X=$O(^AUPNVMSR(BHSDFN,5,X)) Q:X'=+X S C=C+1
  1. ..W ?32,"Qualifier"_$S(C>1:"s",1:""),":"
  1. ..S T="" S BHSX=0 F S BHSX=$O(^AUPNVMSR(BHSDFN,5,BHSX)) D Q:BHSX'=+BHSX
  1. ...S Y=$P($G(^AUPNVMSR(BHSDFN,5,BHSX,0)),U) I Y D
  1. ....S D=D+1
  1. ....I T'="" S T=T_", "
  1. ....S T=T_$P($G(^GMRD(120.52,Y,0)),U,1)
  1. ....I D>1 W ?45,T,! S D=0,T=""
  1. ..W ?45,T
  1. ..W !
  1. Q
  1. PREG(DFN,VIEN,VMIEN) ;Determine if BMI is for pregnant patient
  1. N DOB,X1,X1,TAGE,POV,CODE,TAX,RET
  1. S RET=0
  1. S VMIEN=$G(VMIEN),VIEN=$G(VIEN)
  1. I $$GET1^DIQ(2,DFN,.02,"I")'="F" Q RET ;Wrong sex
  1. S TAGE=$$GET1^DIQ(2,DFN,.033)
  1. I TAGE<10!(TAGE>50) Q RET ;Wrong age
  1. ;Find POVs on this visit and check if they are pregnancy POVs
  1. I VIEN="" D
  1. .S VIEN=$$GET1^DIQ(9000010.01,VMIEN,.03,"I")
  1. I '+VIEN Q RET
  1. S TAX=$O(^ATXAX("B","BQI PREGNANCY DXS",0))
  1. S POV="" F S POV=$O(^AUPNVPOV("AD",VIEN,POV)) Q:POV=""!(RET=1) D
  1. .S CODE=$$GET1^DIQ(9000010.07,POV,.01,"I")
  1. .I CODE="" Q
  1. .;IHS/MSC/MGH Patch 11
  1. .S RET=$$ICD^ATXAPI(CODE,TAX,9)
  1. Q RET
  1. ;
  1. IMMUN ; ******************** IMMUNIZATIONS * 9000010.11 *******
  1. N BHSPAT,BHSP,BHSQ,Y
  1. S BHSPAT=DFN
  1. I +$$VER^BILOGO>7 D IMMBI2 Q ;IHS/CMI/MWR 8/19/03, for Immunization v8.x
  1. I $$BI D IMMBI Q ;IHS/CMI/LAB - new imm package
  1. ; <SETUP>
  1. Q:'$D(^AUPNVIMM("AA",BHSPAT))
  1. D CKP^GMTSUP Q:$D(GMTSQIT)
  1. ; <DISPLAY>
  1. S BHSITP="" F BHSQ=0:0 S BHSITP=$O(^AUPNVIMM("AA",BHSPAT,BHSITP)) Q:BHSITP="" D IMMDTYP
  1. ; <CLEANUP>
  1. REF ;Patch 2 display refusals/contraindications
  1. S BHY=0 F S BHY=$O(^BIPC("AC",BHSPAT,BHY)) Q:BHY'=+BHY D
  1. .S BHX=0 F S BHX=$O(^BIPC("AC",BHSPAT,BHY,BHX)) Q:BHX'=+BHX D
  1. ..S R=$P(^BIPC(BHX,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(BHX,0),U,4)
  1. ..Q:D=""
  1. ..S D=9999999-D
  1. ..Q:D>GMTSDLM
  1. ..D CKP^GMTSUP Q:$D(GMTSQIT)
  1. ..W !,$$VAL^XBDIQ1(9002084.11,BHX,.02)," -- ",$$VAL^XBDIQ1(9002084.11,BHX,.03),?60,"(",$$DATE^BHSMU($P(^BIPC(BHX,0),U,4)),")"
  1. ..Q
  1. .Q
  1. S BHSFN=9999999.14,BHST="" D DISPREF^BHSRAD
  1. K BHSFN,BHST,BHSS
  1. IMMUNX K BHSITP,BHSITX,BHSITL,BHSDFN,BHSDAT,BHSIVD,BHSVDF,BHX,BHY,R,D
  1. K BHSIMC,BHSIMR,BHSN,BHSIC,BHSIR,BHSDAT2
  1. K BHSNFL,BHSNSH,BHSNAB,BHSVSC,BHSITE
  1. Q
  1. IMMDTYP S BHSITX=$P(^AUTTIMM(BHSITP,0),U,2),BHSITL=$L(BHSITX) D CKP^GMTSUP Q:$D(GMTSQIT) D
  1. .W ! D CKP^GMTSUP Q:$D(GMTSQIT) W BHSITX S BHSIVD=""
  1. .F BHSQ=0:0 S BHSIVD=$O(^AUPNVIMM("AA",BHSPAT,BHSITP,BHSIVD)) Q:'BHSIVD D IMMDSP
  1. Q
  1. IMMDSP S BHSDFN=0 F BHSQ=0:0 S BHSDFN=$O(^AUPNVIMM("AA",BHSPAT,BHSITP,BHSIVD,BHSDFN)) Q:BHSDFN="" D IMMDSP2
  1. Q
  1. IMMDSP2 S X=-BHSIVD\1+9999999 D REGDT4^GMTSU S BHSDAT=X
  1. S BHSDAT2=$P($G(^AUPNVMSR(BHSPAT,12)),U,1)
  1. S X=BHSDAT2 D REGDT4^GMTSU S BHSDAT2=X
  1. S BHSN=^AUPNVIMM(BHSDFN,0)
  1. S BHSVDF=$P(BHSN,U,3) D GETSITEV^BHSUTL S BHSITE=BHSNSH
  1. S X=$P(BHSN,U,6),Y=.06 D IMMGSET S BHSIR=BHSP
  1. S X=$P(BHSN,U,7),Y=.07 D IMMGSET S BHSIC=BHSP S:BHSIC]"" BHSIC="DO NOT REPEAT"
  1. I BHSIC]"",BHSIR]"" S BHSIR=BHSIR_"; "
  1. S BHSIR=BHSIR_BHSIC
  1. ;modified following line - LAB
  1. I BHSDAT2'="" S BHSDAT=BHSDAT2
  1. D CKP^GMTSUP Q:$D(GMTSQIT) W:GMTSNPG BHSITX W ?(BHSITL+1),$P(^AUPNVIMM(BHSDFN,0),U,4),?15,BHSDAT,?25,$$AGE(BHSPAT,$P(+^AUPNVSIT(BHSVDF,0),"."),"P"),?34,BHSITE,?65,BHSIR,!
  1. Q
  1. IMMGSET S Y=$G(^DD(9000010.11,Y,0)),Y=$P(Y,U,3)
  1. S:'X Y=""
  1. F BHSQ=1:1 S BHSP=$P(Y,";",BHSQ) Q:BHSP="" I $P(BHSP,":",1)=X S BHSP=$P(BHSP,":",2) Q
  1. Q
  1. ;
  1. BI() ;EP- check to see if using new imm package or not 1/5/1999 IHS/CMI/LAB
  1. Q $S($O(^AUTTIMM(0))<100:0,1:1)
  1. ;-----------
  1. AGE(DFN,D,F) ;(DFN) Given DFN, return Age. ; AUPN*93.2*3
  1. I '$G(DFN) Q -1
  1. I '$D(^DPT(DFN,0)) Q -1
  1. I $$DOB^AUPNPAT(DFN)<0 Q -1
  1. S:$G(D)="" D=DT
  1. S:$G(F)="" F="Y"
  1. NEW %
  1. S %=$$FMDIFF^XLFDT(D,$$DOB^AUPNPAT(DFN))
  1. I F="Y" Q %\365.25
  1. ;beginning Y2K
  1. ;NEW %1 S %1=%\365.25,%=$S(%1>2:%1_" YRS",%<31:%1_" DYS",1:%\30_" MOS") ;Y2000
  1. NEW %1 S %1=%\365.25,%=$S(%1>2:%1_" YRS",%<31:%_" DYS",1:%\30_" MOS") ;Y2000
  1. ;end Y2000
  1. Q %
  1. ;
  1. ;
  1. IMMBI ;IHS/CMI/LAB - new subroutine for new imm package
  1. D CKP^GMTSUP Q:$D(GMTSQIT)
  1. ;
  1. ;
  1. ;
  1. NEW APCH31,APCHIMM,APCHBIER
  1. S APCH31=$C(31)_$C(31),APCHIMM=""
  1. D IMMFORC^BIRPC(.APCHIMM,BHSPAT)
  1. ;
  1. W ?3,"IMMUNIZATION FORECAST:",!!
  1. ;
  1. D
  1. .;---> Check for error in 2nd piece of return value.
  1. .S APCHBIER=$P(APCHIMM,APCH31,2)
  1. .;---> If there's an error, display it and quit.
  1. .I APCHBIER]"" D CKP^GMTSUP Q:$D(GMTSQIT) D Q
  1. ..D EN^DDIOL("* "_APCHBIER,"","?5") W !
  1. .;
  1. .;---> No error, so take 1st piece of return value and process it.
  1. .S APCHIMM=$P(APCHIMM,APCH31,1)
  1. .;
  1. .NEW APCHX,APCHI F APCHX=1:1 S APCHI=$P(APCHIMM,"^",APCHX) Q:APCHI=""!($D(GMTSQIT)) D
  1. ..D CKP^GMTSUP Q:$D(GMTSQIT)
  1. ..W ?3,$P(APCHI,"|"),?23,$P(APCHI,"|",2),?36,$P(APCHI,"|",3),!
  1. ..Q
  1. ;
  1. CONTRAS ;
  1. ;
  1. N APCHCONT S APCHCONT=""
  1. ;
  1. ;---> RPC to retrieve Contraindications.
  1. D CONTRAS^BIRPC5(.APCHCONT,BHSPAT)
  1. ;
  1. ;---> If APCHBIER has a value, display it and quit.
  1. S APCHBIER=$P(APCHCONT,APCH31,2)
  1. I APCHBIER]"" D CKP^GMTSUP Q:$D(GMTSQIT) D EN^DDIOL("* "_APCHBIER,"","!!?5") G HX
  1. ;
  1. ;---> Set APCHC=to a string of Contraindications for this patient.
  1. N APCHC S APCHC=$P(APCHCONT,APCH31,1)
  1. I APCHC]"" D CKP^GMTSUP Q:$D(GMTSQIT) W !
  1. ;
  1. ;---> Build Listmanager array from APCHC string.
  1. ;
  1. F I=1:1 S Y=$P(APCHC,U,I) Q:Y="" D
  1. .;---> Build display line for this Contraindication.
  1. .N V S V="|",X=" "
  1. .S:I=1 X=X_"* Contraindications:" S X=$$PAD(X,28)
  1. .;
  1. .;---> Display "Vaccine: Date Reason"
  1. .S X=X_$P(Y,V,2)_":",X=$$PAD(X,40)_$P(Y,V,4)
  1. .S X=$$PAD(X,53)_$P(Y,V,3)
  1. .;---> Set formatted Contraindication line and index in ^TMP.
  1. .D CKP^GMTSUP Q:$D(GMTSQIT) W X,!
  1. .Q
  1. ;
  1. ;
  1. ;
  1. HX ;
  1. NEW APCHBIDE,I F I=8,26,27,60,33,44,57 S APCHBIDE(I)=""
  1. ;call to get imm hx
  1. D IMMHX^BIRPC(.APCHIMM,BHSPAT,.APCHBIDE)
  1. W !?3,"IMMUNIZATION HISTORY:",!
  1. ;
  1. S APCHBIER=$P(APCHIMM,APCH31,2)
  1. I APCHBIER]"" D CKP^GMTSUP Q:$D(GMTSQIT) D EN^DDIOL("* "_APCHBIER,"","!!?5") Q
  1. S APCHIMM=$P(APCHIMM,APCH31,1)
  1. NEW APCHI,APCHV,APCHX,APCHY,APCHZ
  1. S APCHZ="",APCHV="|"
  1. F APCHI=1:1 S APCHY=$P(APCHIMM,U,APCHI) Q:APCHY=""!($D(GMTSQIT)) D
  1. .Q:$P(APCHY,APCHV)'="I"
  1. .I $P(APCHY,APCHV,4)'=APCHZ D CKP^GMTSUP Q:$D(GMTSQIT) W ! S APCHZ=$P(APCHY,APCHV,4)
  1. .NEW X,BHSDG K %DT S X=$P(APCHY,APCHV,8),%DT="P" D ^%DT S BHSDG=Y
  1. .D CKP^GMTSUP Q:$D(GMTSQIT)
  1. .W ?3,$P(APCHY,APCHV,2),?22,$P(APCHY,APCHV,8),?34,$$AGE(BHSPAT,BHSDG,"P"),?45,$E($P(APCHY,APCHV,3),1,20),?66,$P(APCHY,APCHV,5),!
  1. .I $P(APCHY,APCHV,6)]"" W ?22,"Reaction: ",$P(APCHY,APCHV,6),!
  1. .Q
  1. ;----------
  1. K APCHIMM,APCHY,APCHV,APCHBIDE,APCHZ
  1. Q
  1. ;
  1. ;
  1. ;----------
  1. PAD(D,L,C) ;EP
  1. ;---> Pad the length of data to a total of L characters
  1. ;---> by adding spaces to the end of the data.
  1. ; Example: S X=$$PAD("MIKE",7) X="MIKE " (Added 3 spaces.)
  1. ;---> Parameters:
  1. ; 1 - D (req) Data to be padded.
  1. ; 2 - L (req) Total length of resulting data.
  1. ; 3 - C (opt) Character to pad with (default=space).
  1. ;
  1. Q:'$D(D) ""
  1. S:'$G(L) L=$L(D)
  1. S:$G(C)="" C=" "
  1. Q $E(D_$$REPEAT^XLFSTR(C,L),1,L)
  1. ;
  1. ;
  1. ;----------
  1. IMMBI2 ;EP
  1. ;---> Call to Immunization Package v8.x to build local array of formatted
  1. ;---> lines for Imm Health Summary Component. ;IHS/CMI/MWR 8/19/03
  1. ;---> Mike Remillard
  1. ;
  1. D CKP^GMTSUP Q:$D(GMTSQIT) D CKP^GMTSUP
  1. N BHSARR S BHSARR=""
  1. D IMMBI^BIAPCHS(BHSPAT,.BHSARR)
  1. ;IHS/MSC/MGH
  1. ;Changes for APCH patch 14 included in patch 1
  1. N N,F
  1. S N=0,F=0
  1. F S N=$O(^BHSARR(N)) Q:'N D
  1. .Q:BHSARR(N,0)["IMMUNIZATION HISTORY:"
  1. .I BHSARR(N,0)["VARICALLA" S F=1 ;varicella forecast as due
  1. .Q
  1. S N=0
  1. F S N=$O(BHSARR(N)) Q:'N D D CKP^GMTSUP Q:$D(GMTSQIT)
  1. .I BHSARR(N,0)["IMMUNIZATION HISTORY" D
  1. ..I F S X=$$PHCP(BHSPAT) I X]"" D
  1. ...W !,"Patient has a HX of chicken pox not yet entered as a contraindication"
  1. ...W !,"in the Immunization Package."
  1. ...W !,X,!!
  1. .W BHSARR(N,0),!
  1. D KILLALL^BIUTL8()
  1. Q
  1. PHCP(P) ;EP
  1. ;is there a personal history of chicken pox or is chicken pox on the problem list
  1. NEW X,Y,Z,I,G
  1. S G="",X=0 F S X=$O(^AUPNPH("AC",P,X)) Q:X'=+X!(G) D
  1. .Q:'$D(^AUPNPH(X,0))
  1. .S I=$P(^AUPNPH(X,0),U)
  1. .Q:I=""
  1. .;S I=$P($G(^ICD9(I,0)),U)
  1. .;Patch 9 for ICD-10
  1. .I $$AICD^BHSUTL S I=$P($$ICDDX^ICDEX(I,"","","I"),U,2)
  1. .E S I=$P($$ICDDX^ICDCODE(I),U,2) ;code set versioning
  1. .Q:$E(I,1,3)'="052"
  1. .S G=X
  1. .Q
  1. I G Q "Personal History: "_I_" - "_$$VAL^XBDIQ1(9000013,G,.04)
  1. ;now check problem list
  1. S X=0 F S X=$O(^AUPNPROB("AC",P,X)) Q:X'=+X!(G) D
  1. .Q:'$D(^AUPNPROB(X,0))
  1. .S I=$P(^AUPNPROB(X,0),U)
  1. .Q:I=""
  1. .;S I=$P($G(^ICD9(I,0)),U)
  1. .;Patch 9 for ICD-10
  1. .I $$AICD^BHSUTL S I=$P($$ICDDX^ICDEX(I,"","","I"),U,2)
  1. .E S I=$P($$ICDDX^ICDCODE(I),U,2) ;code set versioning
  1. .Q:$E(I,1,3)'="052"
  1. .S G=X
  1. .Q
  1. I G Q "Problem List: "_I_" - "_$$VAL^XBDIQ1(9000011,G,.05)
  1. Q ""