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

# List what each averbado contract of this tenant still owes

> Walks the tenant's saldo devedor obligation book, lowest contract number first: what each averbado contract still owes, as this gateway itself reports it to the payroll rail under M015.

'valor_saldo_devedor' is DERIVED on every read and never stored: it is the nominal remaining balance, published BESIDE 'valor_parcela', 'numero_parcelas' and 'parcelas_pagas' precisely so a client can redo the multiplication and see the same figure the rail was given. 'valor_parcela' is republished byte for byte as the schedule stores it and is never re-scaled, because a reformatted number would make the screen and the rail report two spellings of one amount.

'quitado' is likewise derived, as parcelas_pagas >= numero_parcelas, the same predicate the M015 clock's own scan filters on. It is not a stored flag, because two owners of that fact would disagree.

Filter with 'quitado=true' for the settled obligations or 'quitado=false' for the ones still paying. OMITTING the parameter is the whole book, which is what an operator arriving with no filter is asking for, and it is the only way to see a settled obligation at all: the table's own index deliberately excludes them, and they are exactly the rows a client reconciling a finished contract comes to check.

'proximo_marco' is ALWAYS null today. The column exists and its only intended writer, the ANBIMA calendar clock, does not write it yet. It is published anyway so a screen has one name for the fact rather than two once a writer appears. 'ultimo_envio_at' is null until this gateway has reported the obligation at least once, and it travels as null rather than as the zero instant.

The worker's CPF is deliberately absent from every row. It is on the table only because M015 resends it on each report, and this screen answers its question without it.

Paging is keyset over the contract number, which is half the table's own primary key, so the page costs an index walk and no sort. Send the previous page's page.next_after as after. has_more is true exactly when another page exists, and next_after is null exactly when it is false, so a client loop may terminate on either. The cursor never expires; a cursor this service did not mint is refused with 422 rather than silently restarting the walk from the top.

It answers from a LOCAL table and never reaches the Dataprev rail, so it cannot answer 501 and it is served on a deployment with the rail off entirely. The tenant is derived from the validated identity and is never read from the request.



## OpenAPI

````yaml /en/openapi/v3-current/consignado.yaml get /v1/consignado/saldo-devedor
openapi: 3.1.0
info:
  contact:
    email: contact@lerian.studio
    name: Lerian Studio
    url: https://lerian.studio
  description: >-
    OpenAPI 3.1 surface for Lerian Consignado — Dataprev. The API covers tenant
    credentials and rail configuration, worker margin, loan auctions and bids,
    contract registration and lifecycle, disbursement confirmation, portability,
    refinancing, renegotiation, FGTS guarantees, reconciliation, funds,
    assignments, usage, throughput, and event subscriptions. Secret material is
    written to the tenant secret store and is never returned by any operation.
  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: >-
      Per-tenant Dataprev credential custody and public rail configuration
      (upload, status, rotation, revoke, requester code, and worker portal base
      URL)
    name: Credentials
  - description: >-
      Tenant-scoped consignado gateway usage: priced billable-unit aggregation
      per competência
    name: Consignado Usage
  - description: >-
      Per-tenant streaming-hub subscription control-plane (list, create, get,
      rotate, revoke, and test delivery)
    name: Subscriptions
  - description: >-
      Dataprev payroll-rail surface: FGTS balance and authorization reads, the
      FGTS guarantee execution, contract suspension, reactivation and term
      changes, the rail's own contract documents, and the on-demand reads of
      leilão solicitações, escriturações, repasses and employment terminations
    name: Consignado Rail
  - description: >-
      Synchronous rail command surface: the operations a bancarizador without
      the lender drives over HTTP. Each shares its command implementation with
      the equivalent lender event trigger.
    name: Consignado Rail Commands
  - description: >-
      Gateway-owned disbursement confirmation: a client bank recording money it
      has ALREADY paid to a worker. It crosses no government boundary and
      proxies no Dataprev operation.
    name: Consignado Disbursement
  - description: >-
      Per-tenant self-service outbound Dataprev rail throughput: read and set
      this tenant's own requests-per-second, including a deliberate pause at
      zero
    name: Consignado Throughput
paths:
  /v1/consignado/saldo-devedor:
    get:
      tags:
        - Consignado Saldo Devedor
      summary: List what each averbado contract of this tenant still owes
      description: >-
        Walks the tenant's saldo devedor obligation book, lowest contract number
        first: what each averbado contract still owes, as this gateway itself
        reports it to the payroll rail under M015.


        'valor_saldo_devedor' is DERIVED on every read and never stored: it is
        the nominal remaining balance, published BESIDE 'valor_parcela',
        'numero_parcelas' and 'parcelas_pagas' precisely so a client can redo
        the multiplication and see the same figure the rail was given.
        'valor_parcela' is republished byte for byte as the schedule stores it
        and is never re-scaled, because a reformatted number would make the
        screen and the rail report two spellings of one amount.


        'quitado' is likewise derived, as parcelas_pagas >= numero_parcelas, the
        same predicate the M015 clock's own scan filters on. It is not a stored
        flag, because two owners of that fact would disagree.


        Filter with 'quitado=true' for the settled obligations or
        'quitado=false' for the ones still paying. OMITTING the parameter is the
        whole book, which is what an operator arriving with no filter is asking
        for, and it is the only way to see a settled obligation at all: the
        table's own index deliberately excludes them, and they are exactly the
        rows a client reconciling a finished contract comes to check.


        'proximo_marco' is ALWAYS null today. The column exists and its only
        intended writer, the ANBIMA calendar clock, does not write it yet. It is
        published anyway so a screen has one name for the fact rather than two
        once a writer appears. 'ultimo_envio_at' is null until this gateway has
        reported the obligation at least once, and it travels as null rather
        than as the zero instant.


        The worker's CPF is deliberately absent from every row. It is on the
        table only because M015 resends it on each report, and this screen
        answers its question without it.


        Paging is keyset over the contract number, which is half the table's own
        primary key, so the page costs an index walk and no sort. Send the
        previous page's page.next_after as after. has_more is true exactly when
        another page exists, and next_after is null exactly when it is false, so
        a client loop may terminate on either. The cursor never expires; a
        cursor this service did not mint is refused with 422 rather than
        silently restarting the walk from the top.


        It answers from a LOCAL table and never reaches the Dataprev rail, so it
        cannot answer 501 and it is served on a deployment with the rail off
        entirely. The tenant is derived from the validated identity and is never
        read from the request.
      operationId: listConsignadoSaldoDevedorObrigacoes
      parameters:
        - description: >-
            Narrows the page to settled obligations (true) or to the ones still
            paying (false). Omitted means the whole book, which is never the
            same as either half.
          explode: false
          in: query
          name: quitado
          schema:
            description: >-
              Narrows the page to settled obligations (true) or to the ones
              still paying (false). Omitted means the whole book, which is never
              the same as either half.
            enum:
              - 'true'
              - 'false'
            examples:
              - 'false'
            type: string
        - description: >-
            The previous page's page.next_after. Omitted starts at the lowest
            contract number. A cursor this service did not mint is refused,
            never restarted from the top.
          explode: false
          in: query
          name: after
          schema:
            description: >-
              The previous page's page.next_after. Omitted starts at the lowest
              contract number. A cursor this service did not mint is refused,
              never restarted from the top.
            examples:
              - >-
                eyJ2IjoxLCJyIjoiYm9hcmQiLCJ0IjoiMjAyNi0wOC0xNFQwOToxMjozM1oiLCJrIjpbImMwMDEyIl19
            type: string
        - description: >-
            Maximum number of obligations to return. Omitted means the ceiling
            of 200.
          explode: false
          in: query
          name: limit
          schema:
            description: >-
              Maximum number of obligations to return. Omitted means the ceiling
              of 200.
            examples:
              - 50
            format: int64
            maximum: 200
            minimum: 1
            type: integer
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SaldoDevedorPage'
          description: OK
        '401':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Detail'
          description: Unauthorized
        '403':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Detail'
          description: Forbidden
        '422':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Detail'
          description: Unprocessable Entity
        '429':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Detail'
          description: Too Many Requests
        '500':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Detail'
          description: Internal Server Error
        '503':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Detail'
          description: Service Unavailable
      security:
        - BearerAuth: []
components:
  schemas:
    SaldoDevedorPage:
      additionalProperties: false
      properties:
        items:
          items:
            $ref: '#/components/schemas/SaldoDevedorItem'
          type: array
        page:
          $ref: '#/components/schemas/KeysetPageMetadata'
      required:
        - items
        - page
      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
    SaldoDevedorItem:
      additionalProperties: false
      properties:
        codigo_inscricao_empregador:
          description: 'Which register the employer identifier belongs to: 1 CNPJ, 2 CPF.'
          examples:
            - '1'
          type: string
        competencia_inicio_desconto:
          description: Payroll competencia the deductions start in, yyyyMM.
          examples:
            - '202601'
          type: string
        matricula:
          description: The worker's payroll registration with the employer.
          examples:
            - MATCEN716
          type: string
        numero_contrato:
          description: The rail contract number this obligation belongs to.
          examples:
            - 99999999999AN1
          type: string
        numero_inscricao_empregador:
          description: The employer identifier itself, digits only.
          examples:
            - '42422253000101'
          type: string
        numero_parcelas:
          description: How many instalments the cronograma minimo E0 minted.
          examples:
            - 12
          format: int64
          type: integer
        parcelas_pagas:
          description: How many competencias have amortized so far.
          examples:
            - 3
          format: int64
          type: integer
        proximo_marco:
          description: >-
            The next scheduled-report marker, in UTC. Always null today: the
            column exists but its only intended writer does not write it.
          examples:
            - null
          format: date-time
          type:
            - string
            - 'null'
        quitado:
          description: >-
            Whether the obligation is settled, derived from parcelas_pagas
            against numero_parcelas and never a stored flag.
          examples:
            - false
          type: boolean
        ultimo_envio_at:
          description: >-
            When this gateway last reported this obligation to the rail, in UTC.
            Null means nothing has been sent yet.
          examples:
            - '2026-08-14T09:12:33Z'
          format: date-time
          type:
            - string
            - 'null'
        valor_parcela:
          description: >-
            The instalment as the schedule stores it, republished verbatim as a
            BRL decimal string.
          examples:
            - '1116.31'
          type: string
        valor_saldo_devedor:
          description: >-
            The nominal remaining balance this gateway reports under M015,
            derived from valor_parcela and the instalments still open. "0.00"
            once the obligation is quitada.
          examples:
            - '10046.79'
          type: string
      required:
        - numero_contrato
        - matricula
        - codigo_inscricao_empregador
        - numero_inscricao_empregador
        - numero_parcelas
        - parcelas_pagas
        - valor_parcela
        - valor_saldo_devedor
        - competencia_inicio_desconto
        - ultimo_envio_at
        - proximo_marco
        - quitado
      type: object
    KeysetPageMetadata:
      additionalProperties: false
      properties:
        after:
          description: >-
            The cursor this page resumed from, echoed back. Null when the read
            started at the beginning.
          examples:
            - >-
              eyJ2IjoxLCJyIjoiYm9hcmQiLCJ0IjoiMjAyNi0wOC0xNFQwOToxMjozM1oiLCJrIjpbImMwMDEyIl19
          type:
            - string
            - 'null'
        has_more:
          description: Whether at least one further page exists.
          examples:
            - true
          type: boolean
        next_after:
          description: >-
            The cursor for the page after this one. Null exactly when has_more
            is false.
          examples:
            - >-
              eyJ2IjoxLCJyIjoiYm9hcmQiLCJ0IjoiMjAyNi0wOC0xNFQwOTowNzo1MVoiLCJrIjpbImMwMDM3Il19
          type:
            - string
            - 'null'
      required:
        - after
        - next_after
        - has_more
      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

````