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

ABMMUFC3.m

Go to the documentation of this file.
  1. ABMMUFC3 ;IHS/SD/SDR - EHR Incentive Report (MU) ;
  1. ;;2.6;IHS 3P BILLING SYSTEM;**15,20**;NOV 12, 2009;Build 317
  1. ;IHS/SD/SDR - 2.6*15 - HEAT183309 - split routine due to size
  1. ;IHS/SD/SDR - 2.6*15 - HEAT207910 - made change to fix <SUBSCR>CLAIMS+64^ABMMUFC3; occurs when there isn't an active
  1. ; insurer on the claim.
  1. ;IHS/SD/SDR - 2.6*20 - HEAT256154 - Fixed paid bug. Paid amount from previous bill was being used because variable wasn't being set to 0.
  1. ; Also fixed where service category from visit but other info from Parent visit were being used together, causing wrong visit to show up
  1. ; on report. Added check for newborn with bed days >2 to report in adult and ped bed days. Added code to get Kidscare info so it can
  1. ; determine if Kidscare is Medicaid or PI to determine title XIX or XXI.
  1. ;
  1. PREV ;
  1. S ABMP("PD")=0,ABMPYD=0
  1. D SETVAR^ABMPPAD1
  1. S ABMPHRN=$P($G(^AUPNPAT(ABMP("PDFN"),41,DUZ(2),0)),U,2)
  1. S ABMBSUF=$P($G(^ABMDPARM(ABMP("LDFN"),1,2)),U,4)
  1. ;loop thru active bills
  1. S ABMBNUM=$P($G(^ABMDBILL(DUZ(2),ABMPBDFN,0)),U)
  1. ;get trans for bills
  1. S ABMHOLD=DUZ(2)
  1. S ABMSAT=ABMP("LDFN") ;Satellite = 3P Visit loc
  1. S DUZ(2)=ABMPAR
  1. S ABMBNUM=$O(^BARBL(DUZ(2),"B",ABMBNUM))
  1. S ABMAIEN=$O(^BARBL(DUZ(2),"B",ABMBNUM,0))
  1. I +$G(ABMAIEN)=0 S:+$G(ABMHOLD)'=0 DUZ(2)=ABMHOLD K ABMHOLD Q ;there isn't an A/R bill w/this number
  1. S ABMTRIEN=0,ABMLN=1
  1. F S ABMTRIEN=$O(^BARTR(DUZ(2),"AC",ABMAIEN,ABMTRIEN)) Q:ABMTRIEN="" D
  1. .S ABMREC=$G(^BARTR(DUZ(2),ABMTRIEN,0))
  1. .I $G(ABMOPDT)="" S ABMOPDT=$P($P(ABMREC,U),".")
  1. .Q:+$P(ABMREC,U,2)=0&(+$P(ABMREC,U,3)=0)
  1. .S ABMBINS=$P(ABMREC,U,6)
  1. .I +$G(ABMBINS)=0 S ABMBINS=$P($G(^BARBL(DUZ(2),ABMAIEN,0)),U,3) ;abm*2.6*7
  1. .S ABMBINS=+$P($G(^BARAC(DUZ(2),ABMBINS,0)),U)
  1. .S ABMTTYP=$P($G(^BARTR(DUZ(2),ABMTRIEN,1)),U,1)
  1. .S ABMADJC=$P($G(^BARTR(DUZ(2),ABMTRIEN,1)),U,2)
  1. .S ABMCAT=""
  1. .I ABMTTYP=40 S ABMCAT="P"
  1. .;treat a pymt credit w/credit amt like a pymt
  1. .I (ABMTTYP=43),(ABMADJC=20),(+$P($G(^BARTR(DUZ(2),ABMTRIEN,0)),U,2)'=0) S ABMCAT="P"
  1. .Q:ABMCAT=""
  1. .S ABMP("PD")=+$G(ABMP("PD"))+$$GET1^DIQ(90050.03,ABMTRIEN,3.5,"E"),ABMPYD=+$G(ABMPYD)+1
  1. I +$G(ABMHOLD)'=0 S DUZ(2)=ABMHOLD K ABMHOLD
  1. Q
  1. CLAIMS ;EP
  1. S ABMPBDFN=0 ;abm2.6*15 to stop bill number from carrying over to other visits
  1. S ABMP("PD")=0 ;abm*2.6*20 IHS/SD/SDR HEAT256154
  1. S ABMPSDT=ABMP("SDT")-10000
  1. F S ABMPSDT=$O(^ABMDCLM(DUZ(2),"AD",ABMPSDT)) Q:'ABMPSDT D ;loop thru service date from x-ref
  1. .S ABMPFLG=0 ;abm*2.6*15 HEAT183309 Req#B
  1. .S ABMP("CDFN")=0
  1. .F S ABMP("CDFN")=$O(^ABMDCLM(DUZ(2),"AD",ABMPSDT,ABMP("CDFN"))) Q:'ABMP("CDFN") D Q:ABMPFLG=1
  1. ..S ABMVDFN=0
  1. ..F S ABMVDFN=$O(^ABMDCLM(DUZ(2),ABMP("CDFN"),11,ABMVDFN)) Q:'ABMVDFN D Q:ABMPFLG=1
  1. ...I $D(^TMP($J,"ABM-MUVLST",ABMVDFN)) Q ;visit already counted ;abm*2.6*15
  1. ...I $P($G(^AUPNVSIT(ABMVDFN,0)),U,11)=1 Q ;deleted visit
  1. ...S ABMP("PVDFN")=$S($P($G(^AUPNVSIT(ABMVDFN,0)),U,12):$P(^AUPNVSIT(ABMVDFN,0),U,12),1:ABMVDFN) ;abm*2.6*20 IHS/SD/SDR HEAT256154
  1. ...;S ABMSC=$P($G(^AUPNVSIT(ABMVDFN,0)),U,7) ;service category ;abm*2.6*20 IHS/SD/SDR HEAT256154
  1. ...S ABMSC=$P($G(^AUPNVSIT(ABMP("PVDFN"),0)),U,7) ;service category ;abm*2.6*20 IHS/SD/SDR HEAT256154
  1. ...I "HIASRO"'[ABMSC Q ;ignore all other service categories
  1. ...;H=Hosp
  1. ...;I=In Hosp
  1. ...;A=Amb
  1. ...;S=Day Surg
  1. ...;R=Nurs Home
  1. ...;O=Observ
  1. ...;parent visit link; default to visit if there isn't one
  1. ...;S ABMP("PVDFN")=$S($P($G(^AUPNVSIT(ABMVDFN,0)),U,12):$P(^AUPNVSIT(ABMVDFN,0),U,12),1:ABMVDFN) ;abm*2.6*20 IHS/SD/SDR HEAT256154
  1. ...;if not Hospitalization, use Visit/Admit Date&Time
  1. ...I ABMSC'="H",($P($G(^AUPNVSIT(ABMP("PVDFN"),0)),U)<ABMP("SDT")) Q ;seen before start date
  1. ...I ABMSC'="H",($P($G(^AUPNVSIT(ABMP("PVDFN"),0)),U)>ABMP("EDT")) Q ;seen after end date
  1. ...;if Hospitalization, get Date of Discharge from V Hospitalization file
  1. ...S ABMQFLG=1
  1. ...I ABMSC="H" D Q:ABMQFLG=0
  1. ....S ABMP("VHIEN")=+$O(^AUPNVINP("AD",ABMP("PVDFN"),0))
  1. ....I ABMP("VHIEN")=0 S ABMQFLG=0 Q
  1. ....S ABMP("DISCHDT")=$P($G(^AUPNVINP(ABMP("VHIEN"),0)),U)
  1. ....I ABMP("DISCHDT")<ABMP("SDT") S ABMQFLG=0 Q ;seen before start date
  1. ....I ABMP("DISCHDT")>ABMP("EDT") S ABMQFLG=0 Q ;seen after end date
  1. ....;start new abm*2.6*12 swingbed
  1. ....S ABMP("SWINGBED")=0
  1. ....I $$GET1^DIQ(45.7,$$GET1^DIQ(9000010.02,ABMP("VHIEN"),".04","I"),"9999999.01","E")=21 S ABMP("SWINGBED")=1
  1. ....I $$GET1^DIQ(45.7,$$GET1^DIQ(9000010.02,ABMP("VHIEN"),".05","I"),"9999999.01","E")=21 S ABMP("SWINGBED")=1
  1. ....;end new swingbed
  1. ...S ABMPCDFN=0
  1. ...S ABMPFLG=0 ;pymt flg
  1. ...K ABMB
  1. ...F ABMC=1:1 S ABMPCDFN=$O(^ABMDCLM(DUZ(2),"AV",ABMP("PVDFN"),ABMPCDFN)) Q:'ABMPCDFN D Q:ABMPFLG=1
  1. ....;S ABMP("BTYP")=$P($G(^ABMDCLM(DUZ(2),ABMPCDFN,0)),U,2) ;bill type ;abm*2.6*20 IHS/SD/SDR HEAT256154
  1. ....S ABMP("BTYP")=$P($G(^ABMDCLM(DUZ(2),ABMPCDFN,0)),U,12) ;bill type ;abm*2.6*20 IHS/SD/SDR HEAT256154
  1. ....S ABMP("VTYP")=$P($G(^ABMDCLM(DUZ(2),ABMPCDFN,0)),U,7) ;visit type
  1. ....I +$P($G(^ABMDCLM(DUZ(2),ABMPCDFN,0)),U,8)=0 Q ;no active insurer on claim - skip abm*2.6*15 HEAT207910
  1. ....I $P($G(^ABMDCLM(DUZ(2),ABMPCDFN,0)),U,4)="X" Q ;skip cancelled claims
  1. ....S ABMB(ABMP("VTYP"),ABMP("BTYP"),ABMC)=ABMPCDFN
  1. ...S ABMP("VTYP")=0
  1. ...F S ABMP("VTYP")=$O(ABMB(ABMP("VTYP"))) Q:'ABMP("VTYP") D Q:ABMPFLG=1
  1. ....S ABMP("BTYP")=0
  1. ....F S ABMP("BTYP")=$O(ABMB(ABMP("VTYP"),ABMP("BTYP"))) Q:'ABMP("BTYP") D Q:ABMPFLG=1
  1. .....S ABMC=0
  1. .....F S ABMC=$O(ABMB(ABMP("VTYP"),ABMP("BTYP"),ABMC)) Q:'ABMC D Q:ABMPFLG=1
  1. ......S ABMPCDFN=$G(ABMB(ABMP("VTYP"),ABMP("BTYP"),ABMC))
  1. ......S ABM=ABMPCDFN
  1. ......S ABMP("PDFN")=$P($G(^ABMDCLM(DUZ(2),ABMPCDFN,0)),U)
  1. ......Q:$$GET1^DIQ(2,ABMP("PDFN"),".01","E")["DEMO,PATIENT" ;exclude any DEMO,PATIENT
  1. ......S ABMP("INS")=$P($G(^ABMDCLM(DUZ(2),ABMPCDFN,0)),U,8)
  1. ......I $$GET1^DIQ(9999999.181,$$GET1^DIQ(9999999.18,ABMP("INS"),".211","I"),1,"I")="K" D GETCINS^ABMMUFC3 ;abm*2.6*20 IHS/SD/SDR HEAT256154
  1. ......S ABMP("LDFN")=$P($G(^ABMDCLM(DUZ(2),ABMPCDFN,0)),U,3)
  1. ......S ABMP("VDT")=$P($G(^ABMDCLM(DUZ(2),ABMPCDFN,7)),U)
  1. ......S ABMP("NEWBORN")=0 ;abm*2.6*7
  1. ......I $$GET1^DIQ(9002274.03,$P($G(^ABMDCLM(DUZ(2),ABMPCDFN,5)),U),.03,"E")="NEWBORN" S ABMP("NEWBORN")=1
  1. ......S ABMATYP=$$GET1^DIQ(9002274.03,$P($G(^ABMDCLM(DUZ(2),ABMPCDFN,5)),U),.03,"E") ;abm*2.6*20 IHS/SD/SDR HEAT256154
  1. .....S ABMIT=$$GET1^DIQ(9999999.181,$$GET1^DIQ(9999999.18,ABMP("INS"),".211","I"),1,"I")
  1. .....D INSTYP^ABMMUFC1
  1. .....S ABMP("INS")=$P($G(^ABMDCLM(DUZ(2),ABMPCDFN,0)),U,8)
  1. .....S ABMP("FSDT")=0,ABMFFLG=0
  1. .....F S ABMP("FSDT")=$O(^ABMNINS(DUZ(2),ABMP("INS"),1,ABMP("VTYP"),11,ABMP("FSDT"))) Q:'ABMP("FSDT") D Q:ABMFFLG=1
  1. ......I $P($G(^ABMNINS(DUZ(2),ABMP("INS"),1,ABMP("VTYP"),11,ABMP("FSDT"),0)),U)>ABMP("EDT") Q
  1. ......I $P($G(^ABMNINS(DUZ(2),ABMP("INS"),1,ABMP("VTYP"),11,ABMP("FSDT"),0)),U,2)>ABMP("SDT") Q
  1. ......S ABMFFLG=1
  1. .....;start new abm*2.6*20 IHS/SD/SDR HEAT256154
  1. .....S ABMCDAYS=+$P($G(^ABMDCLM(DUZ(2),ABMPCDFN,7)),U,3)
  1. .....S:'ABMCDAYS ABMCDAYS=$P($G(^ABMDCLM(DUZ(2),ABMPCDFN,6)),U,9)
  1. .....S:'ABMCDAYS ABMCDAYS=1
  1. .....;commented out below line in abm*2.6*20 IHS/SD/SDR; Harrell Little said it didn't apply, that newborn is always newborn
  1. .....;I ABMCDAYS>2 S ABMP("NEWBORN")=0 ;if stay is more than 2 days it isn't counted as newborn; it should be counted as adult&ped
  1. .....;end new abm*2.6*20 IHS/SD/SDR HEAT256154
  1. .....D SETCAT^ABMMUFAC
  1. .....;Q:$D(^TMP($J,"ABM-MUVLST",ABMP("PVDFN"))) ;quit if this visit has already counted
  1. .....;S ^TMP($J,"ABM-MUVLST",ABMP("PVDFN"))="" ;add visit to list
  1. .....S ABMDOSB=$P($G(^ABMDCLM(DUZ(2),ABMPCDFN,7)),U)
  1. .....S ABMDOSE=$P($G(^ABMDCLM(DUZ(2),ABMPCDFN,7)),U,2)
  1. .....S ABMBILLD=+$P($G(^ABMDCLM(DUZ(2),ABMPCDFN,2)),U)
  1. .....S ABMVLOC=$$GET1^DIQ(9002274.3,ABMPCDFN,".03","E")
  1. .....S ABMNDAYS=+$P($G(^ABMDCLM(DUZ(2),ABMPCDFN,6)),U,6)
  1. .....;start old abm*2.6*20 IHS/SD/SDR HEAT256154
  1. .....;S ABMCDAYS=+$P($G(^ABMDCLM(DUZ(2),ABMPCDFN,7)),U,3)
  1. .....;S:'ABMCDAYS ABMCDAYS=$P($G(^ABMDCLM(DUZ(2),ABMPCDFN,6)),U,9)
  1. .....;S:'ABMCDAYS ABMCDAYS=1
  1. .....;end old abm*2.6*20 IHS/SD/SDR HEAT256154
  1. .....S ABMRT="NOTBLD"
  1. .....;start old abm*2.6*20 IHS/SD/SDR HEAT256154
  1. .....;I "^S^B^"[("^"_ABMSUMDT_"^") D SUMMREC^ABMMUFC1
  1. .....;I "^D^B^"[("^"_ABMSUMDT_"^") D DETREC^ABMMUFC1
  1. .....;end old start new abm*2.6*20 IHS/SD/SDR HEAT256154
  1. .....;this looks at other insurers on the bill and tries to determine if they are a PI/MCD or MCR/MCD bill;
  1. .....;puts these into separate categories.
  1. .....S ABMI=0,ABMDF=0,ABMITYPA=""
  1. .....F S ABMI=$O(^ABMDCLM(DUZ(2),ABMPCDFN,13,ABMI)) Q:'ABMI D
  1. ......S ABMJ=$P($G(^ABMDCLM(DUZ(2),ABMPCDFN,13,ABMI,0)),U)
  1. ......I ABMITYPA'="" S ABMITYPA=ABMITYPA_"~"_$$GET1^DIQ(9999999.181,$$GET1^DIQ(9999999.18,+ABMJ,".211","I"),1,"I")
  1. ......I ABMITYPA="" S ABMITYPA=$$GET1^DIQ(9999999.181,$$GET1^DIQ(9999999.18,+ABMJ,".211","I"),1,"I")
  1. ......I $P($G(^ABMDCLM(DUZ(2),ABMPCDFN,13,ABMI,0)),U,6)'="",ABMIT="P" S ABMDF=1
  1. ......I $P($G(^ABMDCLM(DUZ(2),ABMPCDFN,13,ABMI,0)),U,6)'="",ABMIT="R" S ABMDF=2
  1. .....I ABMDF=1 S ABMITYP="PRI/MCD"
  1. .....I ABMDF=2 S ABMITYP="MCR/MCD"
  1. .....;
  1. .....I "^S^B^"[("^"_ABMSUMDT_"^") D SUMMREC^ABMMUFC1
  1. .....I "^D^B^"[("^"_ABMSUMDT_"^") D DETREC^ABMMUFC1
  1. .....;end new abm*2.6*20 IHS/SD/SDR HEAT256154
  1. Q
  1. GETBINS ;EP
  1. S ABMI=0
  1. F S ABMI=$O(^ABMDBILL(DUZ(2),ABMPBDFN,13,ABMI)) Q:'ABMI D
  1. .I $P($G(^ABMDBILL(DUZ(2),ABMPBDFN,13,ABMI,0)),U)'=ABMP("INS") Q ;not the active insurer
  1. .I +$P($G(^ABMDBILL(DUZ(2),ABMPBDFN,13,ABMI,0)),U,7)'=0 S ABMIT2="D"
  1. .I +$P($G(^ABMDBILL(DUZ(2),ABMPBDFN,13,ABMI,0)),U,8)'=0 S ABMIT2="P"
  1. Q
  1. ;start new abm*2.6*20 IHS/SD/SDR HEAT256154
  1. GETCINS ;EP
  1. S ABMI=0
  1. F S ABMI=$O(^ABMDCLM(DUZ(2),ABMPCDFN,13,ABMI)) Q:'ABMI D
  1. .I $P($G(^ABMDCLM(DUZ(2),ABMPCDFN,13,ABMI,0)),U)'=ABMP("INS") Q ;not the active insurer
  1. .I +$P($G(^ABMDCLM(DUZ(2),ABMPCDFN,13,ABMI,0)),U,7)'=0 S ABMIT2="D"
  1. .I +$P($G(^ABMDCLM(DUZ(2),ABMPCDFN,13,ABMI,0)),U,8)'=0 S ABMIT2="P"
  1. Q
  1. ;end new abm*2.6*20 IHS/SD/SDR HEAT256154