Comparação MEDCENTER × CLINFETO
Tabela abrangente de todas as diferenças observadas entre os dois projetos
de referência. Use como guia para decidir o que replicar e o que evoluir
em um projeto novo.
Configuração
| Dimensão |
MEDCENTER |
CLINFETO |
| OTIMUS URL |
https://medcenteracai-node.otimusclinic.com/api/v1 |
https://clinfeto.otimusclinic.com:9100 |
| OTIMUS token |
hardcoded em scheduling.py |
env OTIMUS_TOKEN (com default hardcoded) |
| LLM |
gpt-4.1 |
gpt-4.1-mini |
| Gemini |
gemini-2.5-flash |
gemini-2.0-flash |
| Debounce |
2s |
10s |
ALLOWED_TEAM |
"IA ATENDIMENTOS" |
"Geral" |
| Tabela chat history |
dados_cliente_medcenter |
dados_cliente_clinfeto |
| Tabela fila |
n8n_fila_mensagens_medcenter |
n8n_fila_mensagens_clinfeto |
Domínio clínico
| Dimensão |
MEDCENTER |
CLINFETO |
| Tipo de clínica |
Multi-especialidade |
Ultrassonografia / medicina fetal |
| Médicos |
7 com agendamento web |
5 |
| Convênios |
5 com automação |
12 |
| Procedimentos |
7 (1 por médico — consulta da especialidade) |
~100+ exames |
| Aliases |
0 |
~100 |
| Preços no prompt |
Sim (~311 linhas de tabela) |
Parcial |
| Telefones exclusivos no prompt |
Sim (Ana Claudia, Silvana) |
Não |
| Regras de exceção |
Sim (Ellen Thais, Diogo Sales) |
Regras de IG obstétrica |
Código / arquitetura
| Dimensão |
MEDCENTER |
CLINFETO |
| Tools → OTIMUS |
In-process (import Python) |
Loopback HTTP (POST /webhook/consultar) |
| Endpoints FastAPI |
/webhook/message, /webhook/transfer, /health |
+ /webhook/consultar, /webhook/agendar |
scheduling.py / agendamento.py |
642 linhas |
853 linhas |
agent.py |
896 linhas |
949 linhas |
| Prompt (linhas no agent.py) |
~660 |
~880 |
| Guardian anti-inversão |
não |
sim |
| Validação primeiro-nome único |
trava no boot via raise |
não valida (5 nomes naturalmente únicos) |
| "Sem preferência de médico" |
não suporta nativamente |
suporta (itera médicos) |
ordenacao em /horarios |
"desc" |
"asc" |
| Range de datas |
90 dias |
90 dias |
| Pre-check de disponibilidade antes de agendar |
sim |
sim |
Validação de agendaNome |
sim (_validar_agenda_medico) |
sim (embutida em _consultar_horarios_medico) |
Chamadas OTIMUS (payload)
| Dimensão |
MEDCENTER |
CLINFETO |
filter.suceder |
0 |
0 |
filter.limit |
100 |
100 |
filter.agendas[].tipo |
"cs" |
"cs" |
agenda_tipo (cadastro) |
"cs" |
"cs" |
status (cadastro) |
"ativo" |
"ativo" |
servicos |
[{"id": procedimento_id}] |
[{"id": procedimento_id}] |
id: 123 hardcoded no cadastro de paciente |
sim |
sim |
Mídia
| Dimensão |
MEDCENTER |
CLINFETO |
| Imagem |
Gemini 2.5-flash |
Gemini 2.0-flash |
| PDF |
Gemini |
Gemini |
| Áudio |
Whisper-1 |
Whisper-1 |
Telemetria
| Dimensão |
MEDCENTER |
CLINFETO |
dashboard_sessions |
sim |
sim |
dashboard_token_usage |
sim |
sim |
dashboard_errors |
sim |
sim |
dashboard_tags |
sim |
sim |
O que preferir para um projeto novo
| Decisão |
Escolha recomendada |
| Tool → OTIMUS |
In-process (Medcenter) |
| Token OTIMUS |
Env var (nunca hardcoded) |
| LLM |
gpt-4.1-mini (menos custo; subir só se necessário) |
| Debounce |
5s (meio-termo) |
ordenacao |
"asc" |
| Guardian anti-inversão |
Implementar (Clinfeto) |
| Validação primeiro-nome |
Trava no boot (Medcenter) |
| "Sem preferência" |
Suportar (Clinfeto) |
| Formato de saída para o agente |
JSON estruturado (Clinfeto) |
| Preços no prompt |
Evitar — colocar em tool dedicada |
| Horários no prompt |
Apenas descritivo — agenda vem do OTIMUS |
| CLAUDE.md |
Sim, baseado no do Clinfeto |
Divergências que precisam ser unificadas
Ambos os projetos têm débitos técnicos convergentes:
- Ambos hardcodam
id: 123 no cadastro — investigar com OTIMUS se pode remover.
- Ambos concentram preços no prompt — deveria ser tool.
- Medcenter precisa herdar o guardian do Clinfeto.
- Clinfeto precisa eliminar o loopback HTTP — usar in-process direto.
- Ambos precisam externalizar a lista de médicos/convênios (ex: YAML ou DB).