ViniciusKhan/analytical_force
0
1# ============================================================2# Analytical-Force — Exemplo de variáveis de ambiente3# ------------------------------------------------------------4# Copie este arquivo para `.env` e preencha com valores reais.5# NUNCA faça commit do arquivo `.env` com credenciais.6#7# Regra crítica: o agente NÃO usa APIs comerciais pagas de LLM8# (OpenAI, Anthropic, Groq, Gemini). Apenas modelos locais/públicos.9# ============================================================10 11# ----------------------- Salesforce ------------------------12# Modo de autenticação. Métodos suportados:13# oauth_refresh_token -> OAuth 2.0 Refresh Token (PADRÃO, recomendado).14# soap_legacy -> login() SOAP com usuário/senha/token (fallback).15# Algumas orgs bloqueiam o SOAP login() em versões recentes da API16# (erro INVALID_OPERATION), por isso o padrão é OAuth.17SALESFORCE_AUTH_MODE=oauth_refresh_token18 19SALESFORCE_INSTANCE_URL=https://pensotecnologia.my.salesforce.com20SALESFORCE_CLIENT_ID=21SALESFORCE_CLIENT_SECRET=22SALESFORCE_REFRESH_TOKEN=23SALESFORCE_API_VERSION=64.024 25# Modo somente leitura no Salesforce. Mantenha "true": o agente apenas26# consulta dados (SOQL). Nenhuma operação de escrita é implementada.27SALESFORCE_READ_ONLY_MODE=true28 29# Campos legados — usar apenas se SALESFORCE_AUTH_MODE=soap_legacy.30SALESFORCE_USERNAME=31SALESFORCE_PASSWORD=32SALESFORCE_SECURITY_TOKEN=33# Use "login" para produção e "test" para sandbox.34SALESFORCE_DOMAIN=login35 36# -------------------------- Turso --------------------------37# Banco principal do projeto (libSQL/Turso).38TURSO_DATABASE_URL=39TURSO_AUTH_TOKEN=40 41# ------------------------- Modelo --------------------------42# Provider de modelo: template | ollama | transformers43# template -> relatório por regras, sem IA (sempre funciona).44# ollama -> modelo local via API HTTP do Ollama (recomendado).45# transformers -> modelo público via Hugging Face Transformers.46#47# Recomendação: comece com MODEL_PROVIDER=template para validar o48# pipeline de dados; depois mude para ollama para ativar a interpretação.49MODEL_PROVIDER=ollama50 51# Ollama local (não exige autenticação para acesso local).52OLLAMA_BASE_URL=http://localhost:1143453OLLAMA_MODEL=llama3.1:8b54 55# Hugging Face Transformers (opcional). Sem modelo fixo no código.56HF_MODEL_REPO_ID=57HF_DEVICE=cpu58# Tokens gerados pelo modelo. Menor = mais rápido (em CPU faz muita diferença).59# 256–320 costuma bastar para o resumo executivo.60HF_MAX_NEW_TOKENS=32061 62# Inferência HOSPEDADA (MODEL_PROVIDER=hf_inference) — rápido e online, sem CPU.63# O modelo roda nos provedores roteados pela Hugging Face. Requer HF_TOKEN com64# permissão de Inference Providers. Free tier ~US$0,10/mês (suficiente p/ pouco uso).65HF_INFERENCE_MODEL=Qwen/Qwen2.5-7B-Instruct66# Provedor específico (ex.: together, fireworks-ai). Vazio = roteamento automático.67HF_INFERENCE_PROVIDER=68HF_TOKEN=69 70# Liga/desliga a interpretação por IA. Com "false", usa sempre template.71ENABLE_AI_INTERPRETATION=true72 73# ------------------------ Relatório ------------------------74REPORT_TIMEZONE=America/Sao_Paulo75# Destinatário PRINCIPAL do relatório (fixo, via env/Secret do Space).76REPORT_RECIPIENT_EMAIL=77# E-mails em CÓPIA (Cc) são cadastrados pelo painel (React) e persistidos no78# Turso (tabela agent_config, chave "email_cc_recipients") — não precisam de79# variável de ambiente nem de redeploy. Ver endpoints GET/POST/DELETE80# /config/email-cc em api.py.81 82# ---------------------- E-mail: SMTP (uso local) -----------83# Funciona localmente. Em Hugging Face Spaces o SMTP é BLOQUEADO — use a84# Gmail API (abaixo), que envia por HTTPS.85SMTP_HOST=86SMTP_PORT=87SMTP_USER=88SMTP_PASSWORD=89 90# ------------- E-mail: Gmail API (HTTP/OAuth) --------------91# Preferido em produção/online (passa por firewalls que bloqueiam SMTP).92# Como obter o refresh token: Google Cloud Console -> ativar "Gmail API" ->93# criar credencial OAuth -> no OAuth Playground (https://developers.google.com/oauthplayground)94# usar suas credenciais e autorizar o escopo95# https://www.googleapis.com/auth/gmail.send -> trocar pelo refresh token.96#97# ATENÇÃO: se a tela de consentimento OAuth do app no Google Cloud Console98# estiver em status "Testing" (não publicada), o refresh_token EXPIRA em99# ~7 dias e todo envio passa a falhar com RuntimeError/"invalid_grant" nos100# logs (é a causa mais comum desse erro). Publique o app (ou adicione os101# e-mails remetente/destinatário como "Test users" e gere um novo refresh102# token quando expirar) para evitar a expiração periódica.103GMAIL_CLIENT_ID=104GMAIL_CLIENT_SECRET=105GMAIL_REFRESH_TOKEN=106# E-mail remetente (a conta autorizada no OAuth acima).107GMAIL_SENDER=108 109# --------------------- ClickUp (opcional) ------------------110CLICKUP_API_TOKEN=111CLICKUP_LIST_ID=112# Responsável das tarefas criadas. Informe o e-mail do membro (resolvido via113# API da lista) OU, preferencialmente, o ID numérico do usuário no ClickUp.114# Deixe em branco para criar tarefas sem responsável.115CLICKUP_ASSIGNEE_EMAIL=116CLICKUP_ASSIGNEE_ID=117# Criação automática de tarefas no ClickUp para alertas críticos.118# Mantenha "false" até validar manualmente o comportamento.119ENABLE_CLICKUP_AUTO_CREATE=false120# Gera um plano de ação por IA (Ollama) na descrição da tarefa. Requer121# MODEL_PROVIDER=ollama + ENABLE_AI_INTERPRETATION=true. false = só dados.122CLICKUP_AI_TASKS=true123 124# ------------------- Configurações de risco ----------------125LEAD_MAX_HOURS_WITHOUT_TASK=24126OPPORTUNITY_MAX_DAYS_WITHOUT_ACTIVITY=7127CONVERSION_DROP_THRESHOLD_PERCENT=20128PIPELINE_DROP_THRESHOLD_PERCENT=15129# Metas/limites adicionais usados pelo motor de risco.130LEAD_FIRST_TASK_TARGET_HOURS=8131OVERDUE_TASKS_OWNER_THRESHOLD=5132# Acima deste valor a oportunidade é considerada "alto valor".133HIGH_VALUE_OPPORTUNITY_AMOUNT=50000134# Valor MÍNIMO para a oportunidade entrar na análise (0 = todas).135OPPORTUNITY_MIN_AMOUNT=0136SATISFACTION_MIN_SCORE=7.0137 138# ------------- Campos customizados do Salesforce -----------139# Use os nomes de API EXATOS dos campos na sua org. Campos que não140# existirem são automaticamente ignorados (o agente valida via describe e141# registra um aviso em log), então deixe em branco os que sua org não tiver.142SF_FIELD_FIRST_TASK=FirstTask__c143# Campos de Opportunity são opcionais — preencha apenas se existirem na org.144SF_FIELD_OPP_MOTIVO_PERDA=145# Origem: deixe em branco para usar o campo padrão LeadSource.146SF_FIELD_OPP_ORIGEM=147SF_FIELD_OPP_TIPO_VENDA=148SF_FIELD_OPP_PRODUTO=149SF_FIELD_OPP_PROXIMA_ACAO=150SF_FIELD_OPP_DIAS_SEM_ATIVIDADE=151SF_FIELD_OPP_GC_NOME=152SF_FIELD_OPP_VALOR_MENSAL=153 154# ---- Fonte de Satisfação (módulo configurável) ----155# Objeto e campos da pesquisa de satisfação. Deixe SF_SAT_OBJECT em branco156# para manter o módulo desativado. O campo de sentimento é categórico e o157# agente deriva uma nota 0–10 (Verde=10, Amarelo=5, Vermelho=0).158SF_SAT_OBJECT=159SF_SAT_DATE_FIELD=Reply_Date__c160SF_SAT_SENTIMENT_FIELD=Sentimento__c161SF_SAT_REASON_FIELD=area_de_insatisfacao_motivador__c162SF_SAT_COMMENT_FIELD=Resumo__c163# Nota abaixo deste limite conta como avaliação negativa (detrator).164SF_SAT_NEGATIVE_THRESHOLD=5165 166# ---- Fonte de Cancelamento (módulo configurável) ----167# Por padrão, oportunidades com data de cancelamento no dia. Deixe168# SF_CANC_OBJECT em branco para manter o módulo desativado.169SF_CANC_OBJECT=170SF_CANC_DATE_FIELD=DATA_CANCELAMENTO__c171SF_CANC_MRR_FIELD=Valor_Liquido_Mensal__c172SF_CANC_REASON_FIELD=Motivo_Cancelamento__c173SF_CANC_PRODUCT_FIELD=ProdutoPrincipal__c174SF_CANC_OWNER_FIELD=GC_Nome__c175 176# ---- Fonte de Contratos (módulo de CONSULTA — busca somente leitura) ----177# Objetos usados pela tela de "Busca" do painel (contratos, itens de contrato178# e clientes). NÃO participa do pipeline diário de métricas — é lido sob179# demanda (busca ao vivo no Salesforce) e cacheado no Turso (busca híbrida).180SF_CONTRACT_OBJECT=Contrato_oPT__c181SF_CONTRACT_ITEM_OBJECT=Item_do_Contrato__c182# Nome de API do campo de LOOKUP do Contrato -> Account (ex.: "Conta__c").183# Deixe em branco se não souber: a busca de contratos por cliente fica184# desativada até você preencher (consulte Setup -> Gerenciador de Objetos ->185# Contrato_oPT__c -> Campos, e copie o "Nome de API" do campo de lookup).186SF_CONTRACT_ACCOUNT_FIELD=187# Nome de API do campo de LOOKUP do Item de Contrato -> Contrato (ex.:188# "Contrato__c"). Deixe em branco se não souber: a tela de detalhe do189# contrato não lista os itens vinculados até você preencher.190SF_CONTRACT_ITEM_PARENT_FIELD=191# Campo de relacionamento para exibir o NOME da conta nas listagens de192# contrato (ex.: "Conta__r.Name"). Deixe em branco se não souber.193SF_CONTRACT_ACCOUNT_NAME_FIELD=194 195# ---- Fonte de Reajuste de Contrato (módulo configurável) ----196# Alimenta a análise diária de reajuste no relatório/e-mail: quanto foi197# reajustado no MÊS, comparando o valor atual com o valor anterior do198# contrato. Deixe SF_CONTRACT_VALUE_FIELD ou SF_CONTRACT_PREVIOUS_VALUE_FIELD199# em branco para manter este módulo DESATIVADO (nunca inventamos nomes de200# campo — regra 3/16/17 do projeto).201# Campo com o valor ATUAL do contrato.202SF_CONTRACT_VALUE_FIELD=203# Campo com o valor ANTERIOR ao reajuste.204SF_CONTRACT_PREVIOUS_VALUE_FIELD=205# Campo com o percentual/valor de reajuste já informado no contrato206# (opcional). Se vazio, o reajuste é ESTIMADO como (valor atual - anterior).207SF_CONTRACT_READJUSTMENT_FIELD=208# Unidade do campo acima: "amount" (R$, padrão) ou "percent" (campo209# percent(16,2) da org, ex.: "Reajuste_aplicado__c" com valor 4.39 = 4,39%).210# Use "percent" se o campo acima for do tipo Percentual no Salesforce.211SF_CONTRACT_READJUSTMENT_FIELD_UNIT=amount212# Campo de DATA em que o reajuste foi aplicado (usado para filtrar os213# reajustes do mês corrente). Obrigatório para o módulo funcionar.214SF_CONTRACT_READJUSTMENT_DATE_FIELD=215 