ERS v1.7
Courier interno hospitalario + KPIs
Demo estilo DHL/FedEx interno: área de envíos solicita → Mesa crea orden con folio y etiqueta QR →
escaneo de salida y de llegada → receptor → tiempos y dashboard KPI.
Fuente: respuestas cliente mensajería/paquetería ABC (2026-07).
Folio + QR
Salida / Llegada
Dashboard KPI
Integración REST mock
! Alcance
Modelo operativo: departamento de envíos (varias personas solicitan).
Solicitud con detalle de bienes → impresión de etiqueta (barcode/QR) → pegar en paquete →
escaneo al salir → escaneo QR al llegar (otro campus / consultorio) → quién recibe → KPI mensajeros.
IN Incluido en demo
- Login / registro / recupero de contraseña por mail
- Maestro + inventario (FIJO y PRESTAMO, ambos con trazabilidad)
- Campus + Edificio / piso / sector / oficina + puestos (persona + máquina)
- Interlocalidad mesa EXT+INT → aviso → salida → entrada → Mesa de envíos
- Mesa de envíos crea la orden + folio + etiqueta QR + comprobante
- Horarios de entrega por campus / piso / oficina / persona
- Cola: aprobación + asignación a mensajero
- App: escaneo SALIDA → Confirmar (foto+firma+geo) o Rechazar (motivo+foto+geo)
- Seguimiento + tiempos salida→llegada
- Dashboard KPI (área, fecha, horario, responsable, tiempos, servicios/mensajero)
- Demo integración REST/POST mock (Lab/Patología/Banco — capacidad)
- Notificaciones por mail en cambios de estado del envío
- Acuse digital de retiro (equipos temporales) printable
OUT Fuera de demo
- ABM/CRUD libre de órdenes (las crea Mesa)
- Clarín reservas · WMS layout
- RTLS / planos arquitectónicos / ~5000 tags (fase comercial aparte)
- Centro de comando físico / videowall / alertas audiovisuales
- Mansis (pendiente info)
- BioStar / SAP / SuccessFactors / Pegasys / CDVI (no requerido)
- Tableros externos (KPI vive en nuestro sistema)
- App nativa / hardware real
1 Login, registro y recupero
RF-AUTH MUST
- Login + registro completo (identidad en Nitro4 Auth; sin password local).
- Roles demo: solicitante área envíos, aprobador, mensajero/operador App, admin, externo.
- Recupero de contraseña por mail: link en login →
#/forgot-password → mail SMTP con token → #/reset-password?token=… → cambio en Nitro4.
- API:
POST /api/auth/forgot-password (anti-enumeración) y POST /api/auth/reset-password.
- Tokens en tabla
password_reset_tokens (hash + vencimiento 1 h). Reset vía AUTH_BOOTSTRAP_* + nitro4ChangePassword.
2 Maestro de artículos y personas
RF-ART-01 MUST
- ABM artículos/SKU; alimenta mesa, inventario y líneas de envío.
RF-PER-MAS-01 — Personas MUST
- ABM de personas (roster) distinto de usuarios de login.
- Asignación a puestos, inventario FIJO y horarios de entrega.
- Mesa selecciona personas origen/destino desde el maestro.
3 Inventario — fijos / a préstamo
RF-INV-01 — Tipos
| Tipo | Comportamiento |
FIJO | No circula en préstamo; sí tiene trazabilidad; asignable a oficina/puesto/persona |
PRESTAMO | Retiro/entrega + trazabilidad (equipos temporales / acuse) |
- Filtros de inventario: tag/SKU, folio, serial, tipo, estado, campus, oficina, puesto, persona, artículo.
- Chips rápidos: Entregados, En tránsito, En ubicación, Disponibles, Prestados.
RF-INV-02 — Courier actualiza inventario
- Ítems vinculados a un envío: al escanear salida pasan a
EN_TRANSITO.
- Al confirmar entrega en App: estado
ENTREGADO, ubicación y persona destino, bitácora con folio y receptor.
- Préstamo entregado por courier: también genera acuse activo (se puede Devolver).
- Dónde verlo: menú Inventario → chip Entregados o buscar el folio (ej.
DW-2026-0031). Desde Seguimiento, el tag del equipo enlaza al inventario.
RF-INV-03 — Acuse de retiro (equipos temporales)
- Solo ítems
PRESTAMO en estado DISPONIBLE.
- Retiro: registrar responsable (+ notas opcionales); el ítem pasa a
PRESTADO.
- Al retirar: generar acuse digital (printable) con tag, artículo, responsable y fecha.
- Bitácora: quién lo tiene, cuándo salió, cuándo regresó.
- Devolución: cierra el acuse y vuelve el ítem a
DISPONIBLE.
4 Campus y ubicaciones
Campus → Edificio → Piso → Sector → Oficina / Consultorio → Puesto (persona + máquina)
RF-UBI-01 MUST
- ABM jerárquico; Campus obligatorio para origen/destino intercampus.
- Destinos: otro campus o consultorio interno.
- Puestos de trabajo por oficina: persona (nombre/rol) + máquina (maestro independiente del inventario courier).
- Consulta en plano 2D esquemático por escala: campus → edificio → piso → oficina → puesto (no es plano arquitectónico ni RTLS).
5 Mesa de envíos — crea la orden
La genera el departamento de envíos (varias personas pueden solicitar).
Al confirmar: crea la orden, asigna folio, imprime etiqueta con barcode/QR
para pegar en el paquete. No hay ABM libre de órdenes.
La entrega en destino no se registra en una mesa: se confirma o rechaza en la App.
RF-ME-01 — Solicitud / cabecera MUST
- Solicitante (usuario del área de envíos)
- Quién deja / origen (persona + campus/ubicación)
- Tipo: documento / equipamiento / muestra / paquete / otro
- Detalle de bienes / ítems
- Destinatario + campus/ubicación destino
- Área + horario de entrega filtrado por área
- Motivo, inspección/pruebas si aplica, firmas
- Marca Frágil (
is_fragile) — label UI: «Frágil»
- Folio autogenerado
- Comprobante printable
RF-ME-03 — Etiqueta barcode/QR MUST
- Todo lo que se traslada lleva etiqueta con folio + barcode/QR (módulo de impresión en la demo).
- Preview HTML + Descargar PDF (datos actuales: adjuntos, MFR, evidencia).
Al confirmar: MESA_ENTRADA_REGISTRADA + ORDEN_CREADA (única vía de alta formal; también vía handoff interlocalidad).
5b Interlocalidad — Mesa EXT + INT (previo a Mesa de envíos)
Flujo entre localidades (ej. Guadalajara ↔ Monterrey). Lo pueden operar usuarios de mesa interna o mesa externa.
RF-INTLOC-01 MUST
- Aviso de envío (“voy a mandar”) →
ANUNCIADO
- Salida del envío (fecha/hora en que salió del origen) →
EN_VIAJE
- Entrada del envío (fecha/hora en que se recibió en destino) →
RECIBIDO
- Asignar a Mesa de envíos: crea orden interna (folio + QR) →
EN_MESA / orden PENDIENTE_APROBACION
6 Períodos / horarios de entrega
RF-PER-01
- Ventanas de entrega con etiqueta de área y asignaciones a campus, piso, oficina y/o personas.
- En Mesa, el selector usa horarios aplicables por herencia (campus → piso → oficina → persona destinataria), con fallback por área.
7 Fila de órdenes (sin ABM de alta)
RF-ODE-01 — Detalle (consulta)
- Folio, origen/destino (campus + ubicación + persona + fecha), ítems, QR
- Estados: pendiente aprobación → aprobada → asignada → en tránsito → entregada / no entregada / cancelada
RF-ODE-02 — Aprobación y asignación MUST
- Aprobar/rechazar · asignar mensajero ejecutor App
- Agrupador: seleccionar 2+ órdenes aprobadas y asignarlas juntas a un repartidor (lote
LOTE-YYYY-####)
8 App móvil — courier (salida + llegada)
Flujo tipo DHL/FedEx interno: escaneo al salir y en destino Confirmar entrega o Rechazar entrega.
RF-APP-01 — Pasos MUST
| # | Paso | Acción | Evento |
| 1 | Solicitudes pendientes | Órdenes / grupos asignados al mensajero | APP_ABIERTA (opc.) |
| 2 | Seleccionar orden | Ver folio, origen, destino, ítems | ORDEN_SELECCIONADA |
| 3 | Escaneo SALIDA | Al salir: leer QR/barcode → “ya salió” | ESCANEO_SALIDA |
| 4a | Confirmar entrega | Receptor + foto + firma (pad) + geolocalización del dispositivo | ESCANEO_LLEGADA, RECEPTOR_REGISTRADO, FIRMA_CAPTURADA, GEO_CAPTURADA, FOTO_EVIDENCIA, ENTREGADO → ENTREGADA |
| 4b | Rechazar entrega | Motivo obligatorio + foto + geolocalización | GEO_CAPTURADA, FOTO_EVIDENCIA, ENTREGA_RECHAZADA → NO_ENTREGADA |
RF-APP-02 — Reglas
- Código escaneado debe coincidir con folio/etiqueta de la orden.
- Tiempo de tránsito = timestamp llegada − timestamp salida (base de KPI).
- Entrega: foto + firma + geo obligatorios.
- No entrega: foto + geo + motivo de catálogo (ABM Configuración) obligatorios.
- Equipamiento: checks MFR (Movilizar / Fijar / Riesgo) en salida (envío) y llegada (recepción) + “verificado por (envío)”.
NO_ENTREGADA se puede reabrir (mismo folio → APROBADA) para reasignar. Evento ORDEN_REABIERTA.
9 Seguimiento
RF-SEG-01 — Timeline MUST
| Evento | Notas |
MESA_ENTRADA_REGISTRADA / ORDEN_CREADA | Folio + etiqueta |
ORDEN_APROBADA / ORDEN_ASIGNADA / LOTE_ASIGNADO | Cola · asignación individual o grupo |
ESCANEO_SALIDA | Inicio tránsito |
ESCANEO_LLEGADA | Fin tránsito |
RECEPTOR_REGISTRADO / firma / geo / foto | Evidencias |
ENTREGADO | Cierre + duración calculada |
ENTREGA_RECHAZADA / ORDEN_REABIERTA | Motivo de catálogo · mismo folio vuelve a cola |
PRESTAMO_AUTORIZADO | Pedido de equipo → orden Mesa |
Mesa (folio+QR) → Cola → App SALIDA
→ App LLEGADA + receptor → Seguimiento / KPI
10 Dashboard KPI MUST
Cliente: “Mejor en tu sistema observar el dashboard”. No se envía a tablero externo en esta demo.
RF-KPI-01 — Tablero propio
- Filtros: área, fecha, horario, campus origen/destino, mensajero
- Métricas: entregadas, no entregadas, reintentos, % entrega, tiempo promedio, puntuales vs demorados (umbral 45 min)
- Por mensajero: # envíos, tiempo medio
- Por área / responsables
- Datos mock suficientes para demo visual
11 Integración demo (muestras / Lab)
RF-INT-01 — Capacidad de integración MUST
- Una integración futura (Lab / Patología / Banco de Sangre — plataforma TBD).
- En demo: endpoint mock REST POST (o GET) que recibe/código externo y crea o enlaza una solicitud/orden.
- Pantalla o sección “Integraciones” con request/response de ejemplo y log en Seguimiento (
INTEGRACION_RECIBIDA).
- No requiere API real del cliente aún.
12 Ajustes demo ago 2026
Prioridad · motivos · impresión · préstamo
- Prioridad BAJA/MEDIA/ALTA/URGENTE en Mesa, aviso inbound e integración mock. Cola y App ordenan por urgencia.
- ABM Motivos de no entrega (#/settings). App usa select de catálogo.
- Reabrir
NO_ENTREGADA → mismo folio a cola.
- Etiqueta producto/envío (QR + barcode) y comprobante HTML de mensajería al crear la orden (print opcional).
- Formulario grande de traslado de equipos (atributos IB, marca, modelo, serial, accesorios, MFR).
- MFR de envío se carga en Mesa y/o App (salida); MFR de recepción en App (llegada). Verificado por (envío) queda en el formulario.
- Fotos y adjuntos de Mesa + evidencia de entrega se pintan al ver el form y en el PDF descargable (
GET /api/orders/:id/pdf).
- Pedidos de equipo (#/loans): Coordinación autoriza y crea orden Mesa tipo equipamiento (regla demo a confirmar: quién presta).
13 Ajustes demo sep 2026
UX · Auth · Mails · Shell
- Creación de envíos: checkbox renombrado de «Marca Frágil» → Frágil.
- Recupero de contraseña por mail (P01b / P01c) con SMTP + reset en Nitro4.
- Notificaciones SMTP en cada cambio de estado del envío (creado, aprobado, rechazado, asignado/desasignado, en tránsito, entregado, no entregado / reabierto).
- Destinatarios deduplicados: solicitante + mensajero (si hay) + emails de personas origen/destino del maestro.
- Sidebar: se conserva el scroll al navegar (no salta al tope al tocar ítems inferiores).
- Overflow horizontal de tablas contenido en
.table-wrap (sin barra a nivel página).
- Maestro Personas se mantiene (MUST / RF-PER-MAS-01): alimenta Mesa, puestos e inventario.
RF-MAIL-01 — Notificaciones de envío MUST
- Servicio
orderNotifyService.notifyOrderStatus (fire-and-forget; no tumba la API si SMTP falla).
- Hooks en Mesa (creación), Cola/órdenes (aprobar/rechazar/asignar/desasignar/reabrir) y App (salida / entrega / no entrega).
- Cuerpo: folio, estado, origen/destino + link a
#/seguimiento/:id vía APP_PUBLIC_URL.
14 Operación — variables de entorno
SMTP alineado a evaluacionPuntos (Office 365 corporativo, STARTTLS).
Ver también .env.example y docs/AUTH_PROPIO_DEMOWAREHOUSE.md.
| Variable | Uso |
APP_PUBLIC_URL | Base pública (links de recupero y seguimiento en mails) |
AUTH_BOOTSTRAP_EMAIL / AUTH_BOOTSTRAP_PASSWORD | Admin Nitro para provisionar app y cambiar password en recupero |
SMTP_HOST | Host SMTP (ej. smtp.office365.com) |
SMTP_PORT | Puerto (587 recomendado) |
SMTP_SECURE | false en 587/25 (no SSL implícito) |
SMTP_REQUIRE_TLS | true — STARTTLS |
SMTP_TLS_REJECT_UNAUTHORIZED | false si el relay corporativo usa cert laxo |
SMTP_USER / SMTP_PASS | Credenciales SMTP |
SMTP_FROM | Remitente (ej. alertas corporativo) |
MAIL_OVERRIDE_TO | Opcional (demo): fuerza todos los mails a estas casillas (coma-separadas). Hoy: mjo@jphlions.com,lop@jphlions.com |
No usar SMTP_SECURE=true en puerto 587/25 con nodemailer (error SSL wrong version).
Misma convención que evaluacionPuntos.
P Pantallas demo (v1.7)
| ID | Pantalla | |
| P01 | Login | Must |
| P01b | Recupero de contraseña (mail) | Must |
| P01c | Reset de contraseña (token) | Must |
| P02 | Registro | Must |
| P03 | Home | Must |
| P04 | Maestro artículos | Must |
| P05 | Inventario (+ acuse retiro) | Must |
| P06 | Mesa de envíos (crea orden + folio + QR) | Must |
| P06b | Interlocalidad EXT+INT (aviso → salida → entrada → Mesa) | Must |
| P07 | Campus + Edificio/piso/sector/oficina + puestos (persona/máquina) | Must |
| P08 | Horarios de entrega (campus/piso/oficina/persona) | Must |
| P09 | Cola (aprobar / agrupar / asignar mensajero) | Must |
| P10 | App mensajero (salida + confirmar/rechazar + foto/firma/geo) | Must |
| P11 | Seguimiento | Must |
| P12 | Dashboard KPI | Must |
| P13 | Integración REST mock | Must |
| P14 | Pedidos de equipo + autorización | Must |
| P15 | Configuración · motivos no entrega | Must |
F Flujo E2E
- Login como solicitante área envíos (o recupero → reset → login)
- Mesa: bienes + origen/destino campus → crea orden → folio → imprimir etiqueta QR (opcional Frágil)
- Cola: aprobar + asignar mensajero (individual o grupo de pedidos) — mails de estado
- App: seleccionar → escanear SALIDA
- App: en destino escanear LLEGADA → receptor + firma/geo
- Seguimiento: timeline + duración
- Dashboard KPI: ver métricas por mensajero/área
- (Opcional) POST mock integración → aparece en Seguimiento
× Fuera / notas cliente
- RTLS / planos / ~5000 equipos: propuesta comercial aparte (orden de magnitud); no demo.
- Centros de comando (2 campus): obra física aparte.
- Mansis: info pendiente del cliente.
- BioStar / SAP / Pegasys: cubierto con CDVI — no requerido.
Agentes alineados a ERS v1.7.
@pipeline demo Implementa demo navegable según ERS v1.7 (P01–P13)