Aplicação web em **CodeIgniter 4 + Shield + MySQL 8** para gerir o Concurso Nacional de Soletração de Angola: inscrições, execução das provas (escolar → provincial → nacional), banco de palavras, CMS editorial e notificações multi-canal (sistema, e-mail, SMS via pro2sms.ao).
# Concurso Nacional de Soletração — Angola
Aplicação web em **CodeIgniter 4 + Shield + MySQL 8** para gerir o
Concurso Nacional de Soletração de Angola: inscrições, execução das provas
(escolar → provincial → nacional), banco de palavras, CMS editorial e
notificações multi-canal (sistema, e-mail, SMS via pro2sms.ao).
## Requisitos
- PHP 8.1+ (extensões: intl, mbstring, json, mysqlnd, curl, gd)
- Composer 2
- MySQL 8.0+ ou MariaDB 10.5+
- Servidor web (Apache/Nginx) ou `php spark serve` para desenvolvimento
## Instalação
```bash
# 1. Dependências
composer install
# 2. Ambiente
cp env .env
# Editar .env: base de dados, chaves, SMTP e pro2sms.
# Definir também (para o superadmin inicial):
# superadmin.email = admin@soletracao.ao
# superadmin.senha =
# 3. Chaves de encriptação (DUAS, distintas)
php spark key:generate # preenche encryption.key
php spark key:generate --show # copiar o valor para urlcrypt.chave no .env
# 4. Base de dados
# Criar a BD vazia definida no .env (ex.: CREATE DATABASE soletracao ...)
php spark migrate # cria as 53 tabelas, views e triggers
php spark db:seed InicialSeeder # províncias + superadmin
php spark cache:clear # limpar a cache dos menus
# 5. Arrancar (desenvolvimento)
php spark serve
# Aceder a
localhost
```
## Tarefas agendadas (produção)
```cron
* * * * * cd /caminho/projeto && php spark notificacoes:processar >> /dev/null 2>&1
* * * * * cd /caminho/projeto && php spark cms:publicar-agendados >> /dev/null 2>&1
```
## Estrutura
```bash
app/
Config/ Configuração (App, Services, AuthGroups, Filters, Rotas/, ...)
Controllers/ Público, Admin (por módulo), Api
Services/ Regras de negócio: Comum, Seguranca, Concurso, Cms, Notificacoes
Models/ Um por tabela de negócio
Entities/ Candidato, Noticia, Palavra
Filters/ Escopo territorial, auditoria, rate limit
Helpers/ data, texto, url_crypt, formato
Libraries …