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

# Confirmar um desembolso já pago ao trabalhador

> Registra o fato durável informado pelo cliente de que o trabalhador já recebeu o desembolso. Não é uma operação Dataprev: não usa credenciais do trilho, não consome limite governamental e não consulta produtos a jusante para avaliar a plausibilidade do pagamento.

Confirmações órfãs são aceitas, inclusive para contratos que esta implantação nunca registrou localmente. Um contrato também pode ter mais de um pagamento. A identidade é (tenant, numero_contrato, payment_reference); outro pagamento com referência diferente é um novo fato, não um conflito.

X-Idempotency é obrigatório, opaco, tem de 1 a 128 bytes e não é normalizado. Chaves que diferem em um byte são distintas; não há alias X-Idempotency-Key.

| caso | estado | X-Idempotency-Replayed |
|---|---|---|
| primeira aceitação | 202 | ausente |
| mesma chave, mesma solicitação, atendida pelo cache de transporte | 202, bytes idênticos | true |
| mesma chave, mesma solicitação, atendida pela autoridade durável | 202, bytes idênticos | ausente |
| mesma chave, solicitação divergente | 422 — nunca o corpo anterior | conforme o middleware compartilhado |
| nova chave, mesmo pagamento | 202, o mesmo corpo | ausente |
| nova chave, mesma referência de pagamento, dinheiro diferente | 409 | o que quer que o middleware compartilhado tenha escrito |

PostgreSQL é a autoridade para cada registro. O cache de idempotência de transporte é apenas um acelerador de melhor esforço. Se falhar antes da solicitação ser decidida ou depois da confirmação, a resposta continua durável; a única diferença é a ausência do cabeçalho de repetição. Uma falha de cache não transforma um pagamento registrado em 503. Uma interrupção compartilhada do Redis é diferente e pode ser recusada antes pelo limitador de taxa do tenant.



## OpenAPI

````yaml pt/openapi/v3-current/consignado.yaml post /v1/consignado/contracts/{numero_contrato}/disbursement-confirmation
openapi: 3.1.0
info:
  contact:
    email: contact@lerian.studio
    name: Lerian Studio
    url: https://lerian.studio
  description: >-
    Superfície OpenAPI 3.1 para Lerian Consignado — Dataprev. o API cobre
    credenciais tenant e configuração de rede, margem do trabalhador, leilões e
    licitações de empréstimos, registro e ciclo de vida do contrato, confirmação
    de desembolso, portabilidade, refinanciamento, renegociação, garantias FGTS,
    reconciliação, fundos, atribuições, uso, rendimento e assinaturas de
    eventos. o material secreto é gravado no armazenamento secreto tenant e
    nunca é devolvido por nenhuma operação.
  license:
    name: Lerian Studio General License
  title: Lerian Consignado API
  version: v1.0.0
servers:
  - url: https://consignado.sandbox.lerian.net
security:
  - BearerAuth: []
tags:
  - description: >-
      Custódia de credenciais do Dataprev e configuração pública do rail por
      tenant (upload, status, rotação, revogação, código do solicitante e URL
      base do portal do trabalhador)
    name: Credentials
  - description: >-
      Uso do gateway consignado no escopo do tenant: agregação de unidades
      faturáveis ​​com preço por competência
    name: Consignado Usage
  - description: >-
      Per-tenant plano de controle de assinatura do streaming-hub (listar,
      criar, obter, girar, revogar e testar a entrega)
    name: Subscriptions
  - description: >-
      Superfície folha de pagamento da rail Dataprev: leituras de saldo e
      autorização FGTS, execução de garantias FGTS, suspensão de contrato,
      reativação e alteração de prazo, documentos contratuais próprios da rede e
      leituras sob demanda de transações, escriturações, repasses e rescisões
      trabalhistas
    name: Consignado Rail
  - description: >-
      Superfície de comando da rede síncrona: as operações que um bancarizador
      sem o credor realizam sobre HTTP. cada um compartilha sua implementação de
      comando com o gatilho de evento de credor equivalente.
    name: Consignado Rail Commands
  - description: >-
      Confirmação de desembolso de propriedade do gateway: um banco cliente
      registrando o dinheiro que ALREADY pagou a um trabalhador. ele não cruza
      nenhuma fronteira governamental e não representa nenhuma operação
      Dataprev.
    name: Consignado Disbursement
  - description: >
      Taxa de transferência da rail Dataprev de saída de autoatendimento
      per-tenant: leia e defina o próprio requests-per-second deste tenant,
      incluindo uma pausa deliberada em zero
    name: Consignado Throughput
paths:
  /v1/consignado/contracts/{numero_contrato}/disbursement-confirmation:
    post:
      tags:
        - Consignado Disbursement
      summary: Confirmar um desembolso já pago ao trabalhador
      description: >-
        Registra o fato durável informado pelo cliente de que o trabalhador já
        recebeu o desembolso. Não é uma operação Dataprev: não usa credenciais
        do trilho, não consome limite governamental e não consulta produtos a
        jusante para avaliar a plausibilidade do pagamento.


        Confirmações órfãs são aceitas, inclusive para contratos que esta
        implantação nunca registrou localmente. Um contrato também pode ter mais
        de um pagamento. A identidade é (tenant, numero_contrato,
        payment_reference); outro pagamento com referência diferente é um novo
        fato, não um conflito.


        X-Idempotency é obrigatório, opaco, tem de 1 a 128 bytes e não é
        normalizado. Chaves que diferem em um byte são distintas; não há alias
        X-Idempotency-Key.


        | caso | estado | X-Idempotency-Replayed |

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

        | primeira aceitação | 202 | ausente |

        | mesma chave, mesma solicitação, atendida pelo cache de transporte |
        202, bytes idênticos | true |

        | mesma chave, mesma solicitação, atendida pela autoridade durável |
        202, bytes idênticos | ausente |

        | mesma chave, solicitação divergente | 422 — nunca o corpo anterior |
        conforme o middleware compartilhado |

        | nova chave, mesmo pagamento | 202, o mesmo corpo | ausente |

        | nova chave, mesma referência de pagamento, dinheiro diferente | 409 |
        o que quer que o middleware compartilhado tenha escrito |


        PostgreSQL é a autoridade para cada registro. O cache de idempotência de
        transporte é apenas um acelerador de melhor esforço. Se falhar antes da
        solicitação ser decidida ou depois da confirmação, a resposta continua
        durável; a única diferença é a ausência do cabeçalho de repetição. Uma
        falha de cache não transforma um pagamento registrado em 503. Uma
        interrupção compartilhada do Redis é diferente e pode ser recusada antes
        pelo limitador de taxa do tenant.
      operationId: confirmConsignadoDisbursement
      parameters:
        - description: >-
            The rail contract number the money was paid against (Manual 004
            §2.2.2 p.18: Texto, 15). Exact, control-free UTF-8, bounded in
            BYTES: no trimming and no case folding. Nothing looks it up — an
            orphan confirmation for a contract this deployment never registered
            is first-class.
          in: path
          name: numero_contrato
          required: true
          schema:
            description: >-
              The rail contract number the money was paid against (Manual 004
              §2.2.2 p.18: Texto, 15). Exact, control-free UTF-8, bounded in
              BYTES: no trimming and no case folding. Nothing looks it up — an
              orphan confirmation for a contract this deployment never
              registered is first-class.
            examples:
              - 99999999999AN1
            maxLength: 15
            minLength: 1
            type: string
        - description: >-
            Mandatory opaque replay key, 1..128 bytes of valid UTF-8, preserved
            byte for byte. There is no default, no X-Idempotency-Key alias, no
            case folding and no normalization: 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. There is no default, no X-Idempotency-Key
              alias, no case folding and no normalization: two keys differing in
              one byte are two keys.
            examples:
              - idem-desembolso-0001
            maxLength: 128
            minLength: 1
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/DisbursementConfirmationRequest'
        required: true
      responses:
        '202':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DisbursementConfirmationResponse'
          description: >-
            The confirmation is durably recorded. A replay of the same payment —
            under the same key or a new one — 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.
        '409':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Detail'
          description: >-
            The key is in flight, or this payment reference already holds an
            immutable confirmation carrying different money.
        '413':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Detail'
          description: The raw body exceeds the 1 KiB wire guard.
        '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 confirmation lands here too, and the
            earlier body is never returned.
        '501':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Detail'
          description: This deployment records no disbursement confirmations.
        '503':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Detail'
          description: >-
            Disbursement confirmation persistence is temporarily unavailable.
            Only mandatory persistence counts — PostgreSQL and the outbox. An
            idempotency-cache failure never produces this answer, in either
            direction: before the request is decided the cache is bypassed, and
            after the confirmation is committed the recorded 202 stands.
      security:
        - BearerAuth: []
components:
  schemas:
    DisbursementConfirmationRequest:
      additionalProperties: false
      properties:
        amount:
          description: >-
            The BRL amount already paid to the worker, as a canonical positive
            decimal string matching ^[1-9][0-9]*\.[0-9]{2}$ (at most 13 bytes).
            A string, never a JSON number: money never passes through a float.
          examples:
            - '2000.00'
          maxLength: 13
          type: string
        paid_at:
          description: >-
            When the money was paid, strict RFC 3339 UTC with a literal Z
            (2026-08-01T12:00:00Z). Exactly one spelling per instant: a +00:00
            offset, a lowercase z, fractional seconds or a missing zone are
            refused, never normalized.
          examples:
            - '2026-08-01T12:00:00Z'
          maxLength: 20
          type: string
        payment_reference:
          description: >-
            The client's opaque payment reference — a Pix EndToEndId, a TED
            protocol number, an internal settlement id. Valid UTF-8, 1..256
            bytes, preserved byte for byte with no trimming, case folding or
            normalization.
          examples:
            - E32074986202608011200A1B2C3D4E5F
          maxLength: 256
          type: string
      required:
        - amount
        - paid_at
        - payment_reference
      type: object
    DisbursementConfirmationResponse:
      additionalProperties: false
      properties:
        amount:
          description: The confirmed amount, echoed verbatim.
          examples:
            - '2000.00'
          type: string
        confirmation_id:
          description: The gateway's identity for this immutable confirmation.
          examples:
            - 1f5b9c26-6f5a-4f77-9c1c-5d1c0f0a9b21
          type: string
        confirmed_at:
          description: >-
            When the gateway durably recorded the confirmation, strict RFC 3339
            UTC.
          examples:
            - '2026-08-01T12:00:05Z'
          type: string
        numero_contrato:
          description: >-
            The rail contract number the confirmation was addressed to, echoed
            from the path.
          examples:
            - 99999999999AN1
          type: string
        paid_at:
          description: When the money was paid, echoed verbatim.
          examples:
            - '2026-08-01T12:00:00Z'
          type: string
        payment_reference:
          description: The client's payment reference, echoed verbatim.
          examples:
            - E32074986202608011200A1B2C3D4E5F
          type: string
      required:
        - confirmation_id
        - numero_contrato
        - amount
        - paid_at
        - payment_reference
        - confirmed_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

````