Hardcoding crítico¶
Lista de dados que deveriam ser externos (env, DB, config) mas estão hardcoded em código ou prompt. Essa página serve de inventário para eliminar dívida em refatorações futuras.
Token OTIMUS¶
Status: só o Medcenter.
# scheduling.py:26-32 (MEDCENTER)
OTIMUS_BASE_URL = "https://medcenteracai-node.otimusclinic.com/api/v1"
OTIMUS_HEADERS = {
"sistema": "AGENTPRO",
"token": "aWqBPKOwKwMZW8iyuiHb7A5SDtccTDwESrDEJ697774a4b1e96",
...
}
Risco: token em git history. Se o repo for compartilhado, token vaza.
Correção: mover para .env e config.OTIMUS_TOKEN — padrão do Clinfeto.
Clinfeto também hardcoda como default
config.py:55 tem:
os.getenv("OTIMUS_TOKEN", "")
e falhar em tempo de boot se vazio.
"id": 123 no cadastro de paciente¶
Status: ambos os projetos.
Risco: OTIMUS aparentemente ignora, mas contrato não garante. Se em alguma versão passar a respeitar, todos os pacientes novos ficam com id=123 ou o cadastro falha silenciosamente.
Correção: testar em stage com "id": 0 ou omitir o campo. Confirmar
comportamento com contato OTIMUS. Remover valor mágico.
Lista de médicos / convênios / procedimentos¶
Status: ambos — é por design hoje.
Em scheduling.py (MEDCENTER) e agendamento.py (CLINFETO), todos os IDs
OTIMUS estão em constantes Python.
Risco:
- Qualquer mudança (médico novo, preço novo, convênio removido) = redeploy.
- Fricção alta para atualizar → instrução desatualizada no prompt → agente diz coisa errada.
Correção (evolução):
- Carregar de YAML em disco no start do container:
- Ou, melhor: carregar de uma tabela Postgres
clinica_configatualizada via painel admin. Recarregar com um endpointPOST /admin/reload.
Tabela de preços no prompt (MEDCENTER)¶
Status: agent.py:339-649 — ~311 linhas.
Juliana Dos Santos Araujo - R$500,00 em ate 2x ou R$450,00 a vista.
Felipe Xavier - R$350,00 em ate 2x ou R$320,00 a vista.
...
USG abdome inferior - R$200,00 (R$180,00 a vista).
Risco:
- Atualização de preço requer redeploy.
- Tabela no prompt ocupa ~8k tokens → custo 7-10% maior por chamada.
- Prompt fica gigante → dificulta manutenção.
Correção: criar tool get_preco(procedimento: str, convenio: str) -> str
que consulta uma tabela no DB. O agente chama sob demanda. Prompt fica 300
linhas mais curto.
Telefones exclusivos (MEDCENTER)¶
Status: agent.py:226-230.
- (99) 99144-0979 → SOMENTE para agendar com a Dra. Ana Claudia
- (99) 98489-3521 → SOMENTE com a Dra. Silvana
Risco: se o número muda, paciente é direcionado para o lugar errado.
Correção: mover para tabela clinica_contatos no DB. Tool
get_contato(medico: str) devolve.
Horários de atendimento de cada médico (MEDCENTER)¶
Status: agent.py:652-662.
Mauricio Siqueira Camilo (Ortopedia): Quarta (manha) as 08h00;
Segunda, terca, quinta e sexta (tarde) as 13h00.
Risco: médico muda horário → prompt desatualizado → agente oferece horário que não existe.
Correção: esta informação já vem do OTIMUS via
/agendamento/horarios. O prompt deveria apenas instruir o LLM a consultar
a ferramenta em vez de listar horários estáticos.
Regras de exceção (médicos desativados)¶
Status: MEDCENTER — agent.py:215-221 (Ellen Thais, Diogo Sales).
Risco: médico volta e alguém esquece de remover do prompt.
Correção: flag ativo: bool na config da clínica. Médicos inativos
aparecem no prompt como "de licença" dinamicamente.
ALLOWED_INSTANCE com default hardcoded¶
Status: config.py:26 (MEDCENTER).
ALLOWED_INSTANCES = [i.strip() for i in os.getenv("ALLOWED_INSTANCE", "+5599991220558").split(",") ...]
Risco: se esquecer de setar a env em staging/dev, o container aceita webhooks do número de produção. Pode processar mensagens de pacientes reais em ambiente errado.
Correção: default "" e falhar no boot se vazio.
timezone hardcoded¶
Status: ambos — "America/Sao_Paulo".
Risco: se uma clínica for implantada fora do Brasil, horários quebram.
Correção: env CLINIC_TZ=America/Sao_Paulo e usar em zoneinfo.ZoneInfo(CLINIC_TZ).
Taxa USD → BRL no tracking¶
Status: tracking.py — valor 5.70 fixo.
Risco: cálculo de custo BRL desvia da realidade com variação cambial.
Correção: env USD_BRL_RATE ou consumir API de cotação uma vez por dia.
Resumo executivo¶
| Item | Urgência | Esforço |
|---|---|---|
| Token OTIMUS em git | alta | baixo |
"id": 123 no cadastro |
média | baixo |
| Lista médicos/convênios fora do prompt | média | alto |
| Preços fora do prompt | alta | médio |
| Horários do prompt | média | baixo |
| Médicos desativados como flag | baixa | baixo |
ALLOWED_INSTANCE default |
alta | trivial |
| TZ configurável | baixa | trivial |
| Taxa USD/BRL dinâmica | baixa | médio |