Saltearse al contenido

Marketplace & Auctions

1. Descripción General de la Funcionalidad

El marketplace es el mecanismo central para la selección de proveedores en Algesta, implementando un modelo de subasta inversa donde los proveedores compiten enviando ofertas para órdenes de mantenimiento publicadas. Las características clave incluyen: ofertas anónimas para prevenir manipulación de precios, mínimo de 3 ofertas para visibilidad para proteger la confidencialidad del proveedor, validación de elegibilidad basada en cumplimiento de documentación, selección discrecional por agentes permitiendo consideración de factores más allá del precio, e integración completa con el ciclo de vida de la orden para transiciones de flujo de trabajo sin interrupciones. El marketplace se volvió obligatorio para todos los servicios externos, asegurando precios competitivos y estándares de calidad, mientras que los servicios internos evitan las subastas y se marcan en consecuencia.


2. Contexto de Negocio

Algesta quería asegurar precios competitivos mientras mantenía la calidad del proveedor a través de requisitos de documentación y proporcionar transparencia mientras protegía el anonimato del proveedor durante las ofertas. El modelo anterior de asignación directa carecía de descubrimiento de precios y presión competitiva, lo que llevaba a costos inflados y responsabilidad limitada del proveedor. El marketplace introduce fuerzas de mercado mientras mantiene el control a través de validación de elegibilidad y selección discrecional. Este equilibrio entre competencia y calidad es crítico para operaciones sostenibles y satisfacción del cliente.


3. Flujo de Trabajo de Subastas

flowchart TD
    A[Agente publica orden en marketplace] --> B{¿Existen proveedores elegibles?}
    B -->|No| C[Error: No hay proveedores disponibles]
    B -->|Sí| D[Crear subasta con duración]
    D --> E[Notificar proveedores elegibles]
    E --> F[Proveedores ven orden anonimizada]
    F --> G{¿Proveedor elegible?}
    G -->|No - docs vencidos| H[Mostrar mensaje 'No elegible']
    G -->|Sí| I[Proveedor envía oferta]
    I --> J{¿Mínimo 3 ofertas?}
    J -->|No| K[Ofertas permanecen ocultas]
    J -->|Sí| L[Ofertas se vuelven visibles para agente]
    L --> M[Agente revisa todas las ofertas]
    M --> N{Decisión del agente}
    N -->|Seleccionar proveedor| O[Agente selecciona proveedor]
    O --> P[Actualizar estado de orden a ProveedorSeleccionado]
    P --> Q[Notificar proveedor seleccionado]
    Q --> R[Notificar proveedores no seleccionados]
    R --> S[Subasta cerrada]
    N -->|Extender subasta| T[Extender duración de subasta]
    T --> F
    N -->|Cancelar| U[Cancelar subasta]
    U --> V[Devolver orden a EnRevision]

4. Historias de Usuario por Sprint

Sprint 4: Lanzamiento del Marketplace

US-S4-010: Publicar Orden en Marketplace (Agente)

  • Descripción: Como agente, quiero publicar una orden en el marketplace para que los proveedores elegibles puedan enviar ofertas
  • Criterios de Aceptación:
    • Botón “Publicar en Marketplace” visible para órdenes en estado correcto (EnRevision)
    • 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 al menos un proveedor elegible existe
    • 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 - Creación de subasta
    • algesta-dashboard-react/src/Funcionalidades/marketplace/ - UI de Marketplace
  • Pruebas: Sprint 4 Pruebas notes - Historia 16544
  • API: POST /api/auctions/publish

US-S4-011: Ver Órdenes Disponibles (Proveedor)

  • Descripción: Como proveedor, quiero ver órdenes disponibles para ofertar en mi área de servicio
  • Criterios de Aceptación:
    • Lista muestra solo órdenes que coinciden con servicios y ubicación del proveedor
    • Detalles de orden están anonimizados (sin nombre de cliente, solo ubicación general)
    • Muestra: tipo de servicio, urgencia, fotos, descripción, fecha límite
    • Filtrar por tipo de servicio, urgencia, ubicación
    • Clic para ver detalles completos
    • Actualizaciones en tiempo real cuando se publican nuevas órdenes
  • Estado: ✅ Completo
  • Implementación:
    • algesta-ms-provider-nestjs/src/application/handlers/queries/auction/list-auctions.handler.ts - Listar subastas
    • algesta-dashboard-react/src/Funcionalidades/providers/ - Portal de proveedor
  • API: GET /api/auctions?providerId=:id&Estado=Activo

US-S4-012: Enviar Oferta (Proveedor)

  • Descripción: Como proveedor, quiero enviar una oferta por una orden para poder competir por el trabajo
  • Criterios de Aceptación:
    • Formulario con campos: costo estimado, duración estimada, comentarios, respuestas a preguntas personalizadas
    • Validación: proveedor debe ser elegible (documentos válidos)
    • Si no es elegible, mostrar mensaje explicando por qué (qué documentos vencieron)
    • Oferta se envía anónimamente
    • Proveedor puede editar oferta antes de que cierre la subasta
    • Mensaje de confirmación después del envío
    • Notificación enviada al agente (nueva oferta recibida)
  • Estado: ✅ Completo
  • Implementación:
    • algesta-ms-provider-nestjs/src/application/handlers/commands/auction/create-auction-offer.handler.ts - Crear oferta
    • algesta-ms-provider-nestjs/src/application/handlers/commands/auction/edit-auction-offer.handler.ts - Editar oferta
  • Pruebas: Sprint 4 - envío de oferta validado
  • API:
    • POST /api/auctions/:auctionId/offers - Enviar oferta
    • PUT /api/auctions/:auctionId/offers/:offerId - Editar oferta

US-S4-013: Ver Ofertas (Agente)

  • Descripción: Como agente, quiero ver todas las ofertas de una subasta para poder seleccionar el mejor proveedor
  • Criterios de Aceptación:
    • Ofertas solo visibles si ≥3 ofertas enviadas (protección de anonimato)
    • Si <3 ofertas, mostrar mensaje: “Esperando mínimo 3 ofertas”
    • Tabla con columnas: Proveedor (anonimizado inicialmente), Costo, Duración, Calificación, Estado de Documentos
    • Ordenable por costo, calificación, duración
    • Fila expandible para ver detalles del proveedor (nombre revelado)
    • Mostrar historial del proveedor y métricas de desempeño
    • Botón para seleccionar proveedor
  • Estado: ✅ Completo
  • Implementación:
    • algesta-ms-provider-nestjs/src/application/handlers/queries/auction/list-auction-offers.handler.ts - Listar ofertas
    • algesta-dashboard-react/src/Funcionalidades/marketplace/auction/ - Detalle de subasta
  • API: GET /api/auctions/:auctionId/offers

US-S4-014: Seleccionar Proveedor (Agente)

  • Descripción: Como agente, quiero seleccionar el proveedor ganador para que la orden pueda proceder
  • Criterios de Aceptación:
    • Botón “Seleccionar Proveedor” para cada oferta
    • Diálogo de confirmación mostrando detalles del proveedor
    • Campo opcional para justificación de selección
    • Estado de orden cambia a “ProveedorSeleccionado”
    • Proveedor seleccionado recibe notificación
    • Proveedores no seleccionados reciben notificación
    • Subasta es cerrada
    • Orden es asignada al proveedor seleccionado
  • Estado: ✅ Completo
  • Implementación:
    • algesta-ms-provider-nestjs/src/application/handlers/commands/auction/assign-provider.handler.ts - Asignar proveedor
    • algesta-dashboard-react/src/Funcionalidades/marketplace/auction/hooks/use-assign-provider-form.ts - UI de asignación
  • Pruebas: Sprint 4 - selección de proveedor validada
  • API: POST /api/auctions/:auctionId/assign

Sprint 5-8: Mejoras

US-S6-020: Cotización Detallada en Subasta

  • Descripción: Como agente, quiero que los proveedores envíen cotizaciones detalladas (no solo costo total) para mejor transparencia
  • Criterios de Aceptación:
    • Agente crea lista de ítems (materiales, mano de obra, transporte, partes, equipo)
    • Cada ítem tiene: descripción, cantidad, unidad
    • Proveedor llena precio unitario para cada ítem
    • Sistema calcula subtotal automáticamente
    • Agente puede revisar y ajustar ítems
    • Agente aplica margen (automático o manual)
    • Cliente ve desglose detallado
  • Estado: ✅ Completo
  • Implementación:
    • algesta-ms-provider-nestjs/src/application/handlers/commands/auction/create-dynamic-items.handler.ts - Crear estructura de ítems
    • algesta-ms-provider-nestjs/src/application/handlers/commands/auction/create-offer-inflation.handler.ts - Aplicar margen
  • Sprint: S6-S8
  • API:
    • POST /api/auctions/:auctionId/items - Crear estructura de ítems
    • POST /api/auctions/:auctionId/offers/:offerId/inflate - Aplicar margen

US-S7-025: Marketplace con Información del Agente

  • Descripción: Como proveedor, quiero ver qué agente está gestionando la orden para mejor comunicación
  • Criterios de Aceptación:
    • Detalle de orden muestra nombre y contacto del agente
    • Proveedor puede enviar mensajes al agente a través de la plataforma
    • Información del agente visible solo para proveedores que enviaron ofertas
  • Estado: ✅ Completo
  • Sprint: S7-S8

US-S8-030: Inflar Valores de Cotización

  • Descripción: Como agente, quiero aplicar un margen a la cotización del proveedor antes de enviarla al cliente
  • Criterios de Aceptación:
    • Ver cotización detallada del proveedor
    • Aplicar margen porcentual (ej., 15%) o ajuste manual por ítem
    • Ver costo original, margen y costo final
    • Guardar cotización inflada
    • Enviar al cliente para aprobación
    • Cliente ve solo precios finales (costos del proveedor ocultos)
  • Estado: ✅ Completo
  • Implementación:
    • algesta-dashboard-react/src/Funcionalidades/marketplace/auction/hooks/use-inflate-quotation-state.ts - UI de inflación
  • Sprint: S8

US-S8-031: Extender Duración de Subasta

  • Descripción: Como agente, quiero extender una subasta si no he recibido suficientes ofertas
  • Criterios de Aceptación:
    • Botón “Extender Subasta” visible antes de la fecha límite
    • Agregar horas o días a la duración
    • Todos los proveedores notificados de la extensión
    • Subasta permanece activa
  • Estado: 🟡 En Progreso

US-S8-032: Cancelar Subasta

  • Descripción: Como agente, quiero cancelar una subasta si los requisitos de la orden cambiaron
  • Criterios de Aceptación:
    • Botón “Cancelar Subasta” con confirmación
    • Todos los proveedores notificados de la cancelación
    • Estado de orden revierte a “EnRevision”
    • Subasta marcada como cancelada
  • Estado: 🟡 En Progreso

5. Modelo de Datos de Subasta

Entidad Auction

Referencia: algesta-ms-provider-nestjs/src/domain/entities/auction.entity.ts

CampoTipoDescripciónRequerido
_idObjectIdIdentificador único
orderIdObjectIdOrden relacionada
EstadoEnumActivo, CLOSED, CANCELLED
startDateDateInicio de subasta
endDateDateFecha límite de subasta
eligibleProvidersArrayProveedores que pueden ofertar
offersArrayOfertas enviadasNo
selectedProviderIdObjectIdGanadorNo
customQuestionsArrayPreguntas del agenteNo
itemsArrayEstructura de cotización detalladaNo
createdAtDateMarca de tiempo de creación
updatedAtDateÚltima actualización
createdByObjectIdAgente que publicó
selectionRationaleStringPor qué se seleccionó el proveedorNo

Sub-documento Offer

CampoTipoDescripción
providerIdObjectIdProveedor oferente
totalCostNumberMonto total de oferta
estimatedDurationNumberDías para completar
commentsStringNotas del proveedor
answersArrayRespuestas a preguntas personalizadas
itemsArrayPrecio detallado
submittedAtDateMarca de tiempo de envío
EstadoEnumPendiente, SELECTED, REJECTED
inflatedItemsArrayÍtems con margen del agente aplicado
inflationPercentageNumberPorcentaje de margen total

Sub-documento AuctionItem

CampoTipoDescripción
DescripciónStringDescripción del ítem
quantityNumberCantidad requerida
unitStringUnidad de medida (ej., unidad, m², hora)
categoryEnumMATERIAL, LABOR, TRANSPORT, PART, EQUIPMENT, OTHER

Sub-documento OfferItem

CampoTipoDescripción
auctionItemIdObjectIdReferencia al ítem de subasta
unitPriceNumberPrecio por unidad
subtotalNumberquantity × unitPrice

Sub-documento InflatedItem

CampoTipoDescripción
offerItemIdObjectIdReferencia al ítem de oferta
originalUnitPriceNumberPrecio del proveedor
marginNumberMargen de Algesta (monto o porcentaje)
finalUnitPriceNumberPrecio mostrado al cliente
finalSubtotalNumberquantity × finalUnitPrice

6. Reglas de Elegibilidad

Validación de Elegibilidad del Proveedor

Los proveedores deben cumplir TODOS los criterios para ofertar en una subasta:

  1. Validación de Documentos:

    • ARL (seguro de riesgos laborales) - subido y no vencido
    • EPS (seguro de salud) - subido y no vencido
    • RUT (registro tributario) - subido y no vencido
    • Certificado de experiencia - subido y no vencido
    • Otros documentos según tipo de servicio
  2. Coincidencia de Servicio:

    • El proveedor debe ofrecer el tipo de servicio solicitado en la orden
    • Tipo de servicio verificado contra servicios registrados del proveedor
  3. Coincidencia de Ubicación:

    • El proveedor debe servir la ubicación de la orden (ciudad/región)
    • Ubicación verificada contra áreas de servicio del proveedor
  4. Estado Activo:

    • La cuenta del proveedor debe estar activa (no suspendida)
    • Sin problemas de cumplimiento pendientes
  5. Asistencia a Videollamada (si aplica):

    • Para ciertos tipos de servicio, el proveedor debe haber asistido a videollamada técnica
    • Asistencia a videollamada rastreada en perfil del proveedor

Implementación: algesta-ms-provider-nestjs/src/application/handlers/queries/provider/validate-provider-eligibility.handler.ts

Flujo de Verificación de Elegibilidad

flowchart TD
    A[Proveedor ve subasta] --> B{¿Documentos válidos?}
    B -->|No| C[Mostrar: 'Documentos vencidos: ARL, RUT']
    B -->|Sí| D{¿Coincide servicio?}
    D -->|No| E[Mostrar: 'Tipo de servicio no ofrecido']
    D -->|Sí| F{¿Coincide ubicación?}
    F -->|No| G[Mostrar: 'Ubicación no servida']
    F -->|Sí| H{¿Estado activo?}
    H -->|No| I[Mostrar: 'Cuenta suspendida']
    H -->|Sí| J{¿Videollamada requerida?}
    J -->|Sí| K{¿Asistió a videollamada?}
    K -->|No| L[Mostrar: 'Asistencia a videollamada requerida']
    K -->|Sí| M[Proveedor elegible - Mostrar formulario de oferta]
    J -->|No| M

7. Reglas de Anonimato y Visibilidad

La Regla de las 3 Ofertas

Propósito: Proteger a los proveedores de la manipulación de precios y asegurar competencia justa

Reglas:

  1. Las ofertas se envían anónimamente (identidad del proveedor oculta)
  2. El agente no puede ver NINGUNA oferta hasta que al menos 3 ofertas sean enviadas
  3. Una vez que existen 3+ ofertas, TODAS se vuelven visibles para el agente
  4. Las identidades de los proveedores se revelan solo cuando el agente expande los detalles de la oferta
  5. Los proveedores no seleccionados permanecen anónimos para el cliente

Implementación: Lógica en algesta-ms-provider-nestjs/src/application/handlers/queries/auction/list-auction-offers.handler.ts

Estados de Vista del Agente

stateDiagram-v2
    [*] --> SinOfertas: Subasta publicada
    SinOfertas --> Oferta1: 1 oferta recibida
    Oferta1 --> Oferta2: 2 ofertas recibidas
    Oferta2 --> OfertasVisibles: 3+ ofertas recibidas
    OfertasVisibles --> ProveedorSeleccionado: Agente selecciona proveedor

    note right of SinOfertas: Agente ve: "Esperando ofertas"
    note right of Oferta1: Agente ve: "1 oferta recibida (oculta)"
    note right of Oferta2: Agente ve: "2 ofertas recibidas (ocultas)"
    note right of OfertasVisibles: Agente ve: Todas las ofertas con detalles

8. Criterios de Selección

Selección Discrecional

Filosofía: Los agentes de Algesta tienen autoridad de decisión final, considerando múltiples factores más allá del precio

Factores Considerados:

  1. Costo: Monto total de oferta (no necesariamente el más bajo)
  2. Duración: Tiempo estimado para completar
  3. Calificación del Proveedor: Desempeño histórico (1-5 estrellas)
  4. Cumplimiento de Documentos: Todos los documentos válidos y actualizados
  5. Desempeño Pasado: Tasa de completitud, entrega a tiempo, satisfacción del cliente
  6. Calidad de Oferta: Completitud, profesionalismo, respuestas a preguntas personalizadas
  7. Evaluación de Riesgo: Capacidad del proveedor, carga de trabajo actual, disponibilidad

Soporte del Sistema:

  • Etiqueta de recomendación (ej., “Mejor Oferta”) basada en puntuación ponderada
  • Métricas de desempeño del proveedor visibles en detalles expandibles
  • Columnas ordenables para fácil comparación
  • Campo de justificación para documentar razón de selección (rastro de auditoría)

No Automatizado:

  • Sin asignación automática (siempre selección manual)
  • Sin selección forzada de oferta más baja
  • Sin auto-selección basada en tiempo

9. Resumen de Endpoints API

EndpointMétodoDescripciónActorSprint
/api/auctions/publishPOSTPublicar orden en marketplaceAgenteS4
/api/auctionsGETListar subastas activasProveedorS4
/api/auctions/:idGETObtener detalles de subastaAgente/ProveedorS4
/api/auctions/:id/offersPOSTEnviar ofertaProveedorS4
/api/auctions/:id/offers/:offerIdPUTEditar ofertaProveedorS4
/api/auctions/:id/offersGETListar ofertas (si ≥3)AgenteS4
/api/auctions/:id/assignPOSTSeleccionar proveedorAgenteS4
/api/auctions/:id/itemsPOSTCrear estructura detalladaAgenteS6
/api/auctions/:id/offers/:offerId/inflatePOSTAplicar margenAgenteS8
/api/auctions/finishedGETListar subastas cerradasAgente/ProveedorS7
/api/auctions/:id/extendPOSTExtender duración de subastaAgenteS8
/api/auctions/:id/cancelPOSTCancelar subastaAgenteS8
/api/auctions/:id/eligibility/:providerIdGETVerificar elegibilidad de proveedorSistemaS4

Referencia: algesta-ms-provider-nestjs/src/infrastructure/controllers/auctions.controller.ts


10. Puntos de Integración

Integración de Servicios Internos

  1. Servicio de Órdenes:

    • Creación de subasta dispara cambio de estado de orden (EnRevision → PublicadaParaOfertas)
    • Selección de proveedor actualiza orden (PublicadaParaOfertas → ProveedorSeleccionado)
    • Transiciones de estado de orden rastreadas en OrderHistory
  2. Servicio de Proveedores:

    • Validación de elegibilidad antes del envío de oferta
    • Envío de oferta crea registro de actividad del proveedor
    • Seguimiento de desempeño después de completar la orden
  3. Servicio de Notificaciones:

    • Notificar proveedores de nuevas subastas (email + WhatsApp)
    • Notificar agente de nuevas ofertas
    • Notificar todas las partes de selección de proveedor
  4. Dashboard:

    • Monitoreo de subastas en tiempo real
    • Comparación de ofertas y UI de selección de proveedor
    • Filtros y búsqueda de marketplace

Integración Externa

  • Azure Blob Storage: Almacenar documentos y fotos de subasta
  • WhatsApp (Jelou): Notificar proveedores de nuevas subastas

11. Flujos de Trabajo Clave con Diagramas de Secuencia

Publicación de Subasta

sequenceDiagram
    participant Agente
    participant Dashboard
    participant Gateway
    participant ProviderMS
    participant OrdersMS
    participant NotificationsMS

    Agente->>Dashboard: Clic en "Publicar en Marketplace"
    Dashboard->>Agente: Mostrar formulario de configuración de subasta
    Agente->>Dashboard: Configurar duración, agregar preguntas
    Dashboard->>Gateway: POST /api/auctions/publish
    Gateway->>ProviderMS: PublishOrderForAuctionCommand
    ProviderMS->>ProviderMS: Validar datos de orden
    ProviderMS->>ProviderMS: Obtener proveedores elegibles
    alt Sin proveedores elegibles
        ProviderMS-->>Dashboard: Error: No hay proveedores disponibles
    else Proveedores encontrados
        ProviderMS->>ProviderMS: Crear entidad Auction (estado: ACTIVE)
        ProviderMS->>OrdersMS: Actualizar estado de orden a PublicadaParaOfertas
        OrdersMS->>OrdersMS: Crear registro OrderHistory
        ProviderMS->>NotificationsMS: Notificar proveedores elegibles
        NotificationsMS->>NotificationsMS: Enviar emails/WhatsApp a proveedores
        ProviderMS-->>Dashboard: Subasta creada exitosamente
        Dashboard->>Agente: Mostrar detalles de subasta
    end

Envío de Oferta

sequenceDiagram
    participant Proveedor
    participant PortalProveedor
    participant Gateway
    participant ProviderMS

    Proveedor->>PortalProveedor: Navegar subastas disponibles
    PortalProveedor->>Gateway: GET /api/auctions?providerId=:id
    Gateway->>ProviderMS: ListAuctionsQuery
    ProviderMS-->>PortalProveedor: Lista de subastas

    Proveedor->>PortalProveedor: Ver detalles de subasta
    PortalProveedor->>Gateway: GET /api/auctions/:id
    Gateway->>ProviderMS: GetAuctionDetailQuery
    ProviderMS->>ProviderMS: Verificar elegibilidad del proveedor
    alt No elegible
        ProviderMS-->>PortalProveedor: Mostrar mensaje "No elegible" con razones
    else Elegible
        ProviderMS-->>PortalProveedor: Mostrar detalles de subasta con formulario de oferta

        Proveedor->>PortalProveedor: Llenar formulario de oferta (costo, duración, comentarios)
        PortalProveedor->>Gateway: POST /api/auctions/:id/offers
        Gateway->>ProviderMS: CreateAuctionOfferCommand
        ProviderMS->>ProviderMS: Validar datos de oferta
        ProviderMS->>ProviderMS: Guardar oferta (estado: PENDING)
        ProviderMS->>ProviderMS: Verificar si ahora existen 3+ ofertas
        alt 3+ ofertas alcanzadas
            ProviderMS->>NotificationsMS: Notificar agente (ofertas ahora visibles)
        end
        ProviderMS-->>PortalProveedor: Oferta enviada exitosamente
        PortalProveedor->>Proveedor: Mostrar confirmación
    end

Selección de Proveedor

sequenceDiagram
    participant Agente
    participant Dashboard
    participant Gateway
    participant ProviderMS
    participant OrdersMS
    participant NotificationsMS

    Agente->>Dashboard: Ver subasta con ≥3 ofertas
    Dashboard->>Gateway: GET /api/auctions/:id/offers
    Gateway->>ProviderMS: ListAuctionOffersQuery
    ProviderMS-->>Dashboard: Lista de ofertas con detalles de proveedor

    Agente->>Dashboard: Revisar ofertas, comparar proveedores
    Agente->>Dashboard: Seleccionar proveedor con justificación
    Dashboard->>Gateway: POST /api/auctions/:id/assign
    Gateway->>ProviderMS: AssignProviderCommand

    ProviderMS->>ProviderMS: Actualizar estado de subasta a CLOSED
    ProviderMS->>ProviderMS: Actualizar estado de oferta seleccionada a SELECTED
    ProviderMS->>ProviderMS: Actualizar ofertas no seleccionadas a REJECTED

    ProviderMS->>OrdersMS: Actualizar orden con proveedor seleccionado
    OrdersMS->>OrdersMS: Actualizar estado a ProveedorSeleccionado
    OrdersMS->>OrdersMS: Crear registro OrderHistory

    ProviderMS->>NotificationsMS: Notificar proveedor seleccionado
    ProviderMS->>NotificationsMS: Notificar proveedores no seleccionados
    NotificationsMS->>NotificationsMS: Enviar notificaciones (email/WhatsApp)

    ProviderMS-->>Dashboard: Proveedor asignado exitosamente
    Dashboard->>Agente: Mostrar mensaje de éxito

Inflación de Cotización (Sprint 8)

sequenceDiagram
    participant Agente
    participant Dashboard
    participant Gateway
    participant ProviderMS
    participant OrdersMS

    Note over Agente,OrdersMS: Después de selección de proveedor, antes de enviar al cliente

    Agente->>Dashboard: Ver cotización detallada del proveedor
    Dashboard->>Agente: Mostrar ítems con precios del proveedor

    Agente->>Dashboard: Aplicar margen (15% o manual por ítem)
    Dashboard->>Dashboard: Calcular precios inflados
    Dashboard->>Agente: Mostrar vista previa (original vs. final)

    Agente->>Dashboard: Confirmar inflación
    Dashboard->>Gateway: POST /api/auctions/:id/offers/:offerId/inflate
    Gateway->>ProviderMS: CreateOfferInflationCommand
    ProviderMS->>ProviderMS: Guardar ítems inflados
    ProviderMS->>OrdersMS: Actualizar orden con cotización inflada
    OrdersMS->>OrdersMS: Actualizar estado a CotizacionEnviada
    ProviderMS-->>Dashboard: Inflación aplicada exitosamente

    Dashboard->>Agente: Mostrar cotización inflada
    Agente->>Dashboard: Enviar al cliente para aprobación

12. Evidencia de Pruebas

De unified_Pruebas_notes.md:

Sprint 4 - Historia 16544: Publicación de Marketplace

Pre-requisitos:

  • Rol de agente con permisos de marketplace
  • Órdenes en estado “EnRevision”
  • Al menos un proveedor elegible (documentos válidos, coincidencia de servicio/ubicación)
  • Datos de orden válidos (ubicación, tipo de servicio, descripción, fotos)

Escenarios Probados:

  1. Publicación con Proveedores Elegibles:

    • Acción: Agente publica orden en marketplace
    • Esperado: Subasta creada, proveedores notificados, estado de orden cambiado
    • Resultado: ✅ Validado
  2. Publicación sin Proveedores Elegibles:

    • Acción: Agente intenta publicar orden sin proveedores elegibles
    • Esperado: Mensaje de error “No hay proveedores disponibles para este servicio/ubicación”
    • Resultado: ✅ Validado
  3. Publicación con Datos Insuficientes:

    • Acción: Agente intenta publicar orden con campos requeridos faltantes
    • Esperado: Error de validación listando campos faltantes
    • Resultado: ✅ Validado
  4. Verificación de Elegibilidad del Proveedor:

    • Acción: Proveedor con documentos vencidos ve subasta
    • Esperado: Mensaje “No elegible” con nombres de documentos vencidos
    • Resultado: ✅ Validado
  5. Vista de Orden Anonimizada:

    • Acción: Proveedor ve detalles de subasta
    • Esperado: Nombre de cliente oculto, solo ubicación general mostrada
    • Resultado: ✅ Validado
  6. Seguimiento Post-Publicación:

    • Acción: Agente ve dashboard de marketplace
    • Esperado: Subasta visible con estado correcto y conteo de ofertas
    • Resultado: ✅ Validado
  7. Control de Acceso:

    • Acción: Proveedor no elegible intenta enviar oferta
    • Esperado: Envío de oferta bloqueado
    • Resultado: ✅ Validado

Todos los criterios de aceptación validados


13. Known Issues and Future Enhancements

From Completo_backlog_analysis.md:

🟨 Essential MVP Improvements

  • Mark “Best Offer” Visually: Implement recommendation algorithm and UI tag
  • Improve Marketplace Filters: Add filters by service type, location, urgency, date range
  • Migrate List View to Card View: Better UX for marketplace orders
  • Auction Extension Logic: Allow agents to extend auctions with insufficient offers
  • Cancellation Workflow: Completo auction cancellation with provider notifications

🟩 Post-MVP Operaciones

  • Automatic Provider Assignment: Rules-based selection (lowest bid, highest rating, etc.)
  • Real-time Auction Updates: SignalR/WebSockets for live offer tracking
  • Provider Reputation System: Detailed Métricas (response time, quality, reliability)
  • Historical Pricing Analysis: Help agents validate offer reasonableness
  • Auction Templates: Pre-configured settings for common service types

🟦 Future Backlog

  • Provider Bidding Strategy Analytics: Insights for providers on competitive positioning
  • Multi-Round Auctions: Allow counter-offers and negotiation
  • Auction Automation: Auto-extend if <3 offers near deadline
  • Provider Performance Prediction: ML model to predict provider success probability

14. Referencias Cruzadas

Arquitectura Documentoation

Data Flows

Sprint Documentoation

Sprint 4, 6, 8 Documentoation - see docs/Sprint_4.md, Sprint_6.md, Sprint_8.md in project Repositorio

Pruebas

Unified Pruebas Notes (Sprint 4 - Historia 16544) - see test/unified_Pruebas_notes.md in project Repositorio


Last Updated: 2025-11-20 | Next Review: End of Guarantee Phase