← Arquitectura por épica

FT-USR-03 · Control de acceso por API para terceros

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-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

DeQué
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

AQué
PE-T · Usuario con permisos y bitácoraCada 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 sellerLa 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

Sistemas externos

Nuevo PIM · un solo sistema

Pantallas y sistemas

Personas

Pantalla de permisos de un tercero

Preparar un cambio de tercero
Confirmar un plan de identidad
y 1 más

Crea el cliente de máquina del tercero
Desactiva sus clientes de máquina

PARTNER_CHANGED

Mandar un aviso explícito

Pide un token con su credencial de cl…

Entra por la puerta de terceros

Enviar un producto

Tercero de un cliente de API

Armar la familia en la captura guiada

Uso de la API de terceros

Enviar un producto

Responde 429 con el tiempo de espera
Responde 403 PARTNER_SUSPENDED, los d…

Mandar un aviso explícito

Manda el aviso al equipo de Marketpla…
Avisa al equipo de Marketplace y al t…

PARTNER_CHANGED

PARTNER_CHANGED

PARTNER_CHANGED

Tercero de un cliente de API

Uso y nivel de servicio de un tercero

bitácora

Administración del catálogo

Seller

Entrada Única · Vendor Center

Sistemas de proveedores y sellers

Entrada del clúster

BFF del portal

Gateway de terceros /partner/v1

★ MS-13 Identidad y acceso

MS-02 Producto

MS-04 Reportes

MS-14 Avisos y ayuda

MS-05 Auditoría

Base pim

Eventos

Proveedor de identidad

Servicio de correo

Contexto de FT-USR-03

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-04 ReportesMS-02 ProductoEntrada del clústerSistemas de proveedores y sellersMS-14 Avisos y ayudaEventosProveedor de identidadMS-13 Identidad y accesoEntrada Única · Vendor CenterMS-04 ReportesMS-02 ProductoEntrada del clústerSistemas de proveedores y sellersMS-14 Avisos y ayudaEventosProveedor de identidadMS-13 Identidad y accesoEntrada Única · Vendor CenterAdministración del catálogoBFFSellerGateway1. Da de alta al seller con negocios, tiendas y límites2. Pide el plan del alta del terceroPOST /api/v2/partners/plans3. Confirma el altaPOST /api/v2/identity-plans/{planId}/apply4. Crea el cliente de máquina del tercero5. Avisa el alta del terceroPARTNER_CHANGED6. Pide avisar al seller que genere su secretoPOST /internal/notifications/messages7. Genera su secreto en la pantalla de permisos8. Recibe el secreto una sola vezPOST /api/v2/partners/{partnerId}/clients/{clientId}/secret9. Pide un token con su credencial de cliente10. Entra por la puerta de terceros11. Entrega el envío de un productoPOST /partner/v1/proposals12. Pide el tercero del cliente, con cachéGET /internal/identity/partners/by-client/{clientId}13. Entrega la llamada autorizada al módulo dueñoPOST /api/v2/products/guided/plans14. Reporta el uso del minutoPOST /internal/reports/partner-usageAdministración del catálogoBFFSellerGateway
Flujo principal de FT-USR-03
Los pasos en texto
PasoDeAQué haceAPI o evento
1Administración del catálogoEntrada Única · Vendor CenterDa de alta al seller con negocios, tiendas y límites—
2Entrada Única · Vendor CenterMS-13 Identidad y acceso (por el BFF)Pide el plan del alta del terceroAPI-13-011
3Entrada Única · Vendor CenterMS-13 Identidad y acceso (por el BFF)Confirma el altaAPI-13-007
4MS-13 Identidad y accesoProveedor de identidadCrea el cliente de máquina del tercero—
5MS-13 Identidad y accesoEventosAvisa el alta del tercerocatalog.identity.changed/PARTNER_CHANGED
6MS-13 Identidad y accesoMS-14 Avisos y ayudaPide avisar al seller que genere su secretoAPI-14-005
7SellerEntrada Única · Vendor CenterGenera su secreto en la pantalla de permisos—
8Entrada Única · Vendor CenterMS-13 Identidad y acceso (por el BFF)Recibe el secreto una sola vezAPI-13-016
9Sistemas de proveedores y sellersProveedor de identidadPide un token con su credencial de cliente—
10Sistemas de proveedores y sellersEntrada del clústerEntra por la puerta de terceros—
11Entrada del clústerGateway de terceros /partner/v1Entrega el envío de un productoAPI-GW-001
12Gateway de terceros /partner/v1MS-13 Identidad y accesoPide el tercero del cliente, con cachéAPI-13-012
13Gateway de terceros /partner/v1MS-02 ProductoEntrega la llamada autorizada al módulo dueñoAPI-02-006
14Gateway de terceros /partner/v1MS-04 ReportesReporta el uso del minutoAPI-04-014

3.1 Rebasa su límite

Servicio de correoMS-14 Avisos y ayudaMS-04 ReportesSistemas de proveedores y sellersServicio de correoMS-14 Avisos y ayudaMS-04 ReportesSistemas de proveedores y sellersGateway1. Manda más llamadas que su límite por minutoPOST /partner/v1/proposals2. Responde 429 con el tiempo de espera3. Reporta las llamadas frenadasPOST /internal/reports/partner-usage4. Pide avisar a Marketplace si se repitePOST /internal/notifications/messages5. Manda el aviso al equipo de MarketplaceGateway
Rebasa su límite

3.2 Suspender a un tercero

MS-05 AuditoríaSistemas de proveedores y sellersMS-02 ProductoEventosProveedor de identidadMS-13 Identidad y accesoEntrada Única · Vendor CenterMS-05 AuditoríaSistemas de proveedores y sellersMS-02 ProductoEventosProveedor de identidadMS-13 Identidad y accesoEntrada Única · Vendor CenterAdministración del catálogoBFFGateway1. Suspende al seller con su motivo2. Pide el plan de la suspensiónPOST /api/v2/partners/plans3. Confirma la suspensiónPOST /api/v2/identity-plans/{planId}/apply4. Desactiva sus clientes de máquina5. Avisa la suspensiónPARTNER_CHANGED6. Entrega el aviso para vaciar su cachéPARTNER_CHANGED7. Entrega el aviso para cortar sus escriturasPARTNER_CHANGED8. Llama otra vez con su tokenPOST /partner/v1/proposals9. Responde 403 PARTNER_SUSPENDED, los demás siguen10. Entrega la suspensión a la bitácoraPARTNER_CHANGEDAdministración del catálogoBFFGateway
Suspender a un tercero

3.3 Medir el nivel de servicio y alertar

Entrada Única · Vendor CenterServicio de correoMS-14 Avisos y ayudaBase·pimMS-13 Identidad y accesoMS-04 ReportesEntrada Única · Vendor CenterServicio de correoMS-14 Avisos y ayudaBase·pimMS-13 Identidad y accesoMS-04 ReportesGatewayAdministración del catálogoBFF1. Entrega uso, errores y tiempos por minutoPOST /internal/reports/partner-usage2. Lee los umbrales del tercero, con cachéGET /internal/identity/partners/by-client/{clientId}3. Calcula p95, errores y disponibilidad por hora4. Pide avisar al cruzar un umbralPOST /internal/notifications/messages5. Avisa al equipo de Marketplace y al tercero6. Abre la ficha del tercero con su uso7. Pide la ficha compuesta del terceroGET /bff/v1/partners/{partnerId}8. Trae el uso y el nivel de servicio del periodoGET /api/v2/reports/partner-usageGatewayAdministración del catálogoBFF
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
CampoValor
APIAPI-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 épicaLista de terceros en la pantalla de permisos
Quién la llamaBFF del portal
PermisoPARTNER-ADMIN (Gobierno de Producto para proveedores, Marketplace para sellers)
CabecerasAuthorization, X-Request-Id
Parámetrosq = 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

HTTPCódigoCuándo
403AUTHORIZATION_ERRORQuien pide no tiene PARTNER-ADMIN
GET /api/v2/partners/{partnerId} · Detalle de un tercero
CampoValor
APIAPI-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 épicaDetalle del tercero: negocios, tiendas, alcances, límites y clientes
Quién la llamaBFF del portal, MS-11 Activos digitales
PermisoPARTNER-ADMIN; el administrador del propio tercero ve el suyo; la cuenta de servicio de MS-11
CabecerasAuthorization, X-Request-Id
ParámetrospartnerId = PTN-0007
También la usanFT-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

HTTPCódigoCuándo
404NOT_FOUNDEl tercero no existe o no es de quien llama
POST /api/v2/partners/plans · Preparar un cambio de tercero
CampoValor
APIAPI-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 épicaAlta, límites, suspensión, reactivación o revocación de un tercero
Quién la llamaBFF del portal
PermisoPARTNER-ADMIN (Gobierno de Producto para proveedores, Marketplace para sellers)
CabecerasAuthorization, 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

HTTPCódigoCuándo
422VALIDATION_ERRORLa tienda no es del seller, falta el proveedor SAP en Mercaderías o un alcance no existe
409ID_ALREADY_EXISTSEl seller o el cliente ya están registrados
403AUTHORIZATION_ERRORQuien pide no tiene PARTNER-ADMIN para ese tipo de tercero
GET /internal/identity/partners/by-client/{clientId} · Tercero de un cliente de API
CampoValor
APIAPI-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 épicaEl tercero de un cliente de API, para el gateway, Producto y Reportes
Quién la llamaGateway de terceros /partner/v1, MS-02 Producto, MS-04 Reportes
PermisoSólo las cuentas de servicio del gateway, de MS-02 y de MS-04
CabecerasAuthorization, X-Request-Id
ParámetrosclientId = cli-9a02f8
También la usanFT-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

HTTPCódigoCuándo
404NOT_FOUNDEl cliente no está registrado; el gateway responde 401
403PARTNER_SUSPENDEDEl 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
CampoValor
APIAPI-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 épicaGenerar o rotar el secreto de un cliente
Quién la llamaBFF del portal
PermisoEl administrador del tercero dueño del cliente
CabecerasAuthorization, X-Request-Id, Idempotency-Key
ParámetrospartnerId = PTN-0007, clientId = cli-9a02f8
Escribe enpartners

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

HTTPCódigoCuándo
403PARTNER_SUSPENDEDEl tercero está suspendido o revocado
422BUSINESS_ERRORYa hay dos secretos vigentes; primero se retira uno
503DEPENDENCY_UNAVAILABLEEl proveedor de identidad no responde; no se cambia nada
GET /bff/v1/partners/{partnerId} · Pantalla de permisos de un tercero
CampoValor
APIAPI-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 épicaLa pantalla de permisos de un tercero con su uso
Quién la llamaEntrada Única · Vendor Center (por el BFF)
PermisoPARTNER-ADMIN; el administrador del propio tercero ve la suya
CabecerasX-Request-Id
ParámetrospartnerId = 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

HTTPCódigoCuándo
404NOT_FOUNDEl tercero no existe o no es de quien llama
POST /internal/reports/partner-usage · Uso de la API de terceros
CampoValor
APIAPI-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 épicaRecibir el uso por minuto de cada cliente
Quién la llamaGateway de terceros /partner/v1
PermisoSólo la cuenta de servicio del gateway
CabecerasAuthorization, 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

HTTPCódigoCuándo
409IDEMPOTENCY_MISMATCHLlega otra vez la misma ventana y réplica con números distintos
422VALIDATION_ERRORLa 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
CampoValor
APIAPI-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 épicaEl uso y el nivel de servicio de un tercero por periodo
Quién la llamaBFF del portal
PermisoPARTNER-ADMIN; el administrador del tercero ve el suyo
CabecerasAuthorization, X-Request-Id
ParámetrospartnerId = 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

HTTPCódigoCuándo
404NOT_FOUNDEl tercero no existe o no es de quien llama
400VALIDATION_ERROREl 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.

APIMétodo y rutaPara qué, aquíLa construye
API-13-007POST /api/v2/identity-plans/{planId}/applyConfirmar los planes de tercerosFT-USR-01 · Identidad y autenticación de usuarios internos…
API-14-005POST /internal/notifications/messagesAvisar al tercero y a MarketplaceFT-RAC-05 · Estatus del producto y motivos visibles para seller y…
API-GW-001POST /partner/v1/proposalsLa llamada del tercero que revisa el gatewayFT-PRD-10 · Catalogación por API del proveedor o seller
API-02-006POST /api/v2/products/guided/plansEl alta que el gateway entrega a ProductoFT-PRD-07 · Captura guiada por pasos con los mínimos primero

6. Eventos

Publica

EventoCuándoQuién lo consume
catalog.identity.changed/PARTNER_CHANGEDAlta, cambio de límites o umbrales, suspensión, reactivación, revocación o cliente nuevo de un terceroFT-PRD-10

Consume

EventoPara quéQuién lo publica
catalog.identity.changed/PARTNER_CHANGEDEl 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ácoraesta misma épica

7. Datos

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

ColecciónDueñoQué guardaEsta épica
partnersMS-13El 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_outboxMS-13Los cambios de identidad que esperan salir como evento.escribe
identity_receiptsMS-13Los 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
partnersMS-13El 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

HistoriaPrioridadCómo la cubre
FT-USR-03·H1 · Credenciales por consumidorP1pasos 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 llamadasP1flujo «Rebasa su límite»; API-04-014
FT-USR-03·H3 · SLA con umbralesP2flujo «Medir el nivel de servicio y alertar»; API-04-015
FT-USR-03·H4 · Pantalla de permisosP2pasos 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

IDQué falta
PD-26Arquitectura 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-02Direcció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-33Seguridad define el gestor de secretos y la política de rotación para los clientes de máquina.

Fuentes

  1. [D] trazabilidad/features/FT-USR-03-control-de-acceso-por-api.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.