# ONE CORE

ONE CORE est le socle technique commun d'une suite d'applications professionnelles auto-hebergees.

Il n'est pas un produit metier final : il fournit un noyau reutilisable pour des modules comme ONE ADMIN, ONE DATA, ONE CRM, ONE KPI ou ONE WORKFLOW.

Le paquet de base est volontairement vierge : aucun module metier n'est installe par defaut.

## Stack

- PHP 8.2+
- CodeIgniter 4
- MySQL / MariaDB
- Bootstrap 5
- JavaScript vanilla
- DomPDF
- API OpenAI

## Fonctionnalites V1

- Authentification interne
- Utilisateurs, roles et permissions
- Dashboard principal
- Systeme de modules avec `module.json`
- Connexions SQL externes en lecture seule
- Moteur IA generique avec historique
- Journal d'audit
- Settings globaux
- Exports CSV, PDF et JSON via service
- Licence et compteurs d'usage

## Installation locale

```bash
cp .env.local.example .env
php spark key:generate
composer install
php spark migrate
php spark db:seed CoreSeeder
php spark serve --host 127.0.0.1 --port 8092
```

Compte admin par defaut si vous gardez l'exemple local :

```txt
admin@one-core.local
ChangeMe123!
```

## Production

```bash
cp .env.production.example .env
composer install --no-dev --optimize-autoloader
php spark key:generate
php spark migrate
php spark db:seed CoreSeeder
php spark optimize
```

En production, renseigner imperativement :

- `app.baseURL`
- `database.default.*`
- `admin.seed_email`
- `admin.seed_password`
- `openai.api_key` si le moteur IA doit appeler OpenAI

Le document root du serveur doit pointer vers :

```txt
public/
```

## Modules

Les modules sont places dans :

```txt
app/Modules/
```

Chaque module peut declarer :

- `module.json`
- routes
- permissions
- menus
- controllers
- views
- services
- migrations

Le depot de base ne contient aucun module installe. Les modules sont livres separement et peuvent etre ajoutes ensuite dans `app/Modules/`.

## Securite

Les connexions SQL externes sont bloquees en lecture seule par defaut.

Mots-cles interdits :

- `INSERT`
- `UPDATE`
- `DELETE`
- `DROP`
- `ALTER`
- `TRUNCATE`
- `CREATE`
- `REPLACE`

Les mots de passe de connexions SQL sont chiffres avec la cle d'encryption CodeIgniter.
