← Arquitectura por épica

FT-ACT-05 · Servicios para Foro Fotográfico

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-ACT-05: 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-ACT-05.json, generada con generar.py; la ficha de la épica es trazabilidad/features/FT-ACT-05-servicios-consulta-foro-fotografico.md.

En 30 segundos

Foro Fotográfico necesita saber qué fotografiar sin copiar el producto ni preguntarle a P360. Esta épica recibe la tarea Foro cuando el proveedor marcó que la foto la toma Liverpool, calcula tomar o no tomar por color, registra la llegada de cada muestra y arma la pantalla del fotógrafo; las fotos las sube el agente del estudio directo a Activos. También cubre el rescate y avisa si el producto cambió mientras estaba en el estudio.

  • Módulo dueño: MS-12 Estudio fotográfico. También participan: MS-02 Producto, MS-01 Catálogo, MS-11 Activos digitales, MS-13 Identidad y acceso.
  • Etapa 6 · Imágenes. Recibe «PE-6 · SKU asignado» y entrega «PE-7 · Imágenes listas».
  • APIs: construye 16 y usa 11 que construyen otras épicas.
  • Eventos: publica 4 y consume 9.

1. Dónde encaja

Recibe

DeQué
PE-6 · SKU asignadoLa familia con SKU y la tarea Foro abierta porque el proveedor marcó que la foto la toma Liverpool, o por rescate.
FT-ARQ-01 · Núcleo headlessLa lectura del producto por SKU o EAN con su familia (API-02-201), con la que el estudio trabaja sin copiar el producto.
FT-PLT-10 · Fachada v1 compatible con P360 para Entrada Única y ForoLa plantilla y sus listas de valores por la API de Catálogo y el BFF, en lugar de la copia de plantillas de Foro.
FT-FLU-07 · Excepciones de catalogación y preventas con publicación…La evaluación de excepciones de catalogación por lote de SKU (API-02-306), que deja en no tomar lo exceptuado.
FT-PRD-08 · Plazos de enriquecimiento de Mercaderías hasta la…Los SKU cuyo plazo de enriquecimiento venció, con la tarea Foro abierta por rescate y su fecha de recepción esperada, para planear el estudio.

Entrega

AQué
FT-ACT-06 · Recepción del trabajo de Foro y control de edición…Cada SKU con su decisión de toma, su muestra recibida, la toma cerrada con las fotos ya en Activos y la detección de cambios desde la entrada.
PE-7 · Imágenes listasSi hay existencia en tienda y las fotos del proveedor ya cumplen, la Carga de imagen cerrada sin esperar el rescate.
FT-MIG-03 · Migración inicial de productos desde P360La carga de las decisiones de tomar o no tomar migradas de P360, ya como valor de lista (API-12-013).

Tareas que abre o cierra: Foro: muestra, foto y enriquecimiento, Carga de imagen.

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

TASK_CHANGED
PRODUCT_UPDATED
y 1 más

POST /internal/product/products/by-sk…
Evaluar excepciones de un lote de SKU

Consulta por lote de Logística
Pantalla del fotógrafo

Tomar o no tomar por lote
Registrar la llegada de una muestra
y 3 más

SAMPLE_RECEIVED

SAMPLE_RECEIVED

Pedir permiso para subir un archivo
Avisar que terminó la carga

¿El producto cumple sus imágenes?

TASK_CHANGED

Galería de un producto

Pantalla del capturista

Pedir una acción del flujo
Confirmar un plan de Producto

Roles efectivos de quien llama

Vista efectiva de una plantilla por n…

permisos

Estudio fotográfico

Foro · portal del estudio

Entrada Única · Vendor Center

Agente del estudio

BFF del portal

★ MS-12 Estudio fotográfico

MS-02 Producto

MS-01 Catálogo

MS-11 Activos digitales

MS-13 Identidad y acceso

Base pim

Eventos

Contexto de FT-ACT-05

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-11 Activos digitalesAgente del estudioForo · portal del estudioBase·pimMS-02 ProductoMS-12 Estudio fotográficoEventosMS-11 Activos digitalesAgente del estudioForo · portal del estudioBase·pimMS-02 ProductoMS-12 Estudio fotográficoEventosEstudio fotográficoBFF1. Entrega la tarea Foro recién abiertaTASK_CHANGED2. Lee las variantes de los SKU por lotePOST /internal/product/products/by-skus3. Revisa las excepciones de catalogación del lotePOST /internal/product/catalog-exceptions/evaluations4. Decide tomar o no tomar por color y lo guarda5. Logística carga el CSV de SKU que llegaron6. Pide la consulta por lotePOST /bff/v1/studio/intake-lots7. Trae la decisión de cada SKUPOST /api/v2/studio/decisions8. Registra la llegada de cada muestraPOST /api/v2/studio/samples9. Avisa la muestra recibidaSAMPLE_RECEIVED10. Entrega la muestra, Foro pasa a «en el estudio»SAMPLE_RECEIVED11. Abre la pantalla del fotógrafo al escanearGET /bff/v1/studio/photo-session?code=12. Pide permiso y sube cada fotoPOST /api/v2/assets/uploads13. Avisa que la foto quedó cargadaPOST /api/v2/assets/{assetId}/complete14. Cierra la toma del colorPOST /api/v2/studio/work/{workId}/completeEstudio fotográficoBFF
Flujo principal de FT-ACT-05
Los pasos en texto
PasoDeAQué haceAPI o evento
1EventosMS-12 Estudio fotográficoEntrega la tarea Foro recién abiertacatalog.product.changed/TASK_CHANGED
2MS-12 Estudio fotográficoMS-02 ProductoLee las variantes de los SKU por loteAPI-02-119
3MS-12 Estudio fotográficoMS-02 ProductoRevisa las excepciones de catalogación del loteAPI-02-306
4MS-12 Estudio fotográficoBase pimDecide tomar o no tomar por color y lo guarda—
5Estudio fotográficoForo · portal del estudioLogística carga el CSV de SKU que llegaron—
6Foro · portal del estudioBFF del portalPide la consulta por loteAPI-BFF-402
7BFF del portalMS-12 Estudio fotográficoTrae la decisión de cada SKUAPI-12-002
8Foro · portal del estudioMS-12 Estudio fotográfico (por el BFF)Registra la llegada de cada muestraAPI-12-003
9MS-12 Estudio fotográficoEventosAvisa la muestra recibidacatalog.studio.changed/SAMPLE_RECEIVED
10EventosMS-02 ProductoEntrega la muestra; Foro pasa a «en el estudio»catalog.studio.changed/SAMPLE_RECEIVED
11Foro · portal del estudioBFF del portalAbre la pantalla del fotógrafo al escanearAPI-BFF-401
12Agente del estudioMS-11 Activos digitalesPide permiso y sube cada fotoAPI-11-004
13Agente del estudioMS-11 Activos digitalesAvisa que la foto quedó cargadaAPI-11-005
14Foro · portal del estudioMS-12 Estudio fotográfico (por el BFF)Cierra la toma del colorAPI-12-007

3.1 Rescate y existencia en tienda

Entrada Única · Vendor CenterMS-12 Estudio fotográficoEventosBase·pimMS-11 Activos digitalesMS-02 ProductoEntrada Única · Vendor CenterMS-12 Estudio fotográficoEventosBase·pimMS-11 Activos digitalesMS-02 ProductoEstudio fotográficoBFF1. Al vencer el plazo, revisa las fotos del proveedorGET /api/v2/assets/compliance?productId=&stage=2. Con existencia en tienda y mínimo, cierra la carga3. Si no, abre Foro por rescateTASK_CHANGED4. Entrega la tarea Foro de rescateTASK_CHANGED5. Revisa qué colores ya tienen fotoGET /api/v2/assets?productId=&variantId=6. Arma el trabajo: sólo captura o toma completa7. Rescata a mano otro producto o deshace un rescate8. Pide el plan RESCUE o UNDO_RESCUEPOST /api/v2/workflow/actions/plans9. Confirma la acciónPOST /api/v2/product-plans/{planId}/applyEstudio fotográficoBFF
Rescate y existencia en tienda

3.2 Logística cambia un SKU de no tomar a tomar

Base·pimMS-13 Identidad y accesoMS-12 Estudio fotográficoForo · portal del estudioBase·pimMS-13 Identidad y accesoMS-12 Estudio fotográficoForo · portal del estudioEstudio fotográficoBFF1. El jefe de logística elige un SKU en no tomar2. Pide pasarlo a tomar con su motivoPOST /api/v2/studio/decisions/overrides3. Revisa que tenga el rol para cambiarloGET /internal/identity/permissions?userId=4. Cambia la decisión y guarda quién y por qué5. La siguiente consulta ya lo trae como tomarPOST /api/v2/studio/decisionsEstudio fotográficoBFF
Logística cambia un SKU de no tomar a tomar

3.3 El producto cambió desde que entró al estudio

MS-01 CatálogoEntrada Única · Vendor CenterBase·pimMS-12 Estudio fotográficoEventosMS-01 CatálogoEntrada Única · Vendor CenterBase·pimMS-12 Estudio fotográficoEventosEstudio fotográficoBFF1. Entrega el cambio de marca que mandó SAPPRODUCT_UPDATED2. Marca el trabajo: cambió desde que entró3. Entrega el cambio de la vista de su plantillaTEMPLATE_VIEW_CHANGED4. El capturista abre su pantalla5. Pide la pantalla con los datos no editablesGET /bff/v1/studio/capture/{workId}6. Trae qué cambió desde la entradaGET /api/v2/studio/work/{workId}/changes7. Vuelve a pedir la vista efectiva y sus listasGET /api/v2/taxonomies/PRODUCT/nodes/{id}/effectiveEstudio fotográficoBFF
El producto cambió desde que entró al estudio

4. Si algo sale mal

  • Un SKU del CSV no existe o su producto no tiene plantilla. El lote lo marca «no existe» o «error» con el motivo «plantilla o campos requeridos»; logística aparta la muestra y el estudio puede regresar el producto a Gobierno de Datos (FT-ACT-06). Los demás SKU siguen.
  • MS-02 o MS-01 no responden al calcular tomar o no tomar. No se guarda ninguna decisión a medias: el evento se vuelve a entregar y la consulta por lote responde 503 con la opción de reintentar con la misma llave.
  • Llega una muestra de un SKU en no tomar. Se registra igual, pasa a salida y envío y sale con vale (API-12-005); al salir del estudio se avisa SAMPLE_RETURNED.
  • Se cancela el producto mientras está en el estudio. MS-12 recibe el cambio de estado, cierra el trabajo y logística devuelve la muestra con su vale; el fotógrafo ya no lo ve en su bandeja.
  • El agente del estudio pierde la red a mitad de la toma. Reintenta cada foto con la misma llave de idempotencia; la toma sigue abierta y no se puede cerrar hasta que lleguen las fotos del color.

5. APIs

Las que construye esta épica (16)

GET /api/v2/studio/work?state=&assignee= · Bandeja del estudio
CampoValor
APIAPI-12-001 · MS-12 Estudio fotográfico
Para quéLista el trabajo del estudio por SKU: lo que espera muestra, lo que toca fotografiar, editar o capturar, con quién lo tiene asignado, si es un rescate y si el producto cambió desde que entró. MS-12 guarda sólo el identificador de cada persona; el BFF le pone el nombre con el directorio (MS-13).
En esta épicaLa bandeja del estudio por paso, persona y SKU
Quién la llamaBFF del portal
PermisoPerfiles del estudio (logística, fotógrafo, editor, capturista y jefe del estudio); cada quien ve lo de su paso
CabecerasAuthorization, X-Request-Id
Parámetrosstate = TO_EDIT, assignee = me, sku = `, business = MER, page = 1, size = 50`
También la usanFT-ACT-06

Request

null

Response · 200

{
  "success": true,
  "data": {
    "items": [
      {
        "workId": "wrk-50a1",
        "sku": "1000004812",
        "productId": "PRD-0004812",
        "variantId": "VAR-0004812-01",
        "colorCode": "AZUL",
        "origin": "FORO",
        "decision": "TOMAR",
        "videoRequired": false,
        "step": "EDITION",
        "state": "TO_EDIT",
        "assignee": {
          "userId": "usr-7f20",
          "role": "EDITOR"
        },
        "sample": {
          "sampleId": "mst-20811",
          "location": "Estudio · set 2"
        },
        "changedSinceEntry": false,
        "enteredAt": "2026-10-18T15:10:00Z",
        "dueAt": "2026-10-19T15:10:00Z"
      }
    ],
    "page": 1,
    "size": 50,
    "total": 1
  }
}

Errores

HTTPCódigoCuándo
400VALIDATION_ERRORUn filtro trae un valor que no existe
POST /api/v2/studio/decisions · Tomar o no tomar por lote
CampoValor
APIAPI-12-002 · MS-12 Estudio fotográfico
Para quéPara hasta 500 SKU dice si se fotografían: excepción de catalogación (todo no tomar, con la evaluación por lote de MS-02, API-02-306), variantes configuradas (si no, error de talla no configurada), una representante por color por fecha de admisión (tomar) y las demás heredan (no tomar), y si la plantilla pide video (diccionarios de MS-01, API-01-012). Lee las variantes de MS-02 por lote; no guarda copia del producto, sólo su decisión con la versión que usó, que se calcula una vez y no se sobrescribe. Distingue los SKU que no existen y los productos con error.
En esta épicaTomar o no tomar por lote, con su motivo, distinguiendo no existe y error
Quién la llamaBFF del portal
PermisoLogística del estudio y jefe del estudio
CabecerasAuthorization, X-Request-Id, Idempotency-Key
Escribe enstudio_work
También la usanFT-FLU-07

Request

{
  "lotId": "lote-20261018-03",
  "source": "CSV",
  "skus": [
    "1000004812",
    "1000004813",
    "1000009999",
    "1000007770"
  ]
}

Response · 200

{
  "success": true,
  "data": {
    "lotId": "lote-20261018-03",
    "summary": {
      "TOMAR": 1,
      "NO_TOMAR": 1,
      "NO_EXISTE": 1,
      "ERROR": 1
    },
    "items": [
      {
        "sku": "1000004812",
        "productId": "PRD-0004812",
        "variantId": "VAR-0004812-01",
        "colorCode": "AZUL",
        "decision": "TOMAR",
        "reason": "REPRESENTANTE_DEL_COLOR",
        "videoRequired": false,
        "decidedAt": "2026-10-18T15:01:00Z",
        "productVersion": 6
      },
      {
        "sku": "1000004813",
        "productId": "PRD-0004812",
        "variantId": "VAR-0004812-02",
        "colorCode": "AZUL",
        "decision": "NO_TOMAR",
        "reason": "HEREDA_DEL_COLOR",
        "representativeSku": "1000004812",
        "decidedAt": "2026-10-18T15:01:00Z"
      },
      {
        "sku": "1000009999",
        "decision": "NO_EXISTE",
        "reason": "SKU_NO_EXISTE"
      },
      {
        "sku": "1000007770",
        "productId": "PRD-0007770",
        "decision": "ERROR",
        "reason": "PLANTILLA_O_REQUERIDOS",
        "message": "El producto no tiene plantilla o le faltan campos requeridos"
      }
    ]
  }
}

Errores

HTTPCódigoCuándo
422VALIDATION_ERROREl lote trae más de 500 SKU o un SKU con formato inválido
503DEPENDENCY_UNAVAILABLEMS-02 o MS-01 no responden; no se guarda ninguna decisión a medias y se puede reintentar con la misma llave
POST /api/v2/studio/samples · Registrar la llegada de una muestra
CampoValor
APIAPI-12-003 · MS-12 Estudio fotográfico
Para quéLogística escanea la muestra al llegar (por EAN, SKU, contenedor o caja) y queda registrada con su lugar. Si el SKU es tomar, pasa a la cola de toma; si es no tomar, a salida y envío. Avisa a Producto con SAMPLE_RECEIVED para que la tarea Foro pase de «esperando la muestra» a «en el estudio».
En esta épicaRegistrar la llegada de una muestra
Quién la llamaBFF del portal
PermisoLogística del estudio
CabecerasAuthorization, X-Request-Id, Idempotency-Key
Escribe enstudio_samples, studio_work, studio_outbox
Publicacatalog.studio.changed/SAMPLE_RECEIVED

Request

{
  "code": "7501234567893",
  "codeType": "EAN",
  "lotId": "lote-20261018-03",
  "entry": "MUESTRAS",
  "containerId": "CONT-0012",
  "boxId": "CAJA-0045"
}

Response · 201

{
  "success": true,
  "data": {
    "sampleId": "mst-20811",
    "sku": "1000004812",
    "productId": "PRD-0004812",
    "workId": "wrk-50a1",
    "decision": "TOMAR",
    "nextStep": "SHOT",
    "location": "Recepción del estudio",
    "receivedAt": "2026-10-18T15:10:00Z"
  }
}

Errores

HTTPCódigoCuándo
404NOT_FOUNDEl código no corresponde a ningún SKU
422BUSINESS_ERRORLa muestra ya se había recibido o el SKU no tiene una tarea Foro abierta
GET /api/v2/studio/samples/{sampleId} · Recorrido de una muestra
CampoValor
APIAPI-12-004 · MS-12 Estudio fotográfico
Para quéEl recorrido físico de una muestra: cuándo llegó, en qué contenedor, caja o tarima estuvo, quién la fotografió y cuándo salió y con qué vale.
En esta épicaEl recorrido físico de una muestra
Quién la llamaBFF del portal
PermisoPerfiles del estudio
CabecerasAuthorization, X-Request-Id
ParámetrossampleId = mst-20811

Request

null

Response · 200

{
  "success": true,
  "data": {
    "sampleId": "mst-20811",
    "sku": "1000004812",
    "status": "IN_STUDIO",
    "journey": [
      {
        "at": "2026-10-18T15:10:00Z",
        "event": "RECEIVED",
        "location": "Recepción del estudio",
        "containerId": "CONT-0012",
        "boxId": "CAJA-0045"
      },
      {
        "at": "2026-10-18T15:40:00Z",
        "event": "MOVED",
        "location": "Estudio · set 2"
      },
      {
        "at": "2026-10-18T16:02:00Z",
        "event": "SHOT_DONE",
        "by": {
          "userId": "usr-3a91",
          "role": "PHOTOGRAPHER"
        }
      }
    ]
  }
}

Errores

HTTPCódigoCuándo
404NOT_FOUNDLa muestra no existe
POST /api/v2/studio/logistics/movements · Mover muestras, cajas y tarimas
CampoValor
APIAPI-12-005 · MS-12 Estudio fotográfico
Para quéRegistra los movimientos físicos del estudio: acomodar en contenedores, cajas y tarimas, mandar a una tienda, sacar con vale y devolver. Cuando una muestra sale del estudio avisa SAMPLE_RETURNED.
En esta épicaMovimientos de contenedores, cajas y tarimas, salidas con vale y devoluciones
Quién la llamaBFF del portal
PermisoLogística del estudio
CabecerasAuthorization, X-Request-Id, Idempotency-Key
Escribe enstudio_logistics, studio_samples, studio_outbox
Publicacatalog.studio.changed/SAMPLE_RETURNED

Request

{
  "type": "EXIT_WITH_VOUCHER",
  "sampleIds": [
    "mst-20811"
  ],
  "boxId": "CAJA-0045",
  "to": {
    "type": "STORE",
    "id": "TIENDA-0021"
  },
  "voucher": "VALE-2026-0915"
}

Response · 200

{
  "success": true,
  "data": {
    "movementId": "mov-7d10",
    "moved": 1,
    "samples": [
      {
        "sampleId": "mst-20811",
        "status": "RETURNED"
      }
    ]
  }
}

Errores

HTTPCódigoCuándo
422BUSINESS_ERRORLa muestra todavía tiene la toma abierta o el vale ya se usó
404NOT_FOUNDUna muestra, caja o tienda no existe
POST /api/v2/studio/work/{workId}/complete · Cerrar un paso del estudio
CampoValor
APIAPI-12-007 · MS-12 Estudio fotográfico
Para quéCierra la toma, la edición o la captura. La toma se cierra cuando el agente ya subió las fotos del color; la edición, cuando cada variante tiene su principal propia o heredada (revisa con Activos, API-11-014); la captura, cuando el producto ya no tiene faltantes en las secciones del estudio (revisa con el candado de MS-02, API-02-101). Avisa con SHOT_COMPLETED, EDITION_COMPLETED o CAPTURE_COMPLETED; con este último, MS-02 cierra la tarea Foro. MS-12 nunca cambia el estado del producto.
En esta épicaCerrar la toma, la edición o la captura
Quién la llamaBFF del portal
PermisoLa persona asignada al paso o el jefe del estudio
CabecerasAuthorization, X-Request-Id, Idempotency-Key, If-Match
ParámetrosworkId = wrk-50a1
Escribe enstudio_work, studio_outbox
Publicacatalog.studio.changed/SHOT_COMPLETED, catalog.studio.changed/EDITION_COMPLETED, catalog.studio.changed/CAPTURE_COMPLETED
También la usanFT-ACT-06

Request

{
  "step": "CAPTURE",
  "version": 9,
  "acknowledgedChanges": []
}

Response · 200

{
  "success": true,
  "data": {
    "workId": "wrk-50a1",
    "step": "CAPTURE",
    "status": "DONE",
    "nextStep": null,
    "version": 10,
    "notified": "catalog.studio.changed/CAPTURE_COMPLETED"
  }
}

Errores

HTTPCódigoCuándo
422BUSINESS_ERRORNo se subió ninguna foto de la toma, a una variante le falta la principal o a la captura le faltan datos de las secciones del estudio (la respuesta dice cuáles)
409VERSION_CONFLICTEl producto cambió desde que entró al estudio y hay cambios sin revisar
403AUTHORIZATION_ERRORQuien llama no tiene asignado el paso
503DEPENDENCY_UNAVAILABLEActivos o Producto no respondieron la revisión; el paso sigue abierto y se puede reintentar con la misma llave
GET /api/v2/studio/config · Configuración del estudio
CampoValor
APIAPI-12-008 · MS-12 Estudio fotográfico
Para quéLa guía de fotos por plantilla, tipo de producto, marca y mundo (qué tomas y si lleva modelo), los grupos de modelos, la capacidad por fotógrafo, los tiempos de edición y captura y la configuración de la edición con IA.
En esta épicaLa guía de fotos por plantilla, tipo de producto, marca y mundo, los modelos y la capacidad
Quién la llamaBFF del portal
PermisoPerfiles del estudio
CabecerasAuthorization, X-Request-Id
Parámetrossection = guides

Request

null

Response · 200

{
  "success": true,
  "data": {
    "version": 7,
    "guides": [
      {
        "guideId": "GUIA-CAMISA-HOMBRE",
        "appliesTo": {
          "templates": [
            "EU4-0412"
          ],
          "world": "MODA_HOMBRE",
          "productType": "CAMISA"
        },
        "shots": [
          {
            "position": 1,
            "assetType": "PRINCIPAL",
            "angle": "FRENTE"
          },
          {
            "position": 2,
            "assetType": "DETALLE",
            "angle": "ESPALDA"
          },
          {
            "position": 3,
            "assetType": "DETALLE",
            "angle": "CUELLO"
          }
        ],
        "model": {
          "required": true,
          "pool": "MODELOS-HOMBRE-MER"
        }
      }
    ],
    "capacity": [
      {
        "userId": "usr-3a91",
        "role": "PHOTOGRAPHER",
        "shotsPerDay": 120
      }
    ],
    "times": {
      "editionHours": 24,
      "captureHours": 48
    },
    "aiEdition": {
      "enabled": true,
      "whiteBackground": true,
      "crop": true
    }
  }
}

Errores

HTTPCódigoCuándo
400VALIDATION_ERRORLa sección pedida no existe
PUT /api/v2/studio/config · Cambiar la configuración del estudio
CampoValor
APIAPI-12-009 · MS-12 Estudio fotográfico
Para quéCambia una sección de la configuración del estudio (guías, modelos, capacidad, tiempos o edición con IA) contra la versión que se leyó.
En esta épicaCambiar la guía, la capacidad o los tiempos
Quién la llamaBFF del portal
PermisoJefe del estudio
CabecerasAuthorization, X-Request-Id, Idempotency-Key, If-Match
Escribe enstudio_config

Request

{
  "version": 7,
  "section": "capacity",
  "items": [
    {
      "userId": "usr-3a91",
      "role": "PHOTOGRAPHER",
      "shotsPerDay": 140
    }
  ]
}

Response · 200

{
  "success": true,
  "data": {
    "version": 8,
    "section": "capacity",
    "changed": 1
  }
}

Errores

HTTPCódigoCuándo
409VERSION_CONFLICTLa configuración cambió desde que se leyó
422VALIDATION_ERRORUna guía apunta a una plantilla que no existe o un usuario no tiene el rol del estudio
GET /api/v2/studio/work/{workId}/changes · ¿Cambió el producto desde que entró al estudio?
CampoValor
APIAPI-12-010 · MS-12 Estudio fotográfico
Para quéCompara la versión del producto y de la vista efectiva de su plantilla con las que tenía al entrar al estudio y lista qué cambió (por ejemplo, la marca que mandó SAP) para que el estudio vuelva a pedir atributos, plantilla y listas. MS-12 se entera por eventos; no consulta cada 30 minutos ni copia el producto.
En esta épicaQué cambió del producto o de su plantilla desde que entró al estudio
Quién la llamaBFF del portal
PermisoPerfiles del estudio
CabecerasAuthorization, X-Request-Id
ParámetrosworkId = wrk-50a1

Request

null

Response · 200

{
  "success": true,
  "data": {
    "workId": "wrk-50a1",
    "enteredAt": "2026-10-18T15:10:00Z",
    "changed": true,
    "entry": {
      "productVersion": 6,
      "templateViewVersion": 7
    },
    "current": {
      "productVersion": 8,
      "templateViewVersion": 7
    },
    "changes": [
      {
        "changeId": "chg-0192",
        "at": "2026-10-20T10:12:00Z",
        "kind": "PRODUCT",
        "paths": [
          "attributes.MARCA"
        ],
        "origin": "SAP"
      }
    ],
    "mustReload": [
      "PRODUCTO",
      "ATRIBUTOS"
    ]
  }
}

Errores

HTTPCódigoCuándo
404NOT_FOUNDEl trabajo no existe
GET /api/v2/studio/work/{workId} · Detalle de un trabajo del estudio
CampoValor
APIAPI-12-011 · MS-12 Estudio fotográfico
Para quéUn trabajo del estudio con su decisión, su muestra, su paso, quién lo tiene y la guía de fotos y el modelo que le tocan según su plantilla, tipo de producto, marca y mundo; la regla que elige la guía vive aquí, no en la pantalla.
En esta épicaEl trabajo con la guía y el modelo que le tocan
Quién la llamaBFF del portal
PermisoPerfiles del estudio
CabecerasAuthorization, X-Request-Id
ParámetrosworkId = wrk-50a1

Request

null

Response · 200

{
  "success": true,
  "data": {
    "workId": "wrk-50a1",
    "sku": "1000004812",
    "productId": "PRD-0004812",
    "variantId": "VAR-0004812-01",
    "colorCode": "AZUL",
    "decision": "TOMAR",
    "videoRequired": false,
    "origin": "FORO",
    "step": "SHOT",
    "state": "TO_SHOOT",
    "sample": {
      "sampleId": "mst-20811",
      "location": "Estudio · set 2"
    },
    "assignee": {
      "userId": "usr-3a91",
      "role": "PHOTOGRAPHER"
    },
    "guide": {
      "guideId": "GUIA-CAMISA-HOMBRE",
      "shots": [
        {
          "position": 1,
          "assetType": "PRINCIPAL",
          "angle": "FRENTE"
        },
        {
          "position": 2,
          "assetType": "DETALLE",
          "angle": "ESPALDA"
        }
      ],
      "model": {
        "required": true,
        "pool": "MODELOS-HOMBRE-MER",
        "chosen": "MOD-0042"
      }
    },
    "entry": {
      "productVersion": 6,
      "templateViewVersion": 7
    },
    "version": 3
  }
}

Errores

HTTPCódigoCuándo
404NOT_FOUNDEl trabajo no existe
POST /api/v2/studio/decisions/overrides · Cambiar un SKU de no tomar a tomar
CampoValor
APIAPI-12-012 · MS-12 Estudio fotográfico
Para quéEl jefe de logística pasa uno o varios SKU de no tomar a tomar, con su motivo; queda quién y cuándo, y la siguiente consulta ya lo trae como tomar. No se puede pasar de tomar a no tomar si la toma ya empezó.
En esta épicaPasar un SKU de no tomar a tomar con motivo
Quién la llamaBFF del portal
PermisoJefe de logística o jefe del estudio (rol del directorio, MS-13)
CabecerasAuthorization, X-Request-Id, Idempotency-Key
Escribe enstudio_work

Request

{
  "items": [
    {
      "sku": "1000004813",
      "to": "TOMAR",
      "reason": "La talla grande trae un estampado distinto"
    }
  ]
}

Response · 200

{
  "success": true,
  "data": {
    "items": [
      {
        "sku": "1000004813",
        "from": "NO_TOMAR",
        "to": "TOMAR",
        "changedBy": "usr-1c88",
        "changedAt": "2026-10-18T15:20:00Z"
      }
    ]
  }
}

Errores

HTTPCódigoCuándo
403AUTHORIZATION_ERRORQuien llama no tiene el rol para cambiar decisiones
422BUSINESS_ERROREl SKU no tiene decisión todavía o se intenta pasar a no tomar con la toma iniciada
POST /internal/studio/bulk-load/decisions · Carga de decisiones migradas
CampoValor
APIAPI-12-013 · MS-12 Estudio fotográfico
Para quéMS-03 carga las decisiones de tomar o no tomar que hoy guarda P360 (siete grafías en texto libre) y MS-12 las deja como un valor de su lista cerrada, con su motivo y su fecha. Lo que no se puede traducir queda como incidencia. No publica eventos.
En esta épicaCargar las decisiones migradas de P360 como valor de lista
Quién la llamaMS-03 Migración y convivencia
PermisoSólo MS-03 (cuenta de servicio)
CabecerasAuthorization, X-Request-Id, Idempotency-Key
Escribe enstudio_work
También la usanFT-MIG-03

Request

{
  "runId": "mig-run-0009",
  "items": [
    {
      "sku": "1000001234",
      "legacyValue": "No Tomar",
      "legacyReason": "Excepción por sección",
      "legacyVideo": "N",
      "decidedAt": "2025-03-02T00:00:00Z"
    },
    {
      "sku": "1000001235",
      "legacyValue": "TOMADO",
      "legacyVideo": "N",
      "decidedAt": "2025-03-02T00:00:00Z"
    }
  ]
}

Response · 200

{
  "success": true,
  "data": {
    "runId": "mig-run-0009",
    "loaded": 2,
    "normalized": [
      {
        "legacyValue": "No Tomar",
        "decision": "NO_TOMAR",
        "reason": "EXCEPCION_CATALOGACION"
      },
      {
        "legacyValue": "TOMADO",
        "decision": "NO_TOMAR",
        "reason": "YA_FOTOGRAFIADO"
      }
    ],
    "issues": []
  }
}

Errores

HTTPCódigoCuándo
409IDEMPOTENCY_MISMATCHEl mismo lote llega otra vez con contenido distinto
GET /bff/v1/studio/photo-session?code= · Pantalla del fotógrafo
CampoValor
APIAPI-BFF-401 · BFF del portal
Para quéCuando el fotógrafo escanea una muestra, junta en una sola respuesta lo que necesita para la toma: el producto y las otras tallas de su color a partir del EAN o SKU escaneado (MS-02, API-02-201), el trabajo y la guía de fotos que le tocan (MS-12, API-12-001 por SKU y API-12-011) y las imágenes que ya tiene para no repetirlas (MS-11, API-11-007). No guarda nada ni decide reglas: la guía la elige MS-12. Las fotos no pasan por aquí: las sube el agente del estudio directo a Activos.
En esta épicaLa pantalla del fotógrafo: producto, guía del estudio e imágenes
Quién la llamaForo · portal del estudio (por el BFF)
PermisoPermiso de pantalla «Toma» (fotógrafo o jefe del estudio), con los roles del directorio; cada módulo vuelve a validar el token y sus permisos de dominio
CabecerasAuthorization, X-Request-Id
Parámetroscode = 7501234567893

Request

null

Response · 200

{
  "success": true,
  "data": {
    "code": "7501234567893",
    "sku": "1000004812",
    "work": {
      "workId": "wrk-50a1",
      "decision": "TOMAR",
      "videoRequired": false,
      "step": "SHOT",
      "state": "TO_SHOOT",
      "sample": {
        "sampleId": "mst-20811",
        "location": "Estudio · set 2"
      }
    },
    "product": {
      "productId": "PRD-0004812",
      "name": "Camisa manga larga de algodón",
      "brand": "MARCA01",
      "template": "EU4-0412",
      "business": "MER",
      "colorCode": "AZUL",
      "size": "CH"
    },
    "sameColor": [
      {
        "variantId": "VAR-0004812-02",
        "sku": "1000004813",
        "size": "G"
      },
      {
        "variantId": "VAR-0004812-03",
        "sku": "1000004814",
        "size": "XG"
      }
    ],
    "guide": {
      "guideId": "GUIA-CAMISA-HOMBRE",
      "shots": [
        {
          "position": 1,
          "assetType": "PRINCIPAL",
          "angle": "FRENTE"
        },
        {
          "position": 2,
          "assetType": "DETALLE",
          "angle": "ESPALDA"
        },
        {
          "position": 3,
          "assetType": "DETALLE",
          "angle": "CUELLO"
        }
      ],
      "model": {
        "required": true,
        "chosen": "MOD-0042"
      }
    },
    "existingImages": [],
    "upload": {
      "via": "AGENTE",
      "message": "Las fotos las sube el agente del estudio a Activos al disparar la cámara"
    }
  }
}

Errores

HTTPCódigoCuándo
404NOT_FOUNDEl código no corresponde a ninguna muestra recibida en el estudio
422BUSINESS_ERROREl SKU es no tomar: la pantalla manda la muestra a salida y envío
503DEPENDENCY_UNAVAILABLEUn módulo no respondió; la pantalla dice cuál y no completa con datos viejos
POST /bff/v1/studio/intake-lots · Consulta por lote de Logística
CampoValor
APIAPI-BFF-402 · BFF del portal
Para quéLogística carga el CSV de SKU que llegaron y ve, por SKU, si es tomar, no tomar, no existe o error, junto con sus atributos de SAP y de internet. Junta la decisión de MS-12 (API-12-002) con los datos del producto de MS-02 (API-02-001 con la lista de SKU), separados por el grupo de cada atributo. El BFF no calcula la decisión ni guarda el lote.
En esta épicaLa consulta por lote de Logística con atributos de SAP y de internet
Quién la llamaForo · portal del estudio (por el BFF)
PermisoPermiso de pantalla «Recepción de muestras» (logística o jefe del estudio)
CabecerasAuthorization, X-Request-Id, Idempotency-Key

Request

{
  "lotId": "lote-20261018-03",
  "skus": [
    "1000004812",
    "1000004813",
    "1000009999",
    "1000007770"
  ]
}

Response · 200

{
  "success": true,
  "data": {
    "lotId": "lote-20261018-03",
    "summary": {
      "TOMAR": 1,
      "NO_TOMAR": 1,
      "NO_EXISTE": 1,
      "ERROR": 1
    },
    "items": [
      {
        "sku": "1000004812",
        "decision": "TOMAR",
        "reason": "REPRESENTANTE_DEL_COLOR",
        "product": {
          "productId": "PRD-0004812",
          "name": "Camisa manga larga de algodón",
          "brand": "MARCA01",
          "template": "EU4-0412",
          "business": "MER"
        },
        "sapAttributes": {
          "SECCION": "CAMISAS HOMBRE",
          "GRUPO_ARTICULO": "0412",
          "COLOR": "AZUL",
          "TALLA": "CH"
        },
        "internetAttributes": {
          "MATERIAL": "Algodón",
          "TIPO_CUELLO": "Clásico",
          "MANGA": "Larga"
        }
      },
      {
        "sku": "1000004813",
        "decision": "NO_TOMAR",
        "reason": "HEREDA_DEL_COLOR",
        "product": {
          "productId": "PRD-0004812",
          "name": "Camisa manga larga de algodón",
          "brand": "MARCA01",
          "template": "EU4-0412",
          "business": "MER"
        }
      },
      {
        "sku": "1000009999",
        "decision": "NO_EXISTE",
        "reason": "SKU_NO_EXISTE"
      },
      {
        "sku": "1000007770",
        "decision": "ERROR",
        "reason": "PLANTILLA_O_REQUERIDOS",
        "message": "El producto no tiene plantilla o le faltan campos requeridos"
      }
    ]
  }
}

Errores

HTTPCódigoCuándo
422VALIDATION_ERROREl CSV trae más de 500 SKU o ninguno
503DEPENDENCY_UNAVAILABLEMS-12 o MS-02 no respondieron; la pantalla ofrece reintentar el lote
GET /bff/v1/studio/capture/{workId} · Pantalla del capturista
CampoValor
APIAPI-BFF-404 · BFF del portal
Para quéPantalla del capturista en el módulo M6: junta el producto con todas las variantes de su estilo (MS-02, API-02-002 y API-02-003), qué grupos de campos puede editar el estudio y cuáles no, como SKU, marca y talla (MS-02, API-02-027), qué le falta para terminar (MS-02, API-02-101), qué pide la plantilla (MS-01, API-01-028), qué cambió desde que entró al estudio (MS-12, API-12-010) y la galería (MS-11, API-11-007).
En esta épicaLa pantalla del capturista, con SKU, marca y talla no editables y las variantes del estilo
Quién la llamaEntrada Única · Vendor Center (por el BFF)
PermisoPermiso de pantalla «Captura» (capturista o jefe del estudio); lo editable lo decide el motor de MS-02
CabecerasAuthorization, X-Request-Id
ParámetrosworkId = wrk-50a1
También la usanFT-ACT-06

Request

null

Response · 200

{
  "success": true,
  "data": {
    "work": {
      "workId": "wrk-50a1",
      "step": "CAPTURE",
      "state": "TO_CAPTURE"
    },
    "product": {
      "productId": "PRD-0004812",
      "version": 6,
      "template": "EU4-0412",
      "business": "MER",
      "brand": "MARCA01"
    },
    "variants": [
      {
        "sku": "1000004812",
        "color": "AZUL",
        "size": "CH"
      },
      {
        "sku": "1000004813",
        "color": "AZUL",
        "size": "G"
      },
      {
        "sku": "1000004814",
        "color": "AZUL",
        "size": "XG"
      },
      {
        "sku": "1000004815",
        "color": "ROJO",
        "size": "CH"
      },
      {
        "sku": "1000004816",
        "color": "ROJO",
        "size": "G"
      }
    ],
    "nonEditable": [
      "SKU",
      "MARCA",
      "TALLA"
    ],
    "fields": [
      {
        "attribute": "MATERIAL",
        "group": "INTERNET",
        "value": "Algodón",
        "origin": "PROVEEDOR",
        "editable": true,
        "required": true
      },
      {
        "attribute": "TITULO",
        "group": "TEXTOS",
        "value": null,
        "editable": true,
        "required": true
      }
    ],
    "changesSinceEntry": {
      "changed": false,
      "changes": []
    },
    "gallery": {
      "variantsWithPrincipal": 5,
      "variantsWithout": 0
    }
  }
}

Errores

HTTPCódigoCuándo
404NOT_FOUNDEl trabajo no existe o no está en captura
503DEPENDENCY_UNAVAILABLEUn módulo no respondió; la pantalla dice cuál
POST /internal/product/products/by-skus · Lectura por lote para el estudio: por cada SKU (hasta 500) d
CampoValor
APIAPI-02-119 · MS-02 Producto
Para quéLectura por lote para el estudio: por cada SKU (hasta 500) devuelve su familia y su variante con lo que necesita tomar o no tomar (negocio, plantilla, sección, marca, color, talla, fecha de admisión, quién toma la foto, si tiene variantes configuradas y versión), para que MS-12 no guarde una copia del producto.
En esta épicaLeer por lote los productos de los SKU que llegan al estudio, sin copiarlos

Request

{
  "skus": [
    "1000004812",
    "1000004813",
    "1000009999"
  ]
}

Response · 200

{
  "success": true,
  "data": {
    "items": [
      {
        "sku": "1000004812",
        "found": true,
        "productId": "PRD-0004812",
        "variantId": "VAR-0004812-01",
        "business": "MER",
        "template": "EU4-0412",
        "section": "CAMISAS HOMBRE",
        "brand": "MARCA01",
        "color": "AZUL",
        "size": "CH",
        "admittedAt": "2026-10-16T12:00:00Z",
        "photoBy": "LIVERPOOL",
        "variantsConfigured": true,
        "version": 6
      },
      {
        "sku": "1000004813",
        "found": true,
        "productId": "PRD-0004812",
        "variantId": "VAR-0004812-02",
        "business": "MER",
        "template": "EU4-0412",
        "section": "CAMISAS HOMBRE",
        "brand": "MARCA01",
        "color": "AZUL",
        "size": "G",
        "admittedAt": "2026-10-16T12:00:00Z",
        "photoBy": "LIVERPOOL",
        "variantsConfigured": true,
        "version": 6
      },
      {
        "sku": "1000009999",
        "found": false
      }
    ]
  }
}

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 (11)

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-11-004POST /api/v2/assets/uploadsEl agente pide permiso de carga con su credencial de equipoFT-ACT-02 · Registro, congelado y publicación de URLs de activos
API-11-005POST /api/v2/assets/{assetId}/completeEl agente avisa el fin de cada cargaFT-ACT-02 · Registro, congelado y publicación de URLs de activos
API-11-007GET /api/v2/assets?productId=&variantId=Qué colores ya tienen foto, para el rescate con o sin fotoFT-ACT-02 · Registro, congelado y publicación de URLs de activos
API-11-014GET /api/v2/assets/compliance?productId=&stage=El reloj de MS-02 revisa si las fotos del proveedor ya cumplenFT-ACT-01 · Tipos de activo digital y reglas de imágenes por…
API-02-306POST /internal/product/catalog-exceptions/evaluationsExcepciones de catalogación por lote, sin copiar sus tablasFT-FLU-07 · Excepciones de catalogación y preventas con publicación…
API-02-201GET /api/v2/products/by-identifierEl producto y su familia a partir del EAN o SKU escaneadoFT-ARQ-01 · Núcleo headless
API-02-028POST /api/v2/workflow/actions/plansLas acciones RESCUE y UNDO_RESCUE del motorFT-FLU-01 · Motor de estados configurable con dos carreteras y reglas…
API-02-057POST /api/v2/product-plans/{planId}/applyConfirmar la acción del motorFT-FLU-01 · Motor de estados configurable con dos carreteras y reglas…
API-01-012GET /api/v2/reference-tables/{t}/entriesLos diccionarios de toma: mundo del estilista, tipo de toma, plantillas con video y prioridad de tallasFT-REF-01 · Datos de referencia administrables
API-01-028GET /api/v2/taxonomies/PRODUCT/nodes/{id}/effectiveLa vista efectiva de la plantilla con sus listasFT-PLT-06 · Configuración de atributos por plantilla y por negocio…
API-13-001GET /internal/identity/permissions?userId=Los roles del estudio de quien cambia una decisión o recibe un trabajoFT-USR-01 · Identidad y autenticación de usuarios internos…

6. Eventos

Publica

EventoCuándoQuién lo consume
catalog.studio.changed/SAMPLE_RECEIVEDLogística registra la llegada de una muestraMS-05 (bitácora)
catalog.studio.changed/SHOT_COMPLETEDSe cierra la toma de un colorMS-05 (bitácora)
catalog.studio.changed/SAMPLE_RETURNEDLa muestra sale del estudio con su valeFT-RAC-06
catalog.product.changed/TASK_CHANGEDEl reloj de MS-02 abre Foro por rescate o cierra Carga de imagen por existencia en tiendaFT-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

Consume

EventoPara quéQuién lo publica
catalog.product.changed/TASK_CHANGEDMS-12 recibe la tarea Foro (normal o de rescate) y calcula tomar o no tomaresta misma épica
catalog.product.changed/STATUS_CHANGEDMS-12 cierra el trabajo de un producto canceladoFT-CAT-03, FT-CAT-05, FT-FLU-01, FT-FLU-02, FT-FLU-04, FT-FLU-06, FT-FLU-07, FT-INT-03, FT-INT-05, FT-INT-06, FT-INT-07, FT-PRD-02, FT-PRD-03, FT-PRD-04, FT-PRD-05, FT-PRD-06, FT-PRD-07, FT-PRD-09, FT-PRD-10, FT-RAC-01, FT-RAC-02, FT-RAC-03, FT-RAC-05, FT-REF-02
catalog.studio.changed/SAMPLE_RECEIVEDMS-02 pasa la tarea Foro de «esperando la muestra» a «en el estudio»esta misma épica
catalog.studio.changed/SHOT_COMPLETEDMS-14 avisa al editor que tiene fotos por editaresta misma épica
catalog.asset.changed/ASSET_UPLOADEDMS-12 cuenta en el trabajo de toma las fotos de la guía que ya subió el agenteFT-ACT-02, FT-ACT-03
catalog.asset.changed/ASSET_REJECTEDMS-12 marca en la toma la foto que hay que repetirFT-ACT-01, FT-ACT-02, FT-ACT-03
catalog.product.changed/PRODUCT_UPDATEDMS-12 marca el trabajo como cambiado desde que entróFT-ACT-06, FT-ARQ-01, FT-ARQ-02, FT-FLU-04, FT-FLU-07, FT-IA-01, FT-IA-05, FT-INT-04, FT-INT-06, FT-INT-07, FT-MIG-04, FT-PLT-07, FT-PLT-08, FT-PRD-01, FT-PRD-03, FT-PRD-05, FT-PRD-07, FT-PRD-08, FT-PRD-09, FT-PRD-10, FT-RAC-01
catalog.product.changed/CLASSIFICATION_CHANGEDMS-12 marca el cambio de plantilla en el trabajoFT-ACT-06, FT-CAT-03, FT-CAT-04, FT-CAT-05, FT-CAT-06, FT-IA-02, FT-IA-04
catalog.governance.changed/TEMPLATE_VIEW_CHANGEDMS-12 marca los trabajos cuya plantilla cambióFT-IA-03, FT-MIG-02, FT-PLT-04, FT-PLT-05, FT-PLT-06, FT-PLT-09

7. Datos

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

ColecciónDueñoQué guardaEsta épica
studio_workMS-12Tomas, ediciones y capturas por SKU, con quién las tiene asignadas.escribe
studio_samplesMS-12Cada muestra física que entra al estudio, por SKU, con su recorrido.escribe
studio_logisticsMS-12Contenedores, cajas, tarimas, tiendas y salidas con vale.escribe
studio_configMS-12Guía de fotos, capacidad por fotógrafo, tiempos y configuración de la edición con IA.escribe
studio_outboxMS-12Los cambios del estudio que esperan salir como evento.escribe
tasksMS-02Todo el trabajo asignado: visto bueno, corrección, Gobierno de Datos, foto, secciones, QA, revisión del cambio y repoblamiento.escribe
productsMS-02La familia del producto con sus variantes, valores, imágenes (URL), clasificaciones, estado, tareas abiertas y rechazos.lee
reference_tablesMS-01Las entradas de los diccionarios: tallas, colores, impuestos, excepciones y demás datos de referencia.lee
catalog_exceptionsMS-02Excepciones de catalogación: qué no se publica o va por la vía rápida.lee
assetsMS-11Cada archivo una vez: a qué producto, variante y posición pertenece, su validación técnica, URL de trabajo y URL congelada.lee
usersMS-13Cada usuario interno, proveedor o seller, su liga con el proveedor de identidad y sus roles.lee

8. Historias que cubre

HistoriaPrioridadCómo la cubre
FT-ACT-05·H1 · Consulta por loteP1pasos 5, 6, 7; API-BFF-402, API-12-002
FT-ACT-05·H2 · Motor tomar / no tomarP1pasos 1, 2, 3, 4; API-12-002, API-02-306, API-01-012
FT-ACT-05·H3 · Detección de cambiosP1flujo «El producto cambió desde que entró al estudio»; API-12-010
FT-ACT-05·H4 · Cambiar a "tomar"P2flujo «Logística cambia un SKU de no tomar a tomar»; API-12-012
FT-ACT-05·H5 · Vista del capturistaP2flujo «El producto cambió desde que entró al estudio»; API-BFF-404
FT-ACT-05·H6 · Disparo de ForoP2pasos 1
FT-ACT-05·H7 · El proveedor marca quién toma la fotoP1pasos 1, 4; API-12-002
FT-ACT-05·H8 · Si ya está en tienda, no espera la fotoP2flujo «Rescate y existencia en tienda»; API-11-014

9. Decisiones de esta épica

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

  • D-ACT-05-1. MS-12 no copia el producto ni llama a P360: lee de MS-02 por lote (PEDIDA-ACT-05-1 y API-02-306) cuando calcula y guarda sólo su decisión con la versión que usó. Usa el directorio de MS-13 en lugar de usuarios propios. No se construyen GetProposalsForo, GroupVariants, GetProposals, CreateProposal para Foro ni CalculaTomarNoTomar, y se acaba la copia en la copia del producto. Por qué: La validación con código del 17-oct encontró que el servicio de logística de Foro copia el producto, llama a P360 y baja usuarios de Foro; eso se rompe al apagar P360 en R3, así que el estudio se rehace en R2. Se apoya en ADR-12, DUD-28, RSG-29.
  • D-ACT-05-2. Foro entra al asignarse el SKU (PE-6), sólo si el proveedor marcó en la captura que la foto la toma Liverpool, o por rescate. El estudio se entera por TASK_CHANGED; no hay archivo Foro 40 para el estudio ni consulta cada 30 minutos. Si SAP sigue necesitando Foro 40 para mover la muestra física, lo arma MS-08 del mismo evento. Por qué: El check «la toma Liverpool» ya existe en la captura (P-25) y el motor abre la tarea en el 122; avisar por un archivo a SAP para que el estudio se entere sería un rodeo en un solo sistema. Se apoya en PEN-49, P-25, DUD-28.
  • D-ACT-05-3. El motor de tomar o no tomar vive en MS-12 con sus tres pasos más el de video y se calcula una vez por SKU: TOMAR, NO_TOMAR, NO_EXISTE o ERROR, cada uno con un motivo de lista cerrada. «TOMADO» pasa a ser el motivo YA_FOTOGRAFIADO de un NO_TOMAR; las siete grafías migradas se normalizan con API-12-013. Por qué: Hoy son 3.48 millones de decisiones en texto libre con siete grafías; una lista cerrada deja contar bien y no cambia el resultado del motor de P360. Se apoya en RSG-23, RF-IMG-08.
  • D-ACT-05-4. Los diccionarios de la toma (mundo del estilista, tipo de toma, plantillas con video y prioridad de tallas) siguen como diccionarios de MS-01 y las excepciones por sección y negocio o marca son de MS-02 (FT-FLU-07). MS-12 los lee por API con caché y sólo es dueño de la guía de fotos, los modelos, la capacidad y los tiempos (studio_config). Por qué: Ya están en el modelo como datos de referencia y excepciones de catalogación; copiarlos al estudio los desincronizaría. Se apoya en DEC-PLT-08, FT-REF-01, FT-FLU-07.
  • D-ACT-05-5. Pasar de no tomar a tomar lo hace sólo el jefe de logística o del estudio, desde el portal del estudio, con motivo; queda quién y cuándo. Pasar de tomar a no tomar con la toma iniciada no se permite. Por qué: Responde PEN-54 con el rol que ya opera la mercancía física; la bandera mueve muestras, así que no puede cambiarla cualquiera. Se apoya en PEN-54, RF-IMG-09.
  • D-ACT-05-6. El rescate lo dispara el reloj de MS-02 al vencer el plazo de enriquecimiento de FT-PRD-08 (la recepción esperada del pedido menos 4 días, o 30 días desde el visto bueno si no hay fecha) o el estudio con la acción RESCUE, y se deshace con UNDO_RESCUE. Antes de rescatar, si las fotos del proveedor ya cumplen y hay existencia en tienda, se cierra Carga de imagen y el producto sigue a calidad. Mientras el dato de existencia no tenga fuente, esa regla queda apagada y sólo corre el rescate. MS-12 decide por color si el rescate es con toma o sólo captura. Por qué: Es la regla del diagrama TO-BE (flechas 18 a 22) con el plazo que ya fijó FT-PRD-08; el dato de existencia en tienda no está diseñado en ningún módulo. Se apoya en PEN-49, FT-PRD-08, FT-FLU-01.
  • D-ACT-05-7. La detección de cambios es por eventos: al entrar al estudio MS-12 guarda la versión del producto y la de la vista efectiva de su plantilla, y marca el trabajo al recibir PRODUCT_UPDATED, CLASSIFICATION_CHANGED o TEMPLATE_VIEW_CHANGED. El cierre de un paso con cambios sin revisar responde 409. Por qué: Hoy Foro descarta el aviso y consulta cada 30 minutos; con el evento se entera al momento y sin copiar datos. Se apoya en RF-INT-06, ADR-12.
  • D-ACT-05-8. La pantalla del fotógrafo, la consulta por lote y la pantalla del capturista son composiciones del BFF (API-BFF-401, 402 y 404). MS-12 no arma pantallas: la regla que elige la guía y el modelo vive en MS-12 (API-12-011) y el BFF sólo junta. El portal del estudio queda con la operación física y el enriquecimiento pasa al módulo M6 de Vendor Center. Por qué: Decisiones 2, 19 y 20 del backend compartido que adopta ADR-12: un solo BFF, sin compatibilidad para los fronts. Se apoya en ADR-12, PD-06.

Qué falta decidir

IDQué falta
DUD-28Falta el inventario de pantallas del portal del estudio para estimar su paso al BFF en R2.
DUD-33Seguridad define la credencial de equipo del agente del estudio y cómo se revoca.

También siguen abiertos: PEN-49, Ratificar que Foro entra al asignarse el SKU y sólo si la foto la toma Liverpool, y definir la fuente del dato de existencia en tienda; PEN-54, Ratificar que sólo el jefe de logística o del estudio pasa un SKU a tomar.

Fuentes

  1. [D] trazabilidad/features/FT-ACT-05-servicios-consulta-foro-fotografico.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.