> ## Documentation Index
> Fetch the complete documentation index at: https://docs.lerian.studio/llms.txt
> Use this file to discover all available pages before exploring further.

# Reemplazar una plantilla de diseño de ancho fijo del operador

> Reemplaza por completo una plantilla de diseño de ancho fijo por tenant almacenada (records/fields/discriminator/recordWidths/requiredFields) por su id — un reemplazo completo PUT, no un parche disperso, ya que los invariantes de rango de bytes son propiedades de todo el diseño. El reemplazo pasa por la MISMA compuerta de buena formación que aplica la ruta de envío ANTES del almacenamiento: desbordamiento, solapamiento, requerido faltante, campo cero o una columna de dinero mal marcada (el dinero DEBE ser kind=decimal) rechaza con 422 y la plantilla almacenada queda sin cambios. Devuelve 404 cuando ninguna plantilla activa coincide, 409 cuando la nueva clave de formato colisiona con otra plantilla activa. Tenant desde el JWT; nunca del cuerpo.



## OpenAPI

````yaml es/openapi/v3-current/matcher.yaml put /v1/imports/formats/templates/{templateId}
openapi: 3.1.0
info:
  title: Matcher APIs
  description: >-
    Referencia completa de la API para el motor de conciliación Matcher, que
    proporciona conciliación automatizada de transacciones entre Midaz Ledger y
    sistemas externos.
  version: 4.1.0
  license:
    name: Elastic License 2.0
    url: https://www.elastic.co/licensing/elastic-license
servers:
  - url: https://matcher.sandbox.lerian.net
security: []
paths:
  /v1/imports/formats/templates/{templateId}:
    put:
      tags:
        - Ingestion
      summary: Reemplazar una plantilla de diseño de ancho fijo del operador
      description: >-
        Reemplaza por completo una plantilla de diseño de ancho fijo por tenant
        almacenada (records/fields/discriminator/recordWidths/requiredFields)
        por su id — un reemplazo completo PUT, no un parche disperso, ya que los
        invariantes de rango de bytes son propiedades de todo el diseño. El
        reemplazo pasa por la MISMA compuerta de buena formación que aplica la
        ruta de envío ANTES del almacenamiento: desbordamiento, solapamiento,
        requerido faltante, campo cero o una columna de dinero mal marcada (el
        dinero DEBE ser kind=decimal) rechaza con 422 y la plantilla almacenada
        queda sin cambios. Devuelve 404 cuando ninguna plantilla activa
        coincide, 409 cuando la nueva clave de formato colisiona con otra
        plantilla activa. Tenant desde el JWT; nunca del cuerpo.
      operationId: updateLayoutTemplate
      parameters:
        - description: Layout template ID
          in: path
          name: templateId
          required: true
          schema:
            description: ID de la plantilla de diseño
            format: uuid
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateLayoutTemplateRequest'
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LayoutTemplateResponse'
          description: OK
        default:
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Detail'
          description: Error
      security:
        - BearerAuth: []
components:
  schemas:
    CreateLayoutTemplateRequest:
      additionalProperties: false
      properties:
        discriminatorLength:
          description: Ancho del discriminador en bytes
          examples:
            - 1
          format: int64
          minimum: 1
          type: integer
        discriminatorStart:
          description: >-
            Desplazamiento de bytes (base cero) del discriminador de tipo de
            registro
          examples:
            - 0
          format: int64
          minimum: 0
          type: integer
        family:
          description: Familia de formato bajo la que se agrupa la plantilla
          examples:
            - cnab400
          minLength: 1
          type: string
        records:
          description: Tipos de registro declarados por el diseño
          items:
            $ref: '#/components/schemas/LayoutTemplateRecordRequest'
          minItems: 1
          type:
            - array
            - 'null'
        region:
          description: Región ISO alpha-2 (en mayúsculas) o XX
          examples:
            - BR
          minLength: 1
          type: string
        requiredFields:
          description: Nombres de campo que la variante debe declarar
          items:
            type: string
          type:
            - array
            - 'null'
        variant:
          description: Eje de variante de operador/marca
          examples:
            - acme-cobranca
          minLength: 1
          type: string
      required:
        - region
        - family
        - variant
        - discriminatorStart
        - discriminatorLength
        - records
      type: object
    LayoutTemplateResponse:
      additionalProperties: false
      properties:
        createdAt:
          description: Marca de tiempo de creación (RFC 3339, UTC)
          examples:
            - '2025-01-15T10:30:00Z'
          format: date-time
          type: string
        discriminator:
          $ref: '#/components/schemas/LayoutTemplateDiscriminatorResponse'
          description: >-
            Rango de bytes del discriminador de tipo de registro que el parser
            lee para seleccionar un tipo de registro
        formatKey:
          description: >-
            Clave de descriptor de formato canónico (región/familia/variante)
            bajo la que se registra la plantilla
          examples:
            - br/cnab400/acme-cobranca
          type: string
        id:
          description: Identificador de la plantilla
          examples:
            - 550e8400-e29b-41d4-a716-446655440000
          format: uuid
          type: string
        recordTypeCount:
          description: Número de tipos de registro que declara el diseño
          examples:
            - 1
          format: int64
          type: integer
        recordWidths:
          additionalProperties:
            format: int64
            type: integer
          description: >-
            Ancho fijo en bytes por tipo de registro, indexado por tipo de
            registro
          type: object
        records:
          description: >-
            Tipos de registro que declara el diseño, cada uno con su ancho fijo
            y campos de rango de bytes ordenados, ordenados por tipo de registro
          items:
            $ref: '#/components/schemas/LayoutTemplateRecordResponse'
          type:
            - array
            - 'null'
        requiredFields:
          description: >-
            Nombres de campo que la variante debe declarar en sus tipos de
            registro
          items:
            type: string
          type:
            - array
            - 'null'
        variantKey:
          description: Clave de variante en el archivo por la que se indexa el diseño
          examples:
            - acme-cobranca
          type: string
      required:
        - id
        - formatKey
        - variantKey
        - recordTypeCount
        - discriminator
        - records
        - recordWidths
        - requiredFields
        - createdAt
      type: object
    Detail:
      additionalProperties: false
      properties:
        code:
          description: >-
            Código de error de dominio estable y legible por máquina con alcance
            al servicio emisor (formato: <SERVICE>-NNNN).
          examples:
            - ERR-0001
          type: string
        detail:
          description: >-
            Una explicación legible por humanos específica de esta ocurrencia
            del problema.
          examples:
            - Property foo is required but is missing.
          type: string
        errors:
          description: Lista opcional de detalles de errores individuales
          items:
            $ref: '#/components/schemas/ErrorDetail'
          type:
            - array
            - 'null'
        instance:
          description: >-
            Una referencia URI que identifica la ocurrencia específica del
            problema.
          examples:
            - https://example.com/error-log/abc123
          format: uri
          type: string
        status:
          description: Código de estado HTTP
          examples:
            - 400
          format: int64
          type: integer
        title:
          description: >-
            Un resumen breve y legible por humanos del tipo de problema. Este
            valor no debería cambiar entre ocurrencias del error.
          examples:
            - Bad Request
          type: string
        type:
          default: about:blank
          description: >-
            Una referencia URI a documentación legible por humanos para el
            error.
          examples:
            - https://example.com/errors/example
          format: uri
          type: string
      type: object
    LayoutTemplateRecordRequest:
      additionalProperties: false
      properties:
        fields:
          description: Campos posicionales ordenados de este tipo de registro
          items:
            $ref: '#/components/schemas/LayoutTemplateFieldRequest'
          type:
            - array
            - 'null'
        recordType:
          description: >-
            Valor de tipo de registro que el segmento de bytes del discriminador
            debe coincidir (p. ej. "1")
          examples:
            - '1'
          type: string
        width:
          description: Ancho fijo en bytes que debe tener cada registro de este tipo
          examples:
            - 33
          format: int64
          type: integer
      required:
        - recordType
        - width
        - fields
      type: object
    LayoutTemplateDiscriminatorResponse:
      additionalProperties: false
      properties:
        length:
          description: Ancho del discriminador en bytes
          examples:
            - 1
          format: int64
          type: integer
        startByte:
          description: >-
            Desplazamiento de bytes (base cero) del discriminador de tipo de
            registro
          examples:
            - 0
          format: int64
          type: integer
      required:
        - startByte
        - length
      type: object
    LayoutTemplateRecordResponse:
      additionalProperties: false
      properties:
        fields:
          description: Campos posicionales ordenados de este tipo de registro
          items:
            $ref: '#/components/schemas/LayoutTemplateFieldResponse'
          type:
            - array
            - 'null'
        recordType:
          description: >-
            Valor de tipo de registro que coincide con el segmento de bytes del
            discriminador (p. ej. "1")
          examples:
            - '1'
          type: string
        width:
          description: Ancho fijo en bytes que debe tener cada registro de este tipo
          examples:
            - 33
          format: int64
          type: integer
      required:
        - recordType
        - width
        - fields
      type: object
    ErrorDetail:
      additionalProperties: false
      properties:
        location:
          description: >-
            Dónde ocurrió el error, p. ej. 'body.items[3].tags' o
            'path.thing-id'
          type: string
        message:
          description: Texto del mensaje de error
          type: string
        value:
          description: El valor en la ubicación indicada
      type: object
    LayoutTemplateFieldRequest:
      additionalProperties: false
      properties:
        kind:
          description: >-
            Tipo de valor: string (texto sin procesar), decimal (token literal
            de dinero/numérico, parseado más adelante) o date. Una columna de
            dinero DEBE ser decimal
          examples:
            - decimal
          type: string
        length:
          description: Ancho del campo en bytes (debe ser mayor que 0)
          examples:
            - 12
          format: int64
          type: integer
        name:
          description: >-
            Nombre de campo canónico que alimenta este segmento de bytes (p. ej.
            external_id, amount, currency, date)
          examples:
            - amount
          type: string
        startByte:
          description: Desplazamiento de bytes (base cero) donde comienza el campo
          examples:
            - 11
          format: int64
          type: integer
      required:
        - name
        - startByte
        - length
        - kind
      type: object
    LayoutTemplateFieldResponse:
      additionalProperties: false
      properties:
        kind:
          description: >-
            Tipo de valor: string (texto sin procesar), decimal (token literal
            de dinero/numérico, parseado más adelante) o date
          examples:
            - decimal
          type: string
        length:
          description: Ancho del campo en bytes
          examples:
            - 12
          format: int64
          type: integer
        name:
          description: >-
            Nombre de campo canónico que alimenta este segmento de bytes (p. ej.
            external_id, amount, currency, date)
          examples:
            - amount
          type: string
        startByte:
          description: Desplazamiento de bytes (base cero) donde comienza el campo
          examples:
            - 11
          format: int64
          type: integer
      required:
        - name
        - startByte
        - length
        - kind
      type: object
  securitySchemes:
    BearerAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT
      description: 'Autenticación con token Bearer (formato: "Bearer {token}")'

````