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
| De | Qué |
|---|---|
| PE-6 · SKU asignado | La 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 headless | La 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 Foro | La 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
| A | Qué |
|---|---|
| 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 listas | Si 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 P360 | La 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
3. Diagrama de flujo
El camino principal, paso por paso. Cuando una pantalla llama a un módulo se ven dos flechas: la pantalla al BFF y el BFF al módulo. Los eventos salen del outbox del módulo después de guardar; quien los consume ignora los repetidos.
Los pasos en texto
| Paso | De | A | Qué hace | API o evento |
|---|---|---|---|---|
| 1 | Eventos | MS-12 Estudio fotográfico | Entrega la tarea Foro recién abierta | catalog.product.changed/TASK_CHANGED |
| 2 | MS-12 Estudio fotográfico | MS-02 Producto | Lee las variantes de los SKU por lote | API-02-119 |
| 3 | MS-12 Estudio fotográfico | MS-02 Producto | Revisa las excepciones de catalogación del lote | API-02-306 |
| 4 | MS-12 Estudio fotográfico | Base pim | Decide tomar o no tomar por color y lo guarda | — |
| 5 | Estudio fotográfico | Foro · portal del estudio | Logística carga el CSV de SKU que llegaron | — |
| 6 | Foro · portal del estudio | BFF del portal | Pide la consulta por lote | API-BFF-402 |
| 7 | BFF del portal | MS-12 Estudio fotográfico | Trae la decisión de cada SKU | API-12-002 |
| 8 | Foro · portal del estudio | MS-12 Estudio fotográfico (por el BFF) | Registra la llegada de cada muestra | API-12-003 |
| 9 | MS-12 Estudio fotográfico | Eventos | Avisa la muestra recibida | catalog.studio.changed/SAMPLE_RECEIVED |
| 10 | Eventos | MS-02 Producto | Entrega la muestra; Foro pasa a «en el estudio» | catalog.studio.changed/SAMPLE_RECEIVED |
| 11 | Foro · portal del estudio | BFF del portal | Abre la pantalla del fotógrafo al escanear | API-BFF-401 |
| 12 | Agente del estudio | MS-11 Activos digitales | Pide permiso y sube cada foto | API-11-004 |
| 13 | Agente del estudio | MS-11 Activos digitales | Avisa que la foto quedó cargada | API-11-005 |
| 14 | Foro · portal del estudio | MS-12 Estudio fotográfico (por el BFF) | Cierra la toma del color | API-12-007 |
3.1 Rescate y existencia en tienda
3.2 Logística cambia un SKU de no tomar a tomar
3.3 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
| Campo | Valor |
|---|---|
| API | API-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 épica | La bandeja del estudio por paso, persona y SKU |
| Quién la llama | BFF del portal |
| Permiso | Perfiles del estudio (logística, fotógrafo, editor, capturista y jefe del estudio); cada quien ve lo de su paso |
| Cabeceras | Authorization, X-Request-Id |
| Parámetros | state = TO_EDIT, assignee = me, sku = `, business = MER, page = 1, size = 50` |
| También la usan | FT-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
| HTTP | Código | Cuándo |
|---|---|---|
| 400 | VALIDATION_ERROR | Un filtro trae un valor que no existe |
POST /api/v2/studio/decisions · Tomar o no tomar por lote
| Campo | Valor |
|---|---|
| API | API-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 épica | Tomar o no tomar por lote, con su motivo, distinguiendo no existe y error |
| Quién la llama | BFF del portal |
| Permiso | Logística del estudio y jefe del estudio |
| Cabeceras | Authorization, X-Request-Id, Idempotency-Key |
| Escribe en | studio_work |
| También la usan | FT-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
| HTTP | Código | Cuándo |
|---|---|---|
| 422 | VALIDATION_ERROR | El lote trae más de 500 SKU o un SKU con formato inválido |
| 503 | DEPENDENCY_UNAVAILABLE | MS-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
| Campo | Valor |
|---|---|
| API | API-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 épica | Registrar la llegada de una muestra |
| Quién la llama | BFF del portal |
| Permiso | Logística del estudio |
| Cabeceras | Authorization, X-Request-Id, Idempotency-Key |
| Escribe en | studio_samples, studio_work, studio_outbox |
| Publica | catalog.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
| HTTP | Código | Cuándo |
|---|---|---|
| 404 | NOT_FOUND | El código no corresponde a ningún SKU |
| 422 | BUSINESS_ERROR | La 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
| Campo | Valor |
|---|---|
| API | API-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 épica | El recorrido físico de una muestra |
| Quién la llama | BFF del portal |
| Permiso | Perfiles del estudio |
| Cabeceras | Authorization, X-Request-Id |
| Parámetros | sampleId = 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
| HTTP | Código | Cuándo |
|---|---|---|
| 404 | NOT_FOUND | La muestra no existe |
POST /api/v2/studio/logistics/movements · Mover muestras, cajas y tarimas
| Campo | Valor |
|---|---|
| API | API-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 épica | Movimientos de contenedores, cajas y tarimas, salidas con vale y devoluciones |
| Quién la llama | BFF del portal |
| Permiso | Logística del estudio |
| Cabeceras | Authorization, X-Request-Id, Idempotency-Key |
| Escribe en | studio_logistics, studio_samples, studio_outbox |
| Publica | catalog.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
| HTTP | Código | Cuándo |
|---|---|---|
| 422 | BUSINESS_ERROR | La muestra todavía tiene la toma abierta o el vale ya se usó |
| 404 | NOT_FOUND | Una muestra, caja o tienda no existe |
POST /api/v2/studio/work/{workId}/complete · Cerrar un paso del estudio
| Campo | Valor |
|---|---|
| API | API-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 épica | Cerrar la toma, la edición o la captura |
| Quién la llama | BFF del portal |
| Permiso | La persona asignada al paso o el jefe del estudio |
| Cabeceras | Authorization, X-Request-Id, Idempotency-Key, If-Match |
| Parámetros | workId = wrk-50a1 |
| Escribe en | studio_work, studio_outbox |
| Publica | catalog.studio.changed/SHOT_COMPLETED, catalog.studio.changed/EDITION_COMPLETED, catalog.studio.changed/CAPTURE_COMPLETED |
| También la usan | FT-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
| HTTP | Código | Cuándo |
|---|---|---|
| 422 | BUSINESS_ERROR | No 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) |
| 409 | VERSION_CONFLICT | El producto cambió desde que entró al estudio y hay cambios sin revisar |
| 403 | AUTHORIZATION_ERROR | Quien llama no tiene asignado el paso |
| 503 | DEPENDENCY_UNAVAILABLE | Activos 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
| Campo | Valor |
|---|---|
| API | API-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 épica | La guía de fotos por plantilla, tipo de producto, marca y mundo, los modelos y la capacidad |
| Quién la llama | BFF del portal |
| Permiso | Perfiles del estudio |
| Cabeceras | Authorization, X-Request-Id |
| Parámetros | section = 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
| HTTP | Código | Cuándo |
|---|---|---|
| 400 | VALIDATION_ERROR | La sección pedida no existe |
PUT /api/v2/studio/config · Cambiar la configuración del estudio
| Campo | Valor |
|---|---|
| API | API-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 épica | Cambiar la guía, la capacidad o los tiempos |
| Quién la llama | BFF del portal |
| Permiso | Jefe del estudio |
| Cabeceras | Authorization, X-Request-Id, Idempotency-Key, If-Match |
| Escribe en | studio_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
| HTTP | Código | Cuándo |
|---|---|---|
| 409 | VERSION_CONFLICT | La configuración cambió desde que se leyó |
| 422 | VALIDATION_ERROR | Una 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?
| Campo | Valor |
|---|---|
| API | API-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 épica | Qué cambió del producto o de su plantilla desde que entró al estudio |
| Quién la llama | BFF del portal |
| Permiso | Perfiles del estudio |
| Cabeceras | Authorization, X-Request-Id |
| Parámetros | workId = 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
| HTTP | Código | Cuándo |
|---|---|---|
| 404 | NOT_FOUND | El trabajo no existe |
GET /api/v2/studio/work/{workId} · Detalle de un trabajo del estudio
| Campo | Valor |
|---|---|
| API | API-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 épica | El trabajo con la guía y el modelo que le tocan |
| Quién la llama | BFF del portal |
| Permiso | Perfiles del estudio |
| Cabeceras | Authorization, X-Request-Id |
| Parámetros | workId = 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
| HTTP | Código | Cuándo |
|---|---|---|
| 404 | NOT_FOUND | El trabajo no existe |
POST /api/v2/studio/decisions/overrides · Cambiar un SKU de no tomar a tomar
| Campo | Valor |
|---|---|
| API | API-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 épica | Pasar un SKU de no tomar a tomar con motivo |
| Quién la llama | BFF del portal |
| Permiso | Jefe de logística o jefe del estudio (rol del directorio, MS-13) |
| Cabeceras | Authorization, X-Request-Id, Idempotency-Key |
| Escribe en | studio_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
| HTTP | Código | Cuándo |
|---|---|---|
| 403 | AUTHORIZATION_ERROR | Quien llama no tiene el rol para cambiar decisiones |
| 422 | BUSINESS_ERROR | El 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
| Campo | Valor |
|---|---|
| API | API-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 épica | Cargar las decisiones migradas de P360 como valor de lista |
| Quién la llama | MS-03 Migración y convivencia |
| Permiso | Sólo MS-03 (cuenta de servicio) |
| Cabeceras | Authorization, X-Request-Id, Idempotency-Key |
| Escribe en | studio_work |
| También la usan | FT-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
| HTTP | Código | Cuándo |
|---|---|---|
| 409 | IDEMPOTENCY_MISMATCH | El mismo lote llega otra vez con contenido distinto |
GET /bff/v1/studio/photo-session?code= · Pantalla del fotógrafo
| Campo | Valor |
|---|---|
| API | API-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 épica | La pantalla del fotógrafo: producto, guía del estudio e imágenes |
| Quién la llama | Foro · portal del estudio (por el BFF) |
| Permiso | Permiso 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 |
| Cabeceras | Authorization, X-Request-Id |
| Parámetros | code = 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
| HTTP | Código | Cuándo |
|---|---|---|
| 404 | NOT_FOUND | El código no corresponde a ninguna muestra recibida en el estudio |
| 422 | BUSINESS_ERROR | El SKU es no tomar: la pantalla manda la muestra a salida y envío |
| 503 | DEPENDENCY_UNAVAILABLE | Un 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
| Campo | Valor |
|---|---|
| API | API-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 épica | La consulta por lote de Logística con atributos de SAP y de internet |
| Quién la llama | Foro · portal del estudio (por el BFF) |
| Permiso | Permiso de pantalla «Recepción de muestras» (logística o jefe del estudio) |
| Cabeceras | Authorization, 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
| HTTP | Código | Cuándo |
|---|---|---|
| 422 | VALIDATION_ERROR | El CSV trae más de 500 SKU o ninguno |
| 503 | DEPENDENCY_UNAVAILABLE | MS-12 o MS-02 no respondieron; la pantalla ofrece reintentar el lote |
GET /bff/v1/studio/capture/{workId} · Pantalla del capturista
| Campo | Valor |
|---|---|
| API | API-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 épica | La pantalla del capturista, con SKU, marca y talla no editables y las variantes del estilo |
| Quién la llama | Entrada Única · Vendor Center (por el BFF) |
| Permiso | Permiso de pantalla «Captura» (capturista o jefe del estudio); lo editable lo decide el motor de MS-02 |
| Cabeceras | Authorization, X-Request-Id |
| Parámetros | workId = wrk-50a1 |
| También la usan | FT-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
| HTTP | Código | Cuándo |
|---|---|---|
| 404 | NOT_FOUND | El trabajo no existe o no está en captura |
| 503 | DEPENDENCY_UNAVAILABLE | Un 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
| Campo | Valor |
|---|---|
| API | API-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 épica | Leer 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
| HTTP | Código | Cuándo |
|---|---|---|
| 403 | AUTHORIZATION_ERROR | Quien llama no tiene el permiso o no es el módulo autorizado |
| 422 | VALIDATION_ERROR | Falta un dato o viene con un formato inválido; el detalle dice qué campo |
| 409 | IDEMPOTENCY_MISMATCH | Se 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.
| API | Método y ruta | Para qué, aquí | La construye |
|---|---|---|---|
| API-11-004 | POST /api/v2/assets/uploads | El agente pide permiso de carga con su credencial de equipo | FT-ACT-02 · Registro, congelado y publicación de URLs de activos |
| API-11-005 | POST /api/v2/assets/{assetId}/complete | El agente avisa el fin de cada carga | FT-ACT-02 · Registro, congelado y publicación de URLs de activos |
| API-11-007 | GET /api/v2/assets?productId=&variantId= | Qué colores ya tienen foto, para el rescate con o sin foto | FT-ACT-02 · Registro, congelado y publicación de URLs de activos |
| API-11-014 | GET /api/v2/assets/compliance?productId=&stage= | El reloj de MS-02 revisa si las fotos del proveedor ya cumplen | FT-ACT-01 · Tipos de activo digital y reglas de imágenes por… |
| API-02-306 | POST /internal/product/catalog-exceptions/evaluations | Excepciones de catalogación por lote, sin copiar sus tablas | FT-FLU-07 · Excepciones de catalogación y preventas con publicación… |
| API-02-201 | GET /api/v2/products/by-identifier | El producto y su familia a partir del EAN o SKU escaneado | FT-ARQ-01 · Núcleo headless |
| API-02-028 | POST /api/v2/workflow/actions/plans | Las acciones RESCUE y UNDO_RESCUE del motor | FT-FLU-01 · Motor de estados configurable con dos carreteras y reglas… |
| API-02-057 | POST /api/v2/product-plans/{planId}/apply | Confirmar la acción del motor | FT-FLU-01 · Motor de estados configurable con dos carreteras y reglas… |
| API-01-012 | GET /api/v2/reference-tables/{t}/entries | Los diccionarios de toma: mundo del estilista, tipo de toma, plantillas con video y prioridad de tallas | FT-REF-01 · Datos de referencia administrables |
| API-01-028 | GET /api/v2/taxonomies/PRODUCT/nodes/{id}/effective | La vista efectiva de la plantilla con sus listas | FT-PLT-06 · Configuración de atributos por plantilla y por negocio… |
| API-13-001 | GET /internal/identity/permissions?userId= | Los roles del estudio de quien cambia una decisión o recibe un trabajo | FT-USR-01 · Identidad y autenticación de usuarios internos… |
6. Eventos
Publica
| Evento | Cuándo | Quién lo consume |
|---|---|---|
catalog.studio.changed/SAMPLE_RECEIVED | Logística registra la llegada de una muestra | MS-05 (bitácora) |
catalog.studio.changed/SHOT_COMPLETED | Se cierra la toma de un color | MS-05 (bitácora) |
catalog.studio.changed/SAMPLE_RETURNED | La muestra sale del estudio con su vale | FT-RAC-06 |
catalog.product.changed/TASK_CHANGED | El reloj de MS-02 abre Foro por rescate o cierra Carga de imagen por existencia en tienda | FT-ACT-06, FT-ARQ-02, FT-CAT-06, FT-FLU-01, FT-IA-06, FT-PRD-02, FT-PRD-05, FT-PRD-06, FT-PRD-07, FT-PRD-08, FT-RAC-02, FT-RAC-03, FT-RAC-04, FT-RAC-05, FT-RAC-06 |
Consume
| Evento | Para qué | Quién lo publica |
|---|---|---|
catalog.product.changed/TASK_CHANGED | MS-12 recibe la tarea Foro (normal o de rescate) y calcula tomar o no tomar | esta misma épica |
catalog.product.changed/STATUS_CHANGED | MS-12 cierra el trabajo de un producto cancelado | FT-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_RECEIVED | MS-02 pasa la tarea Foro de «esperando la muestra» a «en el estudio» | esta misma épica |
catalog.studio.changed/SHOT_COMPLETED | MS-14 avisa al editor que tiene fotos por editar | esta misma épica |
catalog.asset.changed/ASSET_UPLOADED | MS-12 cuenta en el trabajo de toma las fotos de la guía que ya subió el agente | FT-ACT-02, FT-ACT-03 |
catalog.asset.changed/ASSET_REJECTED | MS-12 marca en la toma la foto que hay que repetir | FT-ACT-01, FT-ACT-02, FT-ACT-03 |
catalog.product.changed/PRODUCT_UPDATED | MS-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_CHANGED | MS-12 marca el cambio de plantilla en el trabajo | FT-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_CHANGED | MS-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ón | Dueño | Qué guarda | Esta épica |
|---|---|---|---|
studio_work | MS-12 | Tomas, ediciones y capturas por SKU, con quién las tiene asignadas. | escribe |
studio_samples | MS-12 | Cada muestra física que entra al estudio, por SKU, con su recorrido. | escribe |
studio_logistics | MS-12 | Contenedores, cajas, tarimas, tiendas y salidas con vale. | escribe |
studio_config | MS-12 | Guía de fotos, capacidad por fotógrafo, tiempos y configuración de la edición con IA. | escribe |
studio_outbox | MS-12 | Los cambios del estudio que esperan salir como evento. | escribe |
tasks | MS-02 | Todo el trabajo asignado: visto bueno, corrección, Gobierno de Datos, foto, secciones, QA, revisión del cambio y repoblamiento. | escribe |
products | MS-02 | La familia del producto con sus variantes, valores, imágenes (URL), clasificaciones, estado, tareas abiertas y rechazos. | lee |
reference_tables | MS-01 | Las entradas de los diccionarios: tallas, colores, impuestos, excepciones y demás datos de referencia. | lee |
catalog_exceptions | MS-02 | Excepciones de catalogación: qué no se publica o va por la vía rápida. | lee |
assets | MS-11 | Cada archivo una vez: a qué producto, variante y posición pertenece, su validación técnica, URL de trabajo y URL congelada. | lee |
users | MS-13 | Cada usuario interno, proveedor o seller, su liga con el proveedor de identidad y sus roles. | lee |
8. Historias que cubre
| Historia | Prioridad | Cómo la cubre |
|---|---|---|
| FT-ACT-05·H1 · Consulta por lote | P1 | pasos 5, 6, 7; API-BFF-402, API-12-002 |
| FT-ACT-05·H2 · Motor tomar / no tomar | P1 | pasos 1, 2, 3, 4; API-12-002, API-02-306, API-01-012 |
| FT-ACT-05·H3 · Detección de cambios | P1 | flujo «El producto cambió desde que entró al estudio»; API-12-010 |
| FT-ACT-05·H4 · Cambiar a "tomar" | P2 | flujo «Logística cambia un SKU de no tomar a tomar»; API-12-012 |
| FT-ACT-05·H5 · Vista del capturista | P2 | flujo «El producto cambió desde que entró al estudio»; API-BFF-404 |
| FT-ACT-05·H6 · Disparo de Foro | P2 | pasos 1 |
| FT-ACT-05·H7 · El proveedor marca quién toma la foto | P1 | pasos 1, 4; API-12-002 |
| FT-ACT-05·H8 · Si ya está en tienda, no espera la foto | P2 | flujo «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
| ID | Qué falta |
|---|---|
| DUD-28 | Falta el inventario de pantallas del portal del estudio para estimar su paso al BFF en R2. |
| DUD-33 | Seguridad 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
- [D]
trazabilidad/features/FT-ACT-05-servicios-consulta-foro-fotografico.md: la ficha de la épica, con sus historias, reglas y bloqueos. - [D] ADR-12 · Un solo sistema: backend compartido y una sola base (sección 3.4).
- [D]
docs/arquitectura/por-epica/base/: piezas, colecciones, eventos y el hilo de punta a punta. - [D]
docs/arquitectura/omega-a-pim-headless/contratos-api.md: convenciones y endpoints de partida. - [D]
docs/arquitectura/maquina-de-estados-to-be/propuesta-maquina-de-estados.md§7: estados, tareas y canales. - [I] Las decisiones de la sección 9 son del TL sobre esas fuentes.