""" Gerador de apresentacoes PPTX com slides HTML renderizados (visual rico). Pipeline: Claude gera HTML/CSS bonitos -> Playwright renderiza PNG -> monta PPTX com imagens. """ import asyncio import gc import io import json import logging import os import re import tempfile import time from pptx import Presentation from pptx.util import Inches, Emu from modules.config import client_anthropic # --------------------------------------------------------------------------- # Constants # --------------------------------------------------------------------------- _SLIDE_WIDTH_PX = 1920 _SLIDE_HEIGHT_PX = 1080 _CORA_BRAND = { "pink": "#FE3E6D", "pink_light": "#FF6B8A", "dark": "#1A1A2E", "dark2": "#16213E", "gray": "#F5F5F7", "text": "#2D2D2D", "white": "#FFFFFF", } # --------------------------------------------------------------------------- # System prompt — foco no RACIONAL das iniciativas por KR # --------------------------------------------------------------------------- _SYSTEM_PROMPT = """Voce e um designer de apresentacoes executivas de altissimo nivel. Crie slides LINDOS em HTML/CSS para uma apresentacao da **Cora** (banco digital). OBJETIVO DA APRESENTACAO: - Mostrar o RACIONAL de priorizacao: para cada KR, explicar POR QUE as iniciativas foram priorizadas - NAO mostrar roadmap/timeline — foque no raciocinio estrategico - Tom executivo e direto - FOCO EXCLUSIVO nas iniciativas relacionadas aos OKRs/KRs — NAO incluir temas regulatorios, auditoria, compliance ou sustentacao que nao estejam diretamente ligados a um KR ESTRUTURA IDEAL: 1. Slide de capa impactante 2. Para cada KR relevante: 1-2 slides explicando: - O KR apenas com nome e meta bruta (ex: "Reduzir FPR — meta: 0,22%"). NAO mostrar valor atual, NAO mostrar % de atingimento, NAO mostrar status (off-track/at-risk), NAO mostrar evolucao mensal. Apenas o NOME do KR e a META. - As iniciativas priorizadas que impactam esse KR - O MECANISMO de impacto (a logica de POR QUE a iniciativa ajuda) - Exemplo: "Biometria → permite usuario desbloquear conta propria → reduz bloqueios indevidos de clientes bons" 3. OBRIGATORIO: Slide "Mapa de Correlacao — Iniciativas x Key Results" em formato de TABELA HTML pura: - Fundo escuro (gradiente {dark} para {dark2}), texto branco - Titulo grande no topo: "Mapa de Correlacao — Iniciativas x Key Results" com emoji 📊 - Subtitulo: "Como cada iniciativa contribui para os KRs. Impacto primario (●) e secundario (○) mapeados." - Tabela com header: INICIATIVA | KR1 | KR2 | KR3 | SUSTENTACAO/COMPLIANCE - Linhas agrupadas por CATEGORIA em negrito maiusculo (ex: "FRICCAO INTELIGENTE (KR1)") - Cada iniciativa com emoji no inicio do nome - Celulas: circulo rosa cheio (●) = impacto PRIMARIO, circulo rosa vazado (○) = impacto SECUNDARIO, vazio = sem impacto - Bordas sutis entre linhas (rgba branco 10%) - Rodape discreto "Cora | Risco e Seguranca" 4. Slide de encerramento REGRAS DE DESIGN: 1. Cada slide e um HTML COMPLETO, self-contained, com CSS inline no
{msg or "Conteudo nao extraivel — edite este slide manualmente"}