Voltar para projetos
📋

Versa Educa — Automação do Diário

Automação em Python + Playwright que lança o planejamento de aulas no diário eletrônico da rede municipal a partir do .docx de origem. Mais de 250 registros conferidos um a um em duas escolas, com idempotência, validador de documento e travas contra gravar na turma errada.

PythonPlaywrightAutomaçãodocxIdempotência
01

Problema

Qual era o desafio?

Lançar planejamento no diário eletrônico da rede é digitação pura: 25 registros por turma por trimestre, cada um com data, conteúdo e habilidade prefixada pelo código do CRMG, preenchidos à mão num formulário web. Multiplicado por 8 ou 10 turmas, é um fim de semana perdido — e o erro é silencioso: a turma no Versa é estado de sessão, não campo do formulário, e a sessão da rede é compartilhada. Observei ela trocar de turma sozinha quatro vezes em poucos minutos. Um registro lançado na turma errada não avisa ninguém.

02

Processo

Como foi conduzido?

  1. 01Fase 1 — parser do .docx para JSON intermediário usando só a stdlib do Python, sem dependência nem ambiente virtual. 21 testes, 5 deles contra o documento real.
  2. 02Validador separado que recusa o documento e aponta o parágrafo: confere rótulos e ordem do bloco, dia da semana declarado contra a data real, data repetida na mesma turma, aula em feriado ou recesso que a própria seção declara, e lista todo parágrafo não usado — para nada desaparecer calado.
  3. 03Login manual numa sessão própria: o navegador abre para eu autenticar, nenhuma senha passa pelo script.
  4. 04Dry-run como padrão. Gravar exige --commit explícito, e --limite 1 permite conferir o primeiro registro antes de soltar o resto.
  5. 05Idempotência por turma|data, lida do próprio Versa em vez de arquivo local — rodar duas vezes pula o que já existe.
  6. 06Turma conferida duas vezes por registro, ao abrir o formulário e no instante antes de Salvar. Divergência aborta a corrida sem gravar nada.
  7. 07Trava de calendários disjuntos: se os dias da semana do documento não cruzam com o histórico da turma, bloqueia tudo e explica em vez de gravar.
  8. 08Nada escolhido no palpite — se a tag certa não aparece na busca, o registro é recusado em vez de aceitar o primeiro item da lista.
  9. 09Lançamento em parcelas: o Versa recusa data futura, então o mesmo comando roda periodicamente, grava o que venceu e marca o resto como adiado.
  10. 10Log por registro em JSONL, com data, tags, URL e horário, para conferência posterior.
03

Resultado

O que foi entregue?

  • Em produção desde agosto de 2026: 200 registros em 8 turmas no 1º trimestre e 51 em outra escola, todos conferidos por leitura independente — nada faltando, nada a mais, nenhuma data duplicada.
  • A trava de calendários disjuntos pagou-se sozinha: acusou um conflito na Educação Infantil e a investigação mostrou que o documento de origem estava errado e o diário certo. Sem a trava, seriam 25 registros errados gravados em silêncio.
  • Registros feitos à mão nunca são tocados — a idempotência os reconhece e pula.
  • Fim de semana de digitação virou um comando, com log auditável de cada registro gravado.