# Chequeos sintéticos e internos

## Para qué sirve

Un **chequeo sintético** es una visita automática: Lymen entra cada pocos minutos a una dirección, como lo haría un paciente o un cliente, y comprueba que responda bien. Así te enterás de que el sitio de turnos se cayó **antes** de que alguien llame para avisarte, incluso de madrugada.

Los dos tipos se arman como **acciones de un [flujo](https://lymen.app/docs/operacion/flujos/)** (**Automatizar › Flujos** en el menú), con un disparador **Por horario**:

| Acción | Dónde corre | Para qué |
|---|---|---|
| **Chequear un sitio público** | Desde el servidor de Lymen, hacia direcciones de internet. | Tu sitio, tu portal de pacientes, tu tienda, una API pública. |
| **Chequear desde un gateway** | Desde un gateway instalado en tu red. | Direcciones internas: una intranet, un servidor de aplicaciones o un puerto de una base de datos que no se ven desde internet. |

Las dos dejan los **mismos datos** (`chequeo.estado`, `chequeo.codigo`, `chequeo.ms`, `chequeo.motivo` y `chequeo.certificadoDias`), así una misma condición sirve para cualquiera de las dos. Funcionan en todas las instalaciones.

> Antes, los sitios públicos se chequeaban con la plantilla de automatización **Chequear un sitio web**. Esa plantilla ya no está disponible: para un chequeo nuevo usá la acción **Chequear un sitio público**.

## Cuándo usarlo

- Para el sitio o el sistema de turnos que usan los pacientes.
- Para comprobar que un certificado de seguridad no esté por vencer.
- Para vigilar algo interno que no tiene un agente propio (un puerto, una página de salud de una aplicación).

## Quién puede qué

| Rol | Qué puede hacer |
|---|---|
| Administración | Crear, editar, pausar, ejecutar, eliminar y ver los resultados. |
| Sistemas | Lo mismo salvo eliminar (ver [Flujos](https://lymen.app/docs/operacion/flujos/#quien-puede-que)). |
| Negocio | No ve los flujos. |

## A. Chequear un sitio público

### Paso a paso

1. Entrá a **Automatizar › Flujos** y creá un flujo nuevo.
2. Disparador: **Por horario**, por ejemplo cada 5 minutos.
3. Agregá un paso **Acción › Chequear un sitio público** y poné la dirección.
4. Agregá una **Condición**: `chequeo.estado` distinto de `ok`. En la rama **Sí**, una acción para avisar (un canal, un email o un ticket).
5. Si querés vigilar el certificado, otra condición: `chequeo.certificadoDias` menor que 15.
6. Tocá **Probar sin mandar nada**, guardá y **Activá** el flujo. Para no recibir el mismo aviso una y otra vez, poné un **Período de calma** (por ejemplo 30 minutos).

### Campos

| Campo | Para qué sirve | Valor por defecto | Valores válidos | Impacto |
|---|---|---|---|---|
| Dirección del sitio | La página a visitar. | Vacía (obligatoria) | `http://` o `https://` con el nombre del sitio, hasta 500 caracteres, sin usuario ni clave en la dirección | Solo **sitios públicos**: no se aceptan direcciones de red privada, nombres internos (`intranet`, `.local`, `.internal`) ni puertos bajos que no sean 80 o 443. Cada chequeo es un pedido real a esa dirección: no la pongas si no es tuya o si cuenta visitas y te distorsiona las estadísticas. |
| Método | Cómo se pide la página. | GET | GET, HEAD | HEAD es más liviano; algunos sitios no lo atienden bien. |
| Tiempo máximo del chequeo | Cuánto se espera la respuesta. | 10 segundos | 1 a 30 | Si no responde en ese tiempo, el resultado es `error`. Muy corto: falsos fallos en sitios lentos. |
| Código esperado (opcional) | Qué respuesta cuenta como "anduvo". | Vacío: cualquier código menor a 400 | Un código (`200`), un rango (`200-299`) o hasta 10 separados por coma (`200, 204, 301-302`) | Si responde otro código, el resultado es `error` y el motivo lo dice. |

### Qué devuelve

| Dato | Qué es |
|---|---|
| `chequeo.estado` | `ok` (anduvo), `error` (respondió otro código, no respondió o el certificado no es válido) o `denegado` (la dirección lleva a una red privada). |
| `chequeo.codigo` | Código HTTP que respondió (vacío si no respondió). |
| `chequeo.ms` | Milisegundos que tardó. |
| `chequeo.motivo` | Por qué falló, en castellano. |
| `chequeo.certificadoDias` | Días que le quedan al certificado (solo `https`; negativo si ya venció). |

Un sitio caído o un certificado vencido **no** hacen fallar el paso: quedan como dato para que decidas con una condición. Un certificado vencido, autofirmado o de otro nombre da `error`, pero igual informa los días.

### Cómo se cuida

- **No sigue redirecciones.** Si el sitio responde 301 o 302, vuelve ese código (con el código esperado vacío cuenta como "anduvo"). Poné la dirección final para chequear la página de verdad.
- **No lee el contenido de la página** ni lo guarda: solo mira el código, el tiempo y el certificado. Por eso no hay condiciones de "la respuesta contiene un texto".
- **No manda usuarios, claves ni cookies.** Para un sitio que pide entrar, chequeá una página pública de salud.
- La dirección se vuelve a validar **al conectar**: si un nombre pasa a apuntar a una red privada, el resultado es `denegado`.
- **Tope de frecuencia:** hasta 30 chequeos de sitios públicos por minuto en toda la cuenta y 6 por minuto al mismo sitio. Pasado el tope, el paso se reintenta más tarde.

## B. Chequear desde un gateway (chequeo interno)

Es una **acción de un flujo**: pide a un gateway de tu red que pruebe una dirección y devuelve el resultado. Podés ramificar con una condición, por ejemplo "si el estado no es `ok`, avisar por Slack". Se arma en [Flujos](https://lymen.app/docs/operacion/flujos/) con el paso **Acción › Chequear desde un gateway**.

| Campo | Para qué sirve | Valor por defecto | Valores válidos | Impacto |
|---|---|---|---|---|
| Desde qué gateway | Qué gateway hace la prueba. | Ninguno | Los gateways activos de tu cuenta | Si el gateway está apagado, el paso falla. |
| Tipo de chequeo | Web o puerto. | Dirección web | Dirección web, Puerto | — |
| Dirección a probar (web) | Qué dirección. | Vacío | Hasta 500 caracteres | **El gateway solo prueba lo que figura en su lista permitida**, que se administra en el detalle del gateway, sección **Qué puede hacer este gateway** (ver [Gateways](https://lymen.app/docs/instalacion/gateways/#chequeos-internos-permitidos)). Si no está, el resultado es "denegado". |
| Método (web) | Cómo pedir. | GET | GET, HEAD | — |
| Destino a probar (puerto) | Servidor y puerto. | Vacío | Formato `10.0.0.5:5432`, hasta 260 caracteres | Igual que arriba: solo destinos permitidos. |
| Tiempo máximo del chequeo | Cuánto espera el gateway. | 10 segundos | 1 a 30 | — |
| Cuánto espera el resultado | Cuánto espera el flujo. | 20 segundos | 0 a 25 | Con 0 no espera y el resultado queda como "pendiente". |

El paso no usa credenciales del llavero y la dirección es texto fijo (no admite variables). Después podés usar en una condición o en un mensaje:

| Dato | Qué es |
|---|---|
| `chequeo.estado` | ok, error, denegado, rechazado, vencido o pendiente. |
| `chequeo.codigo` | Código HTTP (solo chequeos web). |
| `chequeo.ms` | Milisegundos que tardó. |
| `chequeo.motivo` | Por qué falló o se denegó. |
| `chequeo.certificadoDias` | Días que le quedan al certificado (solo direcciones https). |

Un chequeo que da error o que se deniega **no** hace fallar el paso: queda como dato para que decidas qué hacer. El paso solo falla si no se pudo pedir (por ejemplo, el gateway no existe).

## Ejemplos

- **Sitio de turnos.** Flujo cada 5 minutos → "Chequear un sitio público" a `https://turnos.tuclinica.com.ar/` → condición `chequeo.estado` distinto de `ok` → avisar por un canal. Calma: 30 minutos.
- **Lentitud.** En el mismo flujo, una condición `chequeo.ms` mayor que 2000 → avisar "el sitio está lento".
- **Certificado por vencer.** Flujo todos los días a las 09:00 → "Chequear un sitio público" → condición `chequeo.certificadoDias` menor que 15 → email a Sistemas.
- **Base de datos interna.** Flujo cada 5 minutos → acción "Chequear desde un gateway", tipo Puerto, destino `10.0.0.5:5432` → condición `chequeo.estado` distinto de `ok` → avisar por un canal.

## Problemas comunes

- **"Apunta a una red privada" o "ese nombre es de una red interna".** "Chequear un sitio público" es solo para direcciones de internet. Para direcciones de tu red, usá "Chequear desde un gateway".
- **Da `denegado` con un sitio público.** El nombre resuelve (al menos en parte) a una dirección privada. Revisá el DNS del sitio.
- **Siempre da 301 o 302.** El sitio redirige (por ejemplo de `http://` a `https://` o a `www.`). Poné la dirección final.
- **Siempre dice "denegado" desde un gateway.** La dirección no está en la lista permitida del gateway. Agregala en **Observar › Infraestructura**, detalle del gateway, **Qué puede hacer este gateway › Chequeos internos permitidos** (hace falta rol Administración). Ver [Gateways](https://lymen.app/docs/instalacion/gateways/#chequeos-internos-permitidos).
- **El paso se reintenta con "Se llegó al tope de chequeos".** Hay demasiados chequeos de sitios públicos por minuto. Espaciá los disparadores (cada 5 minutos alcanza).
- **Falsos fallos de madrugada.** Subí el "Tiempo máximo del chequeo" o agregá un paso **Esperar** y un segundo chequeo antes de avisar. Si hay un mantenimiento programado, usá una [ventana de mantenimiento](https://lymen.app/docs/operacion/mantenimiento/).
- **Quedó "Pendiente".** El flujo no esperó el resultado del gateway: subí "Cuánto espera el resultado" (máximo 25 s).
- **Tengo una automatización vieja "Chequear un sitio web".** Mirá [Automatizaciones](https://lymen.app/docs/operacion/automatizaciones/): armá el flujo nuevo y, cuando ande, pausá o eliminá la vieja.
