Desarrollo de un Sistema Modular de Gestión para Servicio Técnico

 1. El Problema (Introducción)

 Los talleres de reparación de dispositivos a menudo pierden el control de qué equipo pertenece a qué cliente y qué repuestos hay disponibles. Para solucionar esto, diseñé un sistema de gestión centralizado.

2. Stack Tecnológico (Las herramientas) Para este proyecto, utilicé una arquitectura moderna y escalable:

  • Backend: PHP con el framework Laravel.

  • Frontend y Herramientas: JavaScript, Node.js y Vite para compilar los recursos rápidamente.

  • Base de datos:  MySQL.

3. Módulos y Lógica del Sistema El sistema está dividido en módulos clave para optimizar el flujo de trabajo:

  • Módulo de Inventario: Control en tiempo real de los repuestos disponibles, aplicando lógica estructurada para entradas y salidas.

  • Relación Cliente-Dispositivo: Una base de datos relacional que vincula el historial de reparaciones, diagnósticos y el estado actual de cada equipo (en revisión, reparado, entregado).

4. El Reto Técnico (Lo que le gusta leer a los reclutadores) Uno de los mayores retos fue estructurar la base de datos para que la relación entre un cliente y múltiples dispositivos no generara consultas lentas. Lo resolví optimizando las consultas de Laravel

5. Conclusión y Próximos Pasos A futuro se espera integrar la funcion de gastos personales y crear clientes y numeros de proveedores como contacto.

Para el desarrollo del backend, utilicé Laravel (PHP). Uno de los enfoques principales fue asegurar la integridad de la base de datos y optimizar las consultas relacionales usando Eloquent.

Por ejemplo, para evitar problemas de rendimiento (el clásico problema N+1), implementé Eager Loading al consultar el historial de un cliente, trayendo sus dispositivos y cobros asociados en una sola consulta estructurada:

public function show(Cliente $cliente) { // Eager loading para optimizar la consulta relacional $cliente->load(['equipos.cobro', 'equipos' => function($q) { $q->orderBy('created_at', 'desc'); }]);

return view('clientes.show', compact('cliente')); }

Además, era vital proteger la lógica del negocio. Implementé validaciones estrictas para evitar que el sistema permita eliminar un cliente si este todavía tiene un dispositivo en revisión dentro del taller:

public function destroy(Cliente $cliente) { // Verificación de integridad de negocio $equiposActivos = $cliente->equipos() ->whereNotIn('estado', ['Entregado', 'Cancelado']) ->count();

if ($equiposActivos > 0) { return back()->with('error', '⚠️ No se puede eliminar: el cliente tiene equipos activos en el taller.'); }

$cliente->delete(); return redirect()->route('clientes.index')->with('success', '🗑️ Cliente eliminado.'); }





Comments