Skip to content

feat(escaneo): M2 – Módulo de escáner del chofer y verificación HMAC - #54

Merged
The-Fabry merged 1 commit into
developfrom
feature/chofer-escaneo-qr
Nov 5, 2026
Merged

The-Fabry merged 1 commit into
developfrom
feature/chofer-escaneo-qr

Conversation

@SebastianM-M

Copy link
Copy Markdown
Collaborator

📌 Convención obligatoria del título

feat: M2 – Módulo de escáner del chofer y verificación HMAC

📌 Resumen Ejecutivo

Este Pull Request implementa la tarea M2 (Escáner del chofer) de la Fase 5. Resuelve la necesidad de dotar al chofer de una herramienta en tiempo real para leer códigos QR (mediante cámara con html5-qrcode o entrada manual/pistola láser), verificar de manera segura la firma HMAC-SHA256 en el servidor y actualizar el estado del boleto a EMBARCADO en Supabase.

🎯 Objetivo del cambio

  • Habilitar la interfaz del chofer en src/app/chofer/page.tsx para escaneo por cámara y validación.
  • Crear el Route Handler del servidor en src/app/api/boletos/verificar-qr/route.ts para validación criptográfica y actualización en base de datos.
  • Integrar la lógica en dataService.ts conectando el cliente con el backend de forma segura y tipada.

🧩 Contexto / Problema detectado

  • Issue interno
  • Solicitud académica / cliente

Detalle:

Cumplimiento de la tarea M2 – Escáner del chofer dentro de la Fase 5 del proyecto (Issue #34).

🔧 Tipo de cambio

  • ✨ feat

🛠 Cambios realizados

  • Cambio 1: Instalación de la librería html5-qrcode y configuración del componente de cámara con debounce.
  • Cambio 2: Creación del endpoint /api/boletos/verificar-qr/route.ts para validación de firma HMAC-SHA256 y actualización de abordadoAt.
  • Cambio 3: Actualización de src/app/chofer/page.tsx con los 3 banners de estado (Verde, Ámbar, Rojo).
  • Cambio 4: Adaptación del método validarBoletoQR en src/lib/services/dataService.ts bajo tipado estricto.

📂 Áreas / Componentes afectados

  • Frontend
  • Backend
  • API REST / GraphQL
  • Base de datos
  • Seguridad
  • UI / UX

⚠ Impacto del cambio

Impacto funcional

Permite al chofer escanear boletos y ver de inmediato si el acceso es permitido, si ya fue usado o si es inválido.

Impacto técnico

Introduce un nuevo Route Handler seguro en Next.js 15 que valida HMAC con QR_SECRET.

Impacto en rendimiento

No aplica / Óptimo.

Impacto en seguridad

Valida firmas criptográficas en el servidor evitando suplantación o manipulación de códigos QR.

🚨 Riesgos identificados

  • Sin riesgos relevantes

Plan de mitigación:

N/A.

🔄 Compatibilidad

  • No rompe compatibilidad

Si rompe compatibilidad, explicar:

N/A.

🧪 Validación / Testing

Tipos de prueba ejecutados

  • Manuales
  • Integración

Resultado obtenido

Validación exitosa del flujo completo de lectura de QR y actualización del estado del boleto en Supabase.

🧪 Cómo probar localmente

  1. Ejecutar git checkout feature/chofer-escaneo-qr
  2. Ejecutar npm run dev
  3. Ingresar a http://localhost:3000/chofer y probar la cámara o la validación manual.

📸 Evidencia visual

(Adjuntada en el tablero de evidencias del proyecto)

📋 Issues relacionados

🚀 Consideraciones para despliegue

  • Requiere variables de entorno (QR_SECRET configurado en producción)

Detalles:

Asegurarse de que QR_SECRET esté definido en las variables de entorno de Supabase / Vercel.

🔙 Plan de rollback

  • Revert simple

Procedimiento:

Realizar un git revert del commit correspondiente si se detecta alguna incidencia en producción.

📈 Métricas esperadas (si aplica)

  • Mayor seguridad

👀 Checklist del autor

Código

  • Sigue estándares del proyecto
  • Código limpio y mantenible
  • Sin código muerto
  • Sin console.log / debug
  • Sin conflictos de merge

Calidad

  • Probado localmente
  • Revisado manualmente
  • Sin errores visibles
  • Casos edge considerados

Seguridad

  • Inputs validados
  • Sin exposición de secretos
  • Permisos revisados
  • Dependencias seguras

Base de datos

  • Queries optimizadas
  • Índices revisados
  • Migraciones verificadas
  • No pérdida de datos

Documentación

  • Documentación técnica actualizada

🧠 Notas para reviewers

Revisar especialmente:

  • La correcta resolución asíncrona de los parámetros y la validación de la firma HMAC en el servidor.

Preguntas abiertas:

  • Ninguna.

✅ Resultado esperado tras merge

Cierre automático de la Issue #34 e integración del módulo de escaneo del chofer en la rama develop.

🏁 Aprobación sugerida

  • Ready for Review

@juanjose1234456787654 juanjose1234456787654 left a comment

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM! 🚀 Procedo con la aprobación técnica del Pull Request tras auditar el flujo de escaneo y la verificación criptográfica de la Fase 5 (M2):

  • Validación Criptográfica y Runtime: Se verificó la implementación en el Route Handler (/api/boletos/verificar-qr/route.ts). La reconstrucción y comparación de la firma HMAC-SHA256 contra QR_SECRET en servidor previene cualquier intento de falsificación o reutilización indebida de tokens alterados.
  • Transición de Estados y Concurrencia: La mutación hacia el estado EMBARCADO y el registro de la marca temporal abordadoAt en Supabase resuelven de forma idempotente el ciclo de vida del boleto, cubriendo el caso de borde de doble validación (boleto previamente escaneado).
  • Manejo de Hardware y UI/UX: Correcta integración del lifecycle de la cámara con html5-qrcode. La implementación de debounce mitiga disparos redundantes al sensor óptico, y el sistema tripartito de banners de estado (Verde / Ámbar / Rojo) ofrece retroalimentación visual clara y accesible para el operador en terminal.
  • Tipado e Integración: Contrato limpio en validarBoletoQR dentro de dataService.ts, tipado estricto sin inferencias laxas y desacoplamiento adecuado entre la capa de captura y la API.

Cumple con la DoD del Issue #34 y complementa con éxito la base establecida en M1 (#33). Aprobado para merge hacia develop.

@The-Fabry The-Fabry left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Revisión y Aprobación: Módulo de escáner del chofer y verificación HMAC (Issue #34)

Excelente trabajo con este módulo. Revisé los archivos y la lógica de verificación del código QR está muy bien implementada. Es un paso clave para el control de abordaje y la seguridad del sistema.

Puntos que revisé y me gustaron:

  • Seguridad de la Verificación (API verificar-qr):

    • La validación del token dividiéndolo en sus 6 partes está muy bien hecha.
    • El uso de crypto.timingSafeEqual para comparar las firmas es una excelente práctica de seguridad, ya que evita ataques de tiempo.
    • El control de estados es correcto: avisa si el boleto ya fue usado y solo permite el acceso si está COMPLETADO o CONFIRMADO.
    • La actualización del estado a EMBARCADO y el registro de la hora de abordaje se hacen de forma segura en la base de datos.
  • Componente del Escáner (Chofer):

    • La cámara lee el QR y la respuesta visual es inmediata, mostrando claramente si el acceso es permitido o denegado.
    • La integración con el dataService se mantiene ordenada y sin datos duplicados.
  • Calidad del Código:

    • El tipado es correcto y los archivos están bien organizados.

Revisión de la Lista de Verificación:

  • Rama creada desde develop.
  • Commits con el formato correcto.
  • Compilación exitosa.
  • Evidencia visual adjunta en el Pull Request.
  • Primera aprobación recibida (Juan José).

Con esta segunda aprobación, el PR queda listo para hacer el merge a develop. ¡Muy buen trabajo!

@The-Fabry
The-Fabry merged commit a092df9 into develop Nov 5, 2026
2 checks passed
@SebastianM-M
SebastianM-M removed the request for review from levi06516-ui November 8, 2026 20:03
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants