Skip to main content

SchoolMock-BR 🇧🇷

Gerador procedural de dados educacionais brasileiros sintéticos — realistas, mas fictícios — com camada de verificação determinística. Privacidade por construção (LGPD-safe).

CI License: MIT Python Status DOI

🎯 Objetivo

O SchoolMock-BR resolve o dilema de testar softwares educacionais administrativos sem processar dados de estudantes reais. A ferramenta gera perfis de alunos, turmas e escolas que são estruturalmente válidos (CPFs com dígito verificador correto, códigos INEP consistentes com a UF, idade coerente com a série) mas inteiramente fictícios — não correspondem a nenhuma pessoa real.

É um gerador procedural por regras de domínio (no espírito do Synthea para a saúde): não aprende de dados reais, portanto não há dado sensível a vazar.

✨ Destaques do v2

  • Camada de verificação (C1–C5) — um verificador determinístico que audita cada registro: CPF válido, INEP↔UF consistente, idade↔série coerente, campos obrigatórios e unicidade no lote.
  • Reprodutibilidade total — seed propagada para random e Faker; o mesmo dataset, byte a byte.
  • Construtor de dataset relacional — escola↔turma↔aluno com integridade referencial e export JSON/CSV.
  • CLI — gere, verifique e exporte sem escrever Python.
  • Retrocompatível — a API do v1 (SchoolMockBR.gerar_aluno/gerar_escola/gerar_turma_lote) continua válida.

📦 Instalação

Requer Python 3.10+.

pip install schoolmock-br        # quando publicado no PyPI
# ou, a partir do código-fonte:
git clone https://github.com/RandMelville/schoolmock-br.git
cd schoolmock-br
pip install -e ".[dev]"

🚀 Uso rápido

Como biblioteca

from schoolmock_br import Gerador, Verificador

gen = Gerador(seed=42)                      # reprodutível
aluno = gen.gerar_aluno("8º Ano")
escola = gen.gerar_escola()
turma = gen.gerar_turma_lote(qtd=30, serie="5º Ano")

verif = Verificador()
relatorio = verif.verificar_lote_alunos(turma)
print(relatorio.resumo())                   # conformidade C1–C5

A API estática do v1 segue funcionando (use SchoolMockBR.semear(seed) para reprodutibilidade):

from schoolmock_br import SchoolMockBR
SchoolMockBR.semear(42)
aluno = SchoolMockBR.gerar_aluno("8º Ano")

Pela linha de comando

schoolmock gerar --tipo aluno --n 30 --serie "5º Ano" --seed 42 --formato csv --out turma.csv
schoolmock verificar turma.json --tipo aluno
schoolmock dataset --escolas 50 --seed 42 --formato csv --out ./dataset
schoolmock benchmark --seed 42            # conformidade v1 (ingênuo) vs v2

🔍 A camada de verificação (critérios C1–C5)

Critério Verifica
C1 CPF válido (mód-11) e não pertencente a sequências conhecidas-inválidas
C2 Código INEP consistente com a UF (2 primeiros dígitos = código IBGE da UF)
C3 Idade coerente com a série (data de nascimento ↔ série, idade adequada)
C4 Campos obrigatórios presentes e não vazios
C5 Unicidade de identificadores no lote (cpf, matricula, codigo_inep)

O verificador é determinístico: mesma entrada e mesma data_referencia → mesmo veredito. Rodá-lo sobre o gerador ingênuo (v1) e sobre o v2 produz o contraste de conformidade (schoolmock benchmark): o v1 gera dezenas de % de registros não-conformes (idade↔série, INEP↔UF); o v2 garante 100% de conformidade por construção.

🗂️ Construtor de dataset

from schoolmock_br.dataset import construir_dataset

ds = construir_dataset(seed=42, n_escolas=50)
ds.export_csv("dataset/")        # escolas.csv, turmas.csv, alunos.csv, metadata.json

Cada registro carrega o campo fonte (marcação de origem sintética) e os metadados incluem seed, contagens e o resumo de conformidade. Veja o DATASHEET.md para a documentação completa no padrão Datasheets for Datasets (Gebru et al., 2018).

Além de gerar dados sob demanda, o projeto publica um dataset oficial congelado e citável (100 escolas · 450 turmas · 12.505 alunos, CC-BY 4.0). A receita reprodutível e os checksums oficiais estão em DATASET.md.

Os registros gerados são dados sintéticos: produzidos proceduralmente, não se referem a pessoa natural identificada ou identificável. Pela definição de dado pessoal da LGPD (Lei nº 13.709/2018, art. 5º, I), dados que não se vinculam a uma pessoa real não constituem dado pessoal — logo, o regime de tratamento da LGPD (incluindo o consentimento do art. 14, relativo a crianças e adolescentes) não incide sobre os registros sintéticos em si.

O valor da ferramenta é justamente apoiar os princípios de necessidade e minimização (art. 6º) e a privacidade desde a concepção (privacy by design): ao testar sistemas educacionais com dados fictícios em vez de dados reais de estudantes, evita-se o tratamento de dados pessoais de menores onde ele não é necessário.

⚠️ Não use o SchoolMock-BR para "contornar" o consentimento sobre dados reais. A premissa é não haver dado real envolvido. Se você cruzar, enriquecer ou vincular esses registros a dados de pessoas reais, o resultado passa a ser dado pessoal e a LGPD volta a incidir.

⚠️ Limitações honestas

  • Fidelidade estatística. O gerador garante validade estrutural, não reproduz as distribuições reais de uma população (proporções por rede/UF/série). Calibração contra marginais públicas do Censo Escolar é um trabalho futuro (F7 no roadmap).
  • Risco residual de colisão de CPF. Um CPF sintético, embora fictício, pode por coincidência coincidir com o de uma pessoa real (o espaço de CPFs válidos é finito e não há faixa oficial de teste). Não use os identificadores para nenhuma finalidade que pressuponha titularidade real. O modo opcional --modo-teste (F3) fixa um prefixo sentinela (999…) nos CPFs, tornando-os reconhecíveis como sintéticos (cpf_marcado_para_teste()) — mitigação por detectabilidade, não garantia de não-colisão.
  • Escopo administrativo. A ferramenta foi pensada para testes de software educacional administrativo (cadastros, carga, conformidade), não como corpus de treinamento de modelos.

🧪 Desenvolvimento

pip install -e ".[dev]"
pytest            # suíte de testes (a camada de verificação é parte dela)
ruff check src tests

📚 Como citar

Se este trabalho for útil em sua pesquisa, cite o software via o DOI conceitual do Zenodo (10.5281/zenodo.20806098 — resolve sempre para a versão mais recente) ou use o arquivo CITATION.cff. Para citar uma versão específica, use o version DOI correspondente: a release atual v2.1.0 é 10.5281/zenodo.20806846; a primeira, v2.0.0, é 10.5281/zenodo.20806099. O Manual Técnico v1 está registrado sob o ISBN 978-65-01-89921-3 (DOI 10.5281/zenodo.18343467).

📄 Licença

Código sob licença MIT. O dataset sintético publicado é distribuído sob CC-BY 4.0.


Autor: Randerson Oliveira Melville Rebouças (PPGIE/UFRGS).

Metadata

Release files for schoolmock-br 2.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for schoolmock-br 2.1.0
File Size Uploaded Provenance Actions
schoolmock_br-2.1.0.tar.gz 24.9 kB With provenance Details for schoolmock_br-2.1.0.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for schoolmock-br 2.1.0
File Interpreter ABI Platform Actions
schoolmock_br-2.1.0-py3-none-any.whl Python 3 none any Details for schoolmock_br-2.1.0-py3-none-any.whl

Total release size: 49.0 kB

Release files / schoolmock_br-2.1.0.tar.gz

Download URL schoolmock_br-2.1.0.tar.gz
Size 24.9 kB
Tags Source
SHA-256 checksum
How to use checksums
1ee173ec6b04617188689b92677028becf59e955a3b5d4c51cee80dc493e8488
BLAKE2b-256 checksum
How to use checksums
8296af91343d76184291e4ef30036ae9131f567f9efa22af226053565eb77fb4
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.12

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jun 23, 2026.

Transparency log

Release files / schoolmock_br-2.1.0-py3-none-any.whl

Download URL schoolmock_br-2.1.0-py3-none-any.whl
Size 24.0 kB
Tags Python 3
SHA-256 checksum
How to use checksums
9f3b43f1872ec9754ef6a2bb450e53363b46b6265acbef4fd4e6230e636b2edf
BLAKE2b-256 checksum
How to use checksums
61863bc6a72280bf4af2cabf237e1f35bfd0d9110c13185c64b21c38e513c9cd
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.12

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jun 23, 2026.

Transparency log

Security for schoolmock-br 2.1.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

Full provenance

Both files in this release have been uploaded with provenance metadata.

Select from 2 files

Attestation for schoolmock_br-2.1.0.tar.gz

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jun 23, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Release history Release notifications | RSS feed

This release

2.1.0 This release

2 release files Full provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page