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

BIREPT4.m

Go to the documentation of this file.
  1. BIREPT4 ;IHS/CMI/MWR - REPORT, TWO-YR-OLD RATES; MAY 10, 2010
  1. ;;8.5;IMMUNIZATION;**3**;SEP 10,2012
  1. ;;* MICHAEL REMILLARD, DDS * CIMARRON MEDICAL INFORMATICS, FOR IHS *
  1. ;; VIEW TWO-YR-OLD IMMUNIZATION RATES REPORT, WRITE HEADERS, ETC.
  1. ;; PATCH 1: Exclude patients whose Inactive Date=Not in Register. CHKSET+35
  1. ;; PATCH 3: Extensive edits to allow Hx of Chickenpox to count for Varicella.
  1. ;; CHKSET+60, CHKSET+209
  1. ;
  1. ;----------
  1. GETPATS(BIBEGDT,BIENDDT,BICC,BIHCF,BICM,BIBEN,BIQDT,BIAGRPS,BISITE,BIUP) ;EP
  1. ;---> Get patients from VA PATIENT File, ^DPT(.
  1. ;---> Parameters:
  1. ; 1 - BIBEGDT (req) Begin DOB for this group.
  1. ; 2 - BIENDDT (req) End DOB for this group.
  1. ; 3 - BICC (req) Current Community array.
  1. ; 4 - BIHCF (req) Health Care Facility array.
  1. ; 5 - BICM (req) Case Manager array.
  1. ; 6 - BIBEN (req) Beneficiary Type array.
  1. ; 7 - BIQDT (req) Quarter Ending Date.
  1. ; 8 - BIAGRPS (req) String of Age Groups (e.g., 3,5,7,16,19,24,36)
  1. ; 9 - BISITE (req) Site IEN.
  1. ; 9 - BIUP (req) User Population/Group (Registered, Imm, User, Active).
  1. ;
  1. ;---> Set begin and end dates for search through PATIENT File.
  1. ;
  1. Q:'$G(BIBEGDT) Q:'$G(BIENDDT) Q:'$G(BIQDT) Q:'$G(BIAGRPS)
  1. S:$G(BIUP)="" BIUP="u"
  1. ;
  1. ;---> Start 1 day prior to Begin Date and $O into the desired DOB's.
  1. N BIDOB S BIDOB=BIBEGDT-1
  1. F S BIDOB=$O(^DPT("ADOB",BIDOB)) Q:(BIDOB>BIENDDT!('BIDOB)) D
  1. .S BIDFN=0
  1. .F S BIDFN=$O(^DPT("ADOB",BIDOB,BIDFN)) Q:'BIDFN D
  1. ..D CHKSET(BIDFN,.BICC,.BIHCF,.BICM,.BIBEN,BIDOB,BIQDT,.BIVAL,BIAGRPS,BIUP)
  1. ..;---> Set ^TMP("BIDUL",$J,CURCOM,1,HRCN,BIDFN)=$G(BIVAL) for Patient Roster.
  1. ..D:$G(BIVAL) STORE^BIDUR1(BIDFN,DT,9,,BIVAL,BISITE)
  1. Q
  1. ;
  1. ;
  1. ;----------
  1. CHKSET(BIDFN,BICC,BIHCF,BICM,BIBEN,BIDOB,BIQDT,BIVAL,BIAGRPS,BIUP) ;EP
  1. ;---> Check if this patient fits criteria; if so, set DFN
  1. ;---> in ^TMP("BIREPT1".
  1. ;---> Parameters:
  1. ; 1 - BIDFN (req) Patient IEN.
  1. ; 2 - BICC (req) Current Community array.
  1. ; 3 - BIHCF (req) Health Care Facility array.
  1. ; 4 - BICM (req) Case Manager array.
  1. ; 5 - BIBEN (req) Beneficiary Type array.
  1. ; 6 - BIDOB (req) Patient's Date of Birth.
  1. ; 7 - BIQDT (req) Quarter Ending Date.
  1. ; 8 - BIVAL (ret) 1=Not appropriate/complete, 2=43133 complete.
  1. ; 9 - BIAGRPS (req) String of Age Groups (e.g., 3,5,7,16,19,24,36)
  1. ; 9 - BIUP (req) User Population/Group (Registered, Imm, User, Active).
  1. ;
  1. Q:'$G(BIDFN)
  1. Q:'$D(BICC)
  1. Q:'$D(BIHCF)
  1. Q:'$D(BICM)
  1. Q:'$D(BIBEN)
  1. I '$G(BIDOB) S BIDOB=$$DOB^BIUTL1(BIDFN)
  1. Q:'$G(BIQDT)
  1. Q:'$G(BIAGRPS)
  1. S:$G(BIUP)="" BIUP="u"
  1. ;
  1. ;---> Don't include this patient in Roster unless set below.
  1. S BIVAL=0
  1. ;
  1. ;---> Filter for standard Patient Population parameter.
  1. Q:'$$PPFILTR^BIREP(BIDFN,.BIHCF,BIQDT,BIUP)
  1. ;
  1. ;---> Quit if Current Community doesn't match.
  1. Q:$$CURCOM^BIEXPRT2(BIDFN,.BICC)
  1. ;
  1. ;---> Quit if Case Manager doesn't match.
  1. Q:$$CMGR^BIDUR(BIDFN,.BICM)
  1. ;
  1. ;---> Quit if Beneficiary Type doesn't match.
  1. Q:$$BENT^BIDUR1(BIDFN,.BIBEN)
  1. ;
  1. ;---> Store Patient in Age Group.
  1. N Z S Z=$G(BITMP("STATS","TOTLPTS")) S BITMP("STATS","TOTLPTS")=Z+1
  1. ;---> Store for Patient Report Roster (not yet determined if complete 43133).
  1. S BIVAL=1
  1. ;
  1. ;---> RPC to gather Immunization History.
  1. N BI31,BIDE,BIRETVAL,BIRETERR,I S BI31=$C(31)_$C(31),BIRETVAL=""
  1. ;---> 30=Vaccine IEN, 55=Vaccine Group IEN, 56=Date of Visit(Fileman),
  1. ;---> 65=Invalid Dose (1-4).
  1. F I=30,55,56,65 S BIDE(I)=""
  1. ;---> Fourth parameter=0: Do not return Skin Tests.
  1. D IMMHX^BIRPC(.BIRETVAL,BIDFN,.BIDE,0,0)
  1. ;
  1. ;---> If BIRETERR has a value, store it and quit.
  1. S BIRETERR=$P(BIRETVAL,BI31,2)
  1. Q:BIRETERR]""
  1. ;
  1. ;---> Add refusals, if any.
  1. N Z D CONTRA^BIUTL11(BIDFN,.Z,1) I $O(Z(0)) S BITMP("REFUSALS",BIDFN)=""
  1. ;
  1. ;********** PATCH 3, v8.5, SEP 10,2012, IHS/CMI/MWR
  1. ;---> Check for Hx of Chicken Pox (as a reason for contra to Var & MMRV.)
  1. ;---> If HX of Chicken Pox to add to Hx of Chickenpox line and count as
  1. ;---> Varicella Combo Stats Lines.
  1. N BICHXDT,BIHXX,Z
  1. D CONTRA^BIUTL11(BIDFN,.Z,2,1) I (+$G(Z(21))=12)!(+$G(Z(94))=12) D
  1. .N BICHXDT D
  1. ..;---> Get the date of Chickenpox contraindication.
  1. ..I $D(Z(21)) S BICHXDT=$P(Z(21),U,2) Q
  1. ..I $D(Z(21)) S BICHXDT=$P(Z(94),U,2)
  1. .Q:'BICHXDT
  1. .;
  1. .N BIAGE,J,K S J=1
  1. .F K=1:1 S BIAGE=$P(BIAGRPS,",",K) Q:'BIAGE D
  1. ..D:J PASTMTH^BIAGE(BICHXDT,BIAGE,.BIDATE)
  1. ..Q:BIDATE>BIDOB
  1. ..;---> Patient received imm by BIAGE months, set in stats array.
  1. ..N Z S Z=$G(BITMP("STATS",132,1,BIAGE)) S BITMP("STATS",132,1,BIAGE)=Z+1
  1. ..S J=0
  1. ..;---> Also set for combo lines.
  1. ..S BIHXX(132,1,BIAGE)=""
  1. ;**********
  1. ;
  1. ;---> Set BIHX=to a valid Immunization History.
  1. N BIHX S BIHX=$P(BIRETVAL,BI31,1)
  1. ;
  1. ;---> *** Okay, add this Patient's History to stats.
  1. ;
  1. ;---> BIHIB local array by date gets built; if the first two were CVX 49's (IEN=127)
  1. ;---> then patient will only need 3 Hibs to be UTD.
  1. N BIHIB,BIROT,I,Y
  1. ;
  1. ;---> BIROT gets set=1 if there were 2 CVX 119's (IEN=225)--patient is UTD for Rota.
  1. S BIROT=0
  1. ;
  1. ;---> Loop through "^"-pieces of Imm History, getting data.
  1. F I=1:1 S Y=$P(BIHX,U,I) Q:Y="" D
  1. .;
  1. .;---> BIIEN=Vaccine IEN, BIVGRP=Vaccine Group, BIVDAT=Visit Date, BINVLD=Invalid Code.
  1. .N BIAGE,BIDOSE,BIIEN,BINVLD,BIVDAT,BIVGRP,Q
  1. .S BIIEN=$P(Y,"|",2),BIVGRP=$P(Y,"|",3),BIVDAT=$P(Y,"|",4),BINVLD=$P(Y,"|",5)
  1. .;
  1. .;---> Quit if not Vaccine Group or Visit Date.
  1. .Q:'$G(BIVGRP) Q:'$G(BIVDAT)
  1. .;
  1. .;---> Quit if this dose has been overrided as Invalid (1-4).
  1. .Q:(1234[+BINVLD)
  1. .;
  1. .;---> Quit if this imm was given after the Quarter Ending Date.
  1. .;---> NOTE: This will cause some patients to appear in the "NOT Current"
  1. .;---> group, even if they got caught up to date later.
  1. .Q:(BIVDAT>BIQDT)
  1. .;
  1. .;---> Quit if this Vaccine Group should not be included.
  1. .Q:'($$VGROUP^BIUTL2(BIVGRP,8))
  1. .;
  1. .;---> Set BIDOSE=Dose# (increment by 1's to assign highest/latest dose#)
  1. .S BIDOSE=1,Q=0
  1. .F Q:Q D
  1. ..I $D(BIHX(BIVGRP,BIDOSE)) S BIDOSE=BIDOSE+1 Q
  1. ..S BIHX(BIVGRP,BIDOSE)="",Q=1
  1. .;
  1. .;
  1. .;---> If this was a Hib, store it in local array for UTD eval.
  1. .I BIVGRP=3 S BIHIB(BIVDAT,BIIEN)=""
  1. .;
  1. .;---> If this was a Rotarix, increment its counter.
  1. .S:BIIEN=225 BIROT=BIROT+1
  1. .;
  1. .;---> Set this immunization in the STATS array for each Age (A)
  1. .;---> by which the patient had already received it (cumulative).
  1. .N J,K S J=1
  1. .F K=1:1 S BIAGE=$P(BIAGRPS,",",K) Q:'BIAGE D
  1. ..;---> If patient received imm by BIAGE months on the previous iteration
  1. ..;---> of this loop (and J was set=0), then bypass call to PASTMTH
  1. ..;---> and simply set it for the higher BIAGE values, cumulatively.
  1. ..;---> (i.e., if patient received it by 3 months, then he also
  1. ..;---> necessarily received it by 5 months, 7 months, etc.)
  1. ..D:J PASTMTH^BIAGE(BIVDAT,BIAGE,.BIDATE)
  1. ..;
  1. ..;---> Quit if BIAGE months prior to Visit Date is AFTER the DOB
  1. ..;---> (means patient was OLDER than BIAGE months when he received
  1. ..;---> the imm--did NOT receive the imm by BIAGE months).
  1. ..Q:BIDATE>BIDOB
  1. ..;
  1. ..;---> Patient received imm by BIAGE months, set in stats array.
  1. ..N Z S Z=$G(BITMP("STATS",BIVGRP,BIDOSE,BIAGE)) S BITMP("STATS",BIVGRP,BIDOSE,BIAGE)=Z+1
  1. ..S J=0
  1. ..S BIHX(BIVGRP,BIDOSE,BIAGE)=""
  1. ;
  1. ;
  1. ;---> Now calculate whether this patient needs 3 Hibs or 4 Hibs to be UTD.
  1. ;---> If first 2 Hibs=127 (CVX 49), then BIHIB2=2 and patient only needs 3 Hibs to be UTD.
  1. N BIHIB2,I,N S BIHIB2=0,N=0
  1. F I=1:1:2 S N=$O(BIHIB(N)) Q:'N D
  1. .I $O(BIHIB(N,0))=127 S BIHIB2=BIHIB2+1
  1. ;
  1. ;---> Now calculate vaccine combination stats.
  1. ;---> NOTE: DO NOT GENERALIZE CODE BELOW (highly iterative).
  1. ;---> Relies on the following Vaccine Group IEN's in ^BISERT:
  1. ;---> DTP=1, OPV=2, HIB=3, HEPB=4, MMR=6, VAR=7, HEPA=9, FLU=10, PNE=11, ROT=15
  1. ;
  1. ;---> 1-DTP, 1-OPV, 1-HIB, 1-HEPB
  1. N K
  1. F K=1:1 S A=$P(BIAGRPS,",",K) Q:'A D
  1. .;---> Matrix=Vaccine Group, Dose#, Age Group.
  1. .Q:'$D(BIHX(1,1,A))
  1. .Q:'$D(BIHX(2,1,A))
  1. .Q:'$D(BIHX(3,1,A))
  1. .Q:'$D(BIHX(4,1,A))
  1. .D COMBO("1|1^2|1^3|1^4|1",A)
  1. ;
  1. ;---> 4-DTP, 3-OPV, 1-MMR
  1. F K=1:1 S A=$P(BIAGRPS,",",K) Q:'A D
  1. .Q:'$D(BIHX(1,4,A))
  1. .Q:'$D(BIHX(2,3,A))
  1. .Q:'$D(BIHX(6,1,A))
  1. .D COMBO("1|4^2|3^6|1",A)
  1. ;
  1. ;---> 4-DTP, 3-OPV, 1-MMR, 3-HIB
  1. F K=1:1 S A=$P(BIAGRPS,",",K) Q:'A D
  1. .Q:'$D(BIHX(1,4,A))
  1. .Q:'$D(BIHX(2,3,A))
  1. .Q:'$D(BIHX(6,1,A))
  1. .;---> If you don't have 2 Hib 49's, then quit if you don't have 4 Hibs.
  1. .I BIHIB2<2 Q:'$D(BIHX(3,4,A))
  1. .;---> Okay, first 2 Hibs are 49's, quit if you don't have 3 Hibs.
  1. .Q:'$D(BIHX(3,3,A))
  1. .D COMBO("1|4^2|3^6|1^3|3",A)
  1. ;
  1. ;---> 4-DTP, 3-OPV, 1-MMR, 3-HIB, 3-HEPB
  1. F K=1:1 S A=$P(BIAGRPS,",",K) Q:'A D
  1. .Q:'$D(BIHX(1,4,A))
  1. .Q:'$D(BIHX(2,3,A))
  1. .Q:'$D(BIHX(6,1,A))
  1. .I BIHIB2<2 Q:'$D(BIHX(3,4,A))
  1. .Q:'$D(BIHX(3,3,A))
  1. .Q:'$D(BIHX(4,3,A))
  1. .D COMBO("1|4^2|3^6|1^3|3^4|3",A)
  1. ;
  1. ;---> 4-DTP, 3-OPV, 1-MMR, 3-HIB, 3-HEPB, 1-VAR
  1. F K=1:1 S A=$P(BIAGRPS,",",K) Q:'A D
  1. .Q:'$D(BIHX(1,4,A))
  1. .Q:'$D(BIHX(2,3,A))
  1. .Q:'$D(BIHX(6,1,A))
  1. .I BIHIB2<2 Q:'$D(BIHX(3,4,A))
  1. .Q:'$D(BIHX(3,3,A))
  1. .Q:'$D(BIHX(4,3,A))
  1. .;
  1. .;********** PATCH 3, v8.5, SEP 10,2012, IHS/CMI/MWR
  1. .;---> Allow Hx of Chickenpox to count for Varicella.
  1. .;Q:'$D(BIHX(7,1,A))
  1. .Q:(('$D(BIHX(7,1,A)))&('$D(BIHXX(132,1,A))))
  1. .D COMBO("1|4^2|3^6|1^3|3^4|3^7|1",A)
  1. ;
  1. ;
  1. ;---> 4-DTP, 3-OPV, 1-MMR, 3-HIB, 3-HEPB, 1-VAR, 3-PNE
  1. F K=1:1 S A=$P(BIAGRPS,",",K) Q:'A D
  1. .Q:'$D(BIHX(1,4,A))
  1. .Q:'$D(BIHX(2,3,A))
  1. .Q:'$D(BIHX(6,1,A))
  1. .I BIHIB2<2 Q:'$D(BIHX(3,4,A))
  1. .Q:'$D(BIHX(3,3,A))
  1. .Q:'$D(BIHX(4,3,A))
  1. .;---> Allow Hx of Chickenpox to count for Varicella.
  1. .;Q:'$D(BIHX(7,1,A))
  1. .Q:(('$D(BIHX(7,1,A)))&('$D(BIHXX(132,1,A))))
  1. .Q:'$D(BIHX(11,3,A))
  1. .D COMBO("1|4^2|3^6|1^3|3^4|3^7|1^11|3",A)
  1. ;
  1. ;
  1. ;---> 4-DTP, 3-OPV, 1-MMR, 3-HIB, 3-HEPB, 1-VAR, 4-PNE vvv83
  1. F K=1:1 S A=$P(BIAGRPS,",",K) Q:'A D
  1. .Q:'$D(BIHX(1,4,A))
  1. .Q:'$D(BIHX(2,3,A))
  1. .Q:'$D(BIHX(6,1,A))
  1. .I BIHIB2<2 Q:'$D(BIHX(3,4,A))
  1. .Q:'$D(BIHX(3,3,A))
  1. .Q:'$D(BIHX(4,3,A))
  1. .;---> Allow Hx of Chickenpox to count for Varicella.
  1. .;Q:'$D(BIHX(7,1,A))
  1. .Q:(('$D(BIHX(7,1,A)))&('$D(BIHXX(132,1,A))))
  1. .Q:'$D(BIHX(11,4,A))
  1. .D COMBO("1|4^2|3^6|1^3|3^4|3^7|1^11|4",A)
  1. .;---> Store for Patient Report Roster (complete 4313314).
  1. .S BIVAL=2
  1. ;
  1. ;---> 4-DTP, 3-OPV, 1-MMR, 3-HIB, 3-HEPB, 1-VAR, 4-PNE, 1-HEPA
  1. F K=1:1 S A=$P(BIAGRPS,",",K) Q:'A D
  1. .Q:'$D(BIHX(1,4,A))
  1. .Q:'$D(BIHX(2,3,A))
  1. .Q:'$D(BIHX(6,1,A))
  1. .I BIHIB2<2 Q:'$D(BIHX(3,4,A))
  1. .Q:'$D(BIHX(3,3,A))
  1. .Q:'$D(BIHX(4,3,A))
  1. .;---> Allow Hx of Chickenpox to count for Varicella.
  1. .;Q:'$D(BIHX(7,1,A))
  1. .Q:(('$D(BIHX(7,1,A)))&('$D(BIHXX(132,1,A))))
  1. .Q:'$D(BIHX(11,4,A))
  1. .Q:'$D(BIHX(9,1,A))
  1. .D COMBO("1|4^2|3^6|1^3|3^4|3^7|1^11|4^9|1",A)
  1. ;
  1. ;---> 4-DTP, 3-OPV, 1-MMR, 3-HIB, 3-HEPB, 1-VAR, 4-PNE, 2-HEPA, 3-ROTA vvv83
  1. F K=1:1 S A=$P(BIAGRPS,",",K) Q:'A D
  1. .Q:'$D(BIHX(1,4,A))
  1. .Q:'$D(BIHX(2,3,A))
  1. .Q:'$D(BIHX(6,1,A))
  1. .I BIHIB2<2 Q:'$D(BIHX(3,4,A))
  1. .Q:'$D(BIHX(3,3,A))
  1. .Q:'$D(BIHX(4,3,A))
  1. .;---> Allow Hx of Chickenpox to count for Varicella.
  1. .;Q:'$D(BIHX(7,1,A))
  1. .Q:(('$D(BIHX(7,1,A)))&('$D(BIHXX(132,1,A))))
  1. .Q:'$D(BIHX(11,4,A))
  1. .Q:'$D(BIHX(9,2,A))
  1. .;Q:'$D(BIHX(15,3,A))
  1. .;---> If you don't have 2 Rota 119's, then quit if you don't have 3 Rotas.
  1. .I BIROT<2 Q:'$D(BIHX(15,3,A))
  1. .D COMBO("1|4^2|3^6|1^3|3^4|3^7|1^11|4^9|2^15|3",A)
  1. ;
  1. ;---> 4-DTP, 3-OPV, 1-MMR, 3-HIB, 3-HEPB, 1-VAR, 4-PNE, 2-HEPA, 3-ROTA, 2-FLU vvv83
  1. F K=1:1 S A=$P(BIAGRPS,",",K) Q:'A D
  1. .Q:'$D(BIHX(1,4,A))
  1. .Q:'$D(BIHX(2,3,A))
  1. .Q:'$D(BIHX(6,1,A))
  1. .I BIHIB2<2 Q:'$D(BIHX(3,4,A))
  1. .Q:'$D(BIHX(3,3,A))
  1. .Q:'$D(BIHX(4,3,A))
  1. .;---> Allow Hx of Chickenpox to count for Varicella.
  1. .;Q:'$D(BIHX(7,1,A))
  1. .Q:(('$D(BIHX(7,1,A)))&('$D(BIHXX(132,1,A))))
  1. .;**********
  1. .Q:'$D(BIHX(11,4,A))
  1. .Q:'$D(BIHX(9,2,A))
  1. .;Q:'$D(BIHX(15,3,A))
  1. .I BIROT<2 Q:'$D(BIHX(15,3,A))
  1. .Q:'$D(BIHX(10,2,A))
  1. .D COMBO("1|4^2|3^6|1^3|3^4|3^7|1^11|4^9|2^15|3^10|2",A)
  1. ;
  1. ;---> Re-evaluate Current vs. Non-current based on Hib and Rota regimens.
  1. ;---> If BIVAL=1,
  1. Q:BIVAL=1
  1. ;
  1. Q
  1. ;
  1. ;
  1. ;----------
  1. COMBO(BICOMB,BIAGRP) ;EP
  1. ;---> Store Patient vaccine combination for Age Group.
  1. ;---> Parameters:
  1. ; 1 - BICOMB (req) Combination number.
  1. ; 1 - BIAGRP (req) Node/number for this Age Group.
  1. ;
  1. ;---> Store Patient in Age Group.
  1. N Z S Z=$G(BITMP("STATS",BICOMB,BIAGRP))
  1. S BITMP("STATS",BICOMB,BIAGRP)=Z+1
  1. Q