# Estado Etapa 1 - CRM Portal Visas

## Alcance ejecutado
Se implementó la base estructural de la Etapa 1 del CRM, manteniendo el portal actual y creando una base de datos independiente para la información comercial del CRM.

Base CRM nueva:

```text
ventasin_crm_prod
```

Base portal existente usada solo como referencia/consulta:

```text
ventasin_portalvi_prod
```

El CRM queda integrado en el menú existente dentro de:

```text
Comercial > CRM
```

No se crea un módulo principal separado llamado CRM.

## Archivos nuevos principales

- `core/DatabaseCrm.php`
- `app/controllers/CrmBaseController.php`
- `app/controllers/CrmdashboardController.php`
- `app/controllers/CrmclientesController.php`
- `app/controllers/CrmcontactosController.php`
- `app/controllers/CrmoportunidadesController.php`
- `app/controllers/CrmagendaController.php`
- `app/controllers/CrmcotizacionesController.php`
- `app/controllers/CrmvisitasController.php`
- `app/controllers/CrmcampaniasController.php`
- `app/controllers/CrmreportesController.php`
- `app/controllers/CrmimportacionesController.php`
- `app/controllers/CrmapiController.php`
- `app/controllers/CrmconfiguracionController.php`
- `app/models/CrmBaseModel.php`
- `app/models/CrmDashboard.php`
- `app/models/CrmCliente.php`
- `app/models/CrmContacto.php`
- `app/models/CrmOportunidad.php`
- `app/models/CrmAgenda.php`
- `app/models/CrmCotizacion.php`
- `app/models/CrmVisita.php`
- `app/models/CrmCampania.php`
- `app/models/CrmReporte.php`
- `app/models/CrmImportacion.php`
- `app/models/CrmApi.php`
- `app/models/CrmConfiguracion.php`
- `app/views/modulos/comercial/crm/*`
- `public/assets/css/crm.css`
- `public/assets/js/crm_*.js`
- `database/migrations/2026_crm_etapa_1_base.sql`
- `database/migrations/2026_crm_etapa_1_rollback.sql`

## Archivos existentes modificados

- `app/views/layout.php`: agrega CSS y JS del CRM.
- `app/views/partials/navbar.php`: muestra “Portal Visas CRM” cuando la ruta actual corresponde al CRM.
- `public/assets/js/sidebar.js`: dispara evento `crm:content-loaded` al cargar vistas por navegación interna para inicializar los módulos CRM.

## Funcionalidades listas en Etapa 1

### Clientes
- Listado.
- Creación.
- Edición.
- Consulta.
- Vista 360 básica.
- Filtros por estado, segmento y ejecutivo.
- Asignación de responsable.

### Contactos
- Listado por cliente.
- Creación.
- Edición.
- Contacto principal.

### Oportunidades
- Listado.
- Creación.
- Edición.
- Asociación a cliente y contacto.
- Ejecutivo responsable.
- Etapa, valor, prioridad y fecha estimada.
- Kanban inicial.

### Agenda / actividades base
- Creación de actividad.
- Asociación a cliente y oportunidad.
- Responsable.
- Fecha, hora y estado.
- Validación básica de cruces.

### API ERP base
- Controlador base creado.
- Método `crmapi/health` preparado.
- Tablas base de API creadas.

## Base de datos

Se creó una base CRM independiente con tablas principales:

- `crm_clientes`
- `crm_contactos`
- `crm_oportunidades`
- `crm_pipeline_etapas`
- `crm_actividades`
- `crm_actividad_historial`
- `crm_cotizaciones`
- `crm_cotizacion_detalle`
- `crm_visitas`
- `crm_rutas`
- `crm_ubicaciones`
- `crm_campanias`
- `crm_campania_clientes`
- `crm_importaciones`
- `crm_importacion_errores`
- `crm_api_clients`
- `crm_api_tokens`
- `crm_api_logs`
- `crm_api_sync_batches`
- `crm_api_sync_errors`

## Migración inicial contemplada

El SQL migra datos desde la base del portal hacia la base CRM:

- `cc_clientes_inactivos` → `crm_clientes` / `crm_campania_clientes`
- `cc_gestiones` → `crm_actividades`
- `cc_productos_historico` → `crm_cliente_productos_historico`
- `cc_agenda` → `crm_actividades`
- `cc_agenda_historial` → `crm_actividad_historial`
- `registrovisitas` → `crm_clientes` / `crm_visitas` / `crm_ubicaciones`
- `rutas_asesor` → `crm_rutas` / `crm_ubicaciones`

No se elimina información de las tablas antiguas.

## Tablas antiguas que quedan como respaldo

- `cc_agenda`
- `cc_agenda_historial`
- `cc_clientes_inactivos`
- `cc_gestiones`
- `cc_productos_historico`
- `registrovisitas`
- `rutas_asesor`
- `seguimientos`
- `seguimiento_observaciones`

La fuente operativa nueva para CRM debe ser `ventasin_crm_prod`.

## Pendiente para Etapa 2

- Agenda completa con día, semana, mes, reprogramación y notificaciones.
- Visitas, rutas y ubicación completas.
- Cotizaciones completas.
- Campañas y Contact Center completas.
- Importaciones ERP completas.
- API ERP completa.
- Dashboard operativo real.
- Reportes operativos.
- Configuración CRM completa.

## Decisión importante

El entregable se empaqueta como ZIP liviano de cambios, no como portal completo. Solo contiene archivos nuevos o modificados y debe copiarse encima del portal actual respetando la estructura de carpetas.
