# Plan technique — ERP modulaire multi-tenant (extension TIJARA)

> Produit **avant** modifications critiques. Aucune rewrite / aucune nouvelle app.

## 1. État actuel (scan)

| Domaine | Statut |
|---------|--------|
| Stack | PHP monolith + Flutter, SQLite/MySQL, JWT |
| Multi-société | `companies` + `user_companies` + `switch_company()` |
| Multi-agence | Table `branches` (CRUD) — **pas encore de scope métier** |
| Auth / rôles | Session + JWT ; rôles métier existants |
| CORE commercial | Clients → Devis → CMD → BL → Factures → Paiements |
| Achats / OCR / GED / Flotte | Déjà livrés (extensions précédentes) |
| i18n | FR + AR |
| GPS / IA / SaaS plans / Contrats / Exercices | Absents ou stubs partiels |

## 2. Principes CDC

1. **CORE simple** — flotte/GPS/IA/stock = modules optionnels  
2. **Isolation tenant** = `company_id` (pas de DB séparée)  
3. **Module désactivé** = masqué nav + `can()` refuse + API 403  
4. **Default safe** : si pas de ligne `company_modules` → modules « legacy » activés (pas de régression)  
5. Migrations additives uniquement  

## 3. Architecture modules

```
CORE (toujours ON)
  dashboard, clients, fournisseurs*, produits, devis, commandes, bl,
  factures, avoirs, paiements, depenses, documents, rapports,
  users, settings, recherche, notifications

OPTIONNELS
  purchases | stock | treasury | fleet | maintenance | ocr |
  contracts | subscriptions | multi_branch | gps | ai | accounting
```

\* Fournisseurs restent CORE (contacts) ; **Achats / FF** = module `purchases`.

## 4. Plan par phases (implémentation)

### Phase 1 — Fondations ✅ (livrée)
- Table `company_modules`, `saas_plans`, `company_subscriptions` (SaaS)
- `includes/modules.php` : registry + `module_enabled()` + `require_module()`
- Rôles : `SUPER_ADMIN`, `DIRECTEUR`, `MAGASINIER`, `EMPLOYE`
- Nav + `can()` filtrés par module
- UI Paramètres → Modules actifs
- `user_branches` (préparation scope agence)
- Exercices `fiscal_years` + config numérotation `numbering_rules` (+ `next_number` lit les règles)
- Stubs pages : Contrats, GPS, Assistant IA
- i18n EN (cycle FR→AR→EN)
- Seed démo + `/api/me` + Flutter nav filtrée par modules

### Phases suivantes (CDC v1.0)
Voir matrice précise : `CONFORMITE-CDC-V1.md`

- **LegalRules + RH fondations** : livré (schema, seed MA, employés, congés, alertes, users)
- **Paie / CNSS / IR / Damancom** : architecture page `paie.php` — calcul bulletins + export déclaratif ensuite
- Enrichir : `branch_id` métier, facturation récurrente auto, trésorerie mouvements, GPS/IA réels

## 5. Risques régression & mitigation

| Risque | Mitigation |
|--------|------------|
| Nav disparaît | Default modules ON si table vide |
| ADMIN bloqué | ADMIN company = * ; SUPER_ADMIN plateforme |
| Pages direct URL | `guard_page` + `require_module` |
| Flutter | `/api/me` expose `modules[]` |

## 6. Fichiers touchés (Phase 1)

- `includes/modules.php` (nouveau)
- `includes/permissions.php`, `layout_header.php`, `i18n.php`, `auth.php`
- `sql/schema_modules.*`, `migrate_modules.php`, `install.php`
- `public/parametres_modules.php`, `contrats.php`, `gps_module.php`, `assistant_ia.php`
- `public/api` me + modules
- Flutter : masquer nav selon modules

## 7. Non-objectifs de cette itération

- Paiement Stripe/SaaS réel  
- Intégration GPS live  
- LLM production  
- Rewrite Next.js / nouvelle app Flutter  
