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 for information about how to implement this feature.

Note

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

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.

  • The effectiveContractEndTimestamp of the policy will be moved to match the end of the renewal term.

  • The billing plan for the renewal term will match that for the previous policy term.

  • One or more documents can be generated for each renewal. See configuration, below.

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 transaction.

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"
     }
   ]
}

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 %}

Renewal Documents

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

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, list<RenewedExposure>>,
    "updated_exposures": map<ExposureName, list<RenewedExposure>,
    "all_field_values": map<FieldName, RenewedFieldValue>,
    "updated_field_values": map<FieldName, RenewedFieldValue>,
    "all_field_groups": map<FieldName, list<RenewedFieldGroup>>,
    "updated_field_groups": map<FieldName, list<RenewedFieldGroup>>
  }
}

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

RenewedTimeValue: {
  "renewal_effect": RenewalEffect,
  "old_value": string or list<string>,
  "new_value": string or list<string>
}

RenewedFieldValue: {
  "title": string,
  "renewal_effect": RenewalEffect,
  "old_value": string or list<string>,
  "new_value": string or list<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, list<RenewedPeril>,
  "updated_perils": map<PerilName, list<RenewedPeril>,
  "all_field_values": map<FieldName, RenewedFieldValue>,
  "updated_field_values": map<FieldName, RenewedFieldValue>,
  "all_field_groups": map<FieldName, list<RenewedFieldGroup>>,
  "updated_field_groups": map<FieldName, list<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, list<RenewedFieldGroup>>,
  "updated_field_groups": map<FieldName, list<RenewedFieldGroup>>
}