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

# Calcula a correção de pensão alimentícia em atraso

> Corrige as parcelas em atraso de pensão alimentícia: aplica índices de correção monetária e juros por período — declare o tipo em `interests[].kind` (`simple` usa a taxa do payload, `legal_rate` aplica a Taxa Legal da Lei 14.905/2024 e `savings` a poupança) —, soma as despesas extraordinárias (`expenses`), apura multa e honorários verba a verba (`fines`/`fees`) e devolve o cronograma detalhado por parcela, por abatimento e por despesa.

`installments` precisa de **pelo menos um** item. O status `paid` define o comportamento: `unpaid` (parcela em aberto), `paid` (parcela quitada — ignorada no cálculo) ou `partial` (parcela com pagamentos parciais em `rebates` internos). Abatimentos avulsos vão em `rebates` no topo do payload e são imputados às parcelas em ordem cronológica (`allocations` na resposta).

As listas `fines`/`fees` vencem os campos legados `fine`/`legal_fees`, que seguem obrigatórios no corpo. Nenhuma data pode ser posterior a `calculation_date`.



## OpenAPI

````yaml /openapi/v1.json post /api/v1/calculadoras/pensao-alimenticia
openapi: 3.0.0
info:
  title: Calculadoras Jusfy API
  description: >-
    API pública das calculadoras jurídicas Jusfy. Envie um payload de cálculo

    e receba o resultado já processado pelo motor de cálculo da Jusfy.


    ## Autenticação


    Todas as rotas exigem uma **API key** enviada no header `x-api-key`:


    ```http

    x-api-key: sua_api_key

    ```


    Sem a key, ou com uma key inativa/inválida, a requisição é recusada com

    `401`/`403`. As keys são provisionadas pela equipe Jusfy.


    Cada key tem uma lista de **escopos**, um por produto (cada calculadora,
    cada

    consulta, o JusScore), e só acessa as rotas dos produtos liberados para ela.

    Chamar um produto fora da lista responde `403` com `code:
    insufficient_scope`

    e o escopo que faltou na `message` (ex.: `Missing scope:
    consultas.cnh:execute`).

    Os produtos são liberados pela equipe Jusfy; produto novo não é liberado

    automaticamente para quem já integra.


    A consulta do próprio consumo (`GET /api/v1/consumo`) não exige escopo:

    qualquer key de cliente ativo a acessa.


    ## Formato das respostas


    Nas **calculadoras**, o sucesso devolve o **resultado do cálculo**

    diretamente no corpo, sem envelope.


    Nas **consultas**, no JusScore e no consumo, o sucesso vem num envelope

    padronizado, com os dados em `result`:


    ```json

    {
      "statusCode": 200,
      "message": "Consulta concluída com sucesso",
      "timestamp": "2026-07-28T18:00:00.000Z",
      "path": "/api/v1/consultas/cnh",
      "result": {}
    }

    ```


    Toda chamada é registrada para fins de auditoria.


    ## Consultas assíncronas


    Duas consultas — o **rastreamento veicular** e o **buscador**

    **processual** — não respondem na mesma requisição: o fornecedor delas é

    assíncrono e pode levar minutos. As duas usam um contrato de protocolo:


    1. o `POST` devolve **`202`** com um `id` e, se você informar um
       `url_retorno`, um `signingSecret` (exibido **uma única vez**);
    2. o resultado chega por **webhook** assinado e/ou pelo `GET` do
       protocolo, que responde `200` em todos os estados — inclusive quando
       a consulta falha, com o desfecho no campo `status`.

    A consulta é **cobrada no disparo**, não na entrega. Consultar o

    protocolo é gratuito. O resultado fica disponível por 30 dias.


    No **buscador processual** o resultado pode chegar a megabytes, então o

    webhook e o `GET` do protocolo levam apenas o **resumo**; os processos

    vêm por `GET /api/v1/consultas/buscador-processual/{id}/processos`,

    paginado. Guardamos no máximo 1.000 por consulta, e quando `truncated`

    é `true` eles são uma **amostra arbitrária** — a ordem do fornecedor

    não é cronológica.


    O contrato completo, com a verificação da assinatura do webhook, está no

    `README.md` do projeto.


    ## Erros


    Todo erro tem o mesmo formato, com um `code` estável que o seu código pode

    tratar. A `message` é o texto para gente: pode mudar de redação sem aviso,

    então não decida por ela.


    ```json

    {
      "statusCode": 404,
      "message": "CNH não encontrada para o documento informado.",
      "code": "no_data_found",
      "requestId": "9f1c2b7e-4d3a-4f8b-a6e2-1c0d9e8f7a65",
      "timestamp": "2026-06-22T18:00:00.000Z",
      "path": "/api/v1/consultas/cnh"
    }

    ```


    `requestId` identifica a chamada nos nossos registros. Toda resposta, de

    sucesso ou de erro, também o traz no header `X-Request-Id`. Se você enviar

    um `X-Request-Id` próprio (até 128 caracteres: letras, dígitos e `.`, `_`,

    `:`, `-`), ele é reaproveitado; senão geramos um. **Informe o `requestId`

    ao falar com o suporte** sobre uma chamada específica.


    Nos erros de validação desta API (`400` de corpo ou parâmetro), `message` é

    a **lista** de problemas (campo + motivo); nos demais, uma string.


    | Status | `code` | Quando | O que fazer |

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

    | `400` | `invalid_request` | Corpo, parâmetro ou JSON inválido. | Corrigir
    a requisição; a `message` diz o campo. |

    | `401` | `invalid_api_key` | API key ausente ou que não pertence a nenhum
    cliente. | Conferir o header `x-api-key`. |

    | `403` | `inactive_client` | A key é de um cliente que não está ativo
    (inativo ou ainda pendente). | Falar com a equipe Jusfy. |

    | `403` | `insufficient_scope` | A key não tem o escopo do produto chamado;
    a `message` traz o escopo. | Pedir a liberação do produto à equipe Jusfy. |

    | `404` | `route_not_found` | A rota não existe. | Conferir método e path. |

    | `404` | `resource_not_found` | O protocolo ou id pedido não existe, ou é
    de outro cliente (os dois respondem igual). | Conferir o id. |

    | `404` | `no_data_found` | A consulta rodou e o documento não tem dado. **É
    cobrada.** | Tratar como resultado vazio; repetir não muda o resultado. |

    | `409` | `report_not_ready` | O PDF do relatório pedido ainda está em
    geração, ou a geração falhou. | Consultar o relatório e baixar quando
    estiver `done`; em `error`, pedir de novo. |

    | `413` | `payload_too_large` | Corpo da requisição acima do limite. |
    Reduzir o corpo. |

    | `422` | `payload_rejected` | O motor de cálculo ou o fornecedor recusou o
    payload; a `message` diz o motivo. | Corrigir o payload. |

    | `429` | `rate_limit_exceeded` | Limite de requisições por minuto do
    produto excedido (ver abaixo). | Esperar o `Retry-After`. |

    | `429` | `too_many_pending_queries` | Consultas assíncronas demais em
    processamento para o cliente. | Esperar o `Retry-After`: é uma estimativa,
    porque a vaga abre quando uma consulta em voo termina. |

    | `500` | `internal_error` | Erro inesperado nesta API. | Repetir depois; se
    persistir, falar com a equipe Jusfy. |

    | `502` | `upstream_error` | O motor de cálculo ou o fornecedor falhou. |
    Ver a orientação de cada rota: nem sempre repetir resolve. |

    | `503` | `upstream_unavailable` | O fornecedor (ex.: o órgão consultado)
    está fora do ar; a consulta não rodou. | Repetir depois de um intervalo. |

    | `504` | `upstream_timeout` | O motor de cálculo ou o fornecedor não
    respondeu a tempo. | Repetir depois de um intervalo. |


    Códigos novos podem surgir para condições que hoje não são tratadas (ver

    "Versionamento e depreciação"): trate um `code` desconhecido pelo status.

    Um `code` existente nunca muda de significado na mesma versão.


    Nas consultas assíncronas e no relatório PDF da completa há ainda `202`

    (aceito e em processamento).


    ### Limite de requisições


    Cada cliente tem um limite de requisições por minuto **em cada produto**

    (calculadora, consulta ou JusScore); os produtos não dividem o limite

    entre si. A consulta do consumo tem um contador próprio, que também não

    divide o limite com nenhum produto. Toda resposta informa o estado do

    limite nos headers:


    | Header | Significado |

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

    | `X-RateLimit-Limit` | Requisições permitidas por minuto neste produto. |

    | `X-RateLimit-Remaining` | Quantas ainda cabem na janela atual. |

    | `X-RateLimit-Reset` | Segundos até a janela atual acabar. |


    Acima do limite a resposta é `429` com o header `Retry-After` (segundos

    até poder tentar de novo). A requisição recusada não é processada nem

    cobrada.


    ## Versionamento e depreciação


    A versão vai no path (`/api/v1/...`). `info.version` deste documento segue

    semver: MAJOR é a versão do path, MINOR é mudança compatível e PATCH é só

    documentação.


    **Mudanças compatíveis** entram na versão atual, como MINOR, sem aviso

    prévio. Sua integração deve tolerá-las:


    - campo novo na resposta;

    - campo opcional novo no request;

    - rota nova;

    - valor novo de enum **na resposta**, quando o campo estiver documentado
    como
      extensível;
    - código de erro novo para uma condição que antes não era tratada.


    **Mudanças incompatíveis** só entram numa versão nova de path:


    - remover ou renomear path, campo ou valor de enum;

    - tornar obrigatório um campo opcional;

    - mudar o tipo ou o formato de um campo;

    - mudar o significado de um status code;

    - mudar o formato do envelope ou do erro;

    - mudar a assinatura ou o corpo de um webhook.


    Quando uma versão é depreciada, você recebe **três sinais**:


    1. os headers `Deprecation`, `Sunset` (quando houver data de desligamento) e
       `Link` (`rel="deprecation"`, apontando para o guia de migração) em toda
       resposta da versão;
    2. as operações marcadas como `deprecated` no contrato da versão;

    3. comunicação direta aos clientes que ainda chamam a versão.


    **Prazo mínimo** entre a depreciação e o desligamento: _pendente: produto_.


    **Comunicação**: quem avisa o cliente e por qual canal: _pendente: produto_.


    Uma versão só é desligada quando as duas condições valem: o prazo de aviso

    venceu **e** todo cliente que ainda a chama foi contatado. Desligada, as

    rotas dela respondem **`410 Gone`**, no formato de erro padrão, com
    `message`

    apontando para o guia de migração.


    ## Changelog


    Toda mudança de `info.version` ganha uma entrada no
    [changelog](https://api.jusfy.dev/calculators/api/reference/changelog).


    ## Migração do legado


    Payloads e respostas são os mesmos nas duas versões. O passo a passo está no
    [guia de
    migração](https://api.jusfy.dev/calculators/api/reference/fundamentos/migracao-do-legado).
  version: 1.1.0
  contact: {}
servers:
  - url: https://api.jusfy.dev/calculators
security: []
tags:
  - name: Calculadoras
    description: >-
      Execução das calculadoras jurídicas e consulta dos índices de correção.
      Cada cálculo recebe um payload, retorna o resultado processado e exige API
      key no header `x-api-key`.
  - name: Consultas
    description: >-
      Consultas de dados (veículos, condutores e documentos). Cada consulta
      recebe o documento, retorna os dados encontrados e exige API key no header
      `x-api-key`. A maioria responde na mesma requisição; o **rastreamento
      veicular** e o **buscador processual** são assíncronos — devolvem `202`
      com um protocolo e entregam o resultado por webhook e/ou pelo `GET` do
      protocolo.
  - name: JusScore
    description: >-
      Consulta de processos judiciais por CPF/CNPJ, com score de risco
      consolidado e a lista detalhada dos processos. É assíncrona: o POST inicia
      a consulta e o GET devolve o resultado quando pronto. Exige API key no
      header `x-api-key`.
  - name: Consumo
    description: >-
      Consumo da própria API key: quantas chamadas cada produto recebeu num
      período, separando as cobradas das não cobradas. Não exige escopo; exige
      API key no header `x-api-key`.
  - name: Health
    description: >-
      Verificações de disponibilidade do serviço (liveness e readiness). Rotas
      abertas, sem autenticação.
paths:
  /api/v1/calculadoras/pensao-alimenticia:
    post:
      tags:
        - Calculadoras
      summary: Calcula a correção de pensão alimentícia em atraso
      description: >-
        Corrige as parcelas em atraso de pensão alimentícia: aplica índices de
        correção monetária e juros por período — declare o tipo em
        `interests[].kind` (`simple` usa a taxa do payload, `legal_rate` aplica
        a Taxa Legal da Lei 14.905/2024 e `savings` a poupança) —, soma as
        despesas extraordinárias (`expenses`), apura multa e honorários verba a
        verba (`fines`/`fees`) e devolve o cronograma detalhado por parcela, por
        abatimento e por despesa.


        `installments` precisa de **pelo menos um** item. O status `paid` define
        o comportamento: `unpaid` (parcela em aberto), `paid` (parcela quitada —
        ignorada no cálculo) ou `partial` (parcela com pagamentos parciais em
        `rebates` internos). Abatimentos avulsos vão em `rebates` no topo do
        payload e são imputados às parcelas em ordem cronológica (`allocations`
        na resposta).


        As listas `fines`/`fees` vencem os campos legados `fine`/`legal_fees`,
        que seguem obrigatórios no corpo. Nenhuma data pode ser posterior a
        `calculation_date`.
      operationId: CalculatorsController_pensaoAlimenticia[1]_v1
      parameters: []
      requestBody:
        required: true
        description: Payload da calculadora de pensão alimentícia.
        content:
          application/json:
            schema:
              type: object
              description: >-
                Payload do cálculo de correção de pensão alimentícia em atraso.
                Informe as parcelas em débito (`installments`) — com
                `paid=unpaid` para dívidas em aberto ou `paid=partial` com
                `rebates` para pagamentos parciais —, as despesas
                extraordinárias (`expenses`), os índices, as regras de juros e
                as verbas de multa (`fines`) e honorários (`fees`); a resposta
                traz o resumo com valores atualizados, multa e honorários verba
                a verba, o detalhamento por parcela, por abatimento e por
                despesa, e a cobertura das séries.
              required:
                - calculation_date
                - fine
                - fine_interests
                - legal_fees
                - installments
                - rebates
                - indexes
                - interests
              properties:
                name:
                  type: string
                  description: Nome do cálculo. Opcional.
                calculation_date:
                  type: string
                  format: date
                fine:
                  type: number
                  description: >-
                    Multa legada em percentual (0 a 100). **Ignorada quando
                    `fines` é enviado**, mas ainda obrigatória no payload.
                fine_interests:
                  type: boolean
                  description: >-
                    Legado: se `true`, a multa incide sobre o valor com juros.
                    Com `false` a base é o corrigido **líquido** de abatimentos,
                    sem juros.
                legal_fees:
                  type: number
                  description: >-
                    Honorários legados — valor ou percentual, conforme
                    `legal_fees_type`. Ignorados quando `fees` é enviado.
                legal_fees_type:
                  type: object
                  description: 'Tipo dos honorários legados: `percentage` ou `fixed`.'
                  nullable: true
                  required:
                    - id
                  properties:
                    id:
                      type: string
                      enum:
                        - percentage
                        - fixed
                legal_fees_payments:
                  type: boolean
                  nullable: true
                  description: >-
                    Se `true`, a base dos honorários é o saldo líquido de
                    pagamentos. Vale para todas as verbas de `fees`. Opcional.
                fines:
                  type: array
                  nullable: true
                  description: >-
                    Verbas de multa, uma a uma. Lista presente vence o escalar
                    `fine`.
                  items:
                    type: object
                    description: >-
                      Verba de multa ou de honorários. `percentage` incide sobre
                      a base (0 a 100); `fixed` soma o valor direto, sem base.
                    required:
                      - type
                      - value
                    properties:
                      description:
                        type: string
                        description: Vazia → o output rotula como `Multa`/`Honorários`.
                      type:
                        type: string
                        enum:
                          - percentage
                          - fixed
                      value:
                        type: number
                fees:
                  type: array
                  nullable: true
                  description: >-
                    Verbas de honorários, uma a uma. Lista presente vence o
                    escalar `legal_fees`.
                  items:
                    type: object
                    description: >-
                      Verba de multa ou de honorários. `percentage` incide sobre
                      a base (0 a 100); `fixed` soma o valor direto, sem base.
                    required:
                      - type
                      - value
                    properties:
                      description:
                        type: string
                        description: Vazia → o output rotula como `Multa`/`Honorários`.
                      type:
                        type: string
                        enum:
                          - percentage
                          - fixed
                      value:
                        type: number
                expenses:
                  type: array
                  nullable: true
                  description: Despesas extraordinárias que somam ao débito.
                  items:
                    type: object
                    description: >-
                      Despesa extraordinária (material escolar, plano de
                      saúde…). Soma ao débito; as quatro flags decidem o que
                      incide sobre ela.
                    required:
                      - date
                      - description
                      - amount
                    properties:
                      date:
                        type: string
                        format: date
                        description: Não pode ser posterior a `calculation_date`.
                      description:
                        type: string
                      amount:
                        type: number
                      apply_correction:
                        type: boolean
                        default: false
                      apply_interests:
                        type: boolean
                        default: false
                      apply_fine:
                        type: boolean
                        default: false
                      apply_legal_fees:
                        type: boolean
                        default: false
                      index_id:
                        type: number
                        nullable: true
                        description: Índice de correção específico desta despesa. Opcional.
                installments:
                  type: array
                  description: Parcelas do débito. Deve conter **pelo menos um** item.
                  items:
                    type: object
                    description: >-
                      Parcela do débito. `paid: unpaid` = dívida em aberto;
                      `paid: paid` = quitada (ignorada); `paid: partial` = com
                      pagamentos parciais em `rebates`.
                    required:
                      - amount
                      - date
                      - description
                      - paid
                      - rebates
                    properties:
                      id:
                        type: string
                        description: >-
                          Identidade estável da parcela,
                          `yyyy-MM-{monthly|thirteenth}` (ex.:
                          `2025-03-monthly`). Opcional — o motor deriva e
                          devolve.
                      is_thirteenth:
                        type: boolean
                        description: Marca a parcela como 13º da competência.
                      amount:
                        type: number
                      date:
                        type: string
                        format: date
                        description: >-
                          Vencimento. Não pode ser posterior a
                          `calculation_date`.
                      description:
                        type: string
                      original_description:
                        type: string
                      paid:
                        type: string
                        enum:
                          - paid
                          - unpaid
                          - partial
                      rebates:
                        type: array
                        items:
                          type: object
                          description: Um abatimento/pagamento (parcial ou avulso).
                          required:
                            - amount
                            - date
                            - description
                          properties:
                            amount:
                              type: number
                            date:
                              type: string
                              format: date
                            description:
                              type: string
                rebates:
                  type: array
                  description: >-
                    Abatimentos avulsos (pagamentos não vinculados a parcelas
                    específicas).
                  items:
                    type: object
                    description: Um abatimento/pagamento (parcial ou avulso).
                    required:
                      - amount
                      - date
                      - description
                    properties:
                      amount:
                        type: number
                      date:
                        type: string
                        format: date
                      description:
                        type: string
                indexes:
                  type: array
                  items:
                    type: object
                    description: Atribuição de um índice de correção a um período.
                    required:
                      - index
                      - startDate
                      - endDate
                    properties:
                      index:
                        type: object
                        description: >-
                          Índice de correção monetária. `id: null` desativa
                          correção no período.
                        required:
                          - id
                          - name
                          - bacen_code
                        properties:
                          id:
                            type: number
                            nullable: true
                            description: ID do índice.
                          name:
                            type: string
                            description: 'Nome do índice (ex.: `IPCA-E`).'
                          bacen_code:
                            type: string
                            description: Código Bacen do índice.
                          type:
                            type: string
                            description: >-
                              Tipo do índice (ex.: `average_price_index`).
                              Opcional.
                      startDate:
                        type: string
                        format: date
                      endDate:
                        type: string
                        format: date
                interests:
                  type: array
                  items:
                    type: object
                    description: >-
                      Regra de juros aplicada a um período. Declare o tipo em
                      `kind`: `simple` usa a taxa de `interest`; `legal_rate`
                      aplica a Taxa Legal (Lei 14.905/2024) e `savings` a
                      poupança — nesses dois a taxa vem da série, não do
                      payload.
                    required:
                      - type
                      - startDate
                      - endDate
                    properties:
                      kind:
                        type: string
                        enum:
                          - simple
                          - legal_rate
                          - savings
                        description: >-
                          Tipo declarado dos juros. Ausente, o motor infere de
                          `name`/`apply_index` (legado, em depreciação).
                      name:
                        type: string
                        description: Rótulo de exibição. Nunca discriminador de tipo.
                      type:
                        type: object
                        description: >-
                          Periodicidade dos juros. `id: 0` = mensal, `id: 1` =
                          anual.
                        required:
                          - id
                          - name
                        properties:
                          id:
                            oneOf:
                              - type: number
                              - type: string
                          name:
                            type: string
                      interest:
                        type: number
                        description: >-
                          Taxa em percentual. Obrigatória em `kind: simple`
                          (teto 20% a.m. / 240% a.a.); ignorada em `legal_rate`
                          e `savings`.
                      apply_index:
                        type: boolean
                        description: >-
                          Legado: `true` sinalizava poupança. Use `kind:
                          savings`.
                      startDate:
                        type: string
                        format: date
                      endDate:
                        type: string
                        format: date
                sm_periods:
                  type: array
                  nullable: true
                  items:
                    type: object
                    description: >-
                      Vigência do valor da pensão. **Não é lida pelo cálculo** —
                      as parcelas já chegam prontas em `installments`; fica no
                      payload só para remontar o formulário.
                    required:
                      - value
                      - from
                    properties:
                      value:
                        type: number
                      from:
                        type: string
                        description: Competência inicial `yyyy-MM`.
                      to:
                        type: string
                        nullable: true
                      situation:
                        type: string
                        enum:
                          - employed
                          - unemployed
                      percent:
                        type: number
                        nullable: true
                fixed_periods:
                  type: array
                  nullable: true
                  items:
                    type: object
                    description: >-
                      Vigência do valor da pensão. **Não é lida pelo cálculo** —
                      as parcelas já chegam prontas em `installments`; fica no
                      payload só para remontar o formulário.
                    required:
                      - value
                      - from
                    properties:
                      value:
                        type: number
                      from:
                        type: string
                        description: Competência inicial `yyyy-MM`.
                      to:
                        type: string
                        nullable: true
                      situation:
                        type: string
                        enum:
                          - employed
                          - unemployed
                      percent:
                        type: number
                        nullable: true
                rem_periods:
                  type: array
                  nullable: true
                  items:
                    type: object
                    description: >-
                      Vigência do valor da pensão. **Não é lida pelo cálculo** —
                      as parcelas já chegam prontas em `installments`; fica no
                      payload só para remontar o formulário.
                    required:
                      - value
                      - from
                    properties:
                      value:
                        type: number
                      from:
                        type: string
                        description: Competência inicial `yyyy-MM`.
                      to:
                        type: string
                        nullable: true
                      situation:
                        type: string
                        enum:
                          - employed
                          - unemployed
                      percent:
                        type: number
                        nullable: true
                has_floor:
                  type: boolean
                  description: Vigências com piso de salário mínimo. Não lido no cálculo.
                floor_minimum_wage_percentage:
                  type: number
                  description: Percentual do piso. Não lido no cálculo.
                has_legal_fees:
                  type: boolean
                monthly_amount:
                  type: number
            examples:
              childcare:
                summary: Correção de pensão em atraso (3 parcelas + pagamento parcial)
                value:
                  name: Pensão alimentícia em atraso - exemplo
                  calculation_date: '2025-08-31'
                  fine: 10
                  fine_interests: false
                  legal_fees: 20
                  legal_fees_type:
                    id: percentage
                  legal_fees_payments: false
                  fines:
                    - description: Multa do art. 523 §1º
                      type: percentage
                      value: 10
                  fees:
                    - description: Honorários contratuais
                      type: percentage
                      value: 20
                  expenses:
                    - date: '2025-03-10'
                      description: Material escolar
                      amount: 450
                      apply_correction: true
                      apply_interests: false
                      apply_fine: false
                      apply_legal_fees: true
                      index_id: 7
                  installments:
                    - id: 2025-01-monthly
                      amount: 1200
                      date: '2025-01-15'
                      description: Pensão 01/2025
                      paid: unpaid
                      rebates: []
                    - id: 2025-02-monthly
                      amount: 1200
                      date: '2025-02-15'
                      description: Pensão 02/2025
                      paid: unpaid
                      rebates: []
                    - id: 2025-03-monthly
                      amount: 1200
                      date: '2025-03-15'
                      description: Pensão 03/2025
                      paid: partial
                      rebates:
                        - amount: 400
                          date: '2025-03-20'
                          description: Pagamento parcial de março
                  rebates:
                    - amount: 300
                      date: '2025-05-10'
                      description: Depósito avulso
                  indexes:
                    - index:
                        id: 7
                        name: IPCA-E
                        bacen_code: '17'
                        type: average_price_index
                      startDate: '2025-01-01'
                      endDate: '2025-08-31'
                  interests:
                    - kind: simple
                      name: Juros de mora
                      type:
                        id: 0
                        name: a.m.
                      interest: 1
                      apply_index: false
                      startDate: '2025-01-01'
                      endDate: '2025-08-31'
                  fixed_periods:
                    - value: 1200
                      from: 2025-01
                      to: 2025-03
                  sm_periods: []
                  rem_periods: []
                  has_floor: false
                  floor_minimum_wage_percentage: 0
                  has_legal_fees: true
                  monthly_amount: 1200
      responses:
        '200':
          description: >-
            Resultado da correção: resumo (multa, honorários e total), multa e
            honorários verba a verba, detalhamento por parcela, por abatimento e
            por despesa em número puro, a cobertura das séries (`coverage`) e o
            cronograma legado em `items`.
          content:
            application/json:
              schema:
                type: object
                example:
                  statusCode: 200
                  message: Cálculo concluído com sucesso
                  timestamp: '2026-06-22T18:00:00.000Z'
                  path: /api/v1/calculadoras/pensao-alimenticia
                  result:
                    summary:
                      total_amount: 3350
                      total_amount_adjusted: 3437.49
                      total_interests: 210.03000000000003
                      total_outstanding_balance: 3647.5199999999995
                      total_fines: 297.983
                      legal_fees: 937.4366
                      total: 4882.9396
                      has_fine: true
                      has_legal_fees: true
                    calculation_date: 31/08/2025
                    coverage:
                      interests: []
                      indexes:
                        - index_id: 7
                          name: IPCA-E
                          requested_until: '2025-08-31'
                          corrected_until: '2025-08-01'
                    fines:
                      - description: Multa do art. 523 §1º
                        type: percentage
                        value: 10
                        amount: 297.983
                        base: 2979.83
                    fees:
                      - description: Honorários contratuais
                        type: percentage
                        value: 20
                        amount: 937.4366
                        base: 4687.183
                    installments:
                      - id: 2025-01-monthly
                        date: '2025-01-15'
                        description: Pensão 01/2025
                        amount: 1200
                        amount_adjusted: 1238.5
                        interests: 94.13
                        fine: 123.85000000000001
                        outstanding_balance: 1332.63
                        credit_applied: 313.51
                        schedule:
                          - date: '2025-01-15'
                            amount: 1200
                            correction: 0
                            amount_adjusted: 0
                            interest: 0
                            outstanding_balance: 1200
                          - date: '2025-01-31'
                            amount: 1200
                            correction: 0.060322580645161286
                            amount_adjusted: 1200.72
                            interest: 0
                            outstanding_balance: 1200.72
                          - date: '2025-02-28'
                            amount: 1200.72
                            correction: 1.23
                            amount_adjusted: 1215.49
                            interest: 0
                            outstanding_balance: 1215.49
                          - date: '2025-03-31'
                            amount: 1215.49
                            correction: 0.64
                            amount_adjusted: 1223.27
                            interest: 0
                            outstanding_balance: 1223.27
                          - date: '2025-04-30'
                            amount: 1223.27
                            correction: 0.43
                            amount_adjusted: 1228.53
                            interest: 0
                            outstanding_balance: 1228.53
                          - date: '2025-05-31'
                            amount: 1228.53
                            correction: 0.36
                            amount_adjusted: 1232.95
                            interest: 0
                            outstanding_balance: 1232.95
                          - date: '2025-06-30'
                            amount: 1232.95
                            correction: 0.26
                            amount_adjusted: 1236.16
                            interest: 0
                            outstanding_balance: 1236.16
                          - date: '2025-07-31'
                            amount: 1236.16
                            correction: 0.33
                            amount_adjusted: 1240.24
                            interest: 0
                            outstanding_balance: 1240.24
                          - date: '2025-08-31'
                            amount: 1240.24
                            correction: -0.14
                            amount_adjusted: 1238.5
                            interest: 94.13
                            outstanding_balance: 1332.63
                      - id: 2025-02-monthly
                        date: '2025-02-15'
                        description: Pensão 02/2025
                        amount: 1200
                        amount_adjusted: 1230.23
                        interests: 80.79
                        fine: 123.02300000000001
                        outstanding_balance: 1311.02
                        credit_applied: 0
                        schedule: []
                      - id: 2025-03-monthly
                        date: '2025-03-15'
                        description: Pensão 03/2025
                        amount: 1200
                        amount_adjusted: 1219.21
                        interests: 68.68
                        fine: 121.921
                        outstanding_balance: 1287.89
                        credit_applied: 428.17
                        schedule: []
                    rebates:
                      - date: '2025-03-20'
                        description: Pagamento parcial de março
                        amount: 400
                        amount_adjusted: 405.98
                        interests: 22.19
                        outstanding_balance: 428.17
                        allocations:
                          - installment_id: 2025-03-monthly
                            installment_date: '2025-03-15'
                            installment_description: Pensão 03/2025
                            amount: 428.17
                      - date: '2025-05-10'
                        description: Depósito avulso
                        amount: 300
                        amount_adjusted: 302.13
                        interests: 11.38
                        outstanding_balance: 313.51
                        allocations:
                          - installment_id: 2025-01-monthly
                            installment_date: '2025-01-15'
                            installment_description: Pensão 01/2025
                            amount: 313.51
                    expenses:
                      - date: '2025-03-10'
                        description: Material escolar
                        amount: 450
                        amount_adjusted: 457.66
                        interests: 0
                        outstanding_balance: 457.66
                        apply_correction: true
                        apply_interests: false
                        apply_fine: false
                        apply_legal_fees: true
                    items:
                      - _key: 1
                        id: 2025-01-monthly
                        _date: 15/01/2025
                        _amount: 1.200,00
                        _amount_adjusted: 1.238,50
                        _outstanding_balance: 1.332,63
                        _subtotal_interests: 94,13
                        amount_adjusted: 1238.5
                        outstanding_balance: 1332.63
                        subtotal_interests: 94.13
                        credit_applied: 313.51
                        indexes:
                          - name: IPCA-E
                            startDate: 15/01/2025
                            endDate: 31/08/2025
                            adjustmentUntil: ' (correção até 08/2025)'
                        interests:
                          - rate: 1
                            startDate: 15/01/2025
                            endDate: 31/08/2025
                            type: a.m.
                            apply_index: false
                            name: Juros de mora
                        schedule: []
                      - _key: 2
                        id: 2025-02-monthly
                        _date: 15/02/2025
                        _amount: 1.200,00
                        _amount_adjusted: 1.230,23
                        _outstanding_balance: 1.311,02
                        _subtotal_interests: 80,79
                        amount_adjusted: 1230.23
                        outstanding_balance: 1311.02
                        subtotal_interests: 80.79
                        credit_applied: 0
                        indexes:
                          - name: IPCA-E
                            startDate: 15/02/2025
                            endDate: 31/08/2025
                            adjustmentUntil: ' (correção até 08/2025)'
                        interests:
                          - rate: 1
                            startDate: 15/02/2025
                            endDate: 31/08/2025
                            type: a.m.
                            apply_index: false
                            name: Juros de mora
                        schedule: []
                      - _key: 3
                        id: 2025-03-monthly
                        _date: 15/03/2025
                        _amount: 1.200,00
                        _amount_adjusted: 1.219,21
                        _outstanding_balance: 1.287,89
                        _subtotal_interests: 68,68
                        amount_adjusted: 1219.21
                        outstanding_balance: 1287.89
                        subtotal_interests: 68.68
                        credit_applied: 428.17
                        indexes:
                          - name: IPCA-E
                            startDate: 15/03/2025
                            endDate: 31/08/2025
                            adjustmentUntil: ' (correção até 08/2025)'
                        interests:
                          - rate: 1
                            startDate: 15/03/2025
                            endDate: 31/08/2025
                            type: a.m.
                            apply_index: false
                            name: Juros de mora
                        schedule: []
                      - _key: 4
                        _date: 20/03/2025
                        _amount: '-400,00'
                        _amount_adjusted: '-405,98'
                        _outstanding_balance: '-428,17'
                        _subtotal_interests: '-22,19'
                        amount_adjusted: -405.98
                        outstanding_balance: -428.17
                        subtotal_interests: -22.19
                        allocations:
                          - installment_id: 2025-03-monthly
                            installment_date: '2025-03-15'
                            installment_description: Pensão 03/2025
                            amount: 428.17
                        indexes:
                          - name: IPCA-E
                            startDate: 20/03/2025
                            endDate: 31/08/2025
                            adjustmentUntil: ' (correção até 08/2025)'
                        interests:
                          - rate: 1
                            startDate: 20/03/2025
                            endDate: 31/08/2025
                            type: a.m.
                            apply_index: false
                            name: Juros de mora
                        schedule: []
                      - _key: 5
                        _date: 10/05/2025
                        _amount: '-300,00'
                        _amount_adjusted: '-302,13'
                        _outstanding_balance: '-313,51'
                        _subtotal_interests: '-11,38'
                        amount_adjusted: -302.13
                        outstanding_balance: -313.51
                        subtotal_interests: -11.38
                        allocations:
                          - installment_id: 2025-01-monthly
                            installment_date: '2025-01-15'
                            installment_description: Pensão 01/2025
                            amount: 313.51
                        indexes:
                          - name: IPCA-E
                            startDate: 10/05/2025
                            endDate: 31/08/2025
                            adjustmentUntil: ' (correção até 08/2025)'
                        interests:
                          - rate: 1
                            startDate: 10/05/2025
                            endDate: 31/08/2025
                            type: a.m.
                            apply_index: false
                            name: Juros de mora
                        schedule: []
                      - _key: 6
                        _date: 10/03/2025
                        _amount: 450,00
                        _amount_adjusted: 457,66
                        _outstanding_balance: 457,66
                        _subtotal_interests: 0,00
                        amount_adjusted: 457.66
                        outstanding_balance: 457.66
                        subtotal_interests: 0
                        indexes:
                          - name: IPCA-E
                            startDate: 10/03/2025
                            endDate: 31/08/2025
                            adjustmentUntil: ' (correção até 08/2025)'
                        interests: []
                        schedule: []
        '401':
          description: >-
            API key ausente ou que não pertence a nenhum cliente (`code:
            invalid_api_key`). A `message` diz qual dos dois.
          content:
            application/json:
              examples:
                missing:
                  summary: Key ausente
                  value:
                    statusCode: 401
                    message: Missing API key
                    code: invalid_api_key
                    requestId: 9f1c2b7e-4d3a-4f8b-a6e2-1c0d9e8f7a65
                    timestamp: '2026-10-14T18:00:00.000Z'
                    path: /api/v1/calculadoras/trabalhista
                invalid:
                  summary: Key inválida
                  value:
                    statusCode: 401
                    message: Invalid API key
                    code: invalid_api_key
                    requestId: 9f1c2b7e-4d3a-4f8b-a6e2-1c0d9e8f7a65
                    timestamp: '2026-10-14T18:00:00.000Z'
                    path: /api/v1/calculadoras/trabalhista
        '403':
          description: >-
            Acesso negado. Dois motivos, distinguidos pelo `code`: o cliente não
            está ativo (`inactive_client`), ou a API key não tem o escopo deste
            produto (`insufficient_scope`, com o escopo na `message`). A
            liberação de produtos é feita pela equipe Jusfy.
          content:
            application/json:
              examples:
                inactive_client:
                  summary: Cliente não ativo
                  value:
                    statusCode: 403
                    message: Client is not active
                    code: inactive_client
                    requestId: 9f1c2b7e-4d3a-4f8b-a6e2-1c0d9e8f7a65
                    timestamp: '2026-10-14T18:00:00.000Z'
                    path: /api/v1/calculadoras/trabalhista
                insufficient_scope:
                  summary: Sem o escopo do produto
                  value:
                    statusCode: 403
                    message: 'Missing scope: <escopo>'
                    code: insufficient_scope
                    requestId: 9f1c2b7e-4d3a-4f8b-a6e2-1c0d9e8f7a65
                    timestamp: '2026-10-14T18:00:00.000Z'
                    path: /api/v1/calculadoras/trabalhista
        '422':
          description: Payload inválido. `message` indica o campo e o motivo.
          content:
            application/json:
              schema:
                example:
                  statusCode: 422
                  code: payload_rejected
                  message: 'Expected number, received null (property: fine)'
                  requestId: 9f1c2b7e-4d3a-4f8b-a6e2-1c0d9e8f7a65
                  timestamp: '2026-06-22T18:00:00.000Z'
                  path: /api/v1/calculadoras/pensao-alimenticia
        '429':
          description: >-
            Limite de requisições por minuto do cliente neste produto excedido.
            `Retry-After` diz em quantos segundos a janela vira. Toda resposta
            traz `X-RateLimit-Limit`, `X-RateLimit-Remaining` e
            `X-RateLimit-Reset`.
          content:
            application/json:
              schema:
                example:
                  statusCode: 429
                  code: rate_limit_exceeded
                  message: >-
                    Rate limit exceeded for calculadoras.trabalhista:execute: 60
                    requests per minute. Retry in 42s.
                  requestId: 9f1c2b7e-4d3a-4f8b-a6e2-1c0d9e8f7a65
                  timestamp: '2026-06-22T18:00:00.000Z'
                  path: /api/v1/calculadoras/trabalhista
        '502':
          description: Erro no motor de cálculo da Jusfy.
          content:
            application/json:
              schema:
                example:
                  statusCode: 502
                  code: upstream_error
                  message: Calculation backend error
                  requestId: 9f1c2b7e-4d3a-4f8b-a6e2-1c0d9e8f7a65
                  timestamp: '2026-06-22T18:00:00.000Z'
                  path: /api/v1/calculadoras/pensao-alimenticia
        '504':
          description: Tempo limite ao falar com o motor de cálculo.
          content:
            application/json:
              schema:
                example:
                  statusCode: 504
                  code: upstream_timeout
                  message: Calculation backend timed out
                  requestId: 9f1c2b7e-4d3a-4f8b-a6e2-1c0d9e8f7a65
                  timestamp: '2026-06-22T18:00:00.000Z'
                  path: /api/v1/calculadoras/pensao-alimenticia
      security:
        - api-key: []
components:
  securitySchemes:
    api-key:
      type: apiKey
      in: header
      name: x-api-key

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.