---
title: "Référentiel des fabricants de matériel"
module: platform
type: functional
status: active
updated: 2026-09-07
---

# Référentiel des fabricants de matériel

> Doc fonctionnelle : décrit le **quoi** et le **pourquoi** (point de vue utilisateur / chef de projet).

## À quoi ça sert

Chaque fiche matériel porte un **fabricant** (Dell, Lenovo, HP, Cisco…). Cette liste n'est pas
propre à un client : c'est un **référentiel global**, maintenu par ISI, partagé par tous les
tenants. Chaque fabricant y porte aussi les liens constructeur exploités par l'application :
l'**URL de vérification de garantie** (avec le nom du champ où injecter le numéro de série) et
l'**URL du support**.

Jusqu'ici ce référentiel n'était consultable que via le module de saisie générique
(`/mod/81010101`), sans écran de consultation : impossible de le parcourir, de le trier, d'y
chercher un fabricant ou de l'exporter. L'écran **Fabricants de matériel** comble ce manque.

## Comment ça marche (côté utilisateur)

Depuis le **tableau de bord d'administration** (`/admin`), onglet **Actions**, panneau *Outils* :
tuile **« Fabricants de matériel »** → `/admin/hardware-manufacturers`.

L'écran est un tableau classique de l'application :

| Colonne | Contenu |
|---------|---------|
| Fabricant | Libellé affiché du fabricant |
| URL de garantie | Lien vers la page constructeur de vérification de garantie (ouverture dans un nouvel onglet) |
| Champ du numéro de série | Identifiant du champ à pré-remplir sur cette page de garantie |
| URL de support | Lien vers la page de contact du support constructeur |

- **Recherche** sur le libellé du fabricant et sur ses URL.
- **Tri** sur le libellé ou sur les URL, **pagination**, **export Excel / PDF**.
- **Modification** : l'icône crayon de chaque ligne ouvre la fiche du fabricant dans le module de
  saisie générique (`/mod/81010101`), qui reste le seul point d'écriture du référentiel. Le bouton
  **« Nouveau fabricant »**, en haut de l'écran, y ouvre un formulaire de création.

Le formulaire de saisie demande le **nom du fabricant** (obligatoire), l'**URL de garantie**, le
**champ du numéro de série** et l'**URL de support**. Les deux URL doivent être des adresses
complètes (`https://…`). Après enregistrement, l'écran reste sur la fiche du fabricant ; le bouton
**« Retour »** ramène à l'écran d'où l'on vient — la liste d'administration si c'est de là qu'on
est parti.

### Badge « Libellé manquant »

Le nom affiché d'un fabricant ne vit pas dans sa propre fiche mais dans la table des **termes**
(le champ de la fiche ne contient qu'une clé de traduction). Un fabricant dont le terme est absent
**n'apparaît dans aucun écran matériel** : il disparaît de la liste déroulante « Fabricant » sans
qu'aucune erreur ne soit remontée. L'écran signale ces cas par un badge orange
**« Libellé manquant »** — c'est le principal intérêt de la consultation.

## Enrichissement IA des liens constructeur

Les URL de garantie et de support changent régulièrement chez les constructeurs, et beaucoup de
fiches sont incomplètes. Le bouton **baguette magique** de chaque ligne demande à l'IA de
retrouver, sur le site officiel du constructeur, les trois informations de service après-vente :
l'URL de vérification de garantie, le nom du champ où saisir le numéro de série, et l'URL du
support.

L'IA **cherche sur le web** puis propose ; elle n'écrit jamais directement. Une **fenêtre de
revue** s'ouvre par-dessus l'écran : d'abord « recherche en cours » (compte une minute environ),
puis le résultat, avec pour chaque information la valeur actuelle, la valeur proposée
(**modifiable à la main**) et un interrupteur *Appliquer*.

- Chaque URL proposée est **testée par l'application** avant d'être affichée : une adresse
  injoignable est signalée en rouge et n'est pas cochée par défaut.
- L'IA annonce son propre **niveau de confiance** (élevé / moyen / faible) et liste les **sources**
  qu'elle a consultées, cliquables.
- Seules les lignes cochées sont écrites, après confirmation. Une information que l'IA n'a pas
  trouvée reste vide plutôt que d'être inventée.
- Le bouton est **inactif** sur un fabricant sans libellé : sans nom, l'IA n'a rien à chercher.

### Une seule recherche à la fois

Dès qu'une baguette est cliquée, **toutes les baguettes de l'écran se grisent** et celle de la
ligne concernée passe en sablier : impossible de lancer deux recherches en parallèle. La fenêtre
de revue prend ensuite le relais — elle couvre le tableau tant qu'elle est ouverte.

Refermer la fenêtre pendant la recherche l'abandonne : rien n'est écrit, et une nouvelle recherche
peut être lancée.

### Lancer la recherche sur plusieurs fabricants

Attendre une minute devant chaque fiche n'est pas tenable pour remplir le référentiel. Les cases
à cocher du tableau permettent donc de lancer la recherche sur **plusieurs fabricants à la fois**,
via *Actions en masse* → **« Rechercher les liens avec l'IA »**.

Ce que la masse fait, et ce qu'elle ne fait pas :

- elle lance les **recherches** en tâche de fond, l'une après l'autre ;
- elle **n'applique rien**. Chaque proposition reste à relire fiche par fiche, exactement comme
  une recherche lancée à la main. Le référentiel est partagé par tous les clients : aucune
  écriture ne se fait sans relecture.

Le gain n'est donc pas d'éviter la relecture, c'est de ne plus attendre : on lance une salve, on
fait autre chose, on revient relire.

### Compléter tout le référentiel d'un coup

Cocher 56 cases sur trois pages pour dire « complète ce qui manque » n'a pas de sens : le bouton
**« Compléter les fiches incomplètes »**, en haut de l'écran à côté de *Nouveau fabricant*, vise
directement tous les fabricants auxquels il manque au moins un lien constructeur — 56 sur 58
aujourd'hui.

Sont ignorés : les fabricants sans libellé (l'IA n'aurait rien à chercher) et ceux portant déjà
une recherche en cours **ou un résultat en attente de relecture** — relancer écraserait une
proposition que tu n'as pas encore vue. Le compte rendu dit ce qui est parti et ce qui a été
écarté.

La sélection par cases reste là pour viser quelques fabricants précis, et **n'est plus plafonnée** :
les recherches tournent sur la file de traitement IA de l'application, aux côtés des autres
générations (restitutions, extractions), et non sur la file générale.

Un **bandeau au-dessus du tableau** dit en permanence où en est la recherche de masse. Tant qu'une
salve tourne, c'est un bandeau d'une ligne surmontant une fine **barre de progression** :
*« Recherche IA — 12 / 56 · reste ~66 min »*, plus un badge rouge si des recherches ont échoué.
Viennent ensuite, selon les cas, les propositions qui attendent une relecture et les recherches en
échec. Le bandeau disparaît quand il n'y a rien à signaler.

Les fabricants sans changement ne s'y trouvent pas : leur badge de ligne suffit, ils n'appellent
aucune action.

La barre indique aussi **depuis quand** la plus ancienne recherche attend, et porte un bouton
**« Rien ne progresse ? Réinitialiser »**. À n'utiliser que si le compteur ne bouge plus
depuis longtemps : il efface les signalements et rend ces fabricants relançables. Il n'annule pas
une recherche réellement en cours — son résultat arrivera quand même.

Le tableau signale aussi l'état de chaque ligne, et se rafraîchit tout seul le temps qu'une salve
passe :

| Signalement | Sens |
|---|---|
| **Recherche en file** (bleu, sablier) | la recherche est programmée, elle n'a pas encore tourné |
| **Proposition à relire** (vert, presse-papier) | la recherche est finie, la proposition attend |
| **Recherche en échec** (rouge) | la recherche n'a rien pu produire — ouvrir la fiche pour la raison |

Un fabricant dont la recherche n'a rien trouvé à changer **ne porte aucun signalement** : sa ligne
redevient telle qu'avant. C'est la notification de fin de salve qui rend compte de ces
vérifications sans suite.

Un fabricant déjà en file n'est pas relancé, et un fabricant sans libellé est ignoré : sans nom,
l'IA n'a rien à chercher. Le compte rendu affiché après le lancement dit ce qui est parti et ce
qui a été écarté.

### Quand l'IA ne trouve rien à changer

C'est le résultat attendu sur un fabricant à jour. Dans ce cas **aucune proposition n'est mise en
attente** et **rien n'est signalé sur la ligne** : il n'y aurait rien à relire, et marquer la
ligne ne ferait qu'encombrer le tableau. Le fabricant reste relançable immédiatement.

Si tu as lancé la recherche à la main depuis une fiche, la conclusion s'affiche quand même dans la
fenêtre — avec les sources que l'IA a consultées pour y arriver. C'est le seul endroit où elle
apparaît.

### La notification de fin de salve

Une salve tourne en tâche de fond pendant une dizaine de minutes : tu n'as aucune raison de rester
sur l'écran. À la fin, **une notification arrive dans la cloche**, adressée à toi seul — celui qui
a lancé la recherche.

Elle récapitule : combien de fabricants ont été vérifiés, combien de propositions attendent une
relecture, combien de recherches ont échoué, et combien n'avaient rien à changer. Elle renvoie
directement vers l'écran des fabricants.

C'est ce qui rend compte des recherches sans suite : sans elle, une salve où l'IA ne trouve rien
à changer ne laisserait aucune trace visible.

Une proposition qui ne vaut rien se **jette** : le bouton *Écarter* de la fenêtre de revue la
supprime, la ligne cesse d'être signalée et une nouvelle recherche redevient possible. Sans quoi
les propositions restent disponibles quelques heures, puis expirent — il suffit alors de relancer.
Le bandeau propose aussi d'**écarter tous les échecs** d'un coup, ce qui rend ces fabricants
relançables sans rien écrire.

### La revue d'ensemble

Le bandeau porte un bouton **« Relire les N propositions »**, qui ouvre une **revue d'ensemble** :
toutes les propositions en attente, regroupées **par fabricant**, sans avoir à ouvrir les fiches
une par une.

Chaque fabricant y occupe un bloc, avec son niveau de confiance, un compteur de cases cochées, et
pour chacune de ses trois informations : la **valeur actuelle** face à la **valeur proposée**
(modifiable directement ici), le résultat du test de joignabilité de l'URL, et un interrupteur
*Appliquer*. Les sources consultées par l'IA se déplient sous le bloc.

En haut, un décompte — nombre de fabricants, de propositions, de cases cochées, d'URL injoignables
— et les deux actions qui portent sur **tout le lot** : *Tout valider* et *Tout rejeter*.

Les mêmes deux gestes existent sur chaque fabricant, où ils n'agissent que **sur lui seul** :

| Bouton | Portée | Effet |
|---|---|---|
| **Valider** | un fabricant | écrit ses valeurs cochées, puis le retire de la revue |
| **Rejeter** | un fabricant | jette sa proposition sans rien écrire ; il redevient relançable |
| **Tout valider** | le lot | écrit les valeurs cochées de tous les fabricants en revue |
| **Tout rejeter** | le lot | jette toutes les propositions sans rien écrire |

Les interrupteurs *Appliquer* de chaque information décident de ce qui sera écrit : décoche ce que
tu ne veux pas, corrige ce qui doit l'être, puis valide. Les boutons *Valider* sont grisés quand
rien n'est coché.

Les deux actions du bandeau demandent une **confirmation**, parce qu'elles touchent aussi des
fabricants que tu n'as peut-être pas fait défiler. Les boutons de ligne agissent sans : la revue
elle-même fait office de confirmation, les valeurs étant sous les yeux.

> ⚠️ L'écriture porte sur un référentiel **partagé par tous les clients** et dépourvu de
> corbeille. Elle est désormais toujours précédée de cette liste : rien ne s'écrit que tu n'aies
> pu voir, décocher ou corriger.

Ce qui est écrit et ce qui ne l'est pas — les mêmes règles que le pré-cochage de la fiche
individuelle, pour qu'il n'y ait pas deux comportements :

| Cas | Traitement |
|---|---|
| Valeur qui change quelque chose, URL joignable, valide | **écrite** |
| URL que l'application n'a pas su joindre | **jamais écrite** |
| Proposition identique à ce qui est déjà en base | rien à écrire, ligne marquée **« Aucun changement »** |
| Proposition refusée par la validation (URL mal formée, champ trop long) | **laissée en attente**, l'erreur signalée sur le champ fautif |

Une proposition refusée ne bloque pas les autres : le reste du lot est écrit, et le fabricant
fautif reste dans la revue avec le message d'erreur sur son champ — **la valeur que tu venais de
saisir reste affichée**, corrige-la et revalide, sans relancer l'IA. Le compte rendu dit combien de fabricants ont été mis à jour,
combien de champs ont été écrits et combien ont été refusés. Chaque modification reste tracée dans
l'historique du fabricant.

> ⚠️ Les propositions portent sur un référentiel **partagé par tous les clients** : relis-les avant
> d'appliquer. Chaque modification est tracée dans l'historique du fabricant.

## Règles d'accès

Réservé aux **administrateurs ISI** : entité courante 1 **et** profil 1 (middleware `isi-admin`),
ainsi qu'aux développeurs ISI et à l'assistance superman. Le référentiel étant global — il n'est
cloisonné par aucun client — il n'est pas exposé aux administrateurs clients.

Tout autre profil reçoit une erreur d'autorisation, y compris en ouvrant directement l'URL, en
sollicitant le tableau ou en déclenchant son export.

> ⚠️ Le tableau de bord `/admin`, où vit la tuile, est lui-même réservé aux **développeurs ISI**
> (garde préexistante, plus stricte). Un administrateur ISI profil 1 non développeur atteint donc
> l'écran par son URL directe (`/admin/hardware-manufacturers`) mais ne voit pas la tuile.

## Points d'attention

- **Portée globale** : une modification vaut pour **tous les clients**. Il n'y a ni corbeille ni
  suppression logique sur ce référentiel.
- **Écran de consultation** : la création et la modification complètes restent portées par le
  module de saisie générique. Seule écriture possible depuis le tableau : l'application d'une
  proposition d'enrichissement IA, champ par champ et après confirmation.
- Un fabricant est utilisé par les fiches matériel existantes : renommer ou vider son libellé se
  répercute immédiatement sur tout le parc de tous les clients.

## Voir aussi

- Doc technique : `../../.claude/technical-docs/platform/hardware-manufacturers.md`
- Tableau de bord d'administration : [`admin-dashboard.md`](admin-dashboard.md)
- Parc matériel : [`../store/hardware.md`](../store/hardware.md)
