--- name: puxar-atividades-timeweb description: Sincroniza as atividades "A Realizar" do Time Web (sistema interno de tarefas) com o backlog do Notion. Use quando o usuário pedir para "sincronizar atividades", "puxar do time web", "atualizar o notion com as novas atividades", ou como primeiro passo da skill mestra `dale-task`. --- # Sincronizar atividades do Time Web com o Notion ## Contexto Time Web (`time-web.portaliso.com`) é o sistema interno onde as tarefas são formalmente atribuídas (fonte da verdade). O Notion ("Tasks", ID `36042fca-fe05-8058-ae3f-efca67247b87`) é o backlog pessoal do usuário, onde cada task vira um bloco numerado `## #N` que a skill `montar-plano-da-task` consome depois. Esta skill faz a ponte: lê o Time Web, decide o que já existe e o que é novo, e atualiza o Notion. ## Credenciais Usuário `ruggiero`, senha documentada em memória em `credenciais_dev_ruggiero.md` (mesma credencial de SVN/Portal ISO). Não pedir de novo ao usuário. ## Passos 1. **Login e navegação no Time Web** (via `mcp__browser__*`): - Navegue para `https://time-web.portaliso.com/registrocom/membro-de-time/gerenciar-atividades.jsf?id_colaborador=967`. - Se cair na tela de login: preencha `#form_top\:login` (usuário) e `#form_top\:senhahide` (senha), clique `#form_top\:logar`. - A view padrão já é "A Realizar" — não precisa clicar em nada a mais. 2. **Ler a tabela de atividades** (`browser_snapshot` no seletor da tabela `#form-gerenciar-atividades\:dt-atividades`). Para cada linha, extraia: - O título (rótulo da coluna "Dados da Atividade"). - **O código do ticket entre parênteses** (padrão `([A-Z]{3}-\d+)`, ex: `IQY-888448`, `RDI-274019`) — SEMPRE aparece cedo no título, antes de qualquer truncamento. Esse código é a CHAVE de deduplicação, não o título inteiro (o título na tabela pode vir cortado com "…"). 3. **Buscar o estado atual do Notion** (`notion-fetch` no ID `36042fca-fe05-8058-ae3f-efca67247b87`). Extraia, de cada bloco `## #N` existente: o número mais alto (`maxN`) e o código de ticket de cada `Activity` (mesmo padrão `([A-Z]{3}-\d+)`). Extraia também a fila de pendências, se houver — uma linha logo no topo da página, antes de qualquer bloco `## #N`, no formato: ``` ⚠️ Reprovadas pendentes: #3 (IQY-888448), #8 (XYZ-123456) ``` Se a linha não existir ainda, trate como fila vazia (ela é criada na primeira reprovação, ver passo 4C). 4. **Para cada atividade do Time Web, classifique:** **A) Código já existe no Notion:** - Abra a descrição completa (botão "Descrição muito longa... Clique para ver a descrição completa."). - Se o texto começar com `REPROVADA:` seguido de `Motivo da Reprovação:`: - O motivo real é o texto ENTRE "Motivo da Reprovação:" e a linha de traços (`----...----`). O texto ABAIXO dos traços é só a descrição original repetida — ignore. - Localize, dentro do bloco `## #N` correspondente, o toggle **Rejections** (`
Rejections`), posicionado logo depois de `Solution` (com um `` de separador entre os dois). Conte quantas entradas `Reason of rejection N:` já existem lá dentro — a nova entra com o próximo número. - Acrescente, DENTRO do toggle (depois das entradas existentes, nunca sobrescrevendo), no formato exato do template: ``` Reason of rejection {N}: {motivo extraído} ``` Use `notion-update-page` com `update_content`, escolhendo um `old_str` curto e único (ex: o trecho exato do fechamento do toggle `
` combinado com algo único daquele bloco específico) para não colidir com outros blocos da página. Blocos longos demais podem falhar por não-match — prefira `old_str` curtos e específicos, várias chamadas pequenas em vez de uma gigante. - **O botão nativo "+ Reprovação" não existe mais** (removido do template pelo usuário — não é mais usado). Blocos antigos que ainda tiverem esse botão (`` logo após `Solution`, seguido de linhas soltas tipo `Motivo:`/`Motivo da reprovação:`): ao migrar, REMOVA o botão e converta cada rodada de reprovação já registrada numa entrada `Reason of rejection N:` dentro do toggle `Rejections` (criado nesse mesmo passo, se ainda não existir), preservando a ordem cronológica original (a mais antiga vira `Reason of rejection 1`). - Adicione essa task à fila de pendências (passo 4C), se ainda não estiver lá. - Se NÃO for REPROVADA (já em andamento, sem motivo novo): não faça nada, já está sincronizado. **B) Código não existe no Notion (task genuinamente nova):** - Se o título na tabela terminar em "…" (truncado), clique em "Visão Detalhada da Atividade" dessa linha pra pegar o título completo. - Pegue a descrição completa (mesmo botão do item A). - O título segue o padrão `TIPO - Módulo - Cliente (CÓDIGO) - Área - resumo`; extraia o `Módulo` diretamente dele (não precisa adivinhar pelo diretório do projeto). - **Antes de criar do zero**, confira se já existe no topo da página um bloco vazio `## **#**` (sem número, título/módulo em branco) — o usuário pode ter clicado em "Nova Tarefa" manualmente antes de rodar a skill. Se existir, preencha esse bloco em vez de criar um novo (evita duplicidade). Preencha só o texto (`#N`, Module, Activity, Description) via `update_content`, sem mexer nos blocos `` que já estiverem lá — deixe-os como estão. - **Se não existir bloco vazio**, crie o bloco você mesmo — não precisa pedir pro usuário clicar em nada. Os botões `` ("Nova Tarefa"/"reprovação") são só atalho de clique pra humano, não são estruturalmente necessários: o mesmo texto/cor/toggle/checklist dá pra escrever puro via markdown. Monte o bloco completo (sem esses botões) neste formato, com `#N` = `maxN + 1`: ``` ## **#{N}** Assignment: {data de hoje, DD/MM/AAAA} Conclusion: x/x/{ano atual} Module: {módulo} Activity:{TIPO} - {módulo} - {cliente} ({código}) - {área} - {resumo}
Description: {descrição completa}
Solution: Add: - [ ] Fix: - [ ] Test: - [ ]
Rejections
Notes
Initial impression:
Final impression:
Diculculdade: /10
Commands
References
--- ``` - Insira esse bloco via `notion-update-page` com `update_content`, usando como `old_str` o heading exato do task atualmente no topo (ex: `## **#6**`) e `new_str` = `{bloco novo montado acima}\n## **#6**` — isso empurra o bloco novo pra cima do topo atual, mantendo a ordem decrescente (mais recente primeiro). Se houver mais de uma task nova no mesmo lote, repita o processo em sequência, sempre reancorando no heading que ficou no topo depois da inserção anterior. - Isso vale só pra CRIAR a task. A checagem de reprovações futuras (item A) usa o toggle **Rejections** já criado junto com o bloco (logo depois de "Solution") — não depende do botão nativo de reprovação, já que um bloco criado por esta skill não vai ter esse botão. 4C. **Manter a fila de pendências** (linha `⚠️ Reprovadas pendentes: ...` no topo da página): - **Adicionar**: quando uma reprovação nova for detectada (passo 4A) e o `#N` daquele ticket ainda não estiver na fila, acrescente `#N (código)` ao final da lista (ordem de chegada = ordem de atendimento depois, na `montar-plano-da-task`). - **Remover**: para cada ticket que JÁ estava na fila antes desta execução, confira se ele ainda aparece na tabela "A Realizar" do Time Web lida no passo 2. Se não aparecer mais (foi reenviado/aprovado/ seguiu adiante), remova da fila. - Se a fila ficar vazia depois disso, apague a linha inteira. Se ainda não existir e for a primeira pendência, crie a linha logo no início do conteúdo da página (antes do primeiro bloco `## #N`), via `notion-update-page` (`insert_content`, `position: {"type": "start"}` se a página ainda não tiver essa linha, ou `update_content` pra editar a lista existente). - Use sempre um `old_str`/alvo pequeno e específico pra essa linha — nunca precise reconstruir blocos de task inteiros só pra mexer nela. 5. **Resuma ao final**: quantas atividades foram encontradas, quantas eram reprovações de tasks existentes (e quais `#N` foram atualizados), quantas eram genuinamente novas (e quais `#N` novos foram criados), e o estado final da fila de pendências. ## Observações - Nunca invente código de ticket nem número de task. - Não navegue/edite nada no Notion via navegador — tudo pela API (`mcp__notion__*`); o navegador é só pro Time Web. - Sempre responder em português brasileiro.