Payloads e respostas — catálogo completo¶
Esta página lista todos os payloads de request e response observados nos dois projetos, prontos para copiar em testes unitários ou mocks.
1. Horários — request¶
# agendamento.py:451-473 (CLINFETO)
payload = {
"filter": {
"agendas": [{"id": id_agenda, "tipo": "cs"}],
"convenio_id": id_convenio,
"data": data_inicio, # YYYY-MM-DD
"endDate": data_fim, # YYYY-MM-DD (+90 dias)
"suceder": 0,
"especialidade_id": proc_info["id_especialidade"],
"limit": 100,
"ordenacao": "asc",
"procedimentos": [proc_info["id_procedimento"]],
}
}
# scheduling.py:201-212 (MEDCENTER)
payload = {
"filter": {
"agendas": [{"id": proc["id_agenda"], "tipo": "cs"}],
"convenio_id": conv["id"],
"data": hoje, # YYYY-MM-DD
"endDate": end_date, # YYYY-MM-DD
"suceder": 0,
"especialidade_id": proc["id_especialidade"],
"limit": 100,
"ordenacao": "desc",
"procedimentos": [proc["id_procedimento"]],
}
}
1. Horários — response¶
Sucesso¶
{
"data": [
{
"data": "15-04-2026",
"agendas": [
{
"agendaNome": "JOANA SILVA",
"horarios": [
{"hora": "08:00", "dataconsulta": "2026-04-15 08:00:00"},
{"hora": "08:30", "dataconsulta": "2026-04-15 08:30:00"},
{"hora": "09:00", "dataconsulta": "2026-04-15 09:00:00"},
{"hora": "14:00", "dataconsulta": "2026-04-15 14:00:00"},
{"hora": "14:30", "dataconsulta": "2026-04-15 14:30:00"}
]
}
]
},
{
"data": "16-04-2026",
"agendas": [ ... ]
}
]
}
Vazio¶
Erro de autenticação¶
- HTTP 401 — token inválido ou header
sistemaausente.
2. Buscar paciente — response¶
Encontrado¶
{
"data": {
"id": 42,
"paciente_id": 42,
"nome": "MARIA DA SILVA",
"cpf": "12345678900",
"dataNascimento": "10-05-1985",
"celular": "5599999999999",
"email": "maria@example.com"
}
}
Campos extras
A API pode devolver campos adicionais (email, endereco, convenio,
etc.) dependendo da versão/instância. O cliente só consome paciente_id
(ou id) e nome. Mantenha o resto como passthrough.
Não encontrado¶
Parser defensivo¶
def parse_paciente(result: dict) -> dict | None:
data = result.get("data")
if isinstance(data, dict) and data.get("cpf"):
return data
if data == "O CPF informado não foi encontrado.":
return None
return None
3. Cadastrar paciente — request¶
{
"pacientes": [
{
"id": 123,
"nome": "MARIA DA SILVA",
"dataNascimento": "1985-05-10",
"cpf": "12345678900",
"celular": "5599999999999"
}
]
}
Formato dataNascimento muda por endpoint
- No request de cadastro (endpoint 3):
YYYY-MM-DD(ISO) - No response de busca (endpoint 2):
DD-MM-YYYY
4. Confirmar agendamento — request¶
{
"paciente_id": 42,
"cpf": "12345678900",
"convenio_id": 212,
"data": "15-04-2026",
"hora": "14:00",
"agenda_id": 58,
"agenda_tipo": "cs",
"status": "ativo",
"servicos": [
{"id": 170}
]
}
4. Confirmar agendamento — response¶
Sucesso¶
{
"description": "Consulta agendada com sucesso para 15/04/2026 às 14:00 com JOANA SILVA",
"preparo": "Comparecer 15 minutos antes. Trazer documento com foto, cartão do convênio, e pedido médico quando aplicável."
}
Erro (ex.: slot ocupado)¶
- HTTP 4xx com body varável.
- Estratégia: antes de confirmar, sempre re-validar disponibilidade via endpoint 1. Ver agendamento completo.
Resumo de formatos de data¶
| Contexto | Formato |
|---|---|
Endpoint 1 request (filter.data, endDate) |
YYYY-MM-DD |
Endpoint 1 response (data[].data) |
DD-MM-YYYY |
Endpoint 2 response (dataNascimento) |
DD-MM-YYYY |
Endpoint 3 request (dataNascimento) |
YYYY-MM-DD |
Endpoint 4 request (data) |
DD-MM-YYYY |
Isso é confuso. Mantenha helpers: