← Arquitectura por épica

FT-PRD-02 · Creación de SKU con SAP

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-PRD-02: 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-PRD-02.json, generada con generar.py; la ficha de la épica es trazabilidad/features/FT-PRD-02-creacion-sku-sap-interfaz-122.md.

En 30 segundos

Cuando una propuesta tiene visto bueno, hay que pedirle a SAP que cree el artículo y esperar el SKU (el número con el que se vende) y el EAN (el código de barras). Esta épica hace ese tramo igual para los tres negocios y para cualquier origen: arma los cuatro archivos que lee SAP, recibe la respuesta 122, asigna los códigos a cada variante y, si SAP rechaza (archivo 141), deja el error visible y lo turna a Gobierno de Datos.

  • Módulo dueño: MS-02 Producto. También participan: MS-01 Catálogo, MS-07 Ingesta de archivos, MS-08 Adaptadores de salida, MS-14 Avisos y ayuda, MS-05 Auditoría.
  • Etapa 5 · SKU en SAP. Recibe «PE-5 · Visto bueno dado», «PE-C · Catálogo vigente» y entrega «PE-6 · SKU asignado».
  • APIs: construye 5 y usa 10 que construyen otras épicas.
  • Eventos: publica 6 y consume 6.

1. Dónde encaja

Recibe

DeQué
PE-5 · Visto bueno dadoLa propuesta en Creación de SKU, con la tarea SKU en SAP abierta y SAP_CREATION_REQUESTED en el tópico, con el mismo contenido para los tres negocios.
FT-PRD-04 · Propuesta del proveedor de MercaderíasLa petición de crear el artículo en SAP cuando Compras da el visto bueno (Mercaderías).
FT-RAC-01 · Motor de validación en línea y candados de datos…Los candados SKU y SAP ya revisados antes de pedir el artículo: número de proveedor, grupo de artículos, imagen principal, descripción y datos logísticos.
FT-PRD-01 · Modelo canónico de productoLas variantes con identificador propio, listas para recibir el SKU de SAP, que después nadie cambia.
FT-PRD-03 · EANEl registro de identificadores donde se confirma, con unicidad por negocio, el EAN que asigna SAP en el 122.
FT-INT-03 · Entrada de SKUs creados en SAPLos registros del 122 que leyó MS-07, ya filtrados por las reglas de exclusión, en lotes de hasta 100.
PE-C · Catálogo vigenteLa vista efectiva de la plantilla con el grupo «Mínimo SAP» de cada negocio y los catálogos de SAP vigentes (grupos de artículo, marcas y proveedores).
FT-CAT-04 · Clasificación SAP derivadaGrupo de artículos de ECC y S/4HANA, sección y dirección validados en el producto, obligatorios para pedir el SKU.
FT-INT-04 · Catálogos maestros, precios y costos desde SAP/S4HProveedor, grupo de artículos, impuesto, precio y costo vigentes para armar los 4 TXT de alta en SAP.
FT-PLT-07 · Reglas de atributosLos datos maestros derivados (envase, talla hacia SAP, impuesto) ya guardados en el producto, que viajan en los 4 TXT.
FT-PRD-05 · Edición y aprobación por campo según el dueño del datoLa variante nueva o el dato de SAP que cambió, para pedirlo a SAP con SAP_CREATION_REQUESTED de tipo MODIFY.
FT-RAC-02 · Score de calidad del productoLa petición de crear el artículo en SAP para la propuesta de Marketplace.

Entrega

AQué
PE-6 · SKU asignadoLa familia en En enriquecimiento: cada variante con su SKU y su EAN de SAP, y abiertas en paralelo las tareas de foto (Foro o Carga de imagen), secciones con dueño y, si el negocio lo pide, Gobierno de Datos.
FT-INT-06 · Avisos de cambios a Entrada Única y consumidoresCada SKU y EAN asignado y cada error de SAP, para el aviso de convivencia a los backends de Entrada Única y de Foro.
FT-INT-05 · Multioferta y stock outEl SKU del producto existente, sin el cual ningún seller puede ofertar.
FT-INT-03 · Entrada de SKUs creados en SAPEl resultado de cada registro del 122 (aplicado, creado o rechazado) para la conciliación de SKU.

Cambios de estado que hace

TransiciónDe → aCuándo
T06Creación de SKU → En enriquecimientoSAP crea el artículo (archivo 122).
T07Creación de SKU → En revisiónGobierno de Datos lo regresa a Compras.
T13Creación de SKU → CanceladoCancelación.

Tareas que abre o cierra: SKU en SAP, Gobierno de Datos, Corrección.

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

SAP_CREATION_REQUESTED

Datos para los archivos de SAP

Deja los cuatro archivos de alta en l…
Deja los archivos de modificación con…

DELIVERY_RESULT

DELIVERY_RESULT

Deja el archivo 122 con SKU y EAN
Deja el archivo 141 con el motivo del…

OBJECT_FINALIZE

Recibir la respuesta 122 de SAP
Recibir los errores 141 de SAP

SKU_ASSIGNED
STATUS_CHANGED
y 2 más

STATUS_CHANGED

Avisa al proveedor que su producto ya…

Bandeja de tareas
Pedir una acción del flujo
y 3 más

Archivos recibidos de SAP

bitácora

Gobierno de Datos

Compras

Entrada Única · Vendor Center

BFF del portal

★ MS-02 Producto

MS-07 Ingesta de archivos

MS-08 Adaptadores de salida

MS-14 Avisos y ayuda

MS-05 Auditoría

Base pim

Eventos

Archivos e imágenes

SAP

Servicio de correo

Contexto de FT-PRD-02

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.

Servicio de correoMS-14 Avisos y ayudaBase·pimMS-07 Ingesta de archivosArchivosSAPMS-02 ProductoMS-08 Adaptadores de salidaEventosServicio de correoMS-14 Avisos y ayudaBase·pimMS-07 Ingesta de archivosArchivosSAPMS-02 ProductoMS-08 Adaptadores de salidaEventos1. Entrega la petición de crear el artículoSAP_CREATION_REQUESTED2. Pide los datos de la versión aprobada para SAPGET /internal/product/products/{id}/sap-snapshot3. Deja los cuatro archivos de alta en la carpeta de SAP4. Avisa que SAP ya tiene los archivosDELIVERY_RESULT5. Entrega el acuse para marcar la tarea como enviadaDELIVERY_RESULT6. Deja el archivo 122 con SKU y EAN7. Avisa que llegó un archivo nuevoOBJECT_FINALIZE8. Entrega los registros del 122 en lotes de 100POST /internal/product/sap/1229. Guarda SKU y EAN de cada variante y cierra SKU en SAP10. Pasa a En enriquecimiento y abre foto y secciones11. Avisa el SKU asignado de cada varianteSKU_ASSIGNED12. Avisa el cambio de estadoSTATUS_CHANGED13. Entrega el cambio para avisar al proveedorSTATUS_CHANGED14. Avisa al proveedor que su producto ya tiene SKU
Flujo principal de FT-PRD-02
Los pasos en texto
PasoDeAQué haceAPI o evento
1EventosMS-08 Adaptadores de salidaEntrega la petición de crear el artículocatalog.product.publication/SAP_CREATION_REQUESTED
2MS-08 Adaptadores de salidaMS-02 ProductoPide los datos de la versión aprobada para SAPAPI-02-055
3MS-08 Adaptadores de salidaSAPDeja los cuatro archivos de alta en la carpeta de SAP—
4MS-08 Adaptadores de salidaEventosAvisa que SAP ya tiene los archivoscatalog.delivery.result/DELIVERY_RESULT
5EventosMS-02 ProductoEntrega el acuse para marcar la tarea como enviadacatalog.delivery.result/DELIVERY_RESULT
6SAPArchivos e imágenes (almacén y CDN)Deja el archivo 122 con SKU y EAN—
7Archivos e imágenes (almacén y CDN)MS-07 Ingesta de archivosAvisa que llegó un archivo nuevocatalog.egress.files/OBJECT_FINALIZE
8MS-07 Ingesta de archivosMS-02 ProductoEntrega los registros del 122 en lotes de 100API-02-049
9MS-02 ProductoBase pimGuarda SKU y EAN de cada variante y cierra SKU en SAP—
10MS-02 ProductoBase pimPasa a En enriquecimiento y abre foto y secciones—
11MS-02 ProductoEventosAvisa el SKU asignado de cada variantecatalog.product.changed/SKU_ASSIGNED
12MS-02 ProductoEventosAvisa el cambio de estadocatalog.product.changed/STATUS_CHANGED
13EventosMS-14 Avisos y ayudaEntrega el cambio para avisar al proveedorcatalog.product.changed/STATUS_CHANGED
14MS-14 Avisos y ayudaServicio de correoAvisa al proveedor que su producto ya tiene SKU—

3.1 Si SAP rechaza el alta (archivo 141)

Entrada Única · Vendor CenterEventosBase·pimMS-02 ProductoMS-07 Ingesta de archivosArchivosSAPEntrada Única · Vendor CenterEventosBase·pimMS-02 ProductoMS-07 Ingesta de archivosArchivosSAPGobierno de DatosBFF1. Deja el archivo 141 con el motivo del rechazo2. Avisa que llegó el archivo de erroresOBJECT_FINALIZE3. Entrega cada error con su propuestaPOST /internal/product/sap/errors4. Guarda el error, lo clasifica y abre Gobierno de Datos5. Avisa la tarea nueva de Gobierno de DatosTASK_CHANGED6. Abre su bandeja de errores de SAP7. Pide sus tareas de Gobierno de DatosGET /api/v2/tasks8. Pide el plan de relanzar, regresar a Compras o rechazarPOST /api/v2/workflow/actions/plans9. Confirma la acción elegidaPOST /api/v2/product-plans/{planId}/apply10. Pide otra vez el artículo a SAP si relanzóSAP_CREATION_REQUESTED11. Avisa si regresó a Compras o se cancelóSTATUS_CHANGEDGobierno de DatosBFF
Si SAP rechaza el alta (archivo 141)

3.2 Variante nueva en una familia que ya tiene SKU

MS-07 Ingesta de archivosSAPMS-08 Adaptadores de salidaEventosBase·pimMS-02 ProductoEntrada Única · Vendor CenterMS-07 Ingesta de archivosSAPMS-08 Adaptadores de salidaEventosBase·pimMS-02 ProductoEntrada Única · Vendor CenterComprasBFF1. Aprueba la sexta variante de un genérico con SKU2. Confirma el cambio aprobadoPOST /api/v2/product-plans/{planId}/apply3. Recalcula el número de variantes y abre SKU en SAP4. Pide modificar el artículo con la familia completaSAP_CREATION_REQUESTED5. Entrega la petición de modificaciónSAP_CREATION_REQUESTED6. Pide la familia completa con sus seis variantesGET /internal/product/products/{id}/sap-snapshot7. Deja los archivos de modificación con la familia8. Entrega el 122 con el SKU de la variante nuevaPOST /internal/product/sap/1229. Asigna el SKU nuevo y conserva los cinco anteriores10. Avisa el SKU de la variante nuevaSKU_ASSIGNEDComprasBFF
Variante nueva en una familia que ya tiene SKU

3.3 Tablero de errores de SAP

MS-07 Ingesta de archivosMS-02 ProductoEntrada Única · Vendor CenterMS-07 Ingesta de archivosMS-02 ProductoEntrada Única · Vendor CenterGobierno de DatosBFF1. Abre el tablero de errores de SAP del día2. Pide los errores agrupados por tipoGET /api/v2/sap-errors/summary3. Elige el error que más se repite4. Pide los productos afectados por ese errorGET /api/v2/sap-errors5. Revisa si el archivo 141 se leyó completoGET /api/v2/sap-ingest/files?interface=&state=6. Corrige el dato maestro y relanza en bloque7. Pide el plan de relanzar los productosPOST /api/v2/workflow/actions/plans8. Confirma el relanzamientoPOST /api/v2/product-plans/{planId}/applyGobierno de DatosBFF
Tablero de errores de SAP

4. Si algo sale mal

  • SAP no contesta el 122. El reloj de MS-02 revisa la tarea SKU en SAP: si los archivos se entregaron y no llega el 122 en 24 horas (configurable por negocio), abre Gobierno de Datos con «Sin respuesta de SAP» y el proveedor sigue viendo «En revisión». Si los archivos ni siquiera llegaron, MS-08 reintenta en su propio carril y la tarea dice «No entregado a SAP».
  • El 122 trae un SKU que ya usa otro producto, o un SKU distinto para una variante que ya tenía uno. El registro sale rechazado en el recibo y no cambia nada (el SKU es único e inmutable); se abre Gobierno de Datos y MS-07 lo deja como fallido en su monitor para reprocesarlo cuando se corrija (API-07-002).
  • La familia queda incompleta: alguna variante elegible sigue sin SKU. La familia se queda en Creación de SKU con una tarea de Gobierno de Datos «Familia incompleta» y no pasa a enriquecimiento hasta que todas sus variantes tengan SKU, como hace hoy P360 (RC-P3B-055).
  • Llega el mismo archivo dos veces. Cada registro se aplica una sola vez por su llave (archivo y renglón): el repetido devuelve el mismo recibo y uno con otro contenido responde IDEMPOTENCY_MISMATCH. Nada se duplica.
  • El 122 llega para una propuesta que ya se canceló. No se revive: el SKU queda registrado para que nadie lo vuelva a usar y se abre Gobierno de Datos para darlo de baja en SAP.

5. APIs

Las que construye esta épica (5)

GET /internal/product/products/{id}/sap-snapshot · Datos para los archivos de SAP
CampoValor
APIAPI-02-055 · MS-02 Producto
Para quéDa a MS-08 los datos de la versión que se pidió a SAP para armar los cuatro archivos (H datos maestros, D variantes, S unidades y T argumento de venta en ECC; STEPMD, STEPVAR, STEPUOM y STEPATT en S4H) y el Foro 40. Es la misma lógica para los tres negocios; sólo cambia el formato.
En esta épicaLos datos de la versión pedida para armar los cuatro archivos de SAP y el Foro 40
Quién la llamaMS-08 Adaptadores de salida
PermisoSólo MS-08 (cuenta de servicio)
CabecerasAuthorization, X-Request-Id
Parámetrosid = PRD-0004812, version = 7
También la usanFT-PLT-02, FT-RAC-01

Request

null

Response · 200

{
  "success": true,
  "data": {
    "productId": "PRD-0004812",
    "version": 7,
    "business": "MER",
    "system": "ECC",
    "kind": "CREATE",
    "reason": "VISTO_BUENO",
    "filePrefix": "P360A",
    "header": {
      "supplierId": "PROV-0001",
      "productTypeSap": "ZMER",
      "itemGroup": "GA-0412",
      "brand": "MARCA01",
      "name": "Licuadora de 10 velocidades",
      "identificaNegocio": "REGULAR",
      "taxCode": "IVA16",
      "cost": 820.0,
      "suggestedPrice": 1499.0,
      "deliveryMonth": "2026-12",
      "fashionGrade": "BASICO",
      "roundingProfile": "R01",
      "dimensions": {
        "heightCm": 38.0,
        "widthCm": 20.0,
        "depthCm": 22.0,
        "weightKg": 3.1
      }
    },
    "variantCount": 2,
    "variants": [
      {
        "variantId": "VAR-0004812-01",
        "sku": null,
        "ean": "7501234567893",
        "color": "ROJO",
        "supplierPartNumber": "LIC-10V-R"
      },
      {
        "variantId": "VAR-0004812-02",
        "sku": null,
        "ean": "7501234567909",
        "color": "NEGRO",
        "supplierPartNumber": "LIC-10V-N"
      }
    ],
    "units": [
      {
        "variantId": "VAR-0004812-01",
        "unit": "PZA",
        "ean": "7501234567893"
      },
      {
        "variantId": "VAR-0004812-02",
        "unit": "PZA",
        "ean": "7501234567909"
      }
    ],
    "salesAttributes": [
      {
        "attribute": "POTENCIA_W",
        "value": "600"
      },
      {
        "attribute": "VELOCIDADES",
        "value": "10"
      }
    ],
    "foro40": {
      "photoBy": "LIVERPOOL",
      "firstApprovalAt": null
    }
  }
}

Errores

HTTPCódigoCuándo
404NOT_FOUNDEl producto o esa versión no existe
422BUSINESS_ERROREl producto es un Genérico Dummy, que no viaja a SAP
POST /internal/product/sap/122 · Recibir la respuesta 122 de SAP
CampoValor
APIAPI-02-049 · MS-02 Producto
Para quéMS-07 entrega, en lotes de hasta 100, los registros del archivo 122 ya leídos (productos antes que atributos). Producto asigna SKU y EAN a cada variante (MATNR es el SKU, EAN11 el EAN, MAKTX el nombre corto y ZNPRST la propuesta), aplica las reglas de Marketplace, pasa a En enriquecimiento la familia completa y abre sus tareas. Un registro sin propuesta crea el producto que nació en SAP (FT-INT-03).
En esta épicaRecibir el 122 y asignar SKU y EAN a cada variante
Quién la llamaMS-07 Ingesta de archivos
PermisoSólo MS-07 (cuenta de servicio)
CabecerasAuthorization, X-Request-Id, Idempotency-Key
Escribe enproducts, identifier_registry, tasks, product_receipts, product_outbox
Publicacatalog.product.changed/SKU_ASSIGNED, catalog.product.changed/STATUS_CHANGED, catalog.product.changed/TASK_CHANGED, catalog.product.changed/PRODUCT_CREATED, idmc_post_products/(contrato de hoy)
También la usanFT-CAT-04, FT-FLU-01, FT-FLU-07, FT-INT-03, FT-INT-06

Request

{
  "fileId": "ECC122-20261018-153010-01",
  "system": "ECC",
  "batch": {
    "number": 1,
    "of": 1
  },
  "records": [
    {
      "recordKey": "ECC122-20261018-153010-01#1",
      "proposalId": "PRD-0004812",
      "variantId": "VAR-0004812-01",
      "sku": "1000004812",
      "ean": "7501234567893",
      "eanType": "IE",
      "shortName": "LICUADORA 10 VEL ROJA",
      "sapBusiness": "REGULAR",
      "supplierId": "PROV-0001",
      "itemGroup": "GA-0412",
      "articleType": "01"
    },
    {
      "recordKey": "ECC122-20261018-153010-01#2",
      "proposalId": "PRD-0004812",
      "variantId": "VAR-0004812-02",
      "sku": "1000004813",
      "ean": "7501234567909",
      "eanType": "IE",
      "shortName": "LICUADORA 10 VEL NEGRA",
      "sapBusiness": "REGULAR",
      "supplierId": "PROV-0001",
      "itemGroup": "GA-0412",
      "articleType": "01"
    },
    {
      "recordKey": "ECC122-20261018-153010-01#3",
      "proposalId": null,
      "variantId": null,
      "sku": "1000009001",
      "ean": "7501234567930",
      "eanType": "IE",
      "shortName": "CAFETERA GOTEO 12 TAZAS",
      "sapBusiness": "SFERA",
      "supplierId": "PROV-0001",
      "itemGroup": "GA-0415",
      "articleType": "00"
    }
  ]
}

Response · 200

{
  "success": true,
  "data": {
    "fileId": "ECC122-20261018-153010-01",
    "applied": 2,
    "created": 1,
    "rejected": 0,
    "items": [
      {
        "recordKey": "ECC122-20261018-153010-01#1",
        "result": "APPLIED",
        "productId": "PRD-0004812",
        "variantId": "VAR-0004812-01",
        "sku": "1000004812"
      },
      {
        "recordKey": "ECC122-20261018-153010-01#2",
        "result": "APPLIED",
        "productId": "PRD-0004812",
        "variantId": "VAR-0004812-02",
        "sku": "1000004813"
      },
      {
        "recordKey": "ECC122-20261018-153010-01#3",
        "result": "CREATED",
        "productId": "LVP1000009001",
        "sku": "1000009001"
      }
    ],
    "families": [
      {
        "productId": "PRD-0004812",
        "complete": true,
        "nowStatus": "EN_ENRIQUECIMIENTO",
        "closedTasks": [
          "SKU_EN_SAP"
        ],
        "openedTasks": [
          "FORO",
          "SECCION_CON_DUENO"
        ]
      },
      {
        "productId": "LVP1000009001",
        "complete": true,
        "nowStatus": "EN_ENRIQUECIMIENTO",
        "openedTasks": [
          "GOBIERNO_DE_DATOS"
        ]
      }
    ]
  }
}

Errores

HTTPCódigoCuándo
400VALIDATION_ERROREl lote trae más de 100 registros o un registro sin llave; un registro con SKU usado por otro producto no es error del lote: sale REJECTED en items con su motivo
409IDEMPOTENCY_MISMATCHLlega otra vez el mismo registro del mismo archivo con otro contenido
POST /internal/product/sap/errors · Recibir los errores 141 de SAP
CampoValor
APIAPI-02-051 · MS-02 Producto
Para quéMS-07 entrega los rechazos del alta en SAP (archivo 141: propuesta y mensaje de hasta 220 caracteres). Producto guarda el mensaje completo en el producto, lo clasifica por tipo, abre una tarea de Gobierno de Datos y deja el producto en Creación de SKU, visible para el proveedor como «En revisión».
En esta épicaRecibir los errores 141 y abrir Gobierno de Datos
Quién la llamaMS-07 Ingesta de archivos
PermisoSólo MS-07 (cuenta de servicio)
CabecerasAuthorization, X-Request-Id, Idempotency-Key
Escribe enproducts, tasks, product_receipts, product_outbox
Publicacatalog.product.changed/TASK_CHANGED, idmc_put_products/(contrato de hoy)

Request

{
  "fileId": "ECC141-20261018-154500-01",
  "system": "ECC",
  "records": [
    {
      "recordKey": "ECC141-20261018-154500-01#1",
      "proposalId": "PRD-0004815",
      "message": "El grupo de artículos GA-9999 no existe para la sociedad",
      "receivedAt": "2026-10-18T15:45:00Z"
    }
  ]
}

Response · 200

{
  "success": true,
  "data": {
    "fileId": "ECC141-20261018-154500-01",
    "applied": 1,
    "rejected": 0,
    "items": [
      {
        "recordKey": "ECC141-20261018-154500-01#1",
        "result": "APPLIED",
        "productId": "PRD-0004815",
        "errorType": "GRUPO_ARTICULO_INVALIDO",
        "taskId": "tsk-40122",
        "taskType": "GOBIERNO_DE_DATOS",
        "status": "CREACION_SKU"
      }
    ]
  }
}

Errores

HTTPCódigoCuándo
400VALIDATION_ERROREl mensaje pasa de 220 caracteres o falta la propuesta: se rechaza, nunca se trunca
409IDEMPOTENCY_MISMATCHEl mismo registro llega otra vez con otro contenido
GET /api/v2/sap-errors/summary · Tablero de errores de SAP
CampoValor
APIAPI-02-401 · MS-02 Producto
Para quéAgrupa por tipo los errores que devolvió SAP (141) en un periodo, con cuántos productos y registros tiene cada uno, para atacar primero los que más se repiten.
En esta épicaEl tablero de errores de SAP agrupados por tipo
Quién la llamaBFF del portal
PermisoGobierno (Gobierno de Datos) y Admin
CabecerasAuthorization, X-Request-Id
Parámetrosfrom = 2026-10-18T00:00:00Z, to = 2026-10-18T23:59:59Z, business = MER

Request

null

Response · 200

{
  "success": true,
  "data": {
    "from": "2026-10-18T00:00:00Z",
    "to": "2026-10-18T23:59:59Z",
    "business": "MER",
    "totalProducts": 113,
    "groups": [
      {
        "errorType": "GRUPO_ARTICULO_INVALIDO",
        "label": "El grupo de artículos no existe en SAP",
        "products": 61,
        "records": 70,
        "lastSeenAt": "2026-10-18T15:45:00Z",
        "sampleMessage": "El grupo de artículos GA-9999 no existe para la sociedad"
      },
      {
        "errorType": "PROVEEDOR_BLOQUEADO",
        "label": "Proveedor bloqueado en SAP",
        "products": 40,
        "records": 40,
        "lastSeenAt": "2026-10-18T14:30:00Z",
        "sampleMessage": "El proveedor PROV-0001 está bloqueado para compras"
      },
      {
        "errorType": "SIN_CLASIFICAR",
        "label": "Mensaje sin tipo conocido",
        "products": 12,
        "records": 12,
        "lastSeenAt": "2026-10-18T13:10:00Z",
        "sampleMessage": "Error al crear el material"
      }
    ]
  }
}

Errores

HTTPCódigoCuándo
400VALIDATION_ERROREl periodo pasa de 90 días o el negocio no existe
GET /api/v2/sap-errors · Productos afectados por un error de SAP
CampoValor
APIAPI-02-402 · MS-02 Producto
Para quéLista los productos con un tipo de error de SAP en un periodo, con el mensaje completo, el archivo de donde vino y su tarea de Gobierno de Datos, para corregirlos en bloque.
En esta épicaLos productos afectados por un tipo de error
Quién la llamaBFF del portal
PermisoGobierno (Gobierno de Datos) y Admin
CabecerasAuthorization, X-Request-Id
ParámetroserrorType = GRUPO_ARTICULO_INVALIDO, from = 2026-10-18T00:00:00Z, to = 2026-10-18T23:59:59Z, page = 1, size = 50
También la usanFT-RAC-04

Request

null

Response · 200

{
  "success": true,
  "data": {
    "items": [
      {
        "productId": "PRD-0004815",
        "business": "MER",
        "name": "Batidora de pedestal",
        "supplierId": "PROV-0001",
        "status": "CREACION_SKU",
        "message": "El grupo de artículos GA-9999 no existe para la sociedad",
        "receivedAt": "2026-10-18T15:45:00Z",
        "fileId": "ECC141-20261018-154500-01",
        "taskId": "tsk-40122",
        "taskStatus": "OPEN"
      }
    ],
    "page": 1,
    "size": 50,
    "total": 61
  }
}

Errores

HTTPCódigoCuándo
400VALIDATION_ERROREl tipo de error no existe en la tabla de tipos

Las que usa y construye otra épica (10)

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-032GET /api/v2/tasksLa bandeja de Gobierno de DatosFT-PRD-06 · Bandeja de pendientes y depuración de borradores…
API-02-028POST /api/v2/workflow/actions/plansVista previa de relanzar a SAP, regresar a Compras, rechazar al proveedor o cancelarFT-FLU-01 · Motor de estados configurable con dos carreteras y reglas…
API-02-057POST /api/v2/product-plans/{planId}/applyConfirmar la acción o el cambio aprobadoFT-FLU-01 · Motor de estados configurable con dos carreteras y reglas…
API-02-030GET /api/v2/workflow/config/{type}Leer SKU_TASKS (tareas que abre el 122 por negocio de SAP) y SAP_ERROR_PATTERNS (tipos de error de SAP)FT-FLU-01 · Motor de estados configurable con dos carreteras y reglas…
API-02-031POST /api/v2/workflow/config/{type}/plansCambiar esas tablas con vista previa (Gobierno de Producto)FT-FLU-01 · Motor de estados configurable con dos carreteras y reglas…
API-02-303GET /api/v2/workflow/sku-blockersEl proveedor ve en su propuesta el error que devolvió SAP y quién lo corrigeFT-RAC-05 · Estatus del producto y motivos visibles para seller y…
API-01-028GET /api/v2/taxonomies/PRODUCT/nodes/{id}/effectiveLa vista efectiva con el grupo «Mínimo SAP» del negocio, que se revisa antes de pedir el artículoFT-PLT-06 · Configuración de atributos por plantilla y por negocio…
API-07-001GET /api/v2/sap-ingest/files?interface=&state=Ver si un archivo 122 o 141 se leyó completoFT-INT-03 · Entrada de SKUs creados en SAP
API-07-002POST /api/v2/sap-ingest/files/{id}/reprocessReprocesar sólo los registros fallidos de un archivoFT-INT-03 · Entrada de SKUs creados en SAP
API-05-002GET /api/v2/audit/entities/{entityType}/{entityId}/status-historyEl historial de estado de cada SKU, con quién y cuándoFT-ARQ-02 · Bitácora inmutable y versionado de producto, plantilla y…

6. Eventos

Publica

EventoCuándoQuién lo consume
catalog.product.changed/SKU_ASSIGNEDSAP devuelve el 122: cada variante recibe su SKU y su EANFT-ACT-02, FT-ACT-03, FT-ARQ-02, FT-INT-02, FT-INT-05, FT-PRD-10
catalog.product.changed/STATUS_CHANGEDLa familia pasa a En enriquecimiento, regresa a Compras o se cancelaFT-ACT-05, FT-ARQ-02, FT-CAT-05, FT-FLU-01, FT-IA-04, FT-PRD-04, FT-PRD-06, FT-PRD-10, FT-RAC-03, FT-RAC-05, FT-RAC-06
catalog.product.changed/TASK_CHANGEDSe cierra SKU en SAP o se abren foto, secciones o Gobierno de DatosFT-ACT-05, FT-ACT-06, FT-ARQ-02, FT-CAT-06, FT-FLU-01, FT-IA-06, FT-PRD-05, FT-PRD-06, FT-PRD-07, FT-PRD-08, FT-RAC-02, FT-RAC-03, FT-RAC-04, FT-RAC-05, FT-RAC-06
catalog.product.changed/REJECTION_ADDEDGobierno de Datos rechaza al proveedor con el motivo del error de SAPFT-INT-07, FT-PRD-04, FT-PRD-05, FT-PRD-10, FT-RAC-01, FT-RAC-03, FT-RAC-05, FT-RAC-06
catalog.product.publication/SAP_CREATION_REQUESTEDGobierno de Datos relanza, o se aprueba una variante nueva en una familia con SKUMS-05 (bitácora)
catalog.delivery.result/DELIVERY_RESULTMS-08 deja los archivos en la carpeta de SAP y devuelve el acuseFT-ARQ-02, FT-CAT-02, FT-CAT-05, FT-CAT-06, FT-IA-05, FT-INT-01, FT-INT-02, FT-INT-05, FT-INT-07, FT-PRD-10, FT-RAC-06

Consume

EventoPara quéQuién lo publica
catalog.product.publication/SAP_CREATION_REQUESTEDMS-08 arma los cuatro archivos de SAPesta misma épica
catalog.egress.files/OBJECT_FINALIZEMS-07 lee el 122 y el 141D-ARCHIVOS
catalog.delivery.result/DELIVERY_RESULTMS-02 marca en la tarea SKU en SAP que los archivos llegaronesta misma épica
catalog.product.changed/STATUS_CHANGEDMS-14 avisa al proveedor; MS-08 manda el Foro 40 cuando el producto queda listo para fotoesta misma épica
catalog.product.changed/SKU_ASSIGNEDMS-08 manda el aviso exprés a OMS en lotes de 25esta misma épica
catalog.product.changed/TASK_CHANGEDMS-14 avisa a Gobierno de Datos de la tarea nuevaesta misma épica

7. Datos

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

ColecciónDueñoQué guardaEsta épica
productsMS-02La familia del producto con sus variantes, valores, imágenes (URL), clasificaciones, estado, tareas abiertas y rechazos.escribe
identifier_registryMS-02Unicidad de SKU y de EAN por negocio.escribe
tasksMS-02Todo el trabajo asignado: visto bueno, corrección, Gobierno de Datos, foto, secciones, QA, revisión del cambio y repoblamiento.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
product_versionsMS-02Foto numerada del producto en cada versión.lee
product_reference_tablesMS-02Configuración del motor de estados y del matching: transiciones, estados externos y pesos.lee
template_viewsMS-01La vista efectiva ya resuelta por plantilla y negocio: qué atributos pide y cuáles son obligatorios.lee
attribute_groupsMS-01Grupos de atributos, incluidos los de permiso (quién ve y quién edita).lee

8. Historias que cubre

HistoriaPrioridadCómo la cubre
FT-PRD-02·H1 · Una sola lógicaP1pasos 1, 2, 3, 8, 9; API-02-055, API-02-049
FT-PRD-02·H2 · Disparo controladoP1pasos 1; API-02-028, API-05-002
FT-PRD-02·H3 · Respuesta 122P1pasos 8, 9, 10, 11; API-02-049
FT-PRD-02·H4 · Error de SAPP1flujo «Si SAP rechaza el alta (archivo 141)»; API-02-051, API-02-303
FT-PRD-02·H5 · Reglas de la MM41P2API-01-028, API-02-028
FT-PRD-02·H6 · Tablero de errores de SAPP2flujo «Tablero de errores de SAP»; API-02-401, API-02-402
FT-PRD-02·H7 · Variante nueva con la familia completa a SAPP1flujo «Variante nueva en una familia que ya tiene SKU»; API-02-055, API-02-049

9. Decisiones de esta épica

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

  • D-PRD-02-1. La petición a SAP (SAP_CREATION_REQUESTED) sólo sale por tres motivos: CREATE al entrar a Creación de SKU, RESEND cuando Gobierno de Datos relanza y MODIFY cuando se aprueba un cambio que toca un campo de SAP o una variante nueva. Nunca al editar una propuesta en revisión. Si ya hay una abierta, la nueva se junta con ella. Por qué: Hoy un cambio de característica en 1007 o 1008 reenvía a SAP sin que nadie lo apruebe, y eso rompe la integración. Un solo constructor y tres motivos dan la «una sola lógica» que piden los talleres para pantalla, carga masiva, API e IA. Se apoya en PEN-71, RF-ALT-01, RF-ALT-11, RN-ALT-12.
  • D-PRD-02-2. El mínimo de la MM41 lo revisan los candados SKU y SAP del motor de validación (FT-RAC-01) contra el grupo de atributos «Mínimo SAP» por negocio que administra MS-01 (FT-PLT-04). El candado SKU frena el visto bueno: el plan de ACCEPT, o la compuerta de Marketplace, responde con el campo que falta y la petición nunca sale incompleta. Los obligatorios históricos de Entrada Única que la MM41 no pide no frenan el SKU. Por qué: SAP deja de ser el último validador sin copiar las casi 500 reglas de hoy; la lista vive en un solo lugar y la lee cualquier origen. Se apoya en PEN-63, RF-ALT-02, PD-24.
  • D-PRD-02-3. MS-08 arma los archivos con la foto de la versión pedida (API-02-055): en ECC, P360A o STEPM más H, D, S y T; en S4H, STEPMD, STEPVAR, STEPUOM y STEPATT. Es la misma lógica para los tres negocios; sólo cambia el formato. Al dejarlos, MS-08 publica DELIVERY_RESULT con destino SAP y MS-02 lo guarda en la tarea SKU en SAP. Por qué: Separa «no se mandó» de «SAP no ha contestado», que hoy no se distingue, y deja medir los errores de SAP que piden vigilar. Se apoya en DUD-23, P-32, RSG-27.
  • D-PRD-02-4. El 122 se aplica por familia: la familia pasa a En enriquecimiento (T06) sólo cuando todas sus variantes elegibles tienen SKU. SKU y EAN de SAP ganan sobre lo capturado y el SKU no cambia nunca. Por qué: Así PE-6 garantiza que cada variante tiene SKU; es la regla vigente de P360 para la familia incompleta y la de SKU único e inmutable. Se apoya en DEC-PRD-04, RN-ALT-12.
  • D-PRD-02-5. En Marketplace el genérico lleva un SKU sintético, 999 más los dígitos de su ID, que asigna MS-02 con una sola fórmula; sus variantes reciben el SKU de SAP. Un producto con coincidencia no crea SKU (se vuelve oferta, FT-INT-05) y el Genérico Dummy no viaja a SAP. Por qué: Hoy hay dos fórmulas distintas para el mismo genérico según quién lo calcule; una sola evita SKU duplicados. Se apoya en RN-MAT-18, DUD-19.
  • D-PRD-02-6. Las tareas que abre el 122 salen de la tabla versionada SKU_TASKS del motor, por negocio de SAP: SFERA abre Gobierno de Datos; REGULAR, MARCAS PROPIAS y SERVICIOS abren Foro o Carga de imagen según quién toma la foto; todas abren las secciones con dueño que pida la plantilla. Lo que llega sin propuesta crea el producto nacido en SAP con la misma tabla. Por qué: Convierte en datos las reglas por negocio que hoy están en el código del 122 y abre en paralelo la «segunda carretera» del enriquecimiento. Se apoya en PD-29, PEN-60.
  • D-PRD-02-7. Un 141 guarda en el producto el mensaje completo de SAP (sin truncar), lo clasifica con la tabla de patrones SAP_ERROR_PATTERNS del motor (los no reconocidos quedan «Sin clasificar») y abre Gobierno de Datos; el producto se queda en Creación de SKU. Gobierno de Datos relanza, regresa a Compras (T07), rechaza al proveedor con una Corrección o cancela (T13). Por qué: El proveedor ve su error y Gobierno de Datos ataca primero lo que más se repite; el tablero sale de los mismos datos, sin copia. Se apoya en DUD-23, P-32, PEN-60.

Qué falta decidir

IDQué falta
DUD-23El contrato con SAP sin broker: XML nuevo del 122, catálogo de errores del 141 y canal (el almacén de archivos, transferencia de archivos o el bus de eventos). Lo cierran Integraciones con SAP.
P-31Los datos mínimos que viajan a SAP: Gobierno de Datos con SAP.
PD-24Qué frena el SKU en Marketplace: Gobierno de Producto con Marketplace (ADR-09). Aquí sólo se recibe PE-5.

También siguen abiertos: PEN-63, La matriz de la MM41 por negocio: los 13 campos de PP33 y qué obligatorios de hoy sobran. Gobierno de Producto con SAP; PEN-71, Confirmar que los reenvíos automáticos de hoy en 1007 y 1008 no se necesitan fuera de un cambio aprobado.

Fuentes

  1. [D] trazabilidad/features/FT-PRD-02-creacion-sku-sap-interfaz-122.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.