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

# Registrar una corrección sobre un contrato registrado

> Registra una corrección de algo que el cliente ya afirmó sobre un contrato registrado, y publica el hecho que la nombra.

Esta NO es una operación de Dataprev: no se usa ninguna credencial de la red y no se cruza ninguna frontera gubernamental. El Manual 005 revisión 1.13 indica que los campos de rectificación de la red ya no se usan y siempre devuelven null, por lo que el cliente es la única autoridad que puede tener una corrección: `source_authority` siempre es `client`.

NADA SE MUTA. Una corrección es una adición que nombra lo que sustituye, y el registro que corrige permanece inmutable en la base de datos exactamente como estaba. Corregir lo mismo dos veces agrega una segunda corrección que sustituye a la primera.

El gateway toma custodia del recurso corregido y calcula su SHA-256 por sí mismo; nunca se acepta un resumen declarado por el cliente. El hecho publicado lleva una ruta del mismo origen de vuelta a este gateway más ese resumen, y el consumidor lo obtiene y lo verifica por M2M autenticado.

| correction_type | payment_reference | supersedes |
|---|---|---|
| `ccb` | debe estar vacío | la corrección CCB anterior, o nada en la primera |
| `disbursement` | obligatorio | el pago confirmado que repara, luego la corrección anterior de ese pago |

Una corrección disbursement que nombra un pago del que este despliegue no tiene ninguna confirmación se rechaza con 404: una sustitución que no apunta a nada es peor que ninguna corrección.

X-Idempotency es obligatoria, opaca, de 1..128 bytes, y nunca tiene un valor por defecto. PostgreSQL es la autoridad: la misma clave repite el mismo cuerpo 202 y no publica un segundo hecho, y la misma clave que lleva una corrección diferente responde 422 sin devolver nunca el cuerpo anterior.



## OpenAPI

````yaml es/openapi/v3-current/consignado.yaml post /v1/consignado/contracts/{numero_contrato}/corrections
openapi: 3.1.0
info:
  contact:
    email: contact@lerian.studio
    name: Lerian Studio
    url: https://lerian.studio
  description: >-
    Superficie OpenAPI 3.1 para Lerian Consignado — Dataprev. API cubre las
    credenciales y la configuración de red de tenant, el margen de los
    trabajadores, las subastas y ofertas de préstamos, el registro y el ciclo de
    vida de los contratos, la confirmación de desembolsos, la portabilidad, la
    refinanciación, la renegociación, las garantías de FGTS, la conciliación,
    los fondos, las asignaciones, el uso, el rendimiento y las suscripciones a
    eventos. El material secreto se escribe en el almacén secreto tenant y
    ninguna operación lo devuelve nunca.
  license:
    name: Lerian Studio General License
  title: Lerian Consignado API
  version: v1.0.0
servers:
  - url: https://br-consignado-gw.sandbox.lerian.net
security:
  - BearerAuth: []
tags:
  - description: >-
      Custodia de credenciales de Dataprev y configuración pública del rail por
      tenant (carga, estado, rotación, revocación, código del solicitante y URL
      base del portal del trabajador)
    name: Credentials
  - description: >-
      Uso de la gateway del consignado en el ámbito del tenant: agregación de
      unidades facturables con precio por competencia
    name: Consignado Usage
  - description: >-
      Plano de control de suscripción al hub de streaming per-tenant (enumerar,
      crear, obtener, rotar, revocar y probar la entrega)
    name: Subscriptions
  - description: >-
      Superficie de rail de nómina Dataprev: lecturas de saldo y autorización
      FGTS, ejecución de garantía FGTS, suspensión de contrato, reactivación y
      cambios de términos, documentos de contrato propios de la red y lecturas
      bajo demanda de leilão solicitações, escriturações, repasses y
      terminaciones de empleo.
    name: Consignado Rail
  - description: >-
      Superficie de comando de red síncrona: las operaciones de un bancarizador
      sin que el prestamista conduzca sobre HTTP. Cada uno comparte su
      implementación de comando con el activador de evento de prestamista
      equivalente.
    name: Consignado Rail Commands
  - description: >-
      Confirmación de desembolso propiedad de la gateway: un banco cliente que
      registra el dinero que ya pagó a un trabajador. No cruza ninguna frontera
      gubernamental y no representa ninguna operación Dataprev.
    name: Consignado Disbursement
  - description: >
      Rendimiento de red Dataprev saliente de autoservicio per-tenant: lea y
      configure el requests-per-second propio de este tenant, incluida una pausa
      deliberada en cero
    name: Consignado Throughput
paths:
  /v1/consignado/contracts/{numero_contrato}/corrections:
    post:
      tags:
        - Consignado Corrections
      summary: Registrar una corrección sobre un contrato registrado
      description: >-
        Registra una corrección de algo que el cliente ya afirmó sobre un
        contrato registrado, y publica el hecho que la nombra.


        Esta NO es una operación de Dataprev: no se usa ninguna credencial de la
        red y no se cruza ninguna frontera gubernamental. El Manual 005 revisión
        1.13 indica que los campos de rectificación de la red ya no se usan y
        siempre devuelven null, por lo que el cliente es la única autoridad que
        puede tener una corrección: `source_authority` siempre es `client`.


        NADA SE MUTA. Una corrección es una adición que nombra lo que sustituye,
        y el registro que corrige permanece inmutable en la base de datos
        exactamente como estaba. Corregir lo mismo dos veces agrega una segunda
        corrección que sustituye a la primera.


        El gateway toma custodia del recurso corregido y calcula su SHA-256 por
        sí mismo; nunca se acepta un resumen declarado por el cliente. El hecho
        publicado lleva una ruta del mismo origen de vuelta a este gateway más
        ese resumen, y el consumidor lo obtiene y lo verifica por M2M
        autenticado.


        | correction_type | payment_reference | supersedes |

        |---|---|---|

        | `ccb` | debe estar vacío | la corrección CCB anterior, o nada en la
        primera |

        | `disbursement` | obligatorio | el pago confirmado que repara, luego la
        corrección anterior de ese pago |


        Una corrección disbursement que nombra un pago del que este despliegue
        no tiene ninguna confirmación se rechaza con 404: una sustitución que no
        apunta a nada es peor que ninguna corrección.


        X-Idempotency es obligatoria, opaca, de 1..128 bytes, y nunca tiene un
        valor por defecto. PostgreSQL es la autoridad: la misma clave repite el
        mismo cuerpo 202 y no publica un segundo hecho, y la misma clave que
        lleva una corrección diferente responde 422 sin devolver nunca el cuerpo
        anterior.
      operationId: recordConsignadoContractCorrection
      parameters:
        - description: >-
            The rail contract number the correction is about. Exact,
            control-free UTF-8, bounded in BYTES: 2..15, which is the consumer's
            own bound for this field.
          in: path
          name: numero_contrato
          required: true
          schema:
            description: >-
              The rail contract number the correction is about. Exact,
              control-free UTF-8, bounded in BYTES: 2..15, which is the
              consumer's own bound for this field.
            examples:
              - 99999999999AN1
            maxLength: 15
            minLength: 2
            type: string
        - description: >-
            Mandatory opaque replay key, 1..128 bytes of valid UTF-8, preserved
            byte for byte. No default, no alias header, no case folding: two
            keys differing in one byte are two keys.
          in: header
          name: X-Idempotency
          required: true
          schema:
            description: >-
              Mandatory opaque replay key, 1..128 bytes of valid UTF-8,
              preserved byte for byte. No default, no alias header, no case
              folding: two keys differing in one byte are two keys.
            examples:
              - idem-correcao-0001
            maxLength: 128
            minLength: 1
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ContractCorrectionRequest'
        required: true
      responses:
        '202':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ContractCorrectionResponse'
          description: >-
            The correction is durably recorded and its fact queued. A replay
            under the same key answers with the identical body.
        '401':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Detail'
          description: Authentication is required to access this resource.
        '403':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Detail'
          description: You do not have permission to access this resource.
        '404':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Detail'
          description: >-
            A disbursement correction named a payment reference this deployment
            holds no confirmation for.
        '409':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Detail'
          description: >-
            Another correction already supersedes the same event. The chain is a
            list, not a tree: re-read the head and retry.
        '422':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Detail'
          description: >-
            The transport key, the contract number or the body is refused. A key
            that already bought a DIFFERENT correction lands here too, and the
            earlier body is never returned.
        '501':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Detail'
          description: This deployment does not record contract corrections.
        '503':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Detail'
          description: Contract correction persistence is temporarily unavailable.
      security:
        - BearerAuth: []
components:
  schemas:
    ContractCorrectionRequest:
      additionalProperties: false
      properties:
        content_type:
          description: >-
            Media type of the corrected resource. Its media type must be
            application/pdf or application/zip — parameters are permitted — and
            the bytes are sniffed against it.
          examples:
            - application/pdf
          maxLength: 128
          type: string
        correction_type:
          description: >-
            What this correction corrects. Selects which fact is published; the
            payload shape is identical for both.
          enum:
            - ccb
            - disbursement
          examples:
            - ccb
          type: string
        file_name:
          description: Original file name of the corrected resource.
          examples:
            - ccb-corrigida.pdf
          maxLength: 255
          type: string
        payment_reference:
          description: >-
            The payment_reference of the confirmed disbursement this correction
            repairs. Required when correction_type is disbursement, and must be
            empty otherwise.
          examples:
            - E32074986202608011200A1B2C3D4E5F
          maxLength: 256
          type: string
        resource_base64:
          description: >-
            Canonical base64 of the corrected resource. The gateway computes the
            SHA-256 itself; no client-declared digest is accepted.
          examples:
            - JVBERi0xLjcKJSVFT0Y=
          maxLength: 8388608
          type: string
      required:
        - content_type
        - correction_type
        - file_name
        - payment_reference
        - resource_base64
      type: object
    ContractCorrectionResponse:
      additionalProperties: false
      properties:
        correction_id:
          description: >-
            The gateway's identity for this correction. It is also the published
            event id.
          examples:
            - 1f5b9c26-6f5a-4f77-9c1c-5d1c0f0a9b21
          type: string
        correction_type:
          description: What was corrected.
          examples:
            - ccb
          type: string
        gateway_received_at:
          description: When the gateway took custody, strict RFC 3339 UTC.
          examples:
            - '2026-08-29T12:00:05Z'
          type: string
        numero_contrato:
          description: The rail contract number, echoed from the path.
          examples:
            - 99999999999AN1
          type: string
        resource_digest_sha256:
          description: Lowercase hex SHA-256 the gateway computed over the corrected bytes.
          examples:
            - e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
          type: string
        resource_uri:
          description: >-
            Same-origin relative path serving the corrected resource under M2M
            bearer auth.
          examples:
            - >-
              /v1/consignado/contracts/99999999999AN1/corrections/1f5b9c26-6f5a-4f77-9c1c-5d1c0f0a9b21
          type: string
        source_authority:
          description: >-
            Who is authoritative for the corrected value. Always client on this
            gateway.
          examples:
            - client
          type: string
        supersedes_event_id:
          description: >-
            The event id this correction supersedes: the corrected disbursement
            confirmation, or the previous correction. ABSENT on a first CCB
            correction, meaning the original contract fact.
          examples:
            - 7c2a1b40-11f4-4a1e-9a44-1f4d7cbb8e02
          type: string
      required:
        - correction_id
        - numero_contrato
        - correction_type
        - source_authority
        - resource_uri
        - resource_digest_sha256
        - gateway_received_at
      type: object
    Detail:
      additionalProperties: false
      properties:
        code:
          description: >-
            Stable, machine-readable domain error code scoped to the emitting
            service (format: <SERVICE>-NNNN).
          examples:
            - ERR-0001
          type: string
        detail:
          description: >-
            A human-readable explanation specific to this occurrence of the
            problem.
          examples:
            - Property foo is required but is missing.
          type: string
        errors:
          description: Optional list of individual error details
          items:
            $ref: '#/components/schemas/ErrorDetail'
          type:
            - array
            - 'null'
        instance:
          description: >-
            A URI reference that identifies the specific occurrence of the
            problem.
          examples:
            - https://example.com/error-log/abc123
          format: uri
          type: string
        status:
          description: HTTP status code
          examples:
            - 400
          format: int64
          type: integer
        title:
          description: >-
            A short, human-readable summary of the problem type. This value
            should not change between occurrences of the error.
          examples:
            - Bad Request
          type: string
        type:
          default: about:blank
          description: A URI reference to human-readable documentation for the error.
          examples:
            - https://example.com/errors/example
          format: uri
          type: string
        upstream:
          $ref: '#/components/schemas/Upstream'
          description: >-
            RFC 9457 extension member: the error a proxied third-party provider
            reported. Absent unless the emitting service explicitly surfaced
            one.
      type: object
    ErrorDetail:
      additionalProperties: false
      properties:
        location:
          description: >-
            Where the error occurred, e.g. 'body.items[3].tags' or
            'path.thing-id'
          type: string
        message:
          description: Error message text
          type: string
        value:
          description: The value at the given location
      type: object
    Upstream:
      additionalProperties: false
      properties:
        code:
          description: The upstream provider's own error code, verbatim.
          examples:
            - E4001
          type: string
        message:
          description: >-
            The upstream provider's own error message, verbatim (bounded, never
            its raw response body).
          examples:
            - account not found at provider
          type: string
      type: object
  securitySchemes:
    BearerAuth:
      bearerFormat: JWT
      description: JWT bearer token issued by the identity provider.
      scheme: bearer
      type: http

````