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
| De | Qué |
|---|---|
| PE-5 · Visto bueno dado | La 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ías | La 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 producto | Las variantes con identificador propio, listas para recibir el SKU de SAP, que después nadie cambia. |
| FT-PRD-03 · EAN | El 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 SAP | Los registros del 122 que leyó MS-07, ya filtrados por las reglas de exclusión, en lotes de hasta 100. |
| PE-C · Catálogo vigente | La 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 derivada | Grupo 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/S4H | Proveedor, grupo de artículos, impuesto, precio y costo vigentes para armar los 4 TXT de alta en SAP. |
| FT-PLT-07 · Reglas de atributos | Los 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 dato | La 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 producto | La petición de crear el artículo en SAP para la propuesta de Marketplace. |
Entrega
| A | Qué |
|---|---|
| PE-6 · SKU asignado | La 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 consumidores | Cada 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 out | El SKU del producto existente, sin el cual ningún seller puede ofertar. |
| FT-INT-03 · Entrada de SKUs creados en SAP | El resultado de cada registro del 122 (aplicado, creado o rechazado) para la conciliación de SKU. |
Cambios de estado que hace
| Transición | De → a | Cuándo |
|---|---|---|
| T06 | Creación de SKU → En enriquecimiento | SAP crea el artículo (archivo 122). |
| T07 | Creación de SKU → En revisión | Gobierno de Datos lo regresa a Compras. |
| T13 | Creación de SKU → Cancelado | Cancelació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
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.
Los pasos en texto
| Paso | De | A | Qué hace | API o evento |
|---|---|---|---|---|
| 1 | Eventos | MS-08 Adaptadores de salida | Entrega la petición de crear el artículo | catalog.product.publication/SAP_CREATION_REQUESTED |
| 2 | MS-08 Adaptadores de salida | MS-02 Producto | Pide los datos de la versión aprobada para SAP | API-02-055 |
| 3 | MS-08 Adaptadores de salida | SAP | Deja los cuatro archivos de alta en la carpeta de SAP | — |
| 4 | MS-08 Adaptadores de salida | Eventos | Avisa que SAP ya tiene los archivos | catalog.delivery.result/DELIVERY_RESULT |
| 5 | Eventos | MS-02 Producto | Entrega el acuse para marcar la tarea como enviada | catalog.delivery.result/DELIVERY_RESULT |
| 6 | SAP | Archivos e imágenes (almacén y CDN) | Deja el archivo 122 con SKU y EAN | — |
| 7 | Archivos e imágenes (almacén y CDN) | MS-07 Ingesta de archivos | Avisa que llegó un archivo nuevo | catalog.egress.files/OBJECT_FINALIZE |
| 8 | MS-07 Ingesta de archivos | MS-02 Producto | Entrega los registros del 122 en lotes de 100 | API-02-049 |
| 9 | MS-02 Producto | Base pim | Guarda SKU y EAN de cada variante y cierra SKU en SAP | — |
| 10 | MS-02 Producto | Base pim | Pasa a En enriquecimiento y abre foto y secciones | — |
| 11 | MS-02 Producto | Eventos | Avisa el SKU asignado de cada variante | catalog.product.changed/SKU_ASSIGNED |
| 12 | MS-02 Producto | Eventos | Avisa el cambio de estado | catalog.product.changed/STATUS_CHANGED |
| 13 | Eventos | MS-14 Avisos y ayuda | Entrega el cambio para avisar al proveedor | catalog.product.changed/STATUS_CHANGED |
| 14 | MS-14 Avisos y ayuda | Servicio de correo | Avisa al proveedor que su producto ya tiene SKU | — |
3.1 Si SAP rechaza el alta (archivo 141)
3.2 Variante nueva en una familia que ya tiene SKU
3.3 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
| Campo | Valor |
|---|---|
| API | API-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 épica | Los datos de la versión pedida para armar los cuatro archivos de SAP y el Foro 40 |
| Quién la llama | MS-08 Adaptadores de salida |
| Permiso | Sólo MS-08 (cuenta de servicio) |
| Cabeceras | Authorization, X-Request-Id |
| Parámetros | id = PRD-0004812, version = 7 |
| También la usan | FT-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
| HTTP | Código | Cuándo |
|---|---|---|
| 404 | NOT_FOUND | El producto o esa versión no existe |
| 422 | BUSINESS_ERROR | El producto es un Genérico Dummy, que no viaja a SAP |
POST /internal/product/sap/122 · Recibir la respuesta 122 de SAP
| Campo | Valor |
|---|---|
| API | API-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 épica | Recibir el 122 y asignar SKU y EAN a cada variante |
| Quién la llama | MS-07 Ingesta de archivos |
| Permiso | Sólo MS-07 (cuenta de servicio) |
| Cabeceras | Authorization, X-Request-Id, Idempotency-Key |
| Escribe en | products, identifier_registry, tasks, product_receipts, product_outbox |
| Publica | catalog.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 usan | FT-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
| HTTP | Código | Cuándo |
|---|---|---|
| 400 | VALIDATION_ERROR | El 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 |
| 409 | IDEMPOTENCY_MISMATCH | Llega otra vez el mismo registro del mismo archivo con otro contenido |
POST /internal/product/sap/errors · Recibir los errores 141 de SAP
| Campo | Valor |
|---|---|
| API | API-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 épica | Recibir los errores 141 y abrir Gobierno de Datos |
| Quién la llama | MS-07 Ingesta de archivos |
| Permiso | Sólo MS-07 (cuenta de servicio) |
| Cabeceras | Authorization, X-Request-Id, Idempotency-Key |
| Escribe en | products, tasks, product_receipts, product_outbox |
| Publica | catalog.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
| HTTP | Código | Cuándo |
|---|---|---|
| 400 | VALIDATION_ERROR | El mensaje pasa de 220 caracteres o falta la propuesta: se rechaza, nunca se trunca |
| 409 | IDEMPOTENCY_MISMATCH | El mismo registro llega otra vez con otro contenido |
GET /api/v2/sap-errors/summary · Tablero de errores de SAP
| Campo | Valor |
|---|---|
| API | API-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 épica | El tablero de errores de SAP agrupados por tipo |
| Quién la llama | BFF del portal |
| Permiso | Gobierno (Gobierno de Datos) y Admin |
| Cabeceras | Authorization, X-Request-Id |
| Parámetros | from = 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
| HTTP | Código | Cuándo |
|---|---|---|
| 400 | VALIDATION_ERROR | El periodo pasa de 90 días o el negocio no existe |
GET /api/v2/sap-errors · Productos afectados por un error de SAP
| Campo | Valor |
|---|---|
| API | API-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 épica | Los productos afectados por un tipo de error |
| Quién la llama | BFF del portal |
| Permiso | Gobierno (Gobierno de Datos) y Admin |
| Cabeceras | Authorization, X-Request-Id |
| Parámetros | errorType = GRUPO_ARTICULO_INVALIDO, from = 2026-10-18T00:00:00Z, to = 2026-10-18T23:59:59Z, page = 1, size = 50 |
| También la usan | FT-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
| HTTP | Código | Cuándo |
|---|---|---|
| 400 | VALIDATION_ERROR | El 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.
| API | Método y ruta | Para qué, aquí | La construye |
|---|---|---|---|
| API-02-032 | GET /api/v2/tasks | La bandeja de Gobierno de Datos | FT-PRD-06 · Bandeja de pendientes y depuración de borradores… |
| API-02-028 | POST /api/v2/workflow/actions/plans | Vista previa de relanzar a SAP, regresar a Compras, rechazar al proveedor o cancelar | FT-FLU-01 · Motor de estados configurable con dos carreteras y reglas… |
| API-02-057 | POST /api/v2/product-plans/{planId}/apply | Confirmar la acción o el cambio aprobado | FT-FLU-01 · Motor de estados configurable con dos carreteras y reglas… |
| API-02-030 | GET /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-031 | POST /api/v2/workflow/config/{type}/plans | Cambiar esas tablas con vista previa (Gobierno de Producto) | FT-FLU-01 · Motor de estados configurable con dos carreteras y reglas… |
| API-02-303 | GET /api/v2/workflow/sku-blockers | El proveedor ve en su propuesta el error que devolvió SAP y quién lo corrige | FT-RAC-05 · Estatus del producto y motivos visibles para seller y… |
| API-01-028 | GET /api/v2/taxonomies/PRODUCT/nodes/{id}/effective | La vista efectiva con el grupo «Mínimo SAP» del negocio, que se revisa antes de pedir el artículo | FT-PLT-06 · Configuración de atributos por plantilla y por negocio… |
| API-07-001 | GET /api/v2/sap-ingest/files?interface=&state= | Ver si un archivo 122 o 141 se leyó completo | FT-INT-03 · Entrada de SKUs creados en SAP |
| API-07-002 | POST /api/v2/sap-ingest/files/{id}/reprocess | Reprocesar sólo los registros fallidos de un archivo | FT-INT-03 · Entrada de SKUs creados en SAP |
| API-05-002 | GET /api/v2/audit/entities/{entityType}/{entityId}/status-history | El historial de estado de cada SKU, con quién y cuándo | FT-ARQ-02 · Bitácora inmutable y versionado de producto, plantilla y… |
6. Eventos
Publica
| Evento | Cuándo | Quién lo consume |
|---|---|---|
catalog.product.changed/SKU_ASSIGNED | SAP devuelve el 122: cada variante recibe su SKU y su EAN | FT-ACT-02, FT-ACT-03, FT-ARQ-02, FT-INT-02, FT-INT-05, FT-PRD-10 |
catalog.product.changed/STATUS_CHANGED | La familia pasa a En enriquecimiento, regresa a Compras o se cancela | FT-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_CHANGED | Se cierra SKU en SAP o se abren foto, secciones o Gobierno de Datos | FT-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_ADDED | Gobierno de Datos rechaza al proveedor con el motivo del error de SAP | FT-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_REQUESTED | Gobierno de Datos relanza, o se aprueba una variante nueva en una familia con SKU | MS-05 (bitácora) |
catalog.delivery.result/DELIVERY_RESULT | MS-08 deja los archivos en la carpeta de SAP y devuelve el acuse | FT-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
| Evento | Para qué | Quién lo publica |
|---|---|---|
catalog.product.publication/SAP_CREATION_REQUESTED | MS-08 arma los cuatro archivos de SAP | esta misma épica |
catalog.egress.files/OBJECT_FINALIZE | MS-07 lee el 122 y el 141 | D-ARCHIVOS |
catalog.delivery.result/DELIVERY_RESULT | MS-02 marca en la tarea SKU en SAP que los archivos llegaron | esta misma épica |
catalog.product.changed/STATUS_CHANGED | MS-14 avisa al proveedor; MS-08 manda el Foro 40 cuando el producto queda listo para foto | esta misma épica |
catalog.product.changed/SKU_ASSIGNED | MS-08 manda el aviso exprés a OMS en lotes de 25 | esta misma épica |
catalog.product.changed/TASK_CHANGED | MS-14 avisa a Gobierno de Datos de la tarea nueva | esta misma épica |
7. Datos
Cada colección tiene un solo dueño, el único que escribe en ella.
| Colección | Dueño | Qué guarda | Esta épica |
|---|---|---|---|
products | MS-02 | La familia del producto con sus variantes, valores, imágenes (URL), clasificaciones, estado, tareas abiertas y rechazos. | escribe |
identifier_registry | MS-02 | Unicidad de SKU y de EAN por negocio. | escribe |
tasks | MS-02 | Todo el trabajo asignado: visto bueno, corrección, Gobierno de Datos, foto, secciones, QA, revisión del cambio y repoblamiento. | escribe |
product_receipts | MS-02 | El recibo de cada escritura confirmada en el producto (antes operation_receipts). | escribe |
product_outbox | MS-02 | Los cambios del producto que esperan salir como evento (antes outbox). | escribe |
product_versions | MS-02 | Foto numerada del producto en cada versión. | lee |
product_reference_tables | MS-02 | Configuración del motor de estados y del matching: transiciones, estados externos y pesos. | lee |
template_views | MS-01 | La vista efectiva ya resuelta por plantilla y negocio: qué atributos pide y cuáles son obligatorios. | lee |
attribute_groups | MS-01 | Grupos de atributos, incluidos los de permiso (quién ve y quién edita). | lee |
8. Historias que cubre
| Historia | Prioridad | Cómo la cubre |
|---|---|---|
| FT-PRD-02·H1 · Una sola lógica | P1 | pasos 1, 2, 3, 8, 9; API-02-055, API-02-049 |
| FT-PRD-02·H2 · Disparo controlado | P1 | pasos 1; API-02-028, API-05-002 |
| FT-PRD-02·H3 · Respuesta 122 | P1 | pasos 8, 9, 10, 11; API-02-049 |
| FT-PRD-02·H4 · Error de SAP | P1 | flujo «Si SAP rechaza el alta (archivo 141)»; API-02-051, API-02-303 |
| FT-PRD-02·H5 · Reglas de la MM41 | P2 | API-01-028, API-02-028 |
| FT-PRD-02·H6 · Tablero de errores de SAP | P2 | flujo «Tablero de errores de SAP»; API-02-401, API-02-402 |
| FT-PRD-02·H7 · Variante nueva con la familia completa a SAP | P1 | flujo «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
| ID | Qué falta |
|---|---|
| DUD-23 | El 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-31 | Los datos mínimos que viajan a SAP: Gobierno de Datos con SAP. |
| PD-24 | Qué 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
- [D]
trazabilidad/features/FT-PRD-02-creacion-sku-sap-interfaz-122.md: la ficha de la épica, con sus historias, reglas y bloqueos. - [D] ADR-12 · Un solo sistema: backend compartido y una sola base (sección 3.4).
- [D]
docs/arquitectura/por-epica/base/: piezas, colecciones, eventos y el hilo de punta a punta. - [D]
docs/arquitectura/omega-a-pim-headless/contratos-api.md: convenciones y endpoints de partida. - [D]
docs/arquitectura/maquina-de-estados-to-be/propuesta-maquina-de-estados.md§7: estados, tareas y canales. - [I] Las decisiones de la sección 9 son del TL sobre esas fuentes.