iachat/app/javascript/dashboard/i18n/locale/pt_BR/captain.json
Rodribm10 28e880d7b6 feat(captain/hermes-builder): aba Verificação com 22+ checks + reparo automático
UI nova dentro do Construtor (Hermes) — TabBar com Chat e Verificação.
Verificação roda HermesBuilder::Validator (DB+runtime) e exibe resultado
agrupado por categoria, com botão Refazer inline em FAIL/WARN reparáveis.

Backend (porta dos checks DB do CLI bin/hermes-validate):
- HermesBuilder::Validator com 22+ checks: engine, profile, port,
  secret, parent, unit, Brand, CaptainInbox sync (o bug que travou
  Juliana), pricing dry-run, Inter creds, typing/response_delay,
  registry MCP completo.
- HermesBuilder::Repairer com 4 handlers automáticos: set_engine_hermes,
  sync_captain_inbox_unit, set_default_typing_delay,
  set_default_response_delay.
- Endpoints novos: GET assistants, GET validate?slug=, POST repair.

Frontend:
- builder/Index.vue: wrapper com TabBar.
- builder/BuilderChat.vue: extraído do Index original.
- builder/BuilderVerification.vue: dropdown + Conferir agora + lista
  agrupada por categoria com badges + botão Refazer inline.

i18n: keys em pt_BR e en sob CAPTAIN_HERMES_BUILDER.VERIFY.*.

Filesystem/systemd checks ficam pro CLI hermes-validate (Rails container
não enxerga /root/.hermes/profiles do host).

Validado HTTP: GET /validate?slug=juliana_qnn1 → 28 PASS / 0 FAIL / 1 WARN.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-02 15:27:40 -03:00

940 lines
36 KiB
JSON
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

{
"CAPTAIN_RESERVATIONS": {
"HEADER": "Reservas",
"EMPTY": "Nenhuma reserva encontrada.",
"CREATE_SUCCESS": "Reserva criada com sucesso.",
"CREATE_ERROR": "Erro ao criar reserva.",
"NEW_RESERVATION_MODAL": {
"TITLE": "Nova Reserva",
"CONFIRM": "Criar Reserva",
"CANCEL": "Cancelar",
"FIELDS": {
"CONTACT_ID": "ID do Contato",
"CONTACT_ID_PLACEHOLDER": "Digite o ID do contato",
"INBOX": "Canal (Caixa de Entrada)",
"INBOX_PLACEHOLDER": "Selecione a caixa de entrada",
"STATUS": "Status da Reserva",
"STATUS_PLACEHOLDER": "Selecione o status",
"SUITE_IDENTIFIER": "Identificador da Suíte (Ex: 101, Suíte Master)",
"CHECK_IN": "Check-in",
"CHECK_OUT": "Check-out",
"TOTAL_AMOUNT": "Valor Total"
}
},
"VIEW": {
"LIST": "Lista",
"KANBAN": "Kanban",
"REVENUE": "Faturamento"
},
"FILTERS": {
"SEARCH": "Buscar por nome, CPF ou telefone",
"STATUS": "Status",
"STATUS_ALL": "Todos os status",
"UNIT": "Unidade",
"UNIT_ALL": "Todas as unidades",
"SUITE": "Suíte",
"DATE_FROM": "De",
"DATE_TO": "Até",
"SORT": "Ordenação",
"SORT_DEFAULT": "Prioridade operacional",
"SORT_CHECK_IN": "Data de check-in",
"SORT_UPDATED": "Última atualização",
"SORT_CREATED": "Data de criação",
"APPLY": "Aplicar filtros",
"CLEAR": "Limpar filtros",
"HIDE": "Ocultar filtros"
},
"KPI": {
"TOTAL": "Total na página",
"PENDING_PIX": "Aguardando PIX",
"CHECKIN_TODAY": "Check-in hoje",
"REVENUE_TODAY": "Receita hoje"
},
"PILLS": {
"ALL": "Todas",
"DRAFT": "Rascunho",
"PENDING_PAYMENT": "Aguardando PIX",
"CONFIRMED": "Confirmadas",
"CANCELLED": "Canceladas"
},
"QUICK_DATE": {
"TODAY": "Hoje",
"TOMORROW": "Amanhã",
"WEEK": "7 dias",
"ALL": "Tudo"
},
"CARD": {
"CHECK_IN": "Check-in",
"AMOUNT": "Valor",
"TODAY": "Hoje",
"TOMORROW": "Amanhã",
"YESTERDAY": "Ontem",
"PIX_EXPIRED": "Expirado",
"PIX_EXPIRES_IN_MIN": "Expira em {minutes}min",
"PIX_EXPIRES_IN_HR": "Expira em {hours}h"
},
"TABLE": {
"CUSTOMER": "Cliente",
"UNIT": "Unidade",
"SUITE": "Suíte",
"CHECK_IN": "Check-in",
"AMOUNT": "Valor",
"STATUS": "Status",
"UPDATED_AT": "Atualização",
"ACTIONS": "Ações"
},
"STATUS": {
"SCHEDULED": "Agendado",
"PENDING_PAYMENT": "Aguardando pagamento",
"ACTIVE": "Ativa",
"CONFIRMED": "Confirmada",
"COMPLETED": "Concluída",
"CANCELLED": "Cancelada",
"DRAFT": "Rascunho"
},
"ACTIONS": {
"OPEN_CONVERSATION": "Abrir conversa",
"COPY_PIX": "Copiar Pix",
"MORE": "Mais",
"REGENERATE_PIX": "Reenviar PIX",
"MARK_AS_PAID": "Marcar como paga",
"MARK_AS_PAID_CONFIRM": "Marcar esta reserva como paga manualmente?",
"MARKED_AS_PAID": "Reserva marcada como paga.",
"MARK_AS_PAID_FAILED": "Falha ao marcar como paga.",
"CANCEL": "Cancelar reserva",
"CANCEL_REASON_PROMPT": "Motivo do cancelamento (opcional):",
"CANCELLED": "Reserva cancelada.",
"CANCEL_FAILED": "Falha ao cancelar.",
"PIX_REGENERATED": "Novo PIX gerado e enviado.",
"PIX_REGENERATE_FAILED": "Falha ao reenviar PIX."
},
"KANBAN": {
"EMPTY_COLUMN": "Nenhuma reserva neste status."
},
"REVENUE": {
"ONLY_CONFIRMED": "O faturamento considera apenas reservas com status confirmado.",
"SUMMARY": {
"TOTAL_REVENUE": "Faturamento total",
"CONFIRMED_COUNT": "Reservas confirmadas",
"AVERAGE_TICKET": "Ticket médio"
},
"CHARTS": {
"BY_UNIT": "Faturamento por unidade",
"BY_SUITE": "Faturamento por suíte"
},
"API": {
"ERROR": "Não foi possível carregar o faturamento."
}
},
"SIDEBAR": {
"NO_RESERVATION": "Nenhuma reserva vinculada a esta conversa.",
"LOADING": "Carregando detalhes da reserva...",
"STATUS": "Status",
"SUITE": "Suíte",
"CHECK_IN": "Check-in",
"CHECK_OUT": "Check-out",
"AMOUNT": "Valor",
"UPDATED_AT": "Atualizado em"
},
"API": {
"PIX_EXPIRED": "O Pix desta reserva expirou.",
"PIX_NOT_GENERATED": "O Pix ainda não foi gerado.",
"PIX_COPIED": "Pix copiado com sucesso.",
"PIX_COPY_FAILED": "Não foi possível copiar o Pix."
}
},
"CAPTAIN_ORCHESTRATOR_EDITOR": {
"MISSING_DELIMITER_PREFIX": "Este prompt foi salvo antes da separação em seções. Todo o conteúdo aparece no campo \"Prompt Base do Sistema\". Clique em",
"MISSING_DELIMITER_BUTTON": "Restaurar Padrão",
"MISSING_DELIMITER_SUFFIX": "para obter a separação automática, ou reorganize manualmente movendo o conteúdo do assistente para o campo correto."
},
"CAPTAIN_ROLETA": {
"HEADER": "Roleta da Sorte — Resgate",
"TAB_REDEEM": "Resgate",
"TAB_REPORT": "Relatório",
"REDEEM": {
"TITLE": "Entregar prêmio ao cliente",
"DESC": "Digite o código que o cliente mostrou no WhatsApp e confirme o resgate. A Jasmine manda automaticamente uma confirmação pro cliente.",
"CODE_LABEL": "Código do cupom",
"CODE_PLACEHOLDER": "Ex: ABC123",
"NOTES_LABEL": "Observação (opcional)",
"NOTES_PLACEHOLDER": "Qualquer detalhe sobre o resgate",
"SUBMIT": "Confirmar resgate",
"SUBMITTING": "Registrando...",
"SUCCESS_PREFIX": "{prize} entregue para ",
"SUCCESS_FULL": "✅ {prize} entregue para {name}.",
"ERROR_FULL": "⚠️ {message}",
"FALLBACK_CLIENT": "cliente",
"ERROR_EMPTY_CODE": "Digite o código impresso no cupom do cliente.",
"ERROR_NOT_FOUND": "Código não encontrado. Confere se digitou direito.",
"ERROR_ALREADY_REDEEMED": "Esse cupom já foi resgatado antes.",
"ERROR_NO_PRIZE": "Esse cupom caiu em \"Sem sorte\" — não tem nada pra entregar.",
"ERROR_NO_RECEPTIONIST": "Faz login de novo e tenta outra vez.",
"ERROR_RPC_FAILED": "Erro ao chamar o servidor de reservas.",
"ERROR_EXCEPTION": "Algo quebrou. Avisa o time técnico.",
"ERROR_DEFAULT": "Não foi registrado."
},
"HISTORY": {
"TITLE": "Cupons ativos (últimos 7 dias)",
"LOADING": "Carregando...",
"EMPTY": "Nenhum cupom ativo nos últimos dias.",
"LOAD_ERROR": "Erro ao carregar cupons pendentes",
"COL_CODE": "Código",
"COL_PRIZE": "Prêmio",
"COL_CLIENT": "Cliente",
"COL_GENERATED": "Gerado",
"COL_STATUS": "Resgate",
"STATUS_REDEEMED_PREFIX": "✅ ",
"STATUS_PENDING": "⏳ Aguardando"
},
"REPORT": {
"TITLE": "Relatório de resgates por recepcionista",
"DESC": "Anti-fraude: flaga quem resgatou muito acima da média da equipe.",
"PERIOD_7": "Últimos 7 dias",
"PERIOD_14": "Últimos 14 dias",
"PERIOD_30": "Últimos 30 dias",
"LOADING": "Carregando relatório...",
"EMPTY": "Nenhum resgate registrado nesse período.",
"LOAD_ERROR": "Erro ao carregar relatório",
"KPI_TOTAL": "Total resgates",
"KPI_AVG": "Média por pessoa",
"KPI_COUNT": "Recepcionistas ativas",
"KPI_THRESHOLD": "Limite de alerta",
"KPI_THRESHOLD_PREFIX": "≥ ",
"COL_RECEPTIONIST": "Recepcionista",
"COL_TOTAL": "Total",
"COL_BRINDES": "Brindes",
"COL_DESCONTOS": "Descontos",
"COL_SUM_DISCOUNT": "Σ % desconto",
"COL_STATUS": "Status",
"STATUS_ANOMALY": "⚠️ Acima da média",
"STATUS_NORMAL": "Normal",
"FOOTER_HINT": "Alerta dispara quando a recepcionista tem ≥ {threshold} resgates (mínimo 5, ou 2,5× a média da equipe). Investigue conversas do cliente no WhatsApp pra confirmar."
}
},
"CAPTAIN_FUNNEL": {
"HEADER": "Funil de Conversão",
"DESC": "Acompanhe a jornada do cliente da pergunta de preço até o Pix pago. Identifica onde os clientes mais desistem.",
"PERIOD_7": "7 dias",
"PERIOD_30": "30 dias",
"PERIOD_60": "60 dias",
"PERIOD_90": "90 dias",
"LOADING": "Carregando funil...",
"EMPTY": "Nenhuma conversa do Captain nesse período. Ajuste o intervalo.",
"LOAD_ERROR": "Erro ao carregar funil",
"INSIGHT_LABEL": "Maior ponto de abandono",
"INSIGHT_FULL": "{lost} clientes caíram entre \"{from}\" e \"{to}\" — isso é {pct} dos que chegaram na etapa anterior.",
"FUNNEL_TITLE": "Funil geral ({count} conversas analisadas)",
"BY_SUITE_TITLE": "Por categoria de suíte",
"BY_SUITE_HEADER": "Suíte",
"BY_SUITE_FOOTER": "Categoria detectada por menção no conteúdo da conversa. Conversas sem menção específica não aparecem nesse breakdown.",
"STAGES": {
"price_inquiry": "Perguntou preço",
"price_answered": "Recebeu cotação",
"reservation_drafted": "Reserva iniciada",
"pix_generated": "Pix gerado",
"pix_paid": "Pix pago"
}
},
"CAPTAIN_SETTINGS": {
"TITLE": "Configurações do Captain",
"UNITS": {
"TITLE": "Unidades Pix",
"DESC": "Gerencie as configurações de diferentes unidades Pix Integradas com Banco Inter.",
"ADD_UNIT": "Adicionar Unidade",
"EDIT_UNIT": "Editar Unidade",
"DELETE_UNIT": "Deletar Unidade",
"LIST": {
"TABLE_HEADER": [
"Pix Key",
"Conta",
"Certificados",
"Monitoramento",
"Ações"
],
"CERT": "Cert",
"KEY": "Key",
"PROACTIVE_ON": "Auto-check ligado",
"PROACTIVE_OFF": "Auto-check desligado",
"SEPARATOR": "|",
"ADD_NEW_UNIT": "Adicione uma Unidade Pix",
"NO_UNITS_MESSAGE": "Ainda não há nenhuma unidade pix inserida. Crie uma agora para começar a receber pelo pix do Banco Inter."
},
"DELETE": {
"BUTTON_TEXT": "Excluir",
"TITLE": "Excluir Unidade Pix",
"DESC": "Tem certeza de que deseja excluir esta unidade pix? Esta ação não pode ser desfeita.",
"CONFIRM": {
"TITLE": "Confirmar Exclusão",
"MESSAGE": "Tem certeza que deseja apagar a Unidade?",
"YES": "Excluir",
"NO": "Cancelar"
},
"API": {
"SUCCESS_MESSAGE": "Unidade excluída com sucesso.",
"ERROR_MESSAGE": "Houve um erro ao tentar excluir a unidade."
}
},
"ADD": {
"TITLE": "Nova Unidade Pix",
"DESC": "Adicione as credenciais do seu app Banco Inter",
"CANCEL_BUTTON_TEXT": "Cancelar",
"SUBMIT_BUTTON_TEXT": "Criar unidade",
"API": {
"SUCCESS_MESSAGE": "Unidade criada com sucesso!",
"ERROR_MESSAGE": "Houve um erro ao tentar criar a unidade."
}
},
"EDIT": {
"TITLE": "Editar Unidade Pix",
"DESC": "Atualize as credenciais do Banco Inter",
"CANCEL_BUTTON_TEXT": "Cancelar",
"SUBMIT_BUTTON_TEXT": "Salvar unidade",
"API": {
"SUCCESS_MESSAGE": "Unidade atualizada com sucesso!",
"ERROR_MESSAGE": "Houve um erro ao tentar atualizar."
}
},
"FORM": {
"NAME": {
"LABEL": "Nome da Unidade",
"PLACEHOLDER": "Ex: Matriz",
"ERROR": "O nome é obrigatório"
},
"INTER_PIX_KEY": {
"LABEL": "Chave Pix (do app Inter)",
"PLACEHOLDER": "Ex: 12.345.678/0001-90",
"ERROR": "A chave Pix é obrigatória",
"HELP_TEXT": "Sua chave Pix que receberá as cobranças"
},
"INTER_ACCOUNT_NUMBER": {
"LABEL": "Número da conta Inter",
"PLACEHOLDER": "Ex: 1234567-8",
"ERROR": "O número da conta é obrigatório"
},
"INTER_CLIENT_ID": {
"LABEL": "Client ID do App Inter",
"PLACEHOLDER": ""
},
"INTER_CLIENT_SECRET": {
"LABEL": "Client Secret do App Inter",
"PLACEHOLDER": ""
},
"INTER_CERT_CONTENT": {
"LABEL": "Conteúdo do Certificado (.crt)",
"PLACEHOLDER": "Cole o texto contido no arquivo .crt aqui...",
"UPLOAD_BUTTON": "Importar arquivo .crt"
},
"INTER_KEY_CONTENT": {
"LABEL": "Conteúdo da Chave (.key)",
"PLACEHOLDER": "Cole o texto contido no arquivo .key aqui...",
"UPLOAD_BUTTON": "Importar arquivo .key"
},
"PROACTIVE_PIX_POLLING": {
"LABEL": "Confirmação proativa de pagamento (Banco Inter)",
"CHECKBOX_LABEL": "Verificar pagamento automaticamente a cada 10 minutos por até 1 hora",
"HELP_TEXT": "Quando habilitado, o sistema consulta o Inter de forma proativa para confirmar pagamentos Pix pendentes.",
"DISABLED_HELP_TEXT": "Complete as credenciais do Banco Inter (Client ID/Secret, conta, chave Pix, certificado e chave) para habilitar."
},
"CERT_PRESENT_HELP": "Certificado já configurado.",
"CANCEL": "Cancelar",
"SAVE": "Salvar"
},
"INBOX": {
"LABEL": "Unidade Pix",
"PLACEHOLDER": "Selecione uma unidade",
"NO_UNIT": "Nenhuma unidade vinculada",
"CONNECT_UNIT_LABEL": "Vincular Unidade Pix",
"CONNECT_UNIT_PLACEHOLDER": "Escolha a unidade Inter para este inbox",
"CONNECT_UNIT_HELP": "Selecione qual Unidade Pix deve ser usada nesta caixa de entrada."
},
"TEST": {
"HEADER_TITLE": "Validação de Header",
"HEADER_DESCRIPTION": "Teste visual para validar carregamento da página.",
"BODY_TEXT": "Se esta tela abrir, o problema não está no layout base e sim na tabela ou no Vuex."
}
},
"GALLERY": {
"TITLE": "Galeria",
"DESC": "Gerencie as fotos de suítes que os subagentes podem enviar para os clientes.",
"ADD_ITEM": "Adicionar Foto",
"EDIT_ITEM": "Editar",
"DELETE_ITEM": "Excluir",
"LIST": {
"TABLE_HEADER": [
"Imagem",
"Caixa de entrada e descrição",
"Categoria",
"Suíte",
"Ações"
],
"ADD_NEW_ITEM": "Adicione fotos na galeria",
"NO_ITEMS_MESSAGE": "Ainda não há fotos cadastradas para envio automático aos clientes.",
"VIEW_URL": "URL da Imagem"
},
"DELETE": {
"CONFIRM": {
"TITLE": "Excluir foto",
"MESSAGE": "Tem certeza que deseja excluir esta foto da galeria?",
"YES": "Excluir"
},
"API": {
"SUCCESS_MESSAGE": "Foto excluída com sucesso.",
"ERROR_MESSAGE": "Não foi possível excluir a foto."
}
},
"ADD": {
"TITLE": "Nova foto da galeria",
"DESC": "Cadastre uma foto de suíte e os metadados para busca pelo agente.",
"SUBMIT_BUTTON_TEXT": "Salvar foto",
"API": {
"SUCCESS_MESSAGE": "Foto cadastrada com sucesso!",
"ERROR_MESSAGE": "Não foi possível cadastrar a foto."
}
},
"EDIT": {
"TITLE": "Editar foto da galeria",
"DESC": "Atualize os dados e a imagem da galeria.",
"SUBMIT_BUTTON_TEXT": "Salvar alterações",
"API": {
"SUCCESS_MESSAGE": "Foto atualizada com sucesso!",
"ERROR_MESSAGE": "Não foi possível atualizar a foto."
}
},
"FORM": {
"INBOX": {
"LABEL": "Caixa de entrada",
"GLOBAL_OPTION": "Global (todas as caixas)",
"HELP": "Selecione a caixa de entrada onde essas fotos podem ser usadas.",
"GLOBAL_HELP": "Essas fotos podem ser usadas por agentes em qualquer caixa de entrada.",
"SPECIFIC_HELP": "Essas fotos serão usadas somente na caixa de entrada {inbox}."
},
"SUITE_CATEGORY": {
"LABEL": "Categoria",
"PLACEHOLDER": "Ex: Hidromassagem",
"ERROR": "A categoria é obrigatória"
},
"SUITE_NUMBER": {
"LABEL": "Nome/identificador",
"PLACEHOLDER": "Ex: 101",
"ERROR": "O identificador é obrigatório"
},
"DESCRIPTION": {
"LABEL": "Descrição da foto",
"PLACEHOLDER": "Descreva rapidamente o que aparece na imagem",
"ERROR": "A descrição é obrigatória"
},
"IMAGE": {
"LABEL": "Imagem",
"HELP_TEXT": "Use imagens nítidas. Formatos recomendados: PNG/JPG.",
"ERROR": "A imagem é obrigatória",
"PREVIEW_ALT": "Pré-visualização da foto"
},
"ACTIVE": {
"LABEL": "Disponível para envio pelos agentes"
}
}
}
},
"CAPTAIN": {
"BANNER": {
"RESPONSES": "Você usou mais de 80% do seu limite de respostas. Para continuar usando o Capitão IA, faça um upgrade.",
"DOCUMENTS": "Limite de documentos atingido. Faça um upgrade para continuar usando o Capitão IA."
},
"FORM": {
"CANCEL": "Cancelar",
"CREATE": "Criar",
"EDIT": "Atualizar"
},
"RESPONSES": {
"HEADER": "FAQs",
"PENDING_FAQS": "FAQs Pendentes",
"ADD_NEW": "Criar nova FAQ",
"DOCUMENTABLE": {
"CONVERSATION": "Conversação #{id}"
},
"SELECTED": "{count} selecionado",
"SELECT_ALL": "Selecionar todos ({count})",
"UNSELECT_ALL": "Desmarcar todos ({count})",
"SEARCH_PLACEHOLDER": "Pesquisar FAQs...",
"BULK_APPROVE_BUTTON": "Aprovar",
"BULK_DELETE_BUTTON": "Excluir",
"BULK_APPROVE": {
"SUCCESS_MESSAGE": "Perguntas Frequentes aprovadas com sucesso",
"ERROR_MESSAGE": "Ocorreu um erro ao aproveitar as Perguntas Frequentes. Tente novamente."
},
"BULK_DELETE": {
"TITLE": "Excluir as Perguntas Frequentes?",
"DESCRIPTION": "Tem certeza que deseja excluir as Perguntas Frequentes selecionadas? Esta ação não pode ser desfeita.",
"CONFIRM": "Sim, excluir todas",
"SUCCESS_MESSAGE": "Perguntas Frequentes excluídas com sucesso",
"ERROR_MESSAGE": "Ocorreu um erro ao excluir as Perguntas Frequentes, por favor tente novamente."
},
"DELETE": {
"TITLE": "Tem certeza que deseja excluir o FAQ?",
"DESCRIPTION": "",
"CONFIRM": "Sim, excluir",
"SUCCESS_MESSAGE": "FAQ excluída com sucesso",
"ERROR_MESSAGE": "Ocorreu um erro ao excluir a FAQ, por favor tente novamente."
}
}
},
"CAPTAIN_REPORTS": {
"TITLE": "Relatórios IA",
"DESC": "Análises semanais geradas por IA com base nas conversas de cada unidade.",
"LOADING": "Carregando relatórios...",
"ALL_UNITS": "Todas as unidades",
"ALL_INBOXES": "Todas as caixas de entrada",
"UNITS_GROUP": "Unidades Pix",
"INBOXES_GROUP": "Caixas de Entrada",
"TABS": {
"DASHBOARD": "Dashboard",
"INSIGHTS": "Insights IA",
"OPERATIONAL": "Operacional",
"EXECUTIVE": "Executivo",
"LANDING_PAGES": "Landing Pages",
"RETENTION": "Retenção"
},
"RETENTION": {
"PERIOD_LABEL": "Período",
"PERIOD_THIS_MONTH": "Este mês",
"PERIOD_LAST_30": "Últimos 30 dias",
"PERIOD_LAST_90": "Últimos 90 dias",
"PERIOD_CUSTOM": "Personalizado",
"APPLY": "Aplicar",
"NO_DATA": "Sem dados.",
"KPI": {
"ACTIVE": "Clientes ativos",
"ACTIVE_HINT": "última interação nos últimos 30 dias",
"RECURRING": "Recorrentes",
"RECURRING_HINT": "≥2 interações qualificadas em 90 dias",
"RETURN_30D": "Taxa de retorno 30d",
"RETURN_30D_HINT": "voltaram a interagir em 7 dias",
"PIX_CONVERSION": "Conversão Pix",
"PIX_CONVERSION_HINT": "{paid} pagos de {generated} gerados"
},
"FLOW": {
"TITLE": "Fluxo do período",
"NEW_IN_PERIOD": "novos no período",
"RETURNED_IN_PERIOD": "retornaram no período",
"TOTAL_TOUCHES": "interações totais",
"BASE_STATUS": "Situação atual da base",
"SLEEPING": "{count} adormecidos",
"SLEEPING_HINT": "30-90d sem contato",
"AT_RISK": "{count} em risco",
"AT_RISK_HINT": "90-180d sem contato",
"CHURNED": "{count} inativos",
"CHURNED_HINT": "180d+ sem contato"
},
"COHORT": {
"TITLE": "Matriz de cohort",
"SUBTITLE": "% de clientes de cada cohort que voltaram a interagir em M+N meses.",
"EXPORT_CSV": "Exportar CSV",
"EMPTY": "Ainda não há cohorts com dados.",
"COL_COHORT": "Cohort",
"COL_SIZE": "Tamanho",
"CELL_TITLE": "{count} contatos ativos ({rate}%)"
},
"BADGE": {
"STATUS_FIRST": "Primeiro contato",
"STATUS_INACTIVE": "Inativo",
"STATUS_AT_RISK": "Em risco",
"STATUS_SLEEPING": "Adormecido",
"STATUS_RECURRING": "Recorrente",
"STATUS_ACTIVE": "Ativo",
"LAST_INTERACTION": "última {days}",
"INTERACTIONS_LABEL": "interação | interações",
"INTERACTIONS_TITLE": "Interações qualificadas (≥2+2 mensagens)",
"ONE_SHOT_LABEL": "one-shot",
"ONE_SHOT_TITLE": "Consultas one-shot (≥1+1)",
"PIX_LABEL": "Pix pagos",
"PIX_TITLE": "Pix gerados / reservas pagas",
"DAYS_TODAY": "hoje",
"DAYS_YESTERDAY": "ontem",
"DAYS_RECENT": "há {days} dias",
"DAYS_ONE_MONTH": "há cerca de 1 mês",
"DAYS_MONTHS": "há {months} meses",
"DAYS_YEARS": "há {years} anos"
},
"ERRORS": {
"SUMMARY": "Falha ao carregar KPIs de retenção",
"COHORT": "Falha ao carregar cohort"
}
},
"EXECUTIVE": {
"LOADING": "Carregando digest executivo...",
"NO_DATA": "Sem insights gerados para o período. Rode a análise semanal pra ver os dados aqui.",
"TITLE": "Digest Executivo",
"SUBTITLE": "Mesmo relatório enviado ao Mattermost, com drill-down e filtros.",
"DELIVER_BUTTON": "Enviar ao Mattermost agora",
"DELIVER_SUCCESS": "Digest enfileirado. Vai chegar no Mattermost em instantes.",
"DELIVER_ERROR": "Falha ao disparar o digest. Veja o log do Rails.",
"CONVERSATIONS": "Conversas",
"MESSAGES": "Mensagens",
"UNITS_ANALYZED": "Unidades analisadas",
"INSIGHTS_COUNT": "Insights gerados",
"UNIT_TABLE": "Comparativo por unidade",
"COL_UNIT": "Unidade",
"COL_CONVS": "Conversas",
"COL_DELTA": "vs semana anterior",
"COL_AI_RATE": "Taxa de acerto IA",
"COL_FAILURES": "Falhas",
"AI_FAILURES": "Onde a Angelina errou (clique pra ver conversas)",
"OPPORTUNITIES": "Oportunidades — o que clientes pediram",
"OPPORTUNITIES_HINT": "Clique em uma oportunidade pra ver as conversas reais onde foi mencionada.",
"COMPLAINTS": "Reclamações recorrentes",
"PRAISES": "Elogios recorrentes",
"RECOMMENDATIONS": "Recomendações da IA",
"DRILLDOWN_TITLE": "Conversas relacionadas",
"NO_CONVERSATIONS_FOUND": "Nenhuma conversa encontrada com essas palavras no período.",
"NO_CONVERSATIONS_HINT": "A descrição do insight é uma abstração da IA. Se nenhuma palavra-chave bateu com o texto literal das conversas, nada é retornado. Tente clicar em outro item mais específico.",
"SEARCH_TOKENS": "Palavras buscadas",
"OPEN_CONVERSATION": "Abrir no Chatwoot"
},
"LP": {
"LOADING": "Carregando dados...",
"NO_DATA": "Nenhum clique registrado ainda. Integre o pixel na landing page para ver os dados aqui.",
"TOTAL_CLICKS": "Total de Cliques",
"TOTAL_CONVERSIONS": "Conversões (WhatsApp)",
"CONVERSION_RATE": "Taxa de Conversão",
"TOTAL_DROPOFF": "Perdas (sem conversa)",
"DROPOFF_RATE": "Taxa de Perda",
"UNIQUE_CONTACTS": "Contatos únicos convertidos",
"FUNNEL_TITLE": "Funil da landing page",
"DAILY_TREND": "Tendência diária de cliques vs conversões",
"BY_SOURCE": "Cliques por Origem",
"BY_CAMPAIGN": "Cliques por Campanha",
"BY_HOSTNAME": "Cliques por Landing Page",
"CLICKS": "cliques",
"CONV": "conv",
"REFRESH": "Atualizar",
"LEGEND_CLICKS": "Cliques",
"LEGEND_CONVERSIONS": "Conversões"
},
"FILTER_DATE": {
"LABEL": "Período:",
"START": "Data Início",
"END": "Data Fim",
"TODAY": "Hoje",
"YESTERDAY": "Ontem",
"LAST_7_DAYS": "Últimos 7 dias",
"LAST_30_DAYS": "Últimos 30 dias",
"THIS_WEEK": "Esta semana",
"LAST_WEEK": "Semana Passada",
"CURRENT_MONTH": "Mês Atual",
"LAST_MONTH": "Mês Passado",
"CUSTOM": "Personalizado",
"SEPARATOR": "-"
},
"INSIGHT": {
"CONVERSATIONS": "conversas",
"MESSAGES": "mensagens",
"TOP_TOPICS": "Principais tópicos",
"AI_FAILURES": "Falhas da IA",
"BULLET": "•",
"COUNT_PREFIX": "(",
"COUNT_SUFFIX": ")",
"TIMES": "x",
"SENTIMENT": "Sentimento",
"SENTIMENT_POSITIVE": "Positivo",
"SENTIMENT_NEGATIVE": "Negativo",
"SENTIMENT_NEUTRAL": "Neutro",
"PRAISES": "Elogios dos clientes",
"COMPLAINTS": "Reclamações",
"FAQ_GAPS": "Lacunas no FAQ",
"FAQ_GAPS_HINT": "Perguntas que os clientes fazem mas o agente não cobre",
"MOST_REQUESTED_SUITES": "Suítes mais pedidas",
"PRICE_REACTIONS": "Reação a preços",
"PRICE_OBJECTIONS": "objeções de preço",
"RECOMMENDATIONS": "Recomendações",
"SHOW_DETAILS": "Ver análise completa",
"HIDE_DETAILS": "Ocultar detalhes"
},
"EMPTY": {
"TITLE": "Nenhum relatório gerado",
"MESSAGE": "Gere um novo relatório para analisar o desempenho do atendimento."
},
"GENERATE": {
"BUTTON": "Gerar Análise",
"SUCCESS": "Relatório solicitado com sucesso! Pode levar alguns minutos.",
"ERROR": "Erro ao solicitar geração do relatório.",
"DATE_REQUIRED": "Por favor, selecione as datas de início e fim."
},
"STATUS": {
"PENDING": "Pendente",
"PROCESSING": "Processando",
"DONE": "Concluído",
"FAILED": "Falhou"
},
"OPERATIONAL": {
"LOADING": "Carregando dados operacionais...",
"NO_DATA": "Sem dados operacionais para o período selecionado.",
"CONVERSATIONS_SECTION": "Conversas",
"RESERVATIONS_SECTION": "Reservas",
"TOTAL": "Total",
"RESOLVED": "Resolvidas",
"OPEN": "Em aberto",
"AVG_RESOLUTION": "Tempo médio de resolução",
"RES_TOTAL": "Total de reservas",
"RES_PAID": "Pagas",
"RES_EXPIRED": "Expiradas",
"RES_REVENUE": "Receita paga",
"BY_INBOX": "Volume por canal",
"RESOLUTION_RATE_TOOLTIP": "Taxa de resolução",
"DAILY_DIST": "Distribuição por dia",
"HOURLY_DIST": "Distribuição por hora",
"PEAK": "Pico"
},
"DASHBOARD": {
"TOTAL_CONVERSATIONS": "Conversas analisadas",
"AVG_SENTIMENT": "Sentimento positivo médio",
"FAQ_GAPS_TOTAL": "Lacunas de FAQ identificadas",
"WEEKS_ANALYZED": "semanas analisadas",
"NO_DATA": "Dados insuficientes. Gere mais relatórios de IA para ver o dashboard.",
"SENTIMENT_TREND": "Tendência de sentimento por semana",
"FAILURES_RANKING": "Ranking de falhas do agente",
"FAILURES_RANKING_HINT": "Situações mais frequentes em que a IA não conseguiu responder bem",
"FAQ_PRIORITY": "FAQ prioritário para criar",
"FAQ_PRIORITY_HINT": "Perguntas que os clientes mais fazem e ainda não estão no FAQ",
"CUSTOMER_BEHAVIOR": "Comportamento dos clientes",
"TOP_TOPICS_TITLE": "Assuntos mais discutidos",
"SUITES_TITLE": "Suítes mais solicitadas",
"COMPLAINTS_TREND": "Volume de reclamações por semana",
"HANDOFFS_TITLE": "Estimativa de transferências para humano",
"HANDOFFS_HINT": "Baseado na frequência de falhas do agente. Rastreamento direto de transferências em breve.",
"TREND_UP": "em alta",
"TREND_DOWN": "em queda",
"TREND_STABLE": "estável",
"WEEKS": "semanas"
},
"FAQ_QUICK_ADD": {
"BUTTON": "Criar FAQ",
"TITLE": "Criar FAQ a partir da sugestão da IA",
"QUESTION_LABEL": "Pergunta (sugerida pela IA)",
"ANSWER_LABEL": "Resposta",
"ANSWER_PLACEHOLDER": "Escreva a resposta para esta pergunta...",
"ASSISTANT_LABEL": "Agente de IA",
"ASSISTANT_PLACEHOLDER": "Selecione o agente",
"CANCEL": "Cancelar",
"SAVE": "Salvar FAQ",
"SUCCESS": "FAQ criado com sucesso!",
"ERROR": "Erro ao criar FAQ. Tente novamente."
}
},
"CAPTAIN_LIFECYCLE": {
"HEADER": "Jornada do Cliente",
"SUBTITLE": "Automação de mensagens WhatsApp no ciclo de vida da reserva",
"TABS": {
"RULES": "Regras",
"SETTINGS": "Configurações",
"HISTORY": "Histórico"
},
"RULES": {
"EMPTY": "Nenhuma regra configurada ainda.",
"CREATE": "Nova regra",
"TEMPLATES_TITLE": "Templates prontos",
"COLUMNS": {
"NAME": "Nome",
"EVENT": "Evento",
"OFFSET": "Offset",
"FILTER": "Filtro",
"STATUS": "Status",
"ACTIONS": "Ações"
},
"STATUS": {
"ENABLED": "Ativo",
"DISABLED": "Desativado"
},
"ACTIONS": {
"EDIT": "Editar",
"DUPLICATE": "Duplicar",
"TOGGLE": "Ativar/Desativar",
"DELETE": "Excluir"
},
"DELETE_CONFIRM": "Tem certeza que deseja excluir esta regra?",
"TOAST": {
"CREATED": "Regra criada com sucesso.",
"UPDATED": "Regra atualizada.",
"DELETED": "Regra excluída."
},
"WIZARD": {
"TITLE_CREATE": "Nova regra",
"TITLE_EDIT": "Editar regra",
"STEP_WHEN": "Quando?",
"STEP_WHO": "Pra quem?",
"STEP_WHAT": "O quê?",
"STEP_REVIEW": "Revisão",
"NEXT": "Próximo",
"BACK": "Voltar",
"SAVE": "Salvar",
"CANCEL": "Cancelar",
"OFFSET_UNIT_LABEL": "min",
"STEP_LABELS": {
"WHEN": "1. Quando?",
"WHO": "2. Pra quem?",
"WHAT": "3. O quê?",
"REVIEW_TAB": "4. Revisão"
},
"REVIEW": {
"NAME": "Nome:",
"EVENT": "Evento:",
"OFFSET": "Offset (min):",
"UNITS": "Unidades:",
"MESSAGE": "Mensagem:"
},
"FIELDS": {
"NAME": "Nome da regra",
"DESCRIPTION": "Descrição",
"EVENT": "Evento gatilho",
"OFFSET_VALUE": "Valor",
"OFFSET_UNIT": "Unidade",
"OFFSET_DIRECTION": "Direção",
"UNITS": "Unidades",
"CATEGORIAS": "Categorias de suíte",
"PERMANENCIAS": "Tipos de permanência",
"MESSAGE_TYPE": "Tipo de mensagem",
"MESSAGE_BODY": "Texto da mensagem",
"PRIORITY": "Prioridade",
"ENABLED": "Regra ativa"
},
"OFFSET_UNITS": {
"MINUTES": "Minutos",
"HOURS": "Horas",
"DAYS": "Dias"
},
"OFFSET_DIRECTIONS": {
"BEFORE": "Antes",
"AFTER": "Depois"
},
"EVENTS": {
"RESERVATION_CONFIRMED": "Reserva confirmada (Pix pago)",
"CHECKIN_SCHEDULED_AT": "Horário de check-in",
"CHECKOUT_SCHEDULED_AT": "Horário de check-out",
"RESERVATION_CANCELLED": "Reserva cancelada",
"RESERVATION_NO_SHOW": "No-show"
},
"MESSAGE_TYPES": {
"TEXT": "Texto simples",
"BUTTONS": "Texto com botões",
"LIST": "Menu de lista",
"URL_BUTTON": "Botão de link"
}
}
},
"SETTINGS": {
"GUARDS_TITLE": "Guards anti-spam",
"QUIET_HOURS_ENABLED": "Ativar quiet hours",
"QUIET_HOURS_FROM": "De",
"QUIET_HOURS_TO": "Até",
"MIN_INTERVAL": "Intervalo mínimo entre mensagens (min)",
"MIN_INTERVAL_HELP": "0 desativa",
"PAUSE_ON_REPLY": "Pausar se o cliente respondeu",
"PAUSE_ON_REPLY_WINDOW": "Janela (min)",
"OPT_OUT_LABEL": "Label de opt-out",
"MAX_PER_RESERVATION_INFO": "Máximo de 5 mensagens por reserva (não configurável)",
"CONCIERGE_TITLE": "Concierge (Sofia) por Unidade",
"CONCIERGE_INBOX": "Inbox WhatsApp",
"CONCIERGE_PERSONA": "Nome da persona",
"CONCIERGE_KNOWLEDGE": "Base de conhecimento (markdown)",
"CONCIERGE_VARIABLES": "Variáveis da unidade",
"CONCIERGE_VARIABLE_KEY": "Chave",
"CONCIERGE_VARIABLE_VALUE": "Valor",
"CONCIERGE_ADD_VARIABLE": "Adicionar variável",
"CONCIERGE_CONFIGURED": "Configurado",
"CONCIERGE_NOT_CONFIGURED": "Não configurado",
"SAVE": "Salvar alterações",
"TOAST": {
"SAVED": "Configurações salvas.",
"CONCIERGE_SAVED": "Concierge da unidade atualizado."
}
},
"HISTORY": {
"EMPTY": "Nenhuma entrega registrada.",
"COLUMNS": {
"RULE": "Regra",
"CUSTOMER": "Cliente",
"RESERVATION": "Reserva",
"STATUS": "Status",
"FIRE_AT": "Disparado em",
"REASON": "Motivo",
"ACTIONS": ""
},
"STATUS": {
"SCHEDULED": "Agendada",
"SENT": "Enviada",
"SKIPPED": "Pulada",
"FAILED": "Falhou",
"CANCELLED": "Cancelada"
},
"FILTERS": {
"STATUS": "Status",
"RULE": "Regra",
"FROM": "De",
"TO": "Até",
"ALL": "Todas"
},
"PREVIEW": "Preview",
"TOTAL": "total",
"PAGINATION": {
"PREV": "Anterior",
"NEXT": "Próxima"
},
"MODAL": {
"TITLE": "Preview da mensagem",
"CLOSE": "Fechar",
"RULE": "Regra",
"STATUS": "Status",
"REASON": "Motivo",
"ERROR": "Erro",
"FIRE_AT": "Fire at",
"SENT_AT": "Sent at",
"RENDERED": "Rendered",
"RESERVATION_ID": "Reserva #"
}
}
},
"CAPTAIN_HERMES_BUILDER": {
"TITLE": "Construtor de Agentes",
"DESCRIPTION": "Crie novos agentes Hermes via chat guiado com o Construtor.",
"HEADER_TITLE": "Construtor de Agentes",
"HEADER_DESCRIPTION": "Converse com o Construtor pra criar um novo agente Hermes. Ele faz perguntas e ao final salva a especificação em JSON pra revisão.",
"RESET": "Limpar conversa",
"RESET_CONFIRM": "Limpar conversa atual com o Construtor?",
"EMPTY_STATE": "Pronto pra criar um novo agente Hermes? Clica em \"Iniciar criação\" e o Construtor te guia.",
"PLACEHOLDER": "Escreva e Enter pra enviar (Shift+Enter pula linha)",
"SEND": "Enviar",
"SESSION_LABEL": "Sessão:",
"SEND_FAILED": "Erro ao enviar: {message}",
"RESET_FAILED": "Falha ao limpar sessão.",
"START": "Iniciar criação",
"TAB_CHAT": "Chat (Construtor)",
"TAB_VERIFY": "Verificação",
"VERIFY": {
"TITLE": "Verificação de agente",
"DESCRIPTION": "Roda os checks de saúde (banco, roteamento, preços, MCP) de um agente Hermes. Para cada falha com botão Refazer, a UI tenta corrigir automaticamente. Demais falhas precisam de hermes-provision na VPS.",
"NO_ASSISTANTS": "Nenhum agente Hermes cadastrado",
"RUN": "Conferir agora",
"RUNNING": "Conferindo...",
"REPAIR": "Refazer",
"REPAIRING": "Reparando...",
"OK_LABEL": "OK",
"FAILS_LABEL": "falhas",
"WARN_LABEL": "atenção",
"OF_TOTAL": "de {total} checks",
"VERDICT_PASS": "Pode soltar",
"VERDICT_FAIL": "Há falhas críticas — corrija antes",
"EMPTY": "Selecione um agente e clique em Conferir agora pra rodar a verificação.",
"EMPTY_RESULTS": "Sem checks retornados — o agente foi removido?",
"REPAIR_FAILED": "Falha: {message}",
"REPAIR_OK": "Reparado: {message}",
"FETCH_FAILED": "Erro carregando assistentes: {message}",
"VALIDATE_FAILED": "Falha ao validar: {message}",
"CATEGORY_DB": "Banco de dados",
"CATEGORY_PRICING": "Preços",
"CATEGORY_ROUTING": "Roteamento Captain → Hermes",
"CATEGORY_HUMANIZATION": "Humanização (typing/delay/galeria)",
"CATEGORY_MCP": "Tools MCP registradas",
"CATEGORY_OTHER": "Outros"
}
}
}