Resolver convênio por nome¶
Transforma nome livre do convênio → convenio_id numérico.
Estrutura de dados¶
Use o formato dict (CLINFETO). É mais compacto e lookup por ID fica O(1).
Função de busca¶
def buscar_convenio(nome: str) -> int | None:
norm = _normalize(nome)
# Match exato
for cid, cname in CONVENIOS.items():
if _normalize(cname) == norm:
return cid
# Match parcial (substring em qualquer direção)
for cid, cname in CONVENIOS.items():
cn = _normalize(cname)
if norm in cn or cn in norm:
return cid
return None
Mapeamento convênio → lista para o LLM¶
No system prompt, mostre a lista exata de convênios aceitos:
Convênios disponíveis:
- PARTICULAR
- DIGNA
- BRADESCO SAUDE
- UNIMED - CAMPINA GRANDE
- APSEF SAUDE
- FUSEX
- GEAP
- SAUDE CAIXA
Se o paciente disser um convênio não listado, a tool retorna
FALHA_CONSULTA e o agente transfere para humano.
Particular é um convênio¶
Sempre cadastre "PARTICULAR" como convênio no OTIMUS e na lista. O fluxo
é idêntico aos demais. Na clínica, ele só muda o preço / forma de pagamento
— no chatbot, é só mais um convenio_id.
Normalização e acentos¶
Convênios nos projetos atuais estão em caixa alta sem acentos:
"UNIMED - CAMPINA GRANDE" # ok
"Unimed Nacional" # ruim — inconsistente
"SAÚDE CAIXA" # ruim — acento
O _normalize() remove acentos e uppercase, então tecnicamente funciona,
mas manter o dado-fonte já normalizado evita bug.
Como descobrir os IDs¶
O OTIMUS não expõe endpoint público de listagem de convênios no padrão de integração. Os IDs foram fornecidos pela clínica via suporte OTIMUS.
Processo para novo projeto:
- Pedir à clínica (ou ao contato OTIMUS) a lista de convênios ativos com
idenome. - Popular
CONVENIOS. - Se faltar convênio importante, a tool retorna
FALHA_CONSULTAe o agente transfere — o humano atende e pode voltar à clínica para atualizar a lista.
Aliases para convênios¶
Não usamos aliases explícitos para convênios (diferente de procedimentos) — o match parcial costuma resolver. Se em produção aparecerem casos como "Bradesco Prime" vs "BRADESCO SAUDE", adicionar normalização específica: