Base de Datos y Configuración
Estado de conexión MySQL para quierosu_crm y scripts SQL para tu servidor.
Diagnóstico de Conexión MySQL
Servidor / Host
localhost:3306
Base de Datos
quierosu_crm
Usuario
quierosu_quieros
Estado
Operativa
Editar Credenciales en .env
Script SQL para Copiar en tu Servidor Remoto (phpMyAdmin)
Puedes copiar y pegar este contenido directamente en la pestaña SQL de tu phpMyAdmin o consola MySQL.
-- ==============================================================================
-- DELIFAST CRM - BASE DE DATOS quierosu_crm
-- Compatible con MySQL 5.7+, MySQL 8.0+ y MariaDB
-- ==============================================================================
CREATE DATABASE IF NOT EXISTS `quierosu_crm`
DEFAULT CHARACTER SET utf8mb4
DEFAULT COLLATE utf8mb4_unicode_ci;
USE `quierosu_crm`;
SET FOREIGN_KEY_CHECKS = 0;
-- 1. Tabla: etapas (Las 8 etapas del embudo comercial)
DROP TABLE IF EXISTS `etapas`;
CREATE TABLE `etapas` (
`id` INT AUTO_INCREMENT PRIMARY KEY,
`nombre` VARCHAR(100) NOT NULL,
`orden` INT NOT NULL DEFAULT 1,
`color` VARCHAR(20) NOT NULL DEFAULT '#64748b',
`clase_badge` VARCHAR(100) NOT NULL DEFAULT 'bg-slate-100 text-slate-700',
`es_ganado` TINYINT(1) NOT NULL DEFAULT 0,
`es_perdido` TINYINT(1) NOT NULL DEFAULT 0
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
-- 2. Tabla: locales (Directorio de restaurantes y prospectos)
DROP TABLE IF EXISTS `locales`;
CREATE TABLE `locales` (
`id` INT AUTO_INCREMENT PRIMARY KEY,
`nombre` VARCHAR(150) NOT NULL,
`nombre_fantasia` VARCHAR(150) NULL,
`razon_social` VARCHAR(150) NULL,
`rut` VARCHAR(50) NULL,
`contacto_nombre` VARCHAR(100) NULL,
`contacto_cargo` VARCHAR(100) NULL,
`telefono` VARCHAR(50) NULL,
`email` VARCHAR(150) NULL,
`direccion` VARCHAR(255) NULL,
`comuna` VARCHAR(100) NULL,
`zona` VARCHAR(100) NULL,
`tipo_cocina` VARCHAR(100) NULL,
`etapa_id` INT NOT NULL DEFAULT 1,
`comision` DECIMAL(5,2) NOT NULL DEFAULT 0.00,
`pedidos_estimados` INT NOT NULL DEFAULT 0,
`horarios` VARCHAR(150) NULL,
`menu_url` VARCHAR(255) NULL,
`pos` VARCHAR(100) NULL,
`prioridad` ENUM('baja', 'media', 'alta') NOT NULL DEFAULT 'media',
`origen` VARCHAR(100) NULL,
`notas` TEXT NULL,
`motivo_descarte` VARCHAR(255) NULL,
`creado_el` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
`actualizado_el` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
INDEX `idx_etapa` (`etapa_id`),
INDEX `idx_comuna` (`comuna`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
-- 3. Tabla: interacciones (Bitácora de llamadas, WhatsApp, reuniones, notas)
DROP TABLE IF EXISTS `interacciones`;
CREATE TABLE `interacciones` (
`id` INT AUTO_INCREMENT PRIMARY KEY,
`local_id` INT NOT NULL,
`tipo` ENUM('llamada', 'whatsapp', 'reunion', 'visita', 'email', 'nota') NOT NULL DEFAULT 'nota',
`titulo` VARCHAR(200) NOT NULL,
`detalle` TEXT NULL,
`fecha` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
INDEX `idx_interaccion_local` (`local_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
-- 4. Tabla: tareas (Seguimientos pendientes y recordatorios)
DROP TABLE IF EXISTS `tareas`;
CREATE TABLE `tareas` (
`id` INT AUTO_INCREMENT PRIMARY KEY,
`local_id` INT NOT NULL,
`titulo` VARCHAR(255) NOT NULL,
`fecha_limite` DATE NULL,
`completada` TINYINT(1) NOT NULL DEFAULT 0,
`creado_el` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
INDEX `idx_tarea_local` (`local_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
-- 5. Tabla: historial_etapas (Trazabilidad de cambios de etapa)
DROP TABLE IF EXISTS `historial_etapas`;
CREATE TABLE `historial_etapas` (
`id` INT AUTO_INCREMENT PRIMARY KEY,
`local_id` INT NOT NULL,
`etapa_anterior_id` INT NULL,
`etapa_nueva_id` INT NOT NULL,
`nota` VARCHAR(255) NULL,
`fecha` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
INDEX `idx_hist_local` (`local_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
SET FOREIGN_KEY_CHECKS = 1;
-- ==============================================================================
-- DATOS INICIALES Y SEMILLA
-- ==============================================================================
-- Insertar las 8 etapas del flujo comercial
INSERT INTO `etapas` (`id`, `nombre`, `orden`, `color`, `clase_badge`, `es_ganado`, `es_perdido`) VALUES
(1, 'Prospecto', 1, '#64748b', 'bg-slate-100 text-slate-700 border-slate-300', 0, 0),
(2, 'Contactado', 2, '#0284c7', 'bg-sky-100 text-sky-800 border-sky-300', 0, 0),
(3, 'Reunión / Demo', 3, '#6366f1', 'bg-indigo-100 text-indigo-800 border-indigo-300', 0, 0),
(4, 'Propuesta enviada', 4, '#d97706', 'bg-amber-100 text-amber-800 border-amber-300', 0, 0),
(5, 'En Onboarding', 5, '#8b5cf6', 'bg-purple-100 text-purple-800 border-purple-300', 0, 0),
(6, 'Capacitación', 6, '#06b6d4', 'bg-cyan-100 text-cyan-800 border-cyan-300', 0, 0),
(7, 'Activo', 7, '#10b981', 'bg-emerald-100 text-emerald-800 border-emerald-300', 1, 0),
(8, 'Descartado', 8, '#ef4444', 'bg-rose-100 text-rose-800 border-rose-300', 0, 1)
ON DUPLICATE KEY UPDATE `nombre` = VALUES(`nombre`), `orden` = VALUES(`orden`), `color` = VALUES(`color`);
-- Insertar locales de prueba
INSERT INTO `locales` (
`id`, `nombre`, `nombre_fantasia`, `razon_social`, `rut`,
`contacto_nombre`, `contacto_cargo`, `telefono`, `email`,
`direccion`, `comuna`, `zona`, `tipo_cocina`, `etapa_id`,
`comision`, `pedidos_estimados`, `horarios`, `menu_url`, `pos`,
`prioridad`, `origen`, `notas`
) VALUES
(
1, 'Akira Sushi & Bowls', 'Akira Sushi', 'Inversiones Akira SpA', '76.890.123-4',
'Rodrigo Morales', 'Dueño', '+56987112233', 'contacto@akirasushi.cl',
'Av. Providencia 1240', 'Providencia', 'Oriente', 'Sushi & Nikkei', 3,
14.50, 450, 'Lun a Dom 12:30 a 23:00', 'https://menu.akirasushi.cl', 'Toteat',
'alta', 'Prospección directa', 'Muy interesados en la cobertura de Providencia y Las Condes.'
),
(
2, 'Burger Garage', 'Burger Garage', 'Gastronomía Sabores SpA', '77.123.456-7',
'Camila Valenzuela', 'Administradora', '+56994445566', 'camila@burgergarage.cl',
'Av. Italia 1580', 'Ñuñoa', 'Barrio Italia', 'Hamburguesas', 5,
15.00, 600, 'Mar a Dom 13:00 a 00:00', 'https://drive.google.com/demo_menu', 'Defontana',
'alta', 'Referido', 'Contrato firmado. En etapa de carga de fotos y configuración de combos.'
),
(
3, 'La Pizzeria di Napoli', 'Di Napoli Pizzería', 'Comercializadora Napoli Ltda', '76.345.678-9',
'Matías Rossi', 'Chef Propietario', '+56976543210', 'mrossi@dinapoli.cl',
'Av. Vitacura 4100', 'Vitacura', 'Alonso de Córdova', 'Pizza & Pastas', 1,
0.00, 300, 'Lun a Sab 12:30 a 22:30', '', 'Fudo',
'media', 'Web Inbound', 'Solicitaron información sobre tarifas y tiempos de entrega.'
),
(
4, 'Wok & Roll Asian Fusion', 'Wok & Roll', 'Asian Food Group SpA', '76.999.888-1',
'Ignacio Silva', 'Gerente', '+56988223344', 'isilva@wokandroll.cl',
'Monjitas 520', 'Santiago Centro', 'Lastarria', 'Comida Asiática', 7,
13.00, 800, 'Lun a Dom 12:00 a 23:30', 'https://wokandroll.cl/menu', 'RestoWorks',
'media', 'Prospección directa', 'Local totalmente integrado y activo en la plataforma.'
),
(
5, 'Tacos El Carnal', 'El Carnal Taquería', 'Sabores Mexicanos SpA', '76.555.444-3',
'Gabriel Hernández', 'Administrador', '+56977889900', 'contacto@elcarnal.cl',
'Manuel Montt 890', 'Providencia', 'Manuel Montt', 'Mexicana', 4,
15.00, 350, 'Mar a Dom 13:00 a 23:00', 'https://elcarnal.cl/carta', 'Toteat',
'media', 'Prospección directa', 'Propuesta enviada con 15% de comisión.'
)
ON DUPLICATE KEY UPDATE `nombre` = VALUES(`nombre`);
-- Insertar interacciones de prueba
INSERT INTO `interacciones` (`local_id`, `tipo`, `titulo`, `detalle`, `fecha`) VALUES
(1, 'llamada', 'Llamada de presentación', 'Conversamos sobre la propuesta de valor de DeliFast. Agendamos demo.', NOW() - INTERVAL 3 DAY),
(1, 'whatsapp', 'Envío de PDF', 'Se envió presentación con comparativa de tarifas.', NOW() - INTERVAL 2 DAY),
(2, 'reunion', 'Reunión de cierre', 'Acordamos 15% de comisión. Iniciamos carga de menú.', NOW() - INTERVAL 4 DAY),
(5, 'email', 'Envío de propuesta formal', 'Propuesta enviada detallando liquidaciones semanales.', NOW() - INTERVAL 1 DAY);
-- Insertar tareas de prueba
INSERT INTO `tareas` (`local_id`, `titulo`, `fecha_limite`, `completada`) VALUES
(1, 'Preparar demo con simulación de pedido en vivo', CURDATE() + INTERVAL 1 DAY, 0),
(2, 'Revisar fotos de menú y aprobar resolución', CURDATE() + INTERVAL 2 DAY, 0),
(3, 'Llamar a Matías para primer contacto comercial', CURDATE(), 0),
(5, 'Hacer seguimiento a la propuesta enviada por WhatsApp', CURDATE() + INTERVAL 3 DAY, 0);