Saltearse al contenido

Gestión de Órdenes

1. Descripción General de la Funcionalidad

El sistema de gestión de órdenes es el núcleo de la plataforma Algesta, manejando el ciclo de vida completo desde la solicitud inicial del cliente vía WhatsApp hasta la asignación de marketplace, ejecución, aprobación y cierre. Soporta múltiples tipos de órdenes (correctivo, preventivo, adaptación), prioridades (emergencia, prioridad) y actores (cliente, agente, proveedor). El sistema mantiene historial transaccional para auditabilidad e integra con sistemas externos para notificaciones, firmas y pagos. Todas las transiciones de estado son rastreadas, marcadas con timestamp y atribuidas a usuarios específicos, habilitando seguimiento completo de SLA, reportes de cumplimiento y analítica operacional.


2. Contexto de Negocio

Algesta necesitaba reemplazar el manejo manual y fragmentado de solicitudes de mantenimiento con un sistema automatizado y rastreable que pudiera escalar para manejar múltiples clientes, proveedores y tipos de activos mientras mantiene un estricto cumplimiento y seguimiento de SLA. El proceso anterior involucraba llamadas telefónicas, correos electrónicos y hojas de cálculo, lo que resultaba en solicitudes perdidas, responsabilidad poco clara y sin visibilidad del rendimiento. El sistema de gestión de órdenes centraliza todas las actividades de mantenimiento, aplica flujos de trabajo estandarizados y proporciona visibilidad en tiempo real para todos los interesados.


3. Estados de Órdenes y Ciclo de Vida

Diagrama de Máquina de Estados

stateDiagram-v2
    [*] --> Creada: Client submits via WhatsApp
    Creada --> EnRevision: Agent reviews
    EnRevision --> PublicadaParaOfertas: Published to marketplace
    EnRevision --> Cancelada: Order cancelled
    PublicadaParaOfertas --> RecibiendoOfertas: Providers bid
    RecibiendoOfertas --> ProveedorSeleccionado: Agent selects winner
    ProveedorSeleccionado --> CotizacionEnviada: Provider sends quote
    CotizacionEnviada --> CotizacionAprobada: Client approves
    CotizacionEnviada --> CotizacionRechazada: Client rejects
    CotizacionRechazada --> CotizacionEnviada: Provider revises
    CotizacionAprobada --> DocumentosEnFirma: Contracts to DocuSign
    DocumentosEnFirma --> PolizaAsignada: Policy assigned
    PolizaAsignada --> AnticipoRegistrado: Advance payment
    AnticipoRegistrado --> VisitaTecnica: Technical visit scheduled
    VisitaTecnica --> TrabajoIniciado: Provider starts work
    TrabajoIniciado --> InformeEjecucion: Provider submits report
    InformeEjecucion --> RevisionAgente: Agent reviews
    RevisionAgente --> AprobacionCliente: Sent to client
    AprobacionCliente --> TrabajoAprobado: Client approves
    AprobacionCliente --> Retrabajo: Client requests changes
    Retrabajo --> InformeEjecucion: Provider resubmits
    TrabajoAprobado --> PagoFinal: Final payment
    PagoFinal --> Cerrada: Order closed
    Cerrada --> [*]

    Cancelada --> [*]

Descripciones de Estados

EstadoDescripciónActorEstados SiguientesSprint Introducido
CreadaOrden inicial desde WhatsAppClienteEnRevisionS2
EnRevisionAgente valida y enriqueceAgentePublicadaParaOfertas, CanceladaS2
PublicadaParaOfertasPublicada en marketplaceAgenteRecibiendoOfertasS4
RecibiendoOfertasProveedores enviando ofertasProveedorProveedorSeleccionadoS4
ProveedorSeleccionadoProveedor ganador seleccionadoAgenteCotizacionEnviadaS4
CotizacionEnviadaProveedor envió cotizaciónProveedorCotizacionAprobada, CotizacionRechazadaS5
CotizacionAprobadaCliente aprobó cotizaciónClienteDocumentoosEnFirmaS5
CotizacionRechazadaCliente rechazó cotizaciónClienteCotizacionEnviadaS5
DocumentoosEnFirmaContratos enviados a DocuSignAgentePolizaAsignadaS5
PolizaAsignadaPóliza de seguro asignadaAgenteAnticipoRegistradoS5
AnticipoRegistradoPago de anticipo registradoAgenteVisitaTecnicaS5
VisitaTecnicaVisita técnica programadaProveedorTrabajoIniciadoS6
TrabajoIniciadoEjecución de trabajo iniciadaProveedorInformeEjecucionS6
InformeEjecucionInforme de ejecución enviadoProveedorRevisionAgenteS6
RevisionAgenteAgente revisando informeAgenteAprobacionClienteS7
AprobacionClienteCliente revisando trabajoClienteTrabajoAprobado, RetrabajoS7
TrabajoAprobadoCliente aprobó trabajoClientePagoFinalS7
RetrabajoRetrabajo solicitadoClienteInformeEjecucionS7
PagoFinalPago final procesadoAgenteCerradaS8
CerradaOrden cerradaAgente[*]S8
CanceladaOrden canceladaAgente[*]S2

4. Historias de Usuario por Sprint

Sprint 1: Diseño UX

US-S1-001: Panel de Control de Agente para Órdenes

  • Descripción: Como agente, quiero ver un panel de control de todas las órdenes para poder gestionarlas eficientemente
  • Criterios de Aceptación:
    • Wireframes y prototipos entregados en Figma
    • Panel de control muestra lista de órdenes con información clave (número, cliente, estado, Prioridad, fecha)
    • Funcionalidad de filtros y ordenamiento diseñada
    • Vista de detalle diseñada con toda la información de la orden
  • Estado: ✅ Completo
  • Evidencia: Sprint 1 acta de cierre, Figma prototypes

US-S1-002: Flujo de Interacción de Cliente en WhatsApp

  • Descripción: Como cliente, quiero iniciar una solicitud de servicio vía WhatsApp para no tener que aprender un nuevo sistema
  • Criterios de Aceptación:
    • Flujo UX para conversación de WhatsApp diseñado
    • Plantillas de mensajes definidas
    • Flujos de manejo de errores diseñados
  • Estado: ✅ Completo
  • Evidencia: Sprint 1 acta de cierre, Figma prototypes

Sprint 2: Integración WhatsApp

US-S2-001: Creación de Orden desde WhatsApp

  • Descripción: Como cliente, quiero enviar un mensaje a WhatsApp y que cree una orden automáticamente
  • Criterios de Aceptación:
    • WhatsApp Business API conectado
    • Mensajes recibidos en backend
    • Órdenes creadas con datos del mensaje original
    • Confirmación automática enviada al cliente
    • Orden visible en el panel de control
  • Estado: ✅ Completo
  • Implementación:
    • algesta-agent/jelou/bot.json - Configuración del bot
    • algesta-agent/jelou/skills/skill_*.json - Definiciones de habilidades
    • algesta-ms-orders-nestjs/src/application/handlers/commands/create-order.handler.ts - Comando de creación de orden
    • algesta-ms-orders-nestjs/src/application/handlers/commands/create-order-from-gateway.handler.ts - Integración con gateway
  • Evidencia de Pruebas: Sprint 2 Pruebas notes - Integración WhatsApp validada
  • API Endpoints:
    • POST /api/orders/create - Crear orden desde WhatsApp
    • POST /api/orders/from-gateway - Crear orden desde panel de control

US-S2-002: Notificación de Orden al Cliente

  • Descripción: Como cliente, quiero recibir una notificación de WhatsApp cuando mi orden sea creada para saber que fue recibida
  • Criterios de Aceptación:
    • Notificación enviada inmediatamente después de la creación de la orden
    • Incluye número de orden para seguimiento
    • Incluye tiempo estimado de respuesta
  • Estado: ✅ Completo
  • Implementación:
    • algesta-ms-notifications-nestjs/src/application/handlers/send-whatsapp-notification.handler.ts
  • Evidencia de Pruebas: Sprint 2 Pruebas notes

Sprint 3: Visualización y Gestión de Órdenes

US-S3-001: Ver Órdenes con Filtros

  • Descripción: Como agente, quiero ver todas las órdenes entrantes con filtros por fecha, estado y Prioridad
  • Criterios de Aceptación:
    • Panel de control muestra lista de órdenes con filtros
    • Filtros: rango de fechas, estado, Prioridad, tipo de servicio, agente asignado
    • Ordenar por: fecha de creación, Prioridad, estado
    • Paginación para conjuntos de datos grandes
    • Actualizaciones en tiempo real cuando llegan nuevas órdenes
  • Estado: ✅ Completo
  • Implementación:
    • algesta-dashboard-react/src/Funcionalidades/orders/ - Módulo de funcionalidad de órdenes
    • algesta-ms-orders-nestjs/src/application/handlers/queries/orders/get-all-orders.handler.ts - Consulta de lista de órdenes
  • Evidencia de Pruebas: Sprint 3 Pruebas - Visualización de órdenes validada
  • API Endpoints:
    • GET /api/orders?state=X&Prioridad=Y&from=DATE&to=DATE - Listar órdenes con filtros

US-S3-002: Ver Detalles de Orden

  • Descripción: Como agente, quiero ver los detalles de la orden incluyendo información del cliente, información del activo, fotos y Prioridad
  • Criterios de Aceptación:
    • Vista de detalle muestra toda la información de la orden
    • Fotos mostradas en galería
    • Información del cliente visible
    • Información del activo visible (si está asociado)
    • Línea de tiempo del historial de la orden visible
    • Botones de acción basados en el estado actual
  • Estado: ✅ Completo
  • Implementación:
    • algesta-dashboard-react/src/Funcionalidades/orders/Componentes/OrderDetail.tsx
    • algesta-ms-orders-nestjs/src/application/handlers/queries/orders/get-order-by-id.handler.ts
  • API Endpoints:
    • GET /api/orders/:id - Obtener detalles de orden

US-S3-003: Asignar Orden a Agente

  • Descripción: Como agente, quiero asignar órdenes a mí mismo o a otros agentes
  • Criterios de Aceptación:
    • Menú desplegable de asignación con lista de agentes
    • Agente asignado visible en lista y detalle de orden
    • Notificación enviada al agente asignado
    • Asignación rastreada en historial de orden
  • Estado: ✅ Completo
  • Implementación:
    • algesta-ms-orders-nestjs/src/application/handlers/commands/assign-technician-to-order.handler.ts
  • API Endpoints:
    • POST /api/orders/:id/assign - Asignar orden a agente

Sprint 4: Publicación en Marketplace

US-S4-001: Publicar Orden en Marketplace

  • Descripción: Como agente, quiero publicar una orden en el marketplace para que los proveedores puedan ofertar
  • Criterios de Aceptación:
    • Botón “Publicar en Marketplace” visible para órdenes elegibles
    • Formulario para configurar duración de subasta (horas/días)
    • Opción para agregar preguntas personalizadas para proveedores
    • Validación de datos requeridos de la orden (ubicación, tipo de servicio, fotos)
    • Validación de que existe al menos un proveedor elegible
    • Estado cambia a “PublicadaParaOfertas”
    • Proveedores elegibles reciben notificación
  • Estado: ✅ Completo
  • Implementación:
    • algesta-ms-provider-nestjs/src/application/handlers/commands/auction/publish-order-for-auction.handler.ts
    • algesta-dashboard-react/src/Funcionalidades/marketplace/
  • Evidencia de Pruebas: Sprint 4 Pruebas notes - Historia 16544
  • API Endpoints:
    • POST /api/auctions/publish - Publicar orden en marketplace

US-S4-002: Rastrear Estado del Marketplace

  • Descripción: Como agente, quiero rastrear el estado de órdenes en el marketplace
  • Criterios de Aceptación:
    • Panel de control muestra órdenes en subasta
    • Muestra número de ofertas recibidas
    • Muestra tiempo restante en subasta
    • Muestra si se alcanzó el mínimo de ofertas (3)
    • Alerta si la subasta cierra pronto con ofertas insuficientes
  • Estado: ✅ Completo
  • Implementación:
    • algesta-dashboard-react/src/Funcionalidades/marketplace/Componentes/AuctionEstado.tsx
    • algesta-ms-provider-nestjs/src/application/handlers/queries/auction/get-auction-Estado.handler.ts
  • API Endpoints:
    • GET /api/auctions/:id/Estado - Obtener estado de subasta

Sprint 5: Flujos Post-Subasta

US-S5-001: Ver Ofertas de Proveedores

  • Descripción: Como agente, quiero ver todas las ofertas de una orden para poder seleccionar el mejor proveedor
  • Criterios de Aceptación:
    • Ofertas solo visibles si ≥3 ofertas enviadas
    • Tabla con: Proveedor, Costo, Duración, Calificación, Estado de Documentos
    • Ordenable por costo, calificación, duración
    • Fila expandible para ver historial del proveedor
    • Botón para seleccionar proveedor
  • Estado: ✅ Completo
  • Implementación:
    • algesta-ms-provider-nestjs/src/application/handlers/queries/auction/list-auction-offers.handler.ts
    • algesta-dashboard-react/src/Funcionalidades/marketplace/auction/
  • API Endpoints:
    • GET /api/auctions/:id/offers - Listar ofertas

US-S5-002: Seleccionar Proveedor

  • Descripción: Como agente, quiero seleccionar el proveedor ganador para que la orden pueda proceder
  • Criterios de Aceptación:
    • Diálogo de confirmación mostrando detalles del proveedor
    • Estado de orden cambia a “ProveedorSeleccionado”
    • Proveedor seleccionado recibe notificación
    • Proveedores no seleccionados reciben notificación
    • Subasta es cerrada
  • Estado: ✅ Completo
  • Implementación:
    • algesta-ms-provider-nestjs/src/application/handlers/commands/auction/assign-provider.handler.ts
  • API Endpoints:
    • POST /api/auctions/:auctionId/assign - Seleccionar proveedor y asignar a subasta
  • Nota: La selección de proveedor se maneja vía el API de marketplace/subastas, no vía una ruta del controlador de órdenes. Ver marketplace-auctions.md para documentación completa del API de subastas y selección de proveedor.

US-S5-003: Enviar Documentos a Firma Electrónica

  • Descripción: Como agente, quiero enviar contratos para firma electrónica después de la aprobación de cotización
  • Criterios de Aceptación:
    • Botón “Enviar a Firma” visible después de aprobación de cotización
    • Documentos enviados a DocuSign
    • Todas las partes (cliente, proveedor, Algesta) reciben solicitud de firma
    • Estado cambia a “DocumentoosEnFirma”
    • Estado de firma rastreado
  • Estado: ✅ Completo
  • Implementación:
    • algesta-ms-orders-nestjs/src/application/handlers/commands/send-to-signature.handler.ts
  • Evidencia de Pruebas: Sprint 5 Pruebas notes
  • API Endpoints:
    • POST /api/orders/:id/send-to-signature - Enviar documentos a DocuSign

Sprint 6: Visita Técnica y Ejecución

US-S6-001: Programar Visita Técnica

  • Descripción: Como proveedor, quiero programar una visita técnica antes de iniciar el trabajo
  • Criterios de Aceptación:
    • Proveedor puede seleccionar fecha y hora para la visita
    • Cliente recibe notificación con detalles de la visita
    • Detalles de la visita visibles en línea de tiempo de la orden
    • Estado cambia a “VisitaTecnica”
  • Estado: ✅ Completo
  • Implementación:
    • algesta-api-gateway-nestjs/src/infrastructure/controllers/technical-visit.controller.ts - TechnicalVisitController
    • algesta-ms-provider-nestjs/src/application/handlers/commands/schedule-technical-visit.handler.ts - TechnicalVisitService
  • API Endpoints:
    • POST /api/technical-visit/provider-technical-visit - Programar visita técnica (soporta flujo de dos fases: selección de proveedor y programación de visita)

US-S6-002: Enviar Informe de Ejecución

  • Descripción: Como proveedor, quiero enviar un informe de ejecución con fotos y detalles
  • Criterios de Aceptación:
    • Formulario con: trabajo realizado, materiales usados, fotos, fecha de finalización
    • Fotos subidas a Azure Blob
    • Informe enviado y visible para el agente
    • Estado cambia a “InformeEjecucion”
    • Agente recibe notificación
  • Estado: ✅ Completo
  • Implementación:
    • algesta-ms-orders-nestjs/src/application/handlers/commands/submit-execution-report.handler.ts
  • API Endpoints:
    • POST /api/orders/:id/execution-report - Enviar informe de ejecución

Sprint 7: Aprobación y Cierre

US-S7-001: Agente Revisa Informe de Ejecución

  • Descripción: Como agente, quiero revisar el informe de ejecución del proveedor antes de enviarlo al cliente
  • Criterios de Aceptación:
    • Ver informe de ejecución con todos los detalles
    • Ver fotos de antes/después
    • Aprobar o solicitar cambios
    • Si se aprueba, estado cambia a “AprobacionCliente”
    • Cliente recibe notificación
  • Estado: ✅ Completo
  • Implementación:
    • algesta-ms-orders-nestjs/src/application/handlers/commands/review-execution-report.handler.ts
  • API Endpoints:
    • POST /api/orders/:id/review-report - Revisar informe de ejecución

US-S7-002: Cliente Aprueba Trabajo

  • Descripción: Como cliente, quiero aprobar el trabajo completado o solicitar cambios
  • Criterios de Aceptación:
    • Cliente recibe enlace para revisar trabajo
    • Puede ver fotos e informe
    • Aprobar o rechazar con comentarios
    • Si se aprueba, estado cambia a “TrabajoAprobado”
    • Si se rechaza, estado cambia a “Retrabajo”
    • Todas las partes notificadas de la decisión
  • Estado: ✅ Completo
  • Implementación:
    • algesta-ms-orders-nestjs/src/application/handlers/commands/approve-work.handler.ts
    • algesta-ms-orders-nestjs/src/application/handlers/commands/request-rework.handler.ts
  • API Endpoints:
    • POST /api/orders/:id/approve-work - Aprobar trabajo
    • POST /api/orders/:id/request-changes - Solicitar retrabajo

Sprint 8: Finalización

US-S8-001: Cerrar Orden

  • Descripción: Como agente, quiero cerrar una orden después de que el pago final sea procesado
  • Criterios de Aceptación:
    • Pago final registrado
    • Estado cambia a “Cerrada”
    • Todas las partes notificadas
    • Orden visible en lista de órdenes cerradas
    • Métricas de rendimiento actualizadas
  • Estado: ✅ Completo
  • Implementación:
    • algesta-ms-orders-nestjs/src/application/handlers/commands/close-order.handler.ts
  • API Endpoints:
    • POST /api/orders/:id/close - Cerrar orden

5. Modelo de Datos de Orden

Entidad Order

Referencia: algesta-ms-orders-nestjs/src/domain/entities/order.entity.ts

CampoTipoDescripciónRequeridoOrigen
_idObjectIdIdentificador únicoAuto-generado
orderNumberStringID legible (ej., ORD-2025-001)order-id-generator.service.ts
clientIdObjectIdReferencia al clienteDesde WhatsApp o dashboard
assetIdObjectIdReferencia al activoNoDesde HV o creado
serviceTypeEnumCORRECTIVE, PREVENTIVE, ADAPTATIONDesde cliente
PrioridadEnumEMERGENCY, Prioridad, NORMALDesde cliente o agente
stateEnumVer máquina de estados arribaTransiciones de estado
DescripciónStringDescripción del servicioDesde cliente
photosArrayURLs de Azure BlobNoDesde WhatsApp
locationObjectDirección, coordenadas, ciudad, regiónDesde cliente
createdAtDateMarca de tiempo de creaciónAuto
updatedAtDateÚltima actualizaciónAuto
assignedAgentIdObjectIdAgente asignadoNoDesde asignación
assignedProviderIdObjectIdProveedor seleccionadoNoDesde subasta
auctionIdObjectIdSubasta relacionadaNoDesde marketplace
quotationIdObjectIdCotización aprobadaNoDesde proveedor
executionReportIdObjectIdInforme de ejecuciónNoDesde proveedor
approvalDateDateFecha de aprobación del clienteNoDesde aprobación
closureDateDateFecha de cierre de ordenNoDesde cierre
cancellationReasonStringRazón si fue canceladaNoDesde cancelación

6. Historial de Órdenes y Auditoría

Sistema de Historial Transaccional

Cada cambio de estado crea un registro OrderHistory para trazabilidad completa de auditoría y seguimiento de SLA.

Referencia: algesta-ms-orders-nestjs/src/domain/entities/order-history.entity.ts

Entidad OrderHistory

CampoTipoDescripción
_idObjectIdIdentificador único
orderIdObjectIdOrden relacionada
previousStateEnumEstado antes de la transición
newStateEnumEstado después de la transición
userIdObjectIdUsuario que hizo el cambio
userRoleEnumAGENT, PROVIDER, CLIENT, SYSTEM
timestampDateCuándo ocurrió el cambio
reasonStringRazón del cambio
metadataObjectContexto adicional (ej., razón de rechazo, comentarios de aprobación)

Casos de Uso

  1. Trazabilidad de Auditoría: Historial completo de quién hizo qué y cuándo
  2. Cálculo de SLA: Tiempo entre estados específicos (ej., Creada → ProveedorSeleccionado)
  3. Cumplimiento: Requerido para reportes regulatorios
  4. Depuración: Solucionar problemas de órdenes revisando historial
  5. Cálculo de KPI: Datos fuente para métricas operacionales

Referencia: algesta-ms-orders-nestjs/src/shared/services/order-history.service.ts


7. Resumen de Endpoints API

EndpointMétodoDescripciónActorSprint
/api/orders/createPOSTCrear orden desde WhatsAppSistemaS2
/api/orders/from-gatewayPOSTCrear orden desde dashboardAgenteS2
/api/ordersGETListar todas las órdenes con filtrosAgenteS3
/api/orders/:idGETObtener detalles de ordenAgente/Proveedor/ClienteS3
/api/orders/:id/assignPOSTAsignar orden a agenteAgenteS3
/api/orders/:id/publishPOSTPublicar en marketplaceAgenteS4
/api/auctions/:auctionId/assignPOSTSeleccionar proveedor y asignar a subastaAgenteS4
/api/orders/:id/quotationPOSTEnviar cotizaciónProveedorS5
/api/orders/:id/approve-quotationPOSTAprobar cotizaciónClienteS5
/api/orders/:id/reject-quotationPOSTRechazar cotizaciónClienteS5
/api/orders/:id/send-to-signaturePOSTEnviar documentos a DocuSignAgenteS5
/api/technical-visit/provider-technical-visitPOSTProgramar visita técnicaProveedorS6
/api/orders/:id/start-workPOSTIniciar ejecución de trabajoProveedorS6
/api/orders/:id/execution-reportPOSTEnviar informe de ejecuciónProveedorS6
/api/orders/:id/review-reportPOSTAgente revisa informeAgenteS7
/api/orders/:id/approve-workPOSTAprobar trabajo completadoClienteS7
/api/orders/:id/request-changesPOSTSolicitar retrabajoClienteS7
/api/orders/:id/closePOSTCerrar ordenAgenteS8
/api/orders/counterGETObtener conteo de órdenes por estadoAgenteS5
/api/orders/history/:idGETObtener historial de ordenAgenteS5

Referencia: algesta-ms-orders-nestjs/src/infrastructure/controllers/order.controller.ts


8. Puntos de Integración

Integraciones Internas

  1. WhatsApp (Jelou): Creación de órdenes, actualizaciones de estado, confirmación de fecha de ejecución
  2. Servicio de Notificaciones: Notificaciones por email y WhatsApp para cambios de estado
  3. Servicio de Proveedores: Participación en subastas, envío de cotizaciones
  4. Servicio de Activos: Asociación de activos y actualizaciones de HV

Integraciones Externas

  1. DocuSign: Firma de contratos después de aprobación de cotización
  2. Azure Blob Storage: Almacenamiento de fotos y documentos
  3. Servicio OCR: Reconocimiento de seriales desde fotos

9. Flujos de Trabajo Clave con Diagramas de Secuencia

Creación de Orden desde WhatsApp

sequenceDiagram
    participant Client
    participant Jelou
    participant Gateway
    participant OrdersMS
    participant NotificationsMS

    Client->>Jelou: Send message with service request
    Jelou->>Gateway: POST /api/orders/from-gateway
    Gateway->>OrdersMS: CreateOrderFromGatewayCommand
    OrdersMS->>OrdersMS: Validate data
    OrdersMS->>OrdersMS: Create Order entity (state: Creada)
    OrdersMS->>OrdersMS: Save to MongoDB
    OrdersMS->>OrdersMS: Create OrderHistory record
    OrdersMS->>NotificationsMS: Send confirmation notification
    NotificationsMS->>Jelou: Send WhatsApp message
    Jelou->>Client: "Your order ORD-2025-001 has been created"
    OrdersMS-->>Gateway: Order created response
    Gateway-->>Jelou: Success

Publicación de Orden en Marketplace

sequenceDiagram
    participant Agent
    participant Dashboard
    participant Gateway
    participant OrdersMS
    participant ProviderMS
    participant NotificationsMS

    Agent->>Dashboard: Click "Publish to Marketplace"
    Dashboard->>Gateway: POST /api/orders/:id/publish
    Gateway->>OrdersMS: Validate order state
    OrdersMS->>ProviderMS: Get eligible providers
    ProviderMS-->>OrdersMS: List of eligible providers
    alt No eligible providers
        OrdersMS-->>Dashboard: Error: No providers available
    else Providers available
        OrdersMS->>ProviderMS: Create auction
        ProviderMS->>ProviderMS: Save auction (state: ACTIVE)
        OrdersMS->>OrdersMS: Update order state to PublicadaParaOfertas
        OrdersMS->>OrdersMS: Create OrderHistory record
        OrdersMS->>NotificationsMS: Notify eligible providers
        NotificationsMS->>NotificationsMS: Send emails/WhatsApp
        OrdersMS-->>Dashboard: Success
    end

Selección de Proveedor y Aprobación de Cotización

sequenceDiagram
    participant Agent
    participant Dashboard
    participant Gateway
    participant OrdersMS
    participant ProviderMS
    participant NotificationsMS
    participant Client

    Agent->>Dashboard: Select provider from offers
    Dashboard->>Gateway: POST /api/auctions/:id/assign
    Gateway->>ProviderMS: AssignProviderCommand
    ProviderMS->>ProviderMS: Update auction status to CLOSED
    ProviderMS->>OrdersMS: Update order with selected provider
    OrdersMS->>OrdersMS: Update state to ProveedorSeleccionado
    OrdersMS->>OrdersMS: Create OrderHistory record
    ProviderMS->>NotificationsMS: Notify selected provider
    ProviderMS->>NotificationsMS: Notify non-selected providers
    NotificationsMS->>NotificationsMS: Send notifications

    Note over ProviderMS,Client: Provider submits quotation

    ProviderMS->>OrdersMS: Quotation submitted
    OrdersMS->>OrdersMS: Update state to CotizacionEnviada
    OrdersMS->>NotificationsMS: Notify client for approval
    NotificationsMS->>Client: "Please review quotation"

    Client->>Gateway: Approve quotation
    Gateway->>OrdersMS: ApproveQuotationCommand
    OrdersMS->>OrdersMS: Update state to CotizacionAprobada
    OrdersMS->>OrdersMS: Create OrderHistory record
    OrdersMS->>NotificationsMS: Notify agent and provider

Ejecución de Trabajo y Aprobación

sequenceDiagram
    participant Provider
    participant ProviderPortal
    participant Gateway
    participant OrdersMS
    participant Agent
    participant Client
    participant NotificationsMS

    Provider->>ProviderPortal: Submit execution report
    ProviderPortal->>Gateway: POST /api/orders/:id/execution-report
    Gateway->>OrdersMS: SubmitExecutionReportCommand
    OrdersMS->>OrdersMS: Save report
    OrdersMS->>OrdersMS: Update state to InformeEjecucion
    OrdersMS->>OrdersMS: Create OrderHistory record
    OrdersMS->>NotificationsMS: Notify agent
    NotificationsMS->>Agent: "New execution report"

    Agent->>Gateway: Review and approve report
    Gateway->>OrdersMS: ReviewExecutionReportCommand
    OrdersMS->>OrdersMS: Update state to AprobacionCliente
    OrdersMS->>OrdersMS: Create OrderHistory record
    OrdersMS->>NotificationsMS: Notify client
    NotificationsMS->>Client: "Please review completed work"

    Client->>Gateway: Approve work
    Gateway->>OrdersMS: ApproveWorkCommand
    OrdersMS->>OrdersMS: Update state to TrabajoAprobado
    OrdersMS->>OrdersMS: Create OrderHistory record
    OrdersMS->>NotificationsMS: Notify all parties

10. Evidencia de Pruebas y Validación

De unified_Pruebas_notes.md:

Sprint 2: Integración WhatsApp

  • Historia: Creación de Orden desde WhatsApp
  • Pre-requisitos: Bot Jelou configurado, gateway conectado, MongoDB disponible
  • Escenarios:
    • Cliente envía mensaje → Orden creada → Confirmación enviada
    • Datos inválidos → Mensaje de error → No se crea orden
    • Adjunto de foto → Subida a Azure Blob → URL almacenada en orden
  • Resultados Esperados: Todos los escenarios validados ✅

Sprint 3: Visualización de Órdenes

  • Escenarios:
    • Agente ve lista de órdenes → Todas las órdenes mostradas con estados correctos
    • Agente filtra por estado → Solo órdenes en estado seleccionado mostradas
    • Agente ve detalles de orden → Toda la información mostrada correctamente
    • Agente asigna orden → Asignación rastreada en historial
  • Resultados Esperados: Todos los escenarios validados ✅

Sprint 4: Publicación en Marketplace

  • Historia 16544: Publicación en Marketplace
  • Pre-requisitos: Órdenes en estado “EnRevision”, proveedores elegibles, datos de orden válidos
  • Escenarios:
    • Publicación con proveedores elegibles → Subasta creada → Proveedores notificados
    • Publicación sin proveedores elegibles → Mensaje de error mostrado
    • Publicación con datos insuficientes → Error de validación
    • Seguimiento post-publicación → Subasta visible en marketplace
  • Resultados Esperados: Todos los escenarios validados ✅

Sprint 5-8: Flujos Post-Subasta

  • Firma Electrónica: Envío de documentos y seguimiento de estado validado
  • Aprobación de Cotización: Flujos de aprobación y rechazo probados
  • Informes de Ejecución: Envío y revisión de informe validados
  • Aprobación de Trabajo: Flujos de aprobación de cliente y retrabajo probados

Historia 16502: Gestión de Solicitudes

  • Escenarios:
    • Agente crea orden desde dashboard → Orden creada exitosamente
    • Agente ve lista de órdenes con filtros → Resultados correctos retornados
    • Agente ve detalles de orden → Toda la información mostrada
    • Agente realiza acciones basadas en estado → Transiciones de estado correctas
  • Resultados Esperados: Todos los escenarios validados ✅

11. Problemas Conocidos y Mejoras Futuras

De Completo_backlog_analysis.md:

🟧 Problemas Críticos

  • Flujos end-to-end de WhatsApp necesitan estabilización
  • Automatización de notificación de confirmación de fecha de ejecución pendiente
  • Casos extremos de validación de transición de estado

🟨 Mejoras Esenciales

  • Refinamiento de permisos basados en roles (solicitante, aprobador 1, aprobador 2)
  • Mejora del flujo de trabajo de cancelación de órdenes
  • Operaciones masivas de órdenes (asignar múltiples, cerrar múltiples)

🟩 Operaciones Post-MVP

  • Asignación automática basada en afinidad de agente, zona, especialidad
  • Plantillas de órdenes para tipos de servicio comunes
  • Búsqueda avanzada con capacidades de texto completo

🟦 Backlog Futuro

  • Automatización de mantenimiento preventivo (órdenes recurrentes)
  • Analítica y pronóstico de órdenes
  • Integración con sistema contable para facturación automatizada
  • Aplicación móvil para agentes de campo

12. Referencias Cruzadas

Documentación de Arquitectura

Flujos de Datos

Funcionalidades Relacionadas

Documentación de Sprints

Documentación de Sprint 2-8 (ver docs/Sprint_2.md hasta Sprint_8.md en el repositorio del proyecto)

Pruebas

Notas Unificadas de Pruebas (ver test/unified_Pruebas_notes.md en el repositorio del proyecto)


Última Actualización: 2025-11-20 | Próxima Revisión: Fin de Fase de Garantía