> ## 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 dosimetria da pena

> Calcula a pena de cada crime pelo método trifásico (pena-base a partir das circunstâncias judiciais, agravantes/atenuantes e causas de aumento/diminuição) e consolida o conjunto conforme a regra de concurso (`crime_concurrence`). Informe os crimes (`crime_list`), o critério de fixação (`calculation_strategy`), o ano do salário mínimo e o valor do dia-multa. A resposta traz a pena por fase de cada crime e os totais consolidados (pena, multa e suspensão do direito de dirigir).



## OpenAPI

````yaml /openapi/legado.json post /api/calculadoras/dosimetria
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://api.jusfy.dev/calculators/api/reference/fundamentos/migracao-do-legado).


    A política de versionamento e depreciação está na [política de
    versionamento](https://api.jusfy.dev/calculators/api/reference/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/dosimetria:
    post:
      tags:
        - Calculadoras
      summary: Calcula a dosimetria da pena
      description: >-
        Calcula a pena de cada crime pelo método trifásico (pena-base a partir
        das circunstâncias judiciais, agravantes/atenuantes e causas de
        aumento/diminuição) e consolida o conjunto conforme a regra de concurso
        (`crime_concurrence`). Informe os crimes (`crime_list`), o critério de
        fixação (`calculation_strategy`), o ano do salário mínimo e o valor do
        dia-multa. A resposta traz a pena por fase de cada crime e os totais
        consolidados (pena, multa e suspensão do direito de dirigir).
      operationId: CalculatorsController_dosimetria[0]
      parameters: []
      requestBody:
        required: true
        description: Payload da calculadora de dosimetria da pena.
        content:
          application/json:
            schema:
              type: object
              description: >-
                Payload da dosimetria da pena. Informe os crimes com as
                circunstâncias das três fases (pena-base, agravantes/atenuantes
                e causas de aumento/diminuição), o critério de fixação, o ano do
                salário mínimo, o valor do dia-multa e a regra de concurso; a
                resposta traz a pena por fase de cada crime e os totais
                consolidados (pena, multa e suspensão).
              required:
                - name
                - convict_info
                - calculation_strategy
                - minimum_wage_year
                - daily_fine_amount
                - crime_list
                - crime_concurrence
              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
                    - number_lawsuit
                  properties:
                    customer:
                      type: object
                      required:
                        - id
                        - name
                      properties:
                        id:
                          type: number
                          description: Identificador do cliente/réu (inteiro 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).
                calculation_strategy:
                  type: string
                  description: >-
                    Critério de fixação da pena-base (fração por circunstância),
                    ex.: `1/6`.
                minimum_wage_year:
                  type: number
                  description: >-
                    Ano de referência do salário mínimo usado no cálculo dos
                    dias-multa.
                daily_fine_amount:
                  type: string
                  description: >-
                    Valor do dia-multa como fração do salário mínimo, ex.:
                    `1/30`.
                crime_list:
                  type: array
                  description: Crimes a dosar.
                  items:
                    type: object
                    description: Crime a ser dosado (três fases da dosimetria).
                    required:
                      - description
                      - minimum_sentence
                      - maximum_sentence
                      - base_sentence_criteria
                      - aggravating_factors
                      - mitigating_factors
                      - increase_causes
                      - decrease_causes
                    properties:
                      description:
                        type: string
                        description: Descrição/tipificação do crime.
                      minimum_sentence:
                        type: object
                        description: Duração de pena (todos os campos `>= 0`).
                        required:
                          - years
                          - months
                          - days
                        properties:
                          years:
                            type: number
                            description: Anos.
                          months:
                            type: number
                            description: Meses.
                          days:
                            type: number
                            description: Dias.
                      maximum_sentence:
                        type: object
                        description: Duração de pena (todos os campos `>= 0`).
                        required:
                          - years
                          - months
                          - days
                        properties:
                          years:
                            type: number
                            description: Anos.
                          months:
                            type: number
                            description: Meses.
                          days:
                            type: number
                            description: Dias.
                      base_sentence_criteria:
                        type: array
                        description: >-
                          Circunstâncias judiciais desfavoráveis consideradas na
                          pena-base.
                        items:
                          type: string
                      aggravating_factors:
                        type: array
                        description: Agravantes da 2ª fase.
                        items:
                          type: object
                          required:
                            - aggravating_description
                          properties:
                            aggravating_description:
                              type: string
                              description: Descrição da agravante.
                      mitigating_factors:
                        type: array
                        description: Atenuantes da 2ª fase.
                        items:
                          type: object
                          required:
                            - mitigating_description
                          properties:
                            mitigating_description:
                              type: string
                              description: Descrição da atenuante.
                      increase_causes:
                        type: array
                        description: Causas de aumento da 3ª fase.
                        items:
                          type: object
                          required:
                            - description
                            - fraction
                            - penal_code_context
                          properties:
                            description:
                              type: string
                              description: Descrição da causa.
                            fraction:
                              type: string
                              description: 'Fração aplicada, ex.: `1/6`, `2/3`.'
                            penal_code_context:
                              type: string
                              description: Contexto no Código Penal (dispositivo).
                      decrease_causes:
                        type: array
                        description: Causas de diminuição da 3ª fase.
                        items:
                          type: object
                          required:
                            - description
                            - fraction
                            - penal_code_context
                          properties:
                            description:
                              type: string
                              description: Descrição da causa.
                            fraction:
                              type: string
                              description: 'Fração aplicada, ex.: `1/6`, `2/3`.'
                            penal_code_context:
                              type: string
                              description: Contexto no Código Penal (dispositivo).
                      fine_penalty:
                        type: object
                        description: Limites da pena de multa (dias-multa). Opcional.
                        properties:
                          minimum_penalty:
                            type: number
                            description: Mínimo de dias-multa (`>= 0`).
                          maximum_penalty:
                            type: number
                            description: Máximo de dias-multa (`>= 0`).
                      right_to_drive_suspension:
                        type: object
                        description: Limites da suspensão do direito de dirigir. Opcional.
                        properties:
                          minimum_suspension:
                            type: object
                            description: Duração de suspensão (`>= 0`).
                            properties:
                              years:
                                type: number
                                description: Anos.
                              months:
                                type: number
                                description: Meses.
                          maximum_suspension:
                            type: object
                            description: Duração de suspensão (`>= 0`).
                            properties:
                              years:
                                type: number
                                description: Anos.
                              months:
                                type: number
                                description: Meses.
                crime_concurrence:
                  type: string
                  enum:
                    - MATERIAL
                    - FORMAL_IMPROPER
                    - FORMAL_PROPER
                    - CRIMINAL_CONTINUITY
                  description: Regra de concurso de crimes aplicada ao conjunto.
            examples:
              dosimetria:
                summary: Dosimetria de um crime (concurso material)
                value:
                  name: Dosimetria da pena - exemplo
                  convict_info:
                    customer:
                      id: 1
                      name: Fulano de Tal
                      document: null
                    number_lawsuit: 0001234-56.2024.8.26.0100
                  calculation_strategy: 1/6
                  minimum_wage_year: 2024
                  daily_fine_amount: 1/30
                  crime_concurrence: MATERIAL
                  crime_list:
                    - description: Furto qualificado (art. 155, §4º, CP)
                      minimum_sentence:
                        years: 2
                        months: 0
                        days: 0
                      maximum_sentence:
                        years: 8
                        months: 0
                        days: 0
                      base_sentence_criteria:
                        - culpabilidade
                      aggravating_factors:
                        - aggravating_description: Reincidência
                      mitigating_factors:
                        - mitigating_description: Confissão espontânea
                      increase_causes: []
                      decrease_causes:
                        - description: Tentativa
                          fraction: 1/3
                          penal_code_context: art. 14, II, CP
                      fine_penalty:
                        minimum_penalty: 10
                        maximum_penalty: 360
      responses:
        '200':
          description: Resultado da dosimetria, com pena por fase de cada crime 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/dosimetria
                  result:
                    success: true
                    crime_list:
                      - base_sentence: 2 anos e 4 meses
                        intermediate_sentence: 2 anos, 3 meses e 6 dias
                        final_sentence: 1 ano, 6 meses e 4 dias
                        description: Furto qualificado (art. 155, §4º, CP)
                    total_sentence: 1 ano, 6 meses e 4 dias
                    fine_penalty:
                      amount: (R$ 282,40)
                      days: 6 dias-multa
                    right_to_drive_suspension: ''
                    reports:
                      report: null
                      expert: null
        '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/dosimetria
        '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/dosimetria
        '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/dosimetria
      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.