Calculation type

MedicareMultipleTherapyAdjustment

Applies Medicare's therapy Multiple Procedure Payment Reduction: for charges priced by MedicareRVU whose multiple-procedure schedule code matches a configured base code (and that lack an existing MultipleEndoscopyAdjustment marker), ranks all affected charges by PE amount (sort order is hardcoded to PEAmount, not configurable via a SortBy field), then reduces only the per-unit practice-expense (PE) portion of each unit by a rank-based percentage (default 100% for the first unit, 50% thereafter) using a single unit-rank counter that runs across all affected charges combined; the non-PE portion of each unit's amount is left untouched.

177
uses
8
customers
Adjustment
category
Charge
applies at

What it computes

affected = charges i=1..NumCharges-1 where detail.BaseCalculation.CalculationType=="MedicareRVU", !IgnoreCharge, !detail.HasAdjustment(MultipleEndoscopyAdjustment), no ExclusionCodes match, and IMultipleProcedureScheduleRepo record.Code in BaseCodes; sorted via GetChargeOrder(..., SortChargesBy.PEAmount) [hardcoded]. adjustedIndex starts at 0 and increments once per UNIT across ALL affected charges combined (not reset per charge). For unit j of charge i: initialUnitAmount = detail.Amount / Max(charge.Units,1); percentage = Percentages[min(adjustedIndex, Percentages.Count-1)]/100 (last value repeats once the list is exhausted); chargeAmountSum += initialUnitAmount - detail.PEAmount + MoneyMath.Multiply(detail.PEAmount, percentage) [detail.PEAmount is itself a per-unit figure, per the MedicareRVUCalculationDetail doc comments]. detail.Adjust(chargeAmountSum, adjustment) only if chargeAmountSum != detail.Amount.

Parameters

KeyMeaning
BaseCodesMulti-procedure schedule codes (default "5") identifying therapy charges eligible for the MPPR, matched against IMultipleProcedureScheduleRepo record.Code.
PercentagesOrdered PE-reduction percentages applied by unit rank across ALL affected charges combined (default [100, 50]); once exhausted, the last value keeps repeating.
ExclusionCodesList of DimensionMember (dimension+code) that, if present on a charge, exclude it from the adjustment.

Gotchas

Zero-unit charge silently zeroed: initialUnitAmount is computed safely via Math.Max(Units,1), but the per-unit loop `for (j=0; j<charge.Units; j++)` never executes when Units==0, so chargeAmountSum stays 0 and — because 0 != detail.Amount — the charge gets Adjust()'d to 0 rather than left alone. // MoneyMath.Multiply(decimal,double) rounds via (decimal)Math.Round((double)x*y, 2) — banker's/ToEven rounding — not the AwayFromZero decimal rounding used by ApplyMultipliers elsewhere in the engine; a reimplementer using decimal-based rounding will diverge on .xx5 boundaries. // The unit-rank index is GLOBAL across all affected charges (declared once, outside the per-charge foreach), so a charge's own reduction percentage depends on how many units of OTHER, higher-PE-ranked charges precede it, not just its own unit count. // MakeAdjustments does an unchecked cast `(MedicareRVUCalculationDetail)Details[i]`; safe only because IncludeCharge already required BaseCalculation.CalculationType=="MedicareRVU", which is assumed (not verified here) to always produce that Detail subtype.

In the source

class · /home/cary/src/mdc/MdClarity/MDClarity/MDClarityCore/Backend/PricingEngine/Adjustments/MedicareMultipleTherapyAdjustment.cs:10
calculator · /home/cary/src/mdc/MdClarity/MDClarity/MDClarityCore/Backend/PricingEngine/Adjustments/Calculators/MedicareMultipleTherapyAdjustmentCalculator.cs
dispatch · /home/cary/src/mdc/MdClarity/MDClarity/MDClarityCore/Backend/CalculationEngine.cs:824

CONFIRMED - re-read MedicareMultipleTherapyAdjustment.cs and MedicareMultipleTherapyAdjustmentCalculator.cs in full, plus the dispatch case (CalculationEngine.cs:824-827) and MedicareRVUCalculationDetail.cs's PEAmount doc comments. The draft's formula, category, level, and citations were all accurate; added gotchas (zero-unit silent-zero, banker's rounding, global unit-rank, unchecked cast) that the prior pass omitted.