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.
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.
Processo
Como foi conduzido?
- 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.
- 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.
- 03Login manual numa sessão própria: o navegador abre para eu autenticar, nenhuma senha passa pelo script.
- 04Dry-run como padrão. Gravar exige --commit explícito, e --limite 1 permite conferir o primeiro registro antes de soltar o resto.
- 05Idempotência por turma|data, lida do próprio Versa em vez de arquivo local — rodar duas vezes pula o que já existe.
- 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.
- 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.
- 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.
- 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.
- 10Log por registro em JSONL, com data, tags, URL e horário, para conferência posterior.
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.