---
title: "Cahier des Charges - Store de Connecteurs ISI-APP"
module: store
type: functional
status: active
updated: 2026-08-10
---

# Cahier des Charges - Store de Connecteurs ISI-APP

**Version :** 3.0 (finale)
**Date originale :** 06/03/2024
**Auteur initial :** Sebastien DELDON
**Mise a jour :** Janvier 2026

---

## 1. Vision et objectifs

### 1.1 Contexte

ISI-APP souhaite creer un **Store de connecteurs** permettant d'interfacer la plateforme avec des sources de donnees externes (entrantes et sortantes).

### 1.2 Objectifs principaux

| Objectif | Description |
|----------|-------------|
| **Multiplier les sources** | Permettre l'integration de multiples sources de donnees entrantes et sortantes |
| **Cadrer les flux** | Standardiser et controler les synchronisations de donnees |
| **Securite** | Gerer les authentifications de maniere centralisee et securisee |
| **Mapping coherent** | Permettre la correspondance des donnees entre systemes heterogenes |
| **Performance** | Optimiser via tables temporaires et synchronisations ciblees |

### 1.3 Categories et connecteurs prevus

| Categorie | Connecteurs prevus |
|-----------|-------------------|
| **Materiels** | OCS, Intune, Datto, NinjaOne, Atera, GLPI |
| **SSO** | Google, Azure, KeyCloak, OpenLDAP |
| **Utilisateurs** | Google, Azure, KeyCloak |
| **Tickets** | GLPI, iTop, Andi, ZohoDesk, ZenDesk |
| **Immobilier** | ICS |
| **Widgets** | LinkedIn, Facebook, ... |

> Les connecteurs SSO permettent a la fois l'authentification ET la synchronisation des utilisateurs/groupes.

---

## 2. Modele economique du Store

### 2.1 Types de connecteurs

| Type | Comportement | Exemple |
|------|--------------|---------|
| **Gratuit** | Installation autonome par le client | - |
| **Payant** | Cout d'installation + cout recurrent possible | Office 365 |

### 2.2 Regles validees

- **Installation** : Realisee par l'equipe ISI-APP ou par les prestataires partenaires
- **Pas de periode d'essai** pour les connecteurs payants
- **Tarification** : Cout d'installation fixe + abonnement recurrent optionnel

---

## 3. Architecture des donnees

### 3.1 Entite principale : Connecteur (definition dans le Store)

Un connecteur represente un **type d'integration** disponible dans le Store (ex: "Connecteur OCS", "Connecteur GLPI").

| Champ | Type | Description |
|-------|------|-------------|
| `id` | INT | Identifiant unique |
| `lbname` | VARCHAR | Nom du connecteur (ex: OCS, ENTRA, GLPI) |
| `tpcategorie` | ENUM | materiel, utilisateur, immobilier, ticket, sso, widget |
| `tpconnexion` | ENUM | API, Fichier, Base de donnees, Webhook |
| `tpauth` | ENUM | OAuth2, Basic Auth, Token, LDAP, Aucune |
| `tpsens_possible` | ENUM | entrant, sortant, bidirectionnel |
| `blgratuit` | BOOLEAN | Gratuit (true) ou payant (false) |
| `mtinstallation` | DECIMAL | Cout d'installation (si payant) |
| `mtrecurrent` | DECIMAL | Cout recurrent mensuel (si applicable) |
| `lbdescription` | TEXT | Description affichee dans le Store |
| `lblogo` | VARCHAR | Chemin vers le logo du connecteur |
| `blsupport_delta` | BOOLEAN | Supporte la synchro delta (si false, option desactivee) |
| `blactif` | BOOLEAN | Connecteur disponible dans le Store |
| `dtcreate` | DATETIME | Date de creation |
| `dtdel` | DATETIME | Soft delete |

### 3.2 Entite : Instance de connecteur

Une instance represente une **configuration active** d'un connecteur pour un client/entite donne. Un meme connecteur peut avoir plusieurs instances (ex: OCS interne + Intune).

| Champ | Type | Description |
|-------|------|-------------|
| `id` | INT | Identifiant unique |
| `_id` | INT | Entity ID (multi-tenant) |
| `connecteur_id` | INT | Reference au connecteur |
| `lbname` | VARCHAR | Nom de l'instance (ex: "OCS Production") |
| `lburl` | VARCHAR | URL ou endpoint de connexion |
| `jsparams_auth` | JSON | Parametres d'authentification (chiffres) |
| `tpsens` | ENUM | vers_isiapp, vers_source, bidirectionnel |
| `blactif` | BOOLEAN | Instance activee ou non |
| `tpdeclencheur` | ENUM | manuel, planifie |
| `tpfrequence` | ENUM | 5min, 10min, 20min, 60min, 12h, 24h, 7j, 30j, disabled |
| `idequipe` | INT | Equipe responsable (pour notifications) |
| `dtlast_sync` | DATETIME | Derniere synchronisation |
| `tplast_status` | ENUM | success, error, warning, pending |
| `dtcreate` | DATETIME | Date de creation |
| `dtdel` | DATETIME | Soft delete |

> Frequences : 5min, 10min, 20min, 60min, 12h, 24h, 7j, 30j
> Clients Free : synchro automatique desactivee (manuel uniquement)
> Sens d'ecriture configurable par instance : vers ISI-APP, vers Source, ou Bidirectionnel

### 3.3 Entite : Flux de donnees

Chaque instance de connecteur peut avoir plusieurs flux de donnees.

| Champ | Type | Description |
|-------|------|-------------|
| `id` | INT | Identifiant unique |
| `instance_id` | INT | Reference a l'instance de connecteur |
| `lbname` | VARCHAR | Nom du flux (ex: "Synchro materiels") |
| `tpsens` | ENUM | entrant, sortant |
| `lbtable_temp` | VARCHAR | Nom de la table tampon |
| `lbtable_cible` | VARCHAR | Table de destination ISI-APP |
| `tpstrategie` | ENUM | full, delta |
| `blactif` | BOOLEAN | Flux active |
| `dtcreate` | DATETIME | Date de creation |
| `dtdel` | DATETIME | Soft delete |

> L'option delta sera desactivee/grisee si le connecteur ne le supporte pas (`blsupport_delta = false`).

### 3.4 Entite : Mapping de champs

Correspondance entre les champs de la source et ceux d'ISI-APP.

| Champ | Type | Description |
|-------|------|-------------|
| `id` | INT | Identifiant unique |
| `flux_id` | INT | Reference au flux |
| `lbchamp_source` | VARCHAR | Nom du champ dans la source externe |
| `lbchamp_cible` | VARCHAR | Nom du champ dans ISI-APP |
| `jstransformations` | JSON | Liste ordonnee des transformateurs a appliquer |
| `blrequis` | BOOLEAN | Champ obligatoire |
| `lbvaleur_defaut` | VARCHAR | Valeur par defaut si source vide |

### 3.5 Entite : Transformateurs de donnees

Liste des transformateurs disponibles (table de reference).

| Champ | Type | Description |
|-------|------|-------------|
| `id` | INT | Identifiant unique |
| `lbcode` | VARCHAR | Code technique (ex: DATE_TO_US, UPPERCASE) |
| `lbname` | VARCHAR | Nom affiche (ex: "Date -> Format US") |
| `lbdescription` | TEXT | Description de l'effet |
| `tpcategorie` | ENUM | date, texte, nombre, nom, autre |
| `blactif` | BOOLEAN | Transformateur disponible |

**Transformateurs a implementer (V1) :**

| Code | Categorie | Description |
|------|-----------|-------------|
| `DATE_TO_US` | date | Convertit toute date en format YYYY-MM-DD |
| `DATE_TO_FR` | date | Convertit toute date en format DD/MM/YYYY |
| `DATE_TO_DATETIME` | date | Ajoute l'heure 00:00:00 si absente |
| `UPPERCASE` | texte | Tout en majuscules |
| `LOWERCASE` | texte | Tout en minuscules |
| `UCFIRST` | texte | Premiere lettre en majuscule |
| `UCWORDS` | texte | Premiere lettre de chaque mot en majuscule |
| `TRIM` | texte | Supprime espaces debut/fin |
| `TRIM_ALL` | texte | Supprime espaces multiples |
| `NAME_FORMAT` | nom | Formatage nom (MAJ) + prenom (Ucfirst) |
| `NAME_EXTRACT_FIRST` | nom | Extrait le prenom d'un champ "Nom Prenom" |
| `NAME_EXTRACT_LAST` | nom | Extrait le nom d'un champ "Nom Prenom" |
| `NUMBER_DOT` | nombre | Remplace virgule par point (decimal) |
| `NUMBER_COMMA` | nombre | Remplace point par virgule (decimal) |
| `NUMBER_INT` | nombre | Convertit en entier |
| `NUMBER_CLEAN` | nombre | Supprime espaces et caracteres non numeriques |
| `PHONE_FR` | autre | Formate en numero FR (+33 ou 0X XX XX XX XX) |
| `EMAIL_LOWERCASE` | autre | Email tout en minuscules |
| `BOOLEAN_TO_INT` | autre | true/false/yes/no/oui/non -> 1/0 |
| `NULL_IF_EMPTY` | autre | Chaine vide -> NULL |

> Les transformateurs sont **cumulables** et s'appliquent dans l'ordre defini.
> Mode "Custom" (formules avancees type LEFT, TRIM, etc.) -> reporte a une version ulterieure.

### 3.6 Entite : Mapping de valeurs

Correspondance entre les valeurs (ex: "PROD" -> "PRODUCTION").

| Champ | Type | Description |
|-------|------|-------------|
| `id` | INT | Identifiant unique |
| `mapping_champ_id` | INT | Reference au mapping de champ concerne |
| `lbvaleur_source` | VARCHAR | Valeur dans la source externe |
| `lbvaleur_cible` | VARCHAR | Valeur correspondante dans ISI-APP |
| `bldefaut` | BOOLEAN | Valeur par defaut si aucune correspondance |

### 3.7 Entite : Correspondance d'identifiants

Table de liaison entre les IDs des systemes externes et ISI-APP.

| Champ | Type | Description |
|-------|------|-------------|
| `id` | INT | Identifiant unique |
| `_id` | INT | Entity ID (multi-tenant) |
| `instance_id` | INT | Reference a l'instance de connecteur |
| `tpentite` | ENUM | materiel, utilisateur, ticket, contact, etc. |
| `lbid_source` | VARCHAR | ID dans le systeme externe |
| `id_cible` | INT | ID dans ISI-APP |
| `dtcreate` | DATETIME | Date de creation |
| `dtupdate` | DATETIME | Derniere mise a jour |

> Cette table **remplace** les champs comme `azure_id` dans les tables metier. Une **migration** sera necessaire pour les donnees existantes.

### 3.8 Entite : Exclusions de synchronisation

Permet d'ignorer definitivement certaines donnees ou certains champs.

| Champ | Type | Description |
|-------|------|-------------|
| `id` | INT | Identifiant unique |
| `_id` | INT | Entity ID (multi-tenant) |
| `instance_id` | INT | Reference a l'instance de connecteur |
| `tpexclusion` | ENUM | element, champ |
| `lbid_source` | VARCHAR | ID de l'element source a ignorer |
| `lbchamp` | VARCHAR | Nom du champ a ignorer (si tpexclusion = champ) |
| `lbraison` | VARCHAR | Raison de l'exclusion (optionnel) |
| `dtcreate` | DATETIME | Date de creation |

> Possibilite d'ignorer completement un element OU d'ignorer la mise a jour d'un champ specifique pour un element donne.

### 3.9 Entite : Notifications

Configuration des alertes liees aux synchronisations.

| Champ | Type | Description |
|-------|------|-------------|
| `id` | INT | Identifiant unique |
| `instance_id` | INT | Reference a l'instance de connecteur |
| `tpevenement` | ENUM | sync_complete, sync_error |
| `tpcanal` | ENUM | email, notification_app |
| `blactif` | BOOLEAN | Notification activee |

> Les destinataires = l'equipe definie sur l'instance (`idequipe`).
> **Un seul mail recapitulatif** en fin de traitement global (pas un mail par erreur).
> Le mail indique : X erreurs, X elements a valider, X succes.

### 3.10 Entite : Logs de synchronisation

Historique des synchronisations.

| Champ | Type | Description |
|-------|------|-------------|
| `id` | INT | Identifiant unique |
| `instance_id` | INT | Reference a l'instance |
| `dtstart` | DATETIME | Debut de la synchro |
| `dtend` | DATETIME | Fin de la synchro |
| `tpstatus` | ENUM | success, error, warning, partial |
| `nbtotal` | INT | Nombre total d'elements traites |
| `nbsuccess` | INT | Nombre de succes |
| `nberror` | INT | Nombre d'erreurs |
| `nbwarning` | INT | Nombre d'avertissements (validation requise) |
| `nbskipped` | INT | Nombre d'elements ignores (exclusions) |
| `jserrors` | JSON | Detail des erreurs |

---

## 4. Interface utilisateur

### 4.1 Store (catalogue des connecteurs)

**Page principale du Store** affichant tous les connecteurs disponibles avec :
- Filtres par categorie
- Distinction visuelle gratuit/payant (avec prix affiche)
- Bouton "Installer" (gratuit) ou "Demander un devis" (payant)
- Recherche par nom
- Fiche detaillee de chaque connecteur

### 4.2 Mes connecteurs (instances installees)

**Dashboard des instances actives** pour le client avec :
- Liste des instances configurees
- Statut de la derniere synchronisation (succes/erreur/en cours)
- Actions rapides : Activer/Desactiver, Synchroniser maintenant, Configurer
- Historique des synchronisations

> **Etat au 10/08/2026** : le menu d'actions des cards propose Activer/Desactiver, Configurer,
> Logs et Supprimer. L'action « Synchroniser maintenant » n'y figure pas (elle n'a jamais ete
> implementee : le bouton presente jusqu'ici n'affichait qu'un message d'indisponibilite).
> La synchronisation manuelle passe par les ecrans dedies de chaque connecteur.

### 4.3 Page de configuration d'une instance

**Formulaire de parametrage** comprenant :
- Informations de connexion (URL, authentification)
- Sens d'ecriture (vers ISI-APP / vers Source / Bidirectionnel)
- Frequence de synchronisation
- Equipe responsable (pour notifications)
- Configuration des flux
- Mapping des champs (avec transformateurs)
- Mapping des valeurs

### 4.4 Page de controle de synchronisation (par module metier)

**Acces depuis les pages metier** (ex: page Materiel) :

1. **Selection du connecteur** : Si plusieurs connecteurs sont actifs pour ce module, l'utilisateur choisit lequel traiter
2. **Lancement du calcul** : Bouton pour declencher l'analyse des differences
3. **Affichage unifie** dans une DataTable Livewire avec filtres :

| Colonne | Description |
|---------|-------------|
| Statut | Erreur / Validation requise / OK |
| Action | Creer / Modifier / Supprimer / Ignorer |
| Element source | Donnees de la source externe |
| Element ISI-APP | Donnees actuelles (si existant) |
| Differences | Champs modifies mis en evidence |
| Actions | Valider / Modifier / Ignorer element / Ignorer champ |

**Fonctionnalites :**
- **Liste unique** pour erreurs + validations + succes (avec filtres)
- **Recherche** et **filtres** sur tous les champs
- **Actions par ligne** :
  - Valider la modification
  - Ouvrir en modal pour modifier avant import
  - Ignorer cet element (definitivement)
  - Ignorer ce champ pour cet element (definitivement)
- **Actions groupees** : Valider tout, Ignorer selection

### 4.5 Back-office ISI-APP (Admin)

**Interface d'administration** reservee aux admins ISI-APP pour :
- Creer/modifier les definitions de connecteurs
- Gerer les categories
- Definir les prix des connecteurs payants
- Gerer la liste des transformateurs
- Voir les statistiques d'utilisation globales
- Gerer les demandes de devis

---

## 5. Flux de synchronisation

### 5.1 Processus general

```
Source externe  --->  Table temporaire  --->  Table ISI-APP
(OCS, GLPI...)       (staging)               (destination)
                          |
                          v
                   Mapping champs
                   + Transformateurs
                   + Mapping valeurs
                   + Validation
                   + Exclusions
```

### 5.2 Etapes detaillees

1. **Extraction** : Recuperation des donnees depuis la source (API, fichier, BDD)
2. **Staging** : Stockage dans une table temporaire
3. **Mapping champs** : Application des correspondances de champs
4. **Transformation** : Application des transformateurs (cumulables, dans l'ordre)
5. **Mapping valeurs** : Conversion des valeurs selon la table de correspondance
6. **Verification exclusions** : Filtrage des elements/champs ignores
7. **Validation** : Verification des donnees (types, contraintes, doublons)
8. **Comparaison** : Detection des differences avec les donnees ISI-APP existantes
9. **Presentation** : Affichage dans l'interface de controle
10. **Action utilisateur** : Validation, modification ou rejet
11. **Integration** : Ecriture dans les tables ISI-APP
12. **Liaison** : Mise a jour de la table de correspondance d'identifiants
13. **Notification** : Envoi du mail recapitulatif a l'equipe

### 5.3 Gestion des conflits (sens d'ecriture)

| Sens configure | Comportement |
|----------------|--------------|
| **Vers ISI-APP** | La source externe est maitre, ISI-APP recoit les donnees |
| **Vers Source** | ISI-APP est maitre, pousse les donnees vers l'externe |
| **Bidirectionnel** | Comparaison des deux, resolution manuelle si conflit |

> En V1, focus sur "Vers ISI-APP". Le bidirectionnel sera implemente ulterieurement.

### 5.4 Gestion des doublons multi-connecteurs

Si un meme element existe dans plusieurs sources (ex: meme PC dans OCS et Intune) :
- C'est a l'utilisateur de decider via l'interface de controle
- Possibilite d'ignorer definitivement l'import depuis un connecteur specifique

---

## 6. Securite et permissions

### 6.1 Stockage des credentials

Les parametres d'authentification (`jsparams_auth`) doivent etre :
- Chiffres en base de donnees (Laravel Crypt)
- Jamais exposes dans les logs
- Accessibles uniquement aux utilisateurs autorises

### 6.2 Permissions

| Niveau | Droits |
|--------|--------|
| **Admin general** | Tous les connecteurs, toutes les configurations |
| **Droits specifiques** | Assignation par equipe -> casse la logique admin general |

> Soit admin general (peut tout faire), soit droits specifiques par equipe sur des connecteurs precis.

**Table des droits :**

| Champ | Type | Description |
|-------|------|-------------|
| `id` | INT | Identifiant unique |
| `_id` | INT | Entity ID (multi-tenant) |
| `instance_id` | INT | Instance de connecteur concernee |
| `idequipe` | INT | Equipe autorisee |
| `blconfigurer` | BOOLEAN | Peut configurer l'instance |
| `blsynchroniser` | BOOLEAN | Peut lancer une synchro |
| `blvalider` | BOOLEAN | Peut valider les imports |

---

## 7. Perimetre et priorisation

### Phase 1 - Fondations (MVP)

- [ ] Modele de donnees complet (toutes les tables)
- [ ] Back-office admin : CRUD des connecteurs
- [ ] Back-office admin : gestion des categories
- [ ] Back-office admin : gestion des transformateurs
- [ ] Store : catalogue avec filtres et recherche
- [ ] Store : distinction gratuit/payant
- [ ] Store : installation connecteur gratuit
- [ ] Page "Mes connecteurs" : liste des instances
- [~] Migration des `azure_id` existants vers table de correspondance — **écartée** : le
      connecteur lit `users.azure_id` en complément des correspondances, ce qui couvre les
      15 841 comptes hérités sans migration de masse. Cf.
      `.claude/technical-docs/store/azure.md` §Détection d'action & staging.

### Phase 2 - Premier connecteur (OCS)

- [ ] Configuration instance OCS (URL, auth, frequence)
- [ ] Flux de synchronisation entrant (materiels)
- [ ] Interface de mapping des champs
- [ ] Transformateurs de donnees (liste V1)
- [ ] Interface de mapping des valeurs
- [ ] Table de correspondance d'identifiants
- [ ] Synchronisation manuelle
- [ ] Logs de synchronisation

### Phase 3 - Interface de controle

- [ ] Page de controle accessible depuis page Materiel
- [ ] Selection du connecteur (si multi-instances)
- [ ] DataTable Livewire avec statuts et filtres
- [ ] Actions : Valider / Modifier / Ignorer element / Ignorer champ
- [ ] Gestion des exclusions permanentes
- [ ] Modal d'edition avant import

### Phase 4 - Automatisation

- [ ] Synchronisation planifiee (CRON)
- [ ] Gestion des frequences (5min -> 30j)
- [ ] Desactivation synchro auto pour clients Free
- [ ] Notifications email (recapitulatif fin de traitement)
- [ ] Assignation equipe responsable

### Phase 5 - Permissions et connecteurs additionnels

- [ ] Systeme de permissions par equipe
- [ ] Connecteur Intune (materiels)
- [ ] Connecteur Azure AD (utilisateurs + SSO)
- [ ] Connecteur Google Workspace (utilisateurs + SSO)

### Phase 6 - Evolutions futures

- [ ] Connecteurs Tickets (GLPI, iTop, ZohoDesk, ZenDesk)
- [ ] Connecteurs payants + gestion devis
- [ ] Sens d'ecriture "Vers Source"
- [ ] Sens d'ecriture "Bidirectionnel"
- [ ] Transformateurs Custom (formules avancees)
- [ ] Webhooks (synchronisation temps reel)
- [ ] Connecteurs Widgets (LinkedIn, Facebook)

---

## 8. Annexes

### 8.1 Exemple de flux : Synchronisation OCS

```
1. CRON declenche la synchro de l'instance "OCS Production"
2. Appel API OCS -> recuperation de 500 materiels
3. Stockage dans table temporaire
4. Pour chaque materiel :
   a. Application mapping champs (hostname -> lbname, etc.)
   b. Application transformateurs (UPPERCASE sur lbname)
   c. Application mapping valeurs (PROD -> PRODUCTION)
   d. Verification exclusions (ce PC est-il ignore ?)
   e. Recherche correspondance ID dans table liaison
   f. Si trouve -> comparaison avec donnees ISI-APP existantes
   g. Si differences -> marquage "validation requise"
   h. Si non trouve -> marquage "creation"
5. Generation rapport : 480 OK, 15 validations, 5 erreurs
6. Envoi mail recapitulatif a l'equipe DSI
7. Utilisateur se connecte, va sur page Materiel
8. Selectionne connecteur OCS, voit la liste
9. Filtre sur "Validation requise"
10. Valide les 15 elements (ou modifie/ignore)
11. Donnees integrees dans table dsi_hw
12. Table liaison mise a jour avec les nouveaux IDs
```

---

## 9. Etat d'avancement (au 26/02/2026)

### Phase 1 — Fondations (terminee)

- Modele de donnees complet : 12 tables, 12 modeles Eloquent
- Back-office admin : CRUD connecteurs, categories, transformateurs
- 20 transformateurs implementes (date, texte, nom, nombre, divers)
- Store client : catalogue avec filtres, distinction gratuit/payant, installation en un clic
- Page "Mes connecteurs" : liste des instances, configuration, logs, test de connexion

### Phase 2 — Premier connecteur OCS (terminee)

Le connecteur OCS Inventory (parc materiel) est entierement operationnel via l'interface OCS v3 (`/ocs-v3`).

**Ce qui fonctionne :**
- Connexion dynamique a la base OCS distante par instance
- Extraction asynchrone du parc (job en queue, timeout 10 min)
- Detection automatique machines virtuelles vs physiques
- Deduplication des machines par numero de serie (conservation de l'inventaire le plus recent)
- Mapping configurable des champs OCS → ISI-APP (18 champs hardware)
- 4 onglets de review : Creations, Modifications, Suppressions, Erreurs
- Application individuelle ou groupee, avec possibilite d'ignorer
- Selection de l'entite et de l'adresse de rattachement avant import
- Statistiques temps reel avec sous-detail VM / Physique

**Ce qui reste a faire (OCS v3) :**
- Resolution du fabricant (`idhw_sel`) : affiche en lecture seule pour l'instant
- Garanties constructeur Dell / Lenovo non encore integrees
- Lookup utilisateur (`USERID` → compte ISI-APP)
- Synchronisation planifiee (CRON selon la frequence configuree sur l'instance)
- Notifications email recapitulatives
- Exclusions permanentes (element ou champ)
- Modal d'edition des donnees avant application

### Phases suivantes (planifiees)

- Phase 3 : interface de controle accessible depuis les pages metier
- Phase 4 : automatisation (planification, notifications)
- Phase 5 : systeme de permissions par equipe, connecteurs Intune et Azure AD
- Phase 6 : connecteurs Tickets (GLPI, ZenDesk…), sens d'ecriture bidirectionnel, webhooks

---

## Voir aussi

- Documentation technique Store : `.claude/technical-docs/store/store-integration.md`
- Documentation technique OCS v3 : `.claude/technical-docs/store/ocs-v3.md`
- Documentation technique OCS legacy : `.claude/technical-docs/store/ocs-technique.md`
