# ANÁLISIS DE CHECKBOXES EN GEOCERCA CONTROL

## 📋 RESUMEN EJECUTIVO

Este documento explica la funcionalidad de cada checkbox en la tabla de geocercas, su lógica, y si están implementados correctamente en el nuevo sistema.

---

## 🔍 CHECKBOXES Y SU FUNCIONALIDAD

### 1. **IN (Entrada)** ✅ IMPLEMENTADO

**Campo en BD:** `opciones_geocerca.entrada`  
**Valor por defecto:** `'1'` (activado por defecto)

**Funcionalidad:**
- Cuando está **marcado (`'1'`)**: El sistema genera una **alerta cuando el vehículo ENTRA a la geocerca**
- Cuando está **desmarcado (`'0'`)**: NO se genera alerta al entrar

**Lógica en el sistema:**
- El sistema de monitoreo GPS detecta cuando un vehículo cruza el perímetro de la geocerca
- Si `entrada = '1'`, se crea un registro en `historico_alerta` o similar
- Esta alerta puede activar notificaciones según otras opciones (email, monitor, etc.)

**Estado actual:** ✅ Implementado correctamente
- Se guarda en `opciones_geocerca.entrada`
- Se lee desde la API `get-geocercas.php`
- Se actualiza mediante `actualizar-geocerca.php`

---

### 2. **OUT (Salida)** ✅ IMPLEMENTADO

**Campo en BD:** `opciones_geocerca.salida`  
**Valor por defecto:** `'1'` (activado por defecto)

**Funcionalidad:**
- Cuando está **marcado (`'1'`)**: El sistema genera una **alerta cuando el vehículo SALE de la geocerca**
- Cuando está **desmarcado (`'0'`)**: NO se genera alerta al salir

**Lógica en el sistema:**
- Similar a "In", pero detecta cuando el vehículo sale del polígono
- Útil para monitorear cuando un vehículo abandona una zona específica (ej: taller, almacén)

**Estado actual:** ✅ Implementado correctamente
- Se guarda en `opciones_geocerca.salida`
- Se lee desde la API `get-geocercas.php`
- Se actualiza mediante `actualizar-geocerca.php`

---

### 3. **EMAIL** ✅ IMPLEMENTADO

**Campo en BD:** `opciones_geocerca.email`  
**Valor por defecto:** `'0'` (desactivado por defecto)

**Funcionalidad:**
- Cuando está **marcado (`'1'`)**: Se envía un **correo electrónico** cuando se activa una alerta de entrada/salida
- Cuando está **desmarcado (`'0'`)**: NO se envía email

**Lógica en el sistema:**
- Si `email = '1'` Y (`entrada = '1'` O `salida = '1'`), el sistema envía un email de notificación
- El email contiene información sobre el vehículo, la geocerca, y el evento (entrada/salida)

**Estado actual:** ✅ Implementado correctamente
- Se guarda en `opciones_geocerca.email`
- Se lee desde la API `get-geocercas.php`
- Se actualiza mediante `actualizar-geocerca.php`
- ⚠️ **Nota**: La funcionalidad de envío de emails debe estar implementada en el sistema de alertas backend

---

### 4. **MONITOR** ✅ IMPLEMENTADO

**Campo en BD:** `opciones_geocerca.monitor`  
**Valor por defecto:** `'0'` (desactivado por defecto)

**Funcionalidad:**
- Cuando está **marcado (`'1'`)**: La alerta aparece en el **monitor/panel de alertas** del sistema
- Cuando está **desmarcado (`'0'`)**: NO aparece en el monitor

**Lógica en el sistema:**
- Si `monitor = '1'`, las alertas de esta geocerca se muestran en el panel de monitoreo
- Permite filtrar qué geocercas son importantes para el monitoreo en tiempo real

**Estado actual:** ✅ Implementado correctamente
- Se guarda en `opciones_geocerca.monitor`
- Se lee desde la API `get-geocercas.php`
- Se actualiza mediante `actualizar-geocerca.php`
- ⚠️ **Nota**: La funcionalidad de mostrar en monitor debe estar implementada en el sistema de alertas

---

### 5. **TALLER** ✅ IMPLEMENTADO

**Campo en BD:** `opciones_geocerca.taller`  
**Valor por defecto:** `'0'` (desactivado por defecto)

**Funcionalidad:**
- Cuando está **marcado (`'1'`)**: Indica que esta geocerca es un **taller/garaje**
- Cuando está **desmarcado (`'0'`)**: NO es un taller

**Lógica en el sistema:**
- Marca geocercas especiales como talleres o garajes
- Puede usarse para:
  - Filtrar vehículos en taller
  - Generar reportes de tiempo en taller
  - Excluir de ciertos cálculos (ej: tiempo de trabajo)

**Estado actual:** ✅ Implementado correctamente
- Se guarda en `opciones_geocerca.taller`
- Se lee desde la API `get-geocercas.php`
- Se actualiza mediante `actualizar-geocerca.php`

---

### 6. **GENERAL** ✅ IMPLEMENTADO

**Campo en BD:** `geocerca.id_emp`  
**Valor por defecto:** Depende del vehículo (siempre tiene un valor)

**Funcionalidad:**
- Cuando está **marcado (`'1'`)**: La geocerca es **general de la empresa** (aplica a TODOS los vehículos de esa empresa)
- Cuando está **desmarcado (`'0'`)**: La geocerca es **específica del vehículo** (solo aplica a ese vehículo)

**Lógica en el sistema:**
- Si `id_emp != '0'`: La geocerca aparece para todos los vehículos de esa empresa
- Si `id_emp = '0'`: La geocerca solo aparece para el vehículo específico
- Se guarda en la tabla `geocerca.id_emp` (NO en `opciones_geocerca`)

**Visualización:**
- **Rojo**: `id_emp != '0'` (geocerca de empresa)
- **Azul**: `id_emp = '0'` (geocerca específica)

**Estado actual:** ✅ Implementado correctamente
- Se guarda en `geocerca.id_emp`
- Se lee desde la API `get-geocercas.php`
- Se actualiza mediante `actualizar-geocerca.php`
- La lógica de conversión está implementada (si checkbox marcado, busca `id_emp` del vehículo)

---

### 7. **ESTADO** ✅ IMPLEMENTADO

**Campo en BD:** `geocerca.estado`  
**Valor por defecto:** `'1'` (activa por defecto en geocerca control)

**Funcionalidad:**
- Cuando está **marcado (`'1'`)**: La geocerca está **ACTIVA** (el sistema la monitorea)
- Cuando está **desmarcado (`'0'`)**: La geocerca está **INACTIVA** (el sistema la ignora)

**Lógica en el sistema:**
- Si `estado = '1'`: El sistema de monitoreo GPS considera esta geocerca para generar alertas
- Si `estado = '0'`: El sistema ignora completamente esta geocerca (no genera alertas)
- Útil para desactivar temporalmente geocercas sin borrarlas

**Estado actual:** ✅ Implementado correctamente
- Se guarda en `geocerca.estado`
- Se lee desde la API `get-geocercas.php`
- Se actualiza mediante `actualizar-geocerca.php`

---

## 📊 RESUMEN DE IMPLEMENTACIÓN

| Checkbox | Campo BD | Tabla | Por Defecto | Funcionalidad | Estado |
|----------|----------|-------|-------------|---------------|--------|
| **In** | `entrada` | `opciones_geocerca` | `'1'` | Alerta al ENTRAR | ✅ Implementado |
| **Out** | `salida` | `opciones_geocerca` | `'1'` | Alerta al SALIR | ✅ Implementado |
| **Email** | `email` | `opciones_geocerca` | `'0'` | Enviar email en alerta | ✅ Implementado |
| **Monitor** | `monitor` | `opciones_geocerca` | `'0'` | Mostrar en monitor | ✅ Implementado |
| **Taller** | `taller` | `opciones_geocerca` | `'0'` | Marcar como taller | ✅ Implementado |
| **General** | `id_emp` | `geocerca` | Variable | Geocerca de empresa | ✅ Implementado |
| **Estado** | `estado` | `geocerca` | `'1'` | Activar/Desactivar | ✅ Implementado |

---

## 🔄 FLUJO DE FUNCIONAMIENTO

### Cuando se guarda una geocerca (Grabar):
1. Se crea el registro en `geocerca` con `tipo_cerca = 1`, `estado = 1`
2. Se crea el registro en `opciones_geocerca` con valores por defecto:
   - `entrada = '1'`
   - `salida = '1'`
   - `email = '0'`
   - `monitor = '0'`
   - `taller = '0'`

### Cuando se actualiza una geocerca (Grabar opciones):
1. Se actualiza `geocerca.nombre_geocerca`, `geocerca.estado`, `geocerca.id_emp`
2. Se actualiza `opciones_geocerca.entrada`, `opciones_geocerca.salida`, `opciones_geocerca.email`, `opciones_geocerca.monitor`, `opciones_geocerca.taller`

### Cuando el sistema detecta entrada/salida:
1. El sistema de monitoreo GPS verifica si el vehículo está dentro/fuera de alguna geocerca
2. Si `geocerca.estado = '1'` (activa):
   - Si `opciones_geocerca.entrada = '1'` y el vehículo ENTRA → Genera alerta
   - Si `opciones_geocerca.salida = '1'` y el vehículo SALE → Genera alerta
3. Si se genera alerta:
   - Si `opciones_geocerca.email = '1'` → Envía email
   - Si `opciones_geocerca.monitor = '1'` → Muestra en panel de alertas
   - Si `opciones_geocerca.taller = '1'` → Marca como evento de taller

---

## ✅ VERIFICACIÓN DE FUNCIONAMIENTO

### En el nuevo sistema (`geocerca-control.php`):

1. **Lectura de opciones:** ✅
   - La API `get-geocercas.php` lee correctamente todas las opciones de `opciones_geocerca`
   - Se muestran en la tabla con los checkboxes correctamente marcados/desmarcados

2. **Actualización de opciones:** ✅
   - La función `grabaropciones1()` lee todos los checkboxes
   - Envía los datos a `actualizar-geocerca.php`
   - La API actualiza correctamente `geocerca` y `opciones_geocerca`

3. **Visualización:** ✅
   - Los checkboxes se renderizan correctamente en `renderGeocercasTable()`
   - El campo "General" muestra correctamente rojo/azul según `id_emp`

### ⚠️ FUNCIONALIDAD BACKEND (Sistema de Alertas)

**Nota importante:** Los checkboxes se guardan correctamente, pero la funcionalidad real (generar alertas, enviar emails, mostrar en monitor) depende del **sistema de monitoreo GPS backend** que:
- Detecta cuando un vehículo entra/sale de geocercas
- Consulta las opciones de `opciones_geocerca`
- Genera alertas según las opciones activadas

Esta funcionalidad backend **NO está en esta vista**, está en el sistema de monitoreo en tiempo real.

---

## 🎯 CONCLUSIÓN

**Todos los checkboxes están implementados correctamente** en el nuevo sistema:
- ✅ Se leen correctamente desde la base de datos
- ✅ Se muestran correctamente en la tabla
- ✅ Se actualizan correctamente cuando se hace clic en "Grabar"
- ✅ Los valores se guardan en las tablas correctas

**La funcionalidad de los checkboxes (generar alertas, enviar emails, etc.)** está implementada en el **sistema de monitoreo GPS backend**, no en esta vista. Esta vista solo permite **configurar** las opciones de las geocercas.

---

## 📝 NOTAS ADICIONALES

### Campos no mostrados pero existentes:
- **SMS**: Existe en `opciones_geocerca.sms` pero NO se muestra en la UI (está comentado en el código original)
- **Apagar**: Existe en `opciones_geocerca.apagar` pero NO se muestra en la UI

### Valores por defecto al crear geocerca:
Según `grabar_geocercas2.php`:
- `entrada = 0` (pero se actualiza a 1 si se marca)
- `salida = 0` (pero se actualiza a 1 si se marca)
- `email = 0`
- `monitor = 0`
- `taller = 0`
- `estado = 1` (activa)
- `id_emp` = id_emp del vehículo (general por defecto)

