← Arquitectura por épica

FT-PRD-09 · Contrato de propuestas con Entrada Única

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-09: 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-09.json, generada con generar.py; la ficha de la épica es trazabilidad/features/FT-PRD-09-contrato-propuestas-entrada-unica.md.

En 30 segundos

Hoy las pantallas de propuesta de Vendor Center llaman a P360 y al backend de Entrada Única. En R2 cambian una sola vez al BFF del portal, que les compone la propuesta con su vista efectiva, sus listas y sus permisos, y escriben en los servicios del PIM. No se construye una capa que imite a P360: sólo queda, hasta el apagado de P360 en R3, el adaptador que usa su middleware para quitar un EAN.

  • Módulo dueño: MS-02 Producto. También participan: MS-01 Catálogo, MS-13 Identidad y acceso.
  • Etapa 0 · Entrada. Recibe «PE-C · Catálogo vigente» y entrega «PE-1 · Propuesta en Borrador».
  • APIs: construye 3 y usa 20 que construyen otras épicas.
  • Eventos: publica 4 y consume 0.

1. Dónde encaja

Recibe

DeQué
FT-ARQ-01 · Núcleo headlessLa API de producto de MS-02: alta en Borrador, valores, variantes, acciones del flujo y recibos.
FT-FLU-01 · Motor de estados configurable con dos carreteras y reglas…Qué acciones y qué grupos de campos puede usar cada quien según su rol, el estado y la tarea; la pantalla sólo los pinta.
FT-RAC-01 · Motor de validación en línea y candados de datos…La validación en el momento, por campo y por variante, que la pantalla muestra tal cual.
FT-USR-01 · Identidad y autenticación de usuarios internos…La sesión: el BFF valida el token en cada petición y toma los roles del directorio.
PE-C · Catálogo vigenteLa vista efectiva, las marcas permitidas, las listas y el diccionario de proveedores sin EAN de MS-01, que compone el BFF.
FT-PLT-10 · Fachada v1 compatible con P360 para Entrada Única y ForoLas rutas de catálogo del BFF (formulario de captura, valores con búsqueda, alcance de marcas y búsqueda de plantillas) que la pantalla de propuesta compone en R2.

Entrega

AQué
PE-1 · Propuesta en BorradorLa propuesta capturada en la pantalla nace en Borrador con origen PORTAL, negocio y proveedor dueño.
FT-PRD-07 · Captura guiada por pasos con los mínimos primeroLa ruta del BFF de la pantalla de propuesta (API-BFF-201), sobre la que trabaja la captura guiada.
FT-MIG-04 · Convivencia P360 ↔ nuevo PIMLas rutas de Entrada Única y de P360 que dejan de llamarse en R2, cada una con su reemplazo, y el adaptador upc-eans que se borra con P360 en R3.

Cambios de estado que hace

TransiciónDe → aCuándo
T01Inicio → BorradorEl proveedor o seller guarda por primera vez (pantalla, archivo, plantilla en línea o API).
T03Borrador → En revisiónEnvía con los obligatorios completos.

Tareas que abre o cierra: 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

Qué puede capturar el proveedor con e…
Formulario de captura de una plantilla
y 1 más

Revisar EAN en línea
Identificar un producto antes del alta
y 10 más

PRODUCT_CREATED
EAN_CHANGED
y 1 más

Roles efectivos de quien llama

Vista efectiva de una plantilla por n…

Vista efectiva de una plantilla por n…

Quitar un EAN (adaptador para P360)

permisos

Proveedor

Entrada Única · Vendor Center

BFF del portal

★ MS-02 Producto

MS-01 Catálogo

MS-13 Identidad y acceso

Base pim

Eventos

P360

Contexto de FT-PRD-09

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álogoMS-13 Identidad y accesoEventosBase·pimMS-02 ProductoEntrada Única · Vendor CenterMS-01 CatálogoMS-13 Identidad y accesoEventosBase·pimMS-02 ProductoEntrada Única · Vendor CenterProveedorBFF1. Elige negocio y plantilla para una propuesta nueva2. Revisa marcas permitidas y que la plantilla vaya con su secciónGET /bff/v1/catalog/capture-scope3. Pide el formulario de captura de la plantillaGET /bff/v1/catalog/capture-form4. Revisa los EAN y si el proveedor está exentoPOST /api/v2/products/ean-checks5. Revisa si ya existe por EAN o por marca y modeloPOST /api/v2/products/identifications6. Pide el plan del alta en Borrador con su evaluaciónPOST /api/v2/products/plans7. Confirma el planPOST /api/v2/product-plans/{planId}/apply8. Guarda la propuesta en Borrador con origen PORTAL9. Avisa la propuesta nuevaPRODUCT_CREATED10. Abre la propuesta para capturarlaGET /bff/v1/proposals/{productId}11. Toma los roles del usuario del directorioGET /internal/identity/permissions?userId=12. Lee la propuesta con sus variantesGET /api/v2/products/{id}13. Lee la vista efectiva de su plantilla y negocioGET /api/v2/taxonomies/PRODUCT/nodes/{id}/effective14. Pide qué puede editar y qué botones usarGET /api/v2/workflow/capabilities?productIds=ProveedorBFF
Flujo principal de FT-PRD-09
Los pasos en texto
PasoDeAQué haceAPI o evento
1ProveedorEntrada Única · Vendor CenterElige negocio y plantilla para una propuesta nueva—
2Entrada Única · Vendor CenterBFF del portalRevisa marcas permitidas y que la plantilla vaya con su secciónAPI-BFF-103
3Entrada Única · Vendor CenterBFF del portalPide el formulario de captura de la plantillaAPI-BFF-101
4Entrada Única · Vendor CenterMS-02 Producto (por el BFF)Revisa los EAN y si el proveedor está exentoAPI-02-102
5Entrada Única · Vendor CenterMS-02 Producto (por el BFF)Revisa si ya existe por EAN o por marca y modeloAPI-02-202
6Entrada Única · Vendor CenterMS-02 Producto (por el BFF)Pide el plan del alta en Borrador con su evaluaciónAPI-02-005
7Entrada Única · Vendor CenterMS-02 Producto (por el BFF)Confirma el planAPI-02-057
8MS-02 ProductoBase pimGuarda la propuesta en Borrador con origen PORTAL—
9MS-02 ProductoEventosAvisa la propuesta nuevacatalog.product.changed/PRODUCT_CREATED
10Entrada Única · Vendor CenterBFF del portalAbre la propuesta para capturarlaAPI-BFF-201
11BFF del portalMS-13 Identidad y accesoToma los roles del usuario del directorioAPI-13-001
12BFF del portalMS-02 ProductoLee la propuesta con sus variantesAPI-02-002
13BFF del portalMS-01 CatálogoLee la vista efectiva de su plantilla y negocioAPI-01-028
14BFF del portalMS-02 ProductoPide qué puede editar y qué botones usarAPI-02-027

3.1 Corregir, quitar una variante y reenviar

EventosMS-02 ProductoEntrada Única · Vendor CenterEventosMS-02 ProductoEntrada Única · Vendor CenterProveedorBFF1. Abre su propuesta rechazada2. Pide la pantalla con los motivos por campoGET /bff/v1/proposals/{productId}3. Lee los motivos de rechazoGET /api/v2/workflow/comments?productIds=4. Pide quitar una variante sin SKUPOST /api/v2/products/{id}/variants/remove/plans5. Confirma: la variante sale y su EAN queda librePOST /api/v2/product-plans/{planId}/apply6. Pide el plan de los campos corregidosPOST /api/v2/products/{id}/values/plans7. Pide reenviar a revisiónPOST /api/v2/workflow/actions/plans8. Confirma el reenvíoPOST /api/v2/product-plans/{planId}/apply9. Avisa el EAN libreEAN_CHANGED10. Avisa que volvió a En revisiónSTATUS_CHANGEDProveedorBFF
Corregir, quitar una variante y reenviar

3.2 Placeholders desde el portal

Base·pimMS-01 CatálogoMS-02 ProductoEntrada Única · Vendor CenterBase·pimMS-01 CatálogoMS-02 ProductoEntrada Única · Vendor CenterProveedorBFF1. Sube su Excel de placeholders2. Sube la carga con el perfil de placeholdersPOST /api/v2/product-imports3. Lee la plantilla enmascarada: maestros y estratégicosGET /api/v2/taxonomies/PRODUCT/nodes/{id}/effective4. Confirma los renglones válidosPOST /api/v2/product-imports/{id}/apply5. Crea cada placeholder sin volverlo propuesta6. Edita un placeholder a mano7. Guarda el cambio, sigue siendo placeholderPOST /api/v2/products/{id}/values/plansProveedorBFF
Placeholders desde el portal

3.3 El middleware de P360 quita un EAN (hasta R3)

EventosBase·pimMS-02 ProductoP360EventosBase·pimMS-02 ProductoP3601. Pide quitar un EAN con el contrato de hoyDELETE /productmanagement/proposals/upc-eans2. Libera el EAN en el registro de identidad3. Avisa el EAN libreEAN_CHANGED
El middleware de P360 quita un EAN (hasta R3)

4. Si algo sale mal

  • Una pantalla vieja sigue llamando a P360 o al backend de Entrada Única en R2. La entrada mide el tráfico por ruta y una ruta vieja no se da por apagada hasta tener 30 días en cero. Mientras P360 viva la llamada funciona, pero lo nuevo ya se guarda en el PIM, que escribe en P360 por MS-03 mientras P360 sea la fuente.
  • MS-01 no responde al armar la pantalla. El BFF devuelve la propuesta de sólo lectura con un aviso (partial = true): no se puede capturar sin vista efectiva, pero no se pierde nada de lo guardado.
  • Otra persona cambió la propuesta mientras se corregía. La confirmación responde 409 VERSION_CONFLICT; la pantalla recarga la versión nueva y el proveedor ve qué cambió antes de volver a guardar.
  • Quiere quitar una variante que ya tiene SKU. El plan responde 422 con el motivo; esa variante se cambia con una modificación o se da de baja, no se borra.
  • El middleware de P360 manda un EAN que no está en el PIM. El adaptador responde igual que hoy y deja el caso en la bitácora; no crea ni cambia nada.

5. APIs

Las que construye esta épica (3)

GET /bff/v1/proposals/{productId} · Pantalla de propuesta
CampoValor
APIAPI-BFF-201 · BFF del portal
Para quéJunta en una sola respuesta lo que pinta la pantalla de una propuesta: la propuesta con sus variantes (MS-02), el formulario de captura de su plantilla y negocio (el mismo que arma API-BFF-101 con la vista efectiva y las listas de MS-01), qué grupos de campos puede editar quien la abre y qué acciones tiene (motor de MS-02) y los motivos de rechazo por campo. Reemplaza a GetProposals y a la composición que hoy arma el navegador en cuatro copias, y a /catalogationmanagement/product.
En esta épicaPantalla de propuesta: propuesta, vista efectiva, listas, permisos y motivos en una respuesta
Quién la llamaEntrada Única · Vendor Center (por el BFF)
PermisoLa pantalla de propuestas en el menú del perfil (BFF); qué se ve, qué se edita y qué botones salen lo deciden MS-02 y MS-01
CabecerasAuthorization, X-Request-Id
ParámetrosproductId = PRD-0004812, lang = es
También la usanFT-ACT-06, FT-FLU-02, FT-PRD-05, FT-PRD-06, FT-PRD-07

Request

null

Response · 200

{
  "success": true,
  "data": {
    "proposal": {
      "productId": "PRD-0004812",
      "business": "MER",
      "status": "BORRADOR",
      "visibleStatus": "Rechazada",
      "version": 6,
      "origin": "PORTAL",
      "supplierId": "PROV-0001",
      "templateId": "EU4-0412",
      "base": {
        "TITULO": "Licuadora de 10 velocidades",
        "MARCA": "MARCA01",
        "MODELO": "LV-10"
      },
      "variants": [
        {
          "variantId": "VAR-0004812-01",
          "ean": "7501234567893",
          "sku": null,
          "axes": {
            "COLOR": "ROJO"
          }
        },
        {
          "variantId": "VAR-0004812-02",
          "ean": "7501234567909",
          "sku": null,
          "axes": {
            "COLOR": "NEGRO"
          }
        }
      ]
    },
    "template": {
      "templateId": "EU4-0412",
      "version": 7,
      "business": "MER",
      "sections": [
        {
          "code": "DATOS_BASE",
          "owner": "PROVEEDOR",
          "attributes": [
            {
              "code": "COLOR",
              "level": "REQUIRED",
              "type": "LIST",
              "list": "COLOR"
            },
            {
              "code": "TONO",
              "level": "OPTIONAL",
              "type": "LIST",
              "list": "TONO",
              "dependsOn": "COLOR"
            }
          ]
        },
        {
          "code": "LOGISTICA",
          "owner": "PROVEEDOR",
          "attributes": [
            {
              "code": "ALTO_EMPAQUE",
              "level": "REQUIRED",
              "type": "NUMBER",
              "unit": "CM"
            }
          ]
        }
      ]
    },
    "lists": {
      "COLOR": [
        {
          "code": "ROJO",
          "label": "Rojo"
        },
        {
          "code": "NEGRO",
          "label": "Negro"
        }
      ],
      "TONO": {
        "byParent": {
          "ROJO": [
            {
              "code": "ROJO_VINO",
              "label": "Rojo vino"
            }
          ]
        }
      }
    },
    "permissions": {
      "fieldGroups": [
        {
          "group": "DATOS_BASE",
          "access": "editable"
        },
        {
          "group": "LOGISTICA",
          "access": "editable"
        }
      ],
      "actions": [
        "SUBMIT",
        "CANCEL"
      ],
      "isContentOwner": true
    },
    "rejection": {
      "rejectedAt": "2026-10-18T15:04:07Z",
      "byArea": "COMPRAS-HOGAR",
      "reason": {
        "code": "DATOS_INCOMPLETOS",
        "comment": "Faltan medidas del empaque"
      },
      "fields": [
        {
          "attribute": "ALTO_EMPAQUE",
          "code": "REQUIRED",
          "comment": "Captura el alto en centímetros"
        }
      ],
      "correctionDueAt": "2026-12-17T15:04:05Z"
    },
    "partial": false
  }
}

Errores

HTTPCódigoCuándo
404NOT_FOUNDLa propuesta no existe o no es visible para quien llama
403AUTHORIZATION_ERROREl perfil no tiene la pantalla de propuestas
503DEPENDENCY_UNAVAILABLEMS-01 no responde: si MS-02 sí, se devuelve la propuesta sólo de lectura con partial = true y un aviso
POST /api/v2/products/{id}/variants/remove/plans · Quitar variantes sin SKU
CampoValor
APIAPI-02-203 · MS-02 Producto
Para quéPrepara el borrado lógico de variantes de una propuesta que todavía no tienen SKU y dice qué pasará; al confirmar, el genérico no se toca, sus EAN quedan libres y queda en la bitácora.
En esta épicaQuitar variantes sin SKU; reemplaza a EliminaVariantes
Quién la llamaEntrada Única · Vendor Center (por el BFF), Gateway de terceros /partner/v1
PermisoEl proveedor o seller dueño de la propuesta en Borrador; Compras en En revisión
CabecerasAuthorization, X-Request-Id, Idempotency-Key, If-Match
Parámetrosid = PRD-0004812

Request

{
  "version": 4,
  "variantIds": [
    "VAR-0004812-03"
  ],
  "reason": "Color descontinuado"
}

Response · 200

{
  "success": true,
  "data": {
    "planId": "pln-2b7e10",
    "expiresAt": "2026-10-18T16:50:00Z",
    "items": [
      {
        "variantId": "VAR-0004812-03",
        "result": "WILL_REMOVE",
        "freesEans": [
          "7501234567916"
        ]
      }
    ],
    "remainingVariants": 2,
    "applyUrl": "/api/v2/product-plans/pln-2b7e10/apply"
  }
}

Errores

HTTPCódigoCuándo
422BUSINESS_ERRORLa variante ya tiene SKU (se usa modificación o baja) o quitarla dejaría la propuesta sin variantes
409VERSION_CONFLICTAlguien cambió la propuesta desde que se abrió
409NOT_EDITABLE_IN_STATUSLa propuesta no está en Borrador ni En revisión
DELETE /productmanagement/proposals/upc-eans · Quitar un EAN (adaptador para P360)
CampoValor
APIAPI-02-074 · MS-02 Producto
Para quéÚnico adaptador que queda (decisión 20). Hoy el middleware de P360 lo llama contra Entrada Única al quitar un EAN de un artículo; desde R2 MS-02 atiende el mismo contrato, libera el EAN en su registro de identidad y avisa EAN_CHANGED. Se borra con el apagado de P360 en R3 (abr–may 2027).
En esta épicaAdaptador upc-eans para el middleware de P360, hasta R3
Quién la llamaP360
PermisoSólo el middleware de P360, con su credencial de servicio
CabecerasAuthorization, X-Request-Id
Escribe enidentifier_registry, products, product_outbox
Publicacatalog.product.changed/EAN_CHANGED
También la usanFT-MIG-04, FT-PRD-03
Capa temporalResponde igual que hoy y se borra con el apagado de P360 (R3).

Las que usa y construye otra épica (20)

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-13-001GET /internal/identity/permissions?userId=Roles del usuario para los permisos de pantalla, con cachéFT-USR-01 · Identidad y autenticación de usuarios internos…
API-02-102POST /api/v2/products/ean-checksRevisar cada EAN al teclearlo y si el dueño está exento; reemplaza a SellersAllowedNotEANFT-PRD-03 · EAN
API-06-005POST /api/v2/matchesBuscar parecidos por marca y modelo como referenciaFT-REF-03 · Servicio de matching
API-02-005POST /api/v2/products/plansAlta en Borrador desde la pantallaFT-PRD-01 · Modelo canónico de producto
API-02-057POST /api/v2/product-plans/{planId}/applyConfirmar alta, cambios, quitar variantes y reenvíoFT-FLU-01 · Motor de estados configurable con dos carreteras y reglas…
API-02-002GET /api/v2/products/{id}La propuesta con sus variantesFT-PRD-01 · Modelo canónico de producto
API-01-028GET /api/v2/taxonomies/PRODUCT/nodes/{id}/effectiveVista efectiva de la plantilla y el negocioFT-PLT-06 · Configuración de atributos por plantilla y por negocio…
API-02-027GET /api/v2/workflow/capabilities?productIds=Qué grupos puede editar y qué acciones tieneFT-FLU-01 · Motor de estados configurable con dos carreteras y reglas…
API-02-029GET /api/v2/workflow/comments?productIds=Motivos de rechazo por campoFT-PRD-04 · Propuesta del proveedor de Mercaderías
API-02-012POST /api/v2/products/{id}/values/plansValidar y guardar los campos corregidosFT-RAC-01 · Motor de validación en línea y candados de datos…
API-02-028POST /api/v2/workflow/actions/plansAcciones del flujo: enviar, aprobar, cancelar, que hoy van dentro de CreateProposalFT-FLU-01 · Motor de estados configurable con dos carreteras y reglas…
API-02-106POST /api/v2/product-groups/plansAgrupar looks, que hoy va dentro de CreateProposalFT-PRD-01 · Modelo canónico de producto
API-02-046POST /api/v2/product-importsCarga de placeholders con su perfil; reemplaza la carga masiva de hoyFT-FLU-04 · Carga masiva de productos por archivo
API-02-047POST /api/v2/product-imports/{id}/applyCrear los placeholders válidosFT-FLU-04 · Carga masiva de productos por archivo
API-02-001POST /api/v2/products/searchLista de mis propuestas; reemplaza a GetProposals en las tablasFT-PRD-01 · Modelo canónico de producto
API-02-201GET /api/v2/products/by-identifierLeer por SKU o EAN; reemplaza a /catalogationmanagement/productFT-ARQ-01 · Núcleo headless
API-BFF-103GET /bff/v1/catalog/capture-scopeAlcance de marcas y plantilla ligada a la sección; reemplaza a BrandsGroupOfArticleByTemplateBusinessProviderFT-PLT-10 · Fachada v1 compatible con P360 para Entrada Única y Foro
API-BFF-101GET /bff/v1/catalog/capture-formFormulario de captura de la plantilla y el negocio; reemplaza a GetTemplate y a los habilitadoresFT-PLT-10 · Fachada v1 compatible con P360 para Entrada Única y Foro
API-02-202POST /api/v2/products/identificationsIdentificación previa al alta; reemplaza a GetArticleByEanOrBrandAndModelFT-FLU-02 · Alta individual de Marketplace
API-BFF-107GET /bff/v1/catalog/templatesBuscar plantillas por texto con su ruta; reemplaza a /catalogationmanagement/templatesFT-PLT-10 · Fachada v1 compatible con P360 para Entrada Única y Foro

6. Eventos

Publica

EventoCuándoQuién lo consume
catalog.product.changed/PRODUCT_CREATEDSe guarda una propuesta nueva en la pantallaFT-ARQ-01
catalog.product.changed/PRODUCT_UPDATEDSe corrige una propuesta o se quita una varianteFT-ACT-05, FT-ARQ-02, FT-IA-01, FT-PLT-07, FT-PRD-05, FT-RAC-06
catalog.product.changed/STATUS_CHANGEDSe reenvía a revisió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/EAN_CHANGEDSe quita una variante o el middleware de P360 quita un EANFT-ARQ-02, FT-PRD-03

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
product_versionsMS-02Foto numerada del producto en cada versión.escribe
product_jobsMS-02Trabajos asíncronos: cargas masivas de productos, edición masiva y publicación.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
template_viewsMS-01La vista efectiva ya resuelta por plantilla y negocio: qué atributos pide y cuáles son obligatorios.lee
lov_valuesMS-01Cada valor de lista: código, etiqueta, orden y equivalencias por sistema.lee
governance_rulesMS-01Reglas de captura y clasificación: marcas por plantilla, grupo de artículo a plantilla, alcance del proveedor y lista negra de Marketplace.lee
rolesMS-13Perfiles y roles, con sus membresías y su alcance (negocio, sección, proveedor o seller, vigencia). Los permisos de dominio los decide el servicio dueño con estos roles (decisión 19).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-09·H1 · Crear sin tocar EUP1pasos 1, 2, 3, 4, 5, 6, 7, 8; flujo «Placeholders desde el portal»; API-02-005, API-02-046
FT-PRD-09·H2 · Errores por campoP1pasos 4, 5, 6; flujo «Corregir, quitar una variante y reenviar»; API-02-012, API-02-102
FT-PRD-09·H3 · ConsultarP1pasos 10, 12, 13, 14; API-BFF-201, API-02-001, API-02-201
FT-PRD-09·H4 · Una ruta, cinco flujosP1flujo «Corregir, quitar una variante y reenviar»; API-02-028, API-02-106
FT-PRD-09·H5 · Variantes, duplicados y URLP2flujo «Corregir, quitar una variante y reenviar», «El middleware de P360 quita un EAN (hasta R3)»; API-02-203, API-02-202, API-02-074
FT-PRD-09·H6 · Sin heredar huecosP3pasos 10, 11; API-13-001
FT-PRD-09·H7 · Sin cambios para Entrada Única y ForoP1API-BFF-201. Fuera: Con ADR-12 y la decisión 20 los contratos sí cambian, una sola vez, al del BFF en R2; lo que se conserva es lo que ve y hace el usuario (D-PRD-09-1). SKU, publicación, OMS y commercetools no cambian en R2: los cubren FT-PRD-02 y FT-INT-01.
FT-PRD-09·H8 · Recibir placeholders del portal de catalogaciónP2flujo «Placeholders desde el portal»; API-02-046, API-02-047

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-09-1. Las pantallas de propuesta, variantes y carga masiva de Vendor Center cambian una sola vez al contrato del BFF en R2; no se construye la capa /public/rt (CreateProposal, GetProposals, GetArticleByEanOrBrandAndModel, EliminaVariantes y las demás) ni adaptadores en los servicios. El backend de Entrada Única y P360 se apagan en R3 con tráfico cero. Por qué: Es la decisión 20 que adopta ADR-12: mantener capas temporales cuesta más que cambiar el front una vez, y al llegar al corte no queda nada temporal que mantener. Se apoya en ADR-12, PD-06, ADR-06, RSG-30.
  • D-PRD-09-2. La composición «propuesta con su vista efectiva, listas, permisos y motivos» vive una sola vez en el BFF (API-BFF-201), en lugar de las cuatro copias que hoy tiene el navegador. El BFF no decide permisos de dominio: los pide al motor de MS-02 y sólo aplica los de pantalla. Por qué: Decisión 19: un solo lugar para componer, servicios que no saben de pantallas y ninguna regla de negocio en el BFF. Se apoya en ADR-12, PD-30, RF-GEN-10.
  • D-PRD-09-3. Cada operación de hoy tiene su reemplazo: GetProposals por API-BFF-201, API-02-001 y API-02-201; GetArticleByEanOrBrandAndModel por la identificación previa al alta (API-02-202) y la revisión de cada EAN (API-02-102); EliminaVariantes por API-02-203; SellersAllowedNotEAN por API-02-102, que dice si el dueño está exento; /catalogationmanagement/product por API-BFF-201 o API-02-201; /catalogationmanagement/templates por la búsqueda de plantillas del BFF (API-BFF-107); los cinco flujos de CreateProposal por API-02-005, API-02-006, API-02-012, API-02-028 y API-02-106; y la carga masiva de Entrada Única por API-02-046. Lo de plantilla (GetTemplate, habilitadores y marcas) pasa al BFF de catálogo en R1 (API-BFF-101 a API-BFF-103). Por qué: Que ninguna función se pierda al apagar P360 (RSG-30) sin copiar los contratos de P360 con sus rarezas (RSG-31). Se apoya en RSG-30, RSG-31, RF-INT-14.
  • D-PRD-09-4. El único adaptador es upc-eans (API-02-074): mientras P360 viva, MS-02 atiende el mismo contrato para su middleware, libera el EAN y avisa EAN_CHANGED; se borra con el apagado de P360 en R3. Por qué: Es la única llamada a Entrada Única que no viene de un front (decisión 20); la otra opción, reapuntar la propiedad de P360, llega a la misma ruta de MS-02. Se apoya en ADR-06, PD-06.
  • D-PRD-09-6. Mientras P360 sea la fuente del producto (R2), la pantalla ya lee y escribe en el PIM y MS-02 escribe en P360 por MS-03; cada ruta vieja se da por apagada con 30 días de tráfico cero en la entrada. Por qué: La pantalla cambia una sola vez, la convivencia queda en un solo lugar (FT-MIG-04) y se apaga con evidencia. Se apoya en ADR-08, RSG-48, FT-MIG-04.
  • D-PRD-09-7. Los placeholders del portal usan la carga masiva con el perfil PLACEHOLDERS, que sólo exige datos maestros y los atributos estratégicos de la plantilla enmascarada; editarlos a mano los conserva como placeholder. Pasan a propuesta sólo cuando o9 los acepta (FT-PRD-04). Por qué: H8 sin otro front ni otro contrato: la misma carga, con un perfil. Se apoya en FT-PRD-04, DEC-PRD-08.

Qué falta decidir

IDQué falta
PD-06Se cierra con ADR-12 y la decisión 20 cuando la TDA registre ADR-06: sin capa de compatibilidad para los fronts.
DUD-28Medir el portal de Foro, cuyo repositorio no está en el espacio de trabajo, para confirmar que no llama a las rutas de propuestas.
DUD-39Confirmar con 30 días de bitácora que nadie llama ProcessProductsMarketplace ni GetLastSentTimeBySKU.

También siguen abiertos: RSG-24, El apagado de P360 depende de que la publicación nueva ya esté operando; sin publicador no hay corte de propuestas.

Fuentes

  1. [D] trazabilidad/features/FT-PRD-09-contrato-propuestas-entrada-unica.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.