← Arquitectura por épica

FT-PRD-03 · EAN

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-03: 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-03.json, generada con generar.py; la ficha de la épica es trazabilidad/features/FT-PRD-03-ean-unicidad-validacion-liberacion.md.

En 30 segundos

Un EAN (el código de barras) no puede repetirse dentro de un negocio, y hoy el proveedor se entera tarde y libera un EAN ocupado con tickets y formularios. Esta épica revisa el EAN en cuanto se captura (formato, dígito verificador, tipo y si ya existe), dice qué hacer si ya está en otro negocio, lleva la liberación dentro del PIM con su estado a la vista y deja cambiar de negocio a un producto sin perder su historia.

  • Módulo dueño: MS-02 Producto. También participan: MS-01 Catálogo, MS-06 Evaluación, MS-14 Avisos y ayuda.
  • Etapa 3 · Captura. Recibe «PE-3 · Plantilla asignada» y entrega a otras épicas.
  • APIs: construye 4 y usa 10 que construyen otras épicas.
  • Eventos: publica 5 y consume 1.

1. Dónde encaja

Recibe

DeQué
PE-3 · Plantilla asignadaLa propuesta en Borrador con plantilla: el proveedor o seller captura sus variantes y sus EAN.
FT-PRD-01 · Modelo canónico de productoEl registro de identificadores por negocio y la variante con EAN propio.
FT-REF-01 · Datos de referencia administrablesLa lista de proveedores y sellers exentos de EAN y los prefijos, como datos de referencia de Catálogo.

Entrega

AQué
FT-RAC-01 · Motor de validación en línea y candados de datos…Las variantes con EAN válidos y reservados en su negocio, para el candado de envío.
FT-PRD-02 · Creación de SKU con SAPEl registro de identificadores donde se confirma el EAN que asigna SAP en la respuesta 122.
FT-FLU-04 · Carga masiva de productos por archivoLa misma revisión de EAN, renglón por renglón, para la carga masiva.

Cambios de estado que hace

TransiciónDe → aCuándo
T09Aprobado → En modificaciónAlguien cambia un producto aprobado.
T10En modificación → AprobadoEl cambio se aplica o se descarta.

Tareas que abre o cierra: Gobierno de Datos.

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

Revisar EAN en línea
Revisar valores en el momento
y 5 más

Entradas de un diccionario
Vista efectiva de una plantilla por n…

Evaluar una propuesta

EAN_CHANGED
PUBLICATION_REQUESTED

Mandar un aviso explícito

Quitar un EAN (adaptador para P360)

Proveedor

Compras

Gobierno de Datos

Entrada Única · Vendor Center

BFF del portal

MS-01 Catálogo

★ MS-02 Producto

MS-06 Evaluación

MS-14 Avisos y ayuda

Base pim

Eventos

P360

Contexto de FT-PRD-03

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.

EventosMS-06 EvaluaciónBase·pimMS-01 CatálogoMS-02 ProductoEntrada Única · Vendor CenterEventosMS-06 EvaluaciónBase·pimMS-01 CatálogoMS-02 ProductoEntrada Única · Vendor CenterProveedorBFF1. Captura el EAN de una variante2. Revisa el EAN en el momento de capturarloPOST /api/v2/products/ean-checks3. Lee los proveedores y sellers exentos de EANGET /api/v2/reference-tables/{t}/entries4. Busca el EAN en el registro de su negocio5. Si está en otro negocio, pide la decisión por negocioPOST /api/v2/evaluations6. Guarda el paso con los EAN libres7. Pide el plan de los valores con los EANPOST /api/v2/products/{id}/values/plans8. Confirma el planPOST /api/v2/product-plans/{planId}/apply9. Reserva los EAN en la misma transacción que la propuesta10. Avisa los EAN nuevos de la propuestaEAN_CHANGEDProveedorBFF
Flujo principal de FT-PRD-03
Los pasos en texto
PasoDeAQué haceAPI o evento
1ProveedorEntrada Única · Vendor CenterCaptura el EAN de una variante—
2Entrada Única · Vendor CenterMS-02 Producto (por el BFF)Revisa el EAN en el momento de capturarloAPI-02-102
3MS-02 ProductoMS-01 CatálogoLee los proveedores y sellers exentos de EANAPI-01-012
4MS-02 ProductoBase pimBusca el EAN en el registro de su negocio—
5MS-02 ProductoMS-06 EvaluaciónSi está en otro negocio, pide la decisión por negocioAPI-06-001
6ProveedorEntrada Única · Vendor CenterGuarda el paso con los EAN libres—
7Entrada Única · Vendor CenterMS-02 Producto (por el BFF)Pide el plan de los valores con los EANAPI-02-012
8Entrada Única · Vendor CenterMS-02 Producto (por el BFF)Confirma el planAPI-02-057
9MS-02 ProductoBase pimReserva los EAN en la misma transacción que la propuesta—
10MS-02 ProductoEventosAvisa los EAN nuevos de la propuestacatalog.product.changed/EAN_CHANGED

3.1 Liberar un EAN en uso

EventosBase·pimMS-14 Avisos y ayudaMS-02 ProductoEntrada Única · Vendor CenterEventosBase·pimMS-14 Avisos y ayudaMS-02 ProductoEntrada Única · Vendor CenterProveedorBFFCompras1. Pide liberar el EAN que ocupa otro producto2. Pide el plan de la solicitudPOST /api/v2/ean-releases/plans3. Confirma la solicitudPOST /api/v2/product-plans/{planId}/apply4. Avisa a Compras que tiene una liberación por decidirPOST /internal/notifications/messages5. Abre sus solicitudes de liberación6. Pide las solicitudes pendientes de su áreaGET /api/v2/ean-releases7. Pide el plan de autorizarPOST /api/v2/ean-releases/plans8. Confirma la autorizaciónPOST /api/v2/product-plans/{planId}/apply9. Libera el EAN anterior y lo reserva para la propuesta10. Avisa el EAN cambiado en los dos productosEAN_CHANGED11. Muestra al proveedor su solicitud «realizada» con fechaGET /api/v2/ean-releasesProveedorBFFCompras
Liberar un EAN en uso

3.2 Cambiar de negocio sin perder la historia

EventosBase·pimMS-01 CatálogoMS-02 ProductoEntrada Única · Vendor CenterEventosBase·pimMS-01 CatálogoMS-02 ProductoEntrada Única · Vendor CenterGobierno de DatosBFF1. Pasa un producto de Marketplace a Mercaderías2. Pide el plan del cambio de negocioPOST /api/v2/products/{id}/business-change/plans3. Lee la vista efectiva del negocio nuevoGET /api/v2/taxonomies/PRODUCT/nodes/{id}/effective4. Confirma el cambioPOST /api/v2/product-plans/{planId}/apply5. Mueve sus EAN al registro del negocio nuevo6. Pasa a En modificación y abre Gobierno de Datos7. Captura los datos que pide Mercaderías8. Revisa y prepara los valores nuevosPOST /api/v2/products/{id}/values/plans9. Cierra su tarea de Gobierno de DatosPOST /api/v2/tasks/plans10. Pide republicar con la misma llave de productoPUBLICATION_REQUESTEDGobierno de DatosBFF
Cambiar de negocio sin perder la historia

3.3 Mientras P360 viva, P360 quita un EAN

EventosBase·pimMS-02 ProductoP360EventosBase·pimMS-02 ProductoP3601. Quita un EAN con el contrato de hoyDELETE /productmanagement/proposals/upc-eans2. Marca el EAN como liberado, sin borrarlo3. Avisa el EAN liberadoEAN_CHANGED
Mientras P360 viva, P360 quita un EAN

4. Si algo sale mal

  • Dos propuestas guardan el mismo EAN en el mismo negocio al mismo tiempo. El índice único del registro deja pasar sólo la primera confirmación; la segunda recibe 422 con «El código EAN ya existe en catalogación para este negocio» y la opción de pedir su liberación.
  • Evaluación (MS-06) no responde cuando el EAN existe en otro negocio. La revisión no bloquea la captura: responde que el EAN existe en el otro negocio y que la decisión se confirma al enviar; la Validación automática (FT-RAC-01) vuelve a preguntar antes del visto bueno.
  • Compras no decide la liberación. La solicitud sigue «solicitada» y la propuesta sigue en Borrador; MS-14 le recuerda a Compras cada semana. Si vence el plazo de la propuesta (FT-PRD-04), la propuesta se cancela y la solicitud se cancela con ella, como hoy al eliminar la propuesta.
  • El producto que tenía el EAN ya tiene SKU en SAP. Al autorizar, el EAN pasa a la propuesta en el PIM y se abre una tarea de Gobierno de Datos para dar de baja o descontinuar ese EAN en SAP. Si después llega de SAP un archivo que intenta devolver ese EAN al producto anterior, no se aplica en silencio: queda en el recibo y en la misma tarea.
  • El negocio nuevo ya tiene uno de los EAN del producto. El plan del cambio de negocio sale bloqueado con el EAN que choca; no se mueve nada hasta resolverlo con una liberación.

5. APIs

Las que construye esta épica (4)

POST /api/v2/products/ean-checks · Revisar EAN en línea
CampoValor
APIAPI-02-102 · MS-02 Producto
Para quéRevisa hasta 10 EAN en el momento de capturarlos: formato y dígito verificador, tipo de código, si el dueño está exento y si el EAN ya existe en su negocio o en otro; en ese caso dice el siguiente paso (pedir la liberación, multioferta o stockout). No reserva nada: la reserva ocurre al guardar.
En esta épicaRevisar el EAN en el momento: formato, dígito, tipo, exentos y si ya existe
Quién la llamaBFF del portal, Gateway de terceros /partner/v1
PermisoENT-E; el proveedor o seller que captura
CabecerasAuthorization, X-Request-Id
También la usanFT-ARQ-01, FT-FLU-02, FT-PRD-09

Request

{
  "business": "MER",
  "ownerId": "PROV-0001",
  "productId": "PRD-0004812",
  "eans": [
    "7501234567923",
    "7501234567894",
    "7509876543213",
    "7501112223330"
  ]
}

Response · 200

{
  "success": true,
  "data": {
    "items": [
      {
        "ean": "7501234567923",
        "valid": true,
        "type": "HE",
        "freeInBusiness": true
      },
      {
        "ean": "7501234567894",
        "valid": false,
        "code": "CHECK_DIGIT",
        "message": "El dígito verificador no corresponde"
      },
      {
        "ean": "7509876543213",
        "valid": true,
        "type": "HE",
        "freeInBusiness": false,
        "conflict": {
          "business": "MER",
          "sameBusiness": true
        },
        "nextStep": "PEDIR_LIBERACION",
        "message": "El código EAN ya existe en catalogación para este negocio; puedes pedir su liberación"
      },
      {
        "ean": "7501112223330",
        "valid": true,
        "type": "HE",
        "freeInBusiness": true,
        "conflict": {
          "business": "MKP",
          "sameBusiness": false
        },
        "nextStep": "PEDIR_LIBERACION",
        "decisionFrom": "MS-06",
        "message": "EAN ocupado por Marketplace: valida su liberación con tu comprador"
      }
    ]
  }
}

Errores

HTTPCódigoCuándo
400VALIDATION_ERRORMás de 10 EAN, o un EAN con letras o de longitud no admitida
POST /api/v2/ean-releases/plans · Pedir o resolver la liberación de un EAN
CampoValor
APIAPI-02-103 · MS-02 Producto
Para quéPrepara una acción sobre la liberación de un EAN que ocupa otro producto: pedirla (proveedor o seller), autorizarla o rechazarla (Compras del área del producto que lo ocupa; en Marketplace, Gobierno de Datos) o cancelarla. Dice quién autoriza, si aplica una regla de liberación directa y qué pasará con los dos productos.
En esta épicaPedir, autorizar, rechazar o cancelar una liberación
Quién la llamaBFF del portal
PermisoREQUEST y CANCEL: el proveedor o seller dueño de la propuesta; AUTHORIZE y REJECT: Compras del área (Gobierno de Datos en Marketplace)
CabecerasAuthorization, X-Request-Id, Idempotency-Key
Publicacatalog.product.changed/EAN_CHANGED, catalog.product.changed/TASK_CHANGED

Request

{
  "action": "REQUEST",
  "ean": "7509876543213",
  "business": "MER",
  "forProductId": "PRD-0004812",
  "forVariantId": "VAR-0004812-02",
  "comment": "El producto anterior se descontinuó"
}

Response · 200

{
  "success": true,
  "data": {
    "planId": "pln-e0a118",
    "expiresAt": "2026-10-18T17:15:00Z",
    "release": {
      "ean": "7509876543213",
      "business": "MER",
      "heldBy": {
        "productId": "PRD-0001907",
        "status": "APROBADO",
        "hasSku": true
      },
      "approver": {
        "area": "COMPRAS-HOGAR"
      },
      "directRule": null,
      "willBe": "SOLICITADA"
    },
    "applyUrl": "/api/v2/product-plans/pln-e0a118/apply"
  }
}

Errores

HTTPCódigoCuándo
422BUSINESS_ERROREl EAN está libre en ese negocio: no hace falta liberarlo
422BUSINESS_ERRORYa hay una solicitud abierta para ese EAN
403AUTHORIZATION_ERRORQuien autoriza no es Compras del área del producto que ocupa el EAN
409VERSION_CONFLICTLa solicitud cambió de estado desde que se leyó
GET /api/v2/ean-releases · Solicitudes de liberación de EAN
CampoValor
APIAPI-02-104 · MS-02 Producto
Para quéLista las solicitudes de liberación con su estado (solicitada, realizada, rechazada o cancelada) y su fecha: es la bandeja de quien autoriza y el seguimiento de quien la pidió.
En esta épicaBandeja de quien autoriza y seguimiento de quien pidió la liberación
Quién la llamaBFF del portal, Gateway de terceros /partner/v1
PermisoQuien autoriza ve las de su área; el proveedor o seller, las que pidió
CabecerasAuthorization, X-Request-Id
Parámetrosstatus = SOLICITADA, business = MER, approverArea = COMPRAS-HOGAR, page = 1, size = 50

Request

null

Response · 200

{
  "success": true,
  "data": {
    "items": [
      {
        "releaseId": "rel-3301",
        "ean": "7509876543213",
        "business": "MER",
        "status": "SOLICITADA",
        "requestedBy": {
          "ownerId": "PROV-0001"
        },
        "forProductId": "PRD-0004812",
        "heldBy": {
          "productId": "PRD-0001907",
          "hasSku": true
        },
        "approverArea": "COMPRAS-HOGAR",
        "requestedAt": "2026-10-18T16:47:00Z",
        "decidedAt": null,
        "rule": null
      }
    ],
    "page": 1,
    "size": 50,
    "total": 1
  }
}

Errores

HTTPCódigoCuándo
400VALIDATION_ERRORUn filtro con un estado o negocio que no existe
POST /api/v2/products/{id}/business-change/plans · Cambiar el negocio dueño
CampoValor
APIAPI-02-105 · MS-02 Producto
Para quéPrepara pasar un producto de un negocio a otro (por ejemplo, de Marketplace a Mercaderías) conservando su identificador, su catalogación, su historial y su llave en la tienda; dice qué EAN se mueven, si alguno choca y qué datos pedirá el negocio nuevo, sin borrar ninguno.
En esta épicaCambiar el negocio dueño sin perder identificador, catalogación ni historial
Quién la llamaBFF del portal
PermisoGobierno de Datos
CabecerasAuthorization, X-Request-Id, Idempotency-Key, If-Match
Parámetrosid = PRD-0004812
Publicacatalog.product.changed/PRODUCT_UPDATED, catalog.product.changed/EAN_CHANGED, catalog.product.changed/STATUS_CHANGED, catalog.product.changed/TASK_CHANGED

Request

{
  "targetBusiness": "MER",
  "newOwnerId": "PROV-0001",
  "reason": "Mercaderías empieza a comprar el producto"
}

Response · 200

{
  "success": true,
  "data": {
    "planId": "pln-9a7c42",
    "expiresAt": "2026-10-18T17:20:00Z",
    "productId": "PRD-0004812",
    "from": "MKP",
    "to": "MER",
    "keeps": [
      "productId",
      "webCategoryIds",
      "history",
      "storeKey"
    ],
    "eans": [
      {
        "ean": "7501234567893",
        "from": "MKP",
        "to": "MER",
        "conflict": null
      }
    ],
    "missingForTarget": [
      {
        "attributeId": "NUM_PROVEEDOR",
        "section": "DATOS_BASICOS"
      },
      {
        "attributeId": "GRUPO_ARTICULOS",
        "section": "DATOS_BASICOS"
      }
    ],
    "status": {
      "from": "APROBADO",
      "to": "EN_MODIFICACION"
    },
    "opensTasks": [
      "GOBIERNO_DE_DATOS"
    ],
    "applyUrl": "/api/v2/product-plans/pln-9a7c42/apply"
  }
}

Errores

HTTPCódigoCuándo
422BUSINESS_ERRORUn EAN del producto ya existe en el negocio destino
403AUTHORIZATION_ERRORQuien llama no es Gobierno de Datos
409VERSION_CONFLICTEl producto cambió desde que se abrió

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-01-012GET /api/v2/reference-tables/{t}/entriesLeer la lista de exentos de EAN (datos de referencia de Catálogo)FT-REF-01 · Datos de referencia administrables
API-06-001POST /api/v2/evaluationsPedir la decisión por negocio cuando el EAN existe en otro negocioFT-REF-02 · Blacklist de Marketplace por marca, negocio y grupo de…
API-02-012POST /api/v2/products/{id}/values/plansRevisar y preparar los valores con los EAN; sólo Gobierno de Datos edita un EAN después del BorradorFT-RAC-01 · Motor de validación en línea y candados de datos…
API-02-057POST /api/v2/product-plans/{planId}/applyConfirmar valores, solicitudes, autorizaciones y cambios de negocioFT-FLU-01 · Motor de estados configurable con dos carreteras y reglas…
API-14-005POST /internal/notifications/messagesAvisar a Compras de una liberación pendiente y al proveedor cuando se decideFT-RAC-05 · Estatus del producto y motivos visibles para seller y…
API-01-028GET /api/v2/taxonomies/PRODUCT/nodes/{id}/effectiveSaber qué datos pide el negocio nuevoFT-PLT-06 · Configuración de atributos por plantilla y por negocio…
API-02-035POST /api/v2/tasks/plansCerrar la tarea de Gobierno de DatosFT-FLU-01 · Motor de estados configurable con dos carreteras y reglas…
API-02-074DELETE /productmanagement/proposals/upc-eansRecibir la baja de un EAN que manda el middleware de P360 hasta R3Capa temporal hasta R3
API-02-030GET /api/v2/workflow/config/{type}Leer las reglas de liberación directa del motorFT-FLU-01 · Motor de estados configurable con dos carreteras y reglas…
API-02-031POST /api/v2/workflow/config/{type}/plansCambiar las reglas de liberación directaFT-FLU-01 · Motor de estados configurable con dos carreteras y reglas…

6. Eventos

Publica

EventoCuándoQuién lo consume
catalog.product.changed/EAN_CHANGEDSe reservan los EAN de una propuesta, se ejecuta una liberación o se mueven los EAN a otro negocioFT-ARQ-02
catalog.product.changed/PRODUCT_UPDATEDCambia el negocio dueño de un productoFT-ACT-05, FT-ARQ-02, FT-IA-01, FT-PLT-07, FT-PRD-05, FT-RAC-06
catalog.product.changed/STATUS_CHANGEDUn producto aprobado que cambia de negocio pasa a En modificaciónFT-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-05, FT-RAC-06
catalog.product.changed/TASK_CHANGEDSe abre Gobierno de Datos por un EAN con SKU liberado o por un cambio de negocioFT-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-05, FT-RAC-06
catalog.product.publication/PUBLICATION_REQUESTEDTermina el cambio de negocio y se republica con la misma llaveFT-CAT-05, FT-CAT-06, FT-INT-01, FT-INT-02, FT-INT-05, FT-INT-07, FT-PLT-08, FT-PRD-05, FT-RAC-03

Consume

EventoPara quéQuién lo publica
catalog.product.changed/EAN_CHANGEDMS-14 avisa al proveedor que su EAN quedó reservado o que su liberación se realizóesta misma épica

7. Datos

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

ColecciónDueñoQué guardaEsta épica
identifier_registryMS-02Unicidad de SKU y de EAN por negocio.escribe
productsMS-02La familia del producto con sus variantes, valores, imágenes (URL), clasificaciones, estado, tareas abiertas y rechazos.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
reference_tablesMS-01Las entradas de los diccionarios: tallas, colores, impuestos, excepciones y demás datos de referencia.lee
template_viewsMS-01La vista efectiva ya resuelta por plantilla y negocio: qué atributos pide y cuáles son obligatorios.lee
product_reference_tablesMS-02Configuración del motor de estados y del matching: transiciones, estados externos y pesos.lee
validation_resultsMS-06El resultado de cada evaluación: lista negra, coincidencias con su confianza y score.lee

8. Historias que cubre

HistoriaPrioridadCómo la cubre
FT-PRD-03·H1 · Validación en líneaP1pasos 1, 2; API-02-102
FT-PRD-03·H2 · Unicidad por negocioP1pasos 4, 8, 9; API-02-102
FT-PRD-03·H3 · Convivencia entre negociosP1pasos 5; API-06-001
FT-PRD-03·H4 · Liberación en la herramientaP2flujo «Liberar un EAN en uso»; API-02-103
FT-PRD-03·H5 · Cambio controladoP2API-02-012. Fuera: Limpiar el EAN de una propuesta cancelada lo hace FT-PRD-04 en la misma transacción que la cancelación (D-PRD-04-5); aquí queda quién puede cambiar un EAN (D-PRD-03-7).
FT-PRD-03·H6 · Seguir el estado de una liberaciónP2flujo «Liberar un EAN en uso»; API-02-104, API-02-030, API-02-031
FT-PRD-03·H7 · Cambiar de negocio sin perder la historiaP2flujo «Cambiar de negocio sin perder la historia»; API-02-105

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-03-1. La revisión del EAN es de MS-02 y es una sola: formato, dígito verificador, tipo de código (IC, EE, HE…) y unicidad por negocio. La usan la captura, la carga masiva y la API de terceros con el mismo código. Por qué: Hoy la validación llega tarde y en cascada de tres chequeos con un índice en archivo plano que falla en silencio; ADR-12 deja la validación en el dueño del dato. Se apoya en DEC-PRD-08, RF-ALT-04, ADR-12.
  • D-PRD-03-2. La unicidad por negocio la garantiza el índice único de identifier_registry, escrito en la misma transacción que el producto: de dos altas simultáneas con el mismo EAN y negocio, sólo una gana. La revisión en línea no reserva; reserva el guardado. Por qué: Reservar al teclear dejaría EAN bloqueados por capturas abandonadas; el índice único cierra la carrera sin bloqueos largos. Se apoya en DEC-PRD-04.
  • D-PRD-03-3. El mensaje de convivencia entre negocios (multioferta, stockout o liberar) sale de la decisión por negocio de Evaluación (MS-06), la misma que usa la identificación previa al alta; MS-02 no copia esa tabla. Por qué: Una regla, un dueño: la decisión ante una coincidencia es de MS-06 (FT-FLU-03). Se apoya en RN-MAT-11, FT-FLU-03.
  • D-PRD-03-4. La liberación vive en el PIM como una solicitud con estado (solicitada, realizada, rechazada o cancelada) guardada en el registro del EAN. Autoriza Compras del área del producto que ocupa el EAN; en Marketplace, Gobierno de Datos. Liberar marca el EAN anterior como liberado; nunca lo borra. Por qué: Elimina el ticket y el formulario, deja el rastro de quién liberó qué y le da al proveedor y al seller el estado sin preguntar. Se apoya en RF-ALT-04, RN-ALT-06, S29-RF-06, DUD-22.
  • D-PRD-03-5. Las reglas de liberación directa se configuran en el motor de MS-02 (tabla EAN_RELEASE_RULES). La de arranque: el EAN lo ocupa otra propuesta del mismo dueño que todavía no tiene SKU. Pasar un artículo a descontinuado no libera su EAN por sí solo. Por qué: Libera sin esperar lo que no tiene riesgo y respeta lo que pidió el taller: antes de liberar un descontinuado se valida, por ejemplo, el inventario. Se apoya en RN-ALT-06, RN-ALT-08.
  • D-PRD-03-6. En Suburbia la unicidad aplica igual y la liberación también, con Compras de Suburbia, hasta que se decida otra cosa. Por qué: Un solo flujo para los tres negocios; excluir a Suburbia obligaría a mantener el ticket sólo para ella. Se apoya en PEN-10, DEC-03.
  • D-PRD-03-7. Sólo Gobierno de Datos, por permiso sobre el grupo de atributos del EAN, o el flujo de liberación cambian un EAN; el proveedor o seller lo captura mientras la propuesta está en Borrador y sin SKU. Por qué: Protege la llave sin frenar la captura; la matriz por rol vive en el motor de MS-02 con los roles del directorio. Se apoya en DUD-22, ADR-12.
  • D-PRD-03-8. El cambio de negocio es un comando propio: conserva identificador, catalogación, historial y la llave de la tienda; mueve los EAN al registro del negocio nuevo (si alguno choca no se aplica) y pide lo que falta con una tarea de Gobierno de Datos, sin borrar nada. Si estaba aprobado, pasa a En modificación y la tienda conserva lo publicado hasta terminar. Por qué: Liberar y volver a catalogar pierde la relevancia que el producto ganó en la página; un comando explícito deja rastro y no se confunde con una edición. Se apoya en S29-RF-07, PD-29.
  • D-PRD-03-9. Mientras P360 viva, su middleware quita EAN con el adaptador upc-eans (API-02-074, de FT-PRD-09) y MS-02 lo aplica como liberación en el registro; se borra con P360 en R3. Por qué: Es el único adaptador que queda por la decisión 20 que adopta ADR-12; sin él, una baja en P360 dejaría el EAN ocupado en el PIM. Se apoya en ADR-12.

Qué falta decidir

IDQué falta
DUD-22Firmar la matriz rol × acción: quién autoriza la liberación y quién edita el EAN.
DUD-25Confirmar si existen y con qué formato los archivos de EAN liberados en SAP, para conciliarlos con el registro.
PD-01La liberación en la herramienta es mejora sobre P360; confirmar que entra en la primera salida.

También siguen abiertos: PEN-10, Confirmar si la liberación en la herramienta aplica a Suburbia (aquí arranca igual que en Mercaderías).

Fuentes

  1. [D] trazabilidad/features/FT-PRD-03-ean-unicidad-validacion-liberacion.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.