# IEA - Portal Web y Lirion

Documentación funcional y técnica del proyecto IEA: portal Flutter web, bus de integración con API de iDempiere, backend Lirion, cuentas, solicitudes, cotizaciones, visto bueno, abonos, evaluaciones y materiales requeridos.

# Visión General

Arquitectura, componentes, alcance y glosario del proyecto IEA.

# Resumen del Proyecto

## Alcance funcional

La documentación cubre los flujos principales del portal y del backend:

- Creación de cuenta del Profesional Responsable.
- Registro de Empresa, Titular y Asistente.
- Validación de correo, asignación de roles y aprobación por parte del IEA.
- Creación de solicitudes de análisis y pruebas de negatividad.
- Generación de cotización, aceptación, visto bueno y abono.
- Relación entre evaluaciones, materiales requeridos y avance operativo a estado “En Proceso”.

## Componentes principales

<table id="bkmrk-componenterolfuente-" style="width: 100%; border-collapse: collapse; margin: 12px 0px 20px; height: 222px;"><thead><tr style="height: 41px;"><th style="border: 1px solid rgb(216, 222, 233); padding: 12px; background: rgb(238, 242, 247); text-align: left; height: 41px; width: 24.8215%;">Componente</th><th style="border: 1px solid rgb(216, 222, 233); padding: 12px; background: rgb(238, 242, 247); text-align: left; height: 41px; width: 75.29769%;">Rol</th></tr></thead><tbody><tr style="height: 66px;"><td style="border: 1px solid rgb(216, 222, 233); padding: 12px; vertical-align: top; height: 66px; width: 24.8215%;">**Portal IEA**</td><td style="border: 1px solid rgb(216, 222, 233); padding: 12px; vertical-align: top; height: 66px; width: 75.29769%;">Aplicación Flutter web usada por clientes externos para registrarse, administrar empresas/personas relacionadas, crear solicitudes, aceptar cotizaciones y enviar pagos.</td></tr><tr style="height: 57px;"><td style="border: 1px solid rgb(216, 222, 233); padding: 12px; vertical-align: top; height: 57px; width: 24.8215%;">**Bus de integración**</td><td style="border: 1px solid rgb(216, 222, 233); padding: 12px; vertical-align: top; height: 57px; width: 75.29769%;">API REST de iDempiere usada por Flutter para leer modelos, crear registros, subir adjuntos y ejecutar procesos.</td></tr><tr style="height: 58px;"><td style="border: 1px solid rgb(216, 222, 233); padding: 12px; vertical-align: top; height: 58px; width: 24.8215%;">**Lirion**</td><td style="border: 1px solid rgb(216, 222, 233); padding: 12px; vertical-align: top; height: 58px; width: 75.29769%;">Instancia iDempiere donde viven las ventanas, tablas, roles, procesos, solicitudes, cotizaciones y aprobaciones.</td></tr></tbody></table>

## Entornos de Lirion identificados

- Producción: `https://iea.lirion.io`
- Pruebas: `https://ieadev.primware.net`

# Arquitectura y Componentes

La arquitectura se organiza alrededor de tres piezas: el Portal IEA, el bus de integración REST y Lirion.

## Arquitectura lógica

El portal Flutter consume endpoints REST de iDempiere. Las operaciones de negocio se ejecutan sobre modelos, ventanas y procesos configurados en Lirion.

<div drawio-diagram="98"><img src="https://docs.primware.net/uploads/images/drawio/2026-05/L9K1EGgE4o7dv25K-drawing-1-1778728689.png" alt=""/></div>

## Endpoints principales del BUS (API)

<table id="bkmrk-endpointusoad_userco" style="width: 100%; border-collapse: collapse; margin: 12px 0 20px 0;"><thead><tr><th style="border: 1px solid #d8dee9; padding: 12px; background: #eef2f7; text-align: left;">Endpoint</th><th style="border: 1px solid #d8dee9; padding: 12px; background: #eef2f7; text-align: left;">Uso</th></tr></thead><tbody><tr><td style="border: 1px solid #d8dee9; padding: 12px;">`AD_User`</td><td style="border: 1px solid #d8dee9; padding: 12px;">Contactos, usuarios, correo, teléfono y vínculo con tercero.</td></tr><tr><td style="border: 1px solid #d8dee9; padding: 12px;">`C_BPartner`</td><td style="border: 1px solid #d8dee9; padding: 12px;">Terceros: profesionales, empresas, titulares y asistentes.</td></tr><tr><td style="border: 1px solid #d8dee9; padding: 12px;">`C_BP_Relation`</td><td style="border: 1px solid #d8dee9; padding: 12px;">Relaciones entre tercero y tercero, por ejemplo Profesional Responsable, Representante Legal o Asistente.</td></tr><tr><td style="border: 1px solid #d8dee9; padding: 12px;">`CDS_Professional`</td><td style="border: 1px solid #d8dee9; padding: 12px;">Registro base del Profesional Responsable.</td></tr><tr><td style="border: 1px solid #d8dee9; padding: 12px;">`CDS_Company`</td><td style="border: 1px solid #d8dee9; padding: 12px;">Registro base de Empresa.</td></tr><tr><td style="border: 1px solid #d8dee9; padding: 12px;">`CDS_CompanyDetails`</td><td style="border: 1px solid #d8dee9; padding: 12px;">Relación de Empresa con profesional, titular, representante legal y otros roles.</td></tr><tr><td style="border: 1px solid #d8dee9; padding: 12px;">`CDS_Assistant`</td><td style="border: 1px solid #d8dee9; padding: 12px;">Registro base del Asistente.</td></tr><tr><td style="border: 1px solid #d8dee9; padding: 12px;">`CDS_ProfessionalDetails`</td><td style="border: 1px solid #d8dee9; padding: 12px;">Relación Asistente - Profesional - Empresa.</td></tr><tr><td style="border: 1px solid #d8dee9; padding: 12px;">`R_Request`</td><td style="border: 1px solid #d8dee9; padding: 12px;">Solicitudes/trámites del portal.</td></tr><tr><td style="border: 1px solid #d8dee9; padding: 12px;">`C_Order`</td><td style="border: 1px solid #d8dee9; padding: 12px;">Cotizaciones generadas desde solicitudes.</td></tr></tbody></table>

## Procesos invocados

- `setpassword`: asigna contraseña a un usuario de Lirion.
- `cds_authuser`: asigna rol según posición y marca el registro como público.
- `cotizacion-iea`: genera o procesa la cotización relacionada con una orden.

# Glosario del Proyecto

Este glosario fija los nombres usados en la documentación para evitar confusiones entre términos del portal, iDempiere y operación interna.

<table id="bkmrk-t%C3%A9rminosignificadopo" style="width: 100%; border-collapse: collapse; margin: 12px 0 20px 0;"><thead><tr><th style="border: 1px solid #d8dee9; padding: 12px; background: #eef2f7; text-align: left;">Término</th><th style="border: 1px solid #d8dee9; padding: 12px; background: #eef2f7; text-align: left;">Significado</th></tr></thead><tbody><tr><td style="border: 1px solid #d8dee9; padding: 12px;">**Portal**</td><td style="border: 1px solid #d8dee9; padding: 12px;">Aplicación Flutter web usada por usuarios externos del IEA.</td></tr><tr><td style="border: 1px solid #d8dee9; padding: 12px;">**Lirion**</td><td style="border: 1px solid #d8dee9; padding: 12px;">Nombre operativo usado para iDempiere en este proyecto.</td></tr><tr><td style="border: 1px solid #d8dee9; padding: 12px;">**Bus de integración**</td><td style="border: 1px solid #d8dee9; padding: 12px;">API REST de iDempiere usada por el portal para comunicarse con Lirion.</td></tr><tr><td style="border: 1px solid #d8dee9; padding: 12px;">**Profesional Responsable**</td><td style="border: 1px solid #d8dee9; padding: 12px;">Persona que representa técnica y administrativamente a una empresa frente al IEA para los productos que tramita.</td></tr><tr><td style="border: 1px solid #d8dee9; padding: 12px;">**Empresa**</td><td style="border: 1px solid #d8dee9; padding: 12px;">Persona jurídica o representante registrada en el portal para gestionar solicitudes.</td></tr><tr><td style="border: 1px solid #d8dee9; padding: 12px;">**Titular**</td><td style="border: 1px solid #d8dee9; padding: 12px;">Entidad o persona asociada a la empresa como titular del producto/trámite.</td></tr><tr><td style="border: 1px solid #d8dee9; padding: 12px;">**Asistente**</td><td style="border: 1px solid #d8dee9; padding: 12px;">Usuario autorizado por el Profesional Responsable para apoyar trámites de una empresa.</td></tr><tr><td style="border: 1px solid #d8dee9; padding: 12px;">**Solicitud**</td><td style="border: 1px solid #d8dee9; padding: 12px;">Registro `R_Request` creado desde el portal para un trámite del IEA.</td></tr><tr><td style="border: 1px solid #d8dee9; padding: 12px;">**Cotización**</td><td style="border: 1px solid #d8dee9; padding: 12px;">Orden de venta/cotización `C_Order` vinculada a una solicitud mediante `R_Request.C_Order_ID`.</td></tr><tr><td style="border: 1px solid #d8dee9; padding: 12px;">**Visto Bueno**</td><td style="border: 1px solid #d8dee9; padding: 12px;">Registro `CDS_Approval` asociado a una solicitud cuando se requiere aprobación previa al pago.</td></tr><tr><td style="border: 1px solid #d8dee9; padding: 12px;">**Abono**</td><td style="border: 1px solid #d8dee9; padding: 12px;">Referencia de pago y comprobante adjunto que el usuario envía desde el portal.</td></tr></tbody></table>

<p class="callout info">**Convención:** cuando esta documentación menciona “API”, “REST” o “bus de integración”, se refiere al API de iDempiere expuesto por Lirion.</p>

# Cuentas y Validación

Flujos de registro, validación de correo, roles, aprobación IEA y relaciones entre actores.

# Registro del Profesional Responsable

El Profesional Responsable es el primer actor del flujo. Desde el portal crea una cuenta, valida su correo y queda habilitado en Lirion cuando se asigna su rol y el registro queda público.

## Validaciones del formulario

<table id="bkmrk-campovalidaci%C3%B3nnombr" style="width: 100%; border-collapse: collapse; margin: 12px 0 20px 0;"><thead><tr><th style="border: 1px solid #d8dee9; padding: 12px; background: #eef2f7; text-align: left;">Campo</th><th style="border: 1px solid #d8dee9; padding: 12px; background: #eef2f7; text-align: left;">Validación</th></tr></thead><tbody><tr><td style="border: 1px solid #d8dee9; padding: 12px;">Nombre completo</td><td style="border: 1px solid #d8dee9; padding: 12px;">Obligatorio, se normaliza a mayúsculas y sin acentos.</td></tr><tr><td style="border: 1px solid #d8dee9; padding: 12px;">Tipo de documento</td><td style="border: 1px solid #d8dee9; padding: 12px;">Cédula o pasaporte. Para cédula se usa formato panameño validado por expresión regular.</td></tr><tr><td style="border: 1px solid #d8dee9; padding: 12px;">Teléfono</td><td style="border: 1px solid #d8dee9; padding: 12px;">Debe tener mínimo 7 dígitos locales.</td></tr><tr><td style="border: 1px solid #d8dee9; padding: 12px;">Dirección</td><td style="border: 1px solid #d8dee9; padding: 12px;">Obligatoria.</td></tr><tr><td style="border: 1px solid #d8dee9; padding: 12px;">Correo electrónico</td><td style="border: 1px solid #d8dee9; padding: 12px;">Formato válido, repetición exacta y correo único en `AD_User`.</td></tr><tr><td style="border: 1px solid #d8dee9; padding: 12px;">Contraseña</td><td style="border: 1px solid #d8dee9; padding: 12px;">Mínimo 8 caracteres, una mayúscula, una minúscula y repetición exacta.</td></tr><tr><td style="border: 1px solid #d8dee9; padding: 12px;">Confirmación</td><td style="border: 1px solid #d8dee9; padding: 12px;">Debe confirmar que los datos suministrados son verídicos.</td></tr></tbody></table>

## Registros creados

1. Se valida que el correo no exista.
2. Se valida que el documento no esté asociado a otro tercero.
3. Se crea `C_BPartner` con nombre, documento y tipo de identificación natural.
4. Se crea `C_Location` y `C_BPartner_Location` cuando hay dirección.
5. Se crea `AD_User` con nombre, teléfono, correo y vínculo al tercero.
6. Se ejecuta `setpassword` para asignar contraseña.
7. Se crea `CDS_Professional` con `C_Job_ID = Profesional Responsable`.
8. Se muestra mensaje indicando que debe validar su correo.

[![Crear Cuenta.png](https://docs.primware.net/uploads/images/gallery/2026-05/scaled-1680-/W5FoR49kz1TkqpaI-crear-cuenta.png)](https://docs.primware.net/uploads/images/gallery/2026-05/W5FoR49kz1TkqpaI-crear-cuenta.png)

## Flujo

<div drawio-diagram="100"><img src="https://docs.primware.net/uploads/images/drawio/2026-05/J4bFDqAs9g3piRqA-drawing-1-1778728987.png" alt=""/></div>

# Empresa, Titular y Asistente

Luego de contar con un Profesional Responsable, el portal permite registrar empresas, titulares y asistentes. Estas relaciones definen quién puede crear trámites, quién representa legalmente a la empresa y quién puede operar en apoyo del profesional.

> **Idea clave:** las relaciones no solo identifican personas. También delimitan quién puede crear, autorizar o trabajar una solicitud dentro del portal.

## Empresa

El registro de Empresa se realiza por pasos. El portal puede crear un nuevo tercero o reutilizar una empresa existente si ya fue localizada por RUC/DV.

1. Se capturan datos de empresa: nombre, RUC, DV, correo, teléfono, país, dirección y tipo de identificación jurídica.
2. Se valida que el correo de empresa no esté usado si la empresa no existe.
3. Se valida que el correo del representante legal no esté usado.
4. Se crea o reutiliza el tercero de la empresa.
5. Se crea `CDS_Company` con la posición Empresa.
6. Se crea el Representante Legal como tercero/contacto y relación de tercero.
7. Se registra la relación en `CDS_CompanyDetails` con `C_Job_ID = Representante Legal` y aprobado.
8. Se crea relación de tercero con el Profesional Responsable.
9. Se registra la relación Profesional - Empresa en `CDS_CompanyDetails`.
10. Se adjunta autorización del Profesional Responsable sobre `CDS_Company`.
11. Se indica que la empresa debe validar el correo y luego esperar validación del IEA.

<p class="callout warning">**Importante:** la empresa queda dependiente de validación de correo y de aprobación del IEA antes de operar completamente.</p>

[![Empresas.png](https://docs.primware.net/uploads/images/gallery/2026-05/scaled-1680-/HBFk4dLYo2kjcAZn-empresas.png)](https://docs.primware.net/uploads/images/gallery/2026-05/HBFk4dLYo2kjcAZn-empresas.png)

[![Buscar Empresa.png](https://docs.primware.net/uploads/images/gallery/2026-05/scaled-1680-/A3ujH4vTUWJzjlCT-buscar-empresa.png)](https://docs.primware.net/uploads/images/gallery/2026-05/A3ujH4vTUWJzjlCT-buscar-empresa.png)

## Titular

El Titular se registra asociado a una empresa y representa la autorización principal sobre esa empresa.

- Valida nombre, correo, documento, teléfono, país, dirección y adjunto.
- El correo debe ser único.
- Crea tercero/contacto con `C_BPartner` y `AD_User`.
- Crea relación en `CDS_CompanyDetails` con `C_Job_ID = Titular`.
- Adjunta el poder o documento de representación sobre `CDS_Company`.

## Asistente

El Asistente se registra desde el contexto del Profesional Responsable.

- Debe seleccionar empresa representante.
- Valida nombre, documento, teléfono, dirección, correo y adjunto.
- El correo debe ser único.
- Crea tercero/contacto.
- Crea relación de tercero con el Profesional Responsable.
- Crea relación en `CDS_ProfessionalDetails` entre asistente, profesional y empresa.
- Crea registro base `CDS_Assistant`.
- Adjunta autorización sobre `CDS_Assistant`.

## Baja de Profesional asociado a Empresa

Cuando un Profesional Responsable está asociado a una empresa, la empresa puede solicitar o registrar su baja desde el portal. Este flujo evita que una solicitud activa quede vinculada a un profesional que ya no trabajará con la empresa.

1. La empresa inicia sesión en el portal.
2. Ingresa al menú de profesionales.
3. Selecciona el profesional que desea dar de baja.
4. Marca o deshabilita la relación del profesional con la empresa.
5. Adjunta un documento con el motivo de la baja.
6. Guarda el cambio.

<p class="callout warning">**Regla obligatoria:** si el profesional tiene una solicitud activa asociada, la empresa debe reasignar primero esa solicitud a otro Profesional Responsable antes de completar la baja.</p>

<table id="bkmrk-situaci%C3%B3n-qu%C3%A9-debe-h" style="width:100%;border-collapse:collapse;margin:12px 0 20px 0;"><thead><tr><th style="border:1px solid #d8dee9;padding:12px;background:#eef2f7;text-align:left;">Situación</th><th style="border:1px solid #d8dee9;padding:12px;background:#eef2f7;text-align:left;">Qué debe hacer la empresa</th></tr></thead><tbody><tr><td style="border:1px solid #d8dee9;padding:12px;vertical-align:top;">El profesional no tiene solicitudes activas asociadas.</td><td style="border:1px solid #d8dee9;padding:12px;vertical-align:top;">Puede deshabilitarlo directamente, adjuntando el documento con el motivo de la baja.</td></tr><tr><td style="border:1px solid #d8dee9;padding:12px;vertical-align:top;">El profesional tiene una o más solicitudes activas.</td><td style="border:1px solid #d8dee9;padding:12px;vertical-align:top;">Debe reasignar esas solicitudes a otro profesional asociado a la empresa. Después puede completar la baja y adjuntar el motivo.</td></tr></tbody></table>

\[Imagen sugerida: menú de profesionales de la empresa con la acción de deshabilitar profesional y campo para adjuntar motivo de baja\]

## Limitaciones por rol

<table id="bkmrk-rol-puede-hacer-limi" style="width:100%;border-collapse:collapse;margin:12px 0 20px 0;"><thead><tr><th style="border:1px solid #d8dee9;padding:12px;background:#eef2f7;text-align:left;">Rol</th><th style="border:1px solid #d8dee9;padding:12px;background:#eef2f7;text-align:left;">Puede hacer</th><th style="border:1px solid #d8dee9;padding:12px;background:#eef2f7;text-align:left;">Limitación principal</th></tr></thead><tbody><tr><td style="border:1px solid #d8dee9;padding:12px;vertical-align:top;">**Profesional Responsable**</td><td style="border:1px solid #d8dee9;padding:12px;vertical-align:top;">Crear solicitudes y trabajar trámites para empresas donde esté relacionado y autorizado.</td><td style="border:1px solid #d8dee9;padding:12px;vertical-align:top;">Necesita estar relacionado y aprobado por una empresa antes de crear solicitudes para esa empresa. Puede tener múltiples trámites y trabajar con varias empresas.</td></tr><tr><td style="border:1px solid #d8dee9;padding:12px;vertical-align:top;">**Empresa**</td><td style="border:1px solid #d8dee9;padding:12px;vertical-align:top;">Ser el contexto jurídico/comercial de los trámites y administrar profesionales relacionados.</td><td style="border:1px solid #d8dee9;padding:12px;vertical-align:top;">Debe estar relacionada y autorizada por un Titular, completar validación de correo y aprobación IEA. Para dar de baja a un profesional con solicitudes activas, primero debe reasignarlas.</td></tr><tr><td style="border:1px solid #d8dee9;padding:12px;vertical-align:top;">**Titular**</td><td style="border:1px solid #d8dee9;padding:12px;vertical-align:top;">Autorizar o representar la relación de la empresa.</td><td style="border:1px solid #d8dee9;padding:12px;vertical-align:top;">Su función habilita la relación de la empresa; no reemplaza al Profesional Responsable para la creación técnica de solicitudes.</td></tr><tr><td style="border:1px solid #d8dee9;padding:12px;vertical-align:top;">**Asistente**</td><td style="border:1px solid #d8dee9;padding:12px;vertical-align:top;">Trabajar solicitudes después de estar relacionado y aprobado por el Profesional Responsable.</td><td style="border:1px solid #d8dee9;padding:12px;vertical-align:top;">Solo puede operar en una empresa y bajo un solo Profesional Responsable. Puede tener múltiples trámites, pero todos dentro de esa misma relación.</td></tr></tbody></table>

<p class="callout info">**Regla operativa:** el Profesional Responsable puede participar en varias empresas; el Asistente queda restringido a una sola empresa y un solo profesional responsable.</p>

## Mapa de relaciones

<div drawio-diagram="112"><img src="https://docs.primware.net/uploads/images/drawio/2026-05/8QvREiX6avEldcwR-drawing-1-1778772512.png" alt="8QvREiX6avEldcwR-drawing-1-1778772512.png"/></div>

# Validación de Correo, Roles y Aprobación IEA

La validación combina una acción del usuario desde el portal, procesos REST de Lirion y revisión administrativa por parte del IEA.

> **Idea clave:** el usuario llega a una URL del portal desde un correo. Esa URL incluye un parámetro que identifica el registro a validar y el portal ejecuta el flujo correspondiente según el rol.

## URL de validación en el portal

Las rutas de validación son secciones del portal web. Cada ruta recibe un parámetro en la URL, normalmente asociado al registro que se debe validar. El portal usa ese parámetro para buscar el registro correcto, aplicar la validación y continuar con la asignación de contraseña o rol cuando corresponde.

<p class="callout info">**Nota:** esta página describe el comportamiento del portal al abrir el enlace. Los correos y workflows que generan esos enlaces se documentan en la página de backend y workflows.</p>

## Rutas de validación

<table id="bkmrk-ruta-del-portal-par%C3%A1" style="width:100%;border-collapse:collapse;margin:12px 0 20px 0;"><thead><tr><th style="border:1px solid #d8dee9;padding:12px;background:#eef2f7;text-align:left;">Ruta del portal</th><th style="border:1px solid #d8dee9;padding:12px;background:#eef2f7;text-align:left;">Parámetro</th><th style="border:1px solid #d8dee9;padding:12px;background:#eef2f7;text-align:left;">Registro buscado</th><th style="border:1px solid #d8dee9;padding:12px;background:#eef2f7;text-align:left;">Resultado</th></tr></thead><tbody><tr><td style="border:1px solid #d8dee9;padding:12px;">`/validate-professional/:uuid`</td><td style="border:1px solid #d8dee9;padding:12px;">`:uuid`</td><td style="border:1px solid #d8dee9;padding:12px;">`CDS_Professional`</td><td style="border:1px solid #d8dee9;padding:12px;">Marca `IsVerified`, ejecuta `cds_authuser` y asigna rol si corresponde.</td></tr><tr><td style="border:1px solid #d8dee9;padding:12px;">`/validate-company/:uuid`</td><td style="border:1px solid #d8dee9;padding:12px;">`:uuid`</td><td style="border:1px solid #d8dee9;padding:12px;">`CDS_Company`</td><td style="border:1px solid #d8dee9;padding:12px;">Marca `IsVerified` y solicita definir contraseña. El acceso final depende de validación IEA.</td></tr><tr><td style="border:1px solid #d8dee9;padding:12px;">`/validate-assistant/:uuid`</td><td style="border:1px solid #d8dee9;padding:12px;">`:uuid`</td><td style="border:1px solid #d8dee9;padding:12px;">`CDS_Assistant`</td><td style="border:1px solid #d8dee9;padding:12px;">Marca `IsVerified`, ejecuta `cds_authuser` y luego solicita definir contraseña.</td></tr></tbody></table>

## Campos de control

- `IsVerified`: indica que el usuario validó el correo desde el portal.
- `IsPublic`: indica que el registro ya está habilitado para uso público/login según rol.
- `C_Job_ID`: posición funcional usada para determinar el rol a asignar.
- `IEA_AuthConfig`: configuración que relaciona posición con rol de Lirion.

## Proceso de asignación de rol

El proceso `cds_authuser` valida que el registro esté verificado, lee `C_Job_ID`, busca una configuración activa en `IEA_AuthConfig`, crea `AD_User_Roles` si el usuario no tiene el rol y marca `IsPublic = true` cuando la columna existe.

<div drawio-diagram="106"><img src="https://docs.primware.net/uploads/images/drawio/2026-05/Gty2kRN2AAC5XY2A-drawing-1-1778729573.png" alt="Gty2kRN2AAC5XY2A-drawing-1-1778729573.png"/></div>

# Solicitudes, Cotización y Abono

Creación de trámites, generación de cotización, visto bueno, aceptación, abono y relación con orden de venta.

# Creación de Solicitudes desde el Portal

Las solicitudes del portal se crean como registros `R_Request` en Lirion. El usuario selecciona empresa, titular, tipo de solicitud, datos del producto y adjuntos requeridos.

<p class="callout info">**Nota:** la solicitud queda asociada a un responsable inicial configurado en iDempiere mediante `IEA_InitialSalesRep`. Ese valor define el usuario IEA que recibirá la notificación inicial.</p>

## Datos cargados por el portal

- Tipos de solicitud: `R_RequestType` filtrado por `ShowInPortal = true`.
- Tipos de control de calidad: `R_Group` filtrado por `ShowInPortal = true`.
- Categorías: `R_Category`.
- Forma farmacéutica: `IEA_PharmaForm`.
- Listas de referencia: clasificación, administración, almacenamiento, esterilidad, condición física, matriz a analizar y tipo de prueba analítica.
- Empresas, titulares y asistentes aprobados relacionados con el usuario autenticado.

## Campos principales enviados a R\_Request

<table id="bkmrk-campo-uso-summary-re" style="width: 100%; border-collapse: collapse; margin: 12px 0 20px 0;"><thead><tr><th style="border: 1px solid #d8dee9; padding: 12px; background: #eef2f7; text-align: left;">Campo</th><th style="border: 1px solid #d8dee9; padding: 12px; background: #eef2f7; text-align: left;">Uso</th></tr></thead><tbody><tr><td style="border: 1px solid #d8dee9; padding: 12px;">`Summary`</td><td style="border: 1px solid #d8dee9; padding: 12px;">Resumen del trámite.</td></tr><tr><td style="border: 1px solid #d8dee9; padding: 12px;">`R_RequestType_ID`</td><td style="border: 1px solid #d8dee9; padding: 12px;">Tipo de solicitud seleccionada.</td></tr><tr><td style="border: 1px solid #d8dee9; padding: 12px;">`CDS_Company_ID`</td><td style="border: 1px solid #d8dee9; padding: 12px;">Empresa representante.</td></tr><tr><td style="border: 1px solid #d8dee9; padding: 12px;">`CDS_Professional_ID`</td><td style="border: 1px solid #d8dee9; padding: 12px;">Profesional responsable en sesión.</td></tr><tr><td style="border: 1px solid #d8dee9; padding: 12px;">`CDS_Assistant_ID`</td><td style="border: 1px solid #d8dee9; padding: 12px;">Asistente asignado cuando aplica.</td></tr><tr><td style="border: 1px solid #d8dee9; padding: 12px;">`C_BPartner_ID` y `AD_User_ID`</td><td style="border: 1px solid #d8dee9; padding: 12px;">Tercero y contacto de la empresa.</td></tr><tr><td style="border: 1px solid #d8dee9; padding: 12px;">`IEA_Holder_ID`</td><td style="border: 1px solid #d8dee9; padding: 12px;">Titular del producto.</td></tr><tr><td style="border: 1px solid #d8dee9; padding: 12px;">`IEA_Product_NotListed`</td><td style="border: 1px solid #d8dee9; padding: 12px;">Nombre del producto si no está listado.</td></tr><tr><td style="border: 1px solid #d8dee9; padding: 12px;">`IEA_Active_Ingredient`</td><td style="border: 1px solid #d8dee9; padding: 12px;">Ingrediente activo.</td></tr><tr><td style="border: 1px solid #d8dee9; padding: 12px;">`SalesRep_ID`</td><td style="border: 1px solid #d8dee9; padding: 12px;">Responsable inicial tomado del configurador de sistema `IEA_InitialSalesRep`. El valor configurado debe ser el `AD_User_ID` del usuario IEA que recibirá las notificaciones iniciales.</td></tr></tbody></table>

## Configuración del responsable inicial

En iDempiere existe el configurador del sistema `IEA_InitialSalesRep`, descrito como **Usuario inicial de las solicitudes por parte del IEA**. En su valor configurado se coloca el ID del registro `AD_User` que debe recibir la notificación cuando entra una solicitud nueva.

Este configurador también se usa desde el workflow **Nueva Solicitud**. En el nodo de envío de correo, el destinatario se resuelve con la expresión `@$sysconfig.IEA_InitialSalesRep@`.

## Adjuntos

Después de crear la solicitud, el portal sube adjuntos sobre el registro `R_Request`. El portal calcula el progreso considerando la creación del trámite y cada archivo adjunto.

## Flujo

<div drawio-diagram="108"><img src="https://docs.primware.net/uploads/images/drawio/2026-05/V8jV7Cp9vYDmOpUe-drawing-1-1778729812.png" alt="V8jV7Cp9vYDmOpUe-drawing-1-1778729812.png"/></div>

[![Captura de pantalla 2026-05-19 a la(s) 4.11.02 p. m..png](https://docs.primware.net/uploads/images/gallery/2026-05/scaled-1680-/jTyr32J3IuJuS1U1-captura-de-pantalla-2026-05-19-a-las-4-11-02-p-m.png)](https://docs.primware.net/uploads/images/gallery/2026-05/jTyr32J3IuJuS1U1-captura-de-pantalla-2026-05-19-a-las-4-11-02-p-m.png)

# Cotización, Visto Bueno y Abono

La cotización conecta una solicitud `R_Request` con una orden/cotización `C_Order`. El portal permite consultar el detalle, aceptar la cotización, enviar mensajes de ajuste y registrar el abono.

## Generación de la cotización

En el plugin se identifica el proceso `CreateQuoteFromRequest`, que crea una `C_Order` de venta tipo cotización desde el registro activo de `R_Request`. El proceso:

1. Valida que exista una solicitud activa.
2. Exige organización y almacén.
3. Lee `C_BPartner_ID`, `AD_User_ID`, `SalesRep_ID` y `Summary` desde la solicitud.
4. Resuelve tipo de documento de cotización/propuesta/oferta.
5. Resuelve lista de precios desde parámetro, tercero o lista de precios de venta por defecto.
6. Busca ubicación activa del tercero, prefiriendo facturación.
7. Crea `C_Order` con vínculo `R_Request_ID`.
8. Opcionalmente crea línea con producto.
9. Actualiza `R_Request.C_Order_ID`.

## Aceptación y ajuste

- El portal lee la cotización desde `C_Order` expandiendo `C_OrderLine`.
- Si el usuario acepta, el portal actualiza `R_Request.CDS_QuoteAccepted = true`.
- Si el usuario solicita ajuste o conversa sobre la cotización, se crean mensajes en `CDS_QuoteCorrections`.

## Chat de cotización

El chat de cotización permite la comunicación entre el portal y Lirion mientras la cotización todavía no ha sido aceptada. Se usa para dudas, ajustes o aclaraciones relacionadas con la cotización antes de que el cliente confirme la aceptación.

<p class="callout warning">**Regla de bloqueo:** cuando `CDS_QuoteAccepted = 'Y'`, el chat queda en solo lectura tanto en el portal como en Lirion. Desde ese momento ya no se pueden escribir nuevos mensajes.</p>

<table id="bkmrk-condici%C3%B3n-comportami" style="width: 100%; border-collapse: collapse; margin: 12px 0 20px 0;"><thead><tr><th style="border: 1px solid #d8dee9; padding: 12px; background: #eef2f7; text-align: left;">Condición</th><th style="border: 1px solid #d8dee9; padding: 12px; background: #eef2f7; text-align: left;">Comportamiento del chat</th></tr></thead><tbody><tr><td style="border: 1px solid #d8dee9; padding: 12px; vertical-align: top;">`CDS_QuoteAccepted != 'Y'`</td><td style="border: 1px solid #d8dee9; padding: 12px; vertical-align: top;">El portal y Lirion pueden registrar mensajes sobre la cotización.</td></tr><tr><td style="border: 1px solid #d8dee9; padding: 12px; vertical-align: top;">`CDS_QuoteAccepted = 'Y'`</td><td style="border: 1px solid #d8dee9; padding: 12px; vertical-align: top;">El chat queda bloqueado para escritura y solo permite consultar el historial.</td></tr></tbody></table>

[![Captura de pantalla 2026-05-19 a la(s) 4.09.27 p. m..png](https://docs.primware.net/uploads/images/gallery/2026-05/scaled-1680-/xy7K3j18Z8P7RIg1-captura-de-pantalla-2026-05-19-a-las-4-09-27-p-m.png)](https://docs.primware.net/uploads/images/gallery/2026-05/xy7K3j18Z8P7RIg1-captura-de-pantalla-2026-05-19-a-las-4-09-27-p-m.png)

## Visto bueno

Cuando una solicitud requiere aprobación, el portal bloquea el pago hasta que `CDS_ApprovalStatus` indique aprobación. El evento `RequestApprovalLinker` crea o actualiza un registro `CDS_Approval` cuando cambia el estado de aprobación en `R_Request`.

## Abono

Cuando la cotización está aceptada y no requiere visto bueno, o ya fue aprobada, el portal permite registrar el abono. El portal actualiza `ReferenceNo`, mantiene `CDS_QuoteAccepted = true` y adjunta el comprobante de pago al `R_Request`.

<div drawio-diagram="109"><img src="https://docs.primware.net/uploads/images/drawio/2026-05/QwyZ8GakTNeDMScw-drawing-1-1778729937.png" alt="QwyZ8GakTNeDMScw-drawing-1-1778729937.png"/></div>

# Evaluaciones, Materiales Requeridos y En Proceso

La evaluación se trabaja desde Lirion sobre la misma solicitud y sus registros relacionados. En esta etapa se revisa la información enviada, se asignan evaluadoras, se registran materiales requeridos y se gestionan observaciones hacia el cliente cuando hay correcciones o dudas.

## Tablas y ventanas reconocidas

<table id="bkmrk-elemento-uso-reconoc" style="width: 100%; border-collapse: collapse; margin: 12px 0 20px 0;"><thead><tr><th style="border: 1px solid #d8dee9; padding: 12px; background: #eef2f7; text-align: left;">Elemento</th><th style="border: 1px solid #d8dee9; padding: 12px; background: #eef2f7; text-align: left;">Uso reconocido</th></tr></thead><tbody><tr><td style="border: 1px solid #d8dee9; padding: 12px;">`IEA_RequestEvaluation`</td><td style="border: 1px solid #d8dee9; padding: 12px;">Cabecera de evaluación asociada a una solicitud.</td></tr><tr><td style="border: 1px solid #d8dee9; padding: 12px;">`IEA_RequestEvaluationDetails`</td><td style="border: 1px solid #d8dee9; padding: 12px;">Detalle de evaluación y posibles adjuntos/elementos asociados.</td></tr><tr><td style="border: 1px solid #d8dee9; padding: 12px;">`IEA_RequestEvaluation_Material`</td><td style="border: 1px solid #d8dee9; padding: 12px;">Cabecera/listado de materiales requeridos por solicitud.</td></tr><tr><td style="border: 1px solid #d8dee9; padding: 12px;">`IEA_RequestEvaluation_MaterialDetails`</td><td style="border: 1px solid #d8dee9; padding: 12px;">Detalle de materiales requeridos.</td></tr></tbody></table>

## Procesos reconocidos

- `AssignEvaluatorAndDateOnRequestEvaluation`: asigna el usuario actual y fecha actual a columnas configurables de `IEA_RequestEvaluation`.
- `AssignDateFinishOnRequestEvaluation`: asigna `DateFinish` cuando `Evaluator_1` y `Evaluator_2` están marcados.
- `AssignEvaluatorUserOnOrder`: asigna usuario evaluador actual en una columna configurable de `C_Order`.

## Observaciones de evaluación

En Lirion, dentro de la misma solicitud, existe una pestaña de observaciones. Esta pestaña usa el mismo modelo funcional del chat, pero su propósito no es negociar la cotización, sino manejar correcciones o dudas de evaluación.

Las evaluadoras pueden enviar observaciones al cliente cuando necesitan aclaraciones, correcciones o información adicional. El cliente responde esas observaciones desde el portal, manteniendo la conversación asociada a la solicitud evaluada.

<table id="bkmrk-canal-d%C3%B3nde-se-usa-p" style="width: 100%; border-collapse: collapse; margin: 12px 0 20px 0;"><thead><tr><th style="border: 1px solid #d8dee9; padding: 12px; background: #eef2f7; text-align: left;">Canal</th><th style="border: 1px solid #d8dee9; padding: 12px; background: #eef2f7; text-align: left;">Dónde se usa</th><th style="border: 1px solid #d8dee9; padding: 12px; background: #eef2f7; text-align: left;">Propósito</th></tr></thead><tbody><tr><td style="border: 1px solid #d8dee9; padding: 12px; vertical-align: top;">Chat de cotización</td><td style="border: 1px solid #d8dee9; padding: 12px; vertical-align: top;">Portal y Lirion, antes de aceptar la cotización.</td><td style="border: 1px solid #d8dee9; padding: 12px; vertical-align: top;">Resolver dudas o ajustes relacionados con la cotización.</td></tr><tr><td style="border: 1px solid #d8dee9; padding: 12px; vertical-align: top;">Observaciones de evaluación</td><td style="border: 1px solid #d8dee9; padding: 12px; vertical-align: top;">Pestaña de observaciones en la solicitud de Lirion y respuesta del cliente desde el portal.</td><td style="border: 1px solid #d8dee9; padding: 12px; vertical-align: top;">Enviar correcciones, dudas o solicitudes de aclaración desde las evaluadoras hacia el cliente, y recibir las respuestas del cliente.</td></tr></tbody></table>

<p class="callout info">**Nota:** aunque las observaciones comparten el modelo de conversación con el chat, deben entenderse como parte del proceso de evaluación y corrección de la solicitud.</p>

[![Captura de pantalla 2026-05-19 a la(s) 4.07.20 p. m..png](https://docs.primware.net/uploads/images/gallery/2026-05/scaled-1680-/xtaeU9h0cMYPuL0A-captura-de-pantalla-2026-05-19-a-las-4-07-20-p-m.png)](https://docs.primware.net/uploads/images/gallery/2026-05/xtaeU9h0cMYPuL0A-captura-de-pantalla-2026-05-19-a-las-4-07-20-p-m.png)

[![Captura de pantalla 2026-05-19 a la(s) 4.07.30 p. m..png](https://docs.primware.net/uploads/images/gallery/2026-05/scaled-1680-/TBl0U21C4lPpzDik-captura-de-pantalla-2026-05-19-a-las-4-07-30-p-m.png)](https://docs.primware.net/uploads/images/gallery/2026-05/TBl0U21C4lPpzDik-captura-de-pantalla-2026-05-19-a-las-4-07-30-p-m.png)

# Lirion y Backend iDempiere

Ventanas, tablas, procesos, eventos y workflows reconocidos en el plugin de iDempiere.

# Ventanas Relevantes en Lirion

El 2Pack del plugin contiene ventanas y pestañas relacionadas con solicitudes, empresas, profesionales, FAQ, visto bueno, evaluación y materiales requeridos.

## Ventanas principales

<table id="bkmrk-ventanatabla-base-%2F-" style="width: 100%; border-collapse: collapse; margin: 12px 0 20px 0;"><thead><tr><th style="border: 1px solid #d8dee9; padding: 12px; background: #eef2f7; text-align: left;">Ventana</th><th style="border: 1px solid #d8dee9; padding: 12px; background: #eef2f7; text-align: left;">Tabla base / uso</th><th style="border: 1px solid #d8dee9; padding: 12px; background: #eef2f7; text-align: left;">Campos clave</th></tr></thead><tbody><tr><td style="border: 1px solid #d8dee9; padding: 12px;">**Solicitud**</td><td style="border: 1px solid #d8dee9; padding: 12px;">`R_Request`. Trámite creado desde el portal y gestionado por IEA.</td><td style="border: 1px solid #d8dee9; padding: 12px;">`DocumentNo`, `R_RequestType_ID`, `R_Status_ID`, `CDS_Company_ID`, `CDS_Professional_ID`, `CDS_Assistant_ID`, `C_Order_ID`, `CDS_QuoteAccepted`, `CDS_ApprovalStatus`, `ReferenceNo`.</td></tr><tr><td style="border: 1px solid #d8dee9; padding: 12px;">**Empresa**</td><td style="border: 1px solid #d8dee9; padding: 12px;">`CDS_Company` y pestañas relacionadas.</td><td style="border: 1px solid #d8dee9; padding: 12px;">`C_BPartner_ID`, `AD_User_ID`, `C_Job_ID`, `IsVerified`, `IsPublic`, detalles en `CDS_CompanyDetails`.</td></tr><tr><td style="border: 1px solid #d8dee9; padding: 12px;">**Profesional Responsable**</td><td style="border: 1px solid #d8dee9; padding: 12px;">`CDS_Professional` y `CDS_ProfessionalDetails`.</td><td style="border: 1px solid #d8dee9; padding: 12px;">`C_BPartner_ID`, `AD_User_ID`, `C_Job_ID`, `IsVerified`, `IsPublic`, empresa y asistente relacionados.</td></tr><tr><td style="border: 1px solid #d8dee9; padding: 12px;">**Asistente**</td><td style="border: 1px solid #d8dee9; padding: 12px;">`CDS_Assistant`.</td><td style="border: 1px solid #d8dee9; padding: 12px;">`C_BPartner_ID`, `AD_User_ID`, `C_Job_ID`, `IsVerified`, `IsPublic`.</td></tr><tr><td style="border: 1px solid #d8dee9; padding: 12px;">**Visto Bueno**</td><td style="border: 1px solid #d8dee9; padding: 12px;">`CDS_Approval`. Aprobación asociada a solicitud.</td><td style="border: 1px solid #d8dee9; padding: 12px;">`DocumentNo`, `R_Request_ID`, `C_BPartner_ID`, `CDS_Professional_ID`, `AD_User_ID`, `CDS_ApprovalStatus`.</td></tr><tr><td style="border: 1px solid #d8dee9; padding: 12px;">**FAQ**</td><td style="border: 1px solid #d8dee9; padding: 12px;">`CDS_FAQ`. Preguntas públicas consumidas por el portal.</td><td style="border: 1px solid #d8dee9; padding: 12px;">`CDS_Question_FAQ`, `CDS_Response_FAQ`, `SeqNo`.</td></tr><tr><td style="border: 1px solid #d8dee9; padding: 12px;">**Evaluación**</td><td style="border: 1px solid #d8dee9; padding: 12px;">`IEA_RequestEvaluation`.</td><td style="border: 1px solid #d8dee9; padding: 12px;">`R_Request_ID`, `R_RequestType_ID`, evaluadores, fechas y estado de avance.</td></tr><tr><td style="border: 1px solid #d8dee9; padding: 12px;">**Materiales Requeridos**</td><td style="border: 1px solid #d8dee9; padding: 12px;">`IEA_RequestEvaluation_Material` y detalles.</td><td style="border: 1px solid #d8dee9; padding: 12px;">Solicitud relacionada, materiales y detalle requerido para continuar evaluación.</td></tr></tbody></table>

# Dependencias, Procesos, Eventos, Workflows y Correos

Esta página resume las dependencias iDempiere del proyecto, los procesos Java identificados, el evento del plugin, los configuradores del sistema y los workflows de Lirion que disparan correos o cambios de estado.

## Dependencias iDempiere

<table id="bkmrk-componente-estado-ro" style="width:100%;border-collapse:collapse;margin:12px 0 20px 0;"><thead><tr><th style="border:1px solid #d8dee9;padding:12px;background:#eef2f7;text-align:left;">Componente</th><th style="border:1px solid #d8dee9;padding:12px;background:#eef2f7;text-align:left;">Estado</th><th style="border:1px solid #d8dee9;padding:12px;background:#eef2f7;text-align:left;">Rol dentro del proyecto</th></tr></thead><tbody><tr><td style="border:1px solid #d8dee9;padding:12px;vertical-align:top;">`iDempiere 12`</td><td style="border:1px solid #d8dee9;padding:12px;vertical-align:top;">Base operativa</td><td style="border:1px solid #d8dee9;padding:12px;vertical-align:top;">Sistema fuente para terceros, usuarios, roles, solicitudes, órdenes, procesos, workflows, configuradores del sistema y ventanas administrativas.</td></tr><tr><td style="border:1px solid #d8dee9;padding:12px;vertical-align:top;">`com.cdsoftware.iea.portal`</td><td style="border:1px solid #d8dee9;padding:12px;vertical-align:top;">Plugin principal del flujo del portal</td><td style="border:1px solid #d8dee9;padding:12px;vertical-align:top;">Gestiona validación de usuarios, roles, aprobación, relaciones, solicitudes, cotizaciones, evaluaciones y visto bueno.</td></tr><tr><td style="border:1px solid #d8dee9;padding:12px;vertical-align:top;">[`com.cdsoftware.appointment`](https://docs.primware.net/books/comcdsoftwareappointment)</td><td style="border:1px solid #d8dee9;padding:12px;vertical-align:top;">Plugin de agendamiento reutilizable</td><td style="border:1px solid #d8dee9;padding:12px;vertical-align:top;">Gestiona citas, servicios, empleados, horarios, días no disponibles, generación de slots y validación centralizada de disponibilidad desde ventana iDempiere o REST/API.</td></tr><tr><td style="border:1px solid #d8dee9;padding:12px;vertical-align:top;">`com.cdsoftware.lirion.dnfd`</td><td style="border:1px solid #d8dee9;padding:12px;vertical-align:top;">Dependencia funcional</td><td style="border:1px solid #d8dee9;padding:12px;vertical-align:top;">Integra con la Dirección Nacional de Farmacia y Drogas para datos y validaciones relacionadas con el flujo regulatorio.</td></tr><tr><td style="border:1px solid #d8dee9;padding:12px;vertical-align:top;">`com.cdsoftware.iea`</td><td style="border:1px solid #d8dee9;padding:12px;vertical-align:top;"><p class="callout info">En desarrollo</p>

</td><td style="border:1px solid #d8dee9;padding:12px;vertical-align:top;">Maneja extensiones de solicitud y recepción de materiales, etiquetas de producto, notificaciones de vencimiento y valores por defecto en recibos desde solicitudes.</td></tr><tr><td style="border:1px solid #d8dee9;padding:12px;vertical-align:top;">`LabCollector`</td><td style="border:1px solid #d8dee9;padding:12px;vertical-align:top;"><p class="callout warning">Integración futura</p>

</td><td style="border:1px solid #d8dee9;padding:12px;vertical-align:top;">Se contempla como una integración posterior para complementar el flujo operativo/laboratorio.</td></tr></tbody></table>

## Configuradores del sistema

Algunas reglas operativas del flujo se controlan desde configuradores del sistema en iDempiere. Estos valores permiten cambiar destinatarios o comportamientos sin modificar el portal.

<table id="bkmrk-configurador-descrip" style="width:100%;border-collapse:collapse;margin:12px 0 20px 0;"><thead><tr><th style="border:1px solid #d8dee9;padding:12px;background:#eef2f7;text-align:left;">Configurador</th><th style="border:1px solid #d8dee9;padding:12px;background:#eef2f7;text-align:left;">Descripción</th><th style="border:1px solid #d8dee9;padding:12px;background:#eef2f7;text-align:left;">Valor esperado</th><th style="border:1px solid #d8dee9;padding:12px;background:#eef2f7;text-align:left;">Dónde se usa</th></tr></thead><tbody><tr><td style="border:1px solid #d8dee9;padding:12px;vertical-align:top;">`IEA_InitialSalesRep`</td><td style="border:1px solid #d8dee9;padding:12px;vertical-align:top;">Usuario inicial de las solicitudes por parte del IEA.</td><td style="border:1px solid #d8dee9;padding:12px;vertical-align:top;">ID del usuario iDempiere en `AD_User` que recibirá la notificación inicial de nuevas solicitudes.</td><td style="border:1px solid #d8dee9;padding:12px;vertical-align:top;">Campo `SalesRep_ID` de la solicitud y workflow **Nueva Solicitud**, donde el nodo de correo usa `@$sysconfig.IEA_InitialSalesRep@`.</td></tr><tr><td style="border:1px solid #d8dee9;padding:12px;vertical-align:top;">`IEA_AppointmentEmployee`</td><td style="border:1px solid #d8dee9;padding:12px;vertical-align:top;">Empleado fijo de agendamiento usado por el portal Flutter cuando el flujo IEA debe crear o consultar disponibilidad contra un responsable específico.</td><td style="border:1px solid #d8dee9;padding:12px;vertical-align:top;">ID del registro en `CDS_AppointmentEmployee` que representa al empleado usado para las citas del portal.</td><td style="border:1px solid #d8dee9;padding:12px;vertical-align:top;">Integración del portal Flutter con `com.cdsoftware.appointment` para filtrar/generar slots y crear citas con un empleado predeterminado.</td></tr><tr><td style="border:1px solid #d8dee9;padding:12px;vertical-align:top;">`IEA_AppointmentService`</td><td style="border:1px solid #d8dee9;padding:12px;vertical-align:top;">Servicio fijo de agendamiento usado por el portal Flutter para el tipo de cita asociado al flujo IEA.</td><td style="border:1px solid #d8dee9;padding:12px;vertical-align:top;">ID del registro en `CDS_AppointmentService` que representa el servicio usado para las citas del portal.</td><td style="border:1px solid #d8dee9;padding:12px;vertical-align:top;">Integración del portal Flutter con `com.cdsoftware.appointment` para filtrar/generar slots y crear citas con un servicio predeterminado.</td></tr></tbody></table>

## Procesos del plugin `com.cdsoftware.iea.portal`

<table id="bkmrk-proceso-qu%C3%A9-hace-uso" style="width:100%;border-collapse:collapse;margin:12px 0 20px 0;"><thead><tr><th style="border:1px solid #d8dee9;padding:12px;background:#eef2f7;text-align:left;">Proceso</th><th style="border:1px solid #d8dee9;padding:12px;background:#eef2f7;text-align:left;">Qué hace</th><th style="border:1px solid #d8dee9;padding:12px;background:#eef2f7;text-align:left;">Uso en el flujo</th></tr></thead><tbody><tr><td style="border:1px solid #d8dee9;padding:12px;">`SetUserPasswordProcess`</td><td style="border:1px solid #d8dee9;padding:12px;">Recibe `AD_User_ID` y `Password`; asigna contraseña al usuario.</td><td style="border:1px solid #d8dee9;padding:12px;">Alta de Profesional, Empresa y Asistente cuando se define contraseña.</td></tr><tr><td style="border:1px solid #d8dee9;padding:12px;">`AuthUser`</td><td style="border:1px solid #d8dee9;padding:12px;">Valida `IsVerified`, lee `C_Job_ID`, busca `IEA_AuthConfig`, crea `AD_User_Roles` y marca `IsPublic`.</td><td style="border:1px solid #d8dee9;padding:12px;">Habilitación del usuario para operar en el portal.</td></tr><tr><td style="border:1px solid #d8dee9;padding:12px;">`CreateQuoteFromRequest`</td><td style="border:1px solid #d8dee9;padding:12px;">Crea `C_Order` tipo cotización desde `R_Request` y vincula la orden a la solicitud.</td><td style="border:1px solid #d8dee9;padding:12px;">Generación de cotización por el IEA.</td></tr><tr><td style="border:1px solid #d8dee9;padding:12px;">`AssignCurrentUserToApproval`</td><td style="border:1px solid #d8dee9;padding:12px;">Asigna el usuario actual al registro `CDS_Approval`.</td><td style="border:1px solid #d8dee9;padding:12px;">Firma o registro del responsable del visto bueno.</td></tr><tr><td style="border:1px solid #d8dee9;padding:12px;">`AssignEvaluatorAndDateOnRequestEvaluation`</td><td style="border:1px solid #d8dee9;padding:12px;">Escribe usuario y fecha actual en columnas configurables de `IEA_RequestEvaluation`.</td><td style="border:1px solid #d8dee9;padding:12px;">Asignación de evaluadores y fechas de evaluación.</td></tr><tr><td style="border:1px solid #d8dee9;padding:12px;">`AssignDateFinishOnRequestEvaluation`</td><td style="border:1px solid #d8dee9;padding:12px;">Asigna `DateFinish` cuando `Evaluator_1` y `Evaluator_2` están completos.</td><td style="border:1px solid #d8dee9;padding:12px;">Cierre de evaluación.</td></tr><tr><td style="border:1px solid #d8dee9;padding:12px;">`AssignEvaluatorUserOnOrder`</td><td style="border:1px solid #d8dee9;padding:12px;">Asigna el usuario actual a una columna configurable de `C_Order`.</td><td style="border:1px solid #d8dee9;padding:12px;">Asignación de evaluador sobre la orden/cotización.</td></tr><tr><td style="border:1px solid #d8dee9;padding:12px;">`CreateUserCorrectionRequest`</td><td style="border:1px solid #d8dee9;padding:12px;">Crea solicitud de corrección de datos de usuario y campos relacionados.</td><td style="border:1px solid #d8dee9;padding:12px;">Correcciones solicitadas por usuarios o personal IEA.</td></tr></tbody></table>

## Evento reconocido

`RequestApprovalLinker` escucha creación/cambio de `R_Request`. Cuando cambia `CDS_ApprovalStatus`, crea o actualiza `CDS_Approval` y lo vincula a la solicitud.

<div drawio-diagram="111"><img src="https://docs.primware.net/uploads/images/drawio/2026-05/czmDolLlHpWeow4s-drawing-1-1778730288.png" alt="czmDolLlHpWeow4s-drawing-1-1778730288.png"/></div>

## Workflows y correos en Lirion

Los workflows de iDempiere se disparan por tabla y lógica de documento. En este flujo se usan principalmente para enviar correos con el proceso `SendMailText CDS` y, en un caso, para marcar un campo de control.

<table id="bkmrk-workflow-tabla-dispa" style="width:100%;border-collapse:collapse;margin:12px 0 20px 0;"><thead><tr><th style="border:1px solid #d8dee9;padding:12px;background:#eef2f7;text-align:left;">Workflow</th><th style="border:1px solid #d8dee9;padding:12px;background:#eef2f7;text-align:left;">Tabla</th><th style="border:1px solid #d8dee9;padding:12px;background:#eef2f7;text-align:left;">Disparo</th><th style="border:1px solid #d8dee9;padding:12px;background:#eef2f7;text-align:left;">Acción</th></tr></thead><tbody><tr><td style="border:1px solid #d8dee9;padding:12px;">**Validar usuario profesional**</td><td style="border:1px solid #d8dee9;padding:12px;">`Professional`</td><td style="border:1px solid #d8dee9;padding:12px;">Registro nuevo con `C_Job_ID > 1`.</td><td style="border:1px solid #d8dee9;padding:12px;">Envía correo de validación al profesional mediante `SendMailText CDS`.</td></tr><tr><td style="border:1px solid #d8dee9;padding:12px;">**Validar usuario Company**</td><td style="border:1px solid #d8dee9;padding:12px;">`Company`</td><td style="border:1px solid #d8dee9;padding:12px;">Registro nuevo con `C_Job_ID > 1`.</td><td style="border:1px solid #d8dee9;padding:12px;">Envía correo de validación a la empresa.</td></tr><tr><td style="border:1px solid #d8dee9;padding:12px;">**Validar usuario Asistente**</td><td style="border:1px solid #d8dee9;padding:12px;">`Assistant`</td><td style="border:1px solid #d8dee9;padding:12px;">Registro nuevo con `C_Job_ID > 1`.</td><td style="border:1px solid #d8dee9;padding:12px;">Envía correo de validación al asistente.</td></tr><tr><td style="border:1px solid #d8dee9;padding:12px;">**Olvide contraseña**</td><td style="border:1px solid #d8dee9;padding:12px;">`reset_password`</td><td style="border:1px solid #d8dee9;padding:12px;">Registro nuevo.</td><td style="border:1px solid #d8dee9;padding:12px;">Envía correo para recuperación o definición de contraseña.</td></tr><tr><td style="border:1px solid #d8dee9;padding:12px;">**Notificar Usuario nuevo a IEA**</td><td style="border:1px solid #d8dee9;padding:12px;">`Company`</td><td style="border:1px solid #d8dee9;padding:12px;">`IsVerified = true` e `IsPublic = false`.</td><td style="border:1px solid #d8dee9;padding:12px;">Notifica al IEA que existe un usuario/empresa validado por correo pendiente de aprobación.</td></tr><tr><td style="border:1px solid #d8dee9;padding:12px;">**Notificar usuario validado por IEA**</td><td style="border:1px solid #d8dee9;padding:12px;">`Company`</td><td style="border:1px solid #d8dee9;padding:12px;">`IsPublic = true` y `CDS_ApprovalEmailSent = false`.</td><td style="border:1px solid #d8dee9;padding:12px;">Envía correo a la empresa y marca `CDS_ApprovalEmailSent = Y` para evitar reenvíos.</td></tr><tr><td style="border:1px solid #d8dee9;padding:12px;">**Nueva relación de profesional**</td><td style="border:1px solid #d8dee9;padding:12px;">`CDS_ProfessionalDetails`</td><td style="border:1px solid #d8dee9;padding:12px;">Registro nuevo.</td><td style="border:1px solid #d8dee9;padding:12px;">Notifica al asistente cuando se crea una nueva relación con un profesional.</td></tr><tr><td style="border:1px solid #d8dee9;padding:12px;">**Nueva relación de empresa**</td><td style="border:1px solid #d8dee9;padding:12px;">`CDS_CompanyDetails`</td><td style="border:1px solid #d8dee9;padding:12px;">Registro nuevo con `C_Job_ID = 1000001`.</td><td style="border:1px solid #d8dee9;padding:12px;">Notifica a la empresa cuando se crea una nueva relación de profesional.</td></tr><tr><td style="border:1px solid #d8dee9;padding:12px;">**Relación aprobada empresa-profesional**</td><td style="border:1px solid #d8dee9;padding:12px;">`CDS_CompanyDetails`</td><td style="border:1px solid #d8dee9;padding:12px;">Registro actualizado con `CDS_IsApproved = true` y `C_Job_ID = 1000001`.</td><td style="border:1px solid #d8dee9;padding:12px;">Notifica al profesional que la relación fue aprobada.</td></tr><tr><td style="border:1px solid #d8dee9;padding:12px;">**Relación finalizada**</td><td style="border:1px solid #d8dee9;padding:12px;">`CDS_CompanyDetails` / `CDS_ProfessionalDetails`</td><td style="border:1px solid #d8dee9;padding:12px;">Registro actualizado con `CDS_IsApproved = false`.</td><td style="border:1px solid #d8dee9;padding:12px;">Notifica al usuario relacionado y, en el flujo de empresa/profesional, también al IEA.</td></tr><tr><td style="border:1px solid #d8dee9;padding:12px;">**Corrección de datos**</td><td style="border:1px solid #d8dee9;padding:12px;">`IEA_UserCorrectionRequest`</td><td style="border:1px solid #d8dee9;padding:12px;">Registro nuevo.</td><td style="border:1px solid #d8dee9;padding:12px;">Envía correo relacionado con la solicitud de corrección.</td></tr><tr><td style="border:1px solid #d8dee9;padding:12px;">**Nueva Solicitud**</td><td style="border:1px solid #d8dee9;padding:12px;">`Request`</td><td style="border:1px solid #d8dee9;padding:12px;">Solicitud nueva.</td><td style="border:1px solid #d8dee9;padding:12px;">Envía la notificación inicial al usuario configurado en `IEA_InitialSalesRep`. En el nodo de correo el destinatario se resuelve con `@$sysconfig.IEA_InitialSalesRep@`.</td></tr><tr><td style="border:1px solid #d8dee9;padding:12px;">**Cambios en Solicitud**</td><td style="border:1px solid #d8dee9;padding:12px;">`Request`</td><td style="border:1px solid #d8dee9;padding:12px;">Solicitud actualizada.</td><td style="border:1px solid #d8dee9;padding:12px;">Ejecuta notificaciones de cambio de solicitud con `SendMailText CDS`.</td></tr></tbody></table>

## Notas sobre correos

- Los correos del flujo se ejecutan desde iDempiere/Lirion mediante el proceso `SendMailText CDS`.
- Las plantillas, destinatarios y configuradores se administran en Lirion; el portal consume el resultado del flujo, pero no define por sí solo todas las reglas de envío.
- Cuando el correo contiene un enlace de validación, ese enlace apunta a una URL del portal con un parámetro que permite identificar el registro a validar.

## Relación con `com.cdsoftware.iea`

El plugin `com.cdsoftware.iea` complementa el flujo con funciones de materiales: generación de etiquetas para líneas de recibo completadas, notificaciones de vencimiento de productos y propagación de datos desde solicitudes hacia recibos de materiales mediante el callout `RequestInOut`. Esta parte está en desarrollo y debe documentarse como dependencia operativa cuando el flujo de materiales entre en uso.

# Referencia Operativa

FAQ, pendientes por confirmar, capturas recomendadas y notas para mantenimiento documental.

# FAQ y Contenido Público

El portal consume preguntas frecuentes desde Lirion mediante el modelo `CDS_FAQ`. Esto permite administrar contenido público sin modificar el código Flutter.

## Endpoint usado

El portal consulta:

```
CDS_FAQ?$select=CDS_Question_FAQ,CDS_Response_FAQ,SeqNo&$orderby=SeqNo
```

## Acceso público controlado

La consulta de contenido público se realiza a través del bus de integración. Para permitir que el portal muestre las FAQ sin exponer acceso general a iDempiere, se utiliza un token de contenido público.

<p class="callout warning">**Importante:** el valor del token no debe documentarse aquí. Solo debe administrarse en Lirion por personal autorizado.</p>

<table id="bkmrk-elemento-uso-rest-au" style="width:100%;border-collapse:collapse;margin:12px 0 20px 0;"><thead><tr><th style="border:1px solid #d8dee9;padding:12px;background:#eef2f7;text-align:left;">Elemento</th><th style="border:1px solid #d8dee9;padding:12px;background:#eef2f7;text-align:left;">Uso</th></tr></thead><tbody><tr><td style="border:1px solid #d8dee9;padding:12px;">`Rest Auth Token`</td><td style="border:1px solid #d8dee9;padding:12px;">Ventana de Lirion donde se administra el token usado por el bus de integración para contenido público.</td></tr><tr><td style="border:1px solid #d8dee9;padding:12px;">Rol limitado</td><td style="border:1px solid #d8dee9;padding:12px;">Rol creado para limitar el alcance del token y permitir únicamente la lectura de FAQ/contenido público.</td></tr><tr><td style="border:1px solid #d8dee9;padding:12px;">Bus de integración</td><td style="border:1px solid #d8dee9;padding:12px;">Intermedia la consulta desde el portal hacia iDempiere sin exponer credenciales de usuario final.</td></tr></tbody></table>

## Campos clave

<table id="bkmrk-campo-uso-cds_questi" style="width:100%;border-collapse:collapse;margin:12px 0 20px 0;"><thead><tr><th style="border:1px solid #d8dee9;padding:12px;background:#eef2f7;text-align:left;">Campo</th><th style="border:1px solid #d8dee9;padding:12px;background:#eef2f7;text-align:left;">Uso</th></tr></thead><tbody><tr><td style="border:1px solid #d8dee9;padding:12px;">`CDS_Question_FAQ`</td><td style="border:1px solid #d8dee9;padding:12px;">Pregunta mostrada al usuario.</td></tr><tr><td style="border:1px solid #d8dee9;padding:12px;">`CDS_Response_FAQ`</td><td style="border:1px solid #d8dee9;padding:12px;">Respuesta pública.</td></tr><tr><td style="border:1px solid #d8dee9;padding:12px;">`SeqNo`</td><td style="border:1px solid #d8dee9;padding:12px;">Orden de visualización.</td></tr></tbody></table>

## Recomendaciones de mantenimiento

- Mantener preguntas breves y orientadas al usuario externo.
- Evitar respuestas con reglas operativas internas que cambien con frecuencia.
- Usar `SeqNo` para ordenar las preguntas más importantes al inicio.
- Revisar que los textos sean consistentes con correos, formularios y mensajes del portal.
- Revisar periódicamente el rol asociado al token público para confirmar que solo tenga acceso al contenido necesario.