Un techo, varios archivadores, varios cajones
Piensa en el despliegue como una oficina administrativa con una pared de archivadores. Cada archivador pertenece a una institución regulada: sus expedientes nunca se mezclan con los de otra institución, porque un regulador audita a cada institución por separado. Dentro de un archivador, los cajones separan líneas de negocio — uno para el producto de billetera, otro para el producto de crédito. En la pared cuelga una ficha índice que dice qué archivadores y cajones existen. Un empleado archiva los movimientos de dinero solo en un cajón que el índice nombra; un movimiento dirigido a un cajón que no está en el índice se devuelve, nunca se archiva en algún lugar “suficientemente parecido”. El vocabulario del riel corresponde uno a uno:
Dos consecuencias salen directo del modelo:
- Cada asiento lleva su alcance. Cada transacción se escribe en la organización y el ledger a los que resolvió, así que los registros de cada institución están completos por sí solos — los informes regulatorios y contables salen por institución sin desenredar un libro compartido.
- El riel nunca adivina un alcance. Un movimiento cuya organización y ledger no pueden probarse contra el catálogo se rechaza antes de cualquier asiento. Registrar dinero en el ledger de la institución equivocada es el único error que este diseño existe para hacer imposible.
El toggle: una clave vacía significa apagado
La clave del catálogo empieza vacía, y vacío es el centinela de no aprovisionado: el tenant registra solo en la organización y el ledger que nombra su vínculo, exactamente como antes de que la clave existiera. Escribir un catálogo activa la función; el par que nombra el vínculo sigue siendo el predeterminado — el alcance en el que registra cada flujo a menos que resuelva otro.
La organización y el ledger predeterminados nunca están en el catálogo. Sus rutas contables se quedan en las claves
routing.* y su activo y cuenta de compensación en su propia configuración, exactamente como los aprovisiona Configurar el riel. El catálogo declara solo lo que el vínculo no declara: repetir ahí el ledger predeterminado le daría a un libro dos fuentes de verdad, así que el riel rechaza un catálogo que lo vuelve a declarar.Actívalo, paso a paso
1
Completa primero la configuración ordinaria
El catálogo extiende un despliegue que funciona; no reemplaza la configuración. Ejecuta Configurar el riel de punta a punta: el vínculo que escribes ahí convierte a tu institución en el participante predeterminado y a su ledger en el libro predeterminado. Si tu despliegue es una institución con un libro, detente ahí — con la clave del catálogo vacía, nada en esta página cambia nada.
2
Aprovisiona el libro adicional en Midaz y el CRM
Cada ledger adicional se aprovisiona con la misma receta que recorre la página de configuración, apuntada al libro nuevo en lugar del predeterminado:
- La organización y el ledger. Un ledger adicional de tu propia institución va bajo tu organización existente. Un participante adicional (multi-tenant) recibe una organización propia, porque una organización de Midaz es exactamente una institución regulada.
- El activo y las cuentas en el ledger nuevo, incluida su propia cuenta externa de compensación — un alias como
@external/BRLes único dentro de un ledger, así que cada libro necesita el suyo. - Las rutas de operación en el ledger nuevo, un par de crédito y débito por cada perfil de dinero que el libro atiende. A diferencia del ledger predeterminado, estos UUID no van en las claves
routing.*— van dentro del documento del catálogo en el paso siguiente. - Los registros de titulares y los alias en el CRM, dirigidos con el
X-Organization-Idde la organización dueña del libro. ElledgerIddel alias es lo que le dice al riel en qué libro opera una cuenta, así que en una organización con más de un ledger cada alias debe nombrar su ledger.
3
Escribe el catálogo
El catálogo se escribe una sola vez, en En un despliegue single-tenant la entrada lleva tu propio ISPB y tu propio id de organización, y los ledgers son los libros adicionales; los identificadores difieren por participante solo en multi-tenant.Una escritura exitosa responde La clave es de hot reload: escríbela con la aplicación en marcha y tiene efecto en el deployment en ejecución, sin reinicio y sin redeploy.
PUT /system/tenant_policy/organizations, con la misma envoltura que usa el vínculo: el cuerpo es {"value": ...} y value es una cadena cuyo contenido es un documento JSON — una lista con una entrada por organización catalogada, cada una nombrando el ISPB de su participante, su organización de Midaz y los ledgers de esa organización con sus rutas. Tu propia organización aparece aquí cuando lleva ledgers adicionales — sin redeclarar nunca el ledger por defecto — y la organización de un participante adicional siempre aparece.Este es el documento, sin envolver, con identificadores de ejemplo:routes acepta hasta diez perfiles — in, inQrCode, out, outReversal, intraPsp, intraPspReversal, medDebit, medCredit, pixautomaticoDebit, pixautomaticoReversal — cada uno un par de UUID de rutas de operación de Midaz. Solo in e inQrCode son obligatorios: cada ledger del catálogo existe para recibir, así que un libro que no puede atender ninguna de las dos patas entrantes es un error de aprovisionamiento, no un libro más acotado. Los otros ocho son opcionales; un flujo que necesita uno ausente rechaza con 409 PIX-0105, nombrando el perfil, la organización y el ledger — el mismo comportamiento que una clave routing.* sin definir produce en el libro predeterminado.Deja que jq haga el escapado de la cadena, como con el vínculo:204. Vuelve a leer la clave como vuelves a leer el vínculo — el valor regresa como una cadena entre comillas que lleva tu documento:4
Conoce qué rechazan los validadores, y cuándo
El catálogo se valida dos veces, y la división importa: el validador de escritura atrapa todo lo que puede juzgarse solo con el documento, así que un catálogo mal formado se rechaza en la superficie de administración en lugar de descubrirse en un pago.Rechazado al escribir, con
400 validation_error:- un
valueque no es una cadena, o cualquier cosa después del primer documento JSON; - un campo desconocido en cualquier profundidad — incluido un nombre de perfil de ruta mal escrito, para que un error de tipeo no pueda pasar como un perfil ausente en silencio;
- un
ispbque no es exactamente de 8 dígitos; unorganizationId,ledgerIdo pata de ruta que no es un UUID distinto de cero; - un
externalAliasoassetvacíos; un par de rutas al que le falta cualquiera de las dos patas; una organización que no declara ningún ledger; - un perfil
inoinQrCodeausente en cualquier ledger; - un
ispb,organizationIdoledgerIdduplicados en cualquier parte del documento. Un403es un permiso ausente, nunca un valor rechazado.
5
Entiende cómo se enruta el dinero una vez activo
- Cada transacción se registra en su alcance. El asiento lleva la organización y el ledger a los que resolvió, así que el libro de cada institución se mantiene completo y auditable por sí solo.
- Un crédito entrante encuentra su propio libro. El ISPB receptor elige la organización; el registro de la cuenta en el CRM elige el ledger. Una organización con un solo ledger tolera un registro que no nombra ninguno — no hay nada entre qué elegir; una con varios no, y rechaza con
500 PIX-0120en lugar de adivinar. - Una orden saliente nombra al participante que paga cuando el tenant es varios.
POST /v1/transactionsacepta unpayerIspbopcional. Un tenant que actúa como un participante lo omite y se comporta exactamente como antes; un tenant que actúa como varios debe suministrarlo — omitido es422 PIX-0127, y un ISPB que el tenant no opera es422 PIX-0128— porque elegir un pagador arbitrariamente debitaría al cliente de otra institución. - Entre dos ledgers de la misma organización, la transferencia es interna. Un alias es único dentro de un ledger, así que no puede ser un solo asiento: el riel reserva el monto en el ledger del pagador contra su cuenta de compensación, registra el crédito final en el ledger del receptor contra su cuenta de compensación, y luego confirma la reserva. Las dos patas se asientan en el par de rutas
intraPsppropio de cada ledger, y cada libro se mantiene internamente de partida doble. - Entre dos organizaciones del mismo tenant, el pago es Pix ordinario. Dos organizaciones son dos participantes regulados, así que el dinero viaja por el riel de liquidación (SPI) exactamente como viajaría un pago a cualquier otra institución — mismo tenant nunca es “mismo libro”.
- Cada participante adicional se autentica como sí mismo. Las órdenes que salen de una organización adicional se envían a JD con la credencial propia de ese participante, aprovisionada por ISPB. Un participante cuya credencial no está aprovisionada rechaza su primera orden con
409 PIX-0092y libera la retención, y la sonda de readiness lo reporta caído nombrando ese ISPB antes de que el tráfico le llegue.
Apagarlo
Escribir una cadena vacía de vuelta en
tenant_policy/organizations se acepta y devuelve al tenant al comportamiento de solo predeterminado — el mismo estado que antes de la activación. No deshace nada ya asentado: el dinero registrado en un alcance adicional se queda en ese ledger, y ya no es alcanzable a través de este riel — cualquier flujo que resuelva a un alcance que el catálogo ya no declara rechaza con 500 PIX-0120 antes de tocar el ledger. Así que vacía la clave solo cuando ya nada se enruta a los libros adicionales: sin cuentas cuyos registros apunten a ellos, sin pagos en vuelo y sin participante hospedado montado sobre una organización adicional. Para retirar un libro conservando la función, elimina la entrada de ese ledger y deja el resto del catálogo en su lugar — la misma prueba de lectura aplica, alcance por alcance.
A dónde ir después
Configurar el riel
La cadena de aprovisionamiento que esta página extiende: los objetos del ledger, los registros del CRM, las claves de enrutamiento y el vínculo que nombra el par predeterminado.
El modelo directo e indirecto
En qué difiere este eje de hospedar participantes indirectos: un indirecto es una posición dentro de tu libro; una organización adicional es un participante directo con libros propios.
Variables de entorno
La configuración del momento del despliegue, y qué valores viven en claves del systemplane en su lugar.
Lista de errores de Pix JD
Todos los códigos
PIX-NNNN que esta página nombra, con su estado y el texto detail que lleva la respuesta.
