# Módulo Core (Fundação)

O módulo **Core** é o coração do EducaGest. Ele gerencia as funcionalidades básicas que todos os outros módulos utilizam, como multi-tenancy, autenticação, autorização e logs.

## 🔑 Multi-Tenancy

O EducaGest usa uma arquitetura de **Banco de Dados Compartilhado com Identificador de Tenant**.

- **Model**: O `tenant_id` é obrigatório em quase todas as tabelas.
- **Isolamento**: Implementado via `App\Modules\Core\Scopes\TenantScope`.
- **Identificação**: O tenant é identificado via **Path** na URL: `/t/{slug}/...`.

```php
// Exemplo de uso automático do TenantScope
$alunos = Aluno::all(); // Retorna apenas alunos do tenant atual logado
```

## 🛡️ RBAC (Controle de Acesso)

Sistema baseado em Perfis (Roles) e Permissões (Permissions).

### Perfis Padrão:
- **SuperAdmin**: Acesso total a todos os tenants.
- **School**: Administrador do tenant.
- **Teacher**: Acesso acadêmico.
- **Student / Guardian**: Acesso limitado aos seus próprios dados.

## 👤 Modelo de Usuário

O model `App\Modules\Core\Models\User` foi extendido para suportar:
- `tenant_id`: Vínculo com a escola.
- `role_id`: Vínculo com perfil de acesso.
- `status`: [active, inactive, suspended, pending].
- `avatar`: Gestão de imagem de perfil.
- `address`: Dados de localização via cast JSON.

## 📡 Comunicação AJAX

Todas as requisições de formulários são tratadas via `resources/js/ajax.js`.

### Exemplo de requisição:
```javascript
const response = await window.AJAX.post('/admin/usuarios', formData);
if (response.success) {
    window.Notifications.success(response.message);
}
```

## 📜 Logs de Atividade

Implementado via Trait `LogsActivity`. Quaisquer mudanças nos models que usam esta trait são registradas automaticamente na tabela `activity_logs`.

---
[Próximo Passo: Arquitetura e Diagramas →](docs/architecture.md)
