> For the complete documentation index, see [llms.txt](https://docs.myaurelia.app/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.myaurelia.app/es/primeros-pasos/motor-de-kpi.md).

# Motor de KPI

### Descripción general <a href="#overview" id="overview"></a>

Hotel360 procesará archivos de informe KPI recibidos por correo electrónico o cargados en el File Cabinet. El proceso lee los archivos adjuntos de informes PMS compatibles, asigna los valores del informe a los registros de configuración de KPI y crea o actualiza filas de Estadística de habitación.

Tipos de informe admitidos:

| Tipo de informe | Informe                             | Propósito                                                                            |
| --------------- | ----------------------------------- | ------------------------------------------------------------------------------------ |
| `BKFST`         | Informe de desayuno                 | Carga las métricas diarias de desayuno desde la columna Day.                         |
| `RESSTAT2`      | Estadísticas de segmento de mercado | Carga las métricas del segmento de mercado del período actual por código de mercado. |

El proceso está diseñado para la revisión funcional. Cada archivo procesado obtiene un registro de Procesamiento de informe KPI que muestra si los valores se cargaron, se omitieron o fallaron.

Flujo actual:

1. El complemento de correo electrónico enruta los archivos adjuntos admitidos a la carpeta de origen de informes KPI configurada para la configuración de Property correspondiente.
2. El script programado KPI Email Report Processor analiza las carpetas de origen configuradas.
3. El script programado identifica el tipo de informe a partir del segundo token separado por guion bajo en el nombre del archivo, analiza los archivos compatibles, aplica la configuración de Source Key de Email Report Mapping y hace upsert de filas de Estadística de habitación.

### Registros principales <a href="#main-records" id="main-records"></a>

| Registro                                     | Propósito                                                                                       |
| -------------------------------------------- | ----------------------------------------------------------------------------------------------- |
| Configuración de la propiedad                | Almacena el código del hotel, la subsidiaria y las carpetas de informes KPI.                    |
| Asignación de informe por correo electrónico | Define cómo los valores de origen del informe se asignan a las filas de KPI Setup.              |
| Procesamiento de informe KPI                 | Registro de revisión para cada archivo recibido.                                                |
| Configuración de KPI                         | Proporciona los valores de KPI Code y Account usados en las filas de Estadística de habitación. |
| Estadística de habitación                    | Valores finales del motor KPI creados o actualizados por el proceso.                            |

### Configuración de propiedad requerida <a href="#required-property-setup" id="required-property-setup"></a>

Cada propiedad que reciba informes KPI debe tener estos campos completados en el registro de configuración de Property.

| Campo                             | Propósito                                                           |
| --------------------------------- | ------------------------------------------------------------------- |
| Carpeta de origen de informes KPI | Carpeta donde se reciben los archivos de informe entrantes.         |
| Carpeta procesada de informes KPI | Carpeta a la que se mueven los archivos procesados correctamente.   |
| Carpeta de error de informes KPI  | Carpeta a la que se mueven los archivos ilegibles o no compatibles. |

El código del hotel del nombre del archivo debe coincidir con el Hotel Code de la configuración de Property.

Ejemplo:

`Hotel Code de la configuración de Property: OKUAGP`&#x20;

`Archivo entrante: OKUAGP_BKFST_20260430.html`

### Convención de nombres de archivo <a href="#file-naming-convention" id="file-naming-convention"></a>

Los archivos deben usar este patrón:

`{hotelCode}_{reportType}_...`

Ejemplos:

`OKUAGP_BKFST_20260430.html OKUAGP_RESSTAT2_20260430_res_statistics2.XML`

Recomendado:

* Incluya la fecha del informe en `YYYYMMDD` formato cuando sea posible.
* Use `BKFST` para informes de desayuno.
* Use `RESSTAT2` para informes de estadísticas de segmento de mercado.
* El tipo de informe se identifica solo a partir del segundo token del nombre del archivo delimitado por guion bajo. La carpeta identifica la bandeja de entrada de la configuración de Property, no el tipo de informe.

Comportamiento de la fecha:

1. El proceso primero intenta leer la fecha del contenido del informe.
2. Si no se encuentra una fecha del informe, usa la fecha del nombre del archivo.
3. Si no hay ninguna de las dos, puede usar la fecha de recepción/creación del File Cabinet.

Para una prueba limpia y trazabilidad, incluya la fecha en el nombre del archivo.

### Asignación de informe por correo electrónico <a href="#email-report-mapping" id="email-report-mapping"></a>

El registro de Email Report Mapping indica al proceso qué valores del informe deben cargarse en Estadística de habitación. Asigna las Source Keys del informe a las filas de KPI Setup; no almacena XPath ni rutas XML.

Campos requeridos:

| Campo                | Qué ingresar                                                                         |
| -------------------- | ------------------------------------------------------------------------------------ |
| Nombre               | Cualquier nombre claro, como `OKUAGP BKFST CaptureRate`.                             |
| Propiedad            | El registro de configuración de Property.                                            |
| Tipo de informe      | Seleccionar `BKFST` o `RESSTAT2`.                                                    |
| Código de mercado    | Se deja en blanco/deshabilitado automáticamente para BKFST. Requerido para RESSTAT2. |
| Clave de origen      | La etiqueta de la métrica del informe.                                               |
| Configuración de KPI | La fila de KPI Setup que debe recibir el valor.                                      |

Importante:

* La fila de KPI Setup seleccionada debe tener **Código KPI** completado.
* La fila de KPI Setup seleccionada debe tener **Cuenta** completado.
* No se permiten asignaciones activas duplicadas para la misma Property, tipo de informe, código de mercado y Source Key.
* El KPI Code se convierte en el valor KPI de Estadística de habitación.
* La Account se convierte en el valor H360 KPI de Estadística de habitación.

### Asignación BKFST <a href="#bkfst-mapping" id="bkfst-mapping"></a>

Las asignaciones BKFST no usan Market Code. Cuando el tipo de informe es BKFST, Market Code se limpia y se deshabilita.

Cree una asignación para cada métrica que deba cargarse:

| Tipo de informe | Código de mercado | Clave de origen          |
| --------------- | ----------------- | ------------------------ |
| `BKFST`         | en blanco         | `NumberOfAdults`         |
| `BKFST`         | en blanco         | `NumberOfChildren`       |
| `BKFST`         | en blanco         | `NumberOfBreakfastsSold` |
| `BKFST`         | en blanco         | `CaptureRate`            |

Cada fila debe apuntar al registro de KPI Setup correcto para esa métrica.

Comportamiento del analizador:

* El procesador programado extrae filas de tabla del contenido del informe.
* Encuentra cada métrica BKFST por la etiqueta de fila normalizada.
* Encuentra la `Day` columna por el texto del encabezado y carga el valor de esa columna.

Orientación del archivo de ejemplo:

* En el ejemplo usado `OKUAGP_BKFST_20260430.html`, la sección Summary está en la segunda tabla.
* `td[2]` es Day, `td[3]` es Month, y `td[4]` es Year para las filas Summary de ejemplo.
* Las posiciones de la tabla son útiles para la revisión, pero la implementación se basa en etiquetas y no en XPath.

Valores de ejemplo esperados del informe de desayuno de muestra:

| Clave de origen          | Valor   |
| ------------------------ | ------- |
| `NumberOfAdults`         | `141`   |
| `NumberOfChildren`       | `2`     |
| `NumberOfBreakfastsSold` | `55`    |
| `CaptureRate`            | `38.46` |

Resultado esperado:

* 4 filas de Estadística de habitación para la fecha del informe.
* Market Code en blanco.
* El External ID incluye `_NONE_` para el código de mercado y el KPI Code asignado.

Ejemplo de External ID:

`OKUAGP-2026-04-30-_NONE_-<mappedKpiCode>`

### Asignación RESSTAT2 <a href="#resstat2-mapping" id="resstat2-mapping"></a>

Las asignaciones RESSTAT2 usan tanto Market Code como Source Key. Market Code es obligatorio. El analizador lee cada `G_SUBGROUP` `MASTER_VALUE` como Market Code y cada `G_HEADING1` `HEADING_1` como Source Key. Los valores se cargan desde `SUM_AMOUNT`, no desde `FORMATTED_AMOUNT`, para conservar la precisión completa.

Ejemplo de asignaciones de prueba enfocadas:

| Tipo de informe | Código de mercado | Clave de origen            | Valor de muestra esperado |
| --------------- | ----------------- | -------------------------- | ------------------------- |
| `RESSTAT2`      | `CI`              | `N.º de habitaciones`      | `50`                      |
| `RESSTAT2`      | `CI`              | `Ingresos de habitaciones` | `3254.63636363636`        |
| `RESSTAT2`      | `TA`              | `N.º de huéspedes`         | `888`                     |
| `RESSTAT2`      | `Total general`   | `ADR`                      | `85.7924977586516`        |

Source Keys comunes de RESSTAT2:

`N.º de habitaciones Ingresos de habitaciones Ingresos de F&B Ingresos varios ADR % ocup. N.º de huéspedes % ocup. múltiple Ocup. individual Ocup. múltiple.`

Market Codes comunes de RESSTAT2 de la muestra:

`CI CJ OR PA PB PC PD PK PL TA TB TC TD TE TF TG TH TZ Total general`

Si solo algunas combinaciones RESSTAT2 están asignadas, el archivo aún puede procesarse correctamente con advertencias. Esto es lo esperado para pruebas de asignación parcial.

Ejemplo:

`Valores encontrados: 190 Valores cargados: 4 Valores no asignados: 186 Estado: procesado con advertencias`

### Estados de procesamiento <a href="#processing-statuses" id="processing-statuses"></a>

Los registros de Procesamiento de informe KPI usan estos estados:

| Estado                     | Significado                                                                                         |
| -------------------------- | --------------------------------------------------------------------------------------------------- |
| Pendiente                  | El archivo está esperando ser procesado.                                                            |
| Procesando                 | El archivo se está procesando actualmente.                                                          |
| Procesado                  | El archivo se procesó y todos los valores analizados se asignaron y cargaron.                       |
| Procesado con advertencias | El archivo se procesó y se cargaron los valores asignados válidos, pero se omitieron algunas filas. |
| Error                      | No se pudo leer ni identificar el archivo, o no se cargaron valores utilizables.                    |

### Cómo procesar archivos <a href="#how-to-process-files" id="how-to-process-files"></a>

#### Opción 1 - Ingesta por correo electrónico <a href="#option-1-email-intake" id="option-1-email-intake"></a>

1. Confirme que la configuración de Property tenga configuradas las carpetas de informes KPI.
2. Envíe un correo electrónico a la dirección del complemento de captura de correo de NetSuite.
3. Adjunte un archivo con la convención requerida.
4. Confirme que el archivo aparezca en la carpeta de origen de informes KPI.
5. Ejecute el script programado KPI Email Report Processor, o espere a que se ejecute según su programación si está programado en la cuenta.

#### Opción 2 - Carga manual <a href="#option-2-manual-upload" id="option-2-manual-upload"></a>

1. Cargue el archivo directamente en la carpeta de origen de informes KPI de la configuración de Property.
2. Confirme que el nombre del archivo comience con el código de hotel correcto y tenga `BKFST` o `RESSTAT2` como segundo token separado por guion bajo.
3. Ejecute la implementación del script programado:

`customdeploy_h360_ss_kpi_email_rpt_proc`

4. Revise el registro de Procesamiento de informe KPI.

### Cómo validar un archivo correcto <a href="#how-to-validate-a-successful-file" id="how-to-validate-a-successful-file"></a>

Abra el registro de Procesamiento de informe KPI del archivo.

Para una prueba BKFST completa, los valores esperados son:

| Campo                | Esperado    |
| -------------------- | ----------- |
| Estado               | `Procesado` |
| Valores encontrados  | `4`         |
| Valores cargados     | `4`         |
| Valores no asignados | `0`         |

Luego busque Estadística de habitación por:

`Property / Código de hotel Fecha del informe Valores KPI esperados de External ID creados con el KPI Code asignado`

Para una prueba de asignación parcial RESSTAT2 enfocada, los valores esperados pueden ser:

| Campo                | Esperado                                             |
| -------------------- | ---------------------------------------------------- |
| Estado               | `Procesado con advertencias`                         |
| Valores encontrados  | `190`                                                |
| Valores cargados     | Número de asignaciones configuradas que coincidieron |
| Valores no asignados | Valores encontrados menos valores cargados           |

Confirme que las filas de Estadística de habitación asignadas tengan:

* Fecha correcta.
* Código de hotel / configuración de propiedad correctos.
* Código KPI asignado correcto.
* Valor numérico correcto.
* Código de mercado correcto para RESSTAT2.
* Código de mercado en blanco para BKFST.

### Efectos secundarios esperados <a href="#expected-side-effects" id="expected-side-effects"></a>

La cuenta ya tiene lógica de cálculo de KPI en Estadística de habitación. Cuando se crean filas de Estadística de habitación, el User Event existente del calculador KPI puede crear o actualizar filas de KPI derivados como:

`ADR RevPAR Occupancy RoomsSold`

Estas filas no son creadas directamente por Email Report Mapping. Son un comportamiento existente de KPI derivados y no deben hacer fallar las pruebas H360-763 a menos que generen un problema comercial inesperado.

### Volver a probar un archivo <a href="#retesting-a-file" id="retesting-a-file"></a>

Para la repetición más limpia, cargue una copia nueva del archivo de informe.

Si reutiliza el mismo registro de procesamiento:

1. Vuelva a mover el archivo a la carpeta de origen de informes KPI si se había movido.
2. Abra el registro de Procesamiento de informe KPI.
3. Vuelva a establecer el estado en `Pendiente`.
4. Borre el mensaje de advertencia/error si lo desea.
5. Ejecute de nuevo el script programado.

Nota:

* El procesador puede omitir los registros en estados finales.
* Cargar una copia nueva evita confusiones con registros de procesamiento antiguos.

### Solución de problemas <a href="#troubleshooting" id="troubleshooting"></a>

#### El archivo no apareció en la carpeta de origen <a href="#file-did-not-appear-in-the-source-folder" id="file-did-not-appear-in-the-source-folder"></a>

Verifique:

* El nombre del archivo comienza con el código de hotel correcto.
* El segundo token del nombre del archivo es `BKFST` o `RESSTAT2`.
* Existe una configuración de Property para ese código de hotel.
* La carpeta de origen de informes KPI de la configuración de Property está completada.

#### El registro de procesamiento indica Error - unsupported file <a href="#processing-record-says-error-unsupported-file" id="processing-record-says-error-unsupported-file"></a>

Verifique el tipo de informe en el nombre del archivo.

Ejemplos válidos:

`OKUAGP_BKFST_20260430.html OKUAGP_RESSTAT2_20260430_res_statistics2.XML`

Ejemplos no válidos:

`OKUAGP_BREAKFAST_20260430.html OKUAGP_RES_STATISTICS2.XML`

#### El registro de procesamiento indica que no se cargaron valores KPI <a href="#processing-record-says-no-kpi-values-loaded" id="processing-record-says-no-kpi-values-loaded"></a>

Verifique:

* Existen filas de Email Report Mapping para la Property correcta.
* El tipo de informe coincide exactamente: `BKFST` o `RESSTAT2`.
* La Source Key coincide con la etiqueta del informe.
* El Market Code de RESSTAT2 coincide con el código de mercado del informe.
* KPI Setup tiene KPI Code completado.
* KPI Setup tiene Account completada.

#### RESSTAT2 procesado con muchas advertencias <a href="#resstat2-processed-with-many-warnings" id="resstat2-processed-with-many-warnings"></a>

Esto es normal cuando solo se asigna un subconjunto de combinaciones de Market Code + Source Key. El mensaje de procesamiento resume la cantidad omitida y muestra ejemplos de asignaciones faltantes.

Ejemplo:

`Valores encontrados: 190 Valores cargados: 4 Valores no asignados: 186`

Esto significa que se cargaron cuatro filas asignadas y se omitieron 186 filas analizadas porque no existe ninguna asignación.

#### Archivo de informe KPI movido a Error por configuración <a href="#kpi-report-file-moved-to-error-for-configuration" id="kpi-report-file-moved-to-error-for-configuration"></a>

Confirme:

* El código del hotel del nombre del archivo coincide con el Hotel Code de la configuración de Property.
* No existen filas activas duplicadas de Email Report Mapping para la misma Property, tipo de informe, código de mercado y Source Key.
* Las asignaciones RESSTAT2 tienen Market Code completado.
* Las asignaciones BKFST tienen Market Code en blanco.
* Las filas de KPI Setup seleccionadas tienen KPI Code completado.

#### La fecha de Estadística de habitación no es la fecha esperada del informe <a href="#room-statistic-date-is-not-the-expected-report-date" id="room-statistic-date-is-not-the-expected-report-date"></a>

Verifique el contenido del informe y el nombre del archivo.

Formato de nombre de archivo recomendado:

`OKUAGP_RESSTAT2_20260430_res_statistics2.XML`

Si el informe no contiene una fecha y el nombre del archivo no contiene una `YYYYMMDD` fecha, el proceso puede usar la fecha de recepción del File Cabinet.

### Responsabilidad funcional <a href="#functional-ownership" id="functional-ownership"></a>

Los consultores funcionales son responsables de:

* Confirmar la configuración de carpetas de la configuración de Property.
* Crear y mantener filas de Email Report Mapping.
* Confirmar que las filas de KPI Setup tengan el KPI Code y la Account correctos.
* Revisar los registros de Procesamiento de informe KPI.
* Decidir qué combinaciones de Market Code + Source Key de RESSTAT2 deben asignarse.

El soporte técnico es responsable de:

* Implementación del script.
* Defectos del analizador.
* Errores de procesamiento inesperados.
* Cambios en el enrutamiento de archivos o en el comportamiento de escritura de Estadística de habitación.

### Lista de verificación rápida <a href="#quick-checklist" id="quick-checklist"></a>

Antes de enviar o cargar un informe:

* La configuración de Property tiene carpetas de origen, procesados y error para KPI.
* El nombre del archivo comienza con el código de hotel correcto.
* El nombre del archivo tiene `BKFST` o `RESSTAT2` como segundo token separado por guion bajo.
* Existen filas de Email Report Mapping.
* Las filas de KPI Setup tienen KPI Code y Account completados.

Después del procesamiento:

* El registro de Procesamiento de informe KPI tiene el estado esperado.
* Valores encontrados, valores cargados y valores no asignados tienen sentido.
* Se crearon o actualizaron filas de Estadística de habitación.
* Archivo movido a la carpeta procesada, o a la carpeta de error si falló.
