ERS v1.7 · Mensajería interna tipo DHL/FedEx
Markdown
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 SALIDAConfirmar (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

TipoComportamiento
FIJONo circula en préstamo; sí tiene trazabilidad; asignable a oficina/puesto/persona
PRESTAMORetiro/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

  1. Aviso de envío (“voy a mandar”) → ANUNCIADO
  2. Salida del envío (fecha/hora en que salió del origen) → EN_VIAJE
  3. Entrada del envío (fecha/hora en que se recibió en destino) → RECIBIDO
  4. 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

#PasoAcciónEvento
1Solicitudes pendientesÓrdenes / grupos asignados al mensajeroAPP_ABIERTA (opc.)
2Seleccionar ordenVer folio, origen, destino, ítemsORDEN_SELECCIONADA
3Escaneo SALIDAAl salir: leer QR/barcode → “ya salió”ESCANEO_SALIDA
4aConfirmar entregaReceptor + foto + firma (pad) + geolocalización del dispositivoESCANEO_LLEGADA, RECEPTOR_REGISTRADO, FIRMA_CAPTURADA, GEO_CAPTURADA, FOTO_EVIDENCIA, ENTREGADOENTREGADA
4bRechazar entregaMotivo obligatorio + foto + geolocalizaciónGEO_CAPTURADA, FOTO_EVIDENCIA, ENTREGA_RECHAZADANO_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

EventoNotas
MESA_ENTRADA_REGISTRADA / ORDEN_CREADAFolio + etiqueta
ORDEN_APROBADA / ORDEN_ASIGNADA / LOTE_ASIGNADOCola · asignación individual o grupo
ESCANEO_SALIDAInicio tránsito
ESCANEO_LLEGADAFin tránsito
RECEPTOR_REGISTRADO / firma / geo / fotoEvidencias
ENTREGADOCierre + duración calculada
ENTREGA_RECHAZADA / ORDEN_REABIERTAMotivo de catálogo · mismo folio vuelve a cola
PRESTAMO_AUTORIZADOPedido 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.

VariableUso
APP_PUBLIC_URLBase pública (links de recupero y seguimiento en mails)
AUTH_BOOTSTRAP_EMAIL / AUTH_BOOTSTRAP_PASSWORDAdmin Nitro para provisionar app y cambiar password en recupero
SMTP_HOSTHost SMTP (ej. smtp.office365.com)
SMTP_PORTPuerto (587 recomendado)
SMTP_SECUREfalse en 587/25 (no SSL implícito)
SMTP_REQUIRE_TLStrue — STARTTLS
SMTP_TLS_REJECT_UNAUTHORIZEDfalse si el relay corporativo usa cert laxo
SMTP_USER / SMTP_PASSCredenciales SMTP
SMTP_FROMRemitente (ej. alertas corporativo)
MAIL_OVERRIDE_TOOpcional (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)

IDPantalla
P01LoginMust
P01bRecupero de contraseña (mail)Must
P01cReset de contraseña (token)Must
P02RegistroMust
P03HomeMust
P04Maestro artículosMust
P05Inventario (+ acuse retiro)Must
P06Mesa de envíos (crea orden + folio + QR)Must
P06bInterlocalidad EXT+INT (aviso → salida → entrada → Mesa)Must
P07Campus + Edificio/piso/sector/oficina + puestos (persona/máquina)Must
P08Horarios de entrega (campus/piso/oficina/persona)Must
P09Cola (aprobar / agrupar / asignar mensajero)Must
P10App mensajero (salida + confirmar/rechazar + foto/firma/geo)Must
P11SeguimientoMust
P12Dashboard KPIMust
P13Integración REST mockMust
P14Pedidos de equipo + autorizaciónMust
P15Configuración · motivos no entregaMust

F Flujo E2E

  1. Login como solicitante área envíos (o recupero → reset → login)
  2. Mesa: bienes + origen/destino campus → crea orden → folio → imprimir etiqueta QR (opcional Frágil)
  3. Cola: aprobar + asignar mensajero (individual o grupo de pedidos) — mails de estado
  4. App: seleccionar → escanear SALIDA
  5. App: en destino escanear LLEGADA → receptor + firma/geo
  6. Seguimiento: timeline + duración
  7. Dashboard KPI: ver métricas por mensajero/área
  8. (Opcional) POST mock integración → aparece en Seguimiento

Criterios de aceptación

× 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)