# Calendar Manager - Workflows Detalhados ## Workflow CRIAR Eventos ### Passo 1: Analisar Pedido ```javascript // Input: "Agenda Dra Susana amanha 14:30" const analise = { texto: "Agenda Dra Susana amanha 14:30", palavras_chave: ["dra", "susana"], data_mencionada: "amanha", hora_mencionada: "14:30", duracao_mencionada: null // default 1h }; ``` ### Passo 2: Classificar Tipo ```javascript // Detectar palavras-chave e determinar calendario function classificarEvento(texto) { const keywords_pessoal = /dra?|dentista|medico|familia|ginasio|consulta/i; const keywords_cliente = /carstuff|familyclinic|kcg|espiral|solar|reuniao|call/i; const keywords_profissional = /planeamento|sprint|deploy|interno|equipa/i; if (keywords_pessoal.test(texto)) { return { tipo: 'pessoal', calendar_id: 'emanuelalmeidaa@gmail.com' }; } if (keywords_cliente.test(texto)) { return { tipo: 'clientes', calendar_id: 'info@descomplicar.pt' }; } if (keywords_profissional.test(texto)) { return { tipo: 'profissional', calendar_id: 'emanuel@descomplicar.pt' }; } // Se ambiguo, perguntar return { tipo: 'ambiguo' }; } ``` ### Passo 3: Extrair Data e Hora ```javascript // Obter data actual via mcp-time const now = await mcp__mcp_time__current_time(); // Interpretar data mencionada function interpretarData(mencao, hoje) { const mapa = { 'hoje': hoje, 'amanha': addDays(hoje, 1), 'segunda': nextWeekday(hoje, 1), 'terca': nextWeekday(hoje, 2), // etc. }; return mapa[mencao.toLowerCase()] || parseDate(mencao); } // Criar timestamps ISO 8601 const data = interpretarData('amanha', now); const start_time = `${data}T14:30:00`; const end_time = `${data}T15:30:00`; // +1h default ``` ### Passo 4: Verificar Conflitos ```javascript // Buscar eventos existentes no horario const eventos_conflito = await mcp__google_workspace__get_events({ user_google_email: 'emanuelalmeidaa@gmail.com', calendar_id: 'ALL', time_min: start_time, time_max: end_time }); if (eventos_conflito.length > 0) { // Avisar utilizador sobre conflito } ``` ### Passo 5: Criar Evento ```javascript const evento = await mcp__google_workspace__create_event({ user_google_email: 'emanuelalmeidaa@gmail.com', calendar_id: classificacao.calendar_id, summary: 'Dra Susana', start_time: start_time, end_time: end_time, timezone: 'Europe/Lisbon', description: 'Criado via Claude Code /calendar-manager' }); ``` ## Workflow LISTAR Eventos ### Passo 1: Interpretar Pedido ```javascript // Input: "Agenda de amanha" const pedido = { periodo: 'amanha', // hoje, amanha, semana, mes, data especifica ambito: 'todos', // todos, pessoal, profissional, clientes }; ``` ### Passo 2: Determinar Intervalo ```javascript const now = await mcp__mcp_time__current_time(); function calcularIntervalo(periodo, hoje) { const intervalos = { 'hoje': { time_min: `${hoje}T00:00:00`, time_max: `${hoje}T23:59:59` }, 'amanha': { time_min: `${addDays(hoje, 1)}T00:00:00`, time_max: `${addDays(hoje, 1)}T23:59:59` }, 'semana': { time_min: `${startOfWeek(hoje)}T00:00:00`, time_max: `${endOfWeek(hoje)}T23:59:59` } }; return intervalos[periodo]; } ``` ### Passo 3: Consultar Calendarios ```javascript // Determinar calendarios a consultar baseado no ambito const calendarios = pedido.ambito === 'todos' ? ['emanuelalmeidaa@gmail.com', 'emanuel@descomplicar.pt', 'info@descomplicar.pt'] : [mapearAmbito(pedido.ambito)]; // Buscar eventos em paralelo const resultados = await Promise.all( calendarios.map(cal_id => mcp__google_workspace__get_events({ user_google_email: 'emanuelalmeidaa@gmail.com', calendar_id: cal_id, time_min: intervalo.time_min, time_max: intervalo.time_max }) ) ); ``` ### Passo 4: Agrupar e Formatar ```javascript // Agrupar por tipo e ordenar por hora const eventos_agrupados = { pessoal: resultados[0].sort(byTime), profissional: resultados[1].sort(byTime), clientes: resultados[2].sort(byTime) }; ``` ### Passo 5: Sugestoes Inteligentes - Se ha muitas reunioes seguidas: avisar sobrecarga - Se nao ha breaks: sugerir pausas de 15min entre reunioes