Aplicación web en FastAPI que permite:
- Ingresar datos de un trabajador 1 a 1.
- Cargar un Excel masivo con trabajadores.
- Generar un Código QR para cada registro.
- Mostrar el contenido del QR en formato JSON, fácil de interpretar por otras herramientas (por ejemplo, apps móviles).
El QR contiene un JSON con la siguiente estructura:
{
"nombre": "...",
"rut": "...",
"area": "...",
"epp": "...",
"vigilancia": "...",
"riesgo": "..."
}- Python 3.9+ (idealmente 3.10+)
pip
Instalar dependencias:
pip install fastapi uvicorn "qrcode[pil]" python-multipart jinja2 pandas openpyxlNota: En
zshlos corchetes requieren comillas ("qrcode[pil]").
Ejemplo de estructura de carpetas:
QR-User/
├─ main.py
├─ templates/
│ └─ index.html
└─ static/
└─ app.jsmain.py: aplicación FastAPI, lógica de negocio, lectura de Excel, validación de RUT, generación de QR.templates/index.html: interfaz web (formulario 1 a 1, pestañas, tabla desde Excel).static/app.js: JavaScript para validación de RUT en frontend y manejo de pestañas.
Desde la carpeta raíz del proyecto (donde está main.py):
uvicorn main:app --reloadLuego abrir en el navegador:
http://127.0.0.1:8000/
o
http://localhost:8000/
Al entrar a la aplicación se muestran dos paneles:
- Panel izquierdo: datos y opciones de ingreso
- Pestañas:
- Ingreso 1 a 1
- Procesar Excel
- Pestañas:
- Panel derecho: resultado del Código QR generado
- Imagen del QR.
- Texto JSON que contiene la información codificada.
- Botón “Volver al listado” para regresar a la página anterior (por ejemplo, al listado del Excel).
Esta pestaña permite ingresar manualmente la información de un trabajador.
Campos:
NombreRUTÁrea donde trabajaEPPVigilanciaRiesgo
Pasos:
- Completar todos los campos requeridos (Nombre, RUT, Área).
- Opcionalmente completar EPP, Vigilancia y Riesgo.
- Presionar “Generar QR”.
Validaciones:
- El RUT se valida en:
- Frontend (JavaScript): evita enviar el formulario si el RUT es inválido.
- Backend (Python): valida nuevamente el RUT (cálculo de dígito verificador).
Si el RUT es inválido:
- Se muestra un mensaje de error en rojo junto al campo RUT.
- No se genera QR.
- Los campos quedan rellenados para poder corregir.
Si el RUT es válido:
- En el panel derecho se muestra:
- Imagen del QR.
- Texto en JSON con todos los campos.
- Botón “Volver al listado” (vuelve a la pantalla anterior con los datos).
Esta pestaña permite cargar un archivo Excel con múltiples trabajadores.
El archivo debe ser .xls o .xlsx y debe contener estas columnas exactamente:
RUTNOMBRE Y APELLIDOSÁREAEPPVIGILANCIARIESGO
Importante: Los nombres deben coincidir (mayúsculas, acentos incluidos).
Ejemplo de cabecera:
| RUT | NOMBRE Y APELLIDOS | ÁREA | EPP | VIGILANCIA | RIESGO |
|---|---|---|---|---|---|
| 11.111.111-1 | Juan Pérez Soto | Mantención | Casco, Guantes | Directa | Medio |
Pasos:
- Ir a la pestaña “Procesar Excel”.
- Seleccionar el archivo Excel en el campo “Importar desde Excel”.
- Presionar “Cargar Excel”.
Si el archivo:
- No es Excel (
.xls/.xlsx) → se muestra mensaje de error. - No tiene las columnas requeridas → se muestra mensaje indicando qué columnas se esperan.
- No se puede leer → se muestra el error capturado.
Si todo es correcto:
- Se mostrará una tabla con las columnas:
- Nombre
- RUT
- Área
- EPP
- Vigilancia
- Riesgo
- Acción
En la columna Acción aparece un botón “Ver QR” por cada fila.
- En la tabla de la pestaña Excel, elegir un trabajador.
- Presionar “Ver QR” en esa fila.
El sistema:
- Envía esa fila al endpoint
/qr. - Valida el RUT.
- Si es válido, genera el QR y lo muestra en el panel derecho.
- Si es inválido, muestra el mensaje de error.
En el panel derecho se muestra también el botón:
Volver al listado
que utiliza window.history.back() para regresar a la página anterior, donde estaba el listado del Excel.
El valor interno del QR es un JSON como este:
{
"nombre": "Juan Pérez",
"rut": "11.111.111-1",
"area": "Mantención",
"epp": "Casco, Guantes",
"vigilancia": "Directa",
"riesgo": "Medio"
}Este contenido:
- Es visible como texto si lees el QR con la Cámara de iOS/Android.
- Puede ser fácilmente interpretado por una futura app móvil o sistema que:
- Escanee el QR.
- Parse el JSON.
- Use los campos para mostrar la ficha del trabajador o validar acceso, EPP, etc.
La función validar_rut(rut: str) -> bool:
- Acepta RUT con o sin puntos, con guion.
- Ej.:
12.345.678-5o12345678-5.
- Ej.:
- Limpia formato (quita puntos y guion y pasa a mayúsculas).
- Separa
cuerpoy dígito verificador. - Calcula el DV con el algoritmo estándar (factores 2–7).
- Soporta DV
0–9yK.
Se usa en:
- El endpoint
/qr: si el RUT es inválido, se devuelve el formulario con error. - El frontend (JS): evita enviar formularios con RUT inválido.
Algunas ideas para futuras mejoras:
-
Guardar en base de datos
Al momento de generar el QR (en/qr), insertar elpayloadJSON en una tabla (PostgreSQL, MySQL, etc.). -
Convertir JSON → URL
En lugar de JSON, hacer que el QR contenga una URL con un identificador (id_trabajador) y que la ficha se cargue desde un sistema interno. -
Agregar más campos
Solo hay que:- Añadir el campo al contexto en
read_form. - Agregarlo al formulario en
index.html. - Incluirlo en el
payloaddel QR. - Añadirlo a la lectura del Excel (si aplica).
- Añadir el campo al contexto en
-
QR no se genera
Revisar la consola donde correuvicornpara ver errores de Python. -
Pestaña “Procesar Excel” no cambia
Revisar la consola del navegador (F12 → Console) por errores de JavaScript (app.js). -
El Excel no se acepta
Confirmar nombres de columnas, incluyendo mayúsculas y acentos.
Hecho con FastAPI + cariño para uso interno 👷♂️📱