# Le graphe (crisalid-ikg)

import { Mermaid } from "../../../../src/components/Mermaid";
import { Screenshot } from "../../../../src/components/Screenshot";

> **En bref :**
> Le graphe est le cœur de CRISalid : tout ce qui vient de l'annuaire et du moissonneur y passe, et il en garde **une seule version consolidée**, avec la trace de chaque source. L'extrait de la vitrine en sortira.
> Sur l'instance de développement, il tourne et répond vite ; mais **il ne traite aucune suppression**, et son enrichissement est **arrêté depuis le 7 septembre 2026**.

## Ce que c'est et à qui ça sert

Le graphe réunit deux choses : un moteur (crisalid-ikg) et une base de données de type graphe (Neo4j), où des **objets** (personnes, laboratoires, publications, thèmes) sont reliés par des **liens** (est membre de, est auteur de, traite de). Le moteur est le seul à écrire dans la base.

Personne ne l'utilise directement. Il sert à toutes les autres briques : SoVisu+ le lit par l'API, et il relaie au moissonneur les demandes de moissonnage. Pour une vitrine, c'est **la source de l'extrait** : une publication trouvée dans quatre bases n'y apparaît qu'une fois.

<Screenshot
  src="/images/crisalid/instance-graphe-schema.png"
  alt="Navigateur de la base graphe : nombre d'objets et de liens, et carte des types d'objets reliés entre eux"
  title="Les types d'objets du graphe de l'instance"
  caption="Chaque bulle est un type d'objet : publication, personne, laboratoire, concept, notice source. Aucune donnée personnelle n'est affichée."
  source="instance CRISalid de Paris-Saclay (développement), lecture seule, 30 octobre 2026"
/>

## Ce qui se passe dedans

<Mermaid
  title="Ce que fait le graphe à chaque donnée reçue"
  caption="Le rapprochement repose d'abord sur les identifiants partagés : DOI, identifiant HAL, OpenAlex, PubMed. Chaque notice d'origine reste conservée à côté de la version consolidée."
  chart={`flowchart TB
    R["Personne, laboratoire<br/>ou notice reçue"]
    V["Vérifier qu'elle est complète"]
    Q{"Existe-t-elle déjà ?<br/>DOI, HAL, OpenAlex…"}
    F["Fusionner en gardant<br/>la trace des sources"]
    E["Enrichir : accès ouvert,<br/>thèmes"]
    W[("Écrire dans la base<br/>et annoncer le changement")]
    R --> V --> Q
    Q -->|"oui"| F --> E
    Q -->|"non"| E
    E --> W`}
/>

Il applique aussi les corrections envoyées par SoVisu+ et relaie les demandes de moissonnage. Le détail des fusions, des priorités entre sources et du sort des corrections est dans [Provenance, qualité et fusion](/03-crisalid/01-donnees/provenance-qualite-fusion).

## Ce qu'on a observé

| Constat | Statut | Source |
|---|---|---|
| **Aucune suppression n'est traitée** : ni une personne partie de l'annuaire, ni une notice disparue d'une source | Confirmé | [suppressions non propagées](/03-crisalid/01-donnees/contrats-api-evenements#suppressions-non-propagées) |
| Rattachements de personnes écrits sans dates ; projets et financements absents | Confirmé | [modèle de données](/03-crisalid/01-donnees/modele-de-donnees) |
| Licence CeCILL 2.1 | Confirmé | [licence](https://github.com/CRISalid-esr/crisalid-ikg/blob/ebdaae75/LICENCE) |
| 18,5 millions d'objets et 53,9 millions de liens ; 251 191 publications ; 833 195 personnes, coauteurs externes compris | Observé sur instance (dev) | [données observées](/03-crisalid/06-instance-saclay/01-donnees-observees) |
| **3 353 documents** marqués « à supprimer » toujours présents ; 3 362 fusions en attente | Observé sur instance (dev) | [files non purgées](/03-crisalid/06-instance-saclay/01-donnees-observees#les-files-de-traitement-non-purgées) |
| Dernier calcul d'accès ouvert le **7 septembre 2026** ; plus rien depuis | Observé sur instance (dev) | [arrêt de l'enrichissement](/03-crisalid/06-instance-saclay/01-donnees-observees#larrêt-de-lenrichissement) |
| Base en édition **Community** : pas de compte limité à la lecture | Observé sur instance (dev) | [ce que montre l'instance](/03-crisalid/06-instance-saclay/00-ce-que-linstance-demontre) |
| Chemin unité → chercheurs → publications parcouru en moins d'une seconde | Observé sur instance (dev) | [test d'un chemin d'export](/03-crisalid/06-instance-saclay/00-ce-que-linstance-demontre#le-test-dun-chemin-dexport) |

## Pour la vitrine

- ***Apporte*** : une notice unique par publication, avec ses sources, ses identifiants, son statut d'accès ouvert et ses thèmes, reliée aux chercheurs et aux unités.
- ***Prouvé*** : sur l'instance, le graphe est peuplé à grande échelle et le chemin de données d'une fiche de laboratoire répond en moins d'une seconde.
- ***Bloque ou reste à prouver*** : l'extrait doit **exclure lui-même** les documents marqués à supprimer et écarter les coauteurs externes ; la fraîcheur n'est pas tenue tant que l'enrichissement est arrêté ; sans compte en lecture seule, l'extrait du POC est fourni par la DiBISO plutôt que lu directement ; aucun service d'export n'existe ([extrait et comparatif du POC](/01-cadrage-saclay/02-scenarios/03-extrait-et-comparatif-du-poc)).

## Liens

- Dépôt officiel : [github.com/CRISalid-esr/crisalid-ikg](https://github.com/CRISalid-esr/crisalid-ikg)
- Documentation officielle : [catalogue des messages](https://crisalid-esr.github.io/crisalid-deployment/map/message_catalog.html) ; pas de documentation dédiée au moteur
- Pages qui font foi : [données observées](/03-crisalid/06-instance-saclay/01-donnees-observees) ; [modèle de données](/03-crisalid/01-donnees/modele-de-donnees) ; [provenance, qualité et fusion](/03-crisalid/01-donnees/provenance-qualite-fusion)

Révision lue : `ebdaae75`
