Version : 3.0 (finale) Date originale : 06/03/2024 Auteur initial : Sebastien DELDON Mise a jour : Janvier 2026
ISI-APP souhaite creer un Store de connecteurs permettant d'interfacer la plateforme avec des sources de donnees externes (entrantes et sortantes).
| 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 |
| 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.
| Type | Comportement | Exemple |
|---|---|---|
| Gratuit | Installation autonome par le client | - |
| Payant | Cout d'installation + cout recurrent possible | Office 365 |
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 |
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
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).
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 |
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.
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 |
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_iddans les tables metier. Une migration sera necessaire pour les donnees existantes.
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.
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.
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 |
Page principale du Store affichant tous les connecteurs disponibles avec :
Dashboard des instances actives pour le client avec :
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.
Formulaire de parametrage comprenant :
Acces depuis les pages metier (ex: page Materiel) :
| 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 :
Interface d'administration reservee aux admins ISI-APP pour :
Source externe ---> Table temporaire ---> Table ISI-APP
(OCS, GLPI...) (staging) (destination)
|
v
Mapping champs
+ Transformateurs
+ Mapping valeurs
+ Validation
+ Exclusions
| 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.
Si un meme element existe dans plusieurs sources (ex: meme PC dans OCS et Intune) :
Les parametres d'authentification (jsparams_auth) doivent etre :
| 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 |
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.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
Le connecteur OCS Inventory (parc materiel) est entierement operationnel via l'interface OCS v3 (/ocs-v3).
Ce qui fonctionne :
Ce qui reste a faire (OCS v3) :
idhw_sel) : affiche en lecture seule pour l'instantUSERID → compte ISI-APP).claude/technical-docs/store/store-integration.md.claude/technical-docs/store/ocs-v3.md.claude/technical-docs/store/ocs-technique.md