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 esté ejecutando 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

      Requerido 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 partes aseguradas, utilizando la productCode de cada especificación como una clave.

    • Term__c

      Utilice esta opción 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 del 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 de la partida asegurada principal y las partidas de presupuesto de la parte asegurada secundaria tienen una relación muchos:muchos. Estas relaciones se almacenan en el objeto Relación de partida 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, Joan Smith y 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. La ParentItemId2__c de todas las partidas de presupuesto apunta a la SubParentItemId__c de coberturas rootItem.Id. secundarias apunta al elemento asegurado principal. Los campos de ItemName__c de partidas de presupuesto de partidas de presupuesto de partidas aseguradas y partidas de presupuesto de partes aseguradas 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 ninguna opportunityId, crea un registro Oportunidad utilizando el nodo JSON 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 calcular 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 comisiones):

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

  • Si el campo taxAmount se especifica en un registro JSON, el campo TaxAmount__c se establece en 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 en 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, deberá llamar al servicio InsProductJSONService:trimOffAttributeCategory primero.

El flujo para hacer 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 DataRaptor que puede incluir la asignación entre atributos y sus campos adicionales en el objeto Partida de presupuesto

  4. Llamada de servicio InsQuoteService:createUpdateQuote

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 de ruta parent:childnode:childnode.

Para llegar a la ruta de datos correcta, inscríbala 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 partida 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, ingrese : optionsMap.recalculateTaxesAndFees = false.

createOpportunity

true o false

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

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 las 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 en true, también necesita ingresar 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. de código de producción.

productionCodeName

Opcional.

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

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

runEligibilityRequiredDefaultSelectedRules

Opcional.

Los valores predeterminados son true.

Determina si se ejecutan las reglas Aptitud y Valor 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 solo se aplica a pares de clave/valor para presupuestos raíz, no partidas de presupuesto. Para partidas de presupuesto, agregue additionalFields utilizando el JSON de productConfigurationDetail.

insuredItems

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

Independientemente de que su presupuesto incluya una única instancia de un elemento asegurado o múltiples elementos asegurados, aplique 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 ninguna opportunityId, el servicio crea un nuevo registro Oportunidad utilizando el nodo JSON OpportunityDetails desde el inputKey. Utilice el OpportunityDetails:FieldName de formato de entrada. 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

De manera alternativa, puede definir una transformación DataRaptor que asigne los datos que se pasan 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 de 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