El catálogo de formatos
El catálogo da un inventario de solo lectura de los formatos que el motor de ingesta puede parsear. Es global primero y estático: los parsers integrados no llevan tenant, así que cada llamador autenticado ve la misma respuesta. El catálogo usa un árbol
region → family → variant que corresponde a los ejes del descriptor canónico de formato.
XX para formatos neutrales respecto a la región. Incluso una familia con un único layout canónico (por ejemplo camt) nombra su layout como el variant (camt053 arriba).
El catálogo no toma parámetros de ruta, de consulta ni de cuerpo. El tenant no afecta al catálogo integrado.
Plantillas de layout
Cuando un archivo usa un layout de ancho fijo específico de un operador o de una marca que ningún parser integrado cubre, registra una plantilla de layout. Una plantilla ubica un layout posicional bajo los ejes
{region, family, variant}. La ruta de parseo la resuelve como una fuente de layout aditiva para tu tenant.
Cada envío y cada edición pasan por un control de buena formación antes del almacenamiento. El desbordamiento, el solapamiento, la ausencia de campos obligatorios, un registro sin campos o una columna de dinero mal marcada se rechazan con 422, y Matcher nunca almacena esa plantilla.
Regla intocable del dinero: una columna de dinero debe declarar
kind: "decimal". El control de envío rechaza un campo de dinero que omite o marca mal su tipo. Ese campo nunca llega a la ruta de parseo.Crear una plantilla
region: región ISO alfa-2 (en mayúsculas) oXX.family: familia de formato de enumeración cerrada bajo la que se ubica la plantilla.variant: eje abierto de operador o marca (no debe estar en blanco).discriminatorStart/discriminatorLength: el rango de bytes que el parser lee para elegir un tipo de registro.records[]: cada tipo de registro con suwidthfijo (bytes) y susfieldsposicionales ordenados.fields[].kind:string,decimal(token literal de dinero o numérico, parseado más adelante) odate.requiredFields: nombres de campo que la variante debe declarar en sus tipos de registro.
201 con la plantilla almacenada, incluida su formatKey (por ejemplo br/cnab400/acme-cobranca), el discriminador, el layout posicional completo y recordWidths.
Listar y obtener plantillas
Actualizar y eliminar una plantilla
PUT es un reemplazo completo, no un parche parcial. Los invariantes de rango de bytes son propiedades de todo el layout. El reemplazo pasa por el mismo control de buena formación que aplica la ruta de creación. Un layout que falla se rechaza con 422, y la plantilla almacenada queda sin cambios.
204. Una plantilla ausente devuelve 404. Una colisión de clave de formato con otra plantilla activa devuelve 409.

