Actualizado el 18-oct-2026. Primera versión de la arquitectura de esta épica.
Qué responde. Cómo funciona por dentro FT-CAT-03: qué piezas participan, en qué orden hablan, qué APIs hay que construir con su request y su response, y qué le entrega a la épica siguiente.
Para quién. Los equipos que van a construir la épica, QA y arquitectura.
Estado. [Propuesta] del TL del Nuevo PIM, 18-oct-2026, construida sobre ADR-12. La spec de cada épica dice el qué; estas páginas, el cómo.
Fuente. docs/arquitectura/por-epica/epicas/FT-CAT-03.json, generada con generar.py; la ficha de la épica es trazabilidad/features/FT-CAT-03-categorizacion-de-productos.md.
En 30 segundos
Un producto sin categoría web no se ve en la tienda, y hoy todas las categorías se asignan a mano, exportando y recargando archivos. Esta épica asigna la categoría: el seller o el proveedor la elige buscando en el árbol o, al enviar la captura, un agente la calcula con el mapeo de su plantilla o con la IA. Antes de aprobar, la categoría se confirma sola si la confianza alcanza; si no, la revisa Category desde su bandeja.
- Módulo dueño: MS-02 Producto. También participan: MS-01 Catálogo, MS-06 Evaluación, MS-15 IA y enriquecimiento.
- Etapa 7 · Calidad y categoría. Recibe «PE-C · Catálogo vigente», «PE-6 · SKU asignado» y entrega «PE-8 · Aprobado».
- APIs: construye 3 y usa 13 que construyen otras épicas.
- Eventos: publica 4 y consume 1.
1. Dónde encaja
Recibe
| De | Qué |
|---|---|
| PE-C · Catálogo vigente | El árbol de categorías publicado y el mapeo plantilla ↔ categoría web, en Catálogo. |
| FT-CAT-01 · Administración del árbol de categorías web | Las hojas del árbol, la búsqueda por nombre y qué categorías son restringidas, con sus requisitos. |
| FT-PLT-05 · Taxonomía de plantillas por familia, metadatos de… | La taxonomía de plantillas por familia, base del mapeo. |
| FT-RAC-01 · Motor de validación en línea y candados de datos… | La propuesta enviada: el momento en que el agente calcula su categoría, antes del score y del SKU. |
| PE-6 · SKU asignado | El producto en enriquecimiento, donde la categoría se confirma antes de aprobar. |
| FT-RAC-03 · Publicación por rangos de score y revisión de calidad… | QA aprobado: el momento en que se revisa si la categoría necesita a Category. |
| FT-IA-04 · Integración de los modelos de IA existentes | La categoría web sugerida con su certeza cuando la plantilla no tiene mapeo. |
| FT-MIG-05 · Remediación | Los faltantes que llegaron sin categoría, en la tarea Category, para que el equipo de categorías complete sólo lo pendiente. |
Entrega
| A | Qué |
|---|---|
| PE-8 · Aprobado | La categoría web aprobada en el producto; si era la última tarea que bloqueaba, el producto queda Aprobado y se pide su publicación. |
| FT-RAC-02 · Score de calidad del producto | En Marketplace, la categoría calculada antes del score. |
| FT-INT-01 · Publicación a e-commerce | Las categorías web del producto para publicar; sin categoría no se publica. |
| FT-FLU-05 · Reglas de negocio en la carga masiva | El mismo cálculo de categoría (mapeo y, si falta, IA) para cada renglón de la carga masiva. |
| FT-FLU-02 · Alta individual de Marketplace | El agente de categoría dentro del alta individual de Marketplace. |
Cambios de estado que hace
| Transición | De → a | Cuándo |
|---|---|---|
| T08 | En enriquecimiento → Aprobado | Calidad aprobada y sin tareas que bloqueen. |
Tareas que abre o cierra: Category.
2. Diagrama de contexto
Quién participa y cómo se conecta. Las pantallas llegan por el BFF del portal, que valida el token y compone; cada módulo vuelve a validar el token y decide sus permisos con los roles de MS-13.
🟩 Verde: nuevo, se construye · 🟦 Azul: ya existe y se queda, se reutiliza su código · 🟧 Naranja: temporal o se retira (se apaga en R3) · ⬜ Gris: sistema externo · ★ módulo dueño
3. Diagrama de flujo
El camino principal, paso por paso. Cuando una pantalla llama a un módulo se ven dos flechas: la pantalla al BFF y el BFF al módulo. Los eventos salen del outbox del módulo después de guardar; quien los consume ignora los repetidos.
Los pasos en texto
| Paso | De | A | Qué hace | API o evento |
|---|---|---|---|---|
| 1 | MS-02 Producto | Base pim | Al aprobar QA, revisa la categoría que quedó al enviar | — |
| 2 | MS-02 Producto | MS-01 Catálogo | Confirma que siga siendo una hoja publicada | API-01-036 |
| 3 | MS-02 Producto | Base pim | Abre Category si no alcanza la confianza o cae en la muestra | — |
| 4 | MS-02 Producto | Eventos | Avisa la tarea abierta | catalog.product.changed/TASK_CHANGED |
| 5 | QA y Category | Entrada Única · Vendor Center | Abre su bandeja de Category | — |
| 6 | Entrada Única · Vendor Center | MS-02 Producto (por el BFF) | Pide sus tareas de Category | API-02-032 |
| 7 | Entrada Única · Vendor Center | MS-02 Producto (por el BFF) | Pide otras sugerencias si la propuesta no convence | API-02-110 |
| 8 | QA y Category | Entrada Única · Vendor Center | Confirma o cambia la categoría | — |
| 9 | Entrada Única · Vendor Center | MS-02 Producto (por el BFF) | Pide el plan de la categoría elegida | API-02-016 |
| 10 | Entrada Única · Vendor Center | MS-02 Producto (por el BFF) | Confirma el plan | API-02-057 |
| 11 | MS-02 Producto | Base pim | Cierra Category; sin otra tarea que bloquee, pasa a Aprobado | — |
| 12 | MS-02 Producto | Eventos | Avisa la categoría aprobada | catalog.product.changed/CLASSIFICATION_CHANGED |
| 13 | MS-02 Producto | Eventos | Avisa que el producto quedó Aprobado | catalog.product.changed/STATUS_CHANGED |
| 14 | MS-02 Producto | Eventos | Pide publicar en los canales de su negocio | catalog.product.publication/PUBLICATION_REQUESTED |
3.1 Al enviar, el agente calcula la categoría
3.2 El seller elige la categoría en el árbol
3.3 Mantener el mapeo plantilla ↔ categoría
4. Si algo sale mal
- La plantilla no tiene mapeo y la IA no alcanza el umbral. Se guarda la mejor sugerencia marcada como automática con su confianza; al aprobar QA se abre Category con las sugerencias y no se aprueba hasta que Category confirme.
- La categoría se desligó o dejó de estar publicada después de asignarla. La revisión del paso 2 lo detecta y abre Category con el motivo «la categoría ya no está publicada»; el producto no se aprueba con una categoría que la tienda no tiene.
- La IA (MS-15) no responde. Se usa sólo el mapeo; si tampoco hay mapeo, el producto sigue sin categoría y Category recibe la tarea con el motivo «sin sugerencia».
- El seller elige una categoría restringida sin sus documentos. El plan le muestra los requisitos; según lo que diga Catálogo, bloquea o avisa, y el candado de publicación (FT-RAC-01) no deja aprobar sin cumplirlos.
- Category no atiende la tarea a tiempo. El reloj de plazos de MS-02 le recuerda y, al vencer, la pasa a la cola del líder de Category; el seller ve «En revisión de categoría» con su fecha.
5. APIs
Las que construye esta épica (3)
POST /api/v2/products/{id}/category-suggestions · Sugerir la categoría web
| Campo | Valor |
|---|---|
| API | API-02-110 · MS-02 Producto |
| Para qué | Propone la categoría web del producto: primero la del mapeo de su plantilla en Catálogo y, si no hay mapeo, la que sugiere la IA; cada una con su ruta, su fuente, su confianza y si alcanza el umbral. No escribe nada. |
| En esta épica | Sugerir categorías con su fuente y su confianza |
| Quién la llama | BFF del portal |
| Permiso | El proveedor o seller dueño; Category |
| Cabeceras | Authorization, X-Request-Id |
| Parámetros | id = PRD-0004812 |
Request
{
"siteIds": [
"LIVERPOOL"
],
"max": 3
}
Response · 200
{
"success": true,
"data": {
"productId": "PRD-0004812",
"templateId": "EU4-0412",
"suggestions": [
{
"categoryId": "catst0012345",
"site": "LIVERPOOL",
"path": "Ropa > Hombre > Playeras",
"source": "MAPPING",
"confidence": 1.0,
"meetsThreshold": true,
"restricted": false
},
{
"categoryId": "catst0012390",
"site": "LIVERPOOL",
"path": "Deportes > Ropa deportiva > Playeras",
"source": "AI",
"confidence": 0.71,
"meetsThreshold": false,
"restricted": false
}
]
}
}
Errores
| HTTP | Código | Cuándo |
|---|---|---|
| 404 | NOT_FOUND | El producto no existe o no es visible para quien llama |
| 422 | BUSINESS_ERROR | El producto todavía no tiene plantilla |
| 503 | DEPENDENCY_UNAVAILABLE | Ni el mapeo ni la IA respondieron; se elige a mano en el árbol |
POST /api/v2/products/classifications/plans · Asignar plantilla o categorías web
| Campo | Valor |
|---|---|
| API | API-02-016 · MS-02 Producto |
| Para qué | Prepara asignar, quitar o reemplazar la plantilla o las categorías web de hasta 100 productos y revisa cada regla: sólo hojas publicadas, sólo en el padre, una plantilla por producto, una categoría por sitio salvo permiso de Category, y los requisitos de una categoría restringida. |
| En esta épica | Asignar, cambiar o quitar categorías con las reglas de hojas, padre y sitio |
| Quién la llama | BFF del portal |
| Permiso | CLA-E; el proveedor o seller dueño para su propuesta en Borrador; Category después |
| Cabeceras | Authorization, X-Request-Id, Idempotency-Key |
| Publica | catalog.product.changed/CLASSIFICATION_CHANGED |
| También la usan | FT-ACT-06, FT-CAT-01, FT-CAT-04, FT-CAT-05, FT-FLU-02, FT-IA-02, FT-IA-04, FT-PLT-05 |
Request
{
"items": [
{
"productId": "PRD-0004812",
"version": 9
}
],
"structure": "WEB_CATEGORIES",
"op": "ASSIGN",
"nodeIds": [
"catst0012345"
],
"source": "MANUAL"
}
Response · 200
{
"success": true,
"data": {
"planId": "pln-c73a10",
"expiresAt": "2026-10-18T17:05:00Z",
"summary": {
"ok": 1,
"blocked": 0,
"withWarnings": 1
},
"items": [
{
"productId": "PRD-0004812",
"result": "OK",
"before": [],
"after": [
"catst0012345"
],
"site": "LIVERPOOL",
"path": "Ropa > Hombre > Playeras",
"restriction": null,
"warnings": [
{
"code": "OUTSIDE_MAPPING",
"message": "No es la categoría del mapeo de la plantilla; Category la revisará"
}
]
}
],
"applyUrl": "/api/v2/product-plans/pln-c73a10/apply"
}
}
Errores
| HTTP | Código | Cuándo |
|---|---|---|
| 422 | VALIDATION_ERROR | La categoría no es hoja o no está publicada |
| 422 | BUSINESS_ERROR | Se intenta categorizar una variante: la categoría va en el padre |
| 422 | BUSINESS_ERROR | Una segunda categoría en el mismo sitio sin permiso de Category |
| 422 | VALIDATION_ERROR | Dos plantillas para el mismo producto |
| 409 | VERSION_CONFLICT | El producto cambió después de seleccionarlo |
POST /internal/governance/rules/web-category-classify · Categorías web de una plantilla
| Campo | Valor |
|---|---|
| API | API-01-205 · MS-01 Catálogo |
| Para qué | Resuelve el mapeo plantilla ↔ categoría web (regla TEMPLATE_WEB_CATEGORY): con una plantilla y un negocio devuelve las hojas publicadas que le tocan por sitio, con si son restringidas; con una categoría devuelve las plantillas que le corresponden. Lo llama MS-02 al calcular la categoría y al bajar la plantilla de carga de una hoja. Es lo que FT-CAT-03 pidió como PEDIDA-CAT-03-1. |
| En esta épica | Resolver el mapeo plantilla ↔ categoría web en Catálogo |
| Quién la llama | MS-02 Producto |
| Permiso | Sólo MS-02 (cuenta de servicio) |
| Cabeceras | Authorization, X-Request-Id |
Request
{
"templateId": "EU4-0412",
"business": "MKP",
"siteIds": [
"LIVERPOOL"
]
}
Response · 200
{
"success": true,
"data": {
"templateId": "EU4-0412",
"business": "MKP",
"categories": [
{
"categoryId": "catst10045",
"siteId": "LIVERPOOL",
"path": "Ropa > Caballero > Camisas de vestir",
"isLeaf": true,
"publication": {
"status": "PUBLICADO",
"version": 8
},
"restricted": false
}
],
"rule": {
"ruleId": "rul-088120",
"type": "TEMPLATE_WEB_CATEGORY",
"version": 3
}
}
}
Errores
| HTTP | Código | Cuándo |
|---|---|---|
| 404 | NOT_FOUND | La plantilla o la categoría no existen |
| 400 | VALIDATION_ERROR | No llega ni plantilla ni categoría, o un sitio no existe |
Las que usa y construye otra épica (13)
Su request y su response están en la página de la épica que la construye.
| API | Método y ruta | Para qué, aquí | La construye |
|---|---|---|---|
| API-01-036 | GET /api/v2/categories/{id} | Confirmar que la categoría sea hoja publicada y saber si es restringida | FT-CAT-01 · Administración del árbol de categorías web |
| API-02-032 | GET /api/v2/tasks | La bandeja de tareas Category | FT-PRD-06 · Bandeja de pendientes y depuración de borradores… |
| API-02-057 | POST /api/v2/product-plans/{planId}/apply | Confirmar la categoría | FT-FLU-01 · Motor de estados configurable con dos carreteras y reglas… |
| API-15-002 | POST /api/v2/ai/category-suggestions | Sugerencia de categoría web con su certeza cuando no hay mapeo | FT-IA-04 · Integración de los modelos de IA existentes |
| API-06-006 | POST /api/v2/scores | Calcular el score de Marketplace ya con la categoría | FT-RAC-02 · Score de calidad del producto |
| API-01-035 | GET /api/v2/categories | Buscar categorías por nombre | FT-CAT-01 · Administración del árbol de categorías web |
| API-01-037 | GET /api/v2/categories/{id}/children | Navegar a las hijas de una categoría | FT-CAT-01 · Administración del árbol de categorías web |
| API-02-045 | GET /api/v2/product-imports/profiles/{p}/template | Bajar la plantilla de carga masiva que le toca a la hoja elegida | FT-FLU-04 · Carga masiva de productos por archivo |
| API-01-031 | POST /api/v2/catalog-imports | Validar el archivo de carga inicial del mapeo | FT-PLT-09 · Carga masiva de configuración de plantillas con… |
| API-01-032 | POST /api/v2/catalog-imports/{id}/apply | Aplicar la carga inicial del mapeo | FT-PLT-09 · Carga masiva de configuración de plantillas con… |
| API-01-017 | POST /api/v2/rules/plans | Mantener una regla de mapeo plantilla ↔ categoría | FT-PLT-07 · Reglas de atributos |
| API-02-030 | GET /api/v2/workflow/config/{type} | Leer el porcentaje de la muestra de revisión por negocio (SWITCHES del motor) | FT-FLU-01 · Motor de estados configurable con dos carreteras y reglas… |
| API-02-031 | POST /api/v2/workflow/config/{type}/plans | Cambiar el porcentaje de la muestra de revisión | FT-FLU-01 · Motor de estados configurable con dos carreteras y reglas… |
6. Eventos
Publica
| Evento | Cuándo | Quién lo consume |
|---|---|---|
catalog.product.changed/CLASSIFICATION_CHANGED | El agente asigna la categoría al enviar, el seller la elige o Category la confirma o la cambia | FT-ACT-05, FT-ACT-06, FT-CAT-05, FT-IA-02, FT-IA-04 |
catalog.product.changed/TASK_CHANGED | Se abre o se cierra la tarea Category | FT-ACT-05, FT-ACT-06, FT-ARQ-02, FT-CAT-06, FT-FLU-01, FT-IA-06, FT-PRD-02, FT-PRD-05, FT-PRD-06, FT-PRD-07, FT-PRD-08, FT-RAC-02, FT-RAC-03, FT-RAC-04, FT-RAC-05, FT-RAC-06 |
catalog.product.changed/STATUS_CHANGED | Al cerrar Category ya no queda otra tarea que bloquee y el producto pasa a Aprobado | FT-ACT-05, FT-ARQ-02, FT-CAT-05, FT-FLU-01, FT-IA-04, FT-PRD-02, FT-PRD-04, FT-PRD-06, FT-PRD-10, FT-RAC-03, FT-RAC-05, FT-RAC-06 |
catalog.product.publication/PUBLICATION_REQUESTED | El producto queda Aprobado y se pide publicar en los canales de su negocio | FT-CAT-05, FT-CAT-06, FT-INT-01, FT-INT-02, FT-INT-05, FT-INT-07, FT-PLT-08, FT-PRD-05, FT-RAC-03 |
Consume
| Evento | Para qué | Quién lo publica |
|---|---|---|
catalog.governance.changed/RULE_CHANGED | MS-02 refresca su caché del mapeo plantilla ↔ categoría | FT-CAT-04, FT-PLT-07, FT-REF-02 |
7. Datos
Cada colección tiene un solo dueño, el único que escribe en ella.
| Colección | Dueño | Qué guarda | Esta épica |
|---|---|---|---|
products | MS-02 | La familia del producto con sus variantes, valores, imágenes (URL), clasificaciones, estado, tareas abiertas y rechazos. | escribe |
tasks | MS-02 | Todo el trabajo asignado: visto bueno, corrección, Gobierno de Datos, foto, secciones, QA, revisión del cambio y repoblamiento. | escribe |
product_receipts | MS-02 | El recibo de cada escritura confirmada en el producto (antes operation_receipts). | escribe |
product_outbox | MS-02 | Los cambios del producto que esperan salir como evento (antes outbox). | escribe |
categories | MS-01 | Cada categoría web con su lugar en el árbol y su estado. | lee |
governance_rules | MS-01 | Reglas de captura y clasificación: marcas por plantilla, grupo de artículo a plantilla, alcance del proveedor y lista negra de Marketplace. | lee |
ai_config | MS-15 | Qué modelo atiende cada tarea y con qué umbral. | lee |
product_reference_tables | MS-02 | Configuración del motor de estados y del matching: transiciones, estados externos y pesos. | lee |
8. Historias que cubre
| Historia | Prioridad | Cómo la cubre |
|---|---|---|
| FT-CAT-03·H1 · Elegir la categoría de un producto nuevo buscando o navegando el árbol | P1 | flujo «El seller elige la categoría en el árbol»; API-01-035, API-02-045 |
| FT-CAT-03·H2 · Que un agente calcule la categoría web al terminar la captura | P1 | flujo «Al enviar, el agente calcula la categoría»; API-01-205, API-15-002, API-06-006 |
| FT-CAT-03·H3 · Mantener el mapeo plantilla ↔ taxonomía con una carga inicial | P1 | flujo «Mantener el mapeo plantilla ↔ categoría»; API-01-017 |
| FT-CAT-03·H4 · Avanzar aunque no exista una categoría adecuada, sin ticket | P1 | flujo «El seller elige la categoría en el árbol» |
| FT-CAT-03·H5 · Revisar la categoría asignada y un porcentaje de lo asignado por proveedor o IA | P2 | pasos 1, 3, 5, 6, 7, 8, 9, 10; API-02-030, API-02-031 |
| FT-CAT-03·H6 · Ligar productos sólo a hojas y en el padre | P2 | flujo «El seller elige la categoría en el árbol»; API-02-016 |
| FT-CAT-03·H7 · Controlar los productos en dos categorías (p | P3 | API-02-016 |
| FT-CAT-03·H8 · Categorías restringidas | P2 | flujo «El seller elige la categoría en el árbol»; API-01-036 |
9. Decisiones de esta épica
Las tomó el TL como arquitecto; quedan como [Propuesta] hasta que el equipo de la épica las revise.
- D-CAT-03-1. La categoría no es un estado. El agente la calcula al enviar la captura, antes del score y del SKU: primero con el mapeo de la plantilla en Catálogo y, si no hay mapeo, con la sugerencia de la IA de MS-15. Queda marcada como automática, con su fuente y su confianza. Por qué: Es lo que acordó el taller: categoría calculada por mapeo tras capturar todo, sin estado propio. Se apoya en DEC-25, RN-CAT-07, RN-CAT-08.
- D-CAT-03-2. Un producto no se aprueba sin al menos una categoría web que sea hoja y esté publicada. Por qué: Sin categoría no se ve: 23 mil productos sin categoría tumbaron los visibles de un seller. Conserva lo que hoy exige la etapa Category de P360. Se apoya en PD-22, RF-PUB-06, RN-PUB-01.
- D-CAT-03-3. Se conserva la tarea Category, pero sólo se abre al aprobar QA cuando hace falta: confianza bajo el umbral, plantilla sin mapeo, categoría elegida fuera del mapeo, categoría restringida o producto en la muestra de revisión (por negocio; arranca en 5 %). Mientras está abierta, bloquea el Aprobado. Por qué: Revisar todo repetiría el cuello de botella de hoy; no revisar nada deja pasar errores de la IA. La muestra cumple «revisar un porcentaje». Se apoya en P-37, PEN-40.
- D-CAT-03-4. El mapeo plantilla ↔ categoría web es una regla de clasificación de Catálogo (tipo nuevo en governance_rules), con carga inicial para todas las categorías base; MS-02 la consulta con caché y no la copia. Por qué: Plantillas, categorías y reglas de clasificación ya son de Catálogo; el mapeo hoy no existe y nace vacío. Se apoya en RF-CAT-05, ADR-12.
- D-CAT-03-5. Sólo hojas y sólo en el padre: la variante hereda la categoría. Un producto puede tener una categoría por sitio (por ejemplo, Liverpool y Suburbia); una segunda en el mismo sitio sólo con permiso de Category. Desligar borra sólo la relación. Por qué: Paridad con P360 y control central de la doble categoría que pidió el taller. Se apoya en PEN-43, DMS-36.
- D-CAT-03-6. Si ninguna categoría sirve, el seller no se detiene: deja su propuesta en texto y se abre Category, que asigna una existente o pide la nueva en Catálogo (FT-CAT-01). Sin tickets. Por qué: Hoy se levanta un ticket y el producto espera; la tarea deja rastro y no frena la captura. Se apoya en PEN-15, DEC-27.
- D-CAT-03-7. Una categoría restringida trae en Catálogo sus documentos, sus requisitos y si bloquea o avisa; al elegirla, el plan los muestra y el candado de publicación no deja aprobar sin cumplirlos. Por qué: Evita publicar y retirar después productos como medicamentos con receta. Se apoya en FT-CAT-01, RF-CAL-05.
- D-CAT-03-8. El umbral de confianza de la categoría vive en la configuración de MS-15 y el porcentaje de la muestra, en la configuración del motor de MS-02 (SWITCHES). Por qué: Cada modelo de IA califica su resultado con el umbral de su tarea; la muestra es una regla de flujo, no de IA. Se apoya en PEN-40, DUD-35.
Qué falta decidir
| ID | Qué falta |
|---|---|
| PD-22 | Ratificar con Category y Publicación que no se aprueba sin categoría. |
También siguen abiertos: PEN-40, Confirmar quién revisa y qué porcentaje de lo asignado por proveedor o IA (aquí arranca en 5 %); PEN-15, Definir cómo se crea una categoría nueva cuando ninguna sirve; PEN-43, Fijar la regla de homologación de la doble categoría; PEN-41, Medir el parecido entre la taxonomía de plantillas y el árbol web, que sostiene el mapeo; PEN-130, Confirmar si la «categoría» que se elige para la carga masiva es la del árbol web.
Fuentes
- [D]
trazabilidad/features/FT-CAT-03-categorizacion-de-productos.md: la ficha de la épica, con sus historias, reglas y bloqueos. - [D] ADR-12 · Un solo sistema: backend compartido y una sola base (sección 3.4).
- [D]
docs/arquitectura/por-epica/base/: piezas, colecciones, eventos y el hilo de punta a punta. - [D]
docs/arquitectura/omega-a-pim-headless/contratos-api.md: convenciones y endpoints de partida. - [D]
docs/arquitectura/maquina-de-estados-to-be/propuesta-maquina-de-estados.md§7: estados, tareas y canales. - [I] Las decisiones de la sección 9 son del TL sobre esas fuentes.