---
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.