Calculation type

MedicareMultipleOphthalmologyAdjustment

Applies Medicare's multiple-ophthalmology-procedure MPPR to the technical component (TC) of qualifying ophthalmology charges (multi-procedure base code 7 by default): after ranking affected charges (default sort AmountAllowed), each unit's TC portion — recomputed fresh via a full base-price re-run on a synthetic 1-unit TC-modifier copy of the charge, not looked up from a schedule — is reduced by a rank-based percentage (default 100% then 80%) using a running unit-rank counter spanning all affected charges combined, and the resulting post-reduction TC/PC split is recorded unconditionally (even for charges whose amount didn't actually change) for a later OPPS-cap step to consume.

51
uses
2
customers
Adjustment
category
Charge
applies at

What it computes

affected = charges i=1..NumCharges-1, !IgnoreCharge, where (PCTCIndicators contains "2" OR that charge's PCTC record.Code != "2") AND BaseCodes contains that charge's multi-procedure rollup Code, AND (charge lacks modifier "26" OR carries modifier "TC" directly [covers global/TC-billed charges] OR that charge's PCTC record.Code is in PCTCIndicators [covers indicator-3 PC-modifier charges treated as TC]); sorted via GetChargeOrder(..., adjustment.SortBy) [configurable, default AmountAllowed]. tcAmounts computed ONCE per affected charge (not per unit) by CalculateAmountAllowedBase on a fresh 1-unit copy with modifier 26 stripped and TC added (GetTCAmounts). adjustedIndex runs across ALL units of ALL affected charges combined. For unit i of charge: unitAmount = detail.Amount/Max(Units,1); percentage = Percentages[min(adjustedIndex,last)]/100; adjustedTCAmount = MoneyMath.Multiply(tcAmount, percentage); chargeAmount += unitAmount - tcAmount + adjustedTCAmount; postMPPRTCAmount += adjustedTCAmount. detail.Adjust(chargeAmount, adjustment) only if chargeAmount != detail.Amount, but rvuDetail.AddPostMPPRSplit(postMPPRTCAmount, chargeAmount - postMPPRTCAmount) runs UNCONDITIONALLY for every affected charge regardless of whether Adjust fired.

Parameters

KeyMeaning
BaseCodesMulti-procedure schedule codes (default "7") marking a charge as a multiple-ophthalmology candidate.
PCTCIndicatorsPCTC indicator codes (default "3") from IMultipleOphthalmologyScheduleRepo; indicator 3 treats a charge as TC even without a TC modifier; indicator "2" (PC-only) is excluded from the adjustment entirely unless explicitly listed here.
PercentagesOrdered TC-reduction percentages applied by unit rank across ALL affected charges combined (default [100, 80]); last value repeats once exhausted.
SortBySortChargesBy enum (default AmountAllowed) ranking affected charges before percentages are applied.

Gotchas

Same zero-unit silent-zero trap as MedicareMultipleTherapyAdjustment: `for (i=0; i<charge.Units; i++)` never runs if Units==0, so chargeAmount stays 0 and the charge gets Adjust()'d to 0. // AddPostMPPRSplit is called UNCONDITIONALLY on every affected charge, independent of the `chargeAmount != detail.Amount` guard on Adjust — so the top-ranked (100%, effectively unchanged) charge still gets a PostMPPR split recorded, and MedicareOPPSCapAdjustment downstream will see detail.PostMPPR set for it even though no visible adjustment occurred. // tcAmount is not derived from the charge's already-priced/adjusted detail.Amount; GetTCAmounts builds a brand-new CalculationDetail and re-runs the full base-calculation pipeline, so any prior adjustments on the original detail are invisible to the TC baseline. // MoneyMath.Multiply(decimal,double) uses banker's/ToEven rounding via double, not decimal AwayFromZero.

In the source

class · /home/cary/src/mdc/MdClarity/MDClarity/MDClarityCore/Backend/PricingEngine/Adjustments/MedicareMultipleOphthalmologyAdjustment.cs:7
calculator · /home/cary/src/mdc/MdClarity/MDClarity/MDClarityCore/Backend/PricingEngine/Adjustments/Calculators/MultipleOphthalmologyAdjustmentCalculator.cs
dispatch · /home/cary/src/mdc/MdClarity/MDClarity/MDClarityCore/Backend/CalculationEngine.cs:786

CONFIRMED - re-read MedicareMultipleOphthalmologyAdjustment.cs and MultipleOphthalmologyAdjustmentCalculator.cs in full, including GetTCAmounts and the dispatch case (CalculationEngine.cs:786-789). Draft's formula/category/level/citations were accurate; added gotchas (zero-unit, unconditional AddPostMPPRSplit, fresh-recompute TC baseline, rounding mode) the prior pass omitted.

Who uses it

ECP49