{
  "openapi": "3.0.0",
  "info": {
    "description": "Operações relacionadas a contratos",
    "title": "Contratos",
    "contact": {},
    "version": "v1"
  },
  "paths": {
    "/v1/contratos": {
      "get": {
        "security": [
          {
            "BearerAuth": []
          }
        ],
        "description": "Permite consultar contratos existentes, com suporte a filtros que facilitam a busca e a gestão dos contratos criados (ex. por cliente, data, status, entre outros).\nOs parâmetros de múltiplos valores (ex.: cliente_id, tipo_pagamento) aceitam dois formatos equivalentes: chaves repetidas (`?cliente_id=<uuid1>&cliente_id=<uuid2>`) ou valores separados por vírgula (`?cliente_id=<uuid1>,<uuid2>`).",
        "tags": [
          "v1"
        ],
        "summary": "Retornar os contratos por filtro",
        "operationId": "listarContratos",
        "parameters": [
          {
            "description": "Página",
            "name": "pagina",
            "in": "query",
            "example": 1,
            "schema": {
              "type": "integer",
              "default": 1
            }
          },
          {
            "description": "Tamanho da página (máximo 50)",
            "name": "tamanho_pagina",
            "in": "query",
            "example": 10,
            "schema": {
              "type": "integer",
              "default": 10
            }
          },
          {
            "description": "Campo para ordenação ascendente. Se informado ele desconsidera o valor do campo_ordenado_descendente.",
            "name": "campo_ordenado_ascendente",
            "in": "query",
            "example": "DATA_INICIO",
            "schema": {
              "type": "string",
              "enum": [
                "DATA_INICIO",
                "DATA_FIM"
              ]
            }
          },
          {
            "description": "Campo para ordenação descendente. Se este campo for utilizado, o campo campo_ordenado_ascendente não deverá ser informado.",
            "name": "campo_ordenado_descendente",
            "in": "query",
            "example": "DATA_INICIO",
            "schema": {
              "type": "string",
              "enum": [
                "DATA_INICIO",
                "DATA_FIM"
              ]
            }
          },
          {
            "description": "Busca textual por nome",
            "name": "busca_textual",
            "in": "query",
            "example": "Contrato 1",
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "id do cliente",
            "name": "cliente_id",
            "in": "query",
            "example": "123e4567-e89b-12d3-a456-426614174000",
            "explode": true,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "description": "Data inicio do intervalo de busca",
            "name": "data_inicio",
            "in": "query",
            "required": true,
            "example": "2026-08-15",
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Data fim do intervalo de busca",
            "name": "data_fim",
            "in": "query",
            "required": true,
            "example": "2027-08-15",
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Tipos de pagamento",
            "name": "tipo_pagamento",
            "in": "query",
            "example": "BOLETO_BANCARIO",
            "explode": true,
            "schema": {
              "type": "array",
              "items": {
                "enum": [
                  "BOLETO_BANCARIO",
                  "CARTAO_CREDITO",
                  "CARTAO_DEBITO",
                  "CARTEIRA_DIGITAL",
                  "CASHBACK",
                  "CHEQUE",
                  "CREDITO_LOJA",
                  "CREDITO_VIRTUAL",
                  "DEPOSITO_BANCARIO",
                  "DINHEIRO",
                  "OUTRO",
                  "DEBITO_AUTOMATICO",
                  "LINK_PAGAMENTO",
                  "PIX_PAGAMENTO_INSTANTANEO",
                  "COBRANCA_PIX",
                  "PROGRAMA_FIDELIDADE",
                  "SEM_PAGAMENTO",
                  "TRANSFERENCIA_BANCARIA",
                  "VALE_ALIMENTACAO",
                  "VALE_COMBUSTIVEL",
                  "VALE_REFEICAO"
                ],
                "type": "string"
              }
            }
          },
          {
            "description": "Status dos contratos",
            "name": "status",
            "in": "query",
            "example": "ATIVO",
            "schema": {
              "type": "string",
              "enum": [
                "TODOS",
                "ATIVO",
                "INATIVO",
                "PROXIMO_AO_VENCIMENTO"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ContratosFiltroResposta"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErroAPI"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErroAPI"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErroAPI"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErroAPI"
                }
              }
            }
          }
        }
      },
      "post": {
        "security": [
          {
            "BearerAuth": []
          }
        ],
        "description": "Permite criar um novo contrato, definindo as informações necessárias para configuração da recorrência, como período, produtos/serviços vinculados e demais parâmetros do contrato.",
        "tags": [
          "v1"
        ],
        "summary": "Criar um novo contrato",
        "operationId": "criarContrato",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CriarContrato"
              }
            }
          },
          "description": "Dados para criar o contrato",
          "required": true
        },
        "responses": {
          "201": {
            "description": "Created",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ResumoCriacaoContrato"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErroAPI"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErroAPI"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErroAPI"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErroAPI"
                }
              }
            }
          }
        }
      }
    },
    "/v1/contratos/proximo-numero": {
      "get": {
        "security": [
          {
            "BearerAuth": []
          }
        ],
        "description": "Permite consultar o próximo número de contrato a ser utilizado no momento da criação.",
        "tags": [
          "v1"
        ],
        "summary": "Retornar o próximo número do contrato disponível",
        "operationId": "obterProximoNumeroContrato",
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "integer"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErroAPI"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErroAPI"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErroAPI"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErroAPI"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErroAPI"
                }
              }
            }
          }
        }
      }
    },
    "/v1/contratos/{id}": {
      "get": {
        "security": [
          {
            "BearerAuth": []
          }
        ],
        "description": "Recupera os detalhes de um contrato específico por ID. Útil quando quiser exibir ou sincronizar todos os dados de um contrato específico.",
        "tags": [
          "v1"
        ],
        "summary": "Retornar o contrato por id",
        "operationId": "obterContratoPorID",
        "parameters": [
          {
            "description": "ID do contrato (UUID)",
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ContratoResumo"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErroAPI"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErroAPI"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErroAPI"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErroAPI"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErroAPI"
                }
              }
            }
          }
        }
      },
      "delete": {
        "security": [
          {
            "BearerAuth": []
          }
        ],
        "description": "Remove um contrato existente. O contrato será excluído permanentemente, cancelando todas as vendas associadas (agendadas e efetivadas). Contratos em reajuste de valor não podem ser removidos.",
        "tags": [
          "v1"
        ],
        "summary": "Remover um contrato",
        "operationId": "removerContrato",
        "parameters": [
          {
            "description": "ID do contrato (UUID)",
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "No Content"
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErroAPI"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErroAPI"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErroAPI"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErroAPI"
                }
              }
            }
          }
        }
      }
    },
    "/v1/contratos/{id}/encerrar": {
      "post": {
        "security": [
          {
            "BearerAuth": []
          }
        ],
        "description": "Encerra um contrato ativo. O contrato será desativado e não poderá mais gerar novas cobranças. Contratos que estão passando por reajuste de valor não podem ser encerrados.",
        "tags": [
          "v1"
        ],
        "summary": "Encerrar um contrato",
        "operationId": "encerrarContrato",
        "parameters": [
          {
            "description": "ID do contrato (UUID)",
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "No Content"
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErroAPI"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErroAPI"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErroAPI"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErroAPI"
                }
              }
            }
          }
        }
      }
    }
  },
  "tags": [
    {
      "description": "Operações relacionadas a orçamentos",
      "name": "v1"
    }
  ],
  "servers": [
    {
      "url": "https://api-v2.contaazul.com"
    }
  ],
  "components": {
    "securitySchemes": {
      "BearerAuth": {
        "description": "Digite **'Bearer &lt;JWT&gt;'**, onde JWT é o access_token recebido no login (passo 2 do fluxo de autenticação).",
        "type": "apiKey",
        "name": "Authorization",
        "in": "header"
      }
    },
    "schemas": {
      "ClienteContrato": {
        "description": "Dados do cliente vinculado ao contrato",
        "type": "object",
        "properties": {
          "id": {
            "description": "ID do cliente",
            "type": "string",
            "example": "123e4567-e89b-12d3-a456-426614174000"
          },
          "nome": {
            "description": "Nome do cliente",
            "type": "string",
            "example": "João da Silva"
          }
        }
      },
      "ClienteResumo": {
        "description": "Resumo dos dados do cliente vinculado ao contrato",
        "type": "object",
        "properties": {
          "id": {
            "description": "ID do cliente",
            "type": "string",
            "example": "123e4567-e89b-12d3-a456-426614174000"
          },
          "nome": {
            "description": "Nome do cliente",
            "type": "string",
            "example": "João da Silva"
          }
        }
      },
      "ComposicaoValorResumo": {
        "description": "Resumo da composição de valores do contrato",
        "type": "object",
        "properties": {
          "desconto": {
            "description": "Valor do desconto aplicado",
            "type": "number",
            "example": 200
          },
          "frete": {
            "description": "Valor do frete",
            "type": "number",
            "example": 50
          },
          "valor_bruto": {
            "description": "Valor bruto do contrato",
            "type": "number",
            "example": 1200
          },
          "valor_impostos_servico": {
            "description": "Valor total dos impostos sobre o serviço",
            "type": "number",
            "example": 100
          },
          "valor_liquido": {
            "description": "Valor líquido do contrato",
            "type": "number",
            "example": 1050
          }
        }
      },
      "CondicaoPagamentoResumo": {
        "description": "Resumo das condições de pagamento do contrato",
        "type": "object",
        "properties": {
          "dia_vencimento": {
            "description": "Dia do mês para vencimento do pagamento",
            "type": "integer",
            "example": 15
          },
          "nome_conta_financeira": {
            "description": "Nome da conta financeira vinculada ao pagamento",
            "type": "string",
            "example": "Conta Corrente"
          },
          "observacoes_pagamento": {
            "description": "Observações sobre o pagamento",
            "type": "string",
            "example": "Pagamento mensal"
          },
          "tipo_pagamento": {
            "description": "Tipo de pagamento do contrato",
            "allOf": [
              {
                "$ref": "#/components/schemas/TipoDePagamento"
              }
            ],
            "example": "CARTAO_CREDITO"
          }
        }
      },
      "ConfiguracaoRecorrenciaResumo": {
        "description": "Resumo da configuração de recorrência do contrato",
        "type": "object",
        "properties": {
          "vigencia_restante": {
            "description": "Vigência restante do contrato",
            "type": "integer",
            "example": 12
          },
          "vigencia_total": {
            "description": "Vigência total do contrato",
            "type": "integer",
            "example": 24
          }
        }
      },
      "ContaFinanceiraContrato": {
        "description": "Conta financeira vinculada ao contrato",
        "type": "object",
        "properties": {
          "id": {
            "description": "ID da conta",
            "type": "string",
            "example": "b0ff3efe-a7fe-4432-81ac-62ca1085529b"
          },
          "tipo": {
            "description": "Tipo de conta",
            "allOf": [
              {
                "$ref": "#/components/schemas/TipoContaFinanceira"
              }
            ],
            "example": "CONTA_CORRENTE"
          }
        }
      },
      "ContratoResumo": {
        "description": "Resumo do modelo que representa um contrato de venda recorrente",
        "type": "object",
        "properties": {
          "cliente": {
            "$ref": "#/components/schemas/ClienteResumo"
          },
          "composicao_valor": {
            "$ref": "#/components/schemas/ComposicaoValorResumo"
          },
          "condicao_pagamento": {
            "$ref": "#/components/schemas/CondicaoPagamentoResumo"
          },
          "configuracao_recorrencia": {
            "$ref": "#/components/schemas/ConfiguracaoRecorrenciaResumo"
          },
          "data_proxima_emissao": {
            "description": "Data da próxima emissão",
            "type": "string",
            "example": "2026-09-15"
          },
          "data_proximo_vencimento": {
            "description": "Data do próximo vencimento",
            "type": "string",
            "example": "2026-09-15"
          },
          "data_ultima_emissao": {
            "description": "Data da última emissão",
            "type": "string",
            "example": "2026-08-15"
          },
          "id": {
            "description": "ID do contrato",
            "type": "string",
            "example": "123e4567-e89b-12d3-a456-426614174000"
          },
          "id_proxima_venda_agendada": {
            "description": "ID da próxima venda agendada",
            "type": "string",
            "example": "123e4567-e89b-12d3-a456-426614174002"
          },
          "id_ultima_venda_confirmada": {
            "description": "ID da última venda confirmada",
            "type": "string",
            "example": "123e4567-e89b-12d3-a456-426614174001"
          },
          "local_prestacao_servico": {
            "$ref": "#/components/schemas/LocalPrestacaoServicoResumo"
          },
          "observacoes": {
            "description": "Observações adicionais sobre o contrato",
            "type": "string",
            "example": "Contrato de venda recorrente para serviços de consultoria."
          },
          "status": {
            "description": "Status do contrato",
            "allOf": [
              {
                "$ref": "#/components/schemas/Status"
              }
            ],
            "example": "ATIVO"
          },
          "termos": {
            "$ref": "#/components/schemas/TermosResumo"
          },
          "vendedor": {
            "$ref": "#/components/schemas/VendedorResumo"
          }
        }
      },
      "ContratosFiltroResposta": {
        "description": "Resposta paginada da listagem de contratos",
        "type": "object",
        "properties": {
          "itens": {
            "description": "Lista de contratos",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ItemContrato"
            }
          },
          "itens_totais": {
            "description": "Total de contratos encontrados",
            "type": "integer",
            "example": 1
          }
        }
      },
      "CriarComposicaoValorContrato": {
        "description": "Modelo de criação da composição de valor do contrato, incluindo frete e desconto",
        "type": "object",
        "properties": {
          "desconto": {
            "description": "Detalhes do desconto aplicado à venda",
            "allOf": [
              {
                "$ref": "#/components/schemas/CriarDescontoContrato"
              }
            ]
          },
          "frete": {
            "description": "Valor de frete",
            "type": "number",
            "minimum": 0,
            "example": 15
          }
        }
      },
      "CriarCondicaoPagamentoContrato": {
        "description": "Modelo de condição de pagamento para criação de contrato",
        "type": "object",
        "required": [
          "dia_vencimento",
          "primeira_data_vencimento",
          "tipo_pagamento"
        ],
        "properties": {
          "dia_vencimento": {
            "description": "Dia do mês para vencimento do pagamento (1-31)",
            "type": "integer",
            "maximum": 31,
            "minimum": 1,
            "example": 10
          },
          "id_conta_financeira": {
            "description": "ID da conta financeira associada ao pagamento",
            "type": "string",
            "example": "123e4567-e89b-12d3-a456-426614174000"
          },
          "primeira_data_vencimento": {
            "description": "Data do primeiro vencimento no formato YYYY-MM-DD",
            "type": "string",
            "example": "2025-01-10"
          },
          "tipo_pagamento": {
            "description": "Forma de pagamento",
            "allOf": [
              {
                "$ref": "#/components/schemas/TipoDePagamento"
              }
            ],
            "example": "BOLETO_BANCARIO"
          }
        }
      },
      "CriarContrato": {
        "description": "Modelo de criação de contrato",
        "type": "object",
        "required": [
          "condicao_pagamento",
          "id_cliente",
          "itens",
          "termos"
        ],
        "properties": {
          "composicao_de_valor": {
            "description": "Composição dos valores da venda, incluindo frete e desconto",
            "allOf": [
              {
                "$ref": "#/components/schemas/CriarComposicaoValorContrato"
              }
            ]
          },
          "condicao_pagamento": {
            "description": "Condição de pagamento do contrato",
            "allOf": [
              {
                "$ref": "#/components/schemas/CriarCondicaoPagamentoContrato"
              }
            ]
          },
          "id_categoria": {
            "description": "ID da categoria",
            "type": "string",
            "example": "123e4567-e89b-12d3-a456-426614174000"
          },
          "id_centro_custo": {
            "description": "ID do centro de custo",
            "type": "string",
            "example": "123e4567-e89b-12d3-a456-426614174000"
          },
          "id_cliente": {
            "description": "ID do cliente associado ao contrato",
            "type": "string",
            "example": "123e4567-e89b-12d3-a456-426614174000"
          },
          "id_vendedor": {
            "description": "ID do vendedor responsável pelo contrato",
            "type": "string",
            "example": "123e4567-e89b-12d3-a456-426614174000"
          },
          "itens": {
            "description": "Lista de itens do contrato",
            "type": "array",
            "minItems": 1,
            "items": {
              "$ref": "#/components/schemas/CriarItemVendaContrato"
            }
          },
          "observacoes": {
            "description": "Observações gerais sobre o contrato",
            "type": "string",
            "example": "Cliente solicitou entrega rápida"
          },
          "observacoes_pagamento": {
            "description": "Observações específicas para a emissão da nota fiscal",
            "type": "string",
            "example": "Pagamento realizado em 3 parcelas"
          },
          "termos": {
            "description": "Termos de recorrência da venda agendada",
            "allOf": [
              {
                "$ref": "#/components/schemas/CriarTermosContrato"
              }
            ]
          }
        }
      },
      "CriarDescontoContrato": {
        "description": "Modelo de criação de desconto aplicado ao contrato",
        "type": "object",
        "required": [
          "tipo",
          "valor"
        ],
        "properties": {
          "tipo": {
            "description": "Tipo de desconto (VALOR ou PORCENTAGEM)",
            "allOf": [
              {
                "$ref": "#/components/schemas/TipoDeDesconto"
              }
            ],
            "example": "VALOR"
          },
          "valor": {
            "description": "Valor do desconto",
            "type": "number",
            "minimum": 0,
            "example": 5
          }
        }
      },
      "CriarItemVendaContrato": {
        "description": "Modelo de criação de item de venda para contrato",
        "type": "object",
        "required": [
          "id",
          "quantidade",
          "valor"
        ],
        "properties": {
          "descricao": {
            "description": "Descrição do item da venda",
            "type": "string",
            "maxLength": 500,
            "example": "Produto A"
          },
          "id": {
            "description": "ID do item da venda",
            "type": "string",
            "example": "123e4567-e89b-12d3-a456-426614174000"
          },
          "quantidade": {
            "description": "Quantidade do item da venda",
            "type": "number",
            "minimum": 0,
            "example": 2
          },
          "valor": {
            "description": "Valor do item da venda",
            "type": "number",
            "minimum": 0,
            "example": 100.5
          },
          "valor_custo": {
            "description": "Valor de custo do item da venda                        // Itens do kit, caso o item seja um kit",
            "type": "number",
            "example": 80
          }
        }
      },
      "CriarTermosContrato": {
        "description": "Modelo de termos para criação de contrato",
        "type": "object",
        "required": [
          "data_fim",
          "data_inicio",
          "dia_emissao_venda",
          "intervalo_frequencia",
          "numero",
          "tipo_expiracao",
          "tipo_frequencia"
        ],
        "properties": {
          "data_fim": {
            "description": "Data de fim da recorrência no formato YYYY-MM-DD; não pode ser anterior à data de início",
            "type": "string",
            "example": "2025-12-31"
          },
          "data_inicio": {
            "description": "Data de início da recorrência no formato YYYY-MM-DD",
            "type": "string",
            "example": "2025-01-01"
          },
          "dia_emissao_venda": {
            "description": "Dia do mês em que a venda será emitida",
            "type": "integer",
            "maximum": 31,
            "minimum": 1,
            "example": 5
          },
          "intervalo_frequencia": {
            "description": "Intervalo de frequência entre as recorrências (1-60)",
            "type": "integer",
            "maximum": 60,
            "minimum": 1,
            "example": 1
          },
          "numero": {
            "description": "Número do contrato",
            "type": "integer",
            "minimum": 1,
            "example": 12
          },
          "tipo_expiracao": {
            "description": "Tipo de expiração da recorrência. Aceita DATA ou NUNCA",
            "allOf": [
              {
                "$ref": "#/components/schemas/TipoExpiracaoRecorrencia"
              }
            ],
            "example": "DATA"
          },
          "tipo_frequencia": {
            "description": "Tipo de frequência da recorrência. Aceita MENSAL ou ANUAL",
            "allOf": [
              {
                "$ref": "#/components/schemas/TipoFrequenciaRecorrencia"
              }
            ],
            "example": "MENSAL"
          }
        }
      },
      "ErroAPI": {
        "description": "Modelo de resposta para erros da API",
        "type": "object",
        "properties": {
          "error": {
            "description": "Mensagem de erro",
            "type": "string",
            "example": "Mensagem de erro detalhada"
          }
        }
      },
      "ItemContrato": {
        "description": "Dados resumidos de um contrato recorrente",
        "type": "object",
        "properties": {
          "cliente": {
            "description": "Dados do cliente",
            "allOf": [
              {
                "$ref": "#/components/schemas/ClienteContrato"
              }
            ]
          },
          "conta_financeira": {
            "description": "Conta financeira vinculada",
            "allOf": [
              {
                "$ref": "#/components/schemas/ContaFinanceiraContrato"
              }
            ]
          },
          "data_inicio": {
            "description": "Data de início do contrato",
            "type": "string",
            "example": "2026-08-15"
          },
          "id": {
            "description": "ID do contrato",
            "type": "string",
            "example": "123e4567-e89b-12d3-a456-426614174000"
          },
          "numero": {
            "description": "Número do contrato",
            "type": "integer",
            "example": 1014
          },
          "proximo_vencimento": {
            "description": "Data do próximo vencimento",
            "type": "string",
            "example": "2026-08-15"
          },
          "status": {
            "description": "Status do contrato",
            "allOf": [
              {
                "$ref": "#/components/schemas/Status"
              }
            ],
            "example": "ATIVO"
          },
          "termos": {
            "description": "Termos de vigência",
            "allOf": [
              {
                "$ref": "#/components/schemas/TermosContrato"
              }
            ]
          },
          "tipo_pagamento": {
            "description": "Tipo de pagamento",
            "allOf": [
              {
                "$ref": "#/components/schemas/TipoDePagamento"
              }
            ],
            "example": "BOLETO_BANCARIO"
          },
          "total": {
            "description": "Valor total do contrato",
            "type": "number",
            "example": 1000
          },
          "total_proximo_vencimento": {
            "description": "Valor da próxima cobrança",
            "type": "number",
            "example": 1000
          }
        }
      },
      "LocalPrestacaoServicoResumo": {
        "description": "Resumo do local de prestação de serviço do contrato",
        "type": "object",
        "properties": {
          "nome": {
            "description": "Nome do local de prestação de serviço",
            "type": "string",
            "example": "Escritório Central"
          }
        }
      },
      "PeriodoDeAgendamento": {
        "description": "Enum de período de agendamento",
        "type": "string",
        "enum": [
          "MENSAL",
          "SEMANAL",
          "ANUAL"
        ],
        "x-enum-varnames": [
          "SCHEDULED_PERIOD_MONTH",
          "SCHEDULED_PERIOD_WEEK",
          "SCHEDULED_PERIOD_YEAR"
        ]
      },
      "ResumoCriacaoContrato": {
        "description": "Resumo de criação de contrato",
        "type": "object",
        "properties": {
          "id": {
            "description": "ID do contrato",
            "type": "string",
            "example": "550e8400-e29b-41d4-a716-446655440000"
          },
          "id_legado": {
            "description": "ID legado do contrato",
            "type": "integer",
            "example": 12345
          },
          "id_venda": {
            "description": "ID da venda gerada pelo contrato",
            "type": "string",
            "example": "123e4567-e89b-12d3-a456-426614174000"
          }
        }
      },
      "Status": {
        "description": "Enum de status do contrato",
        "type": "string",
        "enum": [
          "ATIVO",
          "INATIVO",
          "DELETADO"
        ],
        "x-enum-varnames": [
          "STATUS_ENABLED",
          "STATUS_DISABLED",
          "STATUS_DELETED"
        ]
      },
      "TermosContrato": {
        "description": "Termos de vigência do contrato",
        "type": "object",
        "properties": {
          "data_fim": {
            "description": "Data de término do contrato",
            "type": "string",
            "example": "2026-10-21"
          },
          "tipo_expiracao": {
            "description": "Tipo de expiração",
            "allOf": [
              {
                "$ref": "#/components/schemas/TipoDeExpiracao"
              }
            ],
            "example": "DATA"
          },
          "vigencia_atual": {
            "description": "Número de cobranças realizadas",
            "type": "integer",
            "example": 6
          },
          "vigencia_total": {
            "description": "Total de cobranças previstas",
            "type": "integer",
            "example": 12
          }
        }
      },
      "TermosResumo": {
        "description": "Resumo dos termos do contrato",
        "type": "object",
        "properties": {
          "data_fim": {
            "description": "Data de término do contrato",
            "type": "string",
            "example": "2026-10-21"
          },
          "data_inicio": {
            "description": "Data de início do contrato",
            "type": "string",
            "example": "2026-08-15"
          },
          "dia_emissao_venda": {
            "description": "Dia do mês para emissão da venda",
            "type": "integer",
            "example": 15
          },
          "intervalo_frequencia": {
            "description": "Intervalo entre as cobranças (ex: a cada 1 mês)",
            "type": "integer",
            "example": 1
          },
          "numero": {
            "description": "Número do contrato",
            "type": "integer",
            "example": 1
          },
          "tipo_expiracao": {
            "description": "Tipo de expiração do contrato",
            "allOf": [
              {
                "$ref": "#/components/schemas/TipoDeExpiracao"
              }
            ],
            "example": "DATA"
          },
          "tipo_frequencia": {
            "description": "Tipo de frequência de cobrança",
            "allOf": [
              {
                "$ref": "#/components/schemas/PeriodoDeAgendamento"
              }
            ],
            "example": "MENSAL"
          }
        }
      },
      "TipoContaFinanceira": {
        "description": "Enum de tipo de conta financeira",
        "type": "string",
        "enum": [
          "APLICACAO",
          "CAIXINHA",
          "CONTA_CORRENTE",
          "CARTAO_CREDITO",
          "INVESTIMENTO",
          "OUTROS",
          "MEIOS_RECEBIMENTO",
          "POUPANCA",
          "COBRANCAS_CONTA_AZUL",
          "RECEBA_FACIL_CARTAO"
        ],
        "x-enum-varnames": [
          "ACCOUNT_TYPE_APPLICATION",
          "ACCOUNT_TYPE_CASH",
          "ACCOUNT_TYPE_CHECKING",
          "ACCOUNT_TYPE_CREDIT_CARD",
          "ACCOUNT_TYPE_INVESTMENT",
          "ACCOUNT_TYPE_OTHERS",
          "ACCOUNT_TYPE_PAYMENTS_SYSTEM",
          "ACCOUNT_TYPE_SAVINGS",
          "ACCOUNT_TYPE_CA_PAYMENTS",
          "ACCOUNT_TYPE_CA_PAYMENTS_CREDIT"
        ]
      },
      "TipoDeDesconto": {
        "description": "Enum de tipo de desconto",
        "type": "string",
        "enum": [
          "PORCENTAGEM",
          "VALOR"
        ],
        "x-enum-varnames": [
          "DISCOUNT_TYPE_PERCENT",
          "DISCOUNT_TYPE_VALUE"
        ]
      },
      "TipoDeExpiracao": {
        "description": "Enum de tipo de expiração",
        "type": "string",
        "enum": [
          "DATA",
          "VEZES",
          "NUNCA"
        ],
        "x-enum-varnames": [
          "EXPIRATION_TYPE_DATE",
          "EXPIRATION_TYPE_TIMES",
          "EXPIRATION_TYPE_FOREVER"
        ]
      },
      "TipoDePagamento": {
        "description": "Enum de tipo de pagamento",
        "type": "string",
        "enum": [
          "BOLETO_BANCARIO",
          "CARTAO_CREDITO",
          "CARTAO_DEBITO",
          "CARTEIRA_DIGITAL",
          "CASHBACK",
          "CHEQUE",
          "CREDITO_LOJA",
          "CREDITO_VIRTUAL",
          "DEPOSITO_BANCARIO",
          "DINHEIRO",
          "OUTRO",
          "DEBITO_AUTOMATICO",
          "LINK_PAGAMENTO",
          "PIX_PAGAMENTO_INSTANTANEO",
          "COBRANCA_PIX",
          "PROGRAMA_FIDELIDADE",
          "SEM_PAGAMENTO",
          "TRANSFERENCIA_BANCARIA",
          "VALE_ALIMENTACAO",
          "VALE_COMBUSTIVEL",
          "VALE_PRESENTE",
          "VALE_REFEICAO"
        ],
        "x-enum-varnames": [
          "PAYMENT_TYPE_BANKING_BILLET",
          "PAYMENT_TYPE_CREDIT_CARD",
          "PAYMENT_TYPE_DEBIT_CARD",
          "PAYMENT_TYPE_DIGITAL_WALLET",
          "PAYMENT_TYPE_CASHBACK",
          "PAYMENT_TYPE_CHECK",
          "PAYMENT_TYPE_STORE_CREDIT",
          "PAYMENT_TYPE_VIRTUAL_CREDIT",
          "PAYMENT_TYPE_BANKING_DEPOSIT",
          "PAYMENT_TYPE_CASH",
          "PAYMENT_TYPE_OTHER",
          "PAYMENT_TYPE_AUTOMATIC_DEBIT",
          "PAYMENT_TYPE_PAYMENT_LINK",
          "PAYMENT_TYPE_INSTANT_PAYMENT",
          "PAYMENT_TYPE_PIX_CHARGE",
          "PAYMENT_TYPE_FIDELITY_PROGRAM",
          "PAYMENT_TYPE_WITHOUT_PAYMENT",
          "PAYMENT_TYPE_BANKING_TRANSFER",
          "PAYMENT_TYPE_FOOD_VOUCHER",
          "PAYMENT_TYPE_FUEL_VOUCHER",
          "PAYMENT_TYPE_GIFT_VOUCHER",
          "PAYMENT_TYPE_MEAL_VOUCHER"
        ]
      },
      "TipoExpiracaoRecorrencia": {
        "description": "Enum de tipo de expiração de recorrência",
        "type": "string",
        "enum": [
          "DATA",
          "NUNCA"
        ],
        "x-enum-varnames": [
          "RECURRENCE_EXPIRATION_TYPE_DATE",
          "RECURRENCE_EXPIRATION_TYPE_FOREVER"
        ]
      },
      "TipoFrequenciaRecorrencia": {
        "description": "Enum de tipo de frequência de recorrência",
        "type": "string",
        "enum": [
          "MENSAL",
          "ANUAL"
        ],
        "x-enum-varnames": [
          "RECURRENCE_FREQUENCY_TYPE_MONTH",
          "RECURRENCE_FREQUENCY_TYPE_YEAR"
        ]
      },
      "VendedorResumo": {
        "description": "Resumo dos dados do vendedor responsável pelo contrato",
        "type": "object",
        "properties": {
          "id": {
            "description": "ID do vendedor",
            "type": "string",
            "example": "123e4567-e89b-12d3-a456-426614174000"
          },
          "nome": {
            "description": "Nome do vendedor",
            "type": "string",
            "example": "Maria Oliveira"
          }
        }
      }
    }
  }
}