Sistema de Gestión de Laboratorio Químico
Aplicación web para registro de muestras, análisis con validación automática contra umbrales, control de calidad y generación de informes PDF. Proyecto de fin de ciclo.
El problema
Durante mi formación como técnico de laboratorio, vi que muchos laboratorios pequeños siguen gestionando muestras y resultados con Excel o papel. No porque no quieran digitalizarse, sino porque las soluciones comerciales (LIMS) son caras y complejas para un laboratorio con pocos técnicos.
El proyecto de fin de ciclo necesitaba resolver un problema real. Elegí este porque lo conocía de primera mano: el flujo de trabajo del laboratorio (toma de muestra, análisis, validación, emisión de informes) es un proceso que gana mucho con digitalización, pero las herramientas existentes están pensadas para grandes volúmenes.
La decisión — aplicación web ligera sin framework
Elegí PHP sin framework deliberadamente. El objetivo no era aprender Laravel, sino entender el ciclo request-response sin abstracciones. Sabía que después, cuando usara un framework, sabría qué problemas resuelve.
El stack fue directo: PHP 7.4 para el backend, MySQL para la base de datos, JavaScript vanilla para validación en frontend, y TCPDF para la generación de informes. Nada que un técnico no pueda instalar en un servidor básico.
Implementación
Modelo de datos
Clientes ──→ Muestras ──→ Análisis ──→ Resultados
↓ ↓
Parámetros Umbrales (rangos)
Esquema relacional normalizado con cinco tablas principales. Cada muestra tiene un código único (L-2025-001), fecha de recepción, tipo, y cliente asociado. Los análisis se vinculan a muestras y parámetros, y los resultados se validan automáticamente contra los umbrales definidos.
Funcionalidades
- Registro de muestras: alta con código único, fecha, tipo de muestra, cliente, lote, condiciones de almacenamiento
- Resultados de análisis: vinculación de un análisis numérico a una muestra, con unidad y método analítico
- Validación automática: el sistema compara cada resultado contra los umbrales definidos y marca como “Fuera de especificación” si supera el límite
- Informes PDF: TCPDF genera un informe formateado con datos del cliente, resultados y validaciones, listo para entregar
- Búsqueda y filtrado: por fecha, cliente, tipo de muestra, estado de validación
Casos de uso
- El técnico registra una muestra de agua con código L-2025-001, fecha de recepción y datos del cliente
- Asocia un análisis de pH (valor 7.2, unidad: pH) a la muestra
- El sistema consulta los umbrales de pH (6.5-8.5 para agua potable) y muestra “Dentro de especificación” o “Fuera de spec”
- Genera un PDF con el logo del laboratorio, datos del cliente, tabla de resultados, y firma digital del técnico responsable
Métricas
| Métrica | Valor |
|---|---|
| Tecnologías | PHP 7.4, MySQL, JavaScript, TCPDF |
| Tablas en BD | 5 (clientes, muestras, parámetros, análisis, umbrales) |
| Formato de salida | PDF profesional con TCPDF |
| Estado | Funcional, no desplegado en producción |
| Framework | Ninguno (deliberadamente) |
Qué cambiaría
Usaría un framework moderno (Laravel o Symfony). PHP sin framework me enseñó cómo funciona el ciclo request-response, y no cambiaría esa decisión para un proyecto formativo. Pero para una versión en producción, el código sin framework es difícil de mantener y extender. Ya conozco Laravel después del ASIR — lo aplicaría en una refactorización.
Autenticación de usuarios desde el principio. El sistema actual no diferencia entre técnico y supervisor. Cualquier usuario puede hacer cualquier operación. Para un laboratorio real, eso no es aceptable. Roles y permisos deberían estar en el diseño inicial, no como añadido posterior.
Migrar a Docker para facilitar el despliegue. El sistema requiere PHP, MySQL y un servidor web configurados manualmente. Con Docker Compose, cualquier laboratorio podría desplegarlo con un comando. Es el siguiente paso lógico.
Lo que no cambiaría: el conocimiento del dominio. Entender el flujo de trabajo del laboratorio desde dentro hizo que el diseño fuera más preciso. No es un proyecto genérico de CRUD — resuelve un problema específico porque quien lo diseñó ha estado en el laboratorio.