# Seguros API - Sistema de Intermediación de Seguros de Vehículos

Sistema completo desarrollado en PHP para funcionar como intermediario entre los puntos de venta Disashop y empresas aseguradoras como Dominicana de Seguros.

## Características Principales

### API REST
- **Gestión completa del flujo de venta de seguros** (16 pasos)
- **Validación de datos** en base de datos MasterOne (cédulas y placas)
- **Sistema OTP** para validación de transacciones
- **Integración completa** con API de Dominicana de Seguros
- **Manejo de documentos** (pólizas y carnets digitales)
- **Envío de SMS** con links cortos

### Aplicación Web de Administración
- **Dashboard interactivo** con estadísticas en tiempo real
- **Gestión de transacciones** con filtros avanzados
- **Sistema de reportería** completo
- **Configuración del sistema**
- **Logs y auditoría**

### Base de Datos
- **Dos bases de datos**: `apiseguros` (principal) y `masterone` (validación)
- **Tablas optimizadas** para transacciones, OTP, documentos y logs
- **Índices apropiados** para consultas rápidas
- **Datos de prueba** incluidos

## Estructura del Proyecto

```
segurosapi/
├── api/
│   └── index.php              # Endpoint principal del API
├── admin/
│   ├── index.php              # Dashboard administrativo
│   ├── login.php              # Sistema de login
│   └── logout.php             # Cerrar sesión
├── classes/
│   ├── DominicanaAPI.php      # Integración con Dominicana de Seguros
│   ├── Logger.php             # Sistema de logs
│   └── TransactionManager.php # Gestor de transacciones
├── config/
│   ├── config.php             # Configuración general
│   └── database.php           # Configuración de BD
├── database/
│   └── create_tables.sql      # Script de creación de tablas
└── storage/
    ├── documents/             # Documentos generados
    └── logs/                  # Archivos de log
```

## Instalación

### 1. Requisitos del Sistema
- PHP 7.4 o superior
- MySQL 5.7 o superior
- Apache con mod_rewrite habilitado
- Extensiones PHP: PDO, cURL, JSON, mbstring

### 2. Configurar Base de Datos
```sql
-- Crear las bases de datos
CREATE DATABASE apiseguros CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE DATABASE masterone CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

-- Ejecutar el script de creación de tablas
mysql -u vinikita -p apiseguros < database/create_tables.sql
```

### 3. Configurar Apache Virtual Host
```apache
<VirtualHost *:80>
    ServerName segurosapi.local
    DocumentRoot /path/to/segurosapi
    
    <Directory /path/to/segurosapi>
        AllowOverride All
        Require all granted
    </Directory>
</VirtualHost>
```

### 4. Configurar Permisos
```bash
chmod -R 755 /path/to/segurosapi
chmod -R 777 /path/to/segurosapi/storage
```

## Uso del API

### Endpoints Principales

#### 1. Iniciar Transacción
```http
POST /api/start-transaction
Content-Type: application/json

{
    "tipo_vehiculo": "automovil",
    "tipo_cobertura": "1",
    "cedula": "00100123456",
    "telefono": "8091234567",
    "placa": "A123456",
    "incluye_grua": true,
    "incluye_casa_conductor": false,
    "disashop_id": "KIOSKO_001"
}
```

#### 2. Validar Datos
```http
POST /api/validate-data
Content-Type: application/json

{
    "transaction_id": 1,
    "cedula": "00100123456",
    "placa": "A123456"
}
```

#### 3. Enviar OTP
```http
POST /api/send-otp
Content-Type: application/json

{
    "transaction_id": 1
}
```

#### 4. Validar OTP
```http
POST /api/validate-otp
Content-Type: application/json

{
    "transaction_id": 1,
    "codigo": "123456"
}
```

#### 5. Procesar Pago
```http
POST /api/process-payment
Content-Type: application/json

{
    "transaction_id": 1
}
```

#### 6. Emitir Póliza
```http
POST /api/emit-policy
Content-Type: application/json

{
    "transaction_id": 1
}
```

### Estados de Transacción
1. `iniciada` - Transacción creada
2. `datos_validados` - Cédula y placa validadas
3. `otp_enviado` - Código OTP enviado
4. `otp_validado` - Código OTP confirmado
5. `pago_procesado` - Pago confirmado
6. `poliza_emitida` - Póliza generada
7. `completada` - Proceso terminado exitosamente
8. `cancelada` - Transacción cancelada
9. `error` - Error en el proceso

## Administración Web

### Acceso
- **URL**: `http://segurosapi.local/admin/`
- **Usuario por defecto**: `admin`
- **Contraseña por defecto**: `password`

### Funcionalidades
- **Dashboard**: Estadísticas, gráficos y métricas
- **Transacciones**: Listado completo con filtros
- **Reportes**: Análisis de ventas y facturación
- **Configuración**: Ajustes del sistema
- **Logs**: Auditoría de actividades

## Integración con Dominicana de Seguros

### Configuración
Las credenciales se configuran en la tabla `configuraciones`:
- `dominicana_usuario`: Usuario de autenticación
- `dominicana_password`: Contraseña
- `dominicana_api_url`: URL base del API

### Flujo de Integración
1. **Autenticación** automática con token JWT
2. **Validación de persona** (crear si no existe)
3. **Procesamiento de venta** con datos del vehículo
4. **Emisión de póliza** con confirmación de pago
5. **Descarga de documentos** (póliza y carnet)

## Seguridad

### Características de Seguridad
- **Validación de entrada** en todos los endpoints
- **Rate limiting** básico implementado
- **Logs detallados** de todas las operaciones
- **Sanitización** de datos antes del almacenamiento
- **Headers CORS** configurables

### Recomendaciones para Producción
1. **Cambiar credenciales por defecto**
2. **Configurar HTTPS**
3. **Implementar rate limiting con Redis**
4. **Configurar backups automáticos**
5. **Monitorear logs de seguridad**

## Configuración de SMS

Para habilitar el envío real de SMS, configurar en la tabla `configuraciones`:
```sql
UPDATE configuraciones SET valor = 'https://api.sms-gateway.com' WHERE clave = 'sms_gateway_url';
UPDATE configuraciones SET valor = 'tu-token-aqui' WHERE clave = 'sms_gateway_token';
```

## Monitoreo y Logs

### Archivos de Log
- **Aplicación**: `storage/logs/app-YYYY-MM-DD.log`
- **Base de datos**: Tabla `system_logs`

### Niveles de Log
- `debug`: Información detallada
- `info`: Eventos importantes
- `warning`: Situaciones que requieren atención
- `error`: Errores que no detienen la ejecución
- `critical`: Errores críticos del sistema

## Soporte y Mantenimiento

### Comandos de Mantenimiento
```bash
# Limpiar logs antiguos (más de 30 días)
php -r "require 'classes/Logger.php'; (new Logger())->cleanOldLogs(30);"

# Verificar estado de la base de datos
php -r "require 'config/database.php'; echo (new Database())->connect() ? 'OK' : 'Error';"
```

### Troubleshooting
1. **Verificar conexión a BD**: Revisar credenciales en `config/database.php`
2. **Revisar logs**: Consultar `storage/logs/` y tabla `system_logs`
3. **Permisos de archivos**: Asegurar escritura en `storage/`
4. **API de Dominicana**: Verificar conectividad y credenciales

## Desarrollo

### Agregar Nuevos Endpoints
1. Editar `api/index.php`
2. Agregar ruta en el método `handleRequest()`
3. Implementar método correspondiente
4. Documentar en README

### Personalizar Dashboard
1. Editar `admin/index.php` para UI
2. Modificar consultas SQL según necesidades
3. Agregar gráficos con Chart.js

---

**Desarrollado para Disashop - República Dominicana**
**Versión**: 1.0.0
**Fecha**: 2025