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

BUD5RPTC.m

Go to the documentation of this file.
  1. BUD5RPTC ; IHS/CMI/LAB - UDS REPORT PROCESSOR ;
  1. ;;10.0;IHS/RPMS UNIFORM DATA SYSTEM;;FEB 04, 2016;Build 50
  1. ;
  1. ;
  1. PROC ;EP - called from xbdbque
  1. S BUDJ=$J,BUDH=$H
  1. K ^TMP($J)
  1. S ^XTMP("BUD5RPT1",0)=$$FMADD^XLFDT(DT,14)_"^"_DT_"^"_"UDS REPORT"
  1. K BUDTOT F X=1:1:39 S $P(BUDTOT("M"),U,X)=0,$P(BUDTOT("F"),U,X)=0,$P(BUDTOT("ALL"),U,X)=0 ;for table 3A
  1. K BUDRACET
  1. F X=1:1:35 S BUDTAB5(X)="0^0"
  1. F X="9A","9B","20A","20B","20C","29A" S BUDTAB5(X)="0^0"
  1. F X="1A","1B","1C",1,2,3,4,5,6,7,8 S BUDRACET(X)=0
  1. F X=1:1:26 S $P(BUDT6("V"),U,X)=0,$P(BUDT6("P"),U,X)=0
  1. S BUD019("M")="",BUD019("F")="",BUD019("ALL")=""
  1. S DFN=0 F S DFN=$O(^DPT(DFN)) Q:DFN'=+DFN D
  1. .K ^TMP($J)
  1. .Q:'$D(^AUPNPAT(DFN,0))
  1. .Q:'$D(^DPT(DFN,0))
  1. .Q:$P(^DPT(DFN,0),U,19) ;merged away
  1. .S BUDAGE=$$AGE^AUPNPAT(DFN,BUDCAD)
  1. .S BUDSEX=$P(^DPT(DFN,0),U,2)
  1. .S BUDCOM=$$COMMRES^AUPNPAT(DFN,"E") I BUDCOM="" S BUDCOM="UNKNOWN"
  1. .D GETV ;get visits that meet criteria
  1. .I BUDT35V=0 Q ;user doesn't have any countable visits and is not considered a user
  1. .I $G(BUDTZ) D TZ
  1. .I $G(BUDT3A) D T3A
  1. .I $G(BUDT3B) D T3B
  1. .I $G(BUDT5) D T5
  1. .I $G(BUDT6) D T6
  1. .Q
  1. Q
  1. ;
  1. T4 ;
  1. Q
  1. T3A ;
  1. S G=0 F X=4:1:41 Q:G D
  1. .S L=$P(^BUDVTTA(X,0),U,7),H=$P(^BUDVTTA(X,0),U,8),P=$P(^BUDVTTA(X,0),U,2)
  1. .I BUDAGE<0 S P=1 S $P(BUDTOT(BUDSEX),U,P)=$P(BUDTOT(BUDSEX),U,P)+1,$P(BUDTOT("ALL"),U,P)=$P(BUDTOT("ALL"),U,P)+1 D T S G=1 Q
  1. .I BUDAGE'<L,BUDAGE'>H S $P(BUDTOT(BUDSEX),U,P)=$P(BUDTOT(BUDSEX),U,P)+1,$P(BUDTOT("ALL"),U,P)=$P(BUDTOT("ALL"),U,P)+1 D T S G=1
  1. .Q
  1. I $G(BUDT3AL) S X=0 F S X=$O(^TMP($J,"VISITS35",X)) Q:X'=+X S ^XTMP("BUD5RPT1",BUDJ,BUDH,"3A",BUDAGE,BUDSEX,BUDCOM,DFN,X)=""
  1. Q
  1. T ;
  1. S $P(BUDTOT(BUDSEX),U,39)=$P(BUDTOT(BUDSEX),U,39)+1,$P(BUDTOT("ALL"),U,39)=$P(BUDTOT("ALL"),U,39)+1
  1. I BUDAGE<20 S BUD019(BUDSEX)=BUD019(BUDSEX)+1,BUD019("ALL")=BUD019("ALL")+1
  1. Q
  1. TZ ;
  1. S BUDR=$$ZIP(DFN)
  1. I BUDR="" S BUDR="Unknown Residence"
  1. S ^XTMP("BUD5RPT1",BUDJ,BUDH,"ZIP",BUDR)=$G(^XTMP("BUD5RPT1",BUDJ,BUDH,"ZIP",BUDR))+1
  1. I $G(BUDTZL) S X=0 F S X=$O(^TMP($J,"VISITS35",X)) Q:X'=+X S ^XTMP("BUD5RPT1",BUDJ,BUDH,"Z",BUDR,BUDCOM,BUDSEX,$P(^DPT(DFN,0),U),DFN,X)=""
  1. Q
  1. T3B ;
  1. S BUDR=$$RACE(DFN)
  1. I BUDR="" S BUDR="D"
  1. I $P(BUDR,U)="1A" S BUDRACET("1A")=BUDRACET("1A")+1
  1. I $P(BUDR,U)="1B" S BUDRACET("1B")=BUDRACET("1B")+1
  1. I $P(BUDR,U)=5 S BUDRACET("1C")=BUDRACET("1C")+1
  1. I $P(BUDR,U)="B" S BUDRACET(2)=BUDRACET(2)+1
  1. I $P(BUDR,U)=3 S BUDRACET(3)=BUDRACET(3)+1
  1. I $P(BUDR,U)="W" S BUDRACET(4)=BUDRACET(4)+1
  1. I $P(BUDR,U)="HSP" S BUDRACET(5)=BUDRACET(5)+1
  1. I $P(BUDR,U)="D" S BUDRACET(6)=BUDRACET(6)+1
  1. I $P(BUDR,U)="U" S BUDRACET(6)=BUDRACET(6)+1
  1. I $P(BUDR,U)=7 S BUDRACET(6)=BUDRACET(6)+1
  1. I $G(BUDT3BL),'$G(BUDT3AL) S X=0 F S X=$O(^TMP($J,"VISITS35",X)) Q:X'=+X S ^XTMP("BUD5RPT1",BUDJ,BUDH,"3A",BUDAGE,BUDSEX,BUDCOM,DFN,X)=""
  1. Q
  1. T5 ;tally prim provider by discipline and by user
  1. S BUDV=0 F S BUDV=$O(^TMP($J,"VISITS35",BUDV)) Q:BUDV'=+BUDV D
  1. .S BUDP=$$PRIMPROV^APCLV(BUDV,"D")
  1. .I BUDP="" Q
  1. .;special case for DX of MH
  1. .;special case for provider code 15 and location CHS*
  1. .I $E($$VAL^XBDIQ1(9000010,BUDV,.06),1,3)="CHS",BUDP=15 S BUDT5LN=2 D T5SET Q
  1. .S BUDY=$O(^BUDVTFIV("C",BUDP,0)) I BUDY="" S BUDT5LN=35 D T5SET Q
  1. .;next lines for Bh stuff based on dx
  1. .S T=$O(^BUDVCNTL("B","BH DISCIPLINES FOR 20 AND 21",0))
  1. .I $D(^BUDVCNTL(T,11,"B",BUDP)) D D T5SET Q
  1. ..S P=$$PRIMPOV^APCLV(BUDV,"C")
  1. ..I $E(P,1,3)=303!($E(P,1,3)="304")!($E(P,1,3)="305") S BUDT5LN=21 Q
  1. ..S BUDT5LN=$P(^BUDVCNTL(T,11,$O(^BUDVCNTL(T,11,"B",BUDP,0)),0),U,2) Q
  1. .S BUDT5LN=$P(^BUDVTFIV(BUDY,0),U)
  1. .D T5SET
  1. .Q
  1. Q
  1. T5SET ;
  1. I BUDT5LN>0,BUDT5LN<8 D T5PHY
  1. I +BUDT5LN>8,+BUDT5LN<15 D T5NUR
  1. I BUDT5LN>15,BUDT5LN<19 D T5DENT
  1. I +BUDT5LN=20 D T520
  1. I BUDT5LN=21 D T521
  1. I BUDT5LN=22 D T522
  1. I BUDT5LN=23 D T523
  1. I BUDT5LN>23,BUDT5LN<29 D T5ENA
  1. I BUDT5LN="29A" D T529A
  1. I +BUDT5LN>29,BUDT5LN<33 D T5ADM
  1. I BUDT5LN=35 D T5OTH
  1. I $G(BUDT5L)!($G(BUDT5L2)) S ^XTMP("BUD5RPT1",BUDJ,BUDH,"T5",+BUDT5LN,$S(+BUDT5LN=BUDT5LN:0,1:$E(BUDT5LN,$L(BUDT5LN))),BUDCOM,BUDAGE,BUDSEX,DFN,BUDV)=$$PRIMPROV^APCLV(BUDV,"N")_"^"_$$PRIMPROV^APCLV(BUDV,"P")
  1. I $G(BUDT5L1) S ^XTMP("BUD5RPT1",BUDJ,BUDH,"T51",+BUDT5LN,$S(+BUDT5LN=BUDT5LN:0,1:$E(BUDT5LN,$L(BUDT5LN))),$$PRIMPROV^APCLV(BUDV,"N"))=$$PRIMPROV^APCLV(BUDV,"D")_" "_$$PRIMPROV^APCLV(BUDV,"E")
  1. Q
  1. T5PHY ;set physcian enc total, set med serv enc and user totals
  1. S $P(BUDTAB5(BUDT5LN),U)=$P(BUDTAB5(BUDT5LN),U)+1 ;total encounters for this line
  1. S $P(BUDTAB5(8),U)=$P(BUDTAB5(8),U)+1 ;total phy encs line
  1. S $P(BUDTAB5(15),U)=$P(BUDTAB5(15),U)+1 ;total med services line
  1. I $D(^TMP($J,"PATIENTS","MED SERV",DFN)) Q
  1. S ^TMP($J,"PATIENTS","MED SERV",DFN)="",$P(BUDTAB5(15),U,2)=$P(BUDTAB5(15),U,2)+1
  1. Q
  1. T5NUR ;
  1. S $P(BUDTAB5(BUDT5LN),U)=$P(BUDTAB5(BUDT5LN),U)+1 ;total encounters for this line
  1. I BUDT5LN=12 Q
  1. I BUDT5LN=13 Q
  1. I BUDT5LN=14 Q
  1. S $P(BUDTAB5(15),U)=$P(BUDTAB5(15),U)+1 ;total med services line
  1. I $D(^TMP($J,"PATIENTS","MED SERV",DFN)) Q
  1. S ^TMP($J,"PATIENTS","MED SERV",DFN)="",$P(BUDTAB5(15),U,2)=$P(BUDTAB5(15),U,2)+1
  1. Q
  1. T5DENT ;
  1. S $P(BUDTAB5(BUDT5LN),U)=$P(BUDTAB5(BUDT5LN),U)+1 ;total encounters for this line
  1. I BUDT5LN=18 Q
  1. S $P(BUDTAB5(19),U)=$P(BUDTAB5(19),U)+1 ;total dental services line
  1. I $D(^TMP($J,"PATIENTS","DENT SERV",DFN)) Q
  1. S ^TMP($J,"PATIENTS","DENT SERV",DFN)="",$P(BUDTAB5(19),U,2)=$P(BUDTAB5(19),U,2)+1
  1. Q
  1. T520 ;
  1. S $P(BUDTAB5(BUDT5LN),U)=$P(BUDTAB5(BUDT5LN),U)+1 ;total encounters for this line
  1. S $P(BUDTAB5(20),U)=$P(BUDTAB5(20),U)+1
  1. I $D(^TMP($J,"PATIENTS","20 SERV",DFN)) Q
  1. S ^TMP($J,"PATIENTS","20 SERV",DFN)="",$P(BUDTAB5(20),U,2)=$P(BUDTAB5(20),U,2)+1
  1. Q
  1. T521 ;
  1. S $P(BUDTAB5(BUDT5LN),U)=$P(BUDTAB5(BUDT5LN),U)+1 ;total encounters for this line
  1. I $D(^TMP($J,"PATIENTS","21 SERV",DFN)) Q
  1. S ^TMP($J,"PATIENTS","21 SERV",DFN)="",$P(BUDTAB5(21),U,2)=$P(BUDTAB5(21),U,2)+1
  1. Q
  1. T522 ;
  1. S $P(BUDTAB5(BUDT5LN),U)=$P(BUDTAB5(BUDT5LN),U)+1 ;total encounters for this line
  1. I $D(^TMP($J,"PATIENTS","22 SERV",DFN)) Q
  1. S ^TMP($J,"PATIENTS","22 SERV",DFN)="",$P(BUDTAB5(22),U,2)=$P(BUDTAB5(22),U,2)+1
  1. Q
  1. T523 ;
  1. S $P(BUDTAB5(BUDT5LN),U)=$P(BUDTAB5(BUDT5LN),U)+1 ;total encounters for this line
  1. Q
  1. T5ENA ;
  1. S $P(BUDTAB5(BUDT5LN),U)=$P(BUDTAB5(BUDT5LN),U)+1 ;total encounters for this line
  1. I BUDT5LN=23 Q
  1. I BUDT5LN=26 Q
  1. I BUDT5LN=27 Q
  1. I BUDT5LN=28 Q
  1. S $P(BUDTAB5(29),U)=$P(BUDTAB5(29),U)+1 ;total enabling services line
  1. I $D(^TMP($J,"PATIENTS","ENA SERV",DFN)) Q
  1. S ^TMP($J,"PATIENTS","ENA SERV",DFN)="",$P(BUDTAB5(29),U,2)=$P(BUDTAB5(29),U,2)+1
  1. Q
  1. T529A ;
  1. S $P(BUDTAB5(BUDT5LN),U)=$P(BUDTAB5(BUDT5LN),U)+1 ;total encounters for this line
  1. Q
  1. T5ADM ;
  1. S $P(BUDTAB5(BUDT5LN),U)=$P(BUDTAB5(BUDT5LN),U)+1 ;total encounters for this line
  1. S $P(BUDTAB5(33),U)=$P(BUDTAB5(33),U)+1 ;total adm services line
  1. I $D(^TMP($J,"PATIENTS","ADM SERV",DFN)) Q
  1. S ^TMP($J,"PATIENTS","ADM SERV",DFN)="",$P(BUDTAB5(33),U,2)=$P(BUDTAB5(33),U,2)+1
  1. Q
  1. T5OTH ;
  1. S $P(BUDTAB5(BUDT5LN),U)=$P(BUDTAB5(BUDT5LN),U)+1
  1. Q
  1. ;
  1. T6 ;
  1. D T6^BUD5RPC1
  1. Q
  1. RACE(DFN) ;EP
  1. I $G(DFN)="" Q ""
  1. I $$BEN^AUPNPAT(DFN,"C")="01" Q "3^AI/AN"
  1. NEW X S X=$P(^DPT(DFN,0),U,6)
  1. S G="" I X S Y=$P(^DIC(10,X,0),U,1),X=$P(^DIC(10,X,0),U,2) D I G]"" Q G ;PATCH 1 FIXED
  1. .I X="A" S G="1A^ASIAN" Q
  1. .I X="H" S G="1B^NH" Q
  1. .I X=5 S G="5^AS/PI" Q
  1. .I X=4!(X="B") S G="B^BL" Q
  1. .I X=3 S G="3^AI/AN" Q
  1. .I X=6!(X="W") S G="W^WH" Q
  1. .I X=1 S G="HSP^HSP/W" Q
  1. .I X=2 S G="HSP^HSP/B" Q
  1. .I X="D" S G="D^DECL" Q
  1. .I X="7" S G="7^UNK" Q
  1. .I X="U" S G="U^UNK" Q
  1. Q "U^UNK"
  1. ZIP(DFN) ;
  1. I $G(DFN)="" Q ""
  1. Q $E($P($G(^DPT(DFN,.11)),U,6),1,5)
  1. ;
  1. GETV ;get all visits for this patient and tally in BUDTV
  1. ;^TMP($J,"VISITSLIST") has all visits, including orphans that will be needed for either table
  1. ;3, 5 or 6 dx or 6 services
  1. ;^TMP($J,"VISITS35") has all visits to count for tables 3,5 which excludes 2 visits to the same provider
  1. ;on the same day
  1. ;^TMP($J,"VISITSLIST") is used for table 6 services only
  1. ;^TMP($J,"VISITS35") is used for table 3 and 5
  1. ;^TMP($J,"VISITS6DX") is used for table 6 dxs and includes 2 visits on same day to same provider
  1. K ^TMP($J)
  1. S BUDTV=0,BUDT35V=0,BUDT6V=0
  1. S A="^TMP($J,""VISITS"",",B=DFN_"^ALL VISITS;DURING "_$$FMTE^XLFDT(BUDBD)_"-"_$$FMTE^XLFDT(BUDED),E=$$START1^APCLDF(B,A)
  1. I '$D(^TMP($J,"VISITS",1)) Q
  1. S X=0 F S X=$O(^TMP($J,"VISITS",X)) Q:X'=+X S V=$P(^TMP($J,"VISITS",X),U,5) D
  1. .Q:'$D(^AUPNVSIT(V,0))
  1. .Q:'$P(^AUPNVSIT(V,0),U,9)
  1. .Q:$P(^AUPNVSIT(V,0),U,11)
  1. .S L=$P(^AUPNVSIT(V,0),U,6)
  1. .Q:L=""
  1. .Q:'$D(^BUDVSITE(BUDSITE,11,L)) ;not valid location
  1. .Q:$P(^AUPNVSIT(V,0),U,7)="C"
  1. .Q:$P(^AUPNVSIT(V,0),U,7)="T"
  1. .Q:$P(^AUPNVSIT(V,0),U,7)="N"
  1. .Q:$P(^AUPNVSIT(V,0),U,7)="D"
  1. .Q:$P(^AUPNVSIT(V,0),U,7)="X"
  1. .S C=$$CLINIC^APCLV(V,"C")
  1. .S BUDTIEN=$O(^BUDVCNTL("B","FIRST LEVEL CLINIC EXCLUSIONS",0))
  1. .I C]"",$D(^BUDVCNTL(BUDTIEN,11,"B",C)) Q ;not a clinic code we want in any table
  1. .S BUDTV=BUDTV+1
  1. .S ^TMP($J,"VISITSLIST",V)=""
  1. ;now set up ^TMP($J,"VISITS35")
  1. ;loop through all visits and eliminate all from clinics, and eliminate orphans
  1. S V=0 F S V=$O(^TMP($J,"VISITSLIST",V)) Q:V'=+V D
  1. .I '$D(^AUPNVPRV("AD",V)) Q
  1. .I $$PRIMPROV^APCLV(V,"D")="" Q ;no prim prov disc
  1. .I '$D(^AUPNVPOV("AD",V)) Q
  1. .;must have a primary dx other than .9999
  1. .S Y=$$PRIMPOV^APCLV(V,"C") I Y=".9999" Q
  1. .S BUDTIEN=$O(^BUDVCNTL("B","CLINIC EXCLUSIONS",0))
  1. .S C=$$CLINIC^APCLV(V,"C")
  1. .I C]"",$D(^BUDVCNTL(BUDTIEN,11,"B",C)) Q ;exclude these clinics
  1. .I $D(^TMP($J,"SAMEPROV",$$PRIMPROV^APCLV(V,"I"),$P($P(^AUPNVSIT(V,0),U),"."))) Q ;already got one on this day, this provider
  1. .S ^TMP($J,"SAMEPROV",$$PRIMPROV^APCLV(V,"I"),$P($P(^AUPNVSIT(V,0),U),"."))=""
  1. .S BUDT35V=BUDT35V+1
  1. .S ^TMP($J,"VISITS35",V)=""
  1. ;NOW get all for table 6 dxs, same list but include duplicates
  1. S V=0 F S V=$O(^TMP($J,"VISITSLIST",V)) Q:V'=+V D
  1. .I '$D(^AUPNVPRV("AD",V)) Q
  1. .I $$PRIMPROV^APCLV(V,"D")="" Q ;no prim prov disc
  1. .I '$D(^AUPNVPOV("AD",V)) Q
  1. .;must have a primary dx other than .9999
  1. .S Y=$$PRIMPOV^APCLV(V,"C") I Y=".9999" Q
  1. .S BUDTIEN=$O(^BUDVCNTL("B","CLINIC EXCLUSIONS",0))
  1. .S C=$$CLINIC^APCLV(V,"C")
  1. .I C]"",$D(^BUDVCNTL(BUDTIEN,11,"B",C)) Q ;exclude these clinics
  1. .S BUDT6V=BUDT6V+1
  1. .S ^TMP($J,"VISITS6DX",V)=""
  1. .Q
  1. ;now get all mamms and paps in date range and count as orphans if at this facility and no mam on that date in pcc
  1. Q:BUDT35V=0 ;not a patient of interest
  1. Q:'$D(^BWP(DFN))
  1. S T="MAMMOGRAM SCREENING",T=$O(^BWPN("B",T,0))
  1. S T1="MAMMOGRAM DX BILAT",T1=$O(^BWPN("B",T1,0))
  1. S T2="MAMMOGRAM DX UNILAT",T2=$O(^BWPN("B",T2,0))
  1. S (G,V)=0 F S V=$O(^BWPCD("C",DFN,V)) Q:V="" D
  1. .Q:'$D(^BWPCD(V,0))
  1. .S D=$P(^BWPCD(V,0),U,12)
  1. .S J=$P(^BWPCD(V,0),U,4) I J=T!(J=T1)!(J=T2) D Q
  1. ..Q:D<BUDBD
  1. ..Q:D>BUDED
  1. ..Q:$P($G(^BWPCD(V,"PCC")),U,1)]"" ;already in pcc
  1. ..S L=$P(^BWPCD(V,0),U,10)
  1. ..Q:L=""
  1. ..Q:'$D(^BUDVSITE(BUDSITE,11,L)) ;not valid location
  1. ..S ^TMP($J,"MAMMS",V)="WH "_$$VAL^XBDIQ1(9002086.1,V,.04)_U_$$FMTE^XLFDT(D)
  1. .Q
  1. S T="PAP SMEAR",T=$O(^BWPN("B",T,0))
  1. S (G,V)=0 F S V=$O(^BWPCD("C",DFN,V)) Q:V="" D
  1. .Q:'$D(^BWPCD(V,0))
  1. .S D=$P(^BWPCD(V,0),U,12)
  1. .S J=$P(^BWPCD(V,0),U,4) I J=T D Q
  1. ..Q:D<BUDBD
  1. ..Q:D>BUDED
  1. ..Q:$P($G(^BWPCD(V,"PCC")),U,1)]"" ;already in pcc
  1. ..S L=$P(^BWPCD(V,0),U,10)
  1. ..Q:L=""
  1. ..Q:'$D(^BUDVSITE(BUDSITE,11,L)) ;not valid location
  1. ..S ^TMP($J,"PAPS",V)="WH PAP SMEAR"_U_$$FMTE^XLFDT(D)
  1. .Q
  1. Q