← Arquitectura por épica

FT-RAC-05 · Estatus del producto y motivos visibles para seller y…

Arquitectura del Nuevo PIM por épica · corte del 18-oct-2026

Propuesta del TL: no sustituye la spec de cada épica

Actualizado el 18-oct-2026. Primera versión de la arquitectura de esta épica.

Qué responde. Cómo funciona por dentro FT-RAC-05: qué piezas participan, en qué orden hablan, qué APIs hay que construir con su request y su response, y qué le entrega a la épica siguiente.

Para quién. Los equipos que van a construir la épica, QA y arquitectura.

Estado. [Propuesta] del TL del Nuevo PIM, 18-oct-2026, construida sobre ADR-12. La spec de cada épica dice el qué; estas páginas, el cómo.

Fuente. docs/arquitectura/por-epica/epicas/FT-RAC-05.json, generada con generar.py; la ficha de la épica es trazabilidad/features/FT-RAC-05-estatus-motivos-seller-proveedor.md.

En 30 segundos

Hoy el seller y el proveedor dependen de alguien que les explique en qué va su producto, qué les falta o por qué se rechazó. Esta épica les da una vista propia: la etiqueta de su producto, en qué paso va, qué quedó a medias, los motivos de rechazo por campo y, por SKU, por qué no se creó o no se ve en la tienda. Producto la calcula con una sola tabla; el portal y la API de terceros sólo la muestran.

  • Módulo dueño: MS-02 Producto. También participan: MS-01 Catálogo, MS-14 Avisos y ayuda.
  • Etapa T · Transversal. Recibe «PE-T · Usuario con permisos y bitácora» y entrega a otras épicas.
  • APIs: construye 10 y usa 7 que construyen otras épicas.
  • Eventos: publica 3 y consume 3.

1. Dónde encaja

Recibe

DeQué
FT-FLU-01 · Motor de estados configurable con dos carreteras y reglas…El estado, las tareas abiertas y el origen de cada rechazo, de donde sale la etiqueta.
PE-T · Usuario con permisos y bitácoraQuien consulta ya se identificó y sólo ve sus productos.
FT-ACT-06 · Recepción del trabajo de Foro y control de edición…La marca de que el estudio enriqueció el producto, para que el proveedor vea «En proceso Liverpool» si QA lo regresa al estudio.
FT-FLU-02 · Alta individual de MarketplaceEn qué paso del alta va cada propuesta de Marketplace, para el estatus que ve el seller.

Entrega

AQué
FT-PRD-06 · Bandeja de pendientes y depuración de borradores…La etiqueta y el paso en que quedó cada producto, para la bandeja de pendientes.
FT-IA-06 · Asistente conversacional para que el seller reporte erroresEl estatus y los motivos sobre los que el asistente ayuda al seller a reportar un error.
FT-INT-06 · Avisos de cambios a Entrada Única y consumidoresLa tabla de etiquetas con su código de P360, para que el aviso a Entrada Única diga lo mismo que el portal.

Tareas que abre o cierra: Corrección, Carga de imagen.

2. Diagrama de contexto

Quién participa y cómo se conecta. Las pantallas llegan por el BFF del portal, que valida el token y compone; cada módulo vuelve a validar el token y decide sus permisos con los roles de MS-13.

🟩 Verde: nuevo, se construye · 🟦 Azul: ya existe y se queda, se reutiliza su código · 🟧 Naranja: temporal o se retira (se apaga en R3) · ⬜ Gris: sistema externo · ★ módulo dueño

Sistemas externos

Nuevo PIM · un solo sistema

Pantallas y sistemas

Personas

Estatus visible para el proveedor o s…
Motivos de rechazo
y 5 más

Vista efectiva de una plantilla por n…

REJECTION_ADDED
STATUS_CHANGED
y 1 más

STATUS_CHANGED

Manda el correo si el proveedor lo pi…

Mis avisos en pantalla

Seller

Proveedor

Administración del catálogo

Entrada Única · Vendor Center

BFF del portal

★ MS-02 Producto

MS-01 Catálogo

MS-14 Avisos y ayuda

Base pim

Eventos

Servicio de correo

Contexto de FT-RAC-05

3. Diagrama de flujo

El camino principal, paso por paso. Cuando una pantalla llama a un módulo se ven dos flechas: la pantalla al BFF y el BFF al módulo. Los eventos salen del outbox del módulo después de guardar; quien los consume ignora los repetidos.

MS-01 CatálogoBase·pimMS-02 ProductoEntrada Única · Vendor CenterMS-01 CatálogoBase·pimMS-02 ProductoEntrada Única · Vendor CenterSellerBFF1. Abre la lista de sus productos2. Pide el estatus visible de sus productosGET /api/v2/workflow/status-views3. Lee estado, tareas abiertas, rechazos y canales4. Lee los pasos y obligatorios de cada plantillaGET /api/v2/taxonomies/PRODUCT/nodes/{id}/effective5. Traduce estado y tarea a la etiqueta de la tabla6. Abre un producto que dice «Rechazada»7. Pide los motivos de rechazo por campoGET /api/v2/workflow/comments?productIds=8. Pide el estado de cada canalGET /api/v2/delivery-status?productId=&sku=9. Ve el paso incompleto, el motivo y qué hacerSellerBFF
Flujo principal de FT-RAC-05
Los pasos en texto
PasoDeAQué haceAPI o evento
1SellerEntrada Única · Vendor CenterAbre la lista de sus productos—
2Entrada Única · Vendor CenterMS-02 Producto (por el BFF)Pide el estatus visible de sus productosAPI-02-302
3MS-02 ProductoBase pimLee estado, tareas abiertas, rechazos y canales—
4MS-02 ProductoMS-01 CatálogoLee los pasos y obligatorios de cada plantillaAPI-01-028
5MS-02 ProductoBase pimTraduce estado y tarea a la etiqueta de la tabla—
6SellerEntrada Única · Vendor CenterAbre un producto que dice «Rechazada»—
7Entrada Única · Vendor CenterMS-02 Producto (por el BFF)Pide los motivos de rechazo por campoAPI-02-029
8Entrada Única · Vendor CenterMS-02 Producto (por el BFF)Pide el estado de cada canalAPI-02-042
9SellerEntrada Única · Vendor CenterVe el paso incompleto, el motivo y qué hacer—

3.1 Por qué un SKU no se creó o no se ve, por negocio

Base·pimMS-02 ProductoEntrada Única · Vendor CenterBase·pimMS-02 ProductoEntrada Única · Vendor CenterProveedorBFF1. Busca un SKU que no aparece en la tienda2. Pide los motivos del SKU por negocioGET /api/v2/workflow/sku-blockers3. Junta error de SAP, dato faltante y compuertas del canal4. Ve «Sin imagen principal» en Liverpool y el error 141 en Suburbia5. Sube la imagen, el error de SAP queda con Gobierno de DatosProveedorBFF
Por qué un SKU no se creó o no se ve, por negocio

3.2 Los cuatro avisos al proveedor

Entrada Única · Vendor CenterServicio de correoMS-14 Avisos y ayudaEventosMS-02 ProductoEntrada Única · Vendor CenterServicio de correoMS-14 Avisos y ayudaEventosMS-02 ProductoBFF1. Avisa un rechazo con su motivo por campoREJECTION_ADDED2. Avisa una cancelación o una eliminaciónSTATUS_CHANGED3. Avisa que se abrió Carga de imagenTASK_CHANGED4. Avisa que un canal quedó PublicadoSTATUS_CHANGED5. Entrega cada aviso con su etiqueta y su motivoSTATUS_CHANGED6. Manda el correo si el proveedor lo pidió así7. Muestra sus avisos sin leer en el portalGET /api/v2/notifications?unread=BFF
Los cuatro avisos al proveedor

3.3 Gobierno de Producto ajusta una etiqueta

Base·pimMS-02 ProductoEntrada Única · Vendor CenterBase·pimMS-02 ProductoEntrada Única · Vendor CenterAdministración del catálogoBFF1. Abre la tabla de etiquetas que ve el proveedor2. Lee la tabla vigente con su código de P360GET /api/v2/workflow/config/{type}3. Pide el plan del cambio de una etiquetaPOST /api/v2/workflow/config/{type}/plans4. Confirma la versión nueva de la tablaPOST /api/v2/product-plans/{planId}/apply5. Guarda la versión nueva y conserva la anteriorAdministración del catálogoBFF
Gobierno de Producto ajusta una etiqueta

4. Si algo sale mal

  • Un producto tiene varias tareas abiertas a la vez. Gana la que pide algo al proveedor: Corrección, luego Carga de imagen, luego En proceso Liverpool y luego En revisión. La etiqueta nunca sale vacía: si ninguna regla aplica, se muestra la del estado y el caso queda en el registro para revisar la tabla.
  • QA rechaza un producto que enriqueció Foro. La Corrección va a Foro, no al proveedor, y el proveedor ve «En proceso Liverpool»; si el que enriqueció fue el proveedor, ve «Rechazada» con el motivo por campo. La regla deja de vivir en Entrada Única y queda en la tabla.
  • SAP devuelve un error al crear el SKU. El mensaje del programa 141 (hasta 220 caracteres) se guarda en el producto y aparece en los motivos del SKU por negocio, con Gobierno de Datos como quien lo corrige. El proveedor ve «En revisión» mientras tanto.
  • El correo no llega. El aviso queda en la pantalla de avisos (MS-14) y la etiqueta en el portal ya cambió, así que el proveedor se entera al entrar aunque falle el correo.

5. APIs

Las que construye esta épica (10)

GET /api/v2/workflow/status-views · Estatus visible para el proveedor o seller
CampoValor
APIAPI-02-302 · MS-02 Producto
Para quéCalcula, por producto, lo que ve el proveedor o seller: la etiqueta de la tabla, en qué paso va y cuáles están completos o a medias, qué le toca hacer y para cuándo, cuántos motivos tiene abiertos y el resumen por canal. El portal (por el BFF) y la API de terceros sólo lo muestran.
En esta épicaLo que ve el proveedor por producto: etiqueta, pasos, qué le toca y resumen por canal
Quién la llamaBFF del portal, Gateway de terceros /partner/v1
PermisoEl proveedor o seller dueño de los productos; las áreas internas con lectura
CabecerasAuthorization, X-Request-Id
ParámetrosproductIds = PRD-0004812, status = `, page = 1, size = 50`
También la usanFT-ACT-06, FT-IA-06, FT-PRD-06

Request

null

Response · 200

{
  "success": true,
  "data": {
    "items": [
      {
        "productId": "PRD-0004812",
        "business": "MKP",
        "status": "EN_ENRIQUECIMIENTO",
        "openTasks": [
          "CORRECCION"
        ],
        "label": "Rechazada",
        "p360Code": "1028",
        "labelRule": "EN_ENRIQUECIMIENTO+CORRECCION(QA→PROVEEDOR)",
        "steps": [
          {
            "step": 1,
            "name": "Datos básicos",
            "complete": true
          },
          {
            "step": 2,
            "name": "Atributos",
            "complete": false,
            "missing": [
              "MATERIAL",
              "CAPACIDAD"
            ]
          },
          {
            "step": 3,
            "name": "Datos logísticos",
            "complete": true
          },
          {
            "step": 4,
            "name": "Variantes",
            "complete": true
          },
          {
            "step": 5,
            "name": "Imágenes y documentos",
            "complete": true
          }
        ],
        "nextAction": {
          "code": "CORREGIR",
          "text": "Corrige los 2 campos que rechazó QA",
          "dueAt": "2026-12-17T15:04:05Z"
        },
        "openReasons": 2,
        "channels": {
          "total": 2,
          "published": 0,
          "summary": "Sin publicar"
        },
        "updatedAt": "2026-10-18T15:04:07Z"
      }
    ],
    "page": 1,
    "size": 50,
    "total": 1
  }
}

Errores

HTTPCódigoCuándo
400VALIDATION_ERRORSe piden más de 100 productos o un filtro que no existe
404NOT_FOUNDAlgún producto no existe o no es de quien llama
GET /api/v2/workflow/sku-blockers · Por qué un SKU no se creó o no se ve
CampoValor
APIAPI-02-303 · MS-02 Producto
Para quéDice, por SKU y por negocio, qué detiene su creación o su publicación: el error que devolvió SAP, el dato que falta, la compuerta del canal que no pasa o el canal en error, con quién lo corrige.
En esta épicaPor qué un SKU no se creó o no se ve, por negocio
Quién la llamaBFF del portal, Gateway de terceros /partner/v1
PermisoEl proveedor o seller dueño del SKU; Gobierno de Datos y las áreas internas con lectura
CabecerasAuthorization, X-Request-Id
Parámetrossku = 1000004812, business = MER,SUB
También la usanFT-PRD-02, FT-RAC-03

Request

null

Response · 200

{
  "success": true,
  "data": {
    "sku": "1000004812",
    "productId": "PRD-0004812",
    "items": [
      {
        "business": "MER",
        "stage": "PUBLICACION",
        "channel": "TIENDA",
        "code": "SIN_IMAGEN_PRINCIPAL",
        "message": "Sin imagen principal congelada",
        "fixedBy": "PROVEEDOR",
        "since": "2026-10-12T10:00:00Z"
      },
      {
        "business": "MER",
        "stage": "CREACION_SKU",
        "code": "FALTA_DATO",
        "message": "Falta el número de proveedor",
        "fixedBy": "GOBIERNO_DE_DATOS",
        "since": "2026-10-11T08:30:00Z"
      },
      {
        "business": "SUB",
        "stage": "CREACION_SKU",
        "code": "ERROR_SAP",
        "message": "Grupo de artículos no válido para la sociedad",
        "source": "Programa 141 de SAP (hasta 220 caracteres)",
        "fixedBy": "GOBIERNO_DE_DATOS",
        "since": "2026-10-11T08:31:00Z"
      }
    ]
  }
}

Errores

HTTPCódigoCuándo
404NOT_FOUNDEl SKU no existe o no es de quien llama
GET /api/v2/notifications?unread= · Mis avisos en pantalla
CampoValor
APIAPI-14-001 · MS-14 Avisos y ayuda
Para quéLa campana del portal y del estudio: los avisos de quien llama, los más nuevos primero, con el producto o la tarea a la que llevan y si ya los leyó. MS-14 los genera al consumir eventos (rechazos, cambios de estado, tareas, imágenes rechazadas, cargas terminadas) o cuando un módulo le pide un aviso explícito.
En esta épicaLos avisos en pantalla del proveedor
Quién la llamaBFF del portal
PermisoCualquier usuario autenticado; sólo ve sus avisos y los de sus áreas
CabecerasAuthorization, X-Request-Id
Parámetrosunread = true, page = 1, size = 20
También la usanFT-ACT-06, FT-PRD-10

Request

null

Response · 200

{
  "success": true,
  "data": {
    "items": [
      {
        "notificationId": "ntf-81c2",
        "type": "IMAGE_REJECTED",
        "title": "Una imagen de tu producto fue rechazada",
        "text": "Detalle 2 de PRD-0004812: se ve un logotipo. Sube otra para seguir.",
        "productId": "PRD-0004812",
        "link": {
          "screen": "carga-de-imagen",
          "productId": "PRD-0004812"
        },
        "channel": "IN_APP",
        "createdAt": "2026-10-18T17:20:05Z",
        "readAt": null
      },
      {
        "notificationId": "ntf-81c3",
        "type": "TASK_AGING",
        "title": "Tienes un cambio de plantilla esperando",
        "text": "PRD-0004812 lleva 7 días en tu bandeja: Foro sugiere la plantilla EU4-0415.",
        "productId": "PRD-0004812",
        "link": {
          "screen": "bandeja",
          "taskId": "tsk-40211"
        },
        "channel": "IN_APP",
        "createdAt": "2026-10-25T14:00:00Z",
        "readAt": null
      }
    ],
    "unreadCount": 2,
    "page": 1,
    "size": 20,
    "total": 2
  }
}

Errores

HTTPCódigoCuándo
400VALIDATION_ERRORUn filtro trae un valor que no existe
POST /api/v2/notifications/read · Marcar avisos como leídos
CampoValor
APIAPI-14-002 · MS-14 Avisos y ayuda
Para quéMarca como leídos unos avisos o todos los anteriores a una fecha.
En esta épicaLa construye esta épica: marca como leídos unos avisos o todos los anteriores a una fecha
Quién la llamaBFF del portal
PermisoEl dueño de los avisos
CabecerasAuthorization, X-Request-Id, Idempotency-Key
Escribe ennotifications
También la usanFT-ACT-06

Request

{
  "notificationIds": [
    "ntf-81c2",
    "ntf-81c3"
  ]
}

Response · 200

{
  "success": true,
  "data": {
    "updated": 2,
    "unreadCount": 0
  }
}

Errores

HTTPCódigoCuándo
404NOT_FOUNDAlgún aviso no existe o no es de quien llama
GET /api/v2/notifications/preferences · Mis preferencias de avisos
CampoValor
APIAPI-14-003 · MS-14 Avisos y ayuda
Para quéQué avisos existen para el perfil de quien llama, por qué canal los recibe (pantalla, correo) y con qué frecuencia (al momento o en un resumen diario). Los avisos obligatorios, como un rechazo o un plazo por vencer, no se pueden apagar.
En esta épicaLa construye esta épica: qué avisos existen para el perfil de quien llama, por qué canal los recibe (pantalla, correo) y con qué frecuencia (al momento o en un resumen diario). Los avisos obligatorios, como un rechazo o un plazo por vencer, no se pueden apagar
Quién la llamaBFF del portal
PermisoCualquier usuario autenticado, sobre sus propias preferencias
CabecerasAuthorization, X-Request-Id
También la usanFT-ACT-02

Request

null

Response · 200

{
  "success": true,
  "data": {
    "version": 4,
    "items": [
      {
        "type": "PRODUCT_REJECTED",
        "label": "Rechazo de una propuesta o producto",
        "channels": {
          "IN_APP": true,
          "EMAIL": true
        },
        "frequency": "IMMEDIATE",
        "mandatory": true
      },
      {
        "type": "IMAGE_REJECTED",
        "label": "Imagen rechazada",
        "channels": {
          "IN_APP": true,
          "EMAIL": true
        },
        "frequency": "IMMEDIATE",
        "mandatory": true
      },
      {
        "type": "TASK_REMINDER",
        "label": "Recordatorio de tarea pendiente",
        "channels": {
          "IN_APP": true,
          "EMAIL": false
        },
        "frequency": "DAILY_DIGEST",
        "mandatory": false
      },
      {
        "type": "ASSET_JOB_FINISHED",
        "label": "Terminó una carga masiva de imágenes",
        "channels": {
          "IN_APP": true,
          "EMAIL": true
        },
        "frequency": "IMMEDIATE",
        "mandatory": false
      }
    ]
  }
}

Errores

HTTPCódigoCuándo
403AUTHORIZATION_ERRORSe piden las preferencias de otra persona
PUT /api/v2/notifications/preferences · Cambiar mis preferencias de avisos
CampoValor
APIAPI-14-004 · MS-14 Avisos y ayuda
Para quéCambia por qué canal y con qué frecuencia recibe cada aviso quien llama. Se guardan como el documento de ajustes de esa persona en notifications, contra la versión que se leyó.
En esta épicaLa construye esta épica: cambia por qué canal y con qué frecuencia recibe cada aviso quien llama. Se guardan como el documento de ajustes de esa persona en notifications, contra la versión que se leyó
Quién la llamaBFF del portal
PermisoCualquier usuario autenticado, sobre sus propias preferencias
CabecerasAuthorization, X-Request-Id, Idempotency-Key, If-Match
Escribe ennotifications
También la usanFT-PRD-10

Request

{
  "version": 4,
  "items": [
    {
      "type": "TASK_REMINDER",
      "channels": {
        "IN_APP": true,
        "EMAIL": true
      },
      "frequency": "DAILY_DIGEST"
    }
  ]
}

Response · 200

{
  "success": true,
  "data": {
    "version": 5,
    "changed": 1
  }
}

Errores

HTTPCódigoCuándo
409VERSION_CONFLICTLas preferencias cambiaron desde que se leyeron
422VALIDATION_ERRORSe intenta apagar un aviso obligatorio o el tipo no existe
POST /internal/notifications/messages · Mandar un aviso explícito
CampoValor
APIAPI-14-005 · MS-14 Avisos y ayuda
Para quéUn módulo pide un aviso que no sale de un evento: un recordatorio de plazo, la antigüedad de una tarea, un reporte listo o una invitación. MS-14 resuelve a quién le llega (usuario, área, proveedor o seller) con el directorio de MS-13, respeta sus preferencias, lo deja en pantalla y manda el correo por el servicio de correo. Con la misma llave de duplicado no repite el aviso.
En esta épicaLa construye esta épica: un módulo pide un aviso que no sale de un evento: un recordatorio de plazo, la antigüedad de una tarea, un reporte listo o una invitación. MS-14 resuelve a quién le llega (usuario, área, proveedor o seller) con el directorio de MS-13, respeta sus preferencias, lo deja en pantalla y manda el correo por el servicio de correo. Con la misma llave de duplicado no repite el aviso
Quién la llamaMS-02 Producto, MS-04 Reportes, MS-12 Estudio fotográfico, MS-13 Identidad y acceso
PermisoSólo módulos internos (cuenta de servicio)
CabecerasAuthorization, X-Request-Id, Idempotency-Key
Escribe ennotifications
También la usanFT-ACT-06, FT-CAT-05, FT-FLU-04, FT-PLT-01, FT-PLT-03, FT-PLT-09, FT-PRD-03, FT-PRD-04, FT-PRD-06, FT-PRD-08, FT-PRD-10, FT-RAC-04, FT-RAC-07, FT-RAC-08, FT-USR-03

Request

{
  "type": "TASK_AGING",
  "dedupKey": "tsk-40211-2026-10-25",
  "recipients": [
    {
      "kind": "TASK_OWNER",
      "taskId": "tsk-40211"
    }
  ],
  "channels": [
    "IN_APP",
    "EMAIL"
  ],
  "params": {
    "productId": "PRD-0004812",
    "ageDays": 7,
    "suggestedTemplate": "EU4-0415"
  }
}

Response · 202

{
  "success": true,
  "data": {
    "messageId": "msg-5e21",
    "status": "ACCEPTED",
    "recipients": 1
  }
}

Errores

HTTPCódigoCuándo
422VALIDATION_ERROREl tipo de aviso no existe o le falta un dato de su plantilla
409IDEMPOTENCY_MISMATCHSe repite la llave con otro contenido
503DEPENDENCY_UNAVAILABLEEl directorio no responde; el aviso queda en cola y se reintenta
GET /api/v2/help/articles?q=&screen= · Buscar ayuda
CampoValor
APIAPI-14-006 · MS-14 Avisos y ayuda
Para quéBusca artículos del centro de ayuda por texto o por la pantalla en la que está la persona (por ejemplo, cómo deben ser las fotos en la carga de imagen), filtrados por su perfil.
En esta épicaLa construye esta épica: busca artículos del centro de ayuda por texto o por la pantalla en la que está la persona (por ejemplo, cómo deben ser las fotos en la carga de imagen), filtrados por su perfil
Quién la llamaBFF del portal
PermisoCualquier usuario autenticado
CabecerasAuthorization, X-Request-Id
Parámetrosq = fotos, screen = carga-de-imagen, page = 1, size = 10
También la usanFT-ACT-02

Request

null

Response · 200

{
  "success": true,
  "data": {
    "items": [
      {
        "articleId": "hlp-0031",
        "title": "Cómo deben ser tus fotos",
        "screens": [
          "carga-de-imagen"
        ],
        "summary": "Medidas, peso, fondo y nombres de cada tipo de imagen.",
        "updatedAt": "2026-10-10T12:00:00Z"
      }
    ],
    "page": 1,
    "size": 10,
    "total": 1
  }
}

Errores

HTTPCódigoCuándo
400VALIDATION_ERRORLa búsqueda viene vacía y no se dio una pantalla
GET /api/v2/help/articles/{articleId} · Leer un artículo de ayuda
CampoValor
APIAPI-14-007 · MS-14 Avisos y ayuda
Para quéEl contenido completo de un artículo de ayuda, con las pantallas a las que aplica y para qué perfiles es.
En esta épicaLa construye esta épica: el contenido completo de un artículo de ayuda, con las pantallas a las que aplica y para qué perfiles es
Quién la llamaBFF del portal
PermisoCualquier usuario autenticado del perfil al que va dirigido
CabecerasAuthorization, X-Request-Id
ParámetrosarticleId = hlp-0031
También la usanFT-ACT-02

Request

null

Response · 200

{
  "success": true,
  "data": {
    "articleId": "hlp-0031",
    "title": "Cómo deben ser tus fotos",
    "audience": [
      "PROVEEDOR",
      "SELLER"
    ],
    "screens": [
      "carga-de-imagen"
    ],
    "body": "La principal mide 940 × 1215 px, a 72 DPI, en JPG y pesa hasta 1 MB. Se llama como el SKU…",
    "version": 3,
    "updatedAt": "2026-10-10T12:00:00Z"
  }
}

Errores

HTTPCódigoCuándo
404NOT_FOUNDEl artículo no existe o no es para el perfil de quien llama
PUT /api/v2/help/articles/{articleId} · Escribir un artículo de ayuda
CampoValor
APIAPI-14-008 · MS-14 Avisos y ayuda
Para quéDa de alta o cambia un artículo del centro de ayuda contra la versión que se leyó.
En esta épicaLa construye esta épica: da de alta o cambia un artículo del centro de ayuda contra la versión que se leyó
Quién la llamaBFF del portal
PermisoGobierno de Producto o administración del centro de ayuda
CabecerasAuthorization, X-Request-Id, Idempotency-Key, If-Match
ParámetrosarticleId = hlp-0031
Escribe enhelp_articles
También la usanFT-ACT-01

Request

{
  "version": 3,
  "title": "Cómo deben ser tus fotos",
  "audience": [
    "PROVEEDOR",
    "SELLER"
  ],
  "screens": [
    "carga-de-imagen"
  ],
  "body": "La principal mide 940 × 1215 px, a 72 DPI, en JPG y pesa hasta 1 MB…"
}

Response · 200

{
  "success": true,
  "data": {
    "articleId": "hlp-0031",
    "version": 4
  }
}

Errores

HTTPCódigoCuándo
409VERSION_CONFLICTOtra persona cambió el artículo desde que se leyó
422VALIDATION_ERRORFalta el título o la pantalla no existe

Las que usa y construye otra épica (7)

Su request y su response están en la página de la épica que la construye.

APIMétodo y rutaPara qué, aquíLa construye
API-02-029GET /api/v2/workflow/comments?productIds=Motivos de rechazo por campo, con quién rechazó y a quién le toca corregirFT-PRD-04 · Propuesta del proveedor de Mercaderías
API-02-042GET /api/v2/delivery-status?productId=&sku=Estado de cada canal del producto (lo construye FT-CAT-05)FT-CAT-05 · Sitios, enrutamiento y visibilidad por negocio
API-01-028GET /api/v2/taxonomies/PRODUCT/nodes/{id}/effectivePasos y obligatorios de la plantilla, para saber qué quedó a mediasFT-PLT-06 · Configuración de atributos por plantilla y por negocio…
API-02-026GET /api/v2/workflow/statusesCatálogo de etiquetas con su código de P360 equivalenteFT-FLU-01 · Motor de estados configurable con dos carreteras y reglas…
API-02-030GET /api/v2/workflow/config/{type}Leer la tabla SUPPLIER_LABELSFT-FLU-01 · Motor de estados configurable con dos carreteras y reglas…
API-02-031POST /api/v2/workflow/config/{type}/plansCambiar una etiqueta de la tabla con vista previaFT-FLU-01 · Motor de estados configurable con dos carreteras y reglas…
API-02-057POST /api/v2/product-plans/{planId}/applyConfirmar el cambio de la tablaFT-FLU-01 · Motor de estados configurable con dos carreteras y reglas…

6. Eventos

Publica

EventoCuándoQuién lo consume
catalog.product.changed/STATUS_CHANGEDCambia el estado o un canal pasa a Publicado; el cuerpo lleva la etiqueta visible y el dueño del productoFT-ACT-05, FT-ARQ-02, FT-CAT-05, FT-FLU-01, FT-IA-04, FT-PRD-02, FT-PRD-04, FT-PRD-06, FT-PRD-10, FT-RAC-03, FT-RAC-06
catalog.product.changed/TASK_CHANGEDSe abre una tarea que le toca al proveedor, como Carga de imagenFT-ACT-05, FT-ACT-06, FT-ARQ-02, FT-CAT-06, FT-FLU-01, FT-IA-06, FT-PRD-02, FT-PRD-05, FT-PRD-06, FT-PRD-07, FT-PRD-08, FT-RAC-02, FT-RAC-03, FT-RAC-04, FT-RAC-06
catalog.product.changed/REJECTION_ADDEDUn revisor rechaza con motivo por campoFT-INT-07, FT-PRD-04, FT-PRD-05, FT-PRD-10, FT-RAC-01, FT-RAC-03, FT-RAC-06

Consume

EventoPara quéQuién lo publica
catalog.product.changed/STATUS_CHANGEDMS-14 avisa «cancelada», «eliminada» o «publicada» con la etiqueta que trae el eventoesta misma épica
catalog.product.changed/TASK_CHANGEDMS-14 avisa que falta la fotoesta misma épica
catalog.product.changed/REJECTION_ADDEDMS-14 avisa el rechazo con su motivoesta misma épica

7. Datos

Cada colección tiene un solo dueño, el único que escribe en ella.

ColecciónDueñoQué guardaEsta épica
product_reference_tablesMS-02Configuración del motor de estados y del matching: transiciones, estados externos y pesos.escribe
product_receiptsMS-02El recibo de cada escritura confirmada en el producto (antes operation_receipts).escribe
product_outboxMS-02Los cambios del producto que esperan salir como evento (antes outbox).escribe
productsMS-02La familia del producto con sus variantes, valores, imágenes (URL), clasificaciones, estado, tareas abiertas y rechazos.lee
tasksMS-02Todo el trabajo asignado: visto bueno, corrección, Gobierno de Datos, foto, secciones, QA, revisión del cambio y repoblamiento.lee
product_delivery_statusMS-02El estado de publicación por producto y canal: Pendiente, Enviado, Publicado, Error o Retirado.lee
product_reference_tablesMS-02Configuración del motor de estados y del matching: transiciones, estados externos y pesos.lee

8. Historias que cubre

HistoriaPrioridadCómo la cubre
FT-RAC-05·H1 · Ver en qué paso está cada producto y qué quedó a mediasP1pasos 2, 3, 4, 5, 9; API-02-302
FT-RAC-05·H2 · Ver los motivos de rechazo por atributoP1pasos 6, 7; API-02-029
FT-RAC-05·H3 · Consultar por SKU por qué no se creó o no es visible, por negocioP1flujo «Por qué un SKU no se creó o no se ve, por negocio»; API-02-303
FT-RAC-05·H4 · Saber por qué un producto aprobado no se publicó o no es visibleP2flujo «Por qué un SKU no se creó o no se ve, por negocio»; API-02-303, API-02-042
FT-RAC-05·H5 · Ver tras la creación del SKU el mismo estatus que vería en LiverpoolP2pasos 5; API-02-302
FT-RAC-05·H6 · Enterarme del cambio de estatus sin entrar a buscarloP3flujo «Los cuatro avisos al proveedor»; API-14-001
FT-RAC-05·H7 · Cuatro avisos al proveedorP1flujo «Los cuatro avisos al proveedor»

9. Decisiones de esta épica

Las tomó el TL como arquitecto; quedan como [Propuesta] hasta que el equipo de la épica las revise.

  • D-RAC-05-1. Lo que ve el proveedor sale de una sola tabla en MS-02 (SUPPLIER_LABELS): estado más tarea abierta más origen dan la etiqueta y su código de P360, con el orden de precedencia de la máquina de estados (Corrección, Carga de imagen, En proceso Liverpool, En revisión). El portal, por el BFF, y la API de terceros la muestran tal cual. Nunca sale vacía: por omisión vale la del estado. Por qué: Hoy el externo se deduce de una tabla de P360 y Entrada Única lo corrige por su cuenta: hay más de 114 mil productos con estatus nulo y casi 17 mil «Status Desconocido». Una sola tabla y un solo cálculo lo evitan. Se apoya en PD-29, ADR-12, RF-REP-01.
  • D-RAC-05-2. «En proceso Liverpool» o «Rechazada» depende de a quién va la Corrección: si QA rechaza lo que enriqueció Foro, la Corrección va a Foro y el proveedor ve «En proceso Liverpool»; si va al proveedor, ve «Rechazada» con el motivo por campo. Por qué: Es la regla que hoy aplica Entrada Única con el previo; en el modelo B el destino del rechazo ya viaja en la tarea, así que no hace falta el estado previo. Se apoya en PD-29.
  • D-RAC-05-3. Suburbia y Liverpool ven la misma etiqueta después del 122, porque la etiqueta depende del estado y de la tarea, no del negocio ni del sistema de SAP que respondió. Por qué: Hoy en S4H el estatus se calcula antes de asignar el negocio; aquí se corrige sin replicar el defecto. Se apoya en PD-01, DEC-ARQ-12.
  • D-RAC-05-4. Los motivos por SKU salen de un solo endpoint de MS-02 (API-02-303) con datos que ya son de Producto: el error 141 que guarda la creación del SKU, el dato maestro que falta por negocio, la compuerta del canal que no pasa y el canal en Error. La visibilidad real en el sitio se agrega cuando el monitoreo de FT-RAC-08 la mida. Por qué: El servicio de motivos que Entrada Única liberó el 23-sep resolvió el caso de los SKU que no se creaban; aquí queda en el dueño del dato, sin copias. Se apoya en RF-PUB-09, PD-09.
  • D-RAC-05-5. Los eventos de estado y de tarea llevan la etiqueta visible y el dueño del producto, para que Avisos (MS-14) y los reportes no la recalculen. El paso de un canal a Publicado sale como STATUS_CHANGED con el cambio en channels.<destino>.status; no hace falta un tipo nuevo. Por qué: Un solo cálculo de la etiqueta; el sobre del evento ya permite decir qué ruta cambió. Se apoya en ADR-12, DMS-08.
  • D-RAC-05-6. Arrancan cuatro avisos al proveedor y al seller (rechazo, cancelación o eliminación, falta de foto y publicado) en pantalla y por correo según sus preferencias en MS-14. Los avisos a cada dueño de sección se suman cuando se confirme ese reparto. Por qué: Es la propuesta del tablero para el pendiente de avisos y responde la duda de canal: las dos, a elección del usuario. Se apoya en P-02, PEN-17, P-22.

Qué falta decidir

IDQué falta
DUD-09Sin ERF de Flujos no hay nombres oficiales de los pasos para Marketplace; aquí se usan los cinco pasos de la captura.
P-02Gobierno de Producto confirma los cuatro avisos de arranque y cuándo se suman los de cada dueño de sección.
PD-09De dónde se obtiene la visibilidad real en el sitio para decir «no se ve» con certeza.
DUD-25El aviso de estatus al seller por la API de Marketplace (hoy cada 5 minutos por el bus, sin llave): se reemplaza por la misma etiqueta de API-02-302.

También siguen abiertos: PEN-17, Validar con UX y Marketplace que pantalla más correo, a elección del usuario, resuelve cómo se entera el seller.

Fuentes

  1. [D] trazabilidad/features/FT-RAC-05-estatus-motivos-seller-proveedor.md: la ficha de la épica, con sus historias, reglas y bloqueos.
  2. [D] ADR-12 · Un solo sistema: backend compartido y una sola base (sección 3.4).
  3. [D] docs/arquitectura/por-epica/base/: piezas, colecciones, eventos y el hilo de punta a punta.
  4. [D] docs/arquitectura/omega-a-pim-headless/contratos-api.md: convenciones y endpoints de partida.
  5. [D] docs/arquitectura/maquina-de-estados-to-be/propuesta-maquina-de-estados.md §7: estados, tareas y canales.
  6. [I] Las decisiones de la sección 9 son del TL sobre esas fuentes.