Pular para o conteúdo principal

Status: Approved · v2 · SPEC-DOMAIN-CHAMPIONSHIP-001

depends_on: SPEC-DOMAIN-MATCH-001, SPEC-DOMAIN-TEAM-001, SPEC-DOMAIN-PAYMENT-001

used_by: IS-MVP-01.4, IS-MVP-07.1, IS-MVP-07.4, IS-MVP-07.5

Campeonatos

Entidade independente para organizar competições, edições, regulamentos, inscrições, fases, partidas e disciplina.

Objetivo e limites

Esta especificação define o comportamento canônico do domínio Campeonatos no RaizFC. Ela deve ser consultada antes de alterar contratos, mocks, endpoints, telas, permissões ou Increment Specifications relacionados.

Incluído no MVP

  • Rascunho gratuito e publicação paga por Pix simulado.
  • Edições independentes.
  • Regulamento em texto, regras estruturadas e PDF opcional.
  • Convite, pedido ou ambos para inscrição.
  • Pontos corridos, grupos+mata, mata direto, liga ida/volta e mata ida/volta.
  • Fixtures automáticos sem datas ou manuais.
  • Classificação, artilharia e disciplina.

Fora do MVP

  • Sorteios transmitidos.
  • Bilheteria.
  • Premiação financeira.
  • Integração com federações.
  • Sistema completo de arbitragem.

Atores e responsabilidades

AtorResponsabilidade
VisitanteConsulta página, regulamento, tabela, classificação e artilharia.
OrganizadorCria rascunho, publica e gerencia edição.
Gestor de timeSolicita inscrição, envia atletas e contesta dados.
JogadorAparece em inscrições e stats conforme elegibilidade.
OperaçãoModera publicação, pagamentos e disputas excepcionais.

Conceitos canônicos

Championship

Marca/entidade duradoura.

Edition

Instância temporal com inscrições, fases e jogos.

Phase

Grupo, liga ou mata-mata dentro da edição.

Fixture

Confronto planejado; pode existir sem data.

Regulation

Texto e regras estruturadas bloqueáveis após marcos.

Eligibility Rule

Regra de participação de times e jogadores.

Invariantes

  • Campeonato em draft não aparece na busca pública geral.
  • Publicação exige pagamento confirmado e idempotente.
  • Cada edição pertence a um campeonato.
  • Formato e fases devem ser compatíveis.
  • Classificação usa apenas partidas validadas.
  • Alterações de regulamento após bloqueio exigem override auditado e aviso.
  • Atleta não pode violar regra de exclusividade da edição.
  • Campeonato não possui wallet nem sponsors no MVP.

Estados

EstadoSignificadoVisibilidade/efeito
draftRascunho privadoConfiguração livre.
waiting_paymentPublicação solicitadaPix pendente; permanece não público.
publishedPublicadoPágina e inscrições conforme janela.
registration_openInscrições abertasTimes podem entrar conforme modo.
in_progressCompetição em andamentoRegras críticas bloqueadas.
finishedEncerradoHistórico e stats finais.
cancelledCanceladoMotivo público/administrativo.
suspendedSuspensoOperação bloqueia ações.

Transições permitidas

OrigemAçãoDestinoAutoridadeEfeitos
createdraftUsuário autenticadoCria owner e edição opcional.
draftrequest_publicationwaiting_paymentOwner/financialGera Pix.
waiting_paymentpayment_confirmedpublishedWebhook/providerPublica idempotentemente.
publishedopen_registrationregistration_openGestorAbre janela.
registration_openclose_registrationpublished/in_progressGestor/jobBloqueia novas inscrições.
published/registration_openstartin_progressGestorBloqueia formato/regra conforme política.
in_progressfinishfinishedGestorFinaliza após resultados.
anycancelcancelledOwner/operaçãoRegistra motivo.

Permissões

Permission keyQuem recebe por padrãoAção protegidaAuditoria
championship.editProfileAdminIdentidade e descriçãoSim
championship.manageEditionCompetition/AdminEdições, formato e fasesSim
championship.manageRegulationCompetition/AdminRegulamentoSim
championship.manageRegistrationsRegistrations/AdminConvites/pedidos/atletasSim
championship.manageFixturesCompetition/AdminConfrontos e datasSim
championship.manageDisciplineDiscipline/AdminCartões, suspensões e overridesSim
championship.publishFinancial/Primary ownerIniciar pagamento de publicaçãoSim
championship.manageManagersAdmin/OwnerAcessosSim

Fluxos funcionais

Criação e publicação

  1. Organizador cria campeonato draft.
  2. Define identidade, distrito, edição, formato e regulamento mínimo.
  3. Solicita publicação com Idempotency-Key.
  4. Pix simulado é criado por 30 minutos.
  5. Confirmação publica; expiração mantém draft.

Inscrição de time

  1. Edição abre janela e modo.
  2. Organizador convida ou time solicita.
  3. Parte oposta aprova quando necessário.
  4. Time escolhe categoria e envia lista preliminar conforme regras.
  5. Inscrição vira approved e aparece publicamente.

Geração de fixtures

  1. Gestor define participantes e formato.
  2. Sistema valida número mínimo e parâmetros.
  3. Gera confrontos sem data ou com regras básicas.
  4. Gestor revisa e confirma.
  5. Alterações após início exigem auditoria.

Disciplina

  1. Eventos validados alimentam cartões.
  2. Regra configurada calcula pendurados e suspensões.
  3. Escalação verifica elegibilidade.
  4. Override exige motivo e fica visível conforme política.

Contestação de dados

  1. Time contesta resultado, inscrição ou disciplina dentro do prazo.
  2. Organizador responde ou retifica.
  3. Se persistir, disputa formal registra evidências e decisão.

Casos-limite e erros

CenárioComportamento esperadoCódigo/estado
Pix expiraVoltar/continuar draft sem publicarPAYMENT_EXPIRED
Formato incompatível com participantesRejeitar geraçãoINVALID_CHAMPIONSHIP_FORMAT
Regulamento bloqueadoExigir override e notificaçãoREGULATION_LOCKED
Atleta em outro time proibidoBloquear inscrição/escalaçãoPLAYER_NOT_ELIGIBLE
Fixture duplicadoRejeitar ou substituir com confirmaçãoDUPLICATE_FIXTURE
Classificação com partida contestadaIgnorar provisoriamenteSTANDINGS_PENDING_MATCH

Privacidade e exposição pública

  • Regulamento publicado é público.
  • Listas de atletas respeitam perfil/privacidade, mas elegibilidade pode exibir nome esportivo.
  • Pagamentos e dados de gestão são privados.
  • Evidências de disputa são restritas.

Notificações e auditoria

  • Convites e pedidos de inscrição.
  • Abertura/fechamento de janela.
  • Pagamento e publicação.
  • Alteração de regulamento.
  • Fixtures/data.
  • Cartões, pendurados e suspensão.
  • Contestações e decisões.

API relacionada

MétodoRotaAcessoFinalidade
POST/api/v1/championshipsAutenticadoCriar draft
GET/api/v1/championships/:slugPúblicoPágina
PATCH/api/v1/championships/:idGestãoEditar
POST/api/v1/championships/:id/publishchampionship.publishCriar Pix
POST/api/v1/championships/:id/editionschampionship.manageEditionCriar edição
PUT/api/v1/championships/:id/editions/:editionId/regulationchampionship.manageRegulationRegulamento
POST/api/v1/championships/:id/editions/:editionId/registrationsGestão/timeInscrição
POST/api/v1/championships/:id/editions/:editionId/fixtures/generatechampionship.manageFixturesGerar
GET/api/v1/championships/:id/editions/:editionId/standingsPúblicoClassificação
GET/api/v1/championships/:id/editions/:editionId/top-scorersPúblicoArtilharia

Contratos compartilhados

  • ChampionshipEntity
  • PublicChampionshipDto
  • ChampionshipEditionDto
  • ChampionshipFormat
  • ChampionshipPhaseDto
  • RegulationDto
  • RegistrationDto
  • AthleteEligibilityRuleDto
  • FixtureDto
  • StandingsDto
  • DisciplineRuleDto

Requisitos de UX

  • Página pública apresenta edição ativa, regulamento, participantes, tabela, classificação, jogos, artilharia e disciplina.
  • Painel usa sequência guiada: identidade → edição → regulamento → inscrições → formato/fases → fixtures → jogos → disciplina.
  • Publish explica preço, prazo do Pix e consequência da expiração.
  • Configuração avançada aparece progressivamente.

Comportamento dos mocks

  • Campeonato draft, waiting_payment, published, registration_open, in_progress e finished.
  • Pix fake pago/expirado.
  • Geração determinística de fixtures.
  • Standings recalculadas somente com validated.
  • Elegibilidade e disciplina com erros previsíveis.

Critérios de aceite

  • Draft gratuito e privado.
  • Publicação somente após pagamento confirmado.
  • Formatos MVP funcionam.
  • Fixtures podem nascer sem datas.
  • Standings ignoram partidas contestadas.
  • Regulamento bloqueado exige override.

Testes obrigatórios

  • Publicação idempotente e expiração.
  • Inscrição por modos.
  • Elegibilidade de atleta.
  • Geração de formatos.
  • Classificação e desempate.
  • Disciplina e override.
  • Lock de regulamento.

Pós-MVP

  • Bilheteria e inscrições pagas.
  • Premiação.
  • Arbitragem e escalas.
  • Sorteios públicos.
  • Sponsors do campeonato.

Decisões registradas

  • Campeonato é entidade independente.
  • Publicação é paga por Pix separado e não usa wallet.
  • Sem sponsors/wallet no MVP.
  • Edições concentram operação competitiva.

Machine summary

spec: SPEC-DOMAIN-CHAMPIONSHIP-001
domain: Campeonatos
must_preserve:
- Campeonato em draft não aparece na busca pública geral.
- Publicação exige pagamento confirmado e idempotente.
- Cada edição pertence a um campeonato.
- Formato e fases devem ser compatíveis.
- Classificação usa apenas partidas validadas.
- Alterações de regulamento após bloqueio exigem override auditado e aviso.
- Atleta não pode violar regra de exclusividade da edição.
- Campeonato não possui wallet nem sponsors no MVP.
touches:
- contracts
- mocks
- api
- frontend
- backend
- tests
- documentation