Loading
Assicurazioni
InsQuoteService:createUpdateQuote

InsQuoteService:createUpdateQuote

Utilizzare questo servizio per creare un preventivo per una nuova attività, aggiornare un preventivo esistente con nuove informazioni o creare un preventivo di conferma. Per gli aggiornamenti, il quoteId del preventivo da aggiornare deve essere incluso nelle opzioni remote.

Nota
Nota

Prima dell'esecuzione di questo servizio, il sistema esegue un controllo utente guest.

Questo servizio può essere utilizzato dagli utenti guest. Un utente guest che esegue un'operazione OmniScript, Procedura di integrazione o interfaccia utente potrà continuare; questo servizio verrà eseguito. Tuttavia, i quoteId e i opportunityId sono crittografati in questi casi, quindi gli utenti guest non possono visualizzare questi ID.

Importante
Importante

Utilizzare il servizio InsQuoteService:createUpdateQuote per aggiornare le voci preventivo e preventivo, anziché utilizzare Omnistudio Data Mapper.

Classe: InsQuoteService

Metodo: createUpdateQuote

Funzionamento

  1. Il servizio cerca il inputKey nel JSON di input. Il nodo inputKey contiene le informazioni necessarie al servizio per creare o aggiornare un preventivo. Le informazioni richieste da questo servizio includono:

    • opportunityId

    • endDate (facoltativo)

    • effectiveDate

    • Record productConfigurationDetail

    • instanceKey

      Obbligatorio per identificare più istanze della stessa specifica

    • insuredItems nodo

      All'interno di questo nodo, il servizio prevede un elenco di specifiche dell'elemento assicurato e delle specifiche della parte assicurata, utilizzando il productCode di ogni specifica come chiave.

    • Term__c

      Utilizzare per aggiornare il campo Term__c del preventivo.

  2. Utilizza le informazioni del JSON di input per creare il preventivo.

  3. Restituisce un ID preventivo nel JSON di output.

  4. Crea un oggetto Preventivo che include le seguenti voci:

    1. Utilizza i prodotti radice definiti in productConfigurationDetail per creare o aggiornare le voci preventivo radice.

    2. Quando si aggiorna un preventivo esistente, vengono aggiunti i record nel productConfigurationDetail che non sono ancora presenti nel preventivo e quelli già presenti nel preventivo vengono aggiornati.

    3. Utilizza le specifiche dell'articolo assicurato, le specifiche dell'assicurato e le specifiche della copertura come voci preventivo: ParentItemId__c = rootItem.Id.

    4. La voce preventivo della voce principale assicurata e le voci preventivo della parte controllata hanno una relazione molti:molti. Queste relazioni sono memorizzate nell'oggetto Relazione voce preventivo. Se una voce preventivo voce assicurata ha relazioni con più voci preventivo assicurato, il campo PrimaryChildLineitemId__c viene utilizzato per determinare quale di queste relazioni è la principale.

      Ad esempio, sia Joan Smith che John Smith guidano la Lexus 250; Joan Smith è impostata come conducente principale. La voce preventivo Lexus 250 ha PrimaryChildLineItemId__c che puntano alla voce preventivo di Joan Smith. Tutti i ParentItemId2__c delle voci preventivo puntano al SubParentItemId__c delle coperture rootItem.Id. Child che punta alla voce principale assicurata. I campi Voce preventivo voce assicurato e ItemName__c voce preventivo assicurato sono memorizzati con il instanceKey di questa voce.

    5. La voce preventivo della voce principale assicurata include il prezzo.

  5. Per i nuovi preventivi, se createOpportunity è true e non viene fornito alcun opportunityId, crea un record Opportunità utilizzando il nodo JSON OpportunityDetails dal inputKey.

  6. Se calculateCommission è true, chiama InsCommissionService.processQuoteCommission, che prepara l'input per il servizio di InsCommissionService.calculate. Dopo che il servizio di calcolo ha elaborato l'input, memorizza il valore della commissione calcolata in Quote.CommissionAmount__c.

Tutti gli utenti che chiamano InsQuoteService:createUpdateQuote devono disporre dell'autorizzazione Lettura per tutti i campi dell'insieme di campi Dettagli preventivo se l'insieme di campi viene aggiunto all'oggetto Voce preventivo.

Se l'insieme di campi Dettagli preventivo non viene aggiunto all'oggetto Voce preventivo, tutti i campi, inclusi quelli personalizzati, sono leggibili per gli utenti.

Supplementi

Ecco come funziona questo servizio con supplementi (tasse e spese):

  • Se il campo taxesAndFees è specificato in un record JSON, viene mantenuto un record QuotePricingAdjustment__c corrispondente per ogni elemento dell'elenco taxesAndFees.

  • Se il campo taxAmount è specificato in un record JSON, il campo TaxAmount__c viene impostato sul valore del campo taxAmount nel QuoteLineItem creato.

  • Se il campo feeAmount è specificato in un record JSON, il campo FeeAmount__c viene impostato sul valore del campo feeAmount nel QuoteLineItem creato.

Aggiunta di campi aggiuntivi alle voci preventivo

Se sono necessari campi aggiuntivi scritti nella Voce preventivo da questo servizio, è necessario chiamare prima il servizio InsProductJSONService:trimOffAttributeCategory.

Il flusso per fare in modo che funzioni in un OmniScript o in una procedura di integrazione è:

  1. Fasi di configurazione del prodotto

  2. InsProductJSONService:chiamata di servizio trimOffAttributeCategory con selectedValueAsObject impostato su true

  3. Trasformazione DataRaptor che può includere la mappatura tra attributi e campi aggiuntivi nell'oggetto Voce preventivo

  4. InsQuoteService:chiamata di servizio createUpdateQuote

Opzioni remote

Opzione

Descrizione

createInsuredItemsRelationships

true o false

Se questa opzione è impostata su true, è possibile specificare un elenco di instanceKey > Relazioni di parentInstanceKey tra voci assicurate.

Questa opzione supporta le relazioni voce controllante > controllato e controllante > controllato > assicurato nipote.

inputKey

Obbligatorio.

Chiave JSON da cui il servizio estrae le informazioni necessarie per creare o aggiornare un preventivo.

Non utilizzare % per racchiudere il valore di questa chiave. Questa chiave rappresenta un nodo JSON, non una variabile.

Poiché questa chiave rappresenta un nodo JSON e non un percorso, non utilizzare la notazione del percorso parent:childnode:childnode.

Per individuare il percorso dati corretto, immetterlo nel campo Invia percorso JSON nella sezione Trasformazione Invia/Risposta quando si aggiunge questa coppia chiave/valore a una fase OmniScript.

insertInstance

true o false

Se impostato su true, il servizio inserisce ulteriori voci preventivo in un preventivo esistente. Non aggiorna l'intestazione del preventivo, la voce radice o qualsiasi voce preventivo controllante.

Utilizzare questa opzione per creare preventivi multiistanza di grandi dimensioni tramite più chiamate al server, in cui il nuovo insieme di voci preventivo delle istanze viene inserito nel preventivo esistente in ogni chiamata.

quoteId

Facoltativo.

ID di un preventivo esistente aggiornato dal servizio in base a informazioni nuove o aggiornate. Utilizzato quando il servizio deve aggiornare un preventivo esistente.

isMultiRoot

Facoltativo.

Flag booleano per indicare se la citazione è una citazione multiradice.

Il valore predefinito è false.

minimizeQliQuerySize

true o false

Se impostato su true, il servizio esegue una query solo sulle voci preventivo interessate. In particolare, le voci preventivo che fanno riferimento al prodotto nel nodo JSON del prodotto di input o nel nodo JSON delle voci assicurate.

populateCalcResults

true o false

Se impostato su false, il servizio non compila sia il campo rootItem.CalculatedPriceJSON_c che il campo Quote.CalculatedPriceJSON_c.

pricebook

Obbligatorio.

Nome del listino prezzi associato alla specifica del prodotto.

Salesforce richiede che i prodotti utilizzati nelle voci preventivo abbiano una voce listino prezzi.

recalculateTaxesAndFees

true o false

Se impostato su true, il servizio ricalcola le imposte e le spese.

Se impostato su false, il servizio non ricalcola le imposte e le spese.

Nota
Nota

Se si imposta questa opzione su false, è necessario aggiungere anche una riga al modello di interfaccia utente ins-coverage-quote-runtime-container.

In ins-coverage-quote-runtime-container.js, alla riga 115 immettere : optionsMap.recalculateTaxesAndFees = false

createOpportunity

true o false

Se impostato su true, se non viene fornita alcuna opportunityId, il servizio crea un nuovo record Opportunità utilizzando il nodo JSON OpportunityDetails dal inputKey. Questo nodo viene mappato ai campi nella sObject opportunità.

returnQuote

true o false

Se impostato su true, l'output del servizio include i dettagli del preventivo nel nodo JSON quoteDetail.

calculateCommission

true o false

Quando è impostato su true, il servizio calcola le commissioni per gli elementi radice e salva l'importo totale in Quote.CommissionAmount.

Se impostato su false (impostazione predefinita), il servizio non calcola le commissioni.

Nota
Nota

Se si imposta questa opzione su true, è necessario immettere anche almeno uno dei valori del produttore o del codice di produzione: primaryProducerId , productionCodeId o productionCodeName.

primaryProducerId

Facoltativo.

ID produttore di trasformazione, ovvero il produttore utilizzato per recuperare i commissionScheduleId e calcolare l'ammontare della commissione.

productionCodeId

Facoltativo.

ID codice di produzione.

productionCodeName

Facoltativo.

Il nome del codice di produzione passato al servizio InsCommissionService.calculate.

Se non si immettono productionCodeId, il servizio utilizza productionCodeName per cercare il productionCodeId. Se si immettono entrambi i valori ma non corrispondono, productionCodeId ha la precedenza.

runEligibilityRequiredDefaultSelectedRules

Facoltativo.

Il valore predefinito è true.

Determina se vengono eseguite le regole Idoneità e Selezionato predefinito.

runRelationshipRules

Facoltativo.

Il valore predefinito è true.

Determina se vengono eseguite le regole di relazione.

runSelectedValivationRules

Facoltativo.

Il valore predefinito è true.

Determina se vengono eseguite le regole Seleziona convalida.

Input JSON

Questo servizio cerca il valore del inputKey. Accedere alla scheda API nella specifica del prodotto per trovare il JSON di input necessario per questo servizio.

Per questo esempio, 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"
          }

Il JSON all'interno del inputKey include diverse coppie chiave/valore necessarie al servizio per creare o aggiornare un preventivo.

Chiave

Valore

opportunityId

ID opportunità generato.

accountId

ID account generato.

endDate

Facoltativo.

Data di scadenza della polizza.

effectiveDate

Data di entrata in vigore della policy.

productConfigurationDetail

Una matrice di record che segue il modello di struttura JSON del prodotto.

Verrà creata o modificata una voce preventivo radice per ogni record prodotto nella matrice.

Per informazioni sulla struttura e i contenuti di un prodotto, vedere il modello di struttura JSON del prodotto.

additionalFields

Facoltativo.

La chiave additionalFields si applica solo alle coppie chiave/valore per le virgolette radice, non alle voci preventivo. Per le voci preventivo, aggiungere additionalFields utilizzando il JSON productConfigurationDetail.

insuredItems

Coppie chiave/valore delle voci assicurate utilizzate dal servizio per creare le voci preventivo per le voci assicurate.

Sia che il preventivo includa una singola istanza di una voce assicurata o più voci assicurate, formattare il nodo insuredItems con una matrice di record.

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

Per una singola istanza di un articolo assicurato che si trova direttamente sotto il prodotto radice nella gerarchia dei prodotti, è possibile utilizzare il formato in questo esempio. I record insuredItems includono le voci assicurate e i valori selezionati dall'utente per ciascuna voce. Questo JSON di input è supportato ma proviene da un rilascio precedente e non è consigliabile.

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

Per i nuovi preventivi, se createOpportunity è true e non viene fornito alcun opportunityId, il servizio crea un nuovo record Opportunità utilizzando il nodo JSON OpportunityDetails dal inputKey. Utilizzare il formato di input OpportunityDetails:FieldName. Di seguito è riportato un esempio di nodo OpportunityDetails.

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

Alternativa preTransformBundle

In alternativa, è possibile definire una trasformazione DataRaptor che mappa i dati passati nel JSON di input nel modulo necessario al servizio. Il JSON di output di questo DataRaptor è il JSON di userInputs definito nella scheda API della visualizzazione prodotto. Impostare l'opzione preTransformBundle sul nome del DataRaptor per fare in modo che il servizio utilizzi il DataRaptor.

JSON di output

Il servizio restituisce l'ID preventivo del preventivo appena creato. Restituisce anche i dettagli del preventivo se l'input returnQuote è true e l'ID opportunità se createOpportunity è true e non viene fornito alcun 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"
}
 
Caricamento
Salesforce Help | Article