> ## 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 correção de valores (completa)

> Corrige valores monetários aplicando índices e juros por período. Informe os lançamentos e as regras de correção; a resposta traz os valores atualizados. Cada bloco de juros escolhe de onde sai a taxa (`tipo_taxa`: percentual ou uma série do Bacen — SELIC, poupança, taxa legal) e como ela se acumula (`regime`: somada ou capitalizada).



## OpenAPI

````yaml /openapi/legado.json post /api/calculadoras/completa
openapi: 3.0.0
info:
  title: Calculadoras Jusfy API
  description: >-
    Rotas sem versão (`/api/...`). Continuam funcionando, mas a versão atual

    da API é a v1 (`/api/v1`): para integrações novas, use a v1 e siga o [guia
    de migração](https://docs.jusfy.com.br/fundamentos/migracao-do-legado).


    A política de versionamento e depreciação está na [política de
    versionamento](https://docs.jusfy.com.br/fundamentos/migracao-do-legado#pol%C3%ADtica-de-versionamento).
  version: legacy
  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/calculadoras/completa:
    post:
      tags:
        - Calculadoras
      summary: Calcula correção de valores (completa)
      description: >-
        Corrige valores monetários aplicando índices e juros por período.
        Informe os lançamentos e as regras de correção; a resposta traz os
        valores atualizados. Cada bloco de juros escolhe de onde sai a taxa
        (`tipo_taxa`: percentual ou uma série do Bacen — SELIC, poupança, taxa
        legal) e como ela se acumula (`regime`: somada ou capitalizada).
      operationId: CalculatorsController_completa[0]
      parameters: []
      requestBody:
        required: true
        description: Payload da calculadora completa.
        content:
          application/json:
            schema:
              type: object
              description: >-
                Payload da correção de valores. Para cada lançamento
                (`installments`), informe os índices e as regras de juros por
                período; a resposta traz os valores atualizados e a evolução mês
                a mês.
              required:
                - process_number
                - res_judicata_date
                - stakeholders
                - installments
                - fines_fees
                - legal_costs_list
              properties:
                process_number:
                  type: string
                  description: Número do processo. Pode ser uma string vazia.
                res_judicata_date:
                  type: string
                  format: date
                  description: Data de trânsito em julgado (`YYYY-MM-DD`). Pode ser vazia.
                stakeholders:
                  type: array
                  description: Partes do processo (autor, réu etc.). Pode ser vazio.
                  items:
                    type: object
                    properties:
                      name:
                        type: string
                      type:
                        type: object
                        description: Par id/nome usado em campos de seleção.
                        properties:
                          id:
                            type: string
                          name:
                            type: string
                        nullable: true
                installments:
                  type: array
                  description: Lançamentos a corrigir. Deve conter **pelo menos um** item.
                  items:
                    type: object
                    properties:
                      description:
                        type: string
                      calculation_date:
                        type: string
                        format: date
                        description: Data de cálculo do lançamento (`YYYY-MM-DD`).
                      amount:
                        type: number
                        description: Valor original.
                      type:
                        type: object
                        description: >-
                          Tipo do lançamento: `id: "0"` débito · `id: "1"`
                          abatimento (entra como valor negativo).
                        properties:
                          id:
                            type: string
                          name:
                            type: string
                      indexes:
                        type: array
                        description: Índices de correção aplicados, por período.
                        items:
                          type: object
                          properties:
                            index:
                              type: object
                              description: >-
                                Índice de correção a aplicar. Obtenha o objeto
                                em `GET /api/calculadoras/indices-correcao` e
                                envie-o por completo.
                              properties:
                                id:
                                  type: number
                                name:
                                  type: string
                                bacen_code:
                                  type: string
                                bacen_code_annually:
                                  type: string
                                  nullable: true
                                type:
                                  type: string
                                interest_person_type:
                                  type: string
                                  nullable: true
                                petition_filename:
                                  type: string
                                  nullable: true
                                source:
                                  type: string
                                latest_update:
                                  type: string
                                first_update:
                                  type: string
                                is_multi_index:
                                  type: number
                                update:
                                  type: number
                                start_date_fetch:
                                  type: string
                                  nullable: true
                                created_at:
                                  type: string
                                modified_at:
                                  type: string
                            startDate:
                              type: string
                              format: date
                              description: Início da aplicação do índice.
                            endDate:
                              type: string
                              format: date
                              description: Fim da aplicação do índice.
                      interests:
                        type: array
                        description: Regras de juros aplicadas, por período.
                        items:
                          type: object
                          properties:
                            name:
                              type: string
                              description: >-
                                Forma v1 de escolher uma taxa por série:
                                `SELIC`, `Poupança` ou `Taxa legal`. Vazio (ou
                                qualquer outro valor) é taxa percentual.
                                **Obrigatório**, mesmo quem envia `tipo_taxa`:
                                aí mande `""` e deixe o `tipo_taxa` dizer de
                                onde vem a taxa.
                            interest:
                              type: number
                              description: >-
                                Taxa de juros (percentual). **Ignorado numa taxa
                                por série**: ali a taxa de cada mês vem da série
                                do Bacen. Envie `0`.
                            apply_index:
                              type: boolean
                              description: Se os juros incidem sobre o valor já corrigido.
                            type:
                              type: object
                              description: >-
                                Periodicidade: `id: "0"` mensal (a.m.) · `id:
                                "1"` anual (a.a.).
                              properties:
                                id:
                                  type: string
                                name:
                                  type: string
                            tipo_taxa:
                              type: string
                              enum:
                                - PERCENTUAL
                                - SELIC
                                - POUPANCA
                                - TAXA_LEGAL
                              description: >-
                                De onde sai a taxa do período: `PERCENTUAL` usa
                                o campo `interest`; os outros três usam a série
                                mensal correspondente, publicada pelo Bacen. É
                                por aqui que a SELIC entra como **juros**, que é
                                o lugar dela na mora de débito tributário (Lei
                                9.430/96, art. 61 §3º).


                                Ausente, é **derivado do `name`**: `SELIC` →
                                `SELIC`, `Poupança` → `POUPANCA`, `Taxa legal` →
                                `TAXA_LEGAL`, qualquer outro → `PERCENTUAL`. Por
                                isso o campo não tem valor padrão: omiti-lo não
                                é o mesmo que mandar `PERCENTUAL`, que forçaria
                                a taxa do campo `interest` mesmo num bloco com
                                `name: "SELIC"`.
                            regime:
                              type: string
                              enum:
                                - SIMPLES_DIA
                                - SIMPLES_MES
                                - SIMPLES_ANO
                                - COMPOSTO_DIA
                                - COMPOSTO_MES
                                - COMPOSTO_ANO_BASE_MES
                              description: >-
                                Regime de capitalização do bloco. Ausente, vale
                                o que a periodicidade `type` implica: `id: "0"`
                                → `SIMPLES_MES`, `id: "1"` → `SIMPLES_ANO`.


                                **Numa taxa por série** (`tipo_taxa` diferente
                                de `PERCENTUAL`) só há dois comportamentos:
                                qualquer `SIMPLES_*` **soma** as taxas mensais
                                do período e qualquer `COMPOSTO_*` as
                                **capitaliza**. A granularidade dia/mês/ano não
                                se aplica, porque o Bacen só publica taxa mensal
                                — os três regimes compostos dão o mesmo número.


                                **Numa taxa percentual** esta rota continua a
                                seguir a periodicidade `type`, e as seis opções
                                não estão disponíveis: um `regime` que contrarie
                                o `type` é recusado com `422`, em vez de ser
                                aceito e ignorado.
                            startDate:
                              type: string
                              format: date
                            endDate:
                              type: string
                              format: date
                fines_fees:
                  type: array
                  description: >-
                    Multas e honorários. Pode ser vazio; itens com `fine` e
                    `legal_fees` zerados são ignorados.
                  items:
                    type: object
                    properties:
                      description:
                        type: string
                        description: Descrição da multa.
                      description_legal_fees:
                        type: string
                        description: Descrição dos honorários.
                      fine:
                        type: number
                        description: Percentual da multa.
                      legal_fees:
                        type: number
                        description: Percentual dos honorários.
                      fine_interests:
                        type: boolean
                        description: Se a multa incide sobre o saldo já com juros.
                      legal_fees_add_fines:
                        type: boolean
                        description: Se os honorários incidem também sobre a multa.
                legal_costs_list:
                  type: array
                  description: Custas processuais. Pode ser vazio.
                  items:
                    type: object
                    properties:
                      amount:
                        type: number
                        description: Valor da custa.
                      date:
                        type: string
                        format: date
                        description: Data da custa (`YYYY-MM-DD`).
                      description:
                        type: string
                      index:
                        type: object
                        description: >-
                          Índice de correção da custa (ver `GET
                          /api/calculadoras/indices-correcao`).
                        properties:
                          id:
                            type: number
                            nullable: true
                          name:
                            type: string
                          bacen_code:
                            type: string
            examples:
              completa:
                summary: Correção de valores
                value:
                  process_number: '123456789'
                  res_judicata_date: '2025-10-03'
                  stakeholders:
                    - name: Parte 1
                      type:
                        id: '1'
                        name: Autor
                  installments:
                    - description: Parcela 01
                      calculation_date: '2026-06-21'
                      amount: 500
                      type:
                        id: '0'
                        name: Parcela de Débito
                      indexes:
                        - index:
                            id: 3
                            name: SELIC
                            bacen_code: '4390'
                            bacen_code_annually: null
                            type: average_price_index
                            interest_person_type: null
                            petition_filename: null
                            source: BACEN
                            latest_update: '2026-06-01'
                            first_update: '1986-08-01'
                            is_multi_index: 0
                            update: 1
                            start_date_fetch: null
                            created_at: '2021-02-22T20:54:56.232Z'
                            modified_at: '2026-06-21T13:03:02.858Z'
                          startDate: '2018-01-01'
                          endDate: '2026-06-21'
                      interests:
                        - name: ''
                          interest: 1
                          apply_index: false
                          type:
                            id: '0'
                            name: Mensal
                          startDate: '2018-01-01'
                          endDate: '2026-06-21'
                    - description: Parcela 02
                      calculation_date: '2026-06-21'
                      amount: 500
                      type:
                        id: '0'
                        name: Parcela de Débito
                      indexes:
                        - index:
                            id: 3
                            name: SELIC
                            bacen_code: '4390'
                            bacen_code_annually: null
                            type: average_price_index
                            interest_person_type: null
                            petition_filename: null
                            source: BACEN
                            latest_update: '2026-06-01'
                            first_update: '1986-08-01'
                            is_multi_index: 0
                            update: 1
                            start_date_fetch: null
                            created_at: '2021-02-22T20:54:56.232Z'
                            modified_at: '2026-06-21T13:03:02.858Z'
                          startDate: '2018-02-01'
                          endDate: '2026-06-21'
                      interests:
                        - name: ''
                          interest: 1
                          apply_index: false
                          type:
                            id: '0'
                            name: Mensal
                          startDate: '2018-02-01'
                          endDate: '2026-06-21'
                  fines_fees:
                    - description: Multa 01
                      description_legal_fees: Honorários 01
                      fine: 1
                      legal_fees: 1
                      fine_interests: false
                      legal_fees_add_fines: false
                  legal_costs_list:
                    - amount: 120
                      date: '2018-01-01'
                      description: Custas 01
                      index:
                        id: 1
                        name: IGP-M
                        bacen_code: '189'
              completa_selic_juros:
                summary: SELIC como juros, somada (débito tributário)
                value:
                  process_number: 0001234-56.2023.4.03.6100
                  res_judicata_date: ''
                  stakeholders:
                    - name: Contribuinte Exemplo
                      type:
                        id: '1'
                        name: Autor
                  installments:
                    - description: IRPJ - competência 12/2020
                      calculation_date: '2026-06-21'
                      amount: 10000
                      type:
                        id: '0'
                        name: Parcela de Débito
                      indexes: []
                      interests:
                        - name: SELIC
                          tipo_taxa: SELIC
                          regime: SIMPLES_MES
                          interest: 0
                          apply_index: true
                          type:
                            id: '0'
                            name: Mensal
                          startDate: '2021-02-01'
                          endDate: '2026-06-21'
                  fines_fees: []
                  legal_costs_list: []
      responses:
        '200':
          description: Resultado da correção, com valores atualizados.
          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/calculadoras/completa
                  result:
                    items:
                      - description: Parcela 01
                        calculation_date: '2026-06-21'
                        amount: 500
                        type:
                          id: '0'
                          name: Parcela de Débito
                        indexes:
                          - name: SELIC
                            startDate: 01/01/2018
                            endDate: 21/06/2026
                            adjustmentUntil: ''
                        interests:
                          - rate: 1
                            startDate: 01/01/2018
                            endDate: 21/06/2026
                            type: a.m.
                            apply_index: false
                            name: ''
                        startDate: '2018-01-01'
                        indexStartDate: '2018-01-01'
                        endDate: '2026-06-21'
                        schedule:
                          - date: '2018-01-01'
                            amount: 500
                            correction: 0
                            amount_adjusted: 500
                            interest: 0
                            outstanding_balance: 500
                            _description: Parcela 01
                            _date: 01/01/2018
                            _amount: 500,00
                            _amount_adjusted: ''
                            _correction: ''
                            _interest: ''
                            _outstanding_balance: ''
                          - date: '2018-01-31'
                            amount: 500
                            correction: 0.58
                            amount_adjusted: 502.9
                            interest: 0
                            outstanding_balance: 502.9
                            _description: ''
                            _date: 31/01/2018
                            _amount: 500,00
                            _amount_adjusted: R$ 502,90
                            _correction: 0,58
                            _interest: ''
                            _outstanding_balance: R$ 502,90
                          - date: '2026-06-21'
                            amount: 667.59
                            correction: 0
                            amount_adjusted: 667.59
                            interest: 688.29
                            outstanding_balance: 1355.88
                            _description: ''
                            _date: 21/06/2026
                            _amount: 667,59
                            _amount_adjusted: R$ 667,59
                            _correction: 0,00
                            _interest: R$ 688,29
                            _outstanding_balance: R$ 1.355,88
                      - description: Parcela 02
                        calculation_date: '2026-06-21'
                        amount: 500
                        type:
                          id: '0'
                          name: Parcela de Débito
                        indexes:
                          - name: SELIC
                            startDate: 01/02/2018
                            endDate: 21/06/2026
                            adjustmentUntil: ''
                        interests:
                          - rate: 1
                            startDate: 01/02/2018
                            endDate: 21/06/2026
                            type: a.m.
                            apply_index: false
                            name: ''
                        startDate: '2018-02-01'
                        indexStartDate: '2018-02-01'
                        endDate: '2026-06-21'
                        schedule:
                          - date: '2018-02-01'
                            amount: 500
                            correction: 0
                            amount_adjusted: 500
                            interest: 0
                            outstanding_balance: 500
                            _description: Parcela 02
                            _date: 01/02/2018
                            _amount: 500,00
                            _amount_adjusted: ''
                            _correction: ''
                            _interest: ''
                            _outstanding_balance: ''
                          - date: '2018-02-28'
                            amount: 500
                            correction: 0.47
                            amount_adjusted: 502.35
                            interest: 0
                            outstanding_balance: 502.35
                            _description: ''
                            _date: 28/02/2018
                            _amount: 500,00
                            _amount_adjusted: R$ 502,35
                            _correction: 0,47
                            _interest: ''
                            _outstanding_balance: R$ 502,35
                          - date: '2026-06-21'
                            amount: 663.77
                            correction: 0
                            amount_adjusted: 663.77
                            interest: 677.49
                            outstanding_balance: 1341.26
                            _description: ''
                            _date: 21/06/2026
                            _amount: 663,77
                            _amount_adjusted: R$ 663,77
                            _correction: 0,00
                            _interest: R$ 677,49
                            _outstanding_balance: R$ 1.341,26
                    fines_fees:
                      - description: Multa 01
                        description_legal_fees: Honorários 01
                        fine: 1
                        legal_fees: 1
                        fine_interests: false
                        legal_fees_add_fines: false
                        hasFine: true
                        hasLegalFees: true
                        total_fines: 13.3136
                        total_legal_fees: 26.9714
                        subtotal: 2737.425
                    _total_outstanding_balance: 2.697,14
                    _total_interests: 1.365,78
                    _total_amount_adjusted: 1.331,36
                    _total_legal_cost: 212.09
        '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/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/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/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/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/calculadoras/completa
        '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/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/calculadoras/completa
        '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/calculadoras/completa
      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.