The typed rules
Every calculation is one of 45 enum values, split into base (what is the amount) andadjustment (how is it modified). What separates them for migration purposes is not what they compute but what data they need to compute it.
37 of 45 types appear in a real customer's configuration.
| Type | Category | Level | Uses | Customers | What it does |
|---|---|---|---|---|---|
| ModifierAdjustment | Adjustment | Charge | 14,981 | 28 | Rescales a charge's already-calculated allowed amount to Percentage% of its current value whenever a specified modifier code is present on that charge. |
| PercentOfFees | Base | Charge | 2,425 | 32 | Looks up a per-unit dollar fee for the charge's code in a fee schedule, multiplies by the charge's units, then applies a RuleMultipliers-or-Percentage multiplier to produce the base allowed amount. |
| LesserOfAdjustment | Adjustment | Varies (configurable) | 1,415 | 30 | Caps the allowed amount to a percentage of billed charges: optionally at each individual charge line (when AdjustCharges is set), and always at the account level across the whole account's total. |
| MedicareMultipleProcedureAdjustment | Adjustment | Charge | 1,151 | 22 | Reduces payment on charges whose Medicare rollup code (from MedicareDataRVU.MultiProcedureCategoryCode, keyed by procedure code + TC/26 modifier) is in BaseCodes (default "2") by ranking them and paying each successive ranked unit at a configured percentage of its per-unit amount, per Medicare Claims Processing Manual Ch.12 40.6; with UseAdditionalBilateralRules/MultiEndoscopyRules/MultiRadRules all defaulted true, charges that already carry a bilateral/multi-endoscopy/multi-radiology adjustment share a single rank position with their LT/RT, base-code, or TC/26 counterpart instead of getting their own. |
| MedicareMultipleRadiologyAdjustment | Adjustment | Charge | 1,002 | 22 | Implements the CMS Multiple Procedure Payment Reduction (MPPR) for diagnostic imaging: splits each affected charge into Technical (TC) and Professional (26) components (both, for an unmodified/global charge), independently re-prices each component through the fee-schedule engine, ranks each component list separately by allowed/charged amount, and reduces each component by (1 - configured percentage) based on its own rank. |
| MidLevelProviderAdjustment | Adjustment | Charge | 967 | 22 | For charges billed by a non-physician practitioner (mid-level provider), sets the allowed amount to the lesser of a percentage of the current fee-schedule (already-priced) amount and a percentage of actual charges, per NUCC taxonomy classification. |
| MedicareMultipleEndoscopyAdjustment | Adjustment | Charge | 945 | 22 | Implements Medicare's special multiple-endoscopy rule (Ch.12 40.6.C.13): within each base-endoscopy-code family (grouped purely by rollup/schedule membership, not by any configurable code list), the single highest-per-unit-ranked charge in the family has one unit priced in full and every other unit in the family is priced at the differential between its own price and a synthesized 'base/parent' endoscopy procedure's price. |
| MedicareRVU | Base | Charge | 880 | 26 | Computes a per-unit Medicare RVU price via SQL (Work/PE/MP RVU x GPCI, budget-neutrality-adjusted, x conversion factor), then the shared ChargeLevelSqlCalculator multiplies that per-unit amount by the charge's Units and applies Percentage/RuleMultipliers before storing it as the base allowed amount. |
| FlatPercentOfCharges | Base | Varies (configurable) | 732 | 27 | Applies a flat percentage (with optional rule-based multiplier overrides) directly to charges' billed amounts, with no fee schedule lookup; the account-level total is always computed from the account's own AmountCharged when Level==Account, while the per-charge loop only controls whether individual charge lines get zeroed (Account) or independently priced (Charge). |
| FlatFee | Base | Varies (configurable) | 701 | 16 | Applies a fixed configured dollar Amount to qualifying charges only, either once (redundantly, per qualifying charge) at the account level plus zeroing those charges, or independently to every qualifying charge — with no fee schedule and no percentage logic. |
| ChargeLevelSqlAdjustment | Adjustment | Charge | 628 | 17 | Runs an admin-authored raw SQL query per non-ignored charge and, when the query returns a non-null scalar, adjusts that charge's allowed amount to the returned value; a NULL or empty result silently leaves the charge unchanged (no exception, unlike its account-level sibling). |
| MedicareDrug | Base | Charge | 609 | 24 | Looks up the national Medicare ASP drug fee limit for a charge's procedure code by date only -- no state, modifier, facility, insurance, or bill-type filtering despite those parameters being bound to the query -- then rescales by RuleMultipliers or Percentage/100. |
| SqlExpression | Base | Varies (configurable) | 561 | 22 | Runs an admin-authored raw SQL query, with brace-delimited placeholders substituted from the context, against the customer database and sets the resulting scalar as the base allowed amount, either once per non-ignored charge or once for account totals depending on Level. |
| MedicareBilateralSurgeryAdjustment | Adjustment | Charge | 542 | 14 | Applies Medicare's bilateral-surgery payment adjustment via the shared generic BilateralSurgeryV2AdjustmentCalculator<T>: a charge with modifier 50, or the first-encountered line of a same-procedure-code RT/LT pair, is scaled to a percentage of its allowed amount keyed off the procedure's bilateral-surgery rollup indicator (default 150% for indicators 0/1/2, 200% for indicator 3); the second-encountered line of an RT/LT pair is zeroed and its billed (charged) amount is folded into the first line — but only if that second line's allowed amount was nonzero before this adjustment ran. |
| MedicareLab | Base | Charge | 489 | 24 | Looks up a Medicare clinical lab fee for a charge's HCPCS code, branching on service date at 2018-01-01 between a national post-2018 table and a state-keyed legacy table, then rescales by RuleMultipliers or Percentage/100. |
| MedicareDME | Base | Charge | 448 | 24 | Looks up a per-unit Medicare DME fee for the charge's procedure code (state- and modifier-specific, with a national wildcard fallback) via SQL, multiplies by units, then rescales by a RuleMultipliers match or Percentage/100. |
| MultipleProcedureAdjustment | Adjustment | Charge | 303 | 13 | Reduces the allowed amount of charges whose fee-schedule rollup code is in a configured BaseCodes list, applying a rank-ordered percentage-per-unit schedule across the affected charges, with optional interaction rules that share an adjustment-index slot with charges already touched by a bilateral, multi-endoscopy, or multi-radiology adjustment. |
| MedicareMultipleTherapyAdjustment | Adjustment | Charge | 177 | 8 | 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. |
| CalculationBuilder | Base | Derived | 172 | 11 | Composes a user-defined ordered list of other Calculation objects and CalculationOperator tokens (arithmetic operators and parentheses) into a per-charge algebraic expression, evaluated numerically and multiplied by the charge's real units to produce the base amount. |
| MedicareAnesthesia | Base | Charge | 162 | 12 | Computes the Medicare anesthesia allowed amount via SQL as (base units for the procedure code + time units derived from billed units/minutes, rounded per configuration + a physical-status P1-P6 modifier unit value) times a locality-resolved conversion factor; unlike MedicareRVU/MedicareASC, the shared ChargeLevelSqlCalculator does NOT re-multiply this result by charge.Units, because Units are already folded into TimeUnits before the SQL runs. |
| MedicareASC | Base | Charge | 152 | 13 | Computes a per-unit Medicare Ambulatory Surgical Center price via SQL (wage-adjusting 50% of the national ASC payment using a CBSA wage index resolved through a fallback chain, with special handling for non-wage-adjusted or non-covered payment indicators), then the same shared ChargeLevelSqlCalculator multiplies by the charge's Units and applies Percentage/RuleMultipliers before storing it as the base allowed amount. |
| MultipleEndoscopyAdjustment | Adjustment | Charge | 91 | 7 | Implements the CMS multiple-endoscopy base-procedure rule: for each family of charges sharing the same schedule rollup base code, the top-ranked unit is paid in full and every other unit in the family is reduced by a freshly re-priced 'base procedure' amount. |
| PercentageAdjustment | Adjustment | Charge | 88 | 7 | Rescales each charge's allowed amount to a percentage looked up per-code from a named fee schedule, rather than a single configured percentage. |
| MultipleSurgeryAdjustment | Adjustment | Charge | 76 | 6 | Reduces the allowed amount of surgical charges whose schedule rollup equals a fixed qualifying code ("T" in the base class, "Y" in the Medicare subclass), applying a rank-ordered percentage schedule per unit across all affected charges combined. |
| CaseRate | Base | Account | 62 | 5 | Sets the base allowed amount for a single selected charge in the account from a case-rate fee schedule (flat CaseRate plus capped per-diem overage), then zeroes out every other charge's base amount so the whole account's allowed amount is carried on that one charge. |
| FlatPercentageAdjustment | Adjustment | Varies (configurable) | 61 | 3 | Rescales the allowed amount to a fixed configured Percentage of its current value, applied either per-charge or once at the account (total) level depending on Level. |
| MedicareMultipleOphthalmologyAdjustment | Adjustment | Charge | 51 | 2 | 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. |
| MedicareMultipleSurgeryAdjustment | Adjustment | Charge | 49 | 4 | Applies Medicare's standard multiple-surgery reduction: ranks charges whose ASC-data rollup (MedicareDataASC.MultipleProcedureDiscount, matched by bare procedure code) equals the qualifying code ("Y" for the Medicare variant, base class default "T") and pays each successive ranked unit at a configured percentage of its per-unit amount. |
| PercentOfCharges | Base | Charge | 44 | 12 | Looks up a percentage value (not a dollar fee) for the charge's code in a fee schedule and applies it directly to the charge's own billed amount. |
| ExcludedChargeAdjustment | Adjustment | Charge | 38 | 5 | Zeroes out a charge line's allowed amount when that charge's code is listed, in a configured code-exclusion schedule, as excluded due to the presence of another matching charge code anywhere on the account -- including, due to a missing self-exclusion guard, the very charge being evaluated. |
| MultipleRadiologyAdjustment | Adjustment | Charge | 16 | 2 | Implements the CMS Multiple Procedure Payment Reduction (MPPR) for diagnostic imaging: qualifying charges are split per-unit into Technical (TC) and/or Professional (26) synthetic components, each component family is independently re-priced and ranked, and a rank-based percentage schedule reduces all but the top-ranked component in each family. |
| BilateralSurgeryV2Adjustment | Adjustment | Charge | 15 | 1 | Configurable bilateral-surgery adjustment: finds charges whose schedule-type rollup indicator has a configured percentage multiplier, confirms bilaterality either via a modifier-50 code or via matching left/right (LT/RT) modifier pairs on the same procedure code, then scales each affected charge's already-computed allowed amount by the configured percentage; the LT/RT partner charge is zeroed and its AmountCharged folded onto the primary. |
| MedicareOPPSCapAdjustment | Adjustment | Charge | 10 | 1 | Caps the Medicare technical-component (TC) allowed amount at the comparable OPPS ceiling: for MedicareRVU-priced charges with a positive OPPS candidate rate that are not professional-component-only and don't carry both TC and 26 modifiers, computes a post-MPPR TC amount (from an existing detail.PostMPPR split if an earlier ophthalmology/radiology MPPR step wrote one, otherwise from detail.Amount for TC-modifier charges or from a freshly computed technical/professional component split for charges with neither TC nor 26 modifier), and reduces the charge's total allowed amount by the excess of that TC amount over the OPPS ceiling (never below zero); the professional component, if already split out, is preserved untouched. |
| MultiplePhysiotherapyAdjustment | Adjustment | Charge | 4 | 1 | For physical-therapy charges identified by a fee schedule, the single highest per-unit-ranked unit across all affected charges is left at its own computed amount and every other unit is replaced by a flat schedule Amount; the recomputed total is applied only if it is lower than the charge's current allowed amount (a decrease-only gate, not a per-unit cap). |
| NotToExceedAmountAdjustment | Adjustment | Account | 3 | 2 | Caps the total allowed amount for the account at a fixed dollar amount, reducing the account-level allowed amount if the sum of all charge-level allowed amounts (plus the current account-level amount) exceeds that cap. |
| BCBSMultipleTherapyAdjustment | Adjustment | Charge | 1 | 1 | Applies a stepped-percentage multiple-therapy reduction (BCBS variant of Medicare's multiple-procedure-payment-reduction logic) to charges flagged by a multiple-procedure schedule as belonging to a configured base rollup code: recomputes each affected charge's Medicare RVU practice-expense (PE) component in a throwaway RVU pass, applies the configured per-unit percentage sequence to that PE component, converts the result into an equivalent percentage of the charge's already-priced base allowed amount, and adjusts the charge to that recomputed amount. |
| BilateralSurgeryAdjustment | Adjustment | Charge | 1 | 1 | Legacy (non-Medicare) bilateral-surgery adjustment: for each distinct affected procedure code, prices one unit of that code by re-running the full base-calculation chain (not a flat fee-schedule lookup), applies a 1.5x multiplier when the code's schedule rollup indicator is "1", caps the result at the total charged amount across all lines carrying that code (account-level pseudo-charge included), then walks the charges in AmountAllowed order allocating the capped amount across them. |
8 types appear nowhere. MedicareSequestrationAdjustment is absentby design — it is applied out of band. IncreaseChargesAdjustment is worse: it has no dispatch arm at all, so selecting it throws.
Gating
Every calculation carries both a Filters collection and aCriteria collection. Both decide whether it applies; both are populated; they are ANDed together. Nothing in the UI suggests there are two.
3,365 in production across70 property types. A triple of (property type, value, polarity)where the property type is a free string key into a customer-configured table — not an enum.
| Property type | Uses | Customers |
|---|---|---|
| Modifier | 949 | 13 |
| ProcedureCode | 322 | 10 |
| NoncoverageStatus | 295 | 6 |
| ChargeCoverage | 169 | 2 |
| ProviderType | 159 | 6 |
| NonValidProcedureCode | 137 | 1 |
| CPTCategory | 137 | 2 |
| PlaceOfService | 110 | 6 |
| RevenueCode | 73 | 2 |
| CPTCategories | 66 | 2 |
| PlaceOfServiceCategory | 64 | 1 |
| AvMedSpecialtyCategory | 64 | 1 |
| POS | 62 | 1 |
| Mid-Level-Providers | 54 | 1 |
707 in production, added March 2025. Concrete rule classes pinned to a dimension or a typed range, evaluated withIn / NotIn / Between.
| Rule type | Uses | Members |
|---|---|---|
| FacilityTypeMultiplier | 343 | 689 |
| CodeRangeMultiplier | 252 | — |
| FacilityMultiplier | 42 | 116 |
| ProviderTypeMultiplier | 34 | 210 |
| FacilityStateMultiplier | 14 | 14 |
| ProcedureCategoryMultiplier | 9 | 9 |
| FacilityGroupMultiplier | 8 | 10 |
| PropertyTypeRule | 5 | 5 |
Parity gap
The replacement service implements Criteria only. A search of its source for the filter vocabulary — property types, polarity — returns nothing, and its fee-logic validator checks criteria and multiplier rules exclusively. All 3,365 filters currently have no expressible equivalent. This is not a naming difference.