← Arquitectura por épica

FT-RAC-07 · Reportes, exportes, importes y búsquedas por atributos

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

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

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

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

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

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

Fuente. docs/arquitectura/por-epica/epicas/FT-RAC-07.json, generada con generar.py; la ficha de la épica es trazabilidad/features/FT-RAC-07-reportes-exportes-busquedas-atributos.md.

En 30 segundos

Los reportes del portal hoy piden los datos a P360 y se rompen al apagarlo; Gobierno de Producto lleva su lista de exportes en una hoja aparte, y contar productos por categoría tarda casi tres minutos por nivel. Esta épica hace de Reportes (MS-04) la salida de archivos del PIM: exportes de productos y categorías que se pueden reimportar, los reportes del portal, las herramientas de P360 y búsquedas con listas grandes, sin cargar la base que opera.

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

1. Dónde encaja

Recibe

DeQué
FT-PRD-01 · Modelo canónico de productoEl modelo de producto que se exporta: familia, variantes, valores por código, clasificaciones y dueño.
FT-CAT-01 · Administración del árbol de categorías webEl árbol web con niveles calculados y el estatus de cada categoría (vigente, desligada o vencida), y el perfil de carga de categorías para reimportar.
PE-C · Catálogo vigenteLas listas de valores para poner etiquetas a los códigos y los perfiles de carga de MS-01.
PE-T · Usuario con permisos y bitácoraQuien pide el exporte ya se identificó y sus permisos acotan lo que puede ver.

Entrega

AQué
PE-T · Usuario con permisos y bitácoraExportes, herramientas y búsquedas que respetan los permisos de quien los pide y dejan su trabajo y su archivo con huella.
FT-CAT-06 · Agrupadores y corrección masiva de categorías con…El exporte de las categorías de los productos por ID, listo para editarse e importarse en la corrección masiva.
FT-MIG-04 · Convivencia P360 ↔ nuevo PIMLos tres reportes del portal resueltos con datos del PIM, condición para apagar el backend de Entrada Única.

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

Nuevo PIM · un solo sistema

Pantallas y sistemas

Personas

Pedir un exporte
Estado y archivo de un exporte
y 3 más

POST /internal/product/exports/pages

Valores de una lista
Árbol de un sitio

Escribe el archivo con su huella

Mandar un aviso explícito

Subir una carga para validarla
Aplicar una carga validada

POST /api/v2/products/id-lists
Buscar productos

Responde totales agrupados por el cam…

Administración del catálogo

QA y Category

Compras

Entrada Única · Vendor Center

BFF del portal

★ MS-04 Reportes

MS-02 Producto

MS-01 Catálogo

MS-14 Avisos y ayuda

Base pim

Archivos e imágenes

Contexto de FT-RAC-07

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-14 Avisos y ayudaArchivosMS-01 CatálogoMS-02 ProductoBase·pimMS-04 ReportesEntrada Única · Vendor CenterMS-14 Avisos y ayudaArchivosMS-01 CatálogoMS-02 ProductoBase·pimMS-04 ReportesEntrada Única · Vendor CenterAdministración del catálogoBFF1. Elige filtro, columnas y vista por código y etiqueta2. Pide el exporte del filtroPOST /api/v2/exports3. Registra el trabajo en la cola4. Lee los productos por páginas desde la réplicaPOST /internal/product/exports/pages5. Trae las etiquetas de las listas, con cachéGET /api/v2/lovs/{id}/values6. Trae el estatus de cada categoría del productoGET /api/v2/categories/tree7. Escribe el archivo con su huella8. Avisa al usuario que su archivo está listoPOST /internal/notifications/messages9. Consulta el trabajo y baja el archivoGET /api/v2/exports/{jobId}10. Lista sus exportes recientesGET /api/v2/receipts?user=&from=&to=Administración del catálogoBFF
Flujo principal de FT-RAC-07
Los pasos en texto
PasoDeAQué haceAPI o evento
1Administración del catálogoEntrada Única · Vendor CenterElige filtro, columnas y vista por código y etiqueta—
2Entrada Única · Vendor CenterMS-04 Reportes (por el BFF)Pide el exporte del filtroAPI-04-001
3MS-04 ReportesBase pimRegistra el trabajo en la cola—
4MS-04 ReportesMS-02 ProductoLee los productos por páginas desde la réplicaAPI-02-121
5MS-04 ReportesMS-01 CatálogoTrae las etiquetas de las listas, con cachéAPI-01-007
6MS-04 ReportesMS-01 CatálogoTrae el estatus de cada categoría del productoAPI-01-039
7MS-04 ReportesArchivos e imágenes (almacén y CDN)Escribe el archivo con su huella—
8MS-04 ReportesMS-14 Avisos y ayudaAvisa al usuario que su archivo está listoAPI-14-005
9Entrada Única · Vendor CenterMS-04 Reportes (por el BFF)Consulta el trabajo y baja el archivoAPI-04-002
10Entrada Única · Vendor CenterMS-04 Reportes (por el BFF)Lista sus exportes recientesAPI-04-012

3.1 Exportar el árbol y reimportarlo

MS-02 ProductoMS-01 CatálogoMS-04 ReportesEntrada Única · Vendor CenterMS-02 ProductoMS-01 CatálogoMS-04 ReportesEntrada Única · Vendor CenterQA y CategoryBFF1. Exporta el árbol completo a Excel2. Pide el exporte CATEGORY_TREEPOST /api/v2/exports3. Lee el árbol con niveles, banderas y fechasGET /api/v2/categories/tree4. Cambia nombres y sube el archivo5. Valida la carga de categorías sin escribirPOST /api/v2/catalog-imports6. Confirma la carga por IDPOST /api/v2/catalog-imports/{id}/apply7. Pide categorías con sus productos ligadosPOST /api/v2/exports8. Lee los SKU de cada categoría con sus columnasPOST /internal/product/exports/pagesQA y CategoryBFF
Exportar el árbol y reimportarlo

3.2 Buscar con listas grandes y contar por categoría

MS-02 ProductoEntrada Única · Vendor CenterMS-02 ProductoEntrada Única · Vendor CenterAdministración del catálogoBFF1. Pega dos millones de SKU2. Registra la lista y la sube como archivoPOST /api/v2/products/id-lists3. Busca con la lista, negocio y estadoPOST /api/v2/products/search4. Responde totales agrupados por el campo elegido5. Filtra vestidos por atributos, sin usar la marca6. Busca por atributos de la plantillaPOST /api/v2/products/search7. Cuenta productos por nivel de categoríaPOST /api/v2/products/searchAdministración del catálogoBFF
Buscar con listas grandes y contar por categoría

3.3 Los reportes del portal y las herramientas de P360

MS-02 ProductoMS-04 ReportesEntrada Única · Vendor CenterMS-02 ProductoMS-04 ReportesEntrada Única · Vendor CenterComprasBFF1. Pide el reporte Familia con variantes2. Pide el exporte FAMILY_WITH_VARIANTSPOST /api/v2/exports3. Lee familias, variantes y CoordinadoIDSAPPOST /internal/product/exports/pages4. Ve éxito, faltante y falla del reporteGET /api/v2/exports/{jobId}5. Lista las herramientas que su rol permiteGET /api/v2/tools6. Corre Calcular excepciones sobre su selecciónPOST /api/v2/tools/{toolId}/runsComprasBFF
Los reportes del portal y las herramientas de P360

4. Si algo sale mal

  • El exporte pasa del límite de Excel. MS-04 responde 413 LIMIT_EXCEEDED y sugiere CSV; nunca entrega un archivo truncado.
  • MS-02 o MS-01 dejan de responder a media lectura. El trabajo se pausa y sigue desde el último cursor; si no se recupera, queda FAILED con lo leído y el motivo, y el usuario recibe el aviso en pantalla.
  • El archivo reimportado trae el ID de otro objeto o un ID que no existe. La carga de MS-01 rechaza ese renglón con su código y no confirma nada hasta corregirlo; ningún ID cambia.
  • Una categoría del producto está desligada o vencida. El exporte la conserva y la marca en su columna como desligada o vencida, para que Category la corrija.
  • El archivo ya venció (7 días). La descarga responde 404; el trabajo sigue en «mis exportes» y se pide otra vez.

5. APIs

Las que construye esta épica (7)

POST /api/v2/exports · Pedir un exporte
CampoValor
APIAPI-04-001 · MS-04 Reportes
Para quéPide un exporte en segundo plano: productos por filtro, selección o lista de hasta 2 millones; perfiles P5 y Masa madre; la configuración del catálogo con las columnas de su perfil de carga, para editarla y volverla a subir; árbol de categorías y categorías con sus productos; los tres reportes del portal; imágenes en ZIP; bitácora de envíos; resultado de acciones, o el cruce de visibles con una incidencia. Avisa por MS-14 cuando está listo.
En esta épicaPedir cualquier exporte, incluidos los reportes del portal y el árbol
Quién la llamaBFF del portal
PermisoENT-L para productos y CAT-L para catálogo y categorías, sobre lo que quien pide puede ver (proveedores y sellers, sólo lo suyo)
CabecerasAuthorization, X-Request-Id, Idempotency-Key
Escribe enreport_jobs
También la usanFT-CAT-06, FT-PLT-09, FT-RAC-08

Request

{
  "type": "PRODUCTS_FILTER",
  "filter": {
    "business": "MER",
    "status": "APROBADO",
    "templateId": "EU4-0412"
  },
  "idListRef": null,
  "columns": [
    "SKU",
    "EAN",
    "NOMBRE",
    "MARCA",
    "SECCION",
    "GRUPO_ARTICULOS",
    "COLOR",
    "CoordinadoIDSAP",
    "CATEGORIAS_WEB"
  ],
  "labels": "BOTH",
  "format": "XLSX"
}

Response · 202

{
  "success": true,
  "data": {
    "jobId": "job-rep-7c21",
    "status": "ACCEPTED",
    "links": {
      "self": "/api/v2/exports/job-rep-7c21"
    }
  }
}

Errores

HTTPCódigoCuándo
400VALIDATION_ERROREl tipo no existe o pide una columna que no existe en la plantilla
413LIMIT_EXCEEDEDUn Excel pasaría de 1,048,575 renglones; se pide en CSV
403AUTHORIZATION_ERRORQuien pide no tiene la capacidad de lectura del tipo de exporte
GET /api/v2/exports/{jobId} · Estado y archivo de un exporte
CampoValor
APIAPI-04-002 · MS-04 Reportes
Para quéDice cómo va un exporte y, al terminar, da el conteo de éxito, faltante y falla, el archivo con su huella SHA-256 y un enlace firmado de 10 minutos para bajarlo.
En esta épicaVer el avance, los conteos y bajar el archivo con su huella
Quién la llamaBFF del portal
PermisoQuien pidió el exporte
CabecerasAuthorization, X-Request-Id
ParámetrosjobId = job-rep-7c21
También la usanFT-RAC-08

Request

null

Response · 200

{
  "success": true,
  "data": {
    "jobId": "job-rep-7c21",
    "type": "PRODUCTS_FILTER",
    "state": "COMPLETED",
    "progress": {
      "completed": 18354,
      "total": 18354
    },
    "counts": {
      "ok": 18342,
      "missing": 12,
      "failed": 0
    },
    "artifacts": [
      {
        "artifactId": "art-01",
        "name": "exporte-productos-20261018.xlsx",
        "rows": 18342,
        "sha256": "9f2c41d0e7…",
        "bytes": 4823110,
        "download": "(enlace firmado de 10 minutos)"
      }
    ],
    "expiresAt": "2026-10-25T15:20:00Z"
  }
}

Errores

HTTPCódigoCuándo
404NOT_FOUNDEl trabajo no existe, no es de quien llama o su archivo ya venció
GET /api/v2/tools · Herramientas de P360
CampoValor
APIAPI-04-003 · MS-04 Reportes
Para quéLista las 7 herramientas y reportes que P360 tenía como diálogos (características por SKU, productos enviables, reporte de Foro, excepciones, datos por plantilla, productos y artículos, bitácora de envíos) y la exportación por perfil P5, sólo las que el rol de quien llama puede usar.
En esta épicaListar las herramientas de P360 que el rol puede usar
Quién la llamaBFF del portal
PermisoENT-L; cada herramienta pide además su capacidad
CabecerasAuthorization, X-Request-Id

Request

null

Response · 200

{
  "success": true,
  "data": {
    "items": [
      {
        "toolId": "SKU_VALUES",
        "name": "Exportar características por SKU",
        "input": "Lista de SKU; nivel producto, artículo o ambos",
        "requires": "ENT-L"
      },
      {
        "toolId": "CHECK_SENDABLE",
        "name": "Validar productos enviables",
        "input": "Productos seleccionados",
        "requires": "PUB-L"
      },
      {
        "toolId": "EXCEPTIONS",
        "name": "Calcular excepciones",
        "input": "Productos seleccionados",
        "requires": "GOBIERNO"
      }
    ]
  }
}

Errores

HTTPCódigoCuándo
403AUTHORIZATION_ERRORQuien llama no tiene lectura de productos
POST /api/v2/tools/{toolId}/runs · Correr una herramienta
CampoValor
APIAPI-04-004 · MS-04 Reportes
Para quéCorre una herramienta sobre una selección fija (hasta 1,000 registros o una lista) y deja el resultado como archivo; responde con el trabajo.
En esta épicaCorrer una herramienta sobre una selección fija
Quién la llamaBFF del portal
PermisoLa capacidad que pide cada herramienta
CabecerasAuthorization, X-Request-Id, Idempotency-Key
ParámetrostoolId = EXCEPTIONS
Escribe enreport_jobs

Request

{
  "ids": [
    "PRD-0004812",
    "PRD-0004813"
  ],
  "idListRef": null,
  "level": "BOTH",
  "frozenImages": true
}

Response · 202

{
  "success": true,
  "data": {
    "jobId": "job-rep-7c35",
    "status": "ACCEPTED",
    "links": {
      "self": "/api/v2/exports/job-rep-7c35"
    }
  }
}

Errores

HTTPCódigoCuándo
403AUTHORIZATION_ERROREl rol no tiene la capacidad de esa herramienta
422BUSINESS_ERRORCalcular excepciones con diccionarios de referencia sin sincronizar
400VALIDATION_ERRORMás de 1,000 registros sin lista o herramienta desconocida
GET /api/v2/receipts?user=&from=&to= · Mis trabajos de Reportes
CampoValor
APIAPI-04-012 · MS-04 Reportes
Para quéLista los exportes, herramientas y cálculos de tablero que pidió un usuario en un periodo, con su estado y su archivo. Los comprobantes de los demás módulos se ven en la pantalla del BFF que los junta (API-BFF-508).
En esta épicaMis exportes, herramientas y cálculos recientes
Quién la llamaBFF del portal
PermisoEl propio usuario; ACCESS-ADMIN para ver los de otro
CabecerasAuthorization, X-Request-Id
Parámetrosuser = USR-000231, from = 2026-10-11, to = 2026-10-18
También la usanFT-PLT-09

Request

null

Response · 200

{
  "success": true,
  "data": {
    "items": [
      {
        "jobId": "job-rep-7c21",
        "type": "PRODUCTS_FILTER",
        "state": "COMPLETED",
        "createdAt": "2026-10-18T15:12:00Z",
        "finishedAt": "2026-10-18T15:20:00Z",
        "artifacts": 1,
        "expiresAt": "2026-10-25T15:20:00Z"
      },
      {
        "jobId": "job-card-5521",
        "type": "DASHBOARD_CARD",
        "state": "COMPLETED",
        "createdAt": "2026-10-18T15:21:00Z",
        "finishedAt": "2026-10-18T15:21:40Z",
        "artifacts": 0,
        "expiresAt": null
      }
    ],
    "page": 1,
    "size": 50,
    "total": 2
  }
}

Errores

HTTPCódigoCuándo
403AUTHORIZATION_ERRORPide los trabajos de otro usuario sin ACCESS-ADMIN
POST /internal/product/exports/pages · Lectura masiva para Reportes: devuelve productos o variantes
CampoValor
APIAPI-02-121 · MS-02 Producto
Para quéLectura masiva para Reportes: devuelve productos o variantes por páginas de hasta 1,000, con las columnas pedidas, valores por código, clasificación, dueño, estado y estado por canal, leídos de la réplica de sólo lectura (nodo de analítica). Sigue con un cursor y fija la hora de corte.
En esta épicaLectura masiva de productos desde la réplica, por páginas
También la usanFT-RAC-04, FT-RAC-06, FT-RAC-08

Request

{
  "filter": {
    "business": "MER",
    "status": [
      "APROBADO"
    ],
    "templateId": "EU4-0412",
    "webCategoryId": null,
    "ownerId": null
  },
  "idListRef": null,
  "level": "VARIANT",
  "cursor": null,
  "pageSize": 1000,
  "columns": [
    "SKU",
    "EAN",
    "NOMBRE",
    "MARCA",
    "SECCION",
    "GRUPO_ARTICULOS",
    "COLOR",
    "CoordinadoIDSAP",
    "webCategoryIds",
    "deliveryStatus",
    "ENRIQUECIDO"
  ]
}

Response · 200

{
  "success": true,
  "data": {
    "asOf": "2026-10-18T15:12:03Z",
    "items": [
      {
        "productId": "PRD-0004812",
        "variantId": "VAR-0004812-01",
        "sku": "1000004812",
        "ean": "7501234567893",
        "ownerId": "PROV-0001",
        "values": {
          "NOMBRE": "Licuadora de 10 velocidades",
          "MARCA": "MARCA01",
          "SECCION": "2001",
          "GRUPO_ARTICULOS": "200105",
          "COLOR": "ROJO",
          "CoordinadoIDSAP": "CO-88120",
          "ENRIQUECIDO": true
        },
        "webCategoryIds": [
          "catst-000812"
        ],
        "deliveryStatus": {
          "TIENDA": "Publicado",
          "OMS": "Publicado"
        }
      }
    ],
    "nextCursor": "cur-7a01",
    "total": 18354
  }
}

Errores

HTTPCódigoCuándo
403AUTHORIZATION_ERRORQuien llama no tiene el permiso o no es el módulo autorizado
422VALIDATION_ERRORFalta un dato o viene con un formato inválido; el detalle dice qué campo
409IDEMPOTENCY_MISMATCHSe repite la llave de idempotencia con otro cuerpo
POST /api/v2/products/id-lists · Registra una lista grande de SKU, EAN o IDs de producto (has
CampoValor
APIAPI-02-122 · MS-02 Producto
Para quéRegistra una lista grande de SKU, EAN o IDs de producto (hasta 2 millones) que el usuario pega o sube como archivo, y da su referencia (idListRef) para la búsqueda y los exportes; al leerla, dice cuántos se reconocieron y cuántos no.
En esta épicaRegistrar una lista de hasta 2 millones de SKU o EAN
También la usanFT-RAC-08

Request

{
  "kind": "SKU",
  "source": "PASTE",
  "count": 2000000
}

Response · 201

{
  "success": true,
  "data": {
    "idListRef": "idl-55a1",
    "upload": "(enlace firmado de carga, vence en 15 minutos)",
    "maxIds": 2000000,
    "expiresAt": "2026-10-19T15:12:00Z"
  }
}

Errores

HTTPCódigoCuándo
403AUTHORIZATION_ERRORQuien llama no tiene el permiso o no es el módulo autorizado
422VALIDATION_ERRORFalta un dato o viene con un formato inválido; el detalle dice qué campo
409IDEMPOTENCY_MISMATCHSe repite la llave de idempotencia con otro cuerpo

Las que usa y construye otra épica (6)

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-007GET /api/v2/lovs/{id}/valuesEtiquetas de las listas para la vista por etiquetaFT-PLT-03 · Listas de valores y modelo canónico con equivalencias por…
API-01-039GET /api/v2/categories/treeEl árbol web con niveles y estatus de cada categoríaFT-CAT-01 · Administración del árbol de categorías web
API-01-031POST /api/v2/catalog-importsValidar la carga de categorías reimportadaFT-PLT-09 · Carga masiva de configuración de plantillas con…
API-01-032POST /api/v2/catalog-imports/{id}/applyConfirmar la carga de categorías por IDFT-PLT-09 · Carga masiva de configuración de plantillas con…
API-02-001POST /api/v2/products/searchBúsqueda por atributos, por listas y conteo por categoríaFT-PRD-01 · Modelo canónico de producto
API-14-005POST /internal/notifications/messagesAvisar que el archivo está listoFT-RAC-05 · Estatus del producto y motivos visibles para seller y…

6. Eventos

Consume

EventoPara quéQuién lo publica
catalog.governance.changed/LOV_VALUE_CHANGEDVaciar la caché de etiquetas de listas que usa la vista por etiquetaFT-INT-04, FT-PLT-03, FT-PLT-09, FT-REF-01
catalog.governance.changed/CATEGORY_UNLINKEDMarcar como desligada la categoría en los exportes siguientesFT-CAT-01

7. Datos

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

ColecciónDueñoQué guardaEsta épica
report_jobsMS-04Exportaciones y reportes asíncronos.escribe
report_jobsMS-04Exportaciones y reportes asíncronos.lee

8. Historias que cubre

HistoriaPrioridadCómo la cubre
FT-RAC-07·H1 · Exportar el árbol completo o parcial a Excel y reimportarloP1flujo «Exportar el árbol y reimportarlo»; API-01-031, API-01-032
FT-RAC-07·H2 · El reporte de categorías con sus productos ligadosP1flujo «Exportar el árbol y reimportarlo»; API-04-001
FT-RAC-07·H3 · Que los reportes del portal sigan funcionando después del corteP1flujo «Los reportes del portal y las herramientas de P360»; API-04-002
FT-RAC-07·H4 · Exports de productos con columnas por identificador, por etiqueta o ambasP1pasos 1, 2, 5, 7; API-04-001
FT-RAC-07·H5 · Ver CoordinadoIDSAP en mis reportesP2flujo «Los reportes del portal y las herramientas de P360»; API-02-121
FT-RAC-07·H6 · Buscar productos y contar por categoría sin esperasP2flujo «Buscar con listas grandes y contar por categoría»; API-02-001
FT-RAC-07·H7 · Consultar productos por atributos sin importar la marcaP3flujo «Buscar con listas grandes y contar por categoría»; API-02-001
FT-RAC-07·H8 · Buscar por listas masivasP1flujo «Buscar con listas grandes y contar por categoría»; API-02-122
FT-RAC-07·H9 · Exportar a Excel y CSVP1pasos 6, 7; API-01-039
FT-RAC-07·H10 · Reportes sobre una réplicaP2pasos 4; API-02-121
FT-RAC-07·H11 · Vista de KAMP3API-02-001. Fuera: Qué ve el KAM depende de P-28; se arranca con el rol KAM y sus sellers como alcance en MS-13 (D-RAC-07-6).

9. Decisiones de esta épica

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

  • D-RAC-07-1. Reportes no lee colecciones ajenas: los productos los lee por la lectura masiva interna de MS-02, que pagina desde la réplica de sólo lectura (nodo de analítica de la base), y el catálogo, las listas y las categorías por la API de MS-01, con una caché que vacían sus eventos. Así un reporte pesado no carga la base que opera. Por qué: Cada dato tiene un dueño y la historia H10 pide no afectar la operación; el dueño decide desde dónde lee. Se apoya en ADR-12, PD-05, PD-09.
  • D-RAC-07-2. GetReportFieldValues (API-04-013) no se construye. En R2 los tres reportes del portal (Familia con variantes, Estatus MKP y Estatus de propuestas) son tipos de exporte de MS-04 con el mismo conteo de éxito, faltante y falla de hoy. La historia de los 29,259 reportes generados en Entrada Única no se migra. Por qué: Sin capa de compatibilidad, la pantalla de reportes se cambia una sola vez al BFF y deja de depender de P360; los reportes viejos son fotos que se pueden volver a pedir. Se apoya en PD-30, ADR-06, DUD-31.
  • D-RAC-07-3. El exporte del árbol y el de categorías salen con las columnas del perfil de carga de categorías de MS-01 y el ID como llave, para reimportarlos por esa carga sin tocar ningún ID; si un renglón trae el ID de otro objeto, lo rechaza MS-01. Por qué: Así exportar y reimportar es un solo camino y el rechazo lo da quien es dueño de las categorías. Se apoya en PD-07, FT-CAT-01.
  • D-RAC-07-4. Una lista de hasta 2 millones de SKU o EAN se registra en MS-02, dueño de la búsqueda, y se cita por idListRef; Reportes la pasa tal cual a la búsqueda y a la lectura masiva. Por qué: Un solo dueño para las listas evita que la búsqueda y el exporte las lean distinto. Se apoya en DUD-31.
  • D-RAC-07-5. API-04-012 se queda con los trabajos de Reportes (exportes, herramientas y cálculos); su ruta base, /api/v2/receipts, debería llamarse /api/v2/report-jobs. Los comprobantes de todos los módulos se ven en la pantalla del BFF (API-BFF-508), que junta la bitácora y el recibo de cada dueño. Por qué: Reportes no puede leer los recibos de otros módulos sin duplicarlos. Se apoya en ADR-12.
  • D-RAC-07-6. El KAM es un rol de MS-13 cuyo alcance son sus sellers; ve el avance de sus sellers con la búsqueda de MS-02 por estado y dueño. Qué más ve y con qué jerarquía comercial queda abierto. Por qué: Con el rol y el alcance basta para arrancar sin construir una jerarquía comercial que nadie ha definido. Se apoya en P-28.
  • D-RAC-07-7. Los archivos no mienten: SKU, EAN e IDs como texto, fórmulas neutralizadas, Excel con su límite de renglones (si se pasa, 413 y se pide CSV), nunca se trunca, cada archivo lleva huella SHA-256 y se baja con un enlace firmado de 10 minutos; vence a los 7 días. Las listas salen por código, por etiqueta o ambas. Por qué: Un archivo truncado en silencio o con códigos convertidos a número es un dato falso con formato de dato. Se apoya en DUD-31, DEC-PRD-03.
  • D-RAC-07-8. La búsqueda por atributos, la búsqueda con listas y el conteo por nivel de categoría son de MS-02 (API-02-001 con sus conteos por valor); Reportes no tiene un índice propio de productos. La prueba del análisis por atributos se hace con la plantilla de vestidos. Por qué: Un segundo índice sería una copia del producto que nadie concilia. Se apoya en DEC-41, PD-09.

Qué falta decidir

IDQué falta
DUD-31Gobierno de Producto comparte su lista de exportes y el BA escribe la sección de búsquedas y logs en la ERF.
P-28Marketplace define qué ve el KAM y con qué jerarquía comercial.
PD-09Arquitectura decide si el análisis por atributos de largo plazo se hace en el DWH.

También siguen abiertos: PEN-44, Category define las reglas del reporte de categorías por niveles.

Fuentes

  1. [D] trazabilidad/features/FT-RAC-07-reportes-exportes-busquedas-atributos.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.