15 Módulo de Tratamientos Odontológicos en Laravel | Migración, Modelo y Relaciones en el Sistema
Duración: 17 minDescripción
🎓 Lección 15: Módulo de Tratamientos Odontológicos en Laravel
Objetivo General: Diseñar e implementar el módulo de tratamientos odontológicos mediante la creación de su estructura en base de datos, relaciones Eloquent, validación de restricciones con llaves foráneas y desarrollo de un CRUD ágil basado en modales e integración de divisas.
🚀 Pasos Clave con Timestamps
- ⏱️ 00:00 — Introducción y Requerimientos del Módulo: Planteamiento del módulo de tratamientos (ej. limpieza dental, endodoncia), definiendo la necesidad de parametrizar precios, tiempos promedio de duración en minutos y vinculación con especialidades médicas.
- ⏱️ 01:25 — Modelado Entidad-Relación (1 a N): Análisis del diagrama ER estableciendo la relación de uno a muchos: una especialidad puede poseer múltiples tratamientos, pero un tratamiento pertenece a una única especialidad.
- ⏱️ 02:40 — Generación de Componentes Eloquent: Creación simultánea del modelo, migración y controlador de recursos ejecutando el comando php artisan make:model Tratamiento -mc --resource.
- ⏱️ 03:35 — Estructura de la Migración y Tipos de Datos: Definición de campos en la tabla tratamientos (especialidad_id foránea con eliminación en cascada, nombre único, precio decimal, duracion entera en minutos y activo booleano).
- ⏱️ 05:15 — Relaciones Inversas en Eloquent: Configuración de $fillable y la relación belongsTo en el modelo Tratamiento, junto a su contraparte hasMany en el modelo Especialidad.
- ⏱️ 06:25 — Definición de Rutas y Menú de Navegación: Declaración del grupo de rutas para el CRUD de tratamientos y adición del acceso directo en la barra lateral del sistema (tabler.php).
- ⏱️ 09:15 — Integración Frontend con Modales: Maquetación de la vista index.blade.php con modales interactivos para las operaciones de crear, editar, cambiar estados y eliminar tratamientos.
- ⏱️ 10:20 — Lógica del Controlador y Moneda Global: Implementación del controlador TratamientoController inyectando la configuración global de divisa desde la tabla de ajustes para renderizar los precios correctamente.
- ⏱️ 11:10 — Validaciones y Normalización de Cadenas: Desarrollo de las reglas de validación en store y update, aplicando la conversión automática del nombre a mayúsculas mediante Str::upper().
- ⏱️ 12:35 — Pruebas Funcionales y Gestión de Estados: Demostración del flujo CRUD completo: registro de nuevo tratamiento, actualización de costos/tiempos, inhabilitación (baja lógica) y eliminación física.
🛠️ Comandos y Rutas Principales
| Tipo / Capa | Comando / Ruta | Propósito |
|---|---|---|
| Terminal / Artisan | php artisan make:model Tratamiento -mc --resource | Genera el modelo Tratamiento, su archivo de migración y su controlador de recursos. |
| Ruta HTTP (GET) | /admin/tratamientos | Carga el listado general con paginación, filtro de búsqueda e integración de la divisa global (index). |
| Ruta HTTP (POST) | /admin/tratamientos | Procesa y valida el registro de un nuevo tratamiento odontológico (store). |
| Ruta HTTP (PUT/PATCH) | /admin/tratamientos/{id} | Actualiza la información, costos, duración o estado del tratamiento (update). |
| Ruta HTTP (DELETE) | /admin/tratamientos/{id} | Elimina el registro seleccionado de la base de datos (destroy). |
🔒 Buenas Prácticas y Seguridad
- Gestión Flexible de Precios y Formato Moneda: Inyectar dinámicamente la divisa o moneda de configuración del sistema (ajustes) en los controladores de catálogo para mantener la coherencia financiera sin codificar símbolos rígidos en las vistas.
- Normalización y Estandarización de Texto: Transformar los nombres de tratamientos a mayúsculas utilizando helpers de Laravel (Str::upper()) al guardar y actualizar, evitando inconsistencias visuales y duplicidades por diferencia de mayúsculas/minúsculas.
- Inhabilitación Lógica frente a Eliminación Física: Favorecer el cambio de estado (campo booleano activo) sobre el borrado completo. Esto preserva el historial clínico de los pacientes que ya recibieron dicho tratamiento en el pasado.
- Restricción y Control de Tipos de Datos: Definir precisión numérica estricta en base de datos para los precios (decimal('precio', 10, 2)) y estandarizar las duraciones en una unidad entera uniforme (minutos) para simplificar posteriores cómputos en la agenda de citas.