Guia de Integração - API de Cotação Automatizada

Bem-vindo ao guia de integração da API de Cotação. Este documento fornece todas as informações necessárias para que sistemas de terceiros possam enviar solicitações de cotação de seguros para processamento automático via Playwright.

🔗 Visão Geral

A API atua como um gatilho para um robô de automação (worker). Ao receber uma requisição válida, o sistema:

  1. Valida a estrutura dos dados.
  2. Armazena as informações para processamento.
  3. Inicia imediatamente o robô que realizará o preenchimento no portal de seguros.

🛠 Especificação Técnica

Endpoint de Cotação

📋 Estrutura do JSON (Payload)

Abaixo estão detalhados os campos obrigatórios para uma requisição bem-sucedida:

👤 Objeto: segurado

Campo Tipo Descrição
cpfString (Numeric)CPF do segurado (Apenas números).
nomeSocialStringNome completo ou social do segurado.
telefoneString (Numeric)Telefone com DDD (Apenas números).
emailStringE-mail válido do segurado.
cepString (Numeric)CEP de residência (Apenas números).

🛡 Objeto: seguro

Campo Tipo Descrição
tipoStringTipo de seguro (ex: "Novo", "Renovação com nossa corretora", "Renovação de outra corretora").
nomeHierarquicoString (Opcional)Nome do corretor ou responsável. Se omitido, o padrão aplicado é "Diego Gervasio".
seguradorasDisponiveisArray de String (Opcional)Lista de seguradoras a cotar. Quando informado, a automação mantém selecionadas as seguradoras enviadas e desmarca as demais. Se não informado, mantém o padrão do portal. Valores aceitos: aliro, allianz, azul, bradesco, hdi seguros, hdi seguros fit, hdi seguros basico, mapfre, porto, suhai, tokio, yelum.
seguradoraAnteriorStringObrigatório para Renovação. Nome da seguradora anterior.
sucursalAnteriorStringObrigatório para Renovação quando seguro.seguradorasDisponiveis não for enviado, ou quando seguro.seguradorasDisponiveis incluir bradesco, ou quando seguro.seguradoraAnterior contiver porto. Caso contrário, não envie (a API rejeita).
apoliceAnteriorStringObrigatório para Renovação. Número da apólice anterior.
coberturaAnteriorStringObrigatório para Renovação. Cobertura da apólice anterior.
statusApoliceAnteriorStringObrigatório para Renovação. Status da apólice anterior.
inicioVigenciaAnteriorStringObrigatório para Renovação. Data de início de vigência da apólice anterior.
fimVigenciaAnteriorStringObrigatório para Renovação quando seguro.seguradorasDisponiveis não for enviado. Quando seguro.seguradorasDisponiveis for enviado, passa a ser opcional.
renovacaoMesmoVeiculoStringObrigatório para Renovação quando seguro.seguradorasDisponiveis não for enviado. Quando seguro.seguradorasDisponiveis for enviado, passa a ser opcional.
renovacaoInclusaoCascoStringObrigatório para Renovação quando seguro.seguradorasDisponiveis não for enviado. Quando seguro.seguradorasDisponiveis for enviado, passa a ser opcional. Quando enviado, só é aceito quando seguro.seguradorasDisponiveis incluir yelum, mapfre ou aliro, ou quando seguro.seguradorasDisponiveis não for informado.
itemApoliceAnteriorString(Opcional) Item da apólice anterior.
qtdSinistrosParcialAnteriorString(Opcional) Quantidade de sinistros de perda parcial na apólice anterior.
ciApoliceAnteriorString(Opcional) C.I. da apólice anterior.
classeBonusAnteriorString(Opcional) Classe de bônus da apólice anterior.
bonusRenovacaoTodasSeguradorasStringObrigatório para Renovação. "Sim" ou "Não" para bônus aplicado em todas as seguradoras.
bonusAllianzString(Opcional) Classe de bônus Allianz. Se seguro.seguradorasDisponiveis for enviado, só envie quando incluir allianz (a API rejeita caso contrário).
bonusSuhaiString(Opcional) Classe de bônus Suhai. Se seguro.seguradorasDisponiveis for enviado, só envie quando incluir suhai (a API rejeita caso contrário).
bonusPortoAzulItauString(Opcional) Classe de bônus Porto/Azul/Itau. Se seguro.seguradorasDisponiveis for enviado, só envie quando incluir porto ou azul (a API rejeita caso contrário).
bonusMapfreString(Opcional) Classe de bônus Mapfre. Se seguro.seguradorasDisponiveis for enviado, só envie quando incluir mapfre (a API rejeita caso contrário).
bonusTokioString(Opcional) Classe de bônus Tokio. Se seguro.seguradorasDisponiveis for enviado, só envie quando incluir tokio (a API rejeita caso contrário).
bonusHdiString(Opcional) Classe de bônus HDI. Se seguro.seguradorasDisponiveis for enviado, só envie quando incluir qualquer HDI (hdi seguros, hdi seguros fit, hdi seguros basico) (a API rejeita caso contrário).
bonusBradescoString(Opcional) Classe de bônus Bradesco. Se seguro.seguradorasDisponiveis for enviado, só envie quando incluir bradesco (a API rejeita caso contrário).
bonusYelumAliroIndianaString(Opcional) Classe de bônus Yelum/Aliro/Indiana. Se seguro.seguradorasDisponiveis for enviado, só envie quando incluir yelum ou aliro (a API rejeita caso contrário).

🚗 Objeto: veiculo

Campo Tipo Descrição
placaStringPlaca do veículo (ex: ABC1D23).
chassiRemarcadoString"Sim" ou "Não".
financiadoString"Sim" ou "Não".
alienacaoFiduciariaString (Opcional)Texto da alienação fiduciária (ex.: nome da financeira). Usar apenas quando financiado for "Sim" (a API rejeita caso contrário). Se o portal não exibir este campo, a automação ignora e registra no log.
antifurtoStringValores: "Alarme Sonoro", "Bloqueador", "Rastreador", "Dispositivos comuns", "Não".
alarmeSonoroAllianzString (Opcional)Ex: "Corta Combustível - RF-ST2001". Usar apenas quando antifurto for "Alarme Sonoro" (a API rejeita caso contrário).
bloqueadorAllianzString (Opcional)Ex: "CAR SYSTEM - Bloqueador". Texto da opção de bloqueador para Allianz. Usar apenas quando antifurto for "Bloqueador" (a API rejeita caso contrário).
bloqueadorBradescoSegurosString (Opcional)Ex: "Cielocel GSM/GPRS Gs8". Texto da opção de bloqueador para Bradesco Seguros. Usar apenas quando antifurto for "Bloqueador" (a API rejeita caso contrário).
bloqueadorYelumString (Opcional)Texto da opção de bloqueador para Yelum. Usar apenas quando antifurto for "Bloqueador" (a API rejeita caso contrário).
bloqueadorPortoString (Opcional)Texto da opção de Porto Seguro. Usar quando antifurto for "Bloqueador". Também é aceito quando antifurto for "Rastreador" (Porto Seguro) (a API rejeita caso contrário).
gerenciadoraTokioString (Opcional)Texto da gerenciadora para Tokio Marine quando exigido (ex.: quando o valor selecionado for "CONTROLLOC GPS").
alarmeSonoroAntiFurtoBradescoString (Opcional)Ex: "Cielocel GSM/GPRS Gs8". Texto da opção Bradesco. Usar quando antifurto for "Alarme Sonoro" e também quando antifurto for "Dispositivos comuns" (a API rejeita caso contrário).
antifurtoTokioString (Opcional)Ex: "CONTROLLOC GPS". Texto da opção Tokio Marine (serve tanto para antifurto/rastreador quanto para bloqueador). Se o campo não existir/não estiver visível no portal, a automação ignora e registra no log.
antifurtoMapfreString (Opcional)Ex: "CAR SYSTEM - Bloqueador". Texto da opção de antifurto/bloqueador para Mapfre. Usar apenas quando antifurto for "Bloqueador" (a API rejeita caso contrário).
rastreadorAllianzString (Opcional)Texto da opção de rastreador para Allianz. Usar apenas quando antifurto for "Rastreador" (a API rejeita caso contrário).
rastreadorBradescoSegurosString (Opcional)Texto da opção de rastreador para Bradesco Seguros. Usar apenas quando antifurto for "Rastreador" (a API rejeita caso contrário).
rastreadorYelumString (Opcional)Texto da opção de rastreador para Yelum. Usar apenas quando antifurto for "Rastreador" (a API rejeita caso contrário).
rastreadorMapfreString (Opcional)Texto da opção de rastreador para Mapfre. Usar apenas quando antifurto for "Rastreador" (a API rejeita caso contrário).
dispositivosComunsAllianzString (Opcional)Obrigatório quando antifurto for "Dispositivos comuns". Texto da opção de dispositivos comuns para Allianz. Se o portal não exibir este campo, a automação ignora e registra no log.
acessoriosString (Opcional)"Sim" ou "Não" para expandir a seção "Blindagem, kit Gás, acessórios, equipamentos ou opcionais".
kitacessoriosString (Opcional)"Sim" ou "Não" para marcar Acessórios (item dentro da seção). Usar apenas quando acessorios for "Sim" (a API rejeita caso contrário).
opcionaisString (Opcional)"Sim" ou "Não" para marcar Opcionais (item dentro da seção). Usar apenas quando acessorios for "Sim" (a API rejeita caso contrário).
opcionais2String (Opcional)Lista de opcionais (separados por vírgula), ex.: "Air bag motorista, Air bag passageiro". Usar apenas quando acessorios for "Sim" e opcionais for "Sim" (a API rejeita caso contrário).
equipamentosString (Opcional)"Sim" ou "Não" para marcar Equipamentos (item dentro da seção). Usar apenas quando acessorios for "Sim" (a API rejeita caso contrário).
capotaFibraString (Opcional)Valor do equipamento Capota de Fibra (numérico, ex.: 1000,00). Usar apenas quando acessorios for "Sim" e equipamentos for "Sim" (a API rejeita caso contrário).
franquiaCapotaFibraString (Opcional)"Sim" ou "Não" para marcar franquia da Capota de Fibra. Se omitido, a automação não altera. Usar apenas quando acessorios for "Sim" e equipamentos for "Sim" (a API rejeita caso contrário).
equipamentoEspecialString (Opcional)Valor do equipamento Equipamento Especial (numérico, ex.: 1000,00). Usar apenas quando acessorios for "Sim" e equipamentos for "Sim" (a API rejeita caso contrário).
franquiaEquipamentoEspecialString (Opcional)"Sim" ou "Não" para marcar franquia do Equipamento Especial. O padrão do portal já é "Sim"; se omitido, a automação não altera. Usar apenas quando acessorios for "Sim" e equipamentos for "Sim" (a API rejeita caso contrário).
telefoneCelularVeicularString (Opcional)Valor do equipamento Telefone Celular Veicular (numérico, ex.: 1000,00). Usar apenas quando acessorios for "Sim" e equipamentos for "Sim" (a API rejeita caso contrário).
franquiaTelefoneCelularVeicularString (Opcional)"Sim" ou "Não" para marcar franquia do Telefone Celular Veicular. O padrão do portal já é "Sim"; se omitido, a automação não altera. Usar apenas quando acessorios for "Sim" e equipamentos for "Sim" (a API rejeita caso contrário).
rebaixadoString (Opcional)"Sim" ou "Não". Informa se o veículo é rebaixado. Usar apenas quando acessorios for "Sim" e equipamentos for "Sim" (a API rejeita caso contrário).
tunadoString (Opcional)"Sim" ou "Não". Informa se o veículo é tunado. Usar apenas quando acessorios for "Sim" e equipamentos for "Sim" (a API rejeita caso contrário).
radioAmFmString (Opcional)Valor do acessório Radio AM/FM (numérico, ex.: 1000,00). Usar apenas quando acessorios for "Sim" e kitacessorios for "Sim" (a API rejeita caso contrário).
cdPlayerString (Opcional)Valor do acessório CD Player (numérico, ex.: 1000,00). Usar apenas quando acessorios for "Sim" e kitacessorios for "Sim" (a API rejeita caso contrário).
franquiaCdPlayerString (Opcional)"Sim" ou "Não" para marcar franquia do CD Player. O padrão do portal já é "Sim"; se omitido, a automação não altera. Usar apenas quando acessorios for "Sim" e kitacessorios for "Sim" (a API rejeita caso contrário).
dvdPlayerString (Opcional)Valor do acessório DVD Player (numérico, ex.: 1000,00). Usar apenas quando acessorios for "Sim" e kitacessorios for "Sim" (a API rejeita caso contrário).
rodasLigaLeveString (Opcional)Valor do acessório Rodas de Liga Leve (numérico, ex.: 1000,00). Usar apenas quando acessorios for "Sim" e kitacessorios for "Sim" (a API rejeita caso contrário).
kitMultimidiaString (Opcional)Valor do acessório Kit Multimídia (numérico, ex.: 1000,00). Usar apenas quando acessorios for "Sim" e kitacessorios for "Sim" (a API rejeita caso contrário).
franquiaRadioAmFmString (Opcional)"Sim" ou "Não" para marcar franquia do Radio AM/FM. O padrão do portal já é "Sim"; se omitido, a automação não altera. Usar apenas quando acessorios for "Sim" e kitacessorios for "Sim" (a API rejeita caso contrário).
blindagemString (Opcional)"Sim" ou "Não" para marcar Blindagem.
coberturaBlindagemString (Opcional)Obrigatório quando blindagem for "Sim". Texto da cobertura de blindagem.
valorBlindagemString (Opcional)Obrigatório quando coberturaBlindagem estiver preenchido. Valor da blindagem (numérico, ex.: 1000,00).
comFranquiaString (Opcional)"Sim" ou "Não" para marcar "Com franquia". Se blindagem for "Sim" (ou coberturaBlindagem for enviado) e não for passado, o padrão assumido é "Não".
kitGasString (Opcional)"Sim" ou "Não" para marcar Kit Gás.
coberturaKitGasString (Opcional)Obrigatório quando kitGas for "Sim". "Sim" ou "Não" para marcar Cobertura de Kit Gás.
valorKitGasString (Opcional)Obrigatório quando coberturaKitGas for "Sim". Valor do Kit Gás (numérico, ex.: 1000,00).
comFranquiaKitGasString (Opcional)"Sim" ou "Não" para marcar "Com franquia" do Kit Gás. Se coberturaKitGas for "Sim" e não for passado, o padrão assumido é "Não".
possuiAntifurtoPortoString (Opcional)Ex: "Sim". "Sim" ou "Não" para marcar "Possui algum antifurto da Porto Seguro?" (serve tanto no fluxo geral quanto no fluxo de bloqueador).
hdiSegurosBasicoString (Opcional)Ex: "Sim". "Sim" ou "Não" para acionar a seleção básica da HDI após avançar. Se antifurto for "Bloqueador", este campo é opcional (pode ser omitido).
pcdCnhEspecialString (Opcional)"Sim" ou "Não". PcD / CNH Especial. Se o portal não exibir este campo, a automação ignora e registra no log.
valorAdaptacaoPcdString (Opcional)Valor da adaptação PcD (numérico, ex.: 1000,00). Usar apenas quando pcdCnhEspecial for "Sim" (a API rejeita caso contrário). Se o portal não exibir este campo, a automação ignora e registra no log.
cepPernoiteString (Numeric)CEP onde o veículo fica guardado (Apenas números).
cepCirculacaoString (Numeric)CEP de circulação (Apenas números). Se o portal não exibir este campo, a automação ignora e registra no log.
kmMesString (Numeric)Estimativa de KM rodados por mês (Apenas números). Se o portal não exibir este campo, a automação ignora e registra no log.
tipoUsoStringEx: "Particular", "Comercial".
categoriaTaxiVeiculoStringObrigatório quando tipoUso for "Táxi". Categoria do taxi/veículo (seleção no portal). A API rejeita caso seja enviado quando tipoUso não for "Táxi".
utilizacaoLocadoraContratoStringObrigatório quando tipoUso for "Locadora (contrato)". Utilização do veículo na locação por contrato (seleção no portal). A API rejeita caso seja enviado quando tipoUso não for "Locadora (contrato)".
usoComercialDoisOuMaisDiasStringObrigatório quando tipoUso for "Particular". Valores: "Sim" ou "Não". A API rejeita caso seja enviado quando tipoUso não for "Particular".

➕ Objeto: complementares

Campo Tipo Descrição
tipoGaragemStringDescrição da garagem (ex: "Sim, com portão manual").
relacaoSeguradoProprietarioString"Sim" ou "Não".
relacaoSeguradoComProprietarioStringObrigatório quando relacaoSeguradoProprietario for "Não". Relação do segurado com o proprietário (seleção no portal). A API rejeita caso seja enviado quando relacaoSeguradoProprietario não for "Não".
proprietarioCpfStringObrigatório para algumas relações quando relacaoSeguradoProprietario for "Não". CPF do proprietário (apenas números).
proprietarioNomeStringObrigatório para algumas relações quando relacaoSeguradoProprietario for "Não". Nome do proprietário.
proprietarioNomeSocialString (Opcional)Nome social do proprietário.
proprietarioSexoStringObrigatório para algumas relações quando relacaoSeguradoProprietario for "Não". "Masculino" ou "Feminino".
proprietarioNascimentoStringObrigatório para algumas relações quando relacaoSeguradoProprietario for "Não". Data de nascimento (DD/MM/AAAA).
proprietarioEstadoCivilStringObrigatório para algumas relações quando relacaoSeguradoProprietario for "Não". Estado civil do proprietário.
principalCondutorString (Opcional)"Sim" ou "Não". Recomendado enviar "Sim" para manter o fluxo mais simples e evitar a abertura de campos adicionais no portal. Se omitido, a automação mantém o valor padrão do portal. Quando omitido, a API permite enviar os campos do principal condutor; se enviar qualquer dado além de principalCondutorRelacaoSegurado, então CPF, Nome, Sexo, Nascimento e Estado Civil passam a ser obrigatórios.
principalCondutorRelacaoSeguradoString (Opcional)Relação do condutor com o segurado (seleção no portal). Quando principalCondutor for omitido, este campo pode ser enviado sozinho; se você enviar qualquer outro dado do principal condutor, então CPF, Nome, Sexo, Nascimento e Estado Civil passam a ser obrigatórios (mesma regra do fluxo principalCondutor = "Não").
ramoAtividadeComercialProfissionalStringObrigatório quando veiculo.tipoUso não for "Particular". Ramo de atividade comercial/profissional (seleção no portal). A API rejeita caso seja enviado quando veiculo.tipoUso for "Particular".
profissaoPrincipalCondutorStringObrigatório quando veiculo.tipoUso não for "Particular". Profissão principal do condutor (seleção no portal). A API rejeita caso seja enviado quando veiculo.tipoUso for "Particular".
seguroCorretorProximoString"Sim" ou "Não".
tipoResidenciaStringEx: "Casa/sobrado", "Apartamento".
pessoas17a25String"Sim" ou "Não".

➕ Objeto: cobertura

Campo Tipo Descrição
planoString (Opcional)Plano de cobertura (Página 5). Se omitido, o portal mantém o padrão "FÁCIL". Valores aceitos (case-insensitive): "facil", "pleno", "total", "personalizado".
modalidadeString (Opcional)Modalidade (Página 5) selecionada no portal (Select2). Se omitido, mantém o padrão do portal (ex.: "Valor de Mercado").
percentualAjusteString (Opcional)% Ajuste (Página 5). Campo numérico opcional (ex.: "100", "95,5"). Se omitido, mantém o padrão do portal.
franquiaPrimeiraOpcaoString (Opcional)Primeira opção de franquia (Página 5) selecionada no portal (Select2). Se omitido, mantém o padrão do portal (ex.: "Normal 100%").
franquiaSegundaOpcaoString (Opcional)Segunda opção de franquia (Página 5) selecionada no portal (Select2). Se omitido, mantém o padrão do portal (ex.: "Reduzida 50%").
danosMateriaisTerceirosString (Opcional)Danos materiais a terceiros (Página 5) selecionado no portal (Select2). Se omitido, mantém o padrão do portal (ex.: "100.000,00").
danosCorporaisTerceirosString (Opcional)Danos corporais a terceiros (Página 5) selecionado no portal (Select2). Se omitido, mantém o padrão do portal (ex.: "100.000,00").
appMortePorPassageiroString (Opcional)APP Morte (por passageiro) (Página 5). Campo de valor opcional (ex.: "10000,00", "10.000,00"). Se omitido, mantém o padrão do portal (ex.: "10.000,00").
appInvalidezPorPassageiroString (Opcional)APP Invalidez (por passageiro) (Página 5). Campo de valor opcional (ex.: "10000,00", "10.000,00"). Se omitido, mantém o padrão do portal (ex.: "10.000,00").
danosMoraisString (Opcional)Danos morais (Página 5). Campo de valor opcional (ex.: "10000,00", "10.000,00"). Se omitido, mantém o padrão do portal (ex.: "10.000,00").
despesasExtrasString (Opcional)Despesas extras (Página 5) selecionada no portal (Select2). Se omitido, mantém o padrão do portal (ex.: "Não contratada").
maisAssistenciasString/Boolean (Opcional)+ Assistências (Página 5). Envie "Sim" (ou true) para clicar no botão de abrir assistências. Se omitido, mantém o padrão do portal.
maisAssistenciasSeguradorasString (Opcional)Seguradora específica para + Assistências (ex.: "allianz"). Só é aplicada quando maisAssistencias for "Sim". Se omitido, mantém todas selecionadas no portal. Se seguro.seguradorasDisponiveis for enviado, esta seguradora deve estar presente nele.

Exemplos de uso:

"cobertura": { "plano": "facil" }
"cobertura": { "plano": "pleno" }
"cobertura": { "plano": "total" }
"cobertura": { "plano": "personalizado" }
"cobertura": { "modalidade": "Valor de Mercado" }
"cobertura": { "plano": "pleno", "modalidade": "Valor de Mercado" }
"cobertura": { "percentualAjuste": "100" }
"cobertura": { "plano": "pleno", "modalidade": "Valor de Mercado", "percentualAjuste": "95,5" }
"cobertura": { "franquiaPrimeiraOpcao": "Normal 100%" }
"cobertura": { "plano": "pleno", "franquiaPrimeiraOpcao": "Normal 100%" }
"cobertura": { "franquiaSegundaOpcao": "Reduzida 50%" }
"cobertura": { "plano": "pleno", "franquiaPrimeiraOpcao": "Normal 100%", "franquiaSegundaOpcao": "Reduzida 50%" }
"cobertura": { "danosMateriaisTerceiros": "100.000,00" }
"cobertura": { "plano": "pleno", "danosMateriaisTerceiros": "100.000,00" }
"cobertura": { "danosCorporaisTerceiros": "100.000,00" }
"cobertura": { "plano": "pleno", "danosCorporaisTerceiros": "100.000,00" }
"cobertura": { "appMortePorPassageiro": "10.000,00" }
"cobertura": { "plano": "pleno", "appMortePorPassageiro": "10.000,00" }
"cobertura": { "appInvalidezPorPassageiro": "10.000,00" }
"cobertura": { "plano": "pleno", "appInvalidezPorPassageiro": "10.000,00" }
"cobertura": { "danosMorais": "10.000,00" }
"cobertura": { "plano": "pleno", "danosMorais": "10.000,00" }
"cobertura": { "despesasExtras": "Não contratada" }
"cobertura": { "plano": "pleno", "despesasExtras": "Não contratada" }
"cobertura": { "maisAssistencias": "Sim" }
"cobertura": { "maisAssistencias": "Sim", "maisAssistenciasSeguradoras": "allianz" }

📦 Exemplos de Payloads Completos

Exemplo 0 - Payload pronto para teste (resiliência de seletores):

Exemplo 1 - Fluxo simples (rápido até Cobertura):

{
  "id": "COT_EXEMPLO_001",
  "segurado": {
    "cpf": "12345678900",
    "nomeSocial": "Cliente Exemplo",
    "telefone": "11999999999",
    "email": "cliente.exemplo@teste.com",
    "cep": "01001000"
  },
  "seguro": {
    "tipo": "Novo",
    "nomeHierarquico": "NOME DO CORRETOR"
  },
  "veiculo": {
    "placa": "ABC1D23",
    "chassiRemarcado": "Não",
    "financiado": "Não",
    "antifurto": "Não",
    "cepPernoite": "01001000",
    "cepCirculacao": "01001000",
    "kmMes": "800",
    "tipoUso": "Particular",
    "usoTrabalho": "Não",
    "usoEstudo": "Não",
    "usoComercialDoisOuMaisDias": "Não"
  },
  "complementares": {
    "tipoGaragem": "Sim, com portão manual",
    "relacaoSeguradoProprietario": "Sim",
    "principalCondutor": "Sim",
    "seguroCorretorProximo": "Não",
    "tipoResidencia": "Casa/sobrado",
    "pessoas17a25": "Não"
  },
  "cobertura": {
    "plano": "pleno"
  }
}

Exemplo 2 - Cobertura com vários campos:

{
  "id": "COT_EXEMPLO_002",
  "segurado": {
    "cpf": "22233344455",
    "nomeSocial": "Cliente Cobertura Completa",
    "telefone": "11988887777",
    "email": "cobertura.completa@teste.com",
    "cep": "01310930"
  },
  "seguro": {
    "tipo": "Novo",
    "nomeHierarquico": "NOME DO CORRETOR"
  },
  "veiculo": {
    "placa": "DEF2G34",
    "chassiRemarcado": "Não",
    "financiado": "Não",
    "antifurto": "Não",
    "cepPernoite": "01310930",
    "cepCirculacao": "01310930",
    "kmMes": "1200",
    "tipoUso": "Particular",
    "usoTrabalho": "Não",
    "usoEstudo": "Não",
    "usoComercialDoisOuMaisDias": "Não"
  },
  "complementares": {
    "tipoGaragem": "Sim, com portão automático",
    "relacaoSeguradoProprietario": "Sim",
    "principalCondutor": "Sim",
    "seguroCorretorProximo": "Não",
    "tipoResidencia": "Apartamento",
    "pessoas17a25": "Não"
  },
  "cobertura": {
    "plano": "personalizado",
    "modalidade": "Valor de Mercado",
    "percentualAjuste": "95,5",
    "franquiaPrimeiraOpcao": "Normal 100%",
    "franquiaSegundaOpcao": "Reduzida 50%",
    "danosMateriaisTerceiros": "100.000,00",
    "danosCorporaisTerceiros": "100.000,00",
    "appMortePorPassageiro": "10.000,00",
    "appInvalidezPorPassageiro": "10.000,00",
    "danosMorais": "10.000,00",
    "despesasExtras": "Não contratada"
  }
}

Exemplo 3 - Seguradoras selecionadas + maioria dos campos preenchidos:

{
  "id": "COT_EXEMPLO_003",
  "segurado": {
    "cpf": "33344455566",
    "nomeSocial": "Cliente Perfil Completo",
    "telefone": "11977776666",
    "email": "perfil.completo@teste.com",
    "cep": "04538132"
  },
  "seguro": {
    "tipo": "Novo",
    "nomeHierarquico": "NOME DO CORRETOR",
    "seguradorasDisponiveis": ["allianz", "porto", "tokio", "hdi seguros"],
    "bonusAllianz": "5",
    "bonusPortoAzulItau": "4",
    "bonusTokio": "3",
    "bonusHdi": "2"
  },
  "veiculo": {
    "placa": "GHI3J45",
    "chassiRemarcado": "Não",
    "financiado": "Sim",
    "alienacaoFiduciaria": "BANCO EXEMPLO",
    "antifurto": "Não",
    "cepPernoite": "04538132",
    "cepCirculacao": "04538132",
    "kmMes": "1500",
    "tipoUso": "Particular",
    "usoTrabalho": "Sim",
    "usoEstudo": "Não",
    "usoComercialDoisOuMaisDias": "Não",
    "blindagem": "Não",
    "kitGas": "Não"
  },
  "complementares": {
    "tipoGaragem": "Sim, com portão automático",
    "relacaoSeguradoProprietario": "Não",
    "relacaoSeguradoComProprietario": "Cônjuge",
    "proprietarioCpf": "55566677788",
    "proprietarioNome": "Patrícia Exemplo",
    "proprietarioSexo": "Feminino",
    "proprietarioNascimento": "20/11/1988",
    "proprietarioEstadoCivil": "Casado(a)",
    "principalCondutor": "Não",
    "principalCondutorRelacaoSegurado": "Cônjuge",
    "principalCondutorCpf": "55566677788",
    "principalCondutorNome": "Patrícia Exemplo",
    "principalCondutorSexo": "Feminino",
    "principalCondutorNascimento": "20/11/1988",
    "principalCondutorEstadoCivil": "Casado(a)",
    "seguroCorretorProximo": "Não",
    "tipoResidencia": "Apartamento",
    "pessoas17a25": "Não"
  },
  "cobertura": {
    "plano": "total",
    "modalidade": "Valor de Mercado",
    "percentualAjuste": "100",
    "franquiaPrimeiraOpcao": "Normal 100%",
    "franquiaSegundaOpcao": "Reduzida 50%",
    "danosMateriaisTerceiros": "100.000,00",
    "danosCorporaisTerceiros": "100.000,00",
    "appMortePorPassageiro": "10.000,00",
    "appInvalidezPorPassageiro": "10.000,00",
    "danosMorais": "10.000,00",
    "despesasExtras": "Não contratada"
  }
}

💻 Exemplos de Integração

Via cURL (Terminal)

curl -X POST http://localhost:3000/cotacao \
-H "Content-Type: application/json" \
-d '{
  "id": "COT_12345",
  "segurado": { "cpf": "12345678900", "nomeSocial": "João Silva" },
  ...
}'

Via JavaScript (Fetch API)

const response = await fetch('http://localhost:3000/cotacao', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify(dadosCotacao)
});

const result = await response.json();
console.log(result.message);

⚠️ Tratamento de Erros

A API utiliza códigos de status HTTP padrão:

Exemplo de erro (400):

{
  "error": "Dados incompletos ou inválidos",
  "details": [
    "Campo segurado.cpf é obrigatório e está vazio",
    "Campo veiculo.placa é obrigatório e está vazio"
  ]
}

⚠️ Campos desconhecidos (validação estrita)

Se o JSON contiver um nome de campo incorreto, a API retornará 400 informando o campo inválido e sugerindo o nome correto quando possível.

{
  "error": "Dados incompletos ou inválidos",
  "details": [
    "Item 0: Campo veiculo.antifurtoBradesco não é suportado. Use veiculo.alarmeSonoroAntiFurtoBradesco"
  ]
}

📝 Observações Importantes

📝 Documentação Interativa

Para testar os campos em tempo real e ver o esquema completo, acesse o Swagger UI:
👉 http://localhost:3000/api-docs