1. Introducción al Diseño
Este documento describe el diseño técnico completo del sistema RutaCC, incluyendo la
arquitectura general, los componentes principales, el modelo de datos, las APIs y las consideraciones de seguridad
y despliegue.
El sistema ha sido diseñado siguiendo los principios de:
- Modularidad: Cada funcionalidad está encapsulada en módulos independientes
- Escalabilidad: Arquitectura preparada para crecer en usuarios y tenants
- Seguridad por diseño: Controles de seguridad integrados en cada capa
- Mantenibilidad: Código estructurado y documentado
2. Arquitectura del Sistema
2.1 Arquitectura General
🖥️ CAPA DE PRESENTACIÓN (Frontend)
HTML5
CSS3
JavaScript
Leaflet.js (Mapas)
Chart.js (Gráficos)
↕ HTTP/HTTPS ↕
⚙️ CAPA DE APLICACIÓN (Backend PHP)
security.php
auth_functions.php
Módulos PHP
APIs REST
Validadores
↕ SQL ↕
🗄️ CAPA DE DATOS
MariaDB 10+
config/database.php
Prepared Statements
Transacciones
↕
🌐 SERVICIOS EXTERNOS
OpenStreetMap (Mapas)
Nominatim (Geocoding)
OSRM (Rutas)
2.2 Arquitectura Multi-Tenant
El sistema implementa un modelo multi-tenant de base de datos compartida, donde todos los
tenants comparten la misma base de datos pero sus datos están aislados mediante el campo tenant_id.
Ventajas del modelo elegido:
• Costos de infraestructura reducidos
• Actualizaciones centralizadas
• Backups simplificados
• Escalabilidad horizontal posible
2.3 Patrón de Diseño
El sistema sigue un patrón MVC simplificado:
- Modelo: Base de datos MariaDB + consultas preparadas
- Vista: Archivos HTML + JavaScript + CSS
- Controlador: Archivos PHP que procesan peticiones
3. Stack Tecnológico
| Capa |
Tecnología |
Versión |
Justificación |
| Backend |
PHP |
7.4+ |
Lenguaje maduro, amplio soporte, bajo costo de hosting |
| Base de Datos |
MariaDB |
10+ |
Open source, compatible con MySQL, alto rendimiento |
| Servidor Web |
Apache / Nginx |
2.4+ / 1.18+ |
Estándar de la industria, compatible con .htaccess |
| Frontend |
HTML5 + CSS3 + JS |
- |
Estándares web, sin dependencias pesadas |
| Mapas |
Leaflet.js + OSM |
1.9+ |
Gratuito, sin API key, personalizable |
| Gráficos |
Chart.js |
4+ |
Librería ligera, responsive, fácil de usar |
| Rutas |
OSRM |
- |
Open Source Routing Machine, gratuito |
4. Diseño de Módulos
4.1 Estructura de Módulos
📦 MÓDULOS DEL SISTEMA
🔐 Autenticación
🏢 Tenants
👥 Usuarios
🚗 Vehículos
🧑✈️ Conductores
🏭 Bodegas
📋 Pedidos
🚚 Despachos
⛽ Combustible
🔧 Mantenciones
⚠️ Fallos
💰 Cobros
📊 Reportes
🔔 Alertas
⚙️ Configuración
4.2 Detalle de Módulos
Módulo de Autenticación
| Archivo |
Función |
login.php |
Procesa credenciales y genera sesión |
logout.php |
Destruye sesión de forma segura |
security.php |
Funciones de seguridad centralizadas |
auth_functions.php |
Funciones auxiliares de autenticación |
Módulo de Despachos
| Archivo |
Función |
despachos_list.php |
Lista despachos del tenant |
despachos_activos.php |
Lista despachos en curso |
despachos_iniciar.php |
Inicia despacho (km, hora salida) |
despachos_finalizar.php |
Finaliza despacho (km, hora llegada) |
despachos_cancelar.php |
Cancela despacho |
despachos_entregar.php |
Marca pedido como entregado |
despachos_asignar_pedidos.php |
Asigna pedidos a despacho |
despachos_planificar_ruta.php |
Planifica orden de ruta |
5. Diseño de Base de Datos
5.1 Modelo Relacional
La base de datos vhhvipvr_ruta contiene 14 tablas organizadas en el siguiente
modelo relacional:
📊 tenants (Empresas)
PK id INT
nombre VARCHAR(100)
rut VARCHAR(20) UNIQUE
email_contacto VARCHAR(150)
plan ENUM('basic','pro','enterprise')
estado ENUM('activo','pago_atrasado','inhabilitado')
🚗 vehiculos
PK id INT
FK tenant_id INT → tenants.id
patente VARCHAR(10) UNIQUE
marca, modelo, anno, color
rendimiento_kml DECIMAL(5,2)
capacidad_kg INT
tipo_combustible ENUM
km_motor INT
estado ENUM('disponible','asignado','en_ruta','en_fallo','mantencion','inactivo')
🧑✈️ conductores
PK id INT
FK tenant_id INT → tenants.id
nombre VARCHAR(100)
rut VARCHAR(20) UNIQUE
telefono, email
estado
ENUM('disponible','asignado','en_ruta','suspendido','licencia_medica','con_permiso','inactivo')
🚚 despachos
PK id INT
FK tenant_id, conductor_id, vehiculo_id, bodega_id
numero_orden VARCHAR(20) UNIQUE per tenant
estado ENUM('creada','planificada','en_ruta','en_entrega','finalizada','cancelada')
distancia_estimada_km, combustible_estimado_l, costo_estimado
km_motor_salida, km_motor_llegada
hora_salida_real, hora_fin_real
📋 pedidos
PK id INT
FK tenant_id, despacho_id
cliente, direccion, lat, lng
documento VARCHAR(20)
orden SMALLINT
estado ENUM('pendiente','asignado','entregada','fallida','planificada','en ruta')
5.2 Índices y Optimización
| Tabla |
Índice |
Propósito |
| despachos |
idx_tenant_estado |
Consultas por tenant y estado |
| despachos |
idx_numero_orden_tenant |
Búsqueda de órdenes únicas |
| pedidos |
idx_despacho_orden |
Ordenar pedidos en despacho |
| documentos_vehiculo |
idx_docvehiculo_vehiculo |
Documentos por vehículo |
| otros_cobros |
idx_estado_vencimiento |
Alertas de cobros |
| permisos_paginas |
uq_usuario_pagina |
Permisos únicos |
5.3 Integridad Referencial
Todas las relaciones están protegidas con foreign keys y reglas de cascada:
ON DELETE CASCADE: Al eliminar un tenant, se eliminan todos sus datos
ON DELETE SET NULL: Al eliminar una bodega, los despachos mantienen historial
ON UPDATE CASCADE: Actualizaciones se propagan automáticamente
6. Diseño de APIs
6.1 Endpoints Principales
Autenticación
POST
/login.php - Iniciar sesión
POST
/logout.php - Cerrar sesión
Vehículos
GET
/vehiculos_list.php - Listar vehículos
POST
/vehiculos_create.php - Crear vehículo
POST
/vehiculos_update.php - Actualizar vehículo
POST
/vehiculos_disable.php - Desactivar vehículo
Despachos
GET
/despachos_list.php - Listar despachos
GET
/despachos_activos.php - Despachos en curso
POST
/despachos_iniciar.php - Iniciar despacho
POST
/despachos_finalizar.php - Finalizar despacho
POST
/despachos_asignar_pedidos.php - Asignar pedidos
POST
/despachos_planificar_ruta.php - Planificar ruta
Reportes
GET
/dashboard_stats.php - Estadísticas del dashboard
GET
/reportes_costos.php - Reporte de costos
GET
/alertas_vencimiento.php - Alertas de documentos
GET
/alerta_cobro.php - Alertas de cobros
6.2 Formato de Respuesta
Todas las APIs responden en formato JSON:
{
"success": true,
"data": { ... },
"message": "Operación exitosa"
}
// En caso de error:
{
"success": false,
"message": "Descripción del error"
}
7. Arquitectura de Seguridad
7.1 Capas de Seguridad
🛡️ CAPA 1: PROTECCIÓN PERIMETRAL
.htaccess
HTTPS/SSL
Headers de Seguridad
CORS configurado
🔐 CAPA 2: AUTENTICACIÓN
security.php
requireAuth()
Sesiones PHP
bcrypt (cost 12)
👥 CAPA 3: AUTORIZACIÓN
requireRole()
permisos_paginas
tenant_id isolation
🔒 CAPA 4: PROTECCIÓN DE DATOS
Prepared Statements
sanitizeInput()
Validación de inputs
CSRF tokens
📝 CAPA 5: AUDITORÍA
secureLog()
Registro de accesos
Detección de anomalías
7.2 Cumplimiento Normativo
| Estándar |
Aplicación |
| OWASP Top 10 |
Prevención de inyección, XSS, CSRF, broken auth |
| ISO 27001 |
Control de acceso, cifrado, segregación de datos |
| Ley 21.710 (Chile) |
Protección de datos personales |
| NIST Framework |
Gestión de identidad, protección de datos |
8. Diseño Frontend
8.1 Estructura de Páginas
| Página |
Archivo |
Funcionalidad |
| Login |
login.html |
Formulario de acceso |
| Dashboard |
dashboard.html |
Panel principal con estadísticas |
| Vehículos |
vehiculos.html |
Gestión de flota |
| Conductores |
conductores.html |
Gestión de conductores |
| Bodegas |
bodegas.html |
Gestión de bodegas |
| Pedidos |
pedidos.html |
Gestión de pedidos |
| Despachos |
despachos.html |
Lista de despachos |
| Despacho Inicio |
despachos_inicio.html |
Iniciar despachos |
| Despacho Cierre |
despachos_cierre.html |
Finalizar despachos |
| Combustible |
combustible.html |
Registro de combustible |
| Mantención |
mantenimiento.html |
Gestión de mantenciones |
| Fallos |
fallos.html |
Registro de fallos |
| Cobros |
cobros.html |
Gestión de cobros |
| Reportes |
reportes_costos.html |
Reportes financieros |
| Configuración |
configuracion.html |
Configuración del sistema |
8.2 Arquitectura Frontend
📁 ESTRUCTURA DE ARCHIVOS
/css - Estilos
/js - JavaScript
/components - Componentes reutilizables
/img - Imágenes
8.3 Módulos JavaScript
| Archivo |
Responsabilidad |
api.js |
Cliente HTTP para comunicación con backend |
auth.js |
Gestión de autenticación y sesión |
map.js |
Funcionalidades de mapas |
reportes.js |
Generación de reportes y gráficos |
utils.js |
Funciones auxiliares |
9. Arquitectura de Despliegue
9.1 Entornos
| Entorno |
Propósito |
URL |
| Desarrollo |
Desarrollo y pruebas locales |
localhost/xampp |
| Staging |
Pruebas pre-producción |
staging.rutacc.cl |
| Producción |
Sistema en vivo para clientes |
app.rutacc.cl |
9.2 Requisitos de Servidor
| Recurso |
Mínimo |
Recomendado |
| CPU |
2 cores |
4 cores |
| RAM |
2 GB |
4 GB |
| Disco |
20 GB SSD |
50 GB SSD |
| Ancho de banda |
100 Mbps |
1 Gbps |
| PHP |
7.4 |
8.1+ |
| MariaDB |
10.3 |
10.6+ |
9.3 Estrategia de Backups
- Backup completo: Diario a las 02:00 AM
- Backup incremental: Cada 6 horas
- Retención: 30 días de backups diarios
- Almacenamiento: Local + Off-site (cloud)
- Pruebas de restauración: Mensuales
✅ Resumen del Diseño:
El sistema RutaCC está diseñado con una arquitectura moderna, segura y escalable. Utiliza tecnologías maduras y
probadas, sigue mejores prácticas de la industria y cumple con estándares internacionales de seguridad y
normativas chilenas.