Renewals

Socotra supports Renewals of arbitrary length. All policy and exposure details can be changed during renewal. Along with the extension of the policy, the policy itself, including its exposures and perils, can be changed much like in an endorsement.

See the Renewals API topic more details.

Note

Further important information about renewal lifecycle and pricing can be found in Policy Change Management.

Renewal Documents

You may configure any number of documents to be generated when a renewal is quoted or accepted. These templates have access to the same data available to other Document Templates, as well as data.renewal (see Data Object, below.)

Peril Handling on Renewal

When a policy is renewed, the perils that were active before the renewal are duplicated. This means that each peril object is contained within a single policy term. To associate perils across terms, use the renewalGroup property of the peril; it will remain the same from term to term.

Configuration

The file policy/renewals.json specifies one or more documents to be generated at the time of policy renewal. If this file is empty or doesn’t exist, no document will be generated during policy renewal.

Example renewals.json:

{
   "documents": [
     {
        "displayName": "Updated Policy Schedule",
        "fileName": "renewal_schedule.pdf",
        "templateName": "renewalSchedule.template.liquid",
        "generatingEvent": "accept"
     },
     {
        "displayName": "Renewal Email",
        "fileName": "renewal_email.html",
        "templateName": "renewalEmail.template.liquid",
        "type": "html",
        "generatingEvent": "quote"
     }
   ]
}

Notes

  • Renewals can be processed on any issued policies, even if the term is expired.

  • Any coverage active at the end of the policy is carried forward into the renewal term unless changed by the renewal.

  • The policy’s effectiveContractEndTimestamp will be advanced to match the end of the new renewal term.

  • The payment schedule for the renewal term will match that for the previous policy term, unless a new one is specified using the newPaymentScheduleName property of the renewal request.

  • See Policy Change Management for information about the generatingEvent property, which controls when documents are created for the renewal.

Note

Installment fees are not visible in the planned invoices set for renewals that have not yet been issued.

Policy Calculations

Fees will be charged during a renewal, and the configuration file policy.calculations.liquid should take this into account. Note that gross premium and similar values on the data.policy object are the totals across all coverage terms.

For more details, see Fees.

Example policy.calculations.liquid that charges different fees for a renewal:

{% assign policy_char = data.policy.characteristics[0] %}

{% unless data.renewal %}
  {{ policy_char.gross_premium | times: 0.03 | add_fee: "transaction", "3% Transaction fee" }}
  {{ 10 | add_fee: "underwriting", "Underwriting fee" }}
{% else %}
  {{ 100 | add_fee: "transaction", "$100 Renewal fee" }}
{% endunless %}

Data Object

Renewals add the following data object, which is available for document rendering or premium calculations.

Note

The policy_updates field is not available in the rating calculation context, but is available for document generation.

data.renewal: {
  locator: locator,
  display_id: string,
  start_timestamp: long,
  issued_timestamp: long,
  effective_contract_end_timestamp: RenewedTimeValue,
  policy_updates: {
    all_exposures: map<ExposureName, [RenewedExposure]>,
    updated_exposures: map<ExposureName, [RenewedExposure]>,
    all_field_values: map<FieldName, RenewedFieldValue>,
    updated_field_values: map<FieldName, RenewedFieldValue>,
    all_field_groups: map<FieldName, [RenewedFieldGroup]>,
    updated_field_groups: map<FieldName, [RenewedFieldGroup]>
  }
}

RenewalEffect: Supported Transaction Values are "unchanged", "added", "removed", or "updated"

RenewedTimeValue: {
  renewal_effect: RenewalEffect,
  old_value: string or [string],
  new_value: string or [string]
}

RenewedFieldValue: {
  title: string,
  renewal_effect: RenewalEffect,
  old_value: string or [string],
  new_value: string or [string]
}

RenewedFieldGroup: {
  locator: string,
  title: string,
  renewal_effect: RenewalEffect,
  all_field_values: map<FieldName, RenewedFieldValue>,
  updated_field_values:: map<FieldName, RenewedFieldValue>
}

RenewedExposure: {
  locator: locator,
  display_id: string,
  name: ExposureName,
  display_name: string,
  renewal_effect: RenewalEffect,
  all_perils: map<PerilName, [RenewedPeril]>,
  updated_perils: map<PerilName, [RenewedPeril]>,
  all_field_values: map<FieldName, RenewedFieldValue>,
  updated_field_values: map<FieldName, RenewedFieldValue>,
  all_field_groups: map<FieldName, [RenewedFieldGroup]>,
  updated_field_groups: map<FieldName, [RenewedFieldGroup]>
}

RenewedPeril: {
  locator: locator,
  display_id: string,
  name: PerilName,
  display_name: string,
  renewal_effect: RenewalEffect,
  all_field_values: map<FieldName, RenewedFieldValue>,
  updated_field_values: map<FieldName, RenewedFieldValue>,
  all_field_groups: map<FieldName, [RenewedFieldGroup]>,
  updated_field_groups: map<FieldName, [RenewedFieldGroup]>
}