Documentación del Sistema CDA
Accede a toda la documentación necesaria para instalar, configurar y utilizar el sistema de notificaciones especializado para Centros de Diagnóstico Automotriz en Colombia.
Manual de Usuario
Guía completa para usuarios finales del sistema. Aprende a gestionar clientes, vehículos, documentos y campañas de marketing de manera eficiente.
- Acceso y autenticación: Configuración de usuarios y seguridad
- Gestión de clientes: Registro, consulta y edición de información
- Control de vehículos: Administración de flota automotriz
- Sistema de notificaciones: Envío automático de recordatorios
- Reportes y analíticas: Métricas de rendimiento del sistema
Guía de Solución de Problemas
Resuelve incidencias comunes del sistema con esta guía práctica. Diagnóstico rápido y soluciones efectivas para problemas técnicos.
- Problemas de instalación: Errores comunes y soluciones
- Errores de conexión: Configuración de red y servidores
- Problemas con base de datos: MySQL y optimización
- Errores de email y notificaciones: SendGrid y configuración SMTP
- Problemas de rendimiento: Optimización y monitoreo
Manual de Usuario - Sistema de Marketing y Recordatorios CDA
🎯 Tabla de Contenidos
- Introducción al Sistema
- Acceso y Autenticación
- Dashboard Principal
- Gestión de Clientes
- Gestión de Vehículos
- Gestión de Documentos
- Sistema de Notificaciones
- Gestión de Promociones
- Reportes y Analíticas
- Configuración del Sistema
- Preguntas Frecuentes
🚀 Introducción al Sistema
El Sistema de Marketing y Recordatorios para Centros de Diagnóstico Automotriz (CDA) es una plataforma integral diseñada para automatizar y optimizar la gestión de clientes, vehículos, documentos y campañas de marketing en tu centro de diagnóstico automotriz.
🎯 Objetivos Principales
- ✅ Automatizar recordatorios de documentos vehiculares
- 📊 Centralizar información de clientes y vehículos
- 📈 Incrementar retención de clientes mediante marketing efectivo
- 🚀 Optimizar procesos administrativos y operativos
- 📱 Facilitar comunicación con clientes
🔐 Acceso y Autenticación
📋 Requisitos de Acceso
- ✅ Usuario y contraseña proporcionados por el administrador
- ✅ Navegador web moderno (Chrome, Firefox, Safari, Edge)
- ✅ Conexión a internet estable
- ✅ Correo electrónico válido para notificaciones
🔑 Inicio de Sesión
- Abre tu navegador y visita la URL del sistema
- Ingresa tus credenciales:
- 📧 Correo electrónico
- 🔒 Contraseña
- Haz clic en "Iniciar Sesión"
- Verifica tu identidad si se requiere autenticación de dos factores
📊 Dashboard Principal
El dashboard es tu centro de control principal, donde encontrarás información clave y acceso rápido a todas las funcionalidades.
📈 Métricas Principales
| Métrica | Descripción | Actualización |
|---|---|---|
| 👥 Clientes Activos | Total de clientes registrados y activos | Tiempo real |
| 🚗 Vehículos | Total de vehículos en el sistema | Tiempo real |
| ✅ Documentos Vigentes | Documentos al día | Cada 10 minutos |
| ⚠️ Por Vencer | Documentos que vencen en 30 días | Cada 10 minutos |
👥 Gestión de Clientes
La sección de clientes te permite gestionar toda la información de tus clientes de manera centralizada.
➕ Registro de Nuevo Cliente
📝 Información Básica Requerida
- 📛 Nombre completo - Nombres y apellidos
- 📧 Correo electrónico - Para notificaciones
- 📱 Teléfono - Contacto principal
- 🆔 Documento de identidad - Cédula o NIT
- 🏢 Tipo de cliente - Particular o Empresa
🔍 Búsqueda Rápida
- Por nombre: Escribe el nombre del cliente
- Por documento: Ingresa número de identificación
- Por teléfono: Busca por número telefónico
- Por correo: Filtra por dirección email
📧 Sistema de Notificaciones
El sistema de notificaciones envía recordatorios automáticos a los clientes sobre vencimientos de documentos, promociones y comunicaciones importantes.
🎯 Tipos de Notificaciones
| Tipo | Propósito | Frecuencia | Canal |
|---|---|---|---|
| 📅 Recordatorios | Vencimientos de documentos | 7, 3, 1 día antes | |
| 🎯 Promociones | Ofertas especiales | Según campaña | Email/SMS |
| 📢 Comunicados | Información general | Eventual |
❓ Preguntas Frecuentes
🔐 Acceso y Seguridad
P: ¿Olvidé mi contraseña, cómo la recupero?
R: Haz clic en "¿Olvidaste tu contraseña?" en la pantalla de login, ingresa tu correo y sigue las instrucciones.
P: ¿Puedo acceder desde múltiples dispositivos?
R: Sí, puedes acceder desde cualquier dispositivo con internet. Solo un usuario por sesión.
👥 Clientes y Vehículos
P: ¿Puedo importar clientes masivamente?
R: Sí, usa la función de importación CSV desde el panel de clientes.
P: ¿Qué hago si un cliente tiene múltiples vehículos?
R: Registra cada vehículo por separado y asígnales al mismo cliente.
Manual Técnico - Sistema de Marketing y Recordatorios CDA
📋 Tabla de Contenidos
- Arquitectura del Sistema
- Requisitos del Sistema
- Instalación y Configuración
- Base de Datos
- API Endpoints
- Seguridad
- Despliegue en Producción
- Mantenimiento y Monitoreo
🏗️ Arquitectura del Sistema
El Sistema CDA está construido sobre una arquitectura moderna y escalable diseñada para alto rendimiento y mantenibilidad.
🎯 Vista General de la Arquitectura
Frontend (Astro):
- Astro 5.x con TypeScript
- TailwindCSS para estilos
- Diseño completamente responsivo
Backend (Node.js):
- API Routes con TypeScript
- Autenticación JWT
- Middleware de seguridad
Base de Datos (MySQL):
- MySQL 8.x con motor InnoDB
- Índices optimizados
- Triggers y eventos programados
💻 Requisitos del Sistema
🔧 Requisitos Mínimos
| Componente | Mínimo | Recomendado |
|---|---|---|
| CPU | 2 núcleos | 4+ núcleos |
| RAM | 4 GB | 8 GB+ |
| Almacenamiento | 50 GB SSD | 100 GB+ SSD |
| Sistema Operativo | Ubuntu 20.04+ / Windows Server 2019+ | Ubuntu 22.04 LTS |
📦 Software Requerido
- Node.js: 18.x o superior
- npm: 9.x o superior
- MySQL: 8.0 o superior
- Git: 2.30 o superior
🚀 Instalación y Configuración
📋 Proceso de Instalación Completa
1️⃣ Preparación del Entorno
# Clonar el repositorio
git clone https://github.com/cda-colombia/sistema-marketing-recordatorios.git
cd sistema-marketing-recordatorios
# Instalar dependencias
npm install
# Verificar versión de Node.js
node --version # >= 18.x
npm --version # >= 9.x
2️⃣ Configuración de Base de Datos
# Crear base de datos
mysql -u root -p
CREATE DATABASE notificaciones_automotrices
CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'app_notificaciones'@'localhost'
IDENTIFIED BY 'contraseña_segura';
GRANT ALL PRIVILEGES ON notificaciones_automotrices.*
TO 'app_notificaciones'@'localhost';
FLUSH PRIVILEGES;
# Importar schema
mysql -u app_notificaciones -p notificaciones_automotrices < schema.sql
3️⃣ Configuración de Variables de Entorno
# Copiar archivo de ejemplo
cp .env.example .env
# Editar variables
nano .env
📋 Variables Requeridas en .env
# Base de datos
DB_HOST=localhost
DB_PORT=3306
DB_USER=app_notificaciones
DB_PASSWORD=tu_contraseña_segura
DB_NAME=notificaciones_automotrices
# JWT
JWT_SECRET=tu_clave_secreta_de_al_menos_32_caracteres
JWT_EXPIRES_IN=24h
# SendGrid
SENDGRID_API_KEY=SG.xxxxxxxxxxxxxxxxxxxxxxxxx
SENDGRID_FROM_EMAIL=noreply@cda-colombia.com
# Aplicación
APP_URL=https://tu-dominio.com
NODE_ENV=production
PORT=4321
🗄️ Base de Datos
📊 Esquema Principal
🏢 Tablas Principales
-- Usuarios del sistema
CREATE TABLE usuarios (
id INT PRIMARY KEY AUTO_INCREMENT,
nombres VARCHAR(100) NOT NULL,
apellidos VARCHAR(100) NOT NULL,
email VARCHAR(255) UNIQUE NOT NULL,
password_hash VARCHAR(255) NOT NULL,
rol_id INT NOT NULL,
activo BOOLEAN DEFAULT TRUE,
creado_en TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
actualizado_en TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
-- Clientes
CREATE TABLE clientes (
id INT PRIMARY KEY AUTO_INCREMENT,
nombres VARCHAR(100) NOT NULL,
apellidos VARCHAR(100) NOT NULL,
email VARCHAR(255) UNIQUE,
telefono VARCHAR(20),
documento_identidad VARCHAR(50) UNIQUE,
tipo_cliente ENUM('particular', 'empresa') DEFAULT 'particular',
direccion TEXT,
creado_en TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
🔧 Índices Optimizados
-- Índices para rendimiento
CREATE INDEX idx_documentos_vencimiento ON documentos(fecha_vencimiento);
CREATE INDEX idx_documentos_vehiculo ON documentos(vehiculo_id);
CREATE INDEX idx_vehiculos_cliente ON vehiculos(cliente_id);
CREATE INDEX idx_cola_notificaciones_estado ON cola_notificaciones(estado);
CREATE INDEX idx_clientes_email ON clientes(email);
CREATE INDEX idx_vehiculos_placa ON vehiculos(placa);
🔌 API Endpoints
🔐 Autenticación
POST /api/auth/login
Descripción: Inicia sesión de usuario
Request Body:
{
"email": "usuario@ejemplo.com",
"password": "contraseña123"
}
Response (200):
{
"success": true,
"user": {
"id": 1,
"nombres": "Juan",
"apellidos": "Pérez",
"email": "usuario@ejemplo.com",
"rol": {
"nombre": "admin",
"permisos": {
"clientes": ["crear", "leer", "actualizar", "eliminar"]
}
}
},
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
}
👥 Gestión de Clientes
GET /api/clientes
Descripción: Obtiene lista de clientes
Query Parameters:
page: Número de página (default: 1)limit: Resultados por página (default: 10)search: Término de búsquedatipo: Tipo de cliente (particular/empresa)
🔐 Seguridad
🛡️ Implementaciones de Seguridad
🔐 Autenticación JWT
- Algoritmo: HS256
- Expiración: 24 horas
- Secret: Mínimo 32 caracteres
- Hash de contraseñas: bcrypt con 10 salt rounds
🚦 Rate Limiting
- Ventana de tiempo: 15 minutos
- Máximo de requests: 100 por IP
- Endpoints sensibles: 10 requests por ventana
- Bloqueo temporal: 1 hora después de exceder límite
🚀 Despliegue en Producción
🐳 Docker Configuration
📄 Dockerfile
FROM node:18-alpine AS builder
WORKDIR /app
COPY package*.json ./
COPY tsconfig.json ./
COPY astro.config.mjs ./
RUN npm ci --only=production
COPY . .
RUN npm run build
FROM node:18-alpine AS runner
WORKDIR /app
COPY --from=builder /app/node_modules ./node_modules
COPY --from=builder /app/dist ./dist
COPY --from=builder /app/package.json ./
RUN addgroup -g 1001 -S nodejs
RUN adduser -S astro -u 1001
USER astro
EXPOSE 4321
CMD ["node", "dist/server/entry.mjs"]
🔧 Mantenimiento y Monitoreo
📊 Sistema de Monitoreo
🎯 KPIs Clave
- Disponibilidad: > 99.9%
- Tiempo de respuesta: < 200ms (promedio)
- Tasa de error: < 0.1%
- Throughput: > 1000 req/min
- Uso de CPU: < 80%
- Uso de memoria: < 85%
✅ Próximos Pasos
Una vez completada la instalación, asegúrate de:
- Configurar los certificados SSL para HTTPS
- Establecer backups automáticos de la base de datos
- Configurar monitoreo y alertas
- Documentar procedimientos de recuperación ante desastres
Guía de Solución de Problemas - Sistema CDA
📋 Tabla de Contenidos
- Problemas Comunes de Instalación
- Problemas de Conexión y Acceso
- Problemas de Base de Datos
- Problemas de Email y Notificaciones
- Problemas de Rendimiento
- Problemas de Frontend
- Problemas de Seguridad
- Herramientas de Diagnóstico
⚠️ Importante
Antes de contactar soporte, revisa esta guía completamente y ejecuta los scripts de diagnóstico proporcionados.
🚀 Problemas Comunes de Instalación
❌ "Node.js no encontrado" o versión incompatible
🔍 Síntomas
- Error:
command not found: node - Error:
Node.js version too old - Error:
npm command not found
🛠️ Soluciones
Opción 1: Instalar Node.js correcto
# Verificar versión requerida
cat package.json | grep '"node"'
# Instalar Node.js 18+ (Ubuntu/Debian)
curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash -
sudo apt-get install -y nodejs
# Verificar instalación
node --version # Debe mostrar v18.x o superior
npm --version # Debe mostrar 9.x o superior
Opción 2: Usar NVM (Node Version Manager)
# Instalar NVM
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.0/install.sh | bash
# Recargar terminal
source ~/.bashrc
# Instalar y usar Node.js 18
nvm install 18
nvm use 18
nvm alias default 18
❌ "Error al instalar dependencias"
🔍 Síntomas
- Error:
npm install failed - Error:
EACCES: permission denied - Error:
network timeout
🛠️ Soluciones
Opción 1: Limpiar caché y reinstalar
# Limpiar caché de npm
npm cache clean --force
# Eliminar node_modules y package-lock.json
rm -rf node_modules package-lock.json
# Reinstalar dependencias
npm install
Opción 2: Problemas de permisos
# Cambiar propietario de npm (Linux/macOS)
sudo chown -R $(whoami) ~/.npm
sudo chown -R $(whoami) /usr/local/lib/node_modules
🔐 Problemas de Conexión y Acceso
❌ "No se puede conectar al servidor"
🔍 Síntomas
- Error:
ECONNREFUSED - Error:
Connection refused - Página en blanco o timeout
🛠️ Soluciones
Paso 1: Verificar si el servidor está corriendo
# Verificar procesos de Node.js
ps aux | grep node
# Verificar puerto en uso
netstat -tlnp | grep :4321
# o en macOS/Linux moderno
ss -tlnp | grep :4321
Paso 2: Iniciar el servidor
# Iniciar servidor de desarrollo
npm run dev
# Verificar que inicie correctamente
# Debería mostrar: "Local: http://localhost:4321/"
❌ "Error de autenticación o login fallido"
🔍 Síntomas
- Error: "Credenciales inválidas"
- Error: "Token expirado"
- Ciclo infinito de login
🛠️ Soluciones
Paso 1: Verificar credenciales por defecto
# Conectar a base de datos
mysql -u app_notificaciones -p notificaciones_automotrices
# Verificar usuario admin
SELECT email, password_hash FROM usuarios WHERE rol_id = 1;
Paso 2: Verificar configuración JWT
# Verificar .env
cat .env | grep JWT
# Asegurar que JWT_SECRET tenga 32+ caracteres
# JWT_SECRET=clave_secreta_de_al_menos_32_caracteres
🗄️ Problemas de Base de Datos
❌ "Error de conexión a MySQL"
🔍 Síntomas
- Error:
ECONNREFUSEDpara MySQL - Error:
Access denied for user - Error:
Can't connect to MySQL server
🛠️ Soluciones
Paso 1: Verificar MySQL está corriendo
# Linux (systemd)
systemctl status mysql
systemctl start mysql
# Linux (init.d)
service mysql status
service mysql start
# macOS (brew)
brew services list | grep mysql
brew services start mysql
Paso 2: Verificar credenciales en .env
# Verificar configuración
cat .env | grep DB_
# Probar conexión manual
mysql -u TU_USUARIO -p -h localhost notificaciones_automotrices
❌ "Error: Tabla no existe"
🔍 Síntomas
- Error:
Table 'notificaciones_automotrices.usuarios' doesn't exist - Error:
Unknown columnen consultas - Error:
Base de datos vacía
🛠️ Soluciones
Paso 1: Importar schema completo
# Importar schema SQL
mysql -u app_notificaciones -p notificaciones_automotrices < schema.sql
# Verificar tablas creadas
mysql -u app_notificaciones -p notificaciones_automotrices -e "SHOW TABLES;"
📧 Problemas de Email y Notificaciones
❌ "SendGrid API Key inválida"
🔍 Síntomas
- Error:
401 Unauthorizedde SendGrid - Error:
Invalid API key - Notificaciones no se envían
🛠️ Soluciones
Paso 1: Verificar API Key
# Verificar configuración
cat .env | grep SENDGRID
# Probar API Key manualmente
curl -X GET "https://api.sendgrid.com/v3/user/account" \
-H "Authorization: Bearer TU_API_KEY"
Paso 2: Generar nueva API Key en SendGrid
- Inicia sesión en SendGrid
- Ve a Settings → API Keys
- Crea nueva API Key con permisos:
- Mail Send: Full Access
- Template Access: Read Access
- Copia la nueva API Key y actualiza .env
❌ "Emails no llegan a destinatarios"
🔍 Síntomas
- Sistema dice "enviado" pero no llegan
- Emails en carpeta de spam
- Bounce o rechazo de emails
🛠️ Soluciones
Paso 1: Verificar cola de notificaciones
-- Verificar estado de notificaciones
SELECT
estado,
COUNT(*) as total,
MAX(creado_en) as ultimo
FROM cola_notificaciones
GROUP BY estado;
Paso 2: Procesar cola manualmente
# Procesar notificaciones pendientes
curl -X POST http://localhost:4321/api/notificaciones/procesar \
-H "Authorization: Bearer TU_ADMIN_TOKEN"
# Verificar respuesta
# Debería mostrar: processed, sent, failed counts
🛠️ Herramientas de Diagnóstico
🔍 Script de Diagnóstico Automático
health-check.sh
#!/bin/bash
# health-check.sh - Diagnóstico completo del sistema
echo "🔍 DIAGNÓSTICO DEL SISTEMA CDA"
echo "================================"
# 1. Verificar servicios
echo "📊 Estado de Servicios:"
systemctl is-active mysql && echo "✅ MySQL: Activo" || echo "❌ MySQL: Inactivo"
pgrep -f "node.*4321" > /dev/null && echo "✅ Node.js: Activo" || echo "❌ Node.js: Inactivo"
# 2. Verificar puertos
echo -e "\n🔌 Puertos en uso:"
netstat -tlnp | grep -E "(3306|4321)" || echo "❌ Puertos no encontrados"
# 3. Verificar espacio en disco
echo -e "\n💾 Espacio en disco:"
df -h | grep -E "(/$|/var)" | awk '{print $5 " " $6}' | \
while read usage mount; do
if [ "${usage%}" -gt 80 ]; then
echo "❌ $mount: $usage (CRÍTICO)"
else
echo "✅ $mount: $usage"
fi
done
# 4. Verificar base de datos
echo -e "\n🗄️ Base de Datos:"
mysql -u app_notificaciones -p$DB_PASSWORD notificaciones_automotrices -e "
SELECT
'Clientes' as tabla, COUNT(*) as total FROM clientes
UNION ALL
SELECT 'Vehículos', COUNT(*) FROM vehiculos
UNION ALL
SELECT 'Documentos', COUNT(*) FROM documentos
UNION ALL
SELECT 'Notificaciones pendientes', COUNT(*) FROM cola_notificaciones WHERE estado = 'pendiente';
" 2>/dev/null && echo "✅ BD accesible" || echo "❌ BD no accesible"
echo -e "\n📊 Diagnóstico completado"
🎯 Resumen de Soluciones Rápidas
| Problema | Solución Rápida | Tiempo |
|---|---|---|
| No inicia Node.js | npm install && npm run dev |
2 min |
| Error MySQL | systemctl start mysql |
1 min |
| Email no envía | Verificar API Key de SendGrid | 3 min |
| Página lenta | Limpiar caché y reiniciar | 2 min |
| Login fallido | Limpiar cookies y verificar .env | 1 min |