Working with underwriting issues

The Job API provides endpoints that can be used to get, create, approve, reject, or reopen underwriting issues associated with a job. The Policy API provides endpoints that can be used to get underwriting issues associated with a policy.

Underwriting-related endpoints are typically available to callers whose roles pertain to an insurance underwriter or the producer associated with the target policy or job. The insurance underwriter roles includes such functions as underwriter, underwriter supervisor, and underwriter assistant.

For general guidance on underwriting processes and configuration in PolicyCenter, see Configuration Guide.

Underwriting issue resources

In the system APIs, a PolicyCenter underwriting issue is formatted as a UWIssue resource. This resource maps to the UWIssue entity.

An underwriting issue resource has the following basic properties:

  • active: Is the underwriting issue active? (Boolean)
  • hasApprovalOrRejection: Has the issue been approved or rejected? (Boolean)
  • id: The resource ID, as a string
  • issueKey: A synonym for resource ID, as a string
  • issueType.code: The code for the underwriting issue type, from a UWIssue.IssueType.Code property
  • issueType.displayName: The name of the underwriting issue type as it appears in PolicyCenter, from a UWIssueType.IssueType.Name property
Note:

In PolicyCenter, users with administrator or superuser privileges can access underwriting issue types and their associated data. From Administration > Export Data > Export Administrative Data select Underwriter Issue Types, and then click Export. This action returns an XML file that contains an array of <UWissueType> elements, each of which has a child <Code> element that maps to an underwriting issue resource issueType.code property.

Issue value types

In PolicyCenter, an underwriting issue is often associated with an issue value type and an acceptable range, as defined by the backing UWIssue entity. For example, an underwriting issue could be triggered on a personal auto line when coverage is requested for a driver who is under the age of 25. In this case, the underwriting issue value type is an age (an integer-based value), and the triggering range is a value below 25.

An underwriting issue resource supports properties associated with issue value types. The value type property used with a particular resource is determined by the required value type of the associated UWIssue entity.

Possible issue value types are integer, decimal, monetary amount, or states set, which can be declared using the following resource properties:

  • integerValue: An integer value, passed as a string
  • decimalValue: A decimal value, passed as a string
  • moneyValue: A MonetaryAmount resource, containing currency and amount properties that specify the appropriate currency and amount
  • setStateValue: An ExclusiveStateSet resource, containing the inclusionType and states properties

If the underlying UWIssue entity does not require an issue value type, then the resource will not have one either. In such cases, the issue value type is considered to be unformatted or none.

Underwriting issue resources can also contain the following properties:

  • valueType: A read-only property indicating the issue value type
  • comparator: A read-only property indicating the comparator type, if applicable, corresponding to a ValueComparator typecode. This property is present on issues that require a value to be within some range.

Blocking points

An underwriting issue can have blocking points, meaning the associated job can proceed beyond the specified blocking point only after the underwriting issue is approved.

Blocking points are set by UWIssueBlockingPoint typecode values, and these are applied to the following underwriting issue resource properties:

  • blockingPoint: The default blocking point set for the underwriting issue
  • approvalBlockingPoint: When approving an issue, the blocking point can be reset, such as in the case when additional approvals are required. When no more approvals are required, this value is set to NonBlocking.
  • currentBlockingPoint: The current blocking point for the issue

Resolution properties

Underwriting issues can be resolved through either approval or rejection. Underwriting issue resources that have been resolved will display properties appropriate for the type of resolution.

For all resolved issues, the hasApprovalOrRejection property will be set to true.

Approved issues have the following properties:

  • approvalDurationType: A UWApprovalDurationType typecode value specifying the approval duration
  • approvingUser: A SimpleReference for the user who approved the issue
  • autoApprovable: Is the issue auto-approvable? (Boolean)
  • canEditApprovalBeforeBind: Can the approval be edited before binding? (Boolean)
  • currentBlockingPoint: On approval, the current blocking point is set to NonBlocking

When an approval is submitted with a corresponding issue value type, that value can be added to the resource through one of the following properties:

  • integerApprovalValue: The approved integer value
  • decimalApprovalValue: The approved decimal value
  • moneyApprovalValue: The approved monetary amount
  • stateSetApprovalValue: The approved states set

In such cases, the resource will subsequently contain a displayApprovalValue property, showing the approved value in string format.

Rejected issues have the following properties:

  • rejected: A Boolean set to true
  • rejectingUser: A SimpleReference for the user who rejected the issue
  • currentBlockingPoint: On rejection, the current blocking point is set to Rejected

Getting underwriting issues

The Job and Policy APIs contain endpoints that can be used to retrieve underwriting issues. Authorized callers are those having an underwriter role with the insurer organization or a producer role associated with the specific job.

The Job API provides the following endpoints:

  • GET /job/v1/jobs/{jobId}/uw-issues: Returns a collection of underwriting issues associated with the job
  • GET /job/v1/jobs/{jobId}/uw-issues/{uwIssueId}: Returns the specified underwriting issue
  • GET /job/v1/jobs/{jobId}/uw-issues/{uwIssueId}/history: Returns an array of resources that trace the state history of the specified underwriting issue

The Policy API provides the following endpoints:

  • GET /policy/v1/policies/{policyId}/uw-issues: Returns a collection of underwriting issues associated with the policy
  • GET /policy/v1/policies/{policyId}/uw-issues/{uwIssueId}: Returns the specified underwriting issue
  • GET /policy/v1/policies/{policyId}/uw-issues/{uwIssueId}/history: Returns an array of resources that trace the state history of the specified underwriting issue

For details on underwriting resource content, see Underwriting issue resources.

Getting underwriting history

The Job and Policy APIs contain endpoints that can be used to retrieve the history of an underwriting issue associated with a job or policy, respectively. Authorized callers are those having an underwriter role with the insurer organization or a producer role associated with the specific job or policy.

Underwriting history resources can be retrieved through the following endpoints:

  • GET job/v1/jobs/{jobId}/uw-issues/{uwIssueId}/history
  • GET policy/v1/policies/{policyId}/uw-issues/{uwIssueId}/history

Calls to these endpoints return an array of UWIssueHistory resources that trace the state history of the specified underwriting issue. A UWIssueHistory resource contains many of the same properties as a UWIssue resource, along with the following additional properties:

  • createDate: A date-time string for the creation date
  • effectiveDate: A date-time string for the effective date
  • status: A UWIssueHistoryStatus typecode value for issue history status

Creating underwriting issues

To create an underwriting issue on a job, a caller can submit a POST request to the /job/v1/jobs/{jobId}/uw-issues endpoint. Authorized callers are those having an underwriter role with the insurer organization.

At minimum, the POST request must include the underwriting issue type in the issueType.code field. The request body can also include a value for the associated underwriting issue value type. For this latter value, the following properties are supported:

  • integerValue: An integer value, passed as a string
  • decimalValue: A decimal value, passed as a string
  • moneyValue: A MonetaryAmount resource, containing currency and amount properties that specify the appropriate currency and amount
  • setStateValue: An ExclusiveStateSet resource, containing the inclusionType and states properties

The code block below shows a complete request body for creating an underwriting issue type of TSTManualStateSet that explicitly includes the state of California:

{
  "data": {
    "attributes": {
      "issueType": {
        "code": "TSTManualStateSet"
      },
      "stateSetValue": {
        "inclusionType": "inclusive",
        "states": [
          "CA"
        ]
      }
    }
  }
}

The response body contains the newly created UWIssue resource:

{
  "data": {
    "attributes": {
      "active": true,
      "autoApprovable": true,
      "blockingPoint": {
        "code": "BlocksQuote",
        "name": "Blocks Quote"
      },
      "comparator": {
        "code": "State_Set",
        "name": "In set"
      },
      "currentBlockingPoint": {
        "code": "BlocksQuote",
        "name": "Blocks Quote"
      },
      "displayValue": "CA",
      "hasApprovalOrRejection": false,
      "id": "45",
      "issueKey": "45",
      "issueType": {
        "code": "TSTManualStateSet",
        "displayName": "TST issue with state set format"
      },
      "shortDescription": "Special Issue",
      "stateSetValue": {
        "inclusionType": "inclusive",
        "states": [
          "CA"
        ]
      },
      "valueType": "stateSet",
      "valueVariesAcrossSlices": false
    },
    . . .
  }
}

This resource represents an open (active) underwriting issue that requires the state value (valueType) to be set to California (stateSetValue). This issue blocks on quote (blockingPoint), and at present the job associated with this issue cannot be quoted until the issue is resolved (currentBlockingPoint). The issue has not yet been approved or rejected (hasApprovalOrRejection).

For details on underwriting resource content, see Underwriting issue resources.

Approving underwriting issues

To approve an underwriting issue, authorized callers can submit a business action POST to the /job/v1/jobs/{jobId}/uw-issues/{uwIssueId}/approve endpoint.

Alternatively, authorized callers can apply special approval permission to an issue by submitting a business action POST to the /job/v1/jobs/{jobId}/uw-issues/{uwIssueId}/special-approve endpoint.

By default, only the superuser role has authorization to execute the above actions.

Approval types

An approval can be classified into the following four types:

  • Full approval: The underwriting issue has been reviewed and approved, and if necessary it contains a value that is within the expected value range.
  • Partial approval: The underwriting issue has been reviewed and approved, but its value is outside of the expected value range. Typically, a partially approved issue will be forwarded to a higher authority for final approval.
  • Automatic approval: The underwriting issue is configured to support automatic approval when specified criteria are met. Such an issue has its autoApprovable resource property set to true.
  • Special approval: Permission is provided for approving an issue regardless of value, as an approval override. Guidewire recommends that you never use this permission unless there is a time-critical policy that cannot be advanced by any underwriter.

Submitting approval requests

When calling an approval endpoints, at minimum the request body must contain the following content:

{
  "data": {
    "attributes": {
    }
  }
}

If the underwriting issue expects a formatted value, then the request can include an issue value type of either integer, decimal, monetary amount, or states set through one of the following properties:

  • integerApprovalValue: An integer value, passed as a string
  • decimalApprovalValue: A decimal value, passed as a string
  • moneyApprovalValue: A MonetaryAmount resource, containing currency and amount properties that specify the appropriate currency and amount
  • stateSetApprovalValue: An ExclusiveStateSet resource, containing the inclusionType and states properties

Optionally, the caller can also set values for the following properties:

  • approvalBlockingPoint: A UWIssueBlockingPoint typecode value. This can be applied to set a subsequent blocking point
  • approvalDurationType: A UWApprovalDurationType typecode value. This can be applied if the caller wishes to change the default duration type.
  • canEditApprovalBeforebind: Can the approval be edited before binding? (Boolean)

After a successful call to an approval endpoint, the resource's hasApprovalOrRejection property will be set to true.

The following code block depicts an request for a PAHighValueAuto underwriting issue that approves a monetary amount of USD$8.50, sets the next blocking point on issuance, rescinds the approval duration, and enables editing of the underwriting issue prior to binding:

{
  "data": {
    "attributes": {
      "approvalBlockingPoint": {
        "code": "BlocksIssuance"
      },
      "approvalDurationType": {
        "code": "Rescinded"
      },
      "canEditApprovalBeforeBind": true,
      "moneyApprovalValue": {
        "amount": "8.5",
        "currency": "usd"
      }
    }
  }
}

However, the approved monetary amount (USD$8.50) is less than the default threshold for this issue type (USD$10.00), therefore the issue will be partially approved.

The response body appears as follows:

{
  "data": {
    "attributes": {
      "active": true,
      "approvalBlockingPoint": {
        "code": "BlocksIssuance",
        "name": "Blocks Issuance"
      },
      "approvalDurationType": {
        "code": "Rescinded",
        "name": "Rescinded"
      },
      "approvingUser": {
        "displayName": "Super User",
        "id": "default_data:1",
        "type": "User",
        "uri": "/admin/v1/users/default_data:1"
      },
      "autoApprovable": true,
      "blockingPoint": {
        "code": "BlocksQuote",
        "name": "Blocks Quote"
      },
      "canEditApprovalBeforeBind": true,
      "comparator": {
        "code": "Monetary_LE",
        "name": "At most (monetary)"
      },
      "currentBlockingPoint": {
        "code": "BlocksQuote",
        "name": "Blocks Quote"
      },
      "displayApprovalValue": "$8.50",
      "displayValue": "$10.00",
      "hasApprovalOrRejection": true,
      "id": "407",
      "issueKey": "407",
      "issueType": {
        "code": "PAHighValueAuto",
        "displayName": "PA: High value vehicle"
      },
      "longDescription": "Test long description",
      "moneyApprovalValue": {
        "amount": "8.50",
        "currency": "usd"
      },
      "moneyValue": {
        "amount": "10.00",
        "currency": "usd"
      },
      "shortDescription": "Test short description",
      "valueType": "money",
      "valueVariesAcrossSlices": false
    },
    . . .
  }
}

A subsequent approval request is necessary in order to fully approve this issue. A caller with sufficiently elevated authority can approve this issue at the current value by submitting a call with the minimum request body described above. Alternatively, a caller can submit an approval request that contains a value within the expected range. In either case, the fully approved issue will return a response body showing that the blocking point has been removed.

Rejecting underwriting issues

To reject an underwriting issue, authorized callers can submit a business action POST to the /job/v1/jobs/{jobId}/uw-issues/{uwIssueId}/reject endpoint. Calls to this endpoint do not take a request body. By default, only superuser and underwriter roles are authorized to execute this request.

The reject action cannot be applied to underwriting issues that have been approved, special approved, or rejected. In these cases, the underwriting issue resource property hasApprovalOrRejection reads true. To enable rejection of an approved issue, it must first be reopened.

Policy transaction jobs that have one or more rejected underwriting issues cannot be completed. A rejected underwriting issue permanently blocks the job.

A rejected underwriting issue resource contains the following properties:

{
  "data": {
    "attributes": {
      . . .
      "currentBlockingPoint": {
        "code": "Rejected",
        "name": "Rejected"
      },
      "hasApprovalOrRejection": true,
      . . .
      "rejected": true,
      "rejectingUser": {
        "displayName": "Super User",
        "id": "default_data:1",
        "type": "User",
        "uri": "/admin/v1/users/default_data:1"
      },
      . . .
    },
    . . .
  }
}

Reopening underwriting issues

To reopen an underwriting issue, a caller can submit a business action POST to the /job/v1/jobs/{jobId}/uw-issues/{uwIssueId}/reopen endpoint. Calls to this endpoint do not take a request body. By default, only superuser and underwriter roles are authorized to execute this request.

The reopen action can be applied to underwriting issues that have been approved, special approved, or rejected. In these cases, the underwriting issue resource property hasApprovalOrRejection reads true. If the reopen call succeeds, then the currentBlockingPoint property will be reset to its default value and the hasApprovalOrRejection property will be set to false.

Locking jobs for underwriting review

A job can be locked to prevent changes to it while any associated underwriting issues are being reviewed. A locked job cannot be edited by users without the underwriting role. Following review, the job can be unlocked to reenable editing.

To apply an editing lock, an authorized caller can submit a business action POST to the /job/v1/jobs/{jobId}/edit-lock endpoint. Calls to this endpoint do not take a request body.

The resource of a locked job has the editLocked property set to true.

To release an editing lock on a job, an authorized caller can submit a business action POST to the /job/v1/jobs/{jobId}/release-edit-lock endpoint. Calls to this endpoint do not take a request body.

By default, only superuser and underwriter roles are authorized to use these endpoints.

For details on edit locking, see the Configuration Guide.