Isi-APP Docs fonctionnelles
Toutes les docs
Markdown brut
Cahier des Charges - Store de Connecteurs ISI-APP
Actif store functional Revu le 2026-08-10 store/store-connectors-spec.md

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