Saltar al contenido principal

Cómo trabajar con entidades de JobLines

En InsuranceSuite, la definición de un producto se representa como una estructura de varias entidades relacionadas. Esta estructura se materializa en el SDK de Digital como un tipo de TypeScript de JobLines, que es una composición de los tipos de entidades individuales que forman la definición del producto. Todas las entidades utilizadas por el tipo JobLines en el SDK de Digital se consideran entidades JobLines.

Note: El tipo JobLines se puede importar desde la ruta raíz del SDK de Digital generado.

A diferencia de los esquemas de entidades independientes, que solo utilizan los datos de su propia entidad, las reglas de esquema para las entidades JobLines pueden hacer referencia a los datos de otras entidades dentro del grafo de JobLines.

Por lo tanto, las funciones del esquema del SDK de Digital para estas entidades JobLines requieren los datos de todo el grafo de JobLines como argumento para evaluar las reglas del esquema y validar una entidad determinada. La forma en que operan estas funciones de esquema requiere un manejo especial en las extensiones de la interfaz de usuario del SDK de Digital.

Aspectos que deben tenerse en cuenta sobre la gestión de estados​

Los proveedores de entidades y los ganchos de entidades independientes se pueden utilizar directamente, sin tener que contextualizar su estado dentro de una estructura más grande. Esto se debe a que son autosuficientes y solo dependen de su propio estado.

Sin embargo, las entidades JobLines son interdependientes y necesitan acceso a todo el estado de las JobLines para funcionar correctamente. Esto requiere un enfoque diferente para la gestión de estados en las extensiones de la interfaz de usuario del SDK de Digital.

Estado del grafo de JobLines​

Dado que necesitamos un lugar para almacenar todo el estado del grafo de JobLines, las extensiones de la interfaz de usuario del SDK de Digital incluyen un componente JobLinesProvider y un gancho useJobLines.

Estas exportaciones estarán en el directorio JutroUtils/${sdkName}/${apiName}/JobLines cuando el tipo de JobLines esté disponible en el SDK de Digital para la API determinada.

import {
JobLinesProvider,
useJobLines,
} from 'src/generated/JutroUtils/PcSdk/job/JobLines';

const App = () => (
<JobLinesProvider>
<Page />
</JobLinesProvider>
);

const Page = () => {
// In most cases, you will not need to access the JobLines state directly.
// The entity-level utils will access this state automatically.
const { jobLinesState, setJobLinesState } = useJobLines();

return <pre>{JSON.stringify(jobLinesState, null, 2)}</pre>;
};

Componente JobLinesProvider​

JobLinesProvider crea el estado de React para todo el grafo de JobLines usando el tipo JobLines del SDK de Digital. Usando el contexto de React, hace que el estado de JobLines esté disponible para todos los consumidores secundarios.

Propiedades:

  • defaultValue: Propiedad opcional utilizada para inicializar el estado de JobLines cuando se crea por primera vez. Utiliza el tipo JobLines del SDK de Digital.

Gancho useJobLines​

El gancho useJobLines se debe utilizar dentro de un componente JobLinesProvider. Permite a los consumidores acceder al estado de JobLines y devuelve un objeto con las siguientes propiedades:

  • jobLinesState. Estado de JobLines.
  • setJobLinesState. Función de establecimiento de estados.

Estado de las entidades de JobLines​

Al igual que las entidades independientes, cada entidad JobLines tiene su propio proveedor. Estos proveedores se pueden encontrar en el mismo directorio.

No crean su propio estado, sino que utilizan parte de un estado principal de JobLines. Esto cambia la forma en que se utilizan los proveedores de entidades de JobLines en comparación con los proveedores de entidades estándares:

  • Se deben utilizar dentro de un componente JobLinesProvider.
  • Una nueva propiedad path obligatoria. Los usuarios deben proporcionar la ruta a la ubicación del estado de la entidad dentro del estado de JobLines.
  • La propiedad defaultValue no es compatible, ya que el estado no es creado ni inicializado por el proveedor en sí, sino por JobLinesProvider.
  • Las funciones de esquema y de validación del SDK de Digital se ejecutan cada vez que cambia el estado de JobLines, no solo cuando cambia el estado de la propia entidad. Dado que estas entidades son interdependientes con otras entidades, la ejecución de estas funciones cada vez que cambie el estado de JobLines garantizará que los resultados de validación estén actualizados.

Los consumidores de estos proveedores de entidades (tanto los ganchos como los componentes de campo generados) funcionan de manera similar a las entidades regulares, excepto que los cambios de estado desencadenados por estos consumidores se propagarán al JobLinesProvider.

// Illustrative example of how the entity and JobLines states are connected.
// In most cases you will not need to access the JobLines state directly.

import {
JobLinesProvider,
useJobLines,
} from 'src/generated/JutroUtils/PcSdk/job/JobLines';
import {
UALPersonalVehicleProvider,
useUALPersonalVehicle,
} from 'src/generated/JutroUtils/PcSdk/job/UALPersonalVehicle';

const App = () => (
<JobLinesProvider>
<UALPersonalVehicleProvider path="lines.UALPersonalAutoLine.personal-vehicles[0].data">
<Page />
</UALPersonalVehicleProvider>
</JobLinesProvider>
);

const Page = () => {
const { jobLinesState } = useJobLines();

const { fields } = useUALPersonalVehicle();
const { licensePlate } = fields;
const { setState: setLicensePlateState } = licensePlate;

return (
<div>
<button onClick={() => setLicensePlateState('1234567890')}>
Set license plate
</button>
<h1>JobLines state</h1>
<pre>{JSON.stringify(jobLinesState, null, 2)}</pre>
</div>
);

// After the license plate is set at the entity level,
// the JobLines state will be updated to reflect the change:
//
// {
// "lines": {
// "UALPersonalAutoLine": {
// "personal-vehicles": [{
// "data": {
// "licensePlate": "1234567890"
// }
// }]
// }
// }
// }
};

Características específicas de la cobertura​

Las entidades de cobertura son parte del grafo de JobLines y siguen las mismas reglas de gestión del estado explicadas en esta página. Sin embargo, debido a la forma en que los términos de cobertura se expresan en los esquemas de entidad de InsuranceSuite, hay algunas características adicionales específicas de las entidades de cobertura.

Note: Las entidades de cobertura se pueden identificar en el SDK de Digital y en las extensiones de la interfaz de usuario del SDK de Digital porque a su nombre de directorio se le agrega el sufijo _Coverage (por ejemplo, UALLiability_Coverage).

Ayudantes de términos en los ganchos de entidad​

Los ganchos de entidad para las entidades de cobertura devuelven una propiedad terms adicional, que es un objeto con tantas propiedades como los términos que existen en la entidad de cobertura.

Toda la funcionalidad de los ayudantes de campo también está disponible en los ayudantes de términos, con el beneficio adicional de que estos utilizan automáticamente la propiedad ...Value adecuada en función de covTermType del término.

import { useUALLiability_Coverage } from 'src/generated/JutroUtils/PcSdk/job/UALLiability_Coverage';
// other imports and providers omitted

const Page = () => {
const { terms } = useUALLiability_Coverage();
const { UALLiabilityLiabPack } = terms;
const { setState: setUALLiabilityLiabPackState } = UALLiabilityLiabPack;

return (
<div>
<button onClick={() => setUALLiabilityLiabPackState('P255010')}>
Set UALLiabilityLiabPack
</button>
</div>
);

// Setting the UALLiabilityLiabPack term with the hook term helper will
// automatically use the right "...Value" property for the given "covTermType".
};

Componentes término generados en la entidad​

Además de los componentes campo exportados desde la ruta de la entidad, las entidades de cobertura también exportan un componente de React para cada uno de sus términos.

Estos componentes reciben el nombre de los términos que representan, con el prefijo Term_ y proporcionan la misma funcionalidad que los componentes campo, con el beneficio adicional de poder acceder a la propiedad ...Value correspondiente para el covTermType dado del término, ya que utilizan los ayudantes de término internos.

import { JobLinesProvider } from 'src/generated/JutroUtils/PcSdk/job/JobLines';
import {
UALLiability_CoverageProvider,
Term_UALLiabilityLiabPack,
} from 'src/generated/JutroUtils/PcSdk/job/UALLiability_Coverage';

const Page = () => {
return (
<JobLinesProvider>
<UALLiability_CoverageProvider path="lines.UALPersonalAutoLine.coverages.UALLiability">
<Term_UALLiabilityLiabPack />
</UALLiability_CoverageProvider>
</JobLinesProvider>
);
};

// The Term_UALLiabilityLiabPack component will render a field using the schema
// and state of the corresponding "...Value" property for the given "covTermType".

Estos componentes Term_ también se incluyen en la matriz fieldsList.

Características específicas del elemento programado​

Las entidades de elementos programados son parte del grafo de JobLines y, por consiguiente, siguen las mismas reglas de gestión del estado explicadas en esta página. Sin embargo, debido a la forma en que las propiedades de los elementos programados se expresan en los esquemas de entidad de InsuranceSuite, hay algunas características adicionales específicas de las entidades de elementos programados.

Note: Las entidades de elementos programados se pueden identificar en el SDK de Digital y en las extensiones de la interfaz de usuario del SDK de Digital porque a su nombre de directorio se le agrega el sufijo _Item (por ejemplo, HLLScheduledPersonalProperty_Item).

Ayudantes de la propiedad de elemento programado en los ganchos de entidad​

Los ganchos de entidad para las entidades de elemento programado devuelven una propiedad scheduledItemProperties adicional, que es un objeto con tantas propiedades como las propiedades de elementos programados existan en la entidad de elemento programado.

Toda la funcionalidad de los ayudantes de campo también está disponible en los ayudantes de propiedad de elemento programado, con el beneficio adicional de que estos utilizan automáticamente la propiedad <X>value adecuada en función de la propiedad del elemento programado.

import { useHLLScheduledPersonalProperty_Item } from 'src/generated/JutroUtils/PcSdk/job/HLLScheduledPersonalProperty_Item';
// other imports and providers omitted

const Page = () => {
const { scheduledItemProperties } = useHLLScheduledPersonalProperty_Item();
const { SerialNumber } = scheduledItemProperties;
const { setState: setSerialNumberState } = SerialNumber;

return (
<div>
<button onClick={() => setSerialNumberState('1234567890')}>
Set serial number
</button>
</div>
);

// Setting the SerialNumber scheduled item property with the hook's scheduledItemProperties helper
// will automatically use the right "<X>value" property for the given scheduled item property.
};

Componentes de la propiedad de elemento programado generados en la entidad​

Además de los componentes campo exportados desde la ruta de la entidad, las entidades de elemento programado también exportan un componente de React para cada una de sus propiedades de elemento programado.

Estos componentes reciben el nombre de las propiedades del elemento programado que representan, con el prefijo ItemProp_ y proporcionan la misma funcionalidad que los componentes campo, con el beneficio adicional de poder acceder a la propiedad <X>value correspondiente para la propiedad del elemento programado dada, ya que utilizan el ayudante scheduledItemProperties interno.

import { JobLinesProvider } from 'src/generated/JutroUtils/PcSdk/job/JobLines';
import {
HLLScheduledPersonalProperty_ItemProvider,
ItemProp_SerialNumber,
} from 'src/generated/JutroUtils/PcSdk/job/HLLScheduledPersonalProperty_Item';

const Page = () => {
return (
<JobLinesProvider>
<HLLScheduledPersonalProperty_ItemProvider path="lines.HomeownersLine.coverages.HLLScheduledPersonalProperty">
<ItemProp_SerialNumber />
</HLLScheduledPersonalProperty_ItemProvider>
</JobLinesProvider>
);
};

// The ItemProp_SerialNumber component will render a field using the schema
// and state of the corresponding "<X>value" property for the given scheduled item property.

Estos componentes ItemProp_ también se incluyen en la matriz fieldsList de la entidad de elemento programado.

Características específicas del grupo de cobertura​

Las entidades grupo de cobertura tienen un tipo especial de esquema, en el que no hay campos, sino referencias a otras entidades de cobertura. Por esta razón, los ganchos de entidad no devuelven ayudantes de campo de ningún tipo.

Note: Las entidades de grupo de cobertura se pueden identificar en el SDK de Digital y en las extensiones de la interfaz de usuario del SDK de Digital porque a su nombre de directorio se le agrega el sufijo _Coverages (por ejemplo, UALPersonalAutoLine_Coverages).

Excepto por la ausencia de ayudantes de campo, los ganchos de entidad para las entidades del grupo de cobertura funcionan de la misma manera que cualquier otra entidad. Proporcionan acceso al esquema y al resultado de validación de las coberturas como grupo, lo que podrían diferir del esquema y los resultados de validación de las coberturas cuando se evalúan individualmente.

Matriz de utilidades de cobertura individual​

Además del proveedor y del gancho de entidad, las entidades grupo de cobertura también exportan coveragesList, una matriz de objetos que apuntan a las utilidades de cobertura individual de cada cobertura del grupo.

// Example of a coveragesList array
export const coveragesList: CoveragesListItem[] = [
{
coverageName: 'Coverage1', // Name of the coverage
CoverageProvider: Coverage1_CoverageProvider, // Entity provider for the individual coverage
useCoverage: useCoverage1_Coverage, // Entity hook for the individual coverage
coverageFieldsList: Coverage1FieldsList, // Array of the generated field components for the individual coverage
},
{
coverageName: 'Coverage2',
CoverageProvider: Coverage2_CoverageProvider,
useCoverage: useCoverage2_Coverage,
coverageFieldsList: Coverage2FieldsList,
},
];
Note:
  • La matriz coveragesList se exporta desde la ruta de la entidad del grupo de cobertura (por ejemplo, import { coveragesList } from 'src/generated/JutroUtils/PcSdk/job/UALPersonalAutoLine_Coverages';).
  • La definición de tipo CoveragesListItem es común para todas las entidades de grupo de cobertura y se exporta desde la ruta raíz de las extensiones de interfaz de usuario del SDK de Digital (por ejemplo, import type { CoveragesListItem } from 'src/generated/JutroUtils/PcSdk/job/UALPersonalAutoLine_Coverages';).

Tenga en cuenta que las reglas y los resultados de validación para cada cobertura en esta matriz se evalúan individualmente en lugar de grupalmente.