Skip to content

Midterm Adjustments (MTA)

How to calculate premium adjustments when a customer changes their policy mid-term.


Scenario

Customer wants to add coverage mid-policy:

  • Original Policy: Home Contents, £566.59 annual premium
  • Policy Start: 2024-01-15
  • MTA Date: 2024-06-20 (157 days into 365-day policy)
  • Change: Adding accidental damage cover (£75 additional premium)
  • MTA Fee: £15

Complete MTA Script

// Set MTA context
let MTADate = $ToDate("2024-06-20");
let MTALedgerHistory = Ledger;  // Save original ledger

// Rebuild pricing matrix with new item
$SetCurrencyToPricingMatrix("GBP");
$SetCommissionRateToPricingMatrix(0.15);
$SetIptRateToPricingMatrix(0.12);

// Original items
$AddItemToPricingMatrix("Contents Cover", 450.00, 1.0);
$AddFactorToPricingMatrix("No Claims Discount", 0.90, true, 0);

// NEW: Accidental Damage Cover
$AddItemToPricingMatrix("Accidental Damage", 75.00, 1.0);

$SetFeeToPricingMatrix(25.00);

// Calculate MTA with pro-rata adjustment
$CalculateMTAPremium(15.00);  // £15 MTA fee

// Access adjustment premium
let additionalCharge = AdditionalPremium;

$Log("Additional Premium Due: £" + $ToString(additionalCharge));

How MTA Calculation Works

1. Pro-Rata Factor Calculation

Days remaining in policy: 365 - 157 = 208 days
Pro-rata factor: 208 / 365 = 0.5699 (57%)

2. Full Year Premium Comparison

Original Annual Premium:

Contents Cover: £450.00
No Claims Discount (10%): × 0.90 = £405.00
Commission + IPT: £533.65
Fee: £32.94
Total: £566.59

New Annual Premium:

Contents Cover: £450.00
Accidental Damage: £75.00
No Claims Discount (10%): × 0.90 = £472.50
Commission + IPT: £622.07
Fee: £32.94
Total: £655.01

Annual Difference: £655.01 - £566.59 = £88.42

3. Pro-Rata Adjustment

Pro-rata additional premium: £88.42 × 0.5699 = £50.37
MTA Fee: £15.00
Total Additional Charge: £50.37 + £15.00 = £65.37

Step-by-Step MTA Process

Step 1: Save Original State

// Before making changes, preserve original ledger
let MTALedgerHistory = Ledger;
let OriginalPremium = PricingMatrix.Premium;

Step 2: Set MTA Date

// MTA effective date
let MTADate = $ToDate("2024-06-20");

// Validate MTA date
if (MTADate < Policy.InceptionDate || MTADate > Policy.ExpiryDate) {
    $Referral("MTA date outside policy period");
}

Step 3: Rebuild Pricing Matrix

Reconstruct the entire pricing matrix with changes:

$SetCurrencyToPricingMatrix("GBP");
$SetCommissionRateToPricingMatrix(0.15);
$SetIptRateToPricingMatrix(0.12);

// Include ALL items (original + new)
$AddItemToPricingMatrix("Contents Cover", 450.00, 1.0);
$AddItemToPricingMatrix("Accidental Damage", 75.00, 1.0);  // NEW

// Include ALL factors/discounts
$AddFactorToPricingMatrix("No Claims Discount", 0.90, true, 0);

$SetFeeToPricingMatrix(25.00);

Step 4: Calculate MTA Premium

$CalculateMTAPremium(15.00);  // MTA admin fee

// Results populated automatically:
// - AdditionalPremium (environment variable)
// - AdjustmentDifferencePricingMatrix
// - Ledger (contains pro-rata entries)

Step 5: Present to Customer

let additionalCharge = AdditionalPremium;

let mtaResult = {
    EffectiveDate: MTADate,
    OriginalAnnualPremium: OriginalPremium,
    NewAnnualPremium: PricingMatrix.Premium,
    ProRataAdjustment: additionalCharge - 15.00,  // Exclude fee
    MTAFee: 15.00,
    TotalAdditionalCharge: additionalCharge
};

$Log("MTA Summary", mtaResult);

Common MTA Scenarios

Adding Coverage

// Customer adds bicycle cover
let MTADate = $Today();
let MTALedgerHistory = Ledger;

// Rebuild matrix with addition
$SetCurrencyToPricingMatrix("GBP");
$SetCommissionRateToPricingMatrix(0.15);
$SetIptRateToPricingMatrix(0.12);

// Existing + new
$AddItemToPricingMatrix("Contents Cover", 450.00, 1.0);
$AddItemToPricingMatrix("Bicycle Cover", 60.00, 1.0);  // NEW

$AddFactorToPricingMatrix("No Claims Discount", 0.90, true, 0);
$SetFeeToPricingMatrix(25.00);

$CalculateMTAPremium(15.00);

// Customer pays AdditionalPremium

Removing Coverage

// Customer removes legal expenses
let MTADate = $Today();
let MTALedgerHistory = Ledger;

// Rebuild WITHOUT removed item
$SetCurrencyToPricingMatrix("GBP");
$SetCommissionRateToPricingMatrix(0.15);
$SetIptRateToPricingMatrix(0.12);

$AddItemToPricingMatrix("Contents Cover", 450.00, 1.0);
// Legal Expenses REMOVED (was previously included)

$AddFactorToPricingMatrix("No Claims Discount", 0.90, true, 0);
$SetFeeToPricingMatrix(25.00);

$CalculateMTAPremium(15.00);

// AdditionalPremium may be negative (refund) or just the fee
// depending on pro-rata calculation

Increasing Sum Insured

// Customer increases contents value
let MTADate = $Today();
let MTALedgerHistory = Ledger;

// Increased premium for higher sum insured
let newBasePremium = 550.00;  // Was 450.00

$SetCurrencyToPricingMatrix("GBP");
$SetCommissionRateToPricingMatrix(0.15);
$SetIptRateToPricingMatrix(0.12);

$AddItemToPricingMatrix("Contents Cover", newBasePremium, 1.0);  // INCREASED
$AddFactorToPricingMatrix("No Claims Discount", 0.90, true, 0);
$SetFeeToPricingMatrix(25.00);

$CalculateMTAPremium(15.00);

let increase = AdditionalPremium;

MTA Validation

// Validate MTA changes before calculation
fn ValidateMTARequest(mtaDate, changes) {
    // Date validation
    if (mtaDate < Policy.InceptionDate) {
        return { IsValid: false, Message: "MTA date before inception" };
    }

    if (mtaDate > Policy.ExpiryDate) {
        return { IsValid: false, Message: "MTA date after expiry" };
    }

    // Cooling-off period check
    let daysSinceInception = $DifferenceInDays(mtaDate, Policy.InceptionDate);
    if (daysSinceInception <= 14) {
        return {
            IsValid: false,
            Message: "Cannot MTA within cooling-off period - cancel and re-quote instead"
        };
    }

    // Business rules validation
    if (changes.RemovingAllCover) {
        return { IsValid: false, Message: "Cannot remove all coverage - use cancellation" };
    }

    return { IsValid: true };
}

// Use validation
let validation = ValidateMTARequest(MTADate, proposedChanges);
if (!validation.IsValid) {
    $Referral(validation.Message);
} else {
    $CalculateMTAPremium(15.00);
}

Waiving MTA Premium

Some business rules may waive the premium change:

// Set waive flag before calculation
let MTAWaivePremium = true;  // Environment variable

$CalculateMTAPremium(0.00);  // Fee also waived

// Ledger will show "MTA Premium Waived" entry
// AdditionalPremium = 0

Complete MTA Workflow

// Complete MTA function
fn ProcessMTA(mtaDate, changes) {
    // Save original state
    let MTADate = mtaDate;
    let MTALedgerHistory = Ledger;
    let OriginalPremium = PricingMatrix.Premium;

    // Validate
    let validation = ValidateMTARequest(mtaDate, changes);
    if (!validation.IsValid) {
        return { Success: false, Message: validation.Message };
    }

    // Run product-specific MTA validation
    let productValidation = $ValidateMTAChanges();
    if (!productValidation.IsValid) {
        return { Success: false, Message: productValidation.Message };
    }

    // Rebuild pricing matrix with changes
    $SetCurrencyToPricingMatrix("GBP");
    $SetCommissionRateToPricingMatrix(0.15);
    $SetIptRateToPricingMatrix(0.12);

    // Apply all items (original + modified + new)
    for (let item in changes.Items) {
        $AddItemToPricingMatrix(item.Name, item.Amount, item.Quantity);
    }

    // Apply factors
    for (let factor in changes.Factors) {
        $AddFactorToPricingMatrix(factor.Name, factor.Rate, factor.Accumulative, 0);
    }

    $SetFeeToPricingMatrix(25.00);

    // Calculate
    $CalculateMTAPremium(changes.MTAFee);

    // Return result
    return {
        Success: true,
        OriginalPremium: OriginalPremium,
        NewPremium: PricingMatrix.Premium,
        AdditionalCharge: AdditionalPremium,
        Ledger: Ledger
    };
}

// Execute MTA
let mtaResult = ProcessMTA($Today(), {
    MTAFee: 15.00,
    Items: [
        { Name: "Contents Cover", Amount: 450.00, Quantity: 1.0 },
        { Name: "Accidental Damage", Amount: 75.00, Quantity: 1.0 }
    ],
    Factors: [
        { Name: "No Claims Discount", Rate: 0.90, Accumulative: true }
    ]
});

if (mtaResult.Success) {
    $Log("MTA successful - additional charge: £" + $ToString(mtaResult.AdditionalCharge));
} else {
    $Log("MTA failed: " + mtaResult.Message);
}

Next Steps