> ## 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 progressão de regime

> Calcula os marcos de progressão de regime a partir das condenações, do regime inicial e dos eventos que alteram o prazo (remições, detrações, faltas graves e suspensões), aplicando a estratégia escolhida em `calculation_strategy` (`DEFAULT` ou `ART76`). A resposta traz as datas previstas de progressão (`progressions`), a linha do tempo do cumprimento (`timeline`) e os totais de dias (pena, detração, remição e suspensão).

Os campos `nature_crime_id` e `condition_convict_id` referenciam dados do backend e devem existir; caso contrário a resposta é `404`.



## OpenAPI

````yaml /openapi/legado.json post /api/calculadoras/progressao-regime
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/progressao-regime:
    post:
      tags:
        - Calculadoras
      summary: Calcula a progressão de regime
      description: >-
        Calcula os marcos de progressão de regime a partir das condenações, do
        regime inicial e dos eventos que alteram o prazo (remições, detrações,
        faltas graves e suspensões), aplicando a estratégia escolhida em
        `calculation_strategy` (`DEFAULT` ou `ART76`). A resposta traz as datas
        previstas de progressão (`progressions`), a linha do tempo do
        cumprimento (`timeline`) e os totais de dias (pena, detração, remição e
        suspensão).


        Os campos `nature_crime_id` e `condition_convict_id` referenciam dados
        do backend e devem existir; caso contrário a resposta é `404`.
      operationId: CalculatorsController_progressaoRegime[0]
      parameters: []
      requestBody:
        required: true
        description: Payload da calculadora de progressão de regime.
        content:
          application/json:
            schema:
              type: object
              description: >-
                Payload da progressão de regime. Informe as condenações (com as
                penas e os ids de natureza/condição), o regime inicial, a
                estratégia de cálculo e os eventos que alteram o prazo
                (remições, detrações, faltas graves e suspensões). A resposta
                traz os marcos de progressão previstos, a linha do tempo do
                cumprimento e os totais de dias.
              required:
                - name
                - convict_info
                - redemptions
                - detractions
                - serious_fault
                - suspensions
                - type_initial_regime
                - calculation_strategy
                - condemnations
              properties:
                name:
                  type: string
                  description: Nome do cálculo. Não afeta o resultado.
                convict_info:
                  type: object
                  description: >-
                    Dados do réu/processo. Exigidos pelo schema, mas não afetam
                    o resultado.
                  required:
                    - customer
                  properties:
                    customer:
                      type: object
                      required:
                        - id
                        - name
                      properties:
                        id:
                          type: number
                          description: Identificador do cliente/réu (positivo).
                        name:
                          type: string
                          description: Nome do réu (mínimo 3 caracteres).
                        document:
                          type: string
                          nullable: true
                          description: Documento do réu. Opcional.
                    number_lawsuit:
                      type: string
                      description: Número do processo (máx. 30 caracteres). Opcional.
                redemptions:
                  type: array
                  description: Remições (dias remidos por trabalho/estudo).
                  items:
                    type: object
                    required:
                      - total_days
                      - homologation_date
                    properties:
                      total_days:
                        type: number
                        description: Dias remidos (positivo).
                      homologation_date:
                        type: string
                        format: date
                        description: Data de homologação (`YYYY-MM-DD`).
                      description:
                        type: string
                        description: Descrição. Opcional.
                detractions:
                  type: array
                  description: Detrações (períodos de prisão a descontar).
                  items:
                    type: object
                    required:
                      - start_date
                      - end_date
                    properties:
                      start_date:
                        type: string
                        format: date
                        description: Data inicial (`YYYY-MM-DD`).
                      end_date:
                        type: string
                        format: date
                        description: Data final (`YYYY-MM-DD`).
                      description:
                        type: string
                        description: Descrição. Opcional.
                      total_days:
                        type: number
                        description: >-
                          Total de dias (positivo). Opcional — derivado do
                          período quando ausente.
                serious_fault:
                  type: array
                  description: Faltas graves ocorridas ao longo do cumprimento.
                  items:
                    type: object
                    required:
                      - date
                    properties:
                      date:
                        type: string
                        format: date
                        description: Data da falta (`YYYY-MM-DD`).
                      description:
                        type: string
                        description: Descrição. Opcional.
                      regime_to_go:
                        type: string
                        enum:
                          - FECHADO
                          - SEMIABERTO
                          - ABERTO
                        description: Regime de regressão, se houver. Opcional.
                suspensions:
                  type: array
                  description: Suspensões da contagem do prazo.
                  items:
                    type: object
                    required:
                      - start_date
                      - end_date
                    properties:
                      start_date:
                        type: string
                        format: date
                        description: Data inicial (`YYYY-MM-DD`).
                      end_date:
                        type: string
                        format: date
                        description: Data final (`YYYY-MM-DD`).
                      description:
                        type: string
                        description: Descrição. Opcional.
                      total_days:
                        type: number
                        description: >-
                          Total de dias (positivo). Opcional — derivado do
                          período quando ausente.
                type_initial_regime:
                  type: string
                  enum:
                    - FECHADO
                    - SEMIABERTO
                    - ABERTO
                  description: Regime inicial de cumprimento.
                calculation_strategy:
                  type: string
                  enum:
                    - DEFAULT
                    - ART76
                  description: Estratégia de cálculo da progressão.
                condemnations:
                  type: array
                  description: Condenações. Deve conter **pelo menos uma**.
                  items:
                    type: object
                    required:
                      - criminal_sentences
                      - start_date
                      - is_considered_serious_fault
                    properties:
                      criminal_sentences:
                        type: array
                        description: Penas da condenação.
                        items:
                          type: object
                          required:
                            - type_description
                            - crime_date
                            - nature_crime_id
                            - condition_convict_id
                            - penalty_time
                          properties:
                            type_description:
                              type: string
                              description: Tipificação/descrição do crime.
                            crime_date:
                              type: string
                              format: date
                              description: Data do crime (`YYYY-MM-DD`).
                            nature_crime_id:
                              type: number
                              description: >-
                                Id da natureza do crime (referência do backend;
                                positivo).
                            condition_convict_id:
                              type: number
                              description: >-
                                Id da condição do apenado (referência do
                                backend; positivo).
                            penalty_time:
                              type: object
                              description: Tempo de pena cominado (`>= 0`).
                              required:
                                - years
                                - months
                                - days
                              properties:
                                years:
                                  type: number
                                  description: Anos.
                                months:
                                  type: number
                                  description: Meses.
                                days:
                                  type: number
                                  description: Dias.
                      start_date:
                        type: string
                        format: date
                        description: Data de início do cumprimento (`YYYY-MM-DD`).
                      is_considered_serious_fault:
                        type: boolean
                        description: Se a nova condenação é considerada falta grave.
                      regime_to_go:
                        type: string
                        enum:
                          - FECHADO
                          - SEMIABERTO
                          - ABERTO
                        description: Regime de regressão a aplicar, se houver. Opcional.
            examples:
              progressao-regime:
                summary: Progressão a partir de uma condenação (regime fechado)
                value:
                  name: Progressão de regime - exemplo
                  convict_info:
                    customer:
                      id: 1
                      name: Fulano de Tal
                      document: null
                    number_lawsuit: 0001234-56.2024.8.26.0100
                  redemptions: []
                  detractions: []
                  serious_fault: []
                  suspensions: []
                  type_initial_regime: FECHADO
                  calculation_strategy: DEFAULT
                  condemnations:
                    - criminal_sentences:
                        - type_description: Roubo (art. 157, CP)
                          crime_date: '2021-01-10'
                          nature_crime_id: 1
                          condition_convict_id: 1
                          penalty_time:
                            years: 5
                            months: 0
                            days: 0
                      start_date: '2021-01-10'
                      is_considered_serious_fault: false
      responses:
        '200':
          description: >-
            Resultado da progressão, com marcos previstos, linha do tempo e
            totais.
          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/progressao-regime
                  result:
                    detraction_days: 0
                    redemption_days: 0
                    suspensions_days: 0
                    total_sentence_days: 1825
                    reports:
                      summary: null
                      complete: null
                      expert: null
                    progressions:
                      - date_to_progression: '2022-04-11T00:00:00.000Z'
                        progression_title: Progressão para o regime semiaberto
                    timeline:
                      - date: '2021-01-10T00:00:00.000Z'
                        event_title: Início do cumprimento
                        progression: Fechado
                        event_type: ''
                      - date: '2022-04-11T00:00:00.000Z'
                        event_title: Progressão de regime
                        progression: Semi-aberto
                        event_type: progressão
                        base_date: '2021-01-10T00:00:00.000Z'
                        base_date_reference: início do cumprimento
        '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/progressao-regime
        '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/progressao-regime
        '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/progressao-regime
      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.