Actualizado el 18-oct-2026. Primera versión de la arquitectura de esta épica.
Qué responde. Cómo funciona por dentro FT-USR-03: qué piezas participan, en qué orden hablan, qué APIs hay que construir con su request y su response, y qué le entrega a la épica siguiente.
Para quién. Los equipos que van a construir la épica, QA y arquitectura.
Estado. [Propuesta] del TL del Nuevo PIM, 18-oct-2026, construida sobre ADR-12. La spec de cada épica dice el qué; estas páginas, el cómo.
Fuente. docs/arquitectura/por-epica/epicas/FT-USR-03.json, generada con generar.py; la ficha de la épica es trazabilidad/features/FT-USR-03-control-de-acceso-por-api.md.
En 30 segundos
Cuando un proveedor o seller catalogue por API, el PIM tiene que saber quién llama, poder cortarlo sin afectar a los demás y no dejar que lo cargue a sus anchas. Esta épica registra a cada tercero en MS-13 con sus negocios, tiendas, alcances y límites, le da credenciales propias en el proveedor de identidad, hace que el gateway de terceros revise cada llamada y su límite, y que Reportes mida el uso para avisar cuando cruce un umbral.
- Módulo dueño: MS-13 Identidad y acceso. También participan: MS-02 Producto, MS-04 Reportes, MS-14 Avisos y ayuda, MS-05 Auditoría.
- Etapa T · Transversal. Recibe de otras épicas y entrega «PE-T · Usuario con permisos y bitácora».
- APIs: construye 8 y usa 4 que construyen otras épicas.
- Eventos: publica 1 y consume 1.
1. Dónde encaja
Recibe
| De | Qué |
|---|---|
| FT-USR-01 · Identidad y autenticación de usuarios internos… | El proveedor de identidad, la librería del token y los usuarios que administran a cada tercero. |
| FT-USR-02 · Matriz de roles y permisos por módulo, acción, negocio y… | Los roles de administración de terceros y los alcances que cada módulo traduce a sus permisos. |
Entrega
| A | Qué |
|---|---|
| PE-T · Usuario con permisos y bitácora | Cada llamada de un tercero llega identificada, dentro de su límite y con su negocio, su tienda y su estado tomados del registro de MS-13. |
| FT-PRD-10 · Catalogación por API del proveedor o seller | La llamada del tercero ya autorizada por el gateway, con su tercero, sus alcances y sus límites, lista para catalogar por API. |
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 | Administración del catálogo | Entrada Única · Vendor Center | Da de alta al seller con negocios, tiendas y límites | — |
| 2 | Entrada Única · Vendor Center | MS-13 Identidad y acceso (por el BFF) | Pide el plan del alta del tercero | API-13-011 |
| 3 | Entrada Única · Vendor Center | MS-13 Identidad y acceso (por el BFF) | Confirma el alta | API-13-007 |
| 4 | MS-13 Identidad y acceso | Proveedor de identidad | Crea el cliente de máquina del tercero | — |
| 5 | MS-13 Identidad y acceso | Eventos | Avisa el alta del tercero | catalog.identity.changed/PARTNER_CHANGED |
| 6 | MS-13 Identidad y acceso | MS-14 Avisos y ayuda | Pide avisar al seller que genere su secreto | API-14-005 |
| 7 | Seller | Entrada Única · Vendor Center | Genera su secreto en la pantalla de permisos | — |
| 8 | Entrada Única · Vendor Center | MS-13 Identidad y acceso (por el BFF) | Recibe el secreto una sola vez | API-13-016 |
| 9 | Sistemas de proveedores y sellers | Proveedor de identidad | Pide un token con su credencial de cliente | — |
| 10 | Sistemas de proveedores y sellers | Entrada del clúster | Entra por la puerta de terceros | — |
| 11 | Entrada del clúster | Gateway de terceros /partner/v1 | Entrega el envío de un producto | API-GW-001 |
| 12 | Gateway de terceros /partner/v1 | MS-13 Identidad y acceso | Pide el tercero del cliente, con caché | API-13-012 |
| 13 | Gateway de terceros /partner/v1 | MS-02 Producto | Entrega la llamada autorizada al módulo dueño | API-02-006 |
| 14 | Gateway de terceros /partner/v1 | MS-04 Reportes | Reporta el uso del minuto | API-04-014 |
3.1 Rebasa su límite
3.2 Suspender a un tercero
3.3 Medir el nivel de servicio y alertar
4. Si algo sale mal
- Un tercero sin límites configurados intenta escribir. El gateway responde 403 LIMITS_NOT_CONFIGURED; puede leer y validar en sandbox. En su ficha el límite sale «sin configurar», nunca cero ni ilimitado.
- Pasa su tope diario de productos nuevos. El gateway responde 429 DAILY_QUOTA_EXCEEDED hasta el día siguiente; el tercero ve su consumo y Marketplace recibe un aviso si se repite tres días.
- MS-13 no responde al gateway. El gateway usa lo que tiene en caché hasta 60 segundos; sin caché responde 503 DEPENDENCY_UNAVAILABLE. Nunca deja pasar una llamada sin revisar.
- El token no trae el alcance o pide un negocio o tienda que no es suyo. El gateway responde 403 SCOPE_MISSING o BUSINESS_NOT_ALLOWED y el intento queda en MS-05.
- Se filtra el secreto de un tercero. Su administrador lo rota en la pantalla de permisos y el anterior vence de inmediato o en menos de 24 horas; mientras, Gobierno de Producto o Marketplace pueden suspenderlo.
5. APIs
Las que construye esta épica (8)
GET /api/v2/partners · Terceros registrados
| Campo | Valor |
|---|---|
| API | API-13-009 · MS-13 Identidad y acceso |
| Para qué | Lista los proveedores y sellers que catalogan por API, con su tipo, estado, negocios y si ya tienen límites configurados. |
| En esta épica | Lista de terceros en la pantalla de permisos |
| Quién la llama | BFF del portal |
| Permiso | PARTNER-ADMIN (Gobierno de Producto para proveedores, Marketplace para sellers) |
| Cabeceras | Authorization, X-Request-Id |
| Parámetros | q = Demo, status = ACTIVE, type = SELLER, business = MKP, page = 1, size = 50 |
Request
null
Response · 200
{
"success": true,
"data": {
"items": [
{
"partnerId": "PTN-0007",
"name": "Seller Demo 01",
"type": "SELLER",
"status": "ACTIVE",
"businesses": [
"MKP"
],
"sellerId": "SELLER-0001",
"supplierId": null,
"clients": 2,
"limitsConfigured": true,
"createdAt": "2026-10-02T17:20:00Z"
}
],
"page": 1,
"size": 50,
"total": 1
}
}
Errores
| HTTP | Código | Cuándo |
|---|---|---|
| 403 | AUTHORIZATION_ERROR | Quien pide no tiene PARTNER-ADMIN |
GET /api/v2/partners/{partnerId} · Detalle de un tercero
| Campo | Valor |
|---|---|
| API | API-13-010 · MS-13 Identidad y acceso |
| Para qué | Muestra un tercero completo: negocios, tiendas, alcances, límites, umbrales de servicio, dominios de imágenes que registró como propios, clientes de API y estado con su motivo. Un límite o umbral sin configurar sale como null, nunca como cero. Activos lo consulta para revisar el dominio de una imagen por URL. |
| En esta épica | Detalle del tercero: negocios, tiendas, alcances, límites y clientes |
| Quién la llama | BFF del portal, MS-11 Activos digitales |
| Permiso | PARTNER-ADMIN; el administrador del propio tercero ve el suyo; la cuenta de servicio de MS-11 |
| Cabeceras | Authorization, X-Request-Id |
| Parámetros | partnerId = PTN-0007 |
| También la usan | FT-ACT-03 |
Request
null
Response · 200
{
"success": true,
"data": {
"partnerId": "PTN-0007",
"name": "Seller Demo 01",
"type": "SELLER",
"status": "ACTIVE",
"statusReason": null,
"version": 5,
"businesses": [
"MKP"
],
"sellerId": "SELLER-0001",
"supplierId": null,
"shopIds": [
"SHOP-2231"
],
"scopes": [
"catalog.read",
"proposals.write"
],
"limits": {
"perMinute": {
"read": 600,
"write": 60,
"suggest": 30
},
"dailyNewProducts": 500,
"batchesInProgress": 2
},
"sla": {
"p95Ms": null,
"errorRatePct": null,
"availabilityPct": null
},
"imageDomains": [
"(dominio de imágenes del seller)"
],
"clients": [
{
"clientId": "cli-7d1e44",
"env": "SANDBOX",
"status": "ACTIVE",
"secrets": [
{
"createdAt": "2026-10-03T16:00:00Z",
"expiresAt": null
}
]
},
{
"clientId": "cli-9a02f8",
"env": "PROD",
"status": "ACTIVE",
"secrets": [
{
"createdAt": "2026-10-10T16:00:00Z",
"expiresAt": null
}
]
}
]
}
}
Errores
| HTTP | Código | Cuándo |
|---|---|---|
| 404 | NOT_FOUND | El tercero no existe o no es de quien llama |
POST /api/v2/partners/plans · Preparar un cambio de tercero
| Campo | Valor |
|---|---|
| API | API-13-011 · MS-13 Identidad y acceso |
| Para qué | Prepara el alta, el cambio de límites, umbrales o dominios de imágenes, la suspensión, la reactivación, la revocación o un cliente nuevo de un tercero, y dice qué pasará en el gateway y en el proveedor de identidad, sin escribir todavía. |
| En esta épica | Alta, límites, suspensión, reactivación o revocación de un tercero |
| Quién la llama | BFF del portal |
| Permiso | PARTNER-ADMIN (Gobierno de Producto para proveedores, Marketplace para sellers) |
| Cabeceras | Authorization, X-Request-Id, Idempotency-Key |
Request
{
"operation": "CREATE",
"type": "SELLER",
"name": "Seller Demo 01",
"sellerId": "SELLER-0001",
"shopIds": [
"SHOP-2231"
],
"businesses": [
"MKP"
],
"scopes": [
"catalog.read",
"proposals.write"
],
"limits": {
"perMinute": {
"read": 600,
"write": 60,
"suggest": 30
},
"dailyNewProducts": 500,
"batchesInProgress": 2
},
"sla": {
"p95Ms": null,
"errorRatePct": null,
"availabilityPct": null
},
"imageDomains": [
"(dominio de imágenes del seller)"
],
"clients": [
{
"env": "SANDBOX"
}
],
"reason": "Piloto de catalogación por API"
}
Response · 200
{
"success": true,
"data": {
"planId": "pln-5b1e90",
"expiresAt": "2026-10-18T15:14:05Z",
"items": [
{
"partnerId": "PTN-0007",
"from": null,
"to": "ACTIVE",
"identityProviderActions": [
"CREATE_CLIENT_SANDBOX"
],
"gatewayEffect": "Puede llamar en sandbox en cuanto el administrador del seller genere su secreto"
}
],
"applyUrl": "/api/v2/identity-plans/pln-5b1e90/apply"
}
}
Errores
| HTTP | Código | Cuándo |
|---|---|---|
| 422 | VALIDATION_ERROR | La tienda no es del seller, falta el proveedor SAP en Mercaderías o un alcance no existe |
| 409 | ID_ALREADY_EXISTS | El seller o el cliente ya están registrados |
| 403 | AUTHORIZATION_ERROR | Quien pide no tiene PARTNER-ADMIN para ese tipo de tercero |
GET /internal/identity/partners/by-client/{clientId} · Tercero de un cliente de API
| Campo | Valor |
|---|---|
| API | API-13-012 · MS-13 Identidad y acceso |
| Para qué | Le dice al gateway, a Producto y a Reportes de qué tercero es un cliente de API: estado, negocios, tiendas, alcances, límites y umbrales. Lo guardan 60 segundos y lo vacían con PARTNER_CHANGED, así una suspensión vale en la siguiente llamada. |
| En esta épica | El tercero de un cliente de API, para el gateway, Producto y Reportes |
| Quién la llama | Gateway de terceros /partner/v1, MS-02 Producto, MS-04 Reportes |
| Permiso | Sólo las cuentas de servicio del gateway, de MS-02 y de MS-04 |
| Cabeceras | Authorization, X-Request-Id |
| Parámetros | clientId = cli-9a02f8 |
| También la usan | FT-ARQ-01, FT-PRD-10 |
Request
null
Response · 200
{
"success": true,
"data": {
"clientId": "cli-9a02f8",
"env": "PROD",
"partnerId": "PTN-0007",
"type": "SELLER",
"status": "ACTIVE",
"businesses": [
"MKP"
],
"sellerId": "SELLER-0001",
"supplierId": null,
"shopIds": [
"SHOP-2231"
],
"scopes": [
"catalog.read",
"proposals.write"
],
"limits": {
"perMinute": {
"read": 600,
"write": 60,
"suggest": 30
},
"dailyNewProducts": 500,
"batchesInProgress": 2
},
"sla": {
"p95Ms": null,
"errorRatePct": null,
"availabilityPct": null
},
"version": 5,
"cacheSeconds": 60
}
}
Errores
| HTTP | Código | Cuándo |
|---|---|---|
| 404 | NOT_FOUND | El cliente no está registrado; el gateway responde 401 |
| 403 | PARTNER_SUSPENDED | El tercero o el cliente están suspendidos o revocados; el gateway responde lo mismo |
POST /api/v2/partners/{partnerId}/clients/{clientId}/secret · Generar o rotar el secreto de un cliente
| Campo | Valor |
|---|---|
| API | API-13-016 · MS-13 Identidad y acceso |
| Para qué | El administrador del propio tercero genera o rota el secreto de su cliente de API en la pantalla de permisos. Se muestra una sola vez, el PIM no lo guarda y el anterior puede seguir vivo hasta 24 horas para cambiarlo sin corte. |
| En esta épica | Generar o rotar el secreto de un cliente |
| Quién la llama | BFF del portal |
| Permiso | El administrador del tercero dueño del cliente |
| Cabeceras | Authorization, X-Request-Id, Idempotency-Key |
| Parámetros | partnerId = PTN-0007, clientId = cli-9a02f8 |
| Escribe en | partners |
Request
{
"reason": "ROTACION_PROGRAMADA",
"keepPreviousHours": 24
}
Response · 201
{
"success": true,
"data": {
"clientId": "cli-9a02f8",
"secret": "(se muestra una sola vez)",
"createdAt": "2026-10-18T15:10:00Z",
"previousSecretExpiresAt": "2026-10-19T15:10:00Z"
}
}
Errores
| HTTP | Código | Cuándo |
|---|---|---|
| 403 | PARTNER_SUSPENDED | El tercero está suspendido o revocado |
| 422 | BUSINESS_ERROR | Ya hay dos secretos vigentes; primero se retira uno |
| 503 | DEPENDENCY_UNAVAILABLE | El proveedor de identidad no responde; no se cambia nada |
GET /bff/v1/partners/{partnerId} · Pantalla de permisos de un tercero
| Campo | Valor |
|---|---|
| API | API-BFF-506 · BFF del portal |
| Para qué | La pantalla donde se da y se quita el permiso de catalogar por API: el registro del tercero (MS-13) junto con su uso, sus errores y su nivel de servicio del periodo (MS-04). |
| En esta épica | La pantalla de permisos de un tercero con su uso |
| Quién la llama | Entrada Única · Vendor Center (por el BFF) |
| Permiso | PARTNER-ADMIN; el administrador del propio tercero ve la suya |
| Cabeceras | X-Request-Id |
| Parámetros | partnerId = PTN-0007, from = 2026-10-11, to = 2026-10-18 |
Request
null
Response · 200
{
"success": true,
"data": {
"partner": {
"partnerId": "PTN-0007",
"name": "Seller Demo 01",
"type": "SELLER",
"status": "ACTIVE",
"businesses": [
"MKP"
],
"limits": {
"perMinute": {
"read": 600,
"write": 60,
"suggest": 30
},
"dailyNewProducts": 500
}
},
"usage": {
"calls": 18240,
"rateLimited": 12,
"errorRatePct": 0.4,
"p95Ms": 820,
"slaState": "SIN_UMBRAL"
},
"actions": [
"UPDATE_LIMITS",
"SUSPEND",
"ADD_CLIENT"
]
}
}
Errores
| HTTP | Código | Cuándo |
|---|---|---|
| 404 | NOT_FOUND | El tercero no existe o no es de quien llama |
POST /internal/reports/partner-usage · Uso de la API de terceros
| Campo | Valor |
|---|---|
| API | API-04-014 · MS-04 Reportes |
| Para qué | El gateway entrega cada minuto, por cliente y operación, cuántas llamadas hubo, cuántas se frenaron, cuántos errores y el tiempo de respuesta. Reportes lo guarda para medir el nivel de servicio y avisar al cruzar un umbral. |
| En esta épica | Recibir el uso por minuto de cada cliente |
| Quién la llama | Gateway de terceros /partner/v1 |
| Permiso | Sólo la cuenta de servicio del gateway |
| Cabeceras | Authorization, X-Request-Id, Idempotency-Key |
Request
{
"window": {
"from": "2026-10-18T15:04:00Z",
"to": "2026-10-18T15:05:00Z"
},
"replica": "gw-2",
"items": [
{
"clientId": "cli-9a02f8",
"partnerId": "PTN-0007",
"operation": "POST /partner/v1/proposals",
"calls": 58,
"rateLimited": 0,
"errors4xx": 3,
"errors5xx": 0,
"p95Ms": 840
}
]
}
Response · 202
{
"success": true,
"data": {
"accepted": 1
}
}
Errores
| HTTP | Código | Cuándo |
|---|---|---|
| 409 | IDEMPOTENCY_MISMATCH | Llega otra vez la misma ventana y réplica con números distintos |
| 422 | VALIDATION_ERROR | La ventana no es de un minuto o un cliente no existe |
GET /api/v2/reports/partner-usage · Uso y nivel de servicio de un tercero
| Campo | Valor |
|---|---|
| API | API-04-015 · MS-04 Reportes |
| Para qué | Muestra, por operación y periodo, el uso de la API de un tercero: llamadas, frenadas, errores, tiempo de respuesta, disponibilidad y si cruzó sus umbrales. Sin umbral configurado sale «sin umbral», no «cumple». |
| En esta épica | El uso y el nivel de servicio de un tercero por periodo |
| Quién la llama | BFF del portal |
| Permiso | PARTNER-ADMIN; el administrador del tercero ve el suyo |
| Cabeceras | Authorization, X-Request-Id |
| Parámetros | partnerId = PTN-0007, from = 2026-10-11, to = 2026-10-18 |
Request
null
Response · 200
{
"success": true,
"data": {
"partnerId": "PTN-0007",
"from": "2026-10-11",
"to": "2026-10-18",
"byOperation": [
{
"operation": "POST /partner/v1/proposals",
"calls": 18240,
"rateLimited": 12,
"errorRatePct": 0.4,
"p95Ms": 820,
"availabilityPct": 99.95
}
],
"sla": {
"p95Ms": null,
"errorRatePct": null,
"availabilityPct": null,
"state": "SIN_UMBRAL"
},
"breaches": []
}
}
Errores
| HTTP | Código | Cuándo |
|---|---|---|
| 404 | NOT_FOUND | El tercero no existe o no es de quien llama |
| 400 | VALIDATION_ERROR | El periodo pasa de 13 meses |
Las que usa y construye otra épica (4)
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-13-007 | POST /api/v2/identity-plans/{planId}/apply | Confirmar los planes de terceros | FT-USR-01 · Identidad y autenticación de usuarios internos… |
| API-14-005 | POST /internal/notifications/messages | Avisar al tercero y a Marketplace | FT-RAC-05 · Estatus del producto y motivos visibles para seller y… |
| API-GW-001 | POST /partner/v1/proposals | La llamada del tercero que revisa el gateway | FT-PRD-10 · Catalogación por API del proveedor o seller |
| API-02-006 | POST /api/v2/products/guided/plans | El alta que el gateway entrega a Producto | FT-PRD-07 · Captura guiada por pasos con los mínimos primero |
6. Eventos
Publica
| Evento | Cuándo | Quién lo consume |
|---|---|---|
catalog.identity.changed/PARTNER_CHANGED | Alta, cambio de límites o umbrales, suspensión, reactivación, revocación o cliente nuevo de un tercero | FT-PRD-10 |
Consume
| Evento | Para qué | Quién lo publica |
|---|---|---|
catalog.identity.changed/PARTNER_CHANGED | El gateway y MS-02 vacían su caché del tercero para que la suspensión valga en la siguiente llamada; MS-05 lo guarda en la bitácora | esta misma épica |
7. Datos
Cada colección tiene un solo dueño, el único que escribe en ella.
| Colección | Dueño | Qué guarda | Esta épica |
|---|---|---|---|
partners | MS-13 | El registro de terceros: proveedores y sellers que llaman por API, con su tipo, negocios, tiendas, alcances, límites y clientes (catalogación por API §3.1). | escribe |
identity_outbox | MS-13 | Los cambios de identidad que esperan salir como evento. | escribe |
identity_receipts | MS-13 | Los planes de identidad por confirmar (vencen a los 10 minutos) y el recibo de cada cambio confirmado de usuarios, roles y terceros, con lo que respondió el proveedor de identidad. | escribe |
partners | MS-13 | El registro de terceros: proveedores y sellers que llaman por API, con su tipo, negocios, tiendas, alcances, límites y clientes (catalogación por API §3.1). | lee |
8. Historias que cubre
| Historia | Prioridad | Cómo la cubre |
|---|---|---|
| FT-USR-03·H1 · Credenciales por consumidor | P1 | pasos 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13; flujo «Suspender a un tercero»; API-13-011, API-13-016 |
| FT-USR-03·H2 · Límite de llamadas | P1 | flujo «Rebasa su límite»; API-04-014 |
| FT-USR-03·H3 · SLA con umbrales | P2 | flujo «Medir el nivel de servicio y alertar»; API-04-015 |
| FT-USR-03·H4 · Pantalla de permisos | P2 | pasos 1, 2, 3; flujo «Suspender a un tercero»; API-13-009, API-13-010, API-BFF-506 |
9. Decisiones de esta épica
Las tomó el TL como arquitecto; quedan como [Propuesta] hasta que el equipo de la épica las revise.
- D-USR-03-1. Una credencial por consumidor: cada tercero registrado en MS-13 tiene uno o más clientes de máquina en el proveedor de identidad (credenciales de cliente de OAuth 2.0), uno para sandbox y otro para producción. El token sólo identifica al cliente, su audiencia y sus alcances; negocio, tienda, límites y estado salen del registro (API-13-012). Por qué: Así se sabe quién llama y se corta a uno sin esperar a que venza su token; la propuesta funcional metía negocios y tiendas en el token. Se apoya en PD-26, RF-GEN-08.
- D-USR-03-2. El secreto lo genera el administrador del propio tercero en la pantalla de permisos y se muestra una sola vez; el PIM no lo guarda, sólo el proveedor de identidad. Puede haber dos vigentes para rotar sin corte; el anterior vence en 24 horas como máximo. Por qué: Nadie de Liverpool tiene que ver ni mandar un secreto, y la rotación por API queda fuera de la v1. Se apoya en RF-GEN-08, DUD-33.
- D-USR-03-3. Los límites no tienen valor por omisión: sin límites configurados un tercero no escribe (LIMITS_NOT_CONFIGURED) y su consulta devuelve null. El gateway aplica el límite por minuto por cliente con un contador en cada réplica y cuenta el tope diario sobre los productos que creó; la entrada pone además un tope por puerta para que un tercero no afecte a los demás. Para sandbox y piloto se arranca con 600, 60 y 30 llamadas por minuto (lectura, escritura y sugerencias). Por qué: Ningún consumidor cataloga sin límites (RN-GEN-08) y los talleres no fijaron cifras; un cero o un ilimitado por omisión mentiría. Se apoya en RF-GEN-08, RN-GEN-08, PD-26.
- D-USR-03-4. Suspender o revocar publica PARTNER_CHANGED; el gateway y MS-02 vacían su caché (vigencia máxima de 60 segundos) y la siguiente llamada responde 403 PARTNER_SUSPENDED. Los demás terceros siguen sin cambio. Por qué: La historia pide cortar a uno sin afectar a los demás y sin esperar a que venza el token. Se apoya en PD-26.
- D-USR-03-5. El nivel de servicio se mide desde el primer día por cliente y operación (p95 del tiempo de respuesta, tasa de error y disponibilidad) con el uso por minuto que el gateway entrega a Reportes (API-04-014). No se compromete un SLA hasta la prueba de carga y el piloto; mientras, un umbral configurado en el tercero dispara el aviso de MS-04 por MS-14, y sin umbral el reporte dice «sin umbral». Por qué: No hay cifras en las fuentes; medir primero da la base para fijar el SLA sin prometer algo no medido. Se apoya en RF-GEN-08, PD-26.
- D-USR-03-6. El permiso de catalogar por API (PARTNER-ADMIN) lo da Gobierno de Producto para proveedores y Marketplace para sellers, en la misma pantalla, que compone el BFF con el registro de MS-13 y el uso de MS-04. Por qué: Cada área ya responde por su tipo de tercero y así no hace falta levantar un ticket. Se apoya en RF-GEN-08.
Qué falta decidir
| ID | Qué falta |
|---|---|
| PD-26 | Arquitectura con Seguridad ratifica el gateway de terceros, el plan del proveedor de identidad para tokens de máquina y los valores del SLA después de la prueba de carga. |
| PD-02 | Dirección y PM fijan si los sellers entran en la Fase 1, de lo que depende cuándo abre la API en producción. |
| DUD-33 | Seguridad define el gestor de secretos y la política de rotación para los clientes de máquina. |
Fuentes
- [D]
trazabilidad/features/FT-USR-03-control-de-acceso-por-api.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.