Vincular responsável e fechar o contrato

POST /leads/{idApplication}/contract

Única forma de fechar o contrato de um lead — não existe endpoint isolado para setar só os
termos. Vincula, numa única chamada ao home-solutions-backend, um responsável já cadastrado
(6.10/6.11, pelo id) a este lead e define os termos comerciais. É o que conclui a originação e
dispara o envio do contrato para assinatura.

Request

{
  "contractResponsibleId": "8f14e0a1-2b3c-4d5e-9f01-abcdef123456",
  "contractTerms": {
    "tac": 150.00,
    "contractStartDate": "2026-10-01"
  }
}
CampoTipoObrigatórioRegras
contractResponsibleIdstringSimid de um responsável já registrado pra esta imobiliária via POST /contract-responsible (6.10)
contractTermsobjetoSim—
contractTerms.tacnumberSimEntre 0 e 200
contractTerms.contractStartDatestring (date)SimISO 8601; estritamente futura (amanhã ou depois)

Sucesso — 200 OK

{
  "contractResponsible": {
    "id": "8f14e0a1-2b3c-4d5e-9f01-abcdef123456",
    "documentNumber": "12345678909",
    "name": "Maria Silva",
    "email": "[email protected]",
    "phoneNumber": "11999999999",
    "birthDate": "1990-05-10"
  },
  "contractTerms": {
    "tac": 150.00,
    "contractStartDate": "2026-10-01"
  }
}

Responde 200, não 201 com Location: não existe GET /leads/{idApplication}/contract.
A única forma de conferir o responsável vinculado é o corpo desta própria resposta — guarde-o
no seu lado. Os termos, sim, têm consulta: GET /leads/{idApplication}/contract-terms (6.14).

Um endpoint para buscar os dados completos do contrato será criado em versões futuras.

Erros mapeados

HTTPcodeQuando ocorre
400(validação)Bloco obrigatório ausente ou campo inválido — nada é gravado
404CONTRACT_RESPONSIBLE_NOT_FOUNDcontractResponsibleId não existe, não pertence ao cnpj deste lead, ou não está ACTIVE
409CONTRACT_TERMS_ALREADY_SETO lead já tem termos com valores diferentes
422CONTRACT_TERMS_INVALIDtac fora de 0–200, ou contractStartDate não futura
500CONTRACT_INTEGRATION_FAILUREFalha de comunicação interna — o message diz qual das duas metades falhou

Idempotência

Repetir a mesma chamada com o mesmo contractResponsibleId é segura: o lead só é
vinculado uma vez, chamadas seguintes são um no-op que devolve o vínculo já existente. Um
timeout nesta chamada também é seguro de repetir.