You are here:
External Rating and Pricing
For external rating and createUpdateQuote, you must use the simplified quote JSON optimized for ease of mapping with external policy admin systems. You can generate a simplified quote JSON response using the InsQuoteService:getQuoteDetail service.
For example, when a quote is repriced using the rate now button, the rating Integration Procedure invokes InsQuoteService:getQuoteDetail and generates the simplified JSON that is sent to the external system through an HTTP action or an apex class. The response returned from the external system is in the same simplified json format, which is consumed by the rating services to update the quote record with the information returned.
Set up the product to use an external system:
-
Set up the Product.
-
External IDmust have a value. -
Set
Rating Procedure Type= Integration Procedure. -
Set
Rating Procedure Name= Integration Procedure’s Type_Subtype.
-
-
Set up the Integration Procedure to call an external system for Rating or Pricing.
ImportantSet the org to allow requests to the external system’s endpoint. You can do this setting in Set Up > Security > Remote Site Settings.
-
Invoke
InsQuoteService:getQuoteDetailwith optionisForExternal=true, and inputaction=repriceto prepare the Quote JSON. -
Send the Quote JSON to the external system for the rating. Create an Apex class that sends the request to the external system or use the HTTP action in the Integration Procedure.
-
Expect the external system to return a Quote JSON with the prices updates.
-
The format for the
ResponseAction:{ "result": { "quote": { // This is the updated Quote JSON returned in #2 }, "errorCode": "INVOKE-200", "error": "OK" } }ImportantWhen using the HTTP action, the result omits
“error”: “OK”. Add this error manually using the additional output option of theResponseAction.The error code
INVOKE-200indicates that the request was received. Other messages include information about the records created by the service.If the service doesn't generate the output you expect, check the debug log for information about potential configuration issues.
-
Input JSON for InsQuoteService: createUpdateQuoteFromExternal
Here's the format of the input JSON:
{
"quote":{
"records":[
{
"opportunityId":"Opportunity.Id",
"sourceSystemIdentifier":"Id",
"sourceSystem":"Name of system quote was created",
"Name":"Quote Name",
"type":"Quote.RecordType.DeveloperName",
"effectiveDate":"Quote.EffectiveDate__c",
"endDate":"Quote.EndDate__c",
"price":Quote.StandardPremium__c,
"term":"Quote.Term__c",
"status":"Quote.Status",
"additionalFields":{
"Quote.fieldAPIName":"value"
},
"quoteLines":{
"records":[
{
"sourceSystemIdentifier":"Id",
"lineRecordType":"Product2",
"instanceKey":"name",
"productCode":"Product2.ProductCode",
"productName":"Product2.Name",
"attributeCategories":{
"records":[
{
"productAttributes":{
"records":[
{
"code":"attribute code",
"userValues":"selected value"
}
]
}
}
]
},
"additionalFields":{
"QuoteLineItem.fieldAPIName":"value"
},
"childLines":{
"records":[
{
"sourceSystemIdentifier":"Id",
"lineRecordType":"Product2.RecordType.DeveloperName",
"productCode":"Product2.ProductCode",
"productName":"Product2.Name",
"instanceKey":"instance name",
"price":QuoteLineItem.UnitPrice,
"taxAmount":QuoteLineItem.TaxAmount__c,
"feeAmount":QuoteLineItem.FeeAmount__c,
"additionalFields":{
"QuoteLineItem.fieldAPIName":"value"
},
"attributeCategories":{
"records":[
{
"productAttributes":{
"records":[
{
"code":"attribute code",
"userValues":"selected value"
}
]
}
}
]
},
"childLines":{
"records":[
{
"sourceSystemIdentifier":"Id",7e54f959544f",
"lineRecordType":"InsuredPartySpec",
"productCode":"Product2.ProductCode",
"productName":"Product2.Name",
"instanceKey":"instance name",
"price":QuoteLineItem.UnitPrice,
"taxAmount":QuoteLineItem.TaxAmount__c,
"feeAmount":QuoteLineItem.FeeAmount__c,
"isPrimaryChild":true,
"additionalFields":{
"QuoteLineItem.fieldAPIName":"value"
},
"attributeCategories":{
"records":[
{
"productAttributes":{
"records":[
{
"code":"attribute code",
"userValues":"selected value"
}
]
}
}
]
}
}
]
}
}
]
}
}
]
}
}
]
}
}Here's an example of the input JSON:
{
"quote": {
"records": [
{
"opportunityId": "0065w0000286hhNAAQ",
"sourceSystemIdentifier": "af3c0072-9018-43df-83d3-3a5f254d5b1e",
"sourceSystem": "Salesforce",
"Name": "Auto Root (External)",
"type": "LargeGroupQuote",
"effectiveDate": "06/01/2021",
"endDate": "12/01/2021",
"price": 10000,
"term": "Semi-Annual",
"status": "Submitted",
"quoteLines": {
"records": [
{
"sourceSystemIdentifier": "49553393-120a-4777-b65a-8167c386a0fb",
"instanceKey": "Auto Root",
"productCode": "AUTOROOT",
"productName": "Auto Root",
"attributeCategories": {
"records": [
{
"productAttributes": {
"records": [
{
"code": "atLimitUM",
"userValues": 200
}
]
}
}
]
},
"additionalFields": {
"instest12__AdjustmentComments__c": "test comment"
},
"childLines": {
"records": [
{
"sourceSystemIdentifier": "5a8d1b04-c34c-6a48-42c8-ab08be9868e1",
"lineRecordType": "InsuredItemSpec",
"Name": "Auto",
"productName": "Auto",
"productCode": "AUTO",
"instanceKey": "2010 Honda Odyssey",
"price": 111,
"taxAmount": 5,
"feeAmount": 21,
"additionalFields": {
"instest12__AdjustmentComments__c": "test comment"
},
"attributeCategories": {
"records": [
{
"productAttributes": {
"records": [
{
"code": "autoYear",
"userValues": 2010
},
{
"code": "carValue",
"userValues": 55000
},
{
"code": "est_annual_mileage",
"userValues": 2000
},
{
"code": "autoMake",
"userValues": "Honda"
},
{
"code": "autoModel",
"userValues": "Odyssey"
}
]
}
}
]
},
"childLines": {
"records": [
{
"sourceSystemIdentifier": "6400140b-3e97-32c4-bdfd-7e54f959544f",
"lineRecordType": "InsuredPartySpec",
"Name": "Driver",
"productName": "Driver",
"productCode": "DRIVER",
"instanceKey": "Bob Jones",
"price": 112,
"taxAmount": 6,
"feeAmount": 22,
"isPrimaryChild": true,
"additionalFields": {
"instest12__AdjustmentComments__c": "test comment"
},
"attributeCategories": {
"records": [
{
"productAttributes": {
"records": [
{
"code": "AGE",
"userValues": 24
},
{
"code": "FN",
"userValues": "Bob"
},
{
"code": "LN",
"userValues": "Jones"
},
{
"code": "GENDER",
"userValues": "Male"
}
]
}
}
]
}
},
{
"sourceSystemIdentifier": "38c4fe27-7b85-77ce-c9e2-1f7f22889982",
"lineRecordType": "InsuredPartySpec",
"Name": "Driver",
"productName": "Driver",
"productCode": "DRIVER",
"instanceKey": "Joan Smith",
"price": 113,
"taxAmount": 7,
"feeAmount": 23,
"attributeCategories": {
"records": [
{
"productAttributes": {
"records": [
{
"code": "AGE",
"userValues": 25
},
{
"code": "FN",
"userValues": "Joan"
},
{
"code": "LN",
"userValues": "Smith"
},
{
"code": "GENDER",
"userValues": "Female"
}
]
}
}
]
}
},
{
"sourceSystemIdentifier": "33b74fa2-fba5-44b4-317f-021dae689a9f",
"lineRecordType": "CoverageSpec",
"Name": "Collision Deductible Waiver",
"productName": "Collision Deductible Waiver",
"productCode": "COL_WAIVER",
"instanceKey": "2010 Honda Odyssey_COL_WAIVER",
"price": 114,
"taxAmount": 8,
"feeAmount": 24
},
{
"sourceSystemIdentifier": "c4d5ac35-99b1-047d-cebe-05b74861463e",
"lineRecordType": "CoverageSpec",
"Name": "Uninsured/Underinsured Motorist BI",
"productName": "Uninsured/Underinsured Motorist BI",
"productCode": "UNINSURED_COVERAGE",
"instanceKey": "2010 Honda Odyssey_UNINSURED_COVERAGE",
"price": 115,
"taxAmount": 9,
"feeAmount": 25,
"attributeCategories": {
"records": [
{
"productAttributes": {
"records": [
{
"code": "AbaThrpyOutptInst_covered_inn",
"userValues": 1.3
},
{
"code": "UNINSURED",
"userValues": "No coverage"
}
]
}
}
]
}
}
]
}
},
{
"sourceSystemIdentifier": "60699eaf-956a-4381-8ef2-5a704c85517f",
"lineRecordType": "InsuredItemSpec",
"Name": "Auto",
"productName": "Auto",
"productCode": "AUTO",
"instanceKey": "2011 Toyota Camry",
"price": 116,
"taxAmount": 10,
"feeAmount": 26,
"attributeCategories": {
"records": [
{
"productAttributes": {
"records": [
{
"code": "autoYear",
"userValues": 2011
},
{
"code": "carValue",
"userValues": 55500
},
{
"code": "est_annual_mileage",
"userValues": 2200
},
{
"code": "autoMake",
"userValues": "Toyota"
},
{
"code": "autoModel",
"userValues": "Camry"
}
]
}
}
]
},
"childLines": {
"records": [
{
"sourceSystemIdentifier": "6400140b-3e97-32c4-bdfd-7e54f959544f",
"lineRecordType": "InsuredPartySpec",
"Name": "Driver",
"productName": "Driver",
"productCode": "DRIVER",
"instanceKey": "Bob Jones",
"price": 112,
"taxAmount": 6,
"feeAmount": 22,
"isPrimaryChild": true,
"attributeCategories": {
"records": [
{
"productAttributes": {
"records": [
{
"code": "AGE",
"userValues": 24
},
{
"code": "FN",
"userValues": "Bob"
},
{
"code": "LN",
"userValues": "Jones"
},
{
"code": "GENDER",
"userValues": "Male"
}
]
}
}
]
}
},
{
"sourceSystemIdentifier": "8c450354-2053-444c-9c9e-36a66e6f5582",
"lineRecordType": "CoverageSpec",
"Name": "Collision Deductible Waiver",
"productName": "Collision Deductible Waiver",
"productCode": "COL_WAIVER",
"instanceKey": "2011 Toyota Camry_COL_WAIVER",
"price": 117,
"taxAmount": 11,
"feeAmount": 27
},
{
"sourceSystemIdentifier": "7aaeee37-05ce-4926-accb-dff2ee85587f",
"lineRecordType": "CoverageSpec",
"Name": "Roadside",
"productName": "Roadside",
"productCode": "ROADSIDE_COVERAGE",
"instanceKey": "2011 Toyota Camry_ROADSIDE_COVERAGE",
"price": 118,
"taxAmount": 12,
"feeAmount": 28,
"attributeCategories": {
"records": [
{
"productAttributes": {
"records": [
{
"code": "ROADSIDE",
"userValues": 1
}
]
}
}
]
}
}
]
}
}
]
}
}
]
},
"additionalFields": {
"instest12__MonthlyPremium__c": 222
}
}
]
}
}Output JSON for InsQuoteService: createUpdateQuoteFromExternal
The service returns the Quote.Id of the created or updated quote in the output JSON and the list of errors encountered.
Here's the format of the output JSON:
{
"errors":[
"error1",
"error2",
"error3"
],
"quoteId":"Quote.Id"
}Here's an example of the output JSON:
{
"errors":[
"Failed to create/update QuoteLineItem Honda Odyssey.Required fields are missing: [PricebookEntryId, Product2Id]; ",
"Failed to create/update QuoteLineItem Toyota Camry.Required fields are missing: [PricebookEntryId, Product2Id]; ",
"Failed to create/update QuoteLineItem Patty Desc.Required fields are missing: [PricebookEntryId, Product2Id]; "
],
"quoteId":"0Q05w0000027aH5CAI"
}
