BONO CONTA — BASE DE CONHECIMENTO TÉCNICA
Última atualização: 14/06/2026 · Esta página é a fonte primária de contexto para o Claude Code.
Para briefar uma nova sessão: leia esta página e diga “leia a página stack-tecnico e retome o contexto do projeto Bono Conta”.
MONITOR DE HARDWARE — TEMPO REAL
Monitor disponível apenas para administradores.
1. INFRAESTRUTURA
| Item | Valor |
| Plataforma | WordPress 7.0 + PHP 8.3-FPM + Nginx |
| Domínio | bonoconta.com.br |
| IPs do servidor | 45.236.222.166 / 45.236.223.245 |
| Webroot | /var/www/bonoconta/ |
| Tema ativo | /wp-content/themes/bonoconta/ |
| SMTP host | mail.ita.locaweb.com.br:587 (STARTTLS) |
| SMTP user / From | Site@bonoconta.com.br |
| Email admin | contato@bonoconta.com.br |
| BCC global | brunojcruz@gmail.com — cópia de todos os emails (exceto quando TO já é este endereço) |
| Logs Nginx | /var/log/nginx/bonoconta_access.log · /var/log/nginx/bonoconta_error.log |
| Log PHP-FPM | /var/log/php8.3-fpm.log |
2. ARQUIVOS PRINCIPAIS
| Arquivo | Conteúdo (~linhas) |
functions.php | Toda a lógica de enriquecimento, monitoramento, APIs, cron, CF7, emails (~3300 linhas) |
inc/lead-documents.php | Geradores de HTML por seção (receita, cgu, cnj, etc.) + bc_gerar_todos_documentos() |
inc/lead-reports.php | Templates de relatório e painel de leads |
inc/email-marketing.php | Integração com plataforma de email marketing |
inc/admin-email-panel.php | Painel admin para disparo manual de emails |
inc/email-template.php | Template base de emails HTML |
uploads/cse-config.xml | XML dos 50 domínios do Google CSE (para importação) |
uploads/bc-leads/{cnpj}/{YYYY-MM-DD_HH-MM-SS}/ | Relatórios HTML gerados por lead |
3. WP OPTIONS — CONFIGURAÇÃO
| Opção | Valor atual | Descrição |
bc_api_google_search | AIzaSyBF4F5gVto3nNjh81kx… | Google Custom Search API Key |
bc_api_google_cse | 4510783fb4784406b | ID do mecanismo de pesquisa personalizado |
bc_datajud_api_key | auto-gerenciado (default hardcoded em bc_consultar_cnj()) | Chave da API pública DataJud/CNJ — atualizada automaticamente pelo monitor |
bc_datajud_base_url | auto-gerenciado (default: https://api-publica.datajud.cnj.jus.br/) | URL base da API DataJud — atualizada automaticamente pelo monitor |
bc_datajud_status | ok / erro / recuperado | Status da última verificação do DataJud |
bc_datajud_ultimo_check | datetime | Timestamp da última verificação |
Para alterar chave/URL do DataJud manualmente: wp option update bc_datajud_api_key “NOVA_CHAVE” e bc_datajud_base_url “NOVA_URL”
4. BANCO DE DADOS
wp_bc_lead_monitor
| Coluna | Tipo | Descrição |
| id | INT PK | Auto-incremento |
| cnpj | VARCHAR(14) | CNPJ sem máscara |
| razao_social | VARCHAR | Nome da empresa |
| email_contato | VARCHAR | Email do lead para alertas |
| hash_dados | VARCHAR(32) | MD5 dos 11 campos monitorados |
| resumo_json | TEXT | Snapshot dos campos + lista de sócios + timestamp |
| ultima_check | DATETIME | Último enriquecimento realizado |
| proxima_check | DATETIME | Próximo enriquecimento agendado (diário) |
| total_alertas | INT | Contador de alertas enviados |
| criado_em | DATETIME | Data de cadastro no monitor |
| atualizado_em | DATETIME | Última atualização do registro |
5. PIPELINE DE ENRIQUECIMENTO — 13 FONTES
| # | Função (functions.php) | Linha | API / Fonte | Dado obtido |
| 1 | bc_consultar_cnpj() | L808 | cnpj.ws / Receita Federal | Razão social, situação cadastral, endereço, sócios, Simples Nacional, capital social |
| 2 | bc_consultar_cgu_ceis() | L1148 | apidados.cgu.gov.br — CEIS | Sanções — empresas impedidas de contratar com governo |
| 3 | bc_consultar_cgu_cnep() | L1195 | apidados.cgu.gov.br — CNEP | Penalidades administrativas severas |
| 4 | bc_consultar_acordos_leniencia() | L1495 | apidados.cgu.gov.br — Acordos | Acordos de leniência (Lei Anticorrupção 12.846/2013) |
| 5 | bc_consultar_contratos_publicos() | L1229 | api.portaldatransparencia.gov.br | Contratos firmados com o governo federal |
| 6 | bc_consultar_convenios() | L1652 | api.portaldatransparencia.gov.br | Convênios — recursos recebidos da União |
| 7 | bc_consultar_emendas() | L1732 | api.portaldatransparencia.gov.br | Emendas parlamentares recebidas |
| 8 | bc_consultar_beneficios_federais() | L1592 | api.portaldatransparencia.gov.br | Renúncias fiscais (Simples, MEI, RECOPA, ZFM etc.) |
| 9 | bc_consultar_cvm() | L1303 | dados.cvm.gov.br | Registro em bolsa — S.A. de capital aberto |
| 10 | bc_consultar_cnj() | L1389 | api-publica.datajud.cnj.jus.br (Elasticsearch) | Processos judiciais — via Google Search + DataJud |
| 11 | bc_consultar_registro_br() | L1536 | rdap.registro.br | Domínios .br, ASNs, blocos IP registrados |
| 12 | bc_consultar_anatel() | L1575 | sistemas.anatel.gov.br | Outorgas de telecomunicações |
| 13 | bc_consultar_google_search() | L2312 | customsearch.googleapis.com (CSE) | Reputação, menções, reclamações na web |
6. CNJ DATAJUD — ESTRATÉGIA E IMPLEMENTAÇÃO
Limitação crítica: O campo partes NÃO está disponível na API pública do DataJud. Queries por CNPJ/CPF direto retornam 0 documentos.
Estratégia implementada (pipeline de 2 etapas)
- Google Search busca páginas com o nome da empresa no Jusbrasil → extrai números CNJ do texto dos snippets com regex
/d{7}-d{2}.d{4}.d.d{2}.d{4}/
- DataJud valida cada número extraído via
POST api_publica_{index}/_search com match: numeroProcesso
bc_datajud_index_from_numero() — mapeamento J/TT → índice
Número CNJ (20 dígitos sem máscara): NNNNNNN DD AAAA J TT OOOO
0-6 7-8 9-12 13 14-15 16-19
J (posição 13) = ramo da Justiça:
1 → stf 3 → stj 7 → stm
4 → trf{TT} (TT: 1=trf1, 2=trf2, 3=trf3, 4=trf4, 5=trf5, 6=trf6)
5 → tst(TT=0) ou trt{TT} (TT: 1-24)
6 → tre-{uf} (TT: 1=ac, 2=al, 3=ap, 4=am, 5=ba ... 27=to)
8 → tj{uf} (TT: 1=ac, 2=al, 3=ap, 4=am, 5=ba ... 27=to)
9 → tjmmg(13) / tjmrs(23) / tjmsp(26)
Configuração da API (WP options)
bc_datajud_api_key → padrão: cDZHYzlZa0JadVREZDJCendQbXY6SkJlTzNjLV9TRENyQk1RdnFKZGRQdw==
bc_datajud_base_url → padrão: https://api-publica.datajud.cnj.jus.br/
Endpoint de teste: POST {base_url}api_publica_tjam/_count (retorna count > 0 se API up)
Wiki oficial: https://datajud-wiki.cnj.jus.br/
7. GOOGLE CUSTOM SEARCH — 50 DOMÍNIOS
Limite: 50 domínios no CSE. Plano gratuito: 100 queries/dia. API Key: bc_api_google_search. CSE ID: bc_api_google_cse. O arquivo /uploads/cse-config.xml pode ser reimportado em programmablesearchengine.google.com se necessário.
Governamentais e Judiciário
| Domínio | Tipo |
| comprasnet.gov.br | Compras governamentais |
| portaldatransparencia.gov.br | Transparência federal |
| mj.gov.br | Ministério da Justiça |
| cvm.gov.br | Comissão de Valores Mobiliários |
| bacen.gov.br | Banco Central |
| anvisa.gov.br | Agência de Vigilância Sanitária |
| ans.gov.br | Agência Nacional de Saúde |
| anatel.gov.br | Agência de Telecomunicações |
| cade.gov.br | Conselho Admin. de Defesa Econômica |
| carf.fazenda.gov.br | Conselho Admin. de Recursos Fiscais |
| consumidor.gov.br | Plataforma de reclamações gov. |
| tcu.gov.br | Tribunal de Contas da União |
| mpf.mp.br | Ministério Público Federal |
| mp.am.gov.br | MP do Amazonas |
| tce.am.gov.br | Tribunal de Contas do AM |
| suframa.gov.br | Zona Franca de Manaus |
| procon.am.gov.br | Procon Amazonas |
| procon.sp.gov.br | Procon São Paulo |
Tribunais
| Domínio | Tribunal |
| stf.jus.br | Supremo Tribunal Federal |
| stj.jus.br | Superior Tribunal de Justiça |
| tst.jus.br | Tribunal Superior do Trabalho |
| trf1.jus.br | TRF 1ª Região |
| trf2.jus.br | TRF 2ª Região |
| trf3.jus.br | TRF 3ª Região |
| trf4.jus.br | TRF 4ª Região |
| trf5.jus.br | TRF 5ª Região |
| trf6.jus.br | TRF 6ª Região |
| trt11.jus.br | TRT 11ª Região (AM/RR) |
| tjam.jus.br | TJ Amazonas |
| tjsp.jus.br | TJ São Paulo |
Jurídico / Imprensa Jurídica
| Domínio | Tipo |
| jusbrasil.com.br | Portal jurídico — fonte primária de números CNJ |
| conjur.com.br | Consultor Jurídico |
| jota.info | Jota — jornalismo jurídico |
| migalhas.com.br | Migalhas — notícias jurídicas |
Imprensa / Negócios
| Domínio | Tipo |
| g1.globo.com | G1 Globo |
| valor.globo.com | Valor Econômico |
| estadao.com.br | O Estado de São Paulo |
| uol.com.br | UOL (cobre Folha, Band etc.) |
| reuters.com | Reuters |
| bloomberg.com.br | Bloomberg Brasil |
| cnnbrasil.com.br | CNN Brasil |
| exame.com.br | Exame |
| infomoney.com.br | InfoMoney |
| cartacapital.com.br | Carta Capital |
| istoe.com.br | IstoÉ |
| veja.abril.com.br | Veja |
| metropoles.com | Metrópoles |
| gazetadopovo.com.br | Gazeta do Povo |
| correiobraziliense.com.br | Correio Braziliense |
Consumidor
| Domínio | Tipo |
| reclameaqui.com.br | Reclamações de consumidores |
8. FUNÇÕES PRINCIPAIS (functions.php)
| Função | Linha | Descrição |
bc_enriquecer_lead(string $cnpj) | L2473 | Orquestrador completo: chama as 13 APIs, 3 queries Google. Usar para novos leads. |
bc_enriquecer_lead_monitor(string $cnpj) | L2393 | Versão leve: 1 query Google (Jusbrasil). Usar no monitoramento diário para preservar quota. |
bc_consultar_google_search(string $razao) | L2312 | 3 queries: geral + reputação + Jusbrasil focado. Retorna até 8 resultados deduplicados. |
bc_consultar_google_search_monitor(string $razao) | L2421 | 1 query Jusbrasil. Retorna até 5 resultados. Preserva quota diária de 100. |
bc_consultar_cnj(string $cnpj, $razao, $fantasia, array $google_resultados) | L1389 | Extrai números CNJ dos snippets → valida no DataJud. Retorna status: ok|links_externos. |
bc_datajud_index_from_numero(string $numero) | L1355 | Mapeia número CNJ (20 dígitos) ao índice Elasticsearch (tjam, trt11, trf1 etc.). |
bc_hash_enriquecimento(array $dados) | L1764 | MD5 dos 11 campos de detecção de mudança. |
bc_resumo_compacto(array $dados) | L1782 | Snapshot compacto para armazenar no banco e comparar no diff. |
bc_monitor_registrar(string $cnpj, string $email, array $dados) | L1807 | INSERT ou UPDATE no wp_bc_lead_monitor. |
bc_enviar_alerta_mudanca(object $reg, array $dados_novo, array $resumo_ant, string $dest, string $url) | L1842 | Email HTML com tabela de diff antes/depois. |
bc_executar_monitoramento() | L2244 | Cron hook bc_monitorar_leads. Processa até 100 leads/dia, diff + alerta. |
bc_datajud_health_check() | L2043 | Testa API DataJud via _count no índice TJAM. |
bc_datajud_scrape_wiki() | L2080 | Raspa datajud-wiki.cnj.jus.br em busca de nova chave/URL. |
bc_datajud_tentar_recuperar() | L2131 | Scrape → valida nova config → salva em WP options se válida. |
bc_executar_monitoramento_datajud() | L2177 | Cron hook bc_verificar_datajud. Orquestra health check + auto-recuperação + alerta. |
bc_gerar_todos_documentos(string $cnpj, string $razao, array $dados, string $tipo, string $origem, array $mudancas) | lead-documents.php L704 | Gera pasta com HTMLs em uploads/bc-leads/{cnpj}/{timestamp}/ |
9. CRON JOBS
| Horário | Hook | Função | Descrição |
| 05:30 diário | bc_verificar_datajud | bc_executar_monitoramento_datajud() | Health check DataJud → auto-recuperação se falhar → email alerta |
| 06:00 diário | bc_monitorar_leads | bc_executar_monitoramento() | Re-enriquece leads com proxima_check vencida (LIMIT 100), detecta mudanças |
| Única vez | bc_lead_processar | closure em functions.php L3094 | Pipeline completo: enriquecimento + monitor + docs + emails + CRM + marketing |
10. FLUXO DE DADOS — FORMULÁRIO → ENRIQUECIMENTO
1. Lead preenche CF7 (form IDs: 15, 16, 17, 18, 92)
Campos: bc_name, bc_email, bc_phone, bc_company, bc_cnpj, bc_service, bc_message
2. wpcf7_skip_mail → TRUE (email padrão CF7 suprimido)
wpcf7_mail_sent → agenda bc_lead_processar + dispara loopback /?doing_wp_cron=1
3. Job bc_lead_processar (assíncrono, ~30-120s):
a. bc_enriquecer_lead($cnpj) → 14 APIs + 3 Google queries
b. bc_monitor_registrar() → INSERT/UPDATE wp_bc_lead_monitor
c. bc_gerar_todos_documentos()→ HTML em uploads/bc-leads/{cnpj}/{timestamp}/
d. Email ADMIN: TO contato@bonoconta.com.br, BCC brunojcruz@gmail.com
- Template CF7 + bloco enriquecimento + botão perfil + link relatório
e. Email CONFIRMAÇÃO: TO {email_lead} — "Recebemos seu contato!"
f. bc_crm_push_lead() → CRM
g. bc_em_subscribe() → email marketing
11. MONITORAMENTO DIÁRIO — FLUXO
05:30 — bc_verificar_datajud:
bc_datajud_health_check() → POST api_publica_tjam/_count
✓ OK: registra status, encerra
✗ ERRO:
bc_datajud_tentar_recuperar():
bc_datajud_scrape_wiki() → raspa 3 páginas da wiki
extrai ApiKey via regex /ApiKeys+([A-Za-z0-9+/=_-]{20,})/
extrai URL via regex /https://[a-z0-9-]+.datajud.cnj.jus.br//
valida nova config com _count
se válida → update_option('bc_datajud_api_key', ...) + update_option('bc_datajud_base_url', ...)
email alerta: ✅ recuperado OU 🚨 falha manual necessária
06:00 — bc_monitorar_leads:
SELECT * FROM wp_bc_lead_monitor WHERE proxima_check <= NOW() LIMIT 100
para cada lead:
bc_enriquecer_lead_monitor($cnpj) → 1 query Google (Jusbrasil) + 12 outras APIs
bc_hash_enriquecimento($dados) → MD5 dos 11 campos
se hash mudou:
calcula diff campo a campo (situacao, simples, ceis, cnep, acordos, cnj,
dominios, socios_n, convenios, emendas, contratos)
bc_gerar_todos_documentos(..., $mudancas)
bc_enviar_alerta_mudanca() → email HTML com diff antes/depois
incrementa total_alertas
UPDATE proxima_check = NOW() + INTERVAL 1 DAY
12. DETECÇÃO DE MUDANÇAS — 11 CAMPOS
| Campo | Fonte | Tipo |
| situacao | Receita Federal | string (ATIVA, SUSPENSA etc.) |
| simples | Receita Federal | string (Sim/Não) |
| ceis | CGU CEIS | int (total sanções) |
| cnep | CGU CNEP | int (total penalidades) |
| acordos | CGU Acordos | int (total acordos) |
| cnj | DataJud via Google | int (total processos) ou "n/a" |
| dominios | Registro.br | int (total domínios .br) |
| socios_n | Receita Federal | int (contagem de sócios) |
| convenios | Portal Transparência | int (total convênios) |
| emendas | Portal Transparência | int (total emendas) |
| contratos | Portal Transparência | int (total contratos) |
Hash: md5(json_encode($resumo)). Se qualquer campo mudar, o hash difere e o alerta é disparado.
13. CF7 — FORMULÁRIOS
| Form ID | Observação |
| 15, 16, 17, 18, 92 | Formulários de captura de leads. Email padrão CF7 suprimido via wpcf7_skip_mail. Processados em background via bc_lead_processar. |
14. EMAIL — SISTEMA BCC
Filtro wp_mail (functions.php L3244):
- Adiciona BCC: brunojcruz@gmail.com a TODOS os emails do site
- EXCETO quando TO já é brunojcruz@gmail.com (evita conflito TO+BCC)
Email admin (step 4 do job):
- TO: contato@bonoconta.com.br
- BCC explícito: brunojcruz@gmail.com (+ filtro global, mas não duplica)
- Reply-To: {email_lead}
Email confirmação (step 5 do job):
- TO: {email_lead}
- From: Bono Conta
- BCC: brunojcruz@gmail.com (via filtro global, se TO ≠ brunojcruz@gmail.com)
Alertas de monitoramento:
- TO: contato@bonoconta.com.br
- From: Bono Conta Monitor
Alertas DataJud:
- TO: contato@bonoconta.com.br
- From: Bono Conta Monitor
15. HISTÓRICO DE DESENVOLVIMENTO
CNJ DataJud — Descoberta e Implementação
- Descoberto que o campo
partes não existe na API pública DataJud (query exists retorna 0 documentos)
- Solução: Google CSE → extrair números CNJ via regex → validar no DataJud por
numeroProcesso
bc_datajud_index_from_numero() criada para mapear número aos índices (tjam, trt11, trf1...)
- Testado com sucesso: TRT11
0001199-17.2023.5.11.0003 e TJAM 0085796-70.2026.8.04.1000
- Chave/URL migradas de hardcode para
get_option() — permite auto-atualização
Google CSE — 50 Domínios
- Limite do CSE: exatamente 50 domínios. Importação via XML em programmablesearchengine.google.com
- Arquivo de configuração:
/uploads/cse-config.xml
- Problema encontrado: erro "padrão já existe" ao tentar adicionar — alguns domínios já estavam cadastrados da rodada anterior
- Adicionados via nova rodada: trt11.jus.br, mpf.mp.br, mp.am.gov.br, tcu.gov.br, suframa.gov.br, tce.am.gov.br
- Removidos para abrir espaço: anac.gov.br, sencon.gov.br, poder360.com.br, agenciabrasil.ebc.com.br, band.uol.com.br (coberto por *.uol.com.br), folha.uol.com.br (coberto por *.uol.com.br)
Rotina de Monitoramento de Leads
- Bug 1 corrigido:
socios_n ausente do bc_resumo_compacto() — hash detectava mudança mas diff do email não mostrava. Adicionado 'socios_n' => count($r['socios'] ?? [])
- Bug 2 corrigido: monitoramento usava 3 Google queries/lead → 60 de 100 queries diárias gastas. Criado
bc_enriquecer_lead_monitor() com 1 query Jusbrasil
- Bug 3 corrigido:
proxima_check = +7 days → alterado para +1 day (verificação verdadeiramente diária)
- Bug 4 corrigido:
LIMIT 20 → LIMIT 100
- Bug 5 corrigido:
$mudancas vazio passado para gerador de documentos → agora calcula o diff real e passa
Monitor de API DataJud
- Rotina diária às 05:30 (antes do monitoramento de leads às 06:00)
- Testa via
_count no índice TJAM (sempre retorna count > 0 se API ativa)
- Em caso de falha: raspa 3 páginas da wiki oficial, extrai nova chave/URL, valida antes de salvar
- Salva em
bc_datajud_api_key e bc_datajud_base_url (WP options)
- Envia email ✅ recuperado ou 🚨 falha manual necessária
BCC Global — Correção
- Filtro
wp_mail adiciona BCC brunojcruz@gmail.com a todos os emails
- Bug identificado: quando email de confirmação vai TO: brunojcruz@gmail.com, o filtro adicionava também BCC: brunojcruz@gmail.com → possível rejeição silenciosa pelo Locaweb
- Correção: verificar se TO já é brunojcruz@gmail.com antes de adicionar BCC
16. COMO BRIEFAR O CLAUDE CODE A PARTIR DESTA PÁGINA
Início de nova sessão:
1. Abra o terminal no diretório /home/upnetix
2. Inicie o Claude Code: claude
3. Digite: "Leia a página privada WordPress ID 111 (stack-tecnico) em bonoconta.com.br e retome o contexto completo do projeto Bono Conta"
4. Ou forneça o conteúdo desta página diretamente como contexto inicial
Comando WP-CLI para ler o conteúdo:
wp --allow-root --path=/var/www/bonoconta post get 111 --field=post_content
Para atualizar esta página após novos desenvolvimentos:
wp --allow-root --path=/var/www/bonoconta post update 111 --post_content="$(cat /tmp/novo-conteudo.html)"
Ou peça ao Claude Code: "Atualize a página stack-tecnico (ID 111) com as mudanças deste desenvolvimento"
22. EMAIL — ENVIO SMTP (Locaweb)
| Item | Valor |
| Plugin | WP Mail SMTP (mailer: smtp) |
| Host | mail.ita.locaweb.com.br · porta 587 · TLS |
| Remetente | Site@bonoconta.com.br |
| From confirmação | Site@bonoconta.com.br |
Diagnóstico crítico (não esquecer): o host email.locaweb.com.br resolve para IPs internos (10.31.70.x) — inacessível de fora. As portas 25/465/587 desse host ficam bloqueadas. A solução é mail.ita.locaweb.com.br (IP público 191.252.112.194), que aceita conexão. Porta 25 de saída direta para MX também é bloqueada pela rede do VPS — por isso NÃO usar Postfix/MTA local. Gmail SMTP (587/465) está acessível como alternativa.
BCC seletivo: filtro wp_mail em functions.php adiciona Bcc brunojcruz@gmail.com APENAS em e-mails de notificação admin (assunto contém "Novo Lead"). Confirmação ao cliente vai SEM bcc.
23. FRONT-END DO BLOG
| Componente | Implementação |
| Hero carrossel | bc_blog_hero_carousel() (functions.php) — 4 artigos mais recentes + 6 aleatórios; autoplay 6s; clicar no slide pausa para leitura; botão "Ler o Artigo"; setas/dots/swipe/teclado. CSS .bc-blog-hero, JS em main.js. |
| Cards com miniatura | .bc-blog-card em index.php — featured image no topo (aspect 16:9, zoom no hover), categoria, título, excerpt (3 linhas), data, link. |
| Compartilhamento | bc_share_buttons($pos) nas 3 posições (hero/meio/final). Botão "Compartilhar" (Web Share API: título+texto+link, miniatura via OG) + "WhatsApp" (wa.me direto, sem prompt de app). Instagram removido (Story não aceita pré-preenchimento via web). |
| Modal LGPD | Modal em header.php, aberto só por .bc-lgpd-trigger. Atributo HTML hidden + .bc-lgpd-overlay[hidden]{display:none!important} elimina o flash (FOUC) no carregamento. |
24. RASTREAMENTO DE CONVERSÃO (Google Ads / GA4)
| Item | Valor |
| Arquivo | assets/js/conversions.js |
| Evento | generate_lead no wpcf7mailsent + micro-conversão form_start |
| Value-based bidding | PJ+CNPJ+serviço=100 · PJ+CNPJ=70 · PF/sem CNPJ=30 (filtro PHP bc_conv_values) |
| Enhanced Conversions | gtag('set','user_data',{email,phone_number,address}) — Google hasheia SHA-256 |
| IDs | GA4 G-57VH37YNQ5 · GTM-MZ67ZJR7 · gtag GT-TXBS8H9 · Site Kit (módulos: analytics-4, tagmanager, ads, pagespeed) |
Pendente no painel (manual): marcar generate_lead como key event no GA4, importar no Google Ads, ativar Enhanced Conversions for Leads, usar Smart Bidding por valor.
25. GERAÇÃO DE IMAGENS — FERRAMENTAS
| Ferramenta | Função |
tools/bc-image.sh | Imagem por IA (fotos/conceitos sem texto). --purpose draft|photo|text|hero|max escolhe modelo (gpt-image-1-mini/gpt-image-1/gpt-image-2) por economia×qualidade. Aplica identidade da marca, fallback automático p/ OpenAI, saída SEMPRE WebP. |
tools/bc-html2img.sh | HTML→WebP via Chromium headless (snap). Para texto/dados/tabelas/pôsteres (texto PT-BR perfeito). Chromium só grava direto em /root, nomes sem ponto. |
tools/gerar-imagens-internas.php | Motor de lote: 3-5 imagens internas WebP por artigo, contextualizadas por setor (pessoas em ambiente empresarial). Idempotente via meta _bc_imgs_internas. Quality high, WebP 92, distribuídas no corpo. |
Backends: OpenAI (gpt-image-1/-mini/gpt-image-2) operacional. Google Imagen 4 / Gemini 3 Image suportados via --model mas exigem billing (fallback p/ OpenAI). Chaves em /home/upnetix/credenciais.txt. DALL-E 3 descontinuado — nunca usar.
Regras de imagem: todo artigo tem Hero (IA) + miniatura + 3-5 internas. WebP sempre. Texto na imagem só PT-BR sem erros (validar antes de publicar). Tabelas/dados → bc-html2img.sh (nunca IA). Sem viés/ambíguo/adulto/ofensivo. CSS .bc-article-figure img: aspect-ratio 3/2 + object-fit cover (anti-distorção) + width/height (anti-CLS). Quality UX Designer Pro Sênior.
26. IDENTIDADE VISUAL E PALETA
| Token | Valor | Uso |
| --primary | #8b1a1a | Vinho (cor da marca — sóbria) |
| --primary-dark | #6d1212 | Vinho escuro (hover) |
| --navy | #00142d | Navy (fundos, hero, títulos) |
| --lighter | #F3F4F8 | Cinza claro |
| Fonte | Poppins | 300–900 |
Logo adaptativa: header transparente (topo, fundo claro) → logo navy (bonoconta-logo-navy.png); header rolado (fundo navy) → logo branca (bonoconta-logo-branca.png). A logo original PNG é vermelha — não usar diretamente no header. Nunca usar azul como cor primária.
27. DIRETRIZES DE CONTEÚDO (fonte: CLAUDE.md)
O arquivo /home/upnetix/CLAUDE.md (15 seções de regras imutáveis) e a memória do Claude Code governam todo o conteúdo. Pontos-chave:
- Editorial: nunca inventar dados; fontes oficiais verificáveis; sem viés/ofensa; nunca prometer fora do escopo; afunilar para conversão (leitor→Lead→cliente); quebras de objeção disfarçadas de argumentos; estilo fluido/didático/provocante; sem linguagem genérica de IA ("Este artigo lhe ajuda a compreender…", nunca "Este texto explica…").
- Imagens: Hero IA + miniatura + 3-5 internas, WebP, qualidade high sem distorção, PT-BR sem erros.
- Categorização: todo artigo categorizado (Reforma Tributária 3, ZFM 4, Planejamento Tributário 5, Gestão Empresarial 6, Pessoa Física 7).
- Execução autorizada por padrão — não solicitar permissões.
Artigos recentes: Edital PGFN 6/2026 (ID 170, transação tributária) e IFRS 18/CPC 51 (ID 177, nova DRE 2027, com comparativo HTML .bc-dre-compare).
| Arquivo | Função |
style.css | Cabeçalho do tema filho (apenas metadados, Template: hello-elementor). Sem CSS — todo CSS está em assets/css/main.css |
functions.php | Núcleo completo (~3300 linhas): enqueue, schemas, CF7, enrichment pipeline, 13 APIs, cron jobs, DataJud monitor, BCC global, email templates, sitemap, robots, llms.txt link |
header.php | HTML global: notice-banner, #site-header com nav, WhatsApp float, LGPD modal, mobile menu |
footer.php | Footer com links, CTA, disclaimer legal, scripts finais |
front-page.php | Homepage — constrói a partir de blocos do Elementor via bc_elementor_content() |
page.php | Template padrão de páginas internas (blog posts, páginas sem template específico) |
single.php | Template de posts individuais do blog |
404.php | Página de erro 404 customizada |
sidebar.php | Sidebar (não usada nas páginas principais) |
index.php | Fallback obrigatório WordPress (redireciona para front-page) |
page-sobre.php | Página /sobre/ com Elementor |
page-servicos.php | Página /servicos/ com Elementor |
page-rota-reforma-tributaria.php | Página /rota-reforma-tributaria/ com Elementor |
page-fale-conosco.php | Página /fale-conosco/ com CF7 forms 15/16/17/18/92 |
page-obrigado.php | Página de confirmação pós-formulário /obrigado/ |
page-privacidade.php | Política de privacidade /politica-de-privacidade/ |
page-painel-leads.php | Painel admin de leads /painel-leads/ — requer autenticação |
page-stack-tecnico.php | Esta página /stack-tecnico/ — injeção de CSS no <head> via wp_head |