Loading
Seguro
InsQuoteService:createUpdateQuote

InsQuoteService:createUpdateQuote

Utilice este servicio para crear un presupuesto para nuevos negocios, actualizar un presupuesto existente con nueva información o crear un presupuesto de aprobación. Para actualizaciones, el quoteId del presupuesto que se va a actualizar debe incluirse en las opciones remotas.

Nota
Nota

Antes de que se ejecute este servicio, el sistema ejecuta una comprobación de usuario invitado.

Este servicio puede ser utilizado por usuarios invitados. Un usuario invitado que ejecuta una tarea de OmniScript, Procedimiento de integración o interfaz de usuario podrá continuar; este servicio se ejecutará. Sin embargo, el quoteId y el opportunityId están cifrados en estos casos, de modo que los usuarios invitados no pueden ver estos Id.

Importante
Importante

Utilice el servicio InsQuoteService:createUpdateQuote para actualizar el presupuesto y las partidas de presupuesto, en vez de utilizar el Asignador de datos de OmniStudio.

Clase: InsQuoteService

Método: createUpdateQuote

Funcionamiento

  1. El servicio busca el JSON de entrada para el inputKey. El nodo inputKey contiene la información que el servicio necesita para crear o actualizar un presupuesto. La información que requiere este servicio incluye:

    • opportunityId

    • endDate (opcional)

    • effectiveDate

    • Registros de productConfigurationDetail

    • instanceKey

      Se requiere para identificar múltiples instancias de la misma especificación

    • insuredItems nodo

      Dentro de este nodo, el servicio espera una lista de especificaciones de elementos asegurados y especificaciones de parte asegurada, utilizando la productCode de cada especificación como una clave.

    • Term__c

      Utilice para actualizar el campo Term__c del Presupuesto.

  2. Utiliza la información del JSON de entrada para crear el presupuesto.

  3. Devuelve un Id. de presupuesto en el JSON de salida.

  4. Crea un objeto Presupuesto que incluye estas partidas:

    1. Utiliza los productos raíz definidos en productConfigurationDetail para crear o actualizar las partidas de presupuesto raíz.

    2. Al actualizar un presupuesto existente, se agregarán los registros de los productConfigurationDetail que aún no están en el presupuesto y se actualizarán los que ya están en el presupuesto.

    3. Utiliza especificaciones de elementos asegurados, especificaciones de parte asegurada y especificaciones de cobertura como partidas de presupuesto: ParentItemId__c = rootItem.Id.

    4. La partida de presupuesto del elemento asegurado principal y las partidas de presupuesto del asegurado secundario tienen una relación muchos:muchos. Estas relaciones se almacenan en el objeto Relación de elemento de presupuesto. Si una partida de presupuesto de elemento asegurado tiene relaciones con múltiples partidas de presupuesto de parte asegurada, el campo PrimaryChildLineitemId__c se utiliza para determinar cuál de esas relaciones es la principal.

      Por ejemplo, tanto Joan Smith como John Smith son controladores de Lexus 250; Joan Smith está establecido como el controlador Principal. La partida de presupuesto Lexus 250 tiene PrimaryChildLineItemId__c que apuntan a la partida de presupuesto de Joan Smith. Todos los ParentItemId2__c de partidas de presupuesto apuntan a que los SubParentItemId__c de coberturas secundarias de rootItem.Id. apuntan al elemento asegurado principal. Los campos de ItemName__c Partida de presupuesto de elemento asegurado y Partida de presupuesto de parte asegurada se almacenan con la instanceKey de este elemento.

    5. La partida de presupuesto del elemento asegurado principal incluye el precio.

  5. Para nuevos presupuestos, si createOpportunity es true y no se proporciona opportunityId, crea un registro Oportunidad utilizando el nodo JSON de OpportunityDetails desde el inputKey.

  6. Si calculateCommission es true, llama a InsCommissionService.processQuoteCommission, que prepara la entrada para el servicio de InsCommissionService.calculate. Después de que el servicio de cálculo procese la entrada, almacena el valor de comisión calculado en Quote.CommissionAmount__c.

Todos los usuarios que llaman a InsQuoteService:createUpdateQuote deben tener el permiso Leer para todos los campos en el conjunto de campos Detalle de presupuesto si el conjunto de campos se agrega al objeto Partida de presupuesto.

Si el conjunto de campos Detalle de presupuesto no se agrega al objeto Partida de presupuesto, todos los campos, incluyendo los campos personalizados, son legibles para los usuarios.

Recargos

A continuación le mostramos cómo funciona este servicio con recargos (impuestos y tasas):

  • Si se especifica el campo taxesAndFees en un registro JSON, persiste un registro QuotePricingAdjustment__c correspondiente para cada elemento de la lista de taxesAndFees.

  • Si el campo taxAmount se especifica en un registro JSON, el campo TaxAmount__c se establece como el valor del campo taxAmount en el QuoteLineItem creado.

  • Si el campo feeAmount se especifica en un registro JSON, el campo FeeAmount__c se establece como el valor del campo feeAmount en el QuoteLineItem creado.

Adición de campos adicionales a partidas de presupuesto

Si necesita campos adicionales escritos en la partida de presupuesto por este servicio, tendrá que llamar al servicio InsProductJSONService:trimOffAttributeCategory primero.

El flujo para que esto funcione en un procedimiento de integración o OmniScript es:

  1. Pasos de configuración de productos

  2. Llamada de servicio InsProductJSONService:trimOffAttributeCategory con selectedValueAsObject establecido como true

  3. Transformación de DataRaptor que puede incluir la asignación entre atributos y sus campos adicionales en el objeto Partida de presupuesto

  4. InsQuoteService:createUpdateQuote llamada de servicio

Opciones remotas

Opción

Descripción

createInsuredItemsRelationships

true o false

Si esta opción está establecida como true, puede especificar una lista de relaciones instanceKey > parentInstanceKey entre elementos asegurados.

Esta opción admite relaciones de elemento asegurado principal > secundario y principal > secundario > nieto.

inputKey

Obligatorio.

Una clave JSON de la que este servicio extrae la información necesaria para crear o actualizar un presupuesto.

No utilice % para rodear el valor de esta clave. Esta clave representa un nodo JSON, no una variable.

Como esta clave representa un nodo JSON y no una ruta, no utilice la notación parent:childnode:childnode path.

Para llegar a la ruta de datos correcta, introdúzcala en el campo Enviar ruta JSON en la sección Transformación Enviar/Respuesta cuando agregue este par de clave/valor a un paso de OmniScript.

insertInstance

true o false

Cuando se establece en true, el servicio inserta partidas de presupuesto adicionales en un presupuesto existente. No actualiza el encabezado del presupuesto, la partida raíz ni ninguna partida de presupuesto principal.

Utilice esta opción para crear presupuestos de múltiples instancias de gran tamaño a través de múltiples llamadas de servidor, donde el nuevo conjunto de partidas de presupuesto de las instancias se inserta en el presupuesto existente en cada llamada.

quoteId

Opcional

El Id. de un presupuesto existente que este servicio actualiza, basándose en información nueva o actualizada. Se utiliza cuando el servicio necesita actualizar un presupuesto existente.

isMultiRoot

Opcional

Un indicador booleano para indicar si el presupuesto es un presupuesto de múltiples raíces.

El valor predeterminado es false.

minimizeQliQuerySize

true o false

Cuando se establece en true, el servicio consulta solo las partidas de presupuesto afectadas. Específicamente, aquellas partidas de presupuesto que hacen referencia al producto en el nodo JSON de producto de entrada o en el nodo JSON de elementos asegurados.

populateCalcResults

true o false

Cuando se establece en false, el servicio no rellena el campo rootItem.CalculatedPriceJSON_c y el campo Quote.CalculatedPriceJSON_c.

pricebook

Obligatorio.

El nombre de la lista de precios asociada con la especificación del producto.

Salesforce requiere que los productos utilizados en partidas de presupuesto tengan una entrada de lista de precios.

recalculateTaxesAndFees

true o false

Cuando se establece en true, el servicio vuelve a calcular impuestos y comisiones.

Cuando se establece en false, el servicio no vuelve a calcular impuestos y comisiones.

Nota
Nota

Si establece esta opción como falsa, también debe agregar una línea a la plantilla de la interfaz de usuario de ins-coverage-quote-runtime-container.

ins-coverage-quote-runtime-container.js, en la línea 115, introduzca : optionsMap.recalculateTaxesAndFees = false.

createOpportunity

true o false

Cuando se establece en true, si no se proporciona opportunityId, el servicio crea un nuevo registro Oportunidad utilizando el nodo JSON de OpportunityDetails desde el inputKey. Este nodo se asigna a campos en el sObject de oportunidad.

returnQuote

true o false

Cuando se establece en true, el resultado del servicio incluye detalles de presupuesto en el nodo JSON de quoteDetail.

calculateCommission

true o false

Cuando se establece en true, el servicio calcula comisiones para los elementos raíz y guarda el importe total en Quote.CommissionAmount.

Cuando se establece en false (el valor predeterminado), el servicio no calcula comisiones.

Nota
Nota

Si establece esta opción como verdadera, también necesita introducir al menos uno de los valores de código de producción o productor: primaryProducerId , productionCodeId o productionCodeName.

primaryProducerId

Opcional

El Id. del productor de procesamiento, es decir, el productor utilizado para recuperar el commissionScheduleId y calcular el importe de la comisión.

productionCodeId

Opcional

El Id. del código de producción.

productionCodeName

Opcional

El nombre del código de producción pasó al servicio InsCommissionService.calculate.

Si no introduce productionCodeId, el servicio utiliza productionCodeName para buscar el productionCodeId. Si introduce ambos valores pero no coinciden, productionCodeId tiene prioridad.

runEligibilityRequiredDefaultSelectedRules

Opcional

Los valores predeterminados son true.

Determina si se ejecutan las reglas Elegibilidad y Predeterminado seleccionado.

runRelationshipRules

Opcional

Los valores predeterminados son true.

Determina si se ejecutan reglas de relaciones.

runSelectedValivationRules

Opcional

Los valores predeterminados son true.

Determina si se ejecutan las reglas Seleccionar validación.

JSON de entrada

Este servicio busca el valor del inputKey. Vaya a la ficha API en la especificación del producto para encontrar el JSON de entrada que necesita para este servicio.

Para este ejemplo, inputKey = quotePolicyJSON.

"quotepolicyJson": {
  "productConfigurationDetail": {
    "records": [{
          "rootProductId": "01t1I000002fuBoQAI",
          "rootProductCode": "AUTOROOT",
          "timestamp": 1534288040769,
          "hasInstanceKeys": true,
          "childProductsCount": 4,
          "instanceKeyChildren": 2,
          "pathFromChild": "[0]",
          "pathFromRoot": "[0]",
          "attributeCategories": {
            "records": [{
                "productAttributes": {
                  "records": [{
                      "parentProductId": "01t1I000002fuBoQAI",
                      "parentProductCode": "AUTOROOT",
                      "pathFromChild": "attributeCategories.records[0].productAttributes.records[0]",
                      "pathFromRoot": "attributeCategories.records[0].productAttributes.records[0]",
                      "userValues": "test",
                      "values": [{
                        "disabled": false,
                        "readonly": false
                      }]
                      "totalSize": 1
                    },
                    "id": "a1V1I0000007xJSUAY",
                    "Name": "Alan Health Attributes",
                    "Code__c": "AHA",
                    "displaySequence": 5
                  }
                ],
                "totalSize": 1
              },
              "childProducts": {
                "records": [{
                    "rootProductId": "a2f1I000000BI6JQAW",
                    "rootProductCode": "stolenProperty",
                    "customizeSectionsOpen": null,
                    "numberAttributes": 1,
                    "numberCategories": 1,
                    "originalIndex": 0,
                    "parentProductName": "Auto Root",
                    "pathFromRoot": "[0].childProducts.records[0]",
                    "attributeCategories": {
                      "records": [{
                        "productAttributes": {
                          "records": [{
                            "parentProductId": "a2f1I000000BI6JQAW",
                            "parentProductCode": "stolenProperty",
                            "originalAttributeIndex": 0,
                            "originalCategoryIndex": 0,
                            "originalProductIndex": 0,
                            "pathFromChild": "attributeCategories.records[0].productAttributes.records[0]",
                            "pathFromRoot": "childProducts.records[0].attributeCategories.records[0].productAttributes.records[0]",
                            "userValues": false,
                            "values": [...]
                              ...
                          }]
                          "totalSize": 1
                        },
                        "id": "a1V1I0000007xJSUAY",
                        "Name": "Alan Health Attributes",
                        "Code__c": "AHA",
                        "displaySequence": 5
                      }],
                      "totalSize": 1
                    },
                    "childProducts": {
                      ...
                    }
                    "Price": 80,
                    "productId": "01t1I000002fuBoQAI",
                    "Term__c": "Semi-Annual",
                    "PricingFormula__c": "SUM(AutoPremium__autoPremium + rentalTotal + medicalTotal + roadsideTotal + dedWaiverTotal + uninsuredMotoristPDTotal + uninsuredMotoristBITotal)",
                    "IsConfigurable__c": true,
                    "RecordTypeName__c": "Product",
                    "IsRecommended__c": false,
                    "ProductCode": "AUTOROOT",
                    "Name": "Auto Root",
                    "Id": "01t1I000002fuBoQAI",
                    "RawPriceData": [{
                        "aggregationResults": {},
                        "calculationResults": [{
                            "ID": "0",
                            "comprehensiveTotal": 500,
                            "rentalTotal": 40,
                            "medicalTotal": 10,
                            "roadsideTotal": 10,
                            "dedWaiverTotal": 10,
                            "uninsuredMotoristPDTotal": 0,
                            "uninsuredMotoristBITotal": 100,
                            "AUTO.instanceKey": "2015 Lexus LX250",
                            "DRIVER.FN": "Joan",
                            "DRIVER.LN": "Smith"
                          },
                          "ID": "1",
                          "comprehensiveTotal": 500,
                          "rentalTotal": 40,
                          "medicalTotal": 10,
                          "roadsideTotal": 10,
                          "dedWaiverTotal": 10,
                          "uninsuredMotoristPDTotal": 0,
                          "uninsuredMotoristBITotal": 100,
                          "AUTO.instanceKey": "2015 Lexus LX250",
                          "DRIVER.FN": "John",
                          "DRIVER.LN": "Smith"
                        },
                        ...
                      ]
                    },
                    {
                      "aggregationResults": {},
                      "calculationResults": [{
                          "ID": "4",
                          "comprehensiveTotal": 500,
                          "rentalTotal": 40,
                          "medicalTotal": 10,
                          "roadsideTotal": 10,
                          "dedWaiverTotal": 10,
                          "uninsuredMotoristPDTotal": 0,
                          "uninsuredMotoristBITotal": 100,
                          "AUTO.instanceKey": "2006 Honda Odyssey",
                          "DRIVER.FN": "Joan",
                          "DRIVER.LN": "Smith"
                        },
                        {
                          "ID": "5",
                          "comprehensiveTotal": 500,
                          "rentalTotal": 40,
                          "medicalTotal": 10,
                          "roadsideTotal": 10,
                          "dedWaiverTotal": 10,
                          "uninsuredMotoristPDTotal": 0,
                          "uninsuredMotoristBITotal": 100,
                          "AUTO.instanceKey": "2006 Honda Odyssey",
                          "DRIVER.FN": "John",
                          "DRIVER.LN": "Smith"
                        },
                        ...
                      ]
                    }
                  ],
                  "CalculatedPriceData": {
                    "2006 Honda Odyssey": {
                      "ID": "4",
                      "comprehensiveTotal": 500,
                      "rentalTotal": 40,
                      "medicalTotal": 10,
                      "roadsideTotal": 10,
                      "dedWaiverTotal": 10,
                      "uninsuredMotoristPDTotal": 0,
                      "uninsuredMotoristBITotal": 100,
                      "AUTO.instanceKey": "2006 Honda Odyssey",
                      "DRIVER.FN": "Joan",
                      "DRIVER.LN": "Smith"
                    },
                    "2015 Lexus LX250": {
                      "ID": "0",
                      "comprehensiveTotal": 500,
                      "rentalTotal": 40,
                      "medicalTotal": 10,
                      "roadsideTotal": 10,
                      "dedWaiverTotal": 10,
                      "uninsuredMotoristPDTotal": 0,
                      "uninsuredMotoristBITotal": 100,
                      "AUTO.instanceKey": "2015 Lexus LX250",
                      "DRIVER.FN": "Joan",
                      "DRIVER.LN": "Smith"
                    }
                  },
                  "displaySequence": -1
                }
              ]
            },
            "insuredItems": {
              "DRIVER": [{
                  "isPrimary": false,
                  "instanceKey": "Joan Smith",
                  "LN": "Smith",
                  "AGE": 20,
                  "FN": "Joan",
                  "GENDER": "Female",
                  "FirstName": "Joan",
                  "LastName": "Smith",
                  "partyId": "a0q1I000001emNeQAI"
                },
                {
                  "isPrimary": false,
                  "instanceKey": "John Smith",
                  "LN": "Smith",
                  "AGE": 30,
                  "FN": "John",
                  "GENDER": "Male",
                  "FirstName": "John",
                  "LastName": "Smith",
                  "partyId": "a0q1I000001emNfQAI"
                },
              ],
              "AUTO": [{
                  "autoLicNum": "Lexus",
                  "autoModel": "LX250",
                  "autoYear": 2015,
                  "instanceKey": "2015 Lexus LX250",
                  "BodyClass": "Sedan/Saloon",
                  "VehicleType": "PASSENGER CAR",
                  "isPrimary": true
                },
                {
                  "autoLicNum": "Honda",
                  "autoModel": "Odyssey",
                  "autoYear": 2006,
                  "instanceKey": "2006 Honda Odyssey",
                  "BodyClass": "Minivan",
                  "VehicleType": "MULTIPURPOSE PASSENGER VEHICLE (MPV)",
                  "isPrimary": true
                }
              ]
            },
            "accountId": "0011I00000QknfjQAB",
            "opportunityId": "0061I00000AV8gBQAT"
          }

El JSON dentro del inputKey incluye varios pares clave/valor que el servicio necesita para crear o actualizar un presupuesto.

Clave

Valor

opportunityId

El Id. de oportunidad generado.

accountId

El Id. de cuenta generado.

endDate

Opcional

La fecha en la que caduca la política.

effectiveDate

La fecha en la que la política entra en vigor.

productConfigurationDetail

Una matriz de registros que siguen el modelo de estructura JSON del producto.

Se creará o modificará una partida de presupuesto raíz para cada registro de producto en la matriz.

Para obtener información acerca de la estructura y el contenido de un producto, consulte el Modelo de estructura JSON de producto.

additionalFields

Opcional

La clave de additionalFields se aplica únicamente a pares clave/valor para presupuestos raíz, no partidas de presupuesto. Para partidas de presupuesto, agregue additionalFields utilizando el JSON de productConfigurationDetail.

insuredItems

Los pares clave/valor de los elementos asegurados que el servicio utiliza para crear las partidas de presupuesto para elementos asegurados.

Si su presupuesto incluye una única instancia de un elemento asegurado o múltiples elementos asegurados, asigne formato al nodo insuredItems con una matriz de registros.

"insuredItems": {
  "DRIVER": [{
    "isPrimary": false,
    "instanceKey": null,
    "additionalFields": {},
    "productCode": "DRIVER",
    "productId": "01t1I000002fuByQAI",
    "FN": null,
    "GENDER": null,
    "LN": null,
    "partyId": null
  }],
  "AUTO": [{
    "isPrimary": true,
    "instanceKey": null,
    "additionalFields": {},
    "productCode": "AUTO",
    "productId": "01t1I000002fuBtQAI",
    "autoBrakes": false,
    "est_annual_mileage": "10001-20000",
    "autoLicNum": null,
    "autoModel": null,
    "autoStyle": null,
    "autoVIN": null,
    "autoYear": ""
  }]
}

Para una única instancia de un elemento asegurado que está directamente bajo el producto raíz en la jerarquía de productos, puede utilizar el formato en este ejemplo. Los registros de insuredItems aquí incluyen los elementos asegurados y los valores que el usuario seleccionó para cada uno. Admitimos este JSON de entrada pero es de una versión anterior y no lo recomendamos.

"insuredItems": {
  "smallBusiness": {
    "protectionClass": 3,
    "yearBuilding": 2000,
    "yearWiring": 2000,
    "yearRoof": 2003,
    "yearPlumbing": 2000,
    "yearBusiness": 2002,
    "businessParkingLot": "no",
    "legalForm": "sole",
    "busLocation": "standalone",
    "busHours": 8,
    "busEmployees": 24,
    "bldgSprinker": "Y",
    "bldgFrame": "frame",
    "bldgAlarm": "none",
    "ageWiring": 18,
    "ageRoof": 15,
    "agePlumbing": 18,
    "ageBusiness": 16,
    "ageBuilding": 18,
    "SIC": "5451",
    "SICCategory": "Food Stores"

Para nuevos presupuestos, si createOpportunity es true y no se proporciona opportunityId, el servicio crea un nuevo registro Oportunidad utilizando el nodo JSON de OpportunityDetails desde el inputKey. Utilice el formato de entrada OpportunityDetails:FieldName. Este es un ejemplo de un nodo de OpportunityDetails.

"OpportunityDetails": {
      "AccountId": "0015f00000DSFgqAAH",
      "Name": "Auto Quote: Rachel Adams (2022-01-03)",
      "StageName": "Qualification",
      "CloseDate": "2022-01-03"
    },
Nota
Nota

preTransformBundle Alternative

También puede definir una transformación DataRaptor que asigne los datos que se pasaron al JSON de entrada al formato que necesita el servicio. Este JSON de salida de DataRaptor es el JSON de userInputs definido en la ficha API de la vista de producto. Establezca la opción preTransformBundle en el nombre del DataRaptor para que el servicio utilice el DataRaptor.

JSON de salida

El servicio devuelve el Id. de presupuesto del presupuesto recién creado. También devuelve detalles del presupuesto si la entrada de returnQuote es true y el Id. de oportunidad si createOpportunity es true y no se proporciona opportunityId.

{
  "quoteDetail": {
    "stmpbhins04__PrimaryRootItemId__c": "0QLR00000000e3NOAQ",
    "stmpbhins04__TotalPremiumforTerm__c": 2000,
    "stmpbhins04__MonthlyPremium__c": 166.66666666666666,
    "stmpbhins04__StandardPremium__c": 2000,
    "Id": "0Q0R00000000WplKAE",
    "stmpbhins04__EndDate__c": "2022-05-04",
    "stmpbhins04__EffectiveDate__c": "2021-05-05",
    "stmpbhins04__Term__c": "Annual",
    "Name": "Auto Root",
    "OpportunityId": "006R0000002xk8QIAQ",
    "Pricebook2Id": "01sR0000001GULqIAO"
  },
  "quoteId": "0Q0R00000000WplKAE",
  "opportunityId": "006R0000002xk8QIAQ",
  "error": "OK"
}
 
Cargando
Salesforce Help | Article