15 Módulo de Tratamientos Odontológicos en Laravel | Migración, Modelo y Relaciones en el Sistema

Duración: 17 min
Módulo: Especialidades & Tratamientos Odontológicos Lección 2 de 3

Descripció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 / CapaComando / RutaPropósito
Terminal / Artisanphp artisan make:model Tratamiento -mc --resourceGenera el modelo Tratamiento, su archivo de migración y su controlador de recursos.
Ruta HTTP (GET)/admin/tratamientosCarga el listado general con paginación, filtro de búsqueda e integración de la divisa global (index).
Ruta HTTP (POST)/admin/tratamientosProcesa 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

  1. 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.
  2. 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.
  3. 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.
  4. 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.