Você está na página 1de 9

USE [Infinity]

GO
/****** Object: StoredProcedure [dbo].[ETL_MPPRImpactAnalysis] Script Date: 6/1/2015 2:38:57 AM
******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER OFF
GO
ALTER PROCEDURE [dbo].[ETL_MPPRImpactAnalysis]
(
@FacilityList varchar(MAX) -- = '3, 124, 126, 128, 130, 132, 134, 135, 136, 138, 140, 141, 142, 143,
144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 161, 184, 230, 289, 290, 291, 292, 293, 294, 306'
,@FromDate datetime -- = '04/01/2013'
,@ThruDate datetime -- = '04/30/2013'
,@PayerTypeList varchar(MAX) = '2'
,@RevenueType Varchar(12) = 'CTB Revenue'
,@MPPRReductionPct Int = 50
)
AS
BEGIN
PRINT 'Step 9a:'
SET NOCOUNT ON;
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
-- Calculate MPPR Adjustment Factor to pass into fn_FeeScheduleRateForTxMinute() function
DECLARE @MPPRAdjustmentFactor Numeric(9,2)
SET @MPPRAdjustmentFactor = (100.00 - @MPPRReductionPct) / 100.00
DECLARE @PayerTypeTable TABLE (PayerType_ID Int, PayerType Varchar(50))
INSERT @PayerTypeTable
SELECT
PayerType_ID,
Descrip AS PayerType
FROM
[ROX_INF].dbo.PayerType
WHERE
(@PayerTypeList IS NULL OR PayerType_ID IN (SELECT [Value] FROM
dbo.fn_ParseDelimited(@PayerTypeList, ',')));
IF @FacilityList IS NULL
SELECT @FacilityList = STUFF((
SELECT ',' + CAST(Facility_ID AS Varchar(10))
FROM
[ROX_INF].dbo.Facility
ORDER BY
Facility_ID
FOR XML PATH ('')
), 1, 1, '');

1 /9

IF OBJECT_ID('tempdb..#FacilityTable') IS NOT NULL


DROP TABLE #FacilityTable
CREATE TABLE #FacilityTable (Facility_ID Int, FeeSchedule_ID Int);
INSERT #FacilityTable
SELECT
Facility_ID,
FeeSchedule_ID
FROM
[ROX_INF].dbo.Facility
WHERE
LTRIM(RTRIM(Facility_ID)) IN (SELECT LTRIM(RTRIM([Value])) FROM
dbo.fn_ParseDelimited(@FacilityList, ','));
PRINT 'Step 9b:'
IF OBJECT_ID('tempdb..#FeeSched') IS NOT NULL
DROP TABLE #FeeSched
CREATE TABLE #FeeSched (
FeeSchedule_ID Int,
ServiceCode varchar(10) not null,
FromDate datetime not null,
ThruDate datetime not null,
Rate money,
MPPR_Rate money,
TransitionedNonFacilityPE_RVU numeric(9,2)
)
INSERT INTO #FeeSched
SELECT
FeeSchedule.FeeSchedule_ID,
FeeScheduleRVU.ServiceCode,
FeeScheduleRVU.FromDate, FeeScheduleRVU.ThruDate,
ROUND(((ROUND(FeeScheduleRVU.Work_RVU * FeeScheduleBNA.UpdateFactor, 2) *
FeeScheduleGPCI.Work_GPCI +
FeeScheduleRVU.TransitionedNonFacilityPE_RVU * FeeScheduleGPCI.PE_GPCI) +
FeeScheduleRVU.MP_RVU * FeeScheduleGPCI.MP_GPCI) * FeeScheduleRVU.ConversionFactor, 2) AS
Rate,
ROUND(((ROUND(FeeScheduleRVU.Work_RVU * COALESCE(FeeScheduleBNA.UpdateFactor, 1.0), 2) *
FeeScheduleGPCI.Work_GPCI + (FeeScheduleRVU.TransitionedNonFacilityPE_RVU *
FeeScheduleGPCI.PE_GPCI * COALESCE(@MPPRAdjustmentFactor, 1.00))) + FeeScheduleRVU.MP_RVU *
FeeScheduleGPCI.MP_GPCI) * FeeScheduleRVU.ConversionFactor, 2) AS MPPR_Rate,
FeeScheduleRVU.TransitionedNonFacilityPE_RVU
FROM
[ROX_INF].dbo.FeeSchedule
INNER JOIN (SELECT DISTINCT FeeSchedule_ID FROM #FacilityTable) AS Facility ON
Facility.FeeSchedule_ID = FeeSchedule.FeeSchedule_ID
INNER JOIN [ROX_INF].dbo.FeeScheduleGPCI ON FeeSchedule.FeeSchedule_ID =
[ROX_INF].dbo.FeeScheduleGPCI.FeeSchedule_ID
INNER JOIN [ROX_INF].dbo.FeeScheduleRVU ON FeeScheduleRVU.FromDate =
FeeScheduleGPCI.FromDate AND FeeScheduleRVU.ThruDate = FeeScheduleGPCI.ThruDate
INNER JOIN [ROX_INF].dbo.[Service] ON [Service].ServiceCode = FeeScheduleRVU.ServiceCode

2 /9

INNER JOIN [ROX_INF].dbo.FeeScheduleBNA ON FeeScheduleRVU.FromDate =


FeeScheduleBNA.FromDate AND FeeScheduleRVU.ThruDate = FeeScheduleBNA.ThruDate
WHERE
(
@FromDate BETWEEN FeeScheduleRVU.FromDate AND FeeScheduleRVU.ThruDate OR
@ThruDate BETWEEN FeeScheduleRVU.FromDate AND FeeScheduleRVU.ThruDate OR
(FeeScheduleRVU.FromDate <= @FromDate AND FeeScheduleRVU.ThruDate >= @ThruDate)
)
DECLARE @CTB Char(11), @MPFS Char(12)
SET @CTB = 'CTB Revenue'
SET @MPFS = 'MPFS Revenue'
DECLARE @BillingDBName Varchar(100)
SELECT @BillingDBName = [ROX_INF].dbo.fn_BillingDatabase()
DECLARE @Sql Varchar(MAX)
-- load @Sql variable with sql code to run function to get Bill Types for this year
DECLARE @BillTypes TABLE (
FromDate Datetime,
ThruDate Datetime,
ARCustID Int,
IntakeSource_ID Int,
Facility_ID Int,
ROX_ID Int,
PayerPlanFFSID Int,
Payer
Varchar(100),
BillType
Char(1),
IsRUGBased Bit,
BillOMRADays Bit,
BillDayOfDischarge Bit,
BillFirstLOADay Bit,
Multiplier Decimal(8,2),
IsInactive Bit
);
PRINT 'Step 9c:'
SET @Sql = 'SELECT * FROM ' + @BillingDBName + '.dbo.fn_BillTypes(''' + @FacilityList + ''',''' +
CONVERT(Char(10), @FromDate, 101) + ''',''' + CONVERT(Char(10), @ThruDate, 101) + ''')'
INSERT @BillTypes
EXEC (@Sql)
IF OBJECT_ID('tempdb..#ResultTable') IS NOT NULL
DROP TABLE #ResultTable
CREATE TABLE #ResultTable (
txminute_id int,
Facility_ID Int,
Resident_ID Int,
PayerType Varchar(50),
PayerPlan Varchar(50),
SessionDate Datetime,

3 /9

ServiceCode Varchar(10),
TotalUnits Int,
Multiplier Decimal(8,6),
Full_Units Int,
MPPR_Units Int,
Full_Rate Decimal(18,4),
MPPR_Rate Decimal(18,4),
Amount
Decimal(18,4),
IsFeeSchedule Bit,
MPPR_Rank Int
);
-- Store raw data to be used for Aggregation
INSERT #ResultTable
SELECT
txminute.txminute_id,
Resident.Facility_ID,
Stay.Resident_ID,
payer.PayerTypeDescrip,
payer.PayerName,
TxSession.SessionDate,
svc.ServiceCode,
TxMinute.Units,
CASE WHEN @RevenueType = @CTB THEN bt.Multiplier ELSE 1.0000 END AS Multiplier,
0 AS Full_Units,
0 AS MPPR_Units,
ISNULL(fs.Rate,0) as Full_Rate,
ISNULL(fs.MPPR_Rate,0) AS MPPR_Rate,
0 AS Amount,
-- Check for exclusions from the MPPR calculation
CASE WHEN bt.BillType = 'B' OR @RevenueType = @MPFS THEN 1 ELSE 0 END AS IsFeeSchedule,
CASE WHEN payer.MPPRAdjusted = 1 AND TxMinute.Units > 0 AND svc.TherapyUsage =
'Always'
THEN ROW_NUMBER()
OVER (PARTITION BY stay.Resident_ID, TxSession.SessionDate
ORDER BY CASE WHEN payer.MPPRAdjusted = 1 AND
TxMinute.Units > 0 AND svc.TherapyUsage = 'Always' THEN 0 ELSE 1 END,
fs.TransitionedNonFacilityPE_RVU DESC,
CASE TxTrack.Discipline
WHEN 'PT' THEN 1
WHEN 'OT' THEN 2
WHEN 'ST' THEN 3
END,
svc.ServiceCode, TxMinute.TxMinute_ID)
ELSE NULL END as MPPR_Rank
FROM
[ROX_INF].dbo.TxMinute
INNER JOIN [ROX_INF].dbo.[Service] svc ON svc.Service_ID = TxMinute.Service_ID
INNER JOIN [ROX_INF].dbo.TxSession ON TxSession.TxSession_ID = TxMinute.TxSession_ID
INNER JOIN [ROX_INF].dbo.TxTrack ON TxTrack.TxTrack_ID = TxSession.TxTrack_ID
INNER JOIN [ROX_INF].dbo.PatientCase ON PatientCase.PatientCase_ID = TxTrack.PatientCase_ID

4 /9

INNER JOIN [ROX_INF].dbo.Stay ON Stay.Stay_ID = PatientCase.Stay_ID


INNER JOIN [ROX_INF].dbo.Resident ON Resident.Resident_ID = Stay.Resident_ID
INNER JOIN #FacilityTable ft ON ft.Facility_ID = Resident.Facility_ID
OUTER APPLY [ROX_INF].dbo.fn_PayerForTrackAndDate(TxSession.TxTrack_ID, TxSession.SessionDate)
payer
LEFT OUTER JOIN #FeeSched fs ON fs.FeeSchedule_ID = ft.FeeSchedule_ID AND
fs.ServiceCode = svc.ServiceCode AND
TxSession.SessionDate BETWEEN fs.FromDate AND fs.ThruDate
LEFT OUTER JOIN @BillTypes bt ON bt.Facility_ID = Resident.Facility_ID AND
CASE WHEN bt.IntakeSource_ID IS NULL THEN Stay.IntakeSource_ID ELSE
bt.IntakeSource_ID END = Stay.IntakeSource_ID AND
bt.ROX_ID = payer.Payer_ID AND
TxSession.SessionDate BETWEEN bt.FromDate AND bt.ThruDate
WHERE
TxMinute.IsDeletedService = 0 AND
TxSession.IsDeletedSession = 0 AND
TxSession.MissedPerson_ID IS NULL AND
TxSession.SessionDate BETWEEN @fromDate AND @thruDate AND
--svc.TherapyUsage = 'Always' AND -- As per MK, List all codes, not just Usage of 'Always'
(@PayerTypeList IS NULL OR payer.PayerType_ID IN (SELECT PayerType_ID FROM @PayerTypeTable))
AND
payer.MPPRAdjusted = 1;
PRINT 'Step 9d:'
-- Update Amount, Full_Units and MPPR_Units based on Rank and Service Code
UPDATE #ResultTable
SET
Amount =
CASE WHEN MPPR_Rank IS NULL THEN TotalUnits * Full_Rate -- Code was excluded from
MPPR calculation
WHEN MPPR_Rank = 1 THEN Full_Rate + CASE WHEN TotalUnits > 1 THEN ((TotalUnits - 1)
* MPPR_Rate) ELSE 0 END -- Primary code to be used in MPPR calculation 1st unit at full rate, additional
units at MPPR rate
ELSE TotalUnits * MPPR_Rate
-- Other codes included in MPPR calculation at MPPR
rate
END,
Full_Units =
CASE WHEN MPPR_Rank IS NULL THEN TotalUnits -- Code was excluded from MPPR calculation
WHEN MPPR_Rank = 1 THEN 1 -- Primary code to be used in MPPR calculation 1st unit at full
rate, additional units at MPPR rate
ELSE 0
-- Other codes included in MPPR calculation at MPPR rate
END,
MPPR_Units =
CASE WHEN MPPR_Rank IS NULL THEN 0 -- Code was excluded from MPPR calculation
WHEN MPPR_Rank = 1 THEN CASE WHEN TotalUnits > 1 THEN (TotalUnits - 1) ELSE 0 END
-- Primary code to be used in MPPR calculation 1st unit at full rate, additional units at MPPR rate
ELSE TotalUnits
-- Other codes included in MPPR calculation at MPPR rate
END
-- Add one row for PayerPlans that don't use Fee Schedule billing method
-- But only when running for Revenue Type of CTB Revenue
-- This will be used so the report can display a message

5 /9

IF @RevenueType = @CTB
INSERT #ResultTable
SELECT
0 AS txminute_ID,
Facility_ID,
0 AS Resident_ID,
PayerType,
PayerPlan,
'1/1/1900' AS SessionDate,
'' AS ServiceCode,
0 AS TotalUnits,
0 AS Multiplier,
0 AS Full_Units,
0 AS MPPR_Units,
0.00 AS Full_Rate,
0.00 AS MPPR_Rate,
0.00 AS Amount,
0 AS IsFeeSchedule,
0 AS MPPR_Rank
FROM
#ResultTable
WHERE
IsFeeSchedule = 0
GROUP BY
Facility_ID,
PayerType,
PayerPlan;
PRINT 'Step 9e:'
IF OBJECT_ID('tempdb..#ReturnTable') IS NOT NULL
DROP TABLE #ReturnTable
CREATE TABLE #ReturnTable (
RecNo Int Identity(1,1),
Activity_Date DateTime,
Facility Varchar(50),
Facility_ID Varchar(10),
ExportKey Varchar(20),
PatientName Varchar(50),
PayerType Varchar(50),
PayerPlan Varchar(50),
ServiceCode Varchar(10),
TotalUnits Int,
Full_Revenue Decimal(18,2),
Full_Units Int,
MPPR_Units Int,
Full_Rate Decimal(18,6),
MPPR_Rate Decimal(18,6),
MPPR_Adjusted_Full_Revenue Decimal(18,2),
MPPR_Adjusted_MPPR_Revenue Decimal(18,2),
MPPR_Revenue Decimal(18,2),
RevenueDecrease Decimal(18,2),

6 /9

IsFeeSchedule Bit,
IsLastPatientRow Bit,
PayerTypeChoices Varchar(MAX)
);
-- Store Results
INSERT #ReturnTable (
Activity_Date,
Facility,
Facility_ID,
ExportKey,
PatientName,
PayerType,
PayerPlan,
ServiceCode,
TotalUnits,
Full_Revenue,
Full_Units,
MPPR_Units,
Full_Rate,
MPPR_Rate,
MPPR_Adjusted_Full_Revenue,
MPPR_Adjusted_MPPR_Revenue,
MPPR_Revenue,
RevenueDecrease,
IsFeeSchedule
)
SELECT
rt.SessionDate AS [Activity_Date],
Facility.[Name] AS Facility,
Facility.[Facility_ID] AS [Facility_ID],
Facility.[ExportKey] AS [ExportKey],
ResidentInfo.LastName + CASE WHEN ISNULL(ResidentInfo.FirstName, '') = ''
THEN '' ELSE ', ' + ResidentInfo.FirstName
END AS PatientName,
rt.PayerType,
rt.PayerPlan,
rt.ServiceCode,
SUM(rt.TotalUnits) AS TotalUnits,
CAST(SUM(TotalUnits * Full_Rate * Multiplier) AS Decimal(18,2)) AS Full_Revenue,
SUM(Full_Units) AS Full_Units,
SUM(MPPR_Units) AS MPPR_Units,
MAX(Full_Rate) AS Full_Rate,
MAX(MPPR_Rate) AS MPPR_Rate,
CAST(SUM((Full_Units * Full_Rate) * Multiplier) AS Decimal(18,2)) AS
MPPR_Adjusted_Full_Revenue,
CAST(SUM((MPPR_Units * MPPR_Rate) * Multiplier) AS Decimal(18,2)) AS
MPPR_Adjusted_MPPR_Revenue,
CAST(SUM(((Full_Units * Full_Rate) + (MPPR_Units * MPPR_Rate))) * Multiplier AS
Decimal(18,2)) AS MPPR_Revenue,
CAST(SUM((TotalUnits * Full_Rate * Multiplier) -

7 /9

(((Full_Units * Full_Rate) + (MPPR_Units * MPPR_Rate)) * Multiplier)) AS Decimal(18,2))


AS RevenueDecrease,
rt.IsFeeSchedule
FROM
#ResultTable rt
LEFT OUTER JOIN [ROX_INF].dbo.ResidentInfo ON ResidentInfo.Resident_ID = rt.Resident_ID
AND ResidentInfo.IsCurrent = 1
INNER JOIN [ROX_INF].dbo.Facility ON Facility.Facility_ID = rt.Facility_ID
GROUP BY
rt.SessionDate,
Facility.[Name],
Facility.Facility_ID,
Facility.ExportKey,
ResidentInfo.LastName + CASE WHEN ISNULL(ResidentInfo.FirstName, '') = ''
THEN '' ELSE ', ' + ResidentInfo.FirstName
END,
rt.PayerType,
rt.PayerPlan,
rt.ServiceCode,
rt.Multiplier,
rt.IsFeeSchedule
ORDER BY
rt.SessionDate,
Facility.[Name],
rt.PayerType,
rt.PayerPlan,
ResidentInfo.LastName + CASE WHEN ISNULL(ResidentInfo.FirstName, '') = ''
THEN '' ELSE ', ' + ResidentInfo.FirstName
END,
rt.ServiceCode;
PRINT 'Step 9f:'
-- Update the ETL Records
UPDATE Infinity.dbo.ETL_MPPR_Impact_Analysis
SET [Status] = 'F'
WHERE [Status] = 'A'
AND Activity_Date BETWEEN @FromDate AND @ThruDate
AND LTRIM(RTRIM(FacilityID)) IN (SELECT LTRIM(RTRIM([Value])) FROM
dbo.fn_ParseDelimited(@FacilityList, ','))
INSERT INTO Infinity.dbo.ETL_MPPR_Impact_Analysis
(
Activity_Date, FacilityID, CustomerID, Facility, PatientName, PayerType, PayerPlan, ServiceCode,
TotalUnits, Full_Revenue, Full_Units, MPPR_Units, Full_Rate,
MPPR_Rate, MPPR_Adjusted_Full_Revenue, MPPR_Adjusted_MPPR_Revenue,
MPPR_Revenue, RevenueDecrease, IsFeeSchedule
)
SELECT
Activity_Date,

8 /9

Facility_ID,
Cast(RTRIM(ExportKey) as int),
Facility,
PatientName,
PayerType,
PayerPlan,
ServiceCode,
TotalUnits,
Full_Revenue,
Full_Units,
MPPR_Units,
Full_Rate,
MPPR_Rate,
MPPR_Adjusted_Full_Revenue,
MPPR_Adjusted_MPPR_Revenue,
MPPR_Revenue,
RevenueDecrease,
IsFeeSchedule
FROM
#ReturnTable
WHERE
IsFeeSchedule = 1 OR
(IsFeeSchedule = 0 AND ServiceCode = '');
---- Drop temporary tables
DROP TABLE #ResultTable;
DROP TABLE #ReturnTable;
DROP TABLE #FeeSched
DROP TABLE #FacilityTable
END

9 /9

Você também pode gostar