🏗️ Diseño del Sistema

RutaCC - Arquitectura y Diseño Técnico
Versión 1.0 | Junio 2026
Proyecto: RutaCC
Tipo: Diseño Técnico
Fecha: 18 de Junio de 2026
Arquitectura: MVC - Multi-tenant

📑 Índice de Contenidos

  1. Introducción al Diseño
  2. Arquitectura del Sistema
  3. Stack Tecnológico
  4. Diseño de Módulos
  5. Diseño de Base de Datos
  6. Diseño de APIs
  7. Arquitectura de Seguridad
  8. Diseño Frontend
  9. Arquitectura de Despliegue

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:

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:

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:

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

✅ 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.