Skip to content

Quote Calculation Functions

Functions for calculating premiums, processing policy changes, and handling cancellations.


Premium Calculation

$CalculatePremiumAdditive

Calculates the final premium by applying all pricing matrix components additively. This is the core function that processes items, factors, discounts, and produces ledger entries.

Signature

$CalculatePremiumAdditive(quoteType)

Parameters

  • quoteType (string) - Type of quote: "NewBusiness", "Renewal", "Regular", "MTA"

Returns

  • Ledger object with all calculation entries

Environment Variables Used

  • PricingMatrix - Input pricing structure
  • Ledger - Output transaction ledger (cleared and rebuilt)
  • Output - Updated with final premium and monthly payments
  • ProductDetails - Product configuration
  • HasActiveFinanceAgreement - Finance status

Example

// Setup pricing matrix
$SetCurrencyToPricingMatrix("GBP");
$SetCommissionRateToPricingMatrix(0.15);
$SetIptRateToPricingMatrix(0.12);
$AddItemToPricingMatrix("Base Premium", 500.00, 1.0);
$AddFactorToPricingMatrix("Age Factor", 1.20, true, 0);

// Calculate final premium
$CalculatePremiumAdditive("NewBusiness");

// Access results
let finalPremium = PricingMatrix.Premium;
let monthlyPayment = Output.Monthly.MonthlyPayment;

$AddTaxDuty

Adds tax and duty charges to the quote calculation.

Signature

$AddTaxDuty(taxDutyConfig)

Parameters

  • taxDutyConfig (object) - Tax/duty configuration

Returns

  • Updated pricing matrix

Example

$AddTaxDuty({ rate: 0.05, description: "Stamp Duty" });
$CalculatePremiumAdditive("NewBusiness");

$CheckQuote

Validates and checks quote calculations for errors or warnings.

Signature

$CheckQuote()

Parameters

  • None

Returns

  • Validation result object

Example

let validation = $CheckQuote();
if (validation.HasErrors) {
    // Handle validation errors
}

Midterm Adjustments (MTA)

$CalculateMTAPremium

Calculates premium changes for mid-term adjustments. Handles pro-rata calculations, cooling-off periods, and adjustment differences.

Signature

$CalculateMTAPremium(mtaFee)

Parameters

  • mtaFee (number) - Admin fee for the MTA

Environment Variables Used

  • PricingMatrix - New pricing structure
  • PreviousMatricies - Array of previous pricing matrices
  • AdjustmentDifferencePricingMatrix - Output adjustment difference
  • Ledger - Output ledger entries
  • MTADate - Date of adjustment
  • Policy - Policy object with inception/expiry dates
  • MTAWaivePremium (optional) - If true, waives premium change

Returns

  • Ledger object with MTA calculations

Example

// Set MTA context
let MTADate = $ToDate("2024-06-15");
let MTAWaivePremium = false;

// Update pricing matrix with new values
$AddItemToPricingMatrix("Base Premium", 550.00, 1.0);  // Increased coverage

// Calculate MTA premium
$CalculateMTAPremium(25.00);  // £25 MTA fee

// Access adjustment premium
let additionalPremium = AdditionalPremium;  // Set by function
let adjustmentDifference = AdjustmentDifferencePricingMatrix.Premium;

$ValidateMTAChanges

Validates that MTA changes are allowed and within business rules.

Signature

$ValidateMTAChanges()

Parameters

  • None

Returns

  • Validation result object

Example

let validation = $ValidateMTAChanges();
if (!validation.IsValid) {
    $Referral(validation.Message);
}

$ValidateCameraMTA

Validates camera-specific MTA changes (domain-specific validation).

Signature

$ValidateCameraMTA()

Parameters

  • None

Returns

  • Validation result

Example

let isValid = $ValidateCameraMTA();
if (!isValid) {
    $Decline("Camera MTA validation failed");
}

$ValidateC4RMTA

Validates Cover4Rentals-specific MTA changes (domain-specific validation).

Signature

$ValidateC4RMTA()

Parameters

  • None

Returns

  • Validation result

Example

let isValid = $ValidateC4RMTA();

Cancellation Functions

$CalculateFullCancellation

Calculates a full refund cancellation (typically within cooling-off period).

Signature

$CalculateFullCancellation(cancellationFee, refundAdministrationFee)

Parameters

  • cancellationFee (number) - Cancellation fee amount
  • refundAdministrationFee (boolean, optional) - If true, refunds admin fees (default: true)

Environment Variables Used

  • Ledger - Output cancellation ledger (cleared and rebuilt)
  • MTALedgerHistory - Historical ledger entries
  • Cancellation - Cancellation object (updated with refund details)
  • FinanceDetails - Finance agreement details
  • CancellationReason - Reason for cancellation

Returns

  • Ledger object with cancellation entries

Example

// Full refund within cooling-off period
let CancellationReason = "Cooling Off Period";
$CalculateFullCancellation(0.00, true);  // No fee, refund admin fee

// Access refund
let refundAmount = Cancellation.RefundAmount;
let refundMessage = Cancellation.RefundMessage;

$CalculateProRataCancellation

Calculates a pro-rata refund based on time remaining on policy.

Signature

$CalculateProRataCancellation(cancellationFee, refundAdministrationFee)

Parameters

  • cancellationFee (number) - Cancellation fee amount
  • refundAdministrationFee (boolean, optional) - If true, refunds admin fees (default: true)

Environment Variables Used

  • Same as $CalculateFullCancellation
  • Policy - Policy dates for pro-rata calculation
  • CancellationDate - Date of cancellation

Returns

  • Ledger object with pro-rata cancellation entries

Example

// Pro-rata cancellation mid-policy
let CancellationDate = $ToDate("2024-09-01");
let CancellationReason = "Customer Request";

$CalculateProRataCancellation(25.00, false);  // £25 fee, no admin refund

// Refund is proportional to time remaining
let proRataRefund = Cancellation.RefundAmount;

$CalculateNoRefundCancellation

Processes a cancellation with no refund.

Signature

$CalculateNoRefundCancellation(cancellationFee)

Parameters

  • cancellationFee (number) - Cancellation fee amount (typically 0)

Environment Variables Used

  • Ledger - Output cancellation ledger
  • Cancellation - Updated with zero refund details
  • CancellationReason - Reason for cancellation

Returns

  • Ledger object

Example

// No refund scenario (e.g., after policy end)
let CancellationReason = "Policy Expired";
$CalculateNoRefundCancellation(0.00);

// Cancellation.RefundAmount will be 0

Helper Functions

$CalculateAge

Calculates age based on date of birth and reference date.

Signature

$CalculateAge(referenceDate, birthdate, timezone)

Parameters

  • referenceDate (date) - Date to calculate age at (typically today or inception date)
  • birthdate (date) - Date of birth
  • timezone (string, optional) - Timezone ID (e.g., "GMT Standard Time")

Returns

  • Age as number

Example

let inceptionDate = $ToDate("2024-03-15");
let dateOfBirth = $ToDate("1985-06-20");

let ageAtInception = $CalculateAge(inceptionDate, dateOfBirth);
// Returns: 38

// With timezone
let ageWithTz = $CalculateAge($Now(), dateOfBirth, "GMT Standard Time");

$CalculatePolicyDates

Calculates policy start and end dates based on business rules.

Signature

$CalculatePolicyDates(params...)

Parameters

  • Various parameters based on policy date calculation rules

Returns

  • Policy dates object with InceptionDate and ExpiryDate

Example

let policyDates = $CalculatePolicyDates(requestedStartDate, policyTerm);
let Policy = {
    InceptionDate: policyDates.InceptionDate,
    ExpiryDate: policyDates.ExpiryDate
};

Complete Workflow Examples

New Business Quote

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

// Calculate age-based premium
let age = $CalculateAge($Now(), customerDOB);
let basePremium = 400.00;

if (age < 25) {
    basePremium = 600.00;
} else if (age > 65) {
    basePremium = 550.00;
}

$AddItemToPricingMatrix("Base Premium", basePremium, 1.0);

// Apply no claims discount
if (yearsNoClaims >= 5) {
    $AddFactorToPricingMatrix("No Claims Discount", 0.80, true, 0);
}

// Calculate
$CalculatePremiumAdditive("NewBusiness");

let totalPremium = PricingMatrix.Premium;

Mid-Term Adjustment

// Customer adds coverage mid-policy
let MTADate = $Today();

// Update pricing matrix with new item
$AddItemToPricingMatrix("Additional Camera", 150.00, 1.0);

// Validate changes
let validation = $ValidateMTAChanges();
if (!validation.IsValid) {
    $Referral(validation.Message);
}

// Calculate adjustment premium
$CalculateMTAPremium(15.00);  // £15 MTA fee

let additionalCharge = AdditionalPremium;

Cancellation Within Cooling-Off

// Customer cancels within 14 days
let CancellationReason = "Cooling Off Period";
let CancellationDate = $ToDate("2024-03-20");

// Full refund
$CalculateFullCancellation(0.00, true);

let refund = Cancellation.RefundAmount;
let message = Cancellation.RefundMessage;
// Message: "A refund is due as the policy lies within the 14 day cooling off period."

Pro-Rata Cancellation

// Customer cancels mid-term
let CancellationDate = $ToDate("2024-09-15");
let CancellationReason = "Customer Request - No Longer Needed";

// Pro-rata refund with £25 cancellation fee
$CalculateProRataCancellation(25.00, false);

let proRataRefund = Cancellation.RefundAmount;
// Refund calculated based on days remaining / total days

Next Steps