# Webhooks Module

## Descripcion

Sistema de webhooks outbound para notificar eventos del ERP a sistemas externos. Permite registrar endpoints, suscribirse a tipos de eventos, y gestiona la entrega con reintentos automaticos, firma de payloads y monitoreo de salud de endpoints.

## Entidades

| Entidad | Schema | Descripcion |
|---------|--------|-------------|
| `WebhookEventType` | webhooks.event_types | Catalogo de tipos de eventos disponibles (order.created, inventory.low_stock, etc.) |
| `WebhookEndpoint` | webhooks.endpoints | Endpoints registrados con URL, autenticacion, reintentos y filtros |
| `WebhookSubscription` | webhooks.subscriptions | Suscripciones de endpoints a tipos de eventos especificos |
| `WebhookEvent` | webhooks.events | Eventos generados pendientes de despacho |
| `WebhookDelivery` | webhooks.deliveries | Intentos de entrega con request/response y estado |
| `EndpointLog` | webhooks.endpoint_log | Log de actividad por endpoint |

## Servicios

| Servicio | Responsabilidades |
|----------|-------------------|
| `WebhooksService` | CRUD de event types, endpoints, eventos y deliveries; busqueda de endpoints por evento; estadisticas |

## Endpoints

| Method | Path | Descripcion |
|--------|------|-------------|
| GET | `/event-types` | Lista tipos de eventos disponibles |
| GET | `/event-types/:code` | Obtiene tipo de evento por codigo |
| GET | `/event-types/category/:category` | Lista tipos por categoria |
| GET | `/endpoints` | Lista endpoints del tenant |
| GET | `/endpoints/active` | Lista endpoints activos |
| GET | `/endpoints/:id` | Obtiene endpoint por ID |
| POST | `/endpoints` | Registra nuevo endpoint |
| PATCH | `/endpoints/:id` | Actualiza endpoint |
| DELETE | `/endpoints/:id` | Elimina endpoint |
| PATCH | `/endpoints/:id/toggle` | Activa/desactiva endpoint |
| GET | `/endpoints/:id/stats` | Estadisticas de entrega del endpoint |
| GET | `/endpoints/:id/deliveries` | Historial de entregas del endpoint |
| POST | `/events` | Crea nuevo evento para despacho |
| GET | `/events/:id` | Obtiene evento con deliveries |
| GET | `/events/pending` | Lista eventos pendientes |
| GET | `/deliveries/:id` | Obtiene detalles de delivery |
| GET | `/events/:eventId/deliveries` | Lista deliveries de un evento |

## Dependencias

- `common` - Utilidades compartidas
- `auth` - Contexto de tenant

## Configuracion

No requiere configuracion de ambiente. La configuracion de autenticacion es por endpoint.

## Tipos de Autenticacion Soportados

| Tipo | Descripcion |
|------|-------------|
| `none` | Sin autenticacion |
| `basic` | HTTP Basic Auth |
| `bearer` | Bearer token |
| `hmac` | HMAC signature en header |
| `oauth2` | OAuth 2.0 client credentials |

## Categorias de Eventos

- `sales` - Eventos de ventas y ordenes
- `inventory` - Eventos de inventario
- `customers` - Eventos de clientes
- `auth` - Eventos de autenticacion
- `billing` - Eventos de facturacion
- `system` - Eventos del sistema

## Politica de Reintentos

- Reintentos configurables por endpoint (default: 5)
- Delay inicial configurable (default: 60 segundos)
- Backoff exponencial con multiplicador configurable (default: 2.0)
- Rate limiting por minuto y hora
