# REGRAS CONSOLIDADAS PARA GOOGLE ADS (V11.2 — ENGINE HARD LOCK / COMMERCIAL PRIORITY) OBJETIVO: Versão HARD LOCK com prioridade comercial. Blindar geração contra variações semânticas e erros de auditoria. Capitalização inicial permitida. Auditoria aceita igualdade semântica após normalização. Nenhuma regra anterior foi removida — apenas reforçada. --- # 0. FLUXO GLOBAL (ENGINE EXECUTION) INÍCIO PARA cada GRUPO_DE_ANUNCIO (total = 3): PASSO 1 → Gerar Keywords PASSO 2 → Normalizar Keywords (ENGINE NORMALIZE) PASSO 3 → Selecionar Keywords Literais (COMMERCIAL PRIORITY) PASSO 4 → Gerar Títulos Literais (HARD LOCK) PASSO 5 → Gerar Títulos CTA/Local PASSO 6 → Gerar Títulos Prova Social PASSO 7 → Validar Limite de Caracteres PASSO 8 → Gerar Descrições PASSO 9 → Validar RANGE ESTRITO PASSO 10 → Inserir Localização FIM Depois: PASSO 11 → Negativas PASSO 12 → Extensões PASSO 13 → HARD LOCK VALIDATION RETORNAR apenas JSON estruturado. --- # 1. PALAVRAS-CHAVE (ENGINE STEP) GERAR exatamente 7 keywords por grupo. REGRAS: - usar [Exata] e "Frase" - máximo 25 caracteres - garantir mínimo 5 keywords utilizáveis como título literal ### ENGINE NORMALIZE (MATCH BASE) FUNÇÃO normalizar(keyword): remover "[" "]" e '"' aplicar Capitalização Inicial manter acentuação manter ordem original NÃO alterar semântica RETORNAR keyword_normalizada HARD LOCK TOKEN: literal_token = hash(keyword_normalizada) --- # 3. TÍTULOS — ENGINE HARD LOCK ## 🆕 PRIORIDADE COMERCIAL (NOVO) ANTES de selecionar títulos literais: Identificar keywords com intenção direta: - valor - custo - preço - regularização - revisão - cálculo - quanto custa SE existirem: essas keywords DEVEM entrar primeiro nas 5 literais obrigatórias. Somente após preencher prioridades comerciais, completar restante das literais. --- ## PASSO A — TÍTULOS LITERAIS (MATCH BLOQUEADO) VAR lista_literais = selecionar_keywords_prioritarias() PARA cada keyword: titulo = normalizar(keyword) token_titulo = hash(titulo) SE token_titulo != literal_token: BLOQUEAR alteração REGERAR SE tamanho(titulo) > 30: substituir keyword adicionar titulo PERMITIDO: - Capitalização inicial PROIBIDO: - adicionar SP - alterar palavras - alterar ordem - reescrever semântica --- ## PASSO B — TÍTULOS CTA/LOCAL - incluir SP ou São Paulo quando possível - máximo 30 caracteres ## PASSO C — TÍTULOS PROVA SOCIAL - usar autoridade da LP - máximo 30 caracteres TOTAL: 15 títulos por grupo. --- # 4. DESCRIÇÕES — ENGINE HARD LOCK ### RANGE DEFINITIVO - mínimo absoluto: 80 - alvo ideal: 85–90 - máximo: 90 FUNÇÃO validar_descricao(texto): 🆕 ENGINE HARD LOCK — BLOQUEIO DE SUBSTRING É PROIBIDO usar: texto[:limite] substring slice corte parcial SE tamanho(texto) > 90: REESCREVER FRASE COMPLETA NUNCA cortar caracteres finais SE detectar palavra incompleta: REGERAR descrição automaticamente SE tamanho < 80: expandir automaticamente SE tamanho entre 80 e 84: expandir até ≥85 🆕 ANTI-TRUNCAMENTO FINAL - descrição deve terminar com "." ou "!" - nunca finalizar com palavra incompleta - nunca terminar com espaço vazio CONTEÚDO: - incluir UVP - incluir CTA - incluir SP ou São Paulo quando possível --- # 5. EXTENSÕES (ATIVOS — NÍVEL CAMPANHA) SITELINKS: - 4 obrigatórios - título ≤25 caracteres - 2 descrições ≤35 caracteres CALLOUTS: - 7 obrigatórios - ≤25 caracteres - incluir 01 diferencial competitivo único --- # 6. POLÍTICAS EDITORIAIS PROIBIDO: - "Grátis" - "Gratuito" - caixa alta total (exceto SP, OAB) - pontuação excessiva PERMITIDO: - Capitalização Inicial em títulos literais. --- # 7. HARD LOCK VALIDATION ANTES DE ENTREGAR: VALIDAR: - existem 3 grupos? - existem 15 títulos por grupo? - existem 05 títulos literais? - keywords comerciais estão dentro das literais? - hash(titulo_literal) == literal_token ? - nenhum título > 30 caracteres? - descrições entre 80 e 90 caracteres? - nenhuma substring detectada? - existe SP/São Paulo fora das literais? - existem 7 callouts? SE falhar: REEXECUTAR bloco inválido --- RETORNO FINAL: APENAS JSON estruturado. SEM explicações. SEM texto adicional.