fix: migration des scripts de 'core' vers 'adopt' et mise à jour documentation
- scripts/generate-team-visualization-data.js : remplacement de 'core' par 'adopt' dans generateCongestionMatrix() et generateGenesisTeam() - scripts/analyze-business-metrics.js : remplacement de 'core' par 'adopt' dans 3 endroits - docs/app/guide-page-equipe.md : précisions sur l'utilisation de 'adopt' pour les technologies critiques - docs/app/architecture.md : précisions sur les technologies utilisées dans les visualisations Tous les scripts utilisent maintenant les rings standards (adopt|trial|assess|hold) conformément à la migration effectuée.
This commit is contained in:
@@ -221,8 +221,8 @@ Le script `scripts/generate-team-visualization-data.js` :
|
|||||||
- Lit les technologies depuis `radar-business/2025-01-15/*.md`
|
- Lit les technologies depuis `radar-business/2025-01-15/*.md`
|
||||||
- Génère `public/team-visualization-data.json` avec :
|
- Génère `public/team-visualization-data.json` avec :
|
||||||
- Données réseau (nodes/edges) pour Cytoscape.js
|
- Données réseau (nodes/edges) pour Cytoscape.js
|
||||||
- Matrice de congestion pour ECharts
|
- Matrice de congestion pour ECharts (technologies `adopt` uniquement - anciennement "core")
|
||||||
- Équipe de genèse MVP avec statistiques
|
- Équipe de genèse MVP avec statistiques (basée sur les technologies `adopt`)
|
||||||
|
|
||||||
Ce fichier est utilisé par `public/team.html` pour les visualisations interactives.
|
Ce fichier est utilisé par `public/team.html` pour les visualisations interactives.
|
||||||
|
|
||||||
|
|||||||
@@ -63,7 +63,7 @@ La page propose trois visualisations complémentaires :
|
|||||||
|
|
||||||
**Fonctionnalités** :
|
**Fonctionnalités** :
|
||||||
- **Axe X** : Membres de l'équipe
|
- **Axe X** : Membres de l'équipe
|
||||||
- **Axe Y** : Technologies
|
- **Axe Y** : Technologies (uniquement les technologies "adopt" - anciennement "core")
|
||||||
- **Couleurs** :
|
- **Couleurs** :
|
||||||
- Vert : Technologie maîtrisée par le membre
|
- Vert : Technologie maîtrisée par le membre
|
||||||
- Rouge : Technologie non maîtrisée
|
- Rouge : Technologie non maîtrisée
|
||||||
@@ -74,6 +74,8 @@ La page propose trois visualisations complémentaires :
|
|||||||
- Filtrer par technologie ou membre
|
- Filtrer par technologie ou membre
|
||||||
- Identifier visuellement les technologies avec peu de personnes
|
- Identifier visuellement les technologies avec peu de personnes
|
||||||
|
|
||||||
|
**Note** : Seules les technologies avec `ring: adopt` sont affichées dans la matrice, car ce sont les technologies fondamentales en production (anciennement classées comme "core").
|
||||||
|
|
||||||
**Technologie** : ECharts (heatmap)
|
**Technologie** : ECharts (heatmap)
|
||||||
|
|
||||||
### 3. Équipe de Genèse MVP
|
### 3. Équipe de Genèse MVP
|
||||||
@@ -83,7 +85,7 @@ La page propose trois visualisations complémentaires :
|
|||||||
**Fonctionnalités** :
|
**Fonctionnalités** :
|
||||||
- **Sélection automatique** : Algorithme qui sélectionne les membres selon :
|
- **Sélection automatique** : Algorithme qui sélectionne les membres selon :
|
||||||
- Disponibilité >= 50%
|
- Disponibilité >= 50%
|
||||||
- Couverture maximale des technologies critiques
|
- Couverture maximale des technologies critiques (technologies avec `ring: adopt` - anciennement "core")
|
||||||
- Équilibre des compétences
|
- Équilibre des compétences
|
||||||
- **Statistiques** :
|
- **Statistiques** :
|
||||||
- Nombre de membres sélectionnés
|
- Nombre de membres sélectionnés
|
||||||
@@ -242,9 +244,11 @@ Les données sont chargées depuis `/team-visualization-data.json` via `fetch()`
|
|||||||
Pour l'équipe de genèse MVP, le seuil est fixé à **50%**. Pour le modifier :
|
Pour l'équipe de genèse MVP, le seuil est fixé à **50%**. Pour le modifier :
|
||||||
|
|
||||||
1. Ouvrir `scripts/generate-team-visualization-data.js`
|
1. Ouvrir `scripts/generate-team-visualization-data.js`
|
||||||
2. Modifier la constante `MIN_AVAILABILITY` dans la fonction `generateGenesisTeam()`
|
2. Modifier le filtre `m.availability >= 50` dans les fonctions `generateCongestionMatrix()` et `generateGenesisTeam()`
|
||||||
3. Régénérer les données : `node scripts/generate-team-visualization-data.js`
|
3. Régénérer les données : `node scripts/generate-team-visualization-data.js`
|
||||||
|
|
||||||
|
**Note** : Les technologies critiques utilisées pour la sélection sont celles avec `ring: adopt` (anciennement "core"). Pour modifier ce critère, changer le filtre `t.ring === 'adopt'` dans `generateGenesisTeam()`.
|
||||||
|
|
||||||
### Ajouter de nouvelles visualisations
|
### Ajouter de nouvelles visualisations
|
||||||
|
|
||||||
1. Modifier `public/team.html`
|
1. Modifier `public/team.html`
|
||||||
|
|||||||
@@ -136,8 +136,8 @@ function calculateMetrics(blips) {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
// Technologies critiques (core + high impact)
|
// Technologies critiques (adopt + high impact) - anciennement "core"
|
||||||
if (m.ring === 'core' && m.businessImpact === 'high') {
|
if (m.ring === 'adopt' && m.businessImpact === 'high') {
|
||||||
metrics.criticalTechnologies.push({
|
metrics.criticalTechnologies.push({
|
||||||
name: m.title,
|
name: m.title,
|
||||||
quadrant: m.quadrant,
|
quadrant: m.quadrant,
|
||||||
@@ -174,8 +174,8 @@ function identifyPatterns(blips, metrics) {
|
|||||||
for (const blip of blips) {
|
for (const blip of blips) {
|
||||||
const m = blip.metadata;
|
const m = blip.metadata;
|
||||||
|
|
||||||
// Technologies critiques non différenciantes (commodité critique)
|
// Technologies critiques non différenciantes (commodité critique) - anciennement "core"
|
||||||
if (m.ring === 'core' && m.differentiation === 'low') {
|
if (m.ring === 'adopt' && m.differentiation === 'low') {
|
||||||
patterns.criticalNonDifferentiating.push({
|
patterns.criticalNonDifferentiating.push({
|
||||||
name: m.title,
|
name: m.title,
|
||||||
quadrant: m.quadrant,
|
quadrant: m.quadrant,
|
||||||
@@ -202,8 +202,8 @@ function identifyPatterns(blips, metrics) {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
// Gaps de compétences critiques
|
// Gaps de compétences critiques - anciennement "core", maintenant "adopt"
|
||||||
if (m.skillGap === 'high' && (m.ring === 'core' || m.businessImpact === 'high')) {
|
if (m.skillGap === 'high' && (m.ring === 'adopt' || m.businessImpact === 'high')) {
|
||||||
patterns.skillGaps.push({
|
patterns.skillGaps.push({
|
||||||
name: m.title,
|
name: m.title,
|
||||||
ring: m.ring,
|
ring: m.ring,
|
||||||
|
|||||||
@@ -212,8 +212,8 @@ function generateNetworkData(technologies, members) {
|
|||||||
|
|
||||||
// Générer la matrice de congestion
|
// Générer la matrice de congestion
|
||||||
function generateCongestionMatrix(technologies, members) {
|
function generateCongestionMatrix(technologies, members) {
|
||||||
// Filtrer technologies core uniquement
|
// Filtrer technologies adopt uniquement (anciennement "core")
|
||||||
const coreTechs = technologies.filter(t => t.ring === 'core').sort((a, b) => {
|
const coreTechs = technologies.filter(t => t.ring === 'adopt').sort((a, b) => {
|
||||||
// Trier par businessImpact puis par coverage
|
// Trier par businessImpact puis par coverage
|
||||||
const impactOrder = { 'high': 3, 'medium': 2, 'low': 1 };
|
const impactOrder = { 'high': 3, 'medium': 2, 'low': 1 };
|
||||||
const impactDiff = (impactOrder[b.businessImpact] || 0) - (impactOrder[a.businessImpact] || 0);
|
const impactDiff = (impactOrder[b.businessImpact] || 0) - (impactOrder[a.businessImpact] || 0);
|
||||||
@@ -261,7 +261,8 @@ function generateCongestionMatrix(technologies, members) {
|
|||||||
|
|
||||||
// Générer l'équipe de genèse MVP
|
// Générer l'équipe de genèse MVP
|
||||||
function generateGenesisTeam(technologies, members) {
|
function generateGenesisTeam(technologies, members) {
|
||||||
const coreTechs = technologies.filter(t => t.ring === 'core');
|
// Technologies adopt (anciennement "core") - technologies fondamentales en production
|
||||||
|
const coreTechs = technologies.filter(t => t.ring === 'adopt');
|
||||||
const availableMembers = members.filter(m => m.availability >= 50);
|
const availableMembers = members.filter(m => m.availability >= 50);
|
||||||
|
|
||||||
const genesisTeam = [];
|
const genesisTeam = [];
|
||||||
|
|||||||
Reference in New Issue
Block a user