Time Functions¶
Functions for calculating policy dates and time-based adjustments.
$CalculatePolicyDates¶
Calculates policy inception and expiry dates based on business rules and the QuotePublicData environment variable. This function reads quote information from the environment, calculates appropriate dates considering business rules, and updates both the environment variables and QuotePublicData with the results.
Signature
Parameters
- None (uses
QuotePublicDatafrom environment)
Returns
- null
Environment Variables Used
QuotePublicData- Input: Contains requested start date, policy term, and other quote details
Environment Variables Updated
InceptionDate- Calculated policy inception date (ISO 8601 format)ExpiryDate- Calculated policy expiry date (ISO 8601 format)PolicyDurationInDays- Number of days in the policy periodQuotePublicData- Updated with calculated dates
Example
// QuotePublicData must be initialized with quote details first
// (typically done by the quoting system)
// Calculate policy dates
$CalculatePolicyDates();
// Access the calculated dates
let inception = InceptionDate; // ISO 8601 format string
let expiry = ExpiryDate; // ISO 8601 format string
let duration = PolicyDurationInDays; // Number
// Dates are also available in QuotePublicData
let policyData = QuotePublicData;
$Log("Policy runs from: " + policyData.inceptionDate + " to " + policyData.expiryDate);
Policy Date Business Rules¶
The $CalculatePolicyDates function uses strategies based on your product configuration to handle:
1. Start Date Validation¶
- Ensures start date is not in the past (beyond grace period)
- May enforce minimum future date (e.g., next day minimum)
- Handles same-day inception if allowed
// The function automatically handles date validation
// based on the requested date in QuotePublicData
$CalculatePolicyDates();
// Dates are validated and adjusted according to business rules
let inception = $ToDate(InceptionDate);
2. Expiry Date Calculation¶
- Adds policy term to inception date
- May adjust to end of day (23:59:59)
- Handles leap years and month-end dates
// For a 12-month policy starting 2024-03-15
$CalculatePolicyDates();
// InceptionDate: 2024-03-15T00:00:00Z
// ExpiryDate: 2025-03-14T23:59:59Z
// PolicyDurationInDays: 365
3. Renewal Alignment¶
- May align expiry to standard renewal dates
- Handles pro-rata adjustments for non-standard terms
Working with Policy Dates¶
Calculating Policy Duration¶
// Calculate policy dates first
$CalculatePolicyDates();
// Duration is automatically available
let daysInPolicy = PolicyDurationInDays;
// Or calculate manually from dates
let inception = $ToDate(InceptionDate);
let expiry = $ToDate(ExpiryDate);
let calculatedDays = $DifferenceInDays(expiry, inception);
Pro-Rata Calculations¶
For mid-term adjustments, calculate remaining time:
// Policy dates must be calculated first
$CalculatePolicyDates();
let policyInception = $ToDate(InceptionDate);
let policyExpiry = $ToDate(ExpiryDate);
let MTADate = $Today();
let daysRemaining = $DifferenceInDays(policyExpiry, MTADate);
let daysCovered = $DifferenceInDays(MTADate, policyInception);
let totalDays = PolicyDurationInDays;
let proRataFactor = daysRemaining / totalDays;
// Apply pro-rata to premium changes
let adjustedPremium = premiumChange * proRataFactor;
Age at Inception¶
Calculate customer age at policy start:
// Calculate policy dates
$CalculatePolicyDates();
let policyStart = $ToDate(InceptionDate);
let ageAtInception = $CalculateAge(policyStart, customerDOB);
// Use age for rating
if (ageAtInception < 25) {
$AddFactorToPricingMatrix("Young Driver", 1.50, true, 0);
}
Integration with Quote Calculations¶
// Complete new business flow with policy dates
fn ProcessNewBusiness() {
// QuotePublicData should already contain quote details
// Calculate policy dates from QuotePublicData
$CalculatePolicyDates();
// Access calculated dates
let inception = $ToDate(InceptionDate);
let expiry = $ToDate(ExpiryDate);
let duration = PolicyDurationInDays;
// Calculate age at inception
let ageAtInception = $CalculateAge(inception, Customer.DateOfBirth);
// Build pricing based on inception date
$SetCurrencyToPricingMatrix("GBP");
// Age-based pricing
let basePremium = 400.00;
if (ageAtInception < 25) {
basePremium = 600.00;
} else if (ageAtInception > 70) {
basePremium = 550.00;
}
$AddItemToPricingMatrix("Base Premium", basePremium, 1.0);
// Calculate premium
$CalculatePremiumAdditive("NewBusiness");
return {
InceptionDate: inception,
ExpiryDate: expiry,
Duration: duration,
Premium: PricingMatrix.Premium,
AgeAtInception: ageAtInception
};
}
let quote = ProcessNewBusiness();
Renewal Date Calculations¶
// Calculate renewal date (day before expiry + 1 year)
fn CalculateRenewalDates() {
// Current policy dates
let currentExpiry = $ToDate(ExpiryDate);
let renewalInception = $AddDays(currentExpiry, 1);
let renewalExpiry = $AddYears(renewalInception, 1);
renewalExpiry = $AddDays(renewalExpiry, -1); // Day before
return {
InceptionDate: renewalInception,
ExpiryDate: renewalExpiry
};
}
// Use for renewal quotes
let renewalDates = CalculateRenewalDates();
MTA Date Validation¶
// Validate MTA date is within policy period
fn ValidateMTADate(mtaDate) {
let inception = $ToDate(InceptionDate);
let expiry = $ToDate(ExpiryDate);
if (mtaDate < inception) {
return {
IsValid: false,
Message: "MTA date cannot be before policy inception"
};
}
if (mtaDate > expiry) {
return {
IsValid: false,
Message: "MTA date cannot be after policy expiry"
};
}
return { IsValid: true };
}
// Use in MTA workflow
$CalculatePolicyDates(); // Ensure dates are calculated
let MTADate = $ToDate(userInput.MTADate);
let validation = ValidateMTADate(MTADate);
if (!validation.IsValid) {
$Referral("MTA-DATE", validation.Message, "UnderwriterAuthority");
} else {
$CalculateMTAPremium(15.00);
}
Cooling-Off Period¶
// Check if cancellation is within cooling-off period
fn IsWithinCoolingOff(cancellationDate) {
let inception = $ToDate(InceptionDate);
let daysSinceInception = $DifferenceInDays(cancellationDate, inception);
return daysSinceInception <= 14; // 14-day cooling-off
}
// Use for cancellation
$CalculatePolicyDates(); // Ensure dates are available
let CancellationDate = $Today();
let withinCoolingOff = IsWithinCoolingOff(CancellationDate);
if (withinCoolingOff) {
$CalculateFullCancellation(0.00, true); // Full refund
} else {
$CalculateProRataCancellation(25.00, false); // Pro-rata with fee
}
Best Practices¶
1. Calculate Dates Early¶
// Calculate policy dates at the start of your quote flow
$CalculatePolicyDates();
// Dates are now available throughout the script
let inception = $ToDate(InceptionDate);
let expiry = $ToDate(ExpiryDate);
2. Access Dates from Environment¶
// After calculating policy dates, access them from environment variables
$CalculatePolicyDates();
let inception = InceptionDate; // ISO 8601 string
let expiry = ExpiryDate; // ISO 8601 string
let duration = PolicyDurationInDays; // Number
// Or from QuotePublicData
let quoteData = QuotePublicData;
let formattedInception = quoteData.inceptionDateFormatted;
3. Convert to Date Objects for Calculations¶
// Environment variables contain ISO 8601 strings
// Convert to Date objects for date arithmetic
let inceptionDate = $ToDate(InceptionDate);
let expiryDate = $ToDate(ExpiryDate);
// Now you can perform date calculations
let daysBetween = $DifferenceInDays(expiryDate, inceptionDate);
4. Handle Time Zones via QuotePublicData¶
// QuotePublicData contains timezone information
let quoteData = QuotePublicData;
let timeZone = quoteData.timeZoneId;
// Use timezone-aware age calculations when needed
let inceptionDate = $ToDate(InceptionDate);
let ageAtInception = $CalculateAge(
inceptionDate,
Customer.DateOfBirth,
timeZone
);
Environment Variables¶
| Variable | Type | Description |
|---|---|---|
QuotePublicData (input) |
Object | Contains quote details including dates |
InceptionDate (output) |
String | Calculated inception date (ISO 8601) |
ExpiryDate (output) |
String | Calculated expiry date (ISO 8601) |
PolicyDurationInDays |
Number | Number of days in policy period |
QuotePublicData (output) |
Object | Updated with calculated dates and formatting |
Next Steps¶
- Quote Calculation Functions - Use policy dates in calculations
- Examples - See policy dates in MTA workflow