teqo-backup/docs/plans/sync-teqo-google-calendar.md
Francisco Solla 6cebcd12f3 docs: intention plans for C14–C16 agenda calendar track
Register the remodel → FullCalendar → filter import-link sync slice so the queue can claim after promote.
2026-08-06 00:02:52 -03:00

5.1 KiB
Raw Permalink Blame History

C16 — Sync por filtro + link de import (Google Calendar)

Status: blocked (plano ainda não em main) Atualizado em: 2026-08-06 Issue: #392 Priority: P2 Model: cursor-grok-4.5-medium Model-local: deepseek-v4-high Impeccable: B — encaixe na agenda: filtro ativo → sync / link de import Canvas UI: /home/fsolla/.cursor/projects/home-fsolla-cursor-worktrees-teqo-jr8x/canvases/plan-c16-ui-draft.canvas.tsx Appetite: ~1,5–2 dias eng; um outcome verificável — com um filtro da agenda, a pessoa obtém um link de import e o Google Calendar passa a refletir esse recorte Responsável: —

Intenção

Quem ainda vive no Google não precisa de “um espelho mágico de tudo”: precisa do recorte certo (só deputado presente, só um município, só certas tags, combinação). Em Teqo a pessoa aplica o filtro na agenda e gera um link de import desse filtro para colar no Google Calendar (Assinar URL / importar). Teqo continua SoT; o Google consome o recorte. Assim comunicação e o candidato escolhem o que acompanhar sem ligar pedindo atualização.

Persona e fluxo

  • Persona / contexto: coordenador monta o filtro “deputado presente”; comunicação importa esse link no GCal da equipe; assessor pode querer só seus municípios (no escopo que já vê).
  • Job principal: transformar o filtro atual da agenda num calendário assinável no Google.
  • Fluxo desejado: na agenda (C15) aplica filtros → “Link de import” / sincronizar este filtro → copia URL → cola no Google Calendar → cria/edita/cancela em Teqo atualizam o feed desse recorte.
  • Anti-goals de produto: sync bidirecional; obrigar OAuth de N contas pessoais; um único espelho sem filtro; Teqo como escravo do Google.

Esboço de fluxo (B)

[filtros na agenda] → gerar link de import deste filtro → Google assina a URL
                     → mudanças em Teqo (no recorte) aparecem no GCal

Objetivo e aceite

  • A partir dos filtros da agenda (município, deputado presente, tags, combinação), o usuário autorizado gera um link de import daquele recorte.
  • O link é usável no Google Calendar como calendário por URL (feed do recorte); quem importa vê os compromissos que passam no filtro.
  • Alterações em Teqo no conjunto filtrado refletem no feed (criar / remarcar / cancelar no recorte).
  • Teqo permanece SoT: falha ou atraso no consumidor não corrompe dados locais.
  • Escopo de leitura do link respeita access (não vaza municípios fora do ator que criou/autorizou o link — fail-closed).
  • Leader lockdown; sem Google → Teqo.

Dados (intenção)

  • Vou apresentar dados? Não analítico.
  • Decisões desbloqueadas: “este recorte da agenda está no meu Google?”
  • Forma: adiada (UI: ação na barra de filtros + estado do link).

Direção no codebase (hipótese)

  • Áreas prováveis: agenda C15 (barra de filtros), endpoint/feed assinável do recorte, token/HMAC ou secret de feed (precedente de tokens de campanha), sem PII extra além do necessário no evento (título + município).
  • Precedente a olhar: filtros C15/C14 tags; padrões de token HMAC em campanha; Google “From URL”.
  • Risco de acoplamento: URL secreta = capacidade de leitura do recorte — rotação/revogação; não expor telefone de liderança no feed.

Dependências

  • Dura: C15 (filtros + agenda). Soft: C14 (tags).

Fora de escopo

  • Sync bidirecional / import contínuo Google → Teqo.
  • OAuth push obrigatório para um único GCal canônico (o link de import cobre o job; push OAuth só se o link não bastar — fora desta fatia).
  • Papéis novos; N conexões OAuth por assessor.

Rabbit holes de produto

  • “Push OAuth + ICS + webhooks.” Corte: link de import do filtro é o outcome.
  • “Feed público sem segredo.” Corte: fail-closed; link com credencial revogável.
  • “Um link global sem filtro.” Corte: o valor é o recorte.

Questões em aberto (produto)

  • Quem gera/revoga links? Opções: A) só coordenador/candidato | B) qualquer staff no próprio escopo. Recomendação: B para o próprio escopo (assessor gera link dos municípios que já vê); coordenador para recortes amplos. (assumido — validar)
  • Evento no feed: Opções: A) título + município | B) título só | C) + tags. Recomendação: A (+ tags no título/descrição curta se ajudar o filtro mental); sem lista de lideranças. (assumido — validar)
  • Cancelados no feed? Opções: A) somem | B) constam como cancelados. Recomendação: A (some do calendário importado). (assumido — validar)

Decisões travadas (gate)

  • Sync de acordo com o filtro (município, deputado presente, tags, etc.).
  • Entrega = link de import do filtro (não espelho único fixo “só deputado”).
  • Direção Teqo → consumidor (Google); sem bidirecional.

Referências