From 3bbd634bfbef6ba23846f64c4036c0b1fb1a5048 Mon Sep 17 00:00:00 2001 From: Rainer Vitor Date: Thu, 22 Jan 2026 16:11:09 -0300 Subject: [PATCH] Add flashcard study system with gamification --- README.md | 52 +++++++++++++++++++++++++ cards/README.md | 18 +++++++++ cards/lia.jsonl | 1 + cards/schema.json | 56 +++++++++++++++++++++++++++ config/gamificacao.json | 35 +++++++++++++++++ docs/sistema.md | 65 ++++++++++++++++++++++++++++++++ progress/progresso.template.json | 17 +++++++++ 7 files changed, 244 insertions(+) create mode 100644 README.md create mode 100644 cards/README.md create mode 100644 cards/lia.jsonl create mode 100644 cards/schema.json create mode 100644 config/gamificacao.json create mode 100644 docs/sistema.md create mode 100644 progress/progresso.template.json diff --git a/README.md b/README.md new file mode 100644 index 0000000..edcadb5 --- /dev/null +++ b/README.md @@ -0,0 +1,52 @@ +# Sistema de Revisão e Estudo com Flashcards + Gamificação + +Este repositório define um **sistema simples e extensível** para revisão de conteúdos usando flashcards, com regras de gamificação e estruturas prontas para adicionar novos cards rapidamente. + +## Estrutura + +``` +. +├── README.md +├── docs/ +│ └── sistema.md +├── cards/ +│ ├── schema.json +│ ├── README.md +│ └── lia.jsonl +├── config/ +│ └── gamificacao.json +└── progress/ + └── progresso.template.json +``` + +## Como adicionar novos cards + +1. Abra `cards/lia.jsonl` (ou crie um novo arquivo `cards/.jsonl`). +2. Adicione **um JSON por linha** seguindo o `cards/schema.json`. +3. Mantenha os IDs únicos (ex.: `LIA-ART3-001`, `LIA-ART4-002`). + +Exemplo de card (igual ao exemplo fornecido): + +```json +{ + "id": "LIA-ART3-001", + "tema": "Lei de Improbidade Administrativa", + "artigo": "Art. 3º", + "tipo": "caso_pratico", + "pergunta": "Um particular induz dolosamente um servidor a praticar ato de improbidade. Ele pode responder pela Lei 8.429/92?", + "resposta_correta": "Sim, se tiver induzido ou concorrido dolosamente para a prática do ato.", + "explicacao": "O art. 3º estende a aplicação da lei a terceiros que, mesmo não sendo agentes públicos, induzam ou concorram dolosamente para o ilícito.", + "nivel": "dificil", + "tags": ["terceiro", "sujeito_ativo", "concurso_de_pessoas"] +} +``` + +## Como funciona a gamificação + +As regras detalhadas estão em `docs/sistema.md` e o arquivo `config/gamificacao.json` permite ajustar pontos, níveis e recompensas sem alterar os cards. + +## Próximos passos (opcionais) + +- Criar scripts para importar/exportar os cards. +- Conectar com apps de estudo (ex.: Anki) ou interfaces web. + diff --git a/cards/README.md b/cards/README.md new file mode 100644 index 0000000..79fc34b --- /dev/null +++ b/cards/README.md @@ -0,0 +1,18 @@ +# Cards + +## Formato + +- Arquivos em **JSONL** (um JSON por linha). +- Cada linha representa um único card conforme `schema.json`. + +## Exemplo (1 linha = 1 card) + +```json +{"id":"LIA-ART3-001","tema":"Lei de Improbidade Administrativa","artigo":"Art. 3º","tipo":"caso_pratico","pergunta":"Um particular induz dolosamente um servidor a praticar ato de improbidade. Ele pode responder pela Lei 8.429/92?","resposta_correta":"Sim, se tiver induzido ou concorrido dolosamente para a prática do ato.","explicacao":"O art. 3º estende a aplicação da lei a terceiros que, mesmo não sendo agentes públicos, induzam ou concorram dolosamente para o ilícito.","nivel":"dificil","tags":["terceiro","sujeito_ativo","concurso_de_pessoas"]} +``` + +## Sugestão de convenção de IDs + +- `--` +- Ex.: `LIA-ART3-001` + diff --git a/cards/lia.jsonl b/cards/lia.jsonl new file mode 100644 index 0000000..e3802d6 --- /dev/null +++ b/cards/lia.jsonl @@ -0,0 +1 @@ +{"id":"LIA-ART3-001","tema":"Lei de Improbidade Administrativa","artigo":"Art. 3º","tipo":"caso_pratico","pergunta":"Um particular induz dolosamente um servidor a praticar ato de improbidade. Ele pode responder pela Lei 8.429/92?","resposta_correta":"Sim, se tiver induzido ou concorrido dolosamente para a prática do ato.","explicacao":"O art. 3º estende a aplicação da lei a terceiros que, mesmo não sendo agentes públicos, induzam ou concorram dolosamente para o ilícito.","nivel":"dificil","tags":["terceiro","sujeito_ativo","concurso_de_pessoas"]} diff --git a/cards/schema.json b/cards/schema.json new file mode 100644 index 0000000..bc864b1 --- /dev/null +++ b/cards/schema.json @@ -0,0 +1,56 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Flashcard", + "type": "object", + "required": [ + "id", + "tema", + "tipo", + "pergunta", + "resposta_correta", + "explicacao", + "nivel", + "tags" + ], + "properties": { + "id": { + "type": "string", + "description": "Identificador único do card (ex.: LIA-ART3-001)" + }, + "tema": { + "type": "string", + "description": "Tema principal" + }, + "artigo": { + "type": ["string", "null"], + "description": "Referência legal, se aplicável" + }, + "tipo": { + "type": "string", + "enum": ["conceitual", "caso_pratico", "verdadeiro_falso", "multipla_escolha", "resumo"], + "description": "Tipo de card" + }, + "pergunta": { + "type": "string", + "description": "Enunciado da pergunta" + }, + "resposta_correta": { + "type": "string", + "description": "Resposta correta e objetiva" + }, + "explicacao": { + "type": "string", + "description": "Justificativa/resumo" + }, + "nivel": { + "type": "string", + "enum": ["facil", "medio", "dificil"], + "description": "Nível de dificuldade" + }, + "tags": { + "type": "array", + "items": {"type": "string"}, + "description": "Palavras-chave para filtragem" + } + } +} diff --git a/config/gamificacao.json b/config/gamificacao.json new file mode 100644 index 0000000..a9c3255 --- /dev/null +++ b/config/gamificacao.json @@ -0,0 +1,35 @@ +{ + "pontos": { + "acerto": 10, + "erro": 2, + "revisao_extra": 5 + }, + "streak_bonus": { + "3_dias": 15, + "7_dias": 40, + "14_dias": 100 + }, + "niveis": [ + {"nivel": 1, "min_pontos": 0, "nome": "Iniciante"}, + {"nivel": 2, "min_pontos": 200, "nome": "Constante"}, + {"nivel": 3, "min_pontos": 500, "nome": "Estrategista"}, + {"nivel": 4, "min_pontos": 1000, "nome": "Mestre"} + ], + "badges": [ + { + "id": "tema-10", + "descricao": "Revisou 10 cards do mesmo tema", + "criterio": "contagem_tema>=10" + }, + { + "id": "semana-perfeita", + "descricao": "7 dias seguidos estudando", + "criterio": "streak>=7" + }, + { + "id": "50-cards", + "descricao": "Respondeu 50 cards no total", + "criterio": "total_cards>=50" + } + ] +} diff --git a/docs/sistema.md b/docs/sistema.md new file mode 100644 index 0000000..dbfd60e --- /dev/null +++ b/docs/sistema.md @@ -0,0 +1,65 @@ +# Sistema de Revisão e Estudo com Flashcards + Gamificação + +## 1) Objetivo + +Organizar o conteúdo em **flashcards estruturados** e aplicar regras simples de gamificação para incentivar consistência, revisão e progressão no estudo. + +## 2) Modelo de Card + +Todos os cards seguem o schema `cards/schema.json`. Campos principais: + +- `id`: identificador único. +- `tema`: assunto central. +- `artigo`: referência legal (quando aplicável). +- `tipo`: ex.: `conceitual`, `caso_pratico`, `verdadeiro_falso`. +- `pergunta`: enunciado. +- `resposta_correta`: resposta objetiva. +- `explicacao`: justificativa/resumo. +- `nivel`: `facil`, `medio`, `dificil`. +- `tags`: palavras-chave para filtros. + +## 3) Formato de armazenamento + +- **JSONL**: cada linha é um card completo em JSON. +- Você pode ter vários arquivos em `cards/` (ex.: `lia.jsonl`, `constitucional.jsonl`). + +## 4) Revisão (cadência sugerida) + +Sugestão de intervalos por nível: + +- **Fácil**: revisar em 5, 10, 20 dias. +- **Médio**: revisar em 3, 7, 14 dias. +- **Difícil**: revisar em 1, 3, 7 dias. + +> Você pode ajustar esta regra de acordo com o seu ritmo. + +## 5) Gamificação + +As regras estão em `config/gamificacao.json`. Sugestão: + +- **Pontos por acerto**: 10 +- **Pontos por erro**: 2 (por tentativa) +- **Bônus por sequência (streak)**: + - 3 dias: +15 + - 7 dias: +40 + - 14 dias: +100 +- **Níveis**: definidos por faixas de pontos. +- **Badges**: metas por tema, quantidade de cards e consistência. + +## 6) Como acompanhar progresso + +Use o template `progress/progresso.template.json` para registrar: + +- Pontuação total. +- Nível atual. +- Streak de dias. +- Histórico de revisões. +- Estatísticas por tema. + +## 7) Exemplo de fluxo diário + +1. Selecione 15–30 cards por tema. +2. Responda e registre acertos/erros. +3. Atualize pontuação e streak. +4. Reforce os cards errados no final do dia. + diff --git a/progress/progresso.template.json b/progress/progresso.template.json new file mode 100644 index 0000000..2e1df92 --- /dev/null +++ b/progress/progresso.template.json @@ -0,0 +1,17 @@ +{ + "usuario": "seu_nome", + "pontos_totais": 0, + "nivel_atual": 1, + "streak_dias": 0, + "ultima_data_estudo": null, + "estatisticas_por_tema": {}, + "historico_revisoes": [ + { + "data": "2024-01-01", + "tema": "Lei de Improbidade Administrativa", + "acertos": 0, + "erros": 0, + "pontos_ganhos": 0 + } + ] +}