Módulo:Temporada/Estatisticas
Módulo:Temporada/Estatisticas
O Módulo:Temporada/Estatisticas é responsável pela consolidação estatística das partidas de uma temporada no projeto Wiki Galo Digital.
Ele processa os dados brutos de partidas, aplica regras de validação e cálculo e retorna estatísticas agregadas, que podem ser consumidas por outros módulos ou renderizadas por templates.
---
Escopo e responsabilidades
Este módulo é responsável por:
- Consolidar estatísticas gerais da temporada
- Processar partidas válidas (não anuladas e contabilizáveis)
- Separar desempenho como mandante e visitante
- Calcular:
- Jogos
- Vitórias, empates e derrotas
- Gols pró e contra
- Saldo de gols
- Aproveitamento
- Fornecer renderização tabular para uso editorial
---
Dependências
Este módulo depende diretamente de:
Module:Temporada/UtilsModule:Temporada/Partidas
E carrega dinamicamente os dados de cada temporada a partir de:
Module:Temporada/Dados/ANO
---
Estrutura de dados
Estrutura base
A função interna de criação da estrutura estatística gera os seguintes campos:
- Estatísticas gerais
jogosvitoriasempatesderrotasgols_progols_contrasaldoaproveitamento
- Estatísticas como mandante
- Estatísticas como visitante
Cada subestrutura mantém seus próprios totais.
---
Funções internas
processarPartida(stats, partida)
Processa uma partida individual e acumula seus dados na estrutura estatística.
- Ignora partidas:
- Anuladas
- Marcadas como não contabilizáveis
- Identifica se o Atlético atuou como:
- Mandante
- Visitante
- Atualiza:
- Contadores de jogos
- Gols pró e contra
- Resultado (V, E, D)
---
Funções públicas
calcularPorAno(ano)
Calcula todas as estatísticas da temporada informada.
- Parâmetro
ano(number)
- Fluxo de execução
- Cria estrutura estatística vazia
- Carrega dinamicamente o módulo de dados do ano
- Processa cada partida
- Calcula saldos e aproveitamento
- Retorno
- Tabela Lua com estatísticas consolidadas
---
render(frame)
Função pública de renderização da tabela de estatísticas gerais.
- Uso
- Template:EstatisticasTemporada
- Parâmetro
frame.args.ano
- Saída
- Tabela wiki com:
- Totais gerais
- Mandante
- Visitante
- Tabela wiki com:
---
Regras de validação
O módulo aplica validações defensivas:
- Ano inválido retorna erro controlado
- Partidas inválidas são ignoradas
- Campos ausentes são tratados como zero
- Aproveitamento é calculado apenas ao final
---
Boas práticas e manutenção
- Não adicionar lógica editorial neste módulo
- Manter separação clara entre cálculo e apresentação
- Não alterar estrutura de retorno sem revisar dependências
- Novos campos estatísticos devem ser documentados
- Dados históricos devem ser adicionados apenas em
Módulo:Temporada/Dados/ANO
---
Páginas relacionadas
- Módulo:Temporada
- Módulo:Temporada/Utils
- Módulo:Temporada/Partidas
- Módulo:Temporada/Dados/1919
- Predefinição:EstatisticasTemporada
---
Histórico
- Módulo criado para consolidação estatística centralizada
- Estruturado para evitar repetição de cálculos entre templates
- Preparado para expansão futura de indicadores
-- Module:Temporada/Estatisticas
-- Consolidação estatística das partidas de uma temporada
-- Projeto Wiki Galo Digital
--
-- ETAPA 3 – Estatísticas Gerais
--
-- Dependências:
-- - Module:Temporada/Utils
-- - Module:Temporada/Partidas
local Utils = require("Module:Temporada/Utils")
local Partidas = require("Module:Temporada/Partidas")
local Estatisticas = {}
--------------------------------------------------
-- Estrutura base de estatísticas
--------------------------------------------------
local function novaEstrutura()
return {
jogos = 0,
vitorias = 0,
empates = 0,
derrotas = 0,
gols_pro = 0,
gols_contra = 0,
saldo = 0,
aproveitamento = "-",
mandante = {
jogos = 0,
vitorias = 0,
empates = 0,
derrotas = 0,
gols_pro = 0,
gols_contra = 0,
saldo = 0
},
visitante = {
jogos = 0,
vitorias = 0,
empates = 0,
derrotas = 0,
gols_pro = 0,
gols_contra = 0,
saldo = 0
}
}
end
--------------------------------------------------
-- Processa uma partida individual
--------------------------------------------------
local function processarPartida(stats, partida)
-- Ignora partidas inválidas
if partida.anulada or not partida.conta then
return
end
local lado
if Utils.isAtletico(partida.mandante) then
lado = "mandante"
elseif Utils.isAtletico(partida.visitante) then
lado = "visitante"
else
return
end
stats.jogos = stats.jogos + 1
stats[lado].jogos = stats[lado].jogos + 1
local golsPro, golsContra, resultado
if lado == "mandante" then
golsPro = partida.gols_mandante or 0
golsContra = partida.gols_visitante or 0
resultado = partida.resultado_mandante
else
golsPro = partida.gols_visitante or 0
golsContra = partida.gols_mandante or 0
resultado = partida.resultado_visitante
end
stats.gols_pro = stats.gols_pro + golsPro
stats.gols_contra = stats.gols_contra + golsContra
stats[lado].gols_pro = stats[lado].gols_pro + golsPro
stats[lado].gols_contra = stats[lado].gols_contra + golsContra
if resultado == "V" then
stats.vitorias = stats.vitorias + 1
stats[lado].vitorias = stats[lado].vitorias + 1
elseif resultado == "E" then
stats.empates = stats.empates + 1
stats[lado].empates = stats[lado].empates + 1
elseif resultado == "D" then
stats.derrotas = stats.derrotas + 1
stats[lado].derrotas = stats[lado].derrotas + 1
end
end
--------------------------------------------------
-- Calcula estatísticas a partir do módulo de dados da temporada
--------------------------------------------------
function Estatisticas.calcularPorAno(ano)
local stats = novaEstrutura()
local ok, Dados = pcall(require, "Module:Temporada/Dados/" .. ano)
if not ok or not Dados or not Dados.partidas then
return stats
end
for _, args in ipairs(Dados.partidas) do
local partida = Partidas.criar(args)
processarPartida(stats, partida)
end
stats.saldo = stats.gols_pro - stats.gols_contra
stats.mandante.saldo = stats.mandante.gols_pro - stats.mandante.gols_contra
stats.visitante.saldo = stats.visitante.gols_pro - stats.visitante.gols_contra
stats.aproveitamento = Utils.aproveitamento(
stats.vitorias,
stats.jogos * 3
)
return stats
end
--------------------------------------------------
-- Renderização pública (Template:EstatisticasTemporada)
--------------------------------------------------
function Estatisticas.render(frame)
local ano = tonumber(frame.args.ano)
if not ano then
return "Erro: parâmetro <code>ano</code> não informado ou inválido."
end
local stats = Estatisticas.calcularPorAno(ano)
return string.format([[
{| class="wikitable gd-table gd-estatisticas"
|+ Estatísticas Gerais – Temporada %d
! !! Jogos !! Vitórias !! Empates !! Derrotas !! Gols pró !! Gols contra !! Saldo !! Aproveitamento
|-
! Total
| %d
| %d
| %d
| %d
| %d
| %d
| %d
| %s
|-
! Mandante
| %d
| %d
| %d
| %d
| %d
| %d
| %d
| –
|-
! Visitante
| %d
| %d
| %d
| %d
| %d
| %d
| %d
| –
|}
]],
ano,
-- TOTAL
stats.jogos,
stats.vitorias,
stats.empates,
stats.derrotas,
stats.gols_pro,
stats.gols_contra,
stats.saldo,
stats.aproveitamento,
-- MANDANTE
stats.mandante.jogos,
stats.mandante.vitorias,
stats.mandante.empates,
stats.mandante.derrotas,
stats.mandante.gols_pro,
stats.mandante.gols_contra,
stats.mandante.saldo,
-- VISITANTE
stats.visitante.jogos,
stats.visitante.vitorias,
stats.visitante.empates,
stats.visitante.derrotas,
stats.visitante.gols_pro,
stats.visitante.gols_contra,
stats.visitante.saldo
)
end
return Estatisticas