Initial commit
This commit is contained in:
666
services/typeChantierService.ts
Normal file
666
services/typeChantierService.ts
Normal file
@@ -0,0 +1,666 @@
|
||||
/**
|
||||
* Service pour la gestion des types de chantiers et templates de phases
|
||||
* Interface avec l'API backend pour les templates métier BTP
|
||||
*/
|
||||
|
||||
import { TypeChantierTemplate } from '../components/phases/PhaseGenerationWizard';
|
||||
|
||||
const API_BASE_URL = process.env.NEXT_PUBLIC_API_URL || 'http://localhost:8080/api/v1';
|
||||
|
||||
class TypeChantierService {
|
||||
|
||||
/**
|
||||
* Récupérer tous les templates de types de chantiers disponibles
|
||||
*/
|
||||
async getAllTemplates(): Promise<TypeChantierTemplate[]> {
|
||||
try {
|
||||
// Essayer d'abord l'API backend
|
||||
const response = await fetch(`${API_BASE_URL}/type-chantiers/templates`);
|
||||
if (!response.ok) {
|
||||
throw new Error(`Erreur HTTP: ${response.status}`);
|
||||
}
|
||||
return await response.json();
|
||||
} catch (error) {
|
||||
console.warn('Endpoint backend non disponible, utilisation des données mockées:', error);
|
||||
// Fallback sur les données mockées
|
||||
return this.getMockTemplates();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Récupérer un template spécifique par son ID
|
||||
*/
|
||||
async getTemplateById(id: string): Promise<TypeChantierTemplate | null> {
|
||||
try {
|
||||
const templates = await this.getAllTemplates();
|
||||
return templates.find(t => t.id === id) || null;
|
||||
} catch (error) {
|
||||
console.error('Erreur lors du chargement du template:', error);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Récupérer les templates par catégorie
|
||||
*/
|
||||
async getTemplatesByCategorie(categorie: string): Promise<TypeChantierTemplate[]> {
|
||||
try {
|
||||
const templates = await this.getAllTemplates();
|
||||
return templates.filter(t => t.categorie === categorie);
|
||||
} catch (error) {
|
||||
console.error('Erreur lors du filtrage par catégorie:', error);
|
||||
return [];
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Compte le nombre total de phases (principales + sous-phases) dans un template
|
||||
*/
|
||||
private countTotalPhases(phases: any[]): number {
|
||||
return phases.reduce((total, phase) => {
|
||||
return total + 1 + (phase.sousPhases ? phase.sousPhases.length : 0);
|
||||
}, 0);
|
||||
}
|
||||
|
||||
/**
|
||||
* Données mockées pour les templates de chantiers BTP
|
||||
* REMARQUE : Les durées et budgets sont à null - ils doivent être saisis par l'utilisateur
|
||||
*/
|
||||
private getMockTemplates(): TypeChantierTemplate[] {
|
||||
// Définir les phases de Villa Moderne (structure complète réaliste)
|
||||
const villaModernePhases = [
|
||||
{
|
||||
id: 'vm-01',
|
||||
nom: 'Préparation et Terrassement',
|
||||
description: 'Préparation du terrain et travaux de terrassement',
|
||||
ordre: 1,
|
||||
dureeEstimee: null,
|
||||
budgetEstime: null,
|
||||
competencesRequises: ['Terrassement', 'VRD', 'Géomètre'],
|
||||
prerequis: [],
|
||||
categorieMetier: 'GROS_OEUVRE' as const,
|
||||
obligatoire: true,
|
||||
personnalisable: false,
|
||||
sousPhases: [
|
||||
{
|
||||
id: 'vm-01-01',
|
||||
nom: 'Implantation et piquetage',
|
||||
description: 'Implantation précise de la construction',
|
||||
ordre: 1,
|
||||
dureeEstimee: null,
|
||||
budgetEstime: null,
|
||||
competencesRequises: ['Géomètre'],
|
||||
obligatoire: true
|
||||
},
|
||||
{
|
||||
id: 'vm-01-02',
|
||||
nom: 'Décapage et excavation',
|
||||
description: 'Décapage terre végétale et excavation',
|
||||
ordre: 2,
|
||||
dureeEstimee: null,
|
||||
budgetEstime: null,
|
||||
competencesRequises: ['Terrassement'],
|
||||
obligatoire: true
|
||||
},
|
||||
{
|
||||
id: 'vm-01-03',
|
||||
nom: 'Évacuation terres et remblaiement',
|
||||
description: 'Évacuation des terres excédentaires et remblaiement',
|
||||
ordre: 3,
|
||||
dureeEstimee: null,
|
||||
budgetEstime: null,
|
||||
competencesRequises: ['Transport', 'Terrassement'],
|
||||
obligatoire: true
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
id: 'vm-02',
|
||||
nom: 'Fondations',
|
||||
description: 'Réalisation des fondations béton armé',
|
||||
ordre: 2,
|
||||
dureeEstimee: null,
|
||||
budgetEstime: null,
|
||||
competencesRequises: ['Béton armé', 'Coffreur', 'Ferrailleur'],
|
||||
prerequis: ['vm-01'],
|
||||
categorieMetier: 'GROS_OEUVRE' as const,
|
||||
obligatoire: true,
|
||||
personnalisable: false,
|
||||
sousPhases: [
|
||||
{
|
||||
id: 'vm-02-01',
|
||||
nom: 'Ferraillage semelles',
|
||||
description: 'Ferraillage des semelles de fondation',
|
||||
ordre: 1,
|
||||
dureeEstimee: null,
|
||||
budgetEstime: null,
|
||||
competencesRequises: ['Ferrailleur'],
|
||||
obligatoire: true
|
||||
},
|
||||
{
|
||||
id: 'vm-02-02',
|
||||
nom: 'Coulage semelles',
|
||||
description: 'Coulage béton des semelles',
|
||||
ordre: 2,
|
||||
dureeEstimee: null,
|
||||
budgetEstime: null,
|
||||
competencesRequises: ['Béton'],
|
||||
obligatoire: true
|
||||
},
|
||||
{
|
||||
id: 'vm-02-03',
|
||||
nom: 'Vide sanitaire',
|
||||
description: 'Réalisation du vide sanitaire',
|
||||
ordre: 3,
|
||||
dureeEstimee: null,
|
||||
budgetEstime: null,
|
||||
competencesRequises: ['Maçonnerie'],
|
||||
obligatoire: true
|
||||
},
|
||||
{
|
||||
id: 'vm-02-04',
|
||||
nom: 'Étanchéité fondations',
|
||||
description: 'Application de l\'étanchéité des fondations',
|
||||
ordre: 4,
|
||||
dureeEstimee: null,
|
||||
budgetEstime: null,
|
||||
competencesRequises: ['Étancheur'],
|
||||
obligatoire: true
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
id: 'vm-03',
|
||||
nom: 'Élévation des murs',
|
||||
description: 'Construction des murs porteurs et cloisons',
|
||||
ordre: 3,
|
||||
dureeEstimee: null,
|
||||
budgetEstime: null,
|
||||
competencesRequises: ['Maçonnerie', 'Béton armé'],
|
||||
prerequis: ['vm-02'],
|
||||
categorieMetier: 'GROS_OEUVRE' as const,
|
||||
obligatoire: true,
|
||||
personnalisable: true,
|
||||
sousPhases: [
|
||||
{
|
||||
id: 'vm-03-01',
|
||||
nom: 'Murs porteurs RDC',
|
||||
description: 'Élévation murs porteurs rez-de-chaussée',
|
||||
ordre: 1,
|
||||
dureeEstimee: null,
|
||||
budgetEstime: null,
|
||||
competencesRequises: ['Maçonnerie'],
|
||||
obligatoire: true
|
||||
},
|
||||
{
|
||||
id: 'vm-03-02',
|
||||
nom: 'Plancher intermédiaire',
|
||||
description: 'Réalisation plancher entre RDC et étage',
|
||||
ordre: 2,
|
||||
dureeEstimee: null,
|
||||
budgetEstime: null,
|
||||
competencesRequises: ['Béton armé'],
|
||||
obligatoire: true
|
||||
},
|
||||
{
|
||||
id: 'vm-03-03',
|
||||
nom: 'Murs porteurs étage',
|
||||
description: 'Élévation murs porteurs étage',
|
||||
ordre: 3,
|
||||
dureeEstimee: null,
|
||||
budgetEstime: null,
|
||||
competencesRequises: ['Maçonnerie'],
|
||||
obligatoire: true
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
id: 'vm-04',
|
||||
nom: 'Charpente et Couverture',
|
||||
description: 'Pose de la charpente et réalisation de la couverture',
|
||||
ordre: 4,
|
||||
dureeEstimee: null,
|
||||
budgetEstime: null,
|
||||
competencesRequises: ['Charpentier', 'Couvreur'],
|
||||
prerequis: ['vm-03'],
|
||||
categorieMetier: 'GROS_OEUVRE' as const,
|
||||
obligatoire: true,
|
||||
personnalisable: false,
|
||||
sousPhases: [
|
||||
{
|
||||
id: 'vm-04-01',
|
||||
nom: 'Pose charpente',
|
||||
description: 'Montage de la charpente',
|
||||
ordre: 1,
|
||||
dureeEstimee: null,
|
||||
budgetEstime: null,
|
||||
competencesRequises: ['Charpentier'],
|
||||
obligatoire: true
|
||||
},
|
||||
{
|
||||
id: 'vm-04-02',
|
||||
nom: 'Pose couverture',
|
||||
description: 'Pose des tuiles et finitions de toiture',
|
||||
ordre: 2,
|
||||
dureeEstimee: null,
|
||||
budgetEstime: null,
|
||||
competencesRequises: ['Couvreur'],
|
||||
obligatoire: true
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
id: 'vm-05',
|
||||
nom: 'Menuiseries Extérieures',
|
||||
description: 'Pose des fenêtres, portes et volets',
|
||||
ordre: 5,
|
||||
dureeEstimee: null,
|
||||
budgetEstime: null,
|
||||
competencesRequises: ['Menuisier'],
|
||||
prerequis: ['vm-03'],
|
||||
categorieMetier: 'SECOND_OEUVRE' as const,
|
||||
obligatoire: true,
|
||||
personnalisable: true,
|
||||
sousPhases: [
|
||||
{
|
||||
id: 'vm-05-01',
|
||||
nom: 'Pose fenêtres',
|
||||
description: 'Installation des fenêtres',
|
||||
ordre: 1,
|
||||
dureeEstimee: null,
|
||||
budgetEstime: null,
|
||||
competencesRequises: ['Menuisier'],
|
||||
obligatoire: true
|
||||
},
|
||||
{
|
||||
id: 'vm-05-02',
|
||||
nom: 'Pose porte d\'entrée',
|
||||
description: 'Installation de la porte d\'entrée',
|
||||
ordre: 2,
|
||||
dureeEstimee: null,
|
||||
budgetEstime: null,
|
||||
competencesRequises: ['Menuisier'],
|
||||
obligatoire: true
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
id: 'vm-06',
|
||||
nom: 'Isolation et Cloisons',
|
||||
description: 'Isolation thermique et montage des cloisons',
|
||||
ordre: 6,
|
||||
dureeEstimee: null,
|
||||
budgetEstime: null,
|
||||
competencesRequises: ['Plaquiste', 'Isolateur'],
|
||||
prerequis: ['vm-05'],
|
||||
categorieMetier: 'SECOND_OEUVRE' as const,
|
||||
obligatoire: true,
|
||||
personnalisable: true,
|
||||
sousPhases: [
|
||||
{
|
||||
id: 'vm-06-01',
|
||||
nom: 'Isolation thermique',
|
||||
description: 'Pose de l\'isolation thermique',
|
||||
ordre: 1,
|
||||
dureeEstimee: null,
|
||||
budgetEstime: null,
|
||||
competencesRequises: ['Isolateur'],
|
||||
obligatoire: true
|
||||
},
|
||||
{
|
||||
id: 'vm-06-02',
|
||||
nom: 'Cloisons placo',
|
||||
description: 'Montage des cloisons en placo',
|
||||
ordre: 2,
|
||||
dureeEstimee: null,
|
||||
budgetEstime: null,
|
||||
competencesRequises: ['Plaquiste'],
|
||||
obligatoire: true
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
id: 'vm-07',
|
||||
nom: 'Électricité',
|
||||
description: 'Installation électrique complète',
|
||||
ordre: 7,
|
||||
dureeEstimee: null,
|
||||
budgetEstime: null,
|
||||
competencesRequises: ['Électricien'],
|
||||
prerequis: ['vm-06'],
|
||||
categorieMetier: 'EQUIPEMENTS' as const,
|
||||
obligatoire: true,
|
||||
personnalisable: false,
|
||||
sousPhases: [
|
||||
{
|
||||
id: 'vm-07-01',
|
||||
nom: 'Saignées et gaines',
|
||||
description: 'Réalisation des saignées et pose des gaines',
|
||||
ordre: 1,
|
||||
dureeEstimee: null,
|
||||
budgetEstime: null,
|
||||
competencesRequises: ['Électricien'],
|
||||
obligatoire: true
|
||||
},
|
||||
{
|
||||
id: 'vm-07-02',
|
||||
nom: 'Câblage et tableau',
|
||||
description: 'Câblage et installation du tableau électrique',
|
||||
ordre: 2,
|
||||
dureeEstimee: null,
|
||||
budgetEstime: null,
|
||||
competencesRequises: ['Électricien'],
|
||||
obligatoire: true
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
id: 'vm-08',
|
||||
nom: 'Plomberie et Sanitaires',
|
||||
description: 'Installation plomberie et équipements sanitaires',
|
||||
ordre: 8,
|
||||
dureeEstimee: null,
|
||||
budgetEstime: null,
|
||||
competencesRequises: ['Plombier'],
|
||||
prerequis: ['vm-06'],
|
||||
categorieMetier: 'EQUIPEMENTS' as const,
|
||||
obligatoire: true,
|
||||
personnalisable: false,
|
||||
sousPhases: [
|
||||
{
|
||||
id: 'vm-08-01',
|
||||
nom: 'Réseaux eau',
|
||||
description: 'Installation des réseaux d\'eau',
|
||||
ordre: 1,
|
||||
dureeEstimee: null,
|
||||
budgetEstime: null,
|
||||
competencesRequises: ['Plombier'],
|
||||
obligatoire: true
|
||||
},
|
||||
{
|
||||
id: 'vm-08-02',
|
||||
nom: 'Sanitaires',
|
||||
description: 'Pose des équipements sanitaires',
|
||||
ordre: 2,
|
||||
dureeEstimee: null,
|
||||
budgetEstime: null,
|
||||
competencesRequises: ['Plombier'],
|
||||
obligatoire: true
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
id: 'vm-09',
|
||||
nom: 'Chauffage',
|
||||
description: 'Installation du système de chauffage',
|
||||
ordre: 9,
|
||||
dureeEstimee: null,
|
||||
budgetEstime: null,
|
||||
competencesRequises: ['Chauffagiste'],
|
||||
prerequis: ['vm-08'],
|
||||
categorieMetier: 'EQUIPEMENTS' as const,
|
||||
obligatoire: true,
|
||||
personnalisable: true,
|
||||
sousPhases: [
|
||||
{
|
||||
id: 'vm-09-01',
|
||||
nom: 'Chaudière et réseau',
|
||||
description: 'Installation chaudière et réseau de chauffage',
|
||||
ordre: 1,
|
||||
dureeEstimee: null,
|
||||
budgetEstime: null,
|
||||
competencesRequises: ['Chauffagiste'],
|
||||
obligatoire: true
|
||||
},
|
||||
{
|
||||
id: 'vm-09-02',
|
||||
nom: 'Radiateurs',
|
||||
description: 'Pose des radiateurs',
|
||||
ordre: 2,
|
||||
dureeEstimee: null,
|
||||
budgetEstime: null,
|
||||
competencesRequises: ['Chauffagiste'],
|
||||
obligatoire: true
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
id: 'vm-10',
|
||||
nom: 'Revêtements Sols et Murs',
|
||||
description: 'Pose des revêtements de sols et murs',
|
||||
ordre: 10,
|
||||
dureeEstimee: null,
|
||||
budgetEstime: null,
|
||||
competencesRequises: ['Carreleur', 'Parqueteur'],
|
||||
prerequis: ['vm-07', 'vm-08'],
|
||||
categorieMetier: 'FINITIONS' as const,
|
||||
obligatoire: true,
|
||||
personnalisable: true,
|
||||
sousPhases: [
|
||||
{
|
||||
id: 'vm-10-01',
|
||||
nom: 'Carrelage',
|
||||
description: 'Pose du carrelage',
|
||||
ordre: 1,
|
||||
dureeEstimee: null,
|
||||
budgetEstime: null,
|
||||
competencesRequises: ['Carreleur'],
|
||||
obligatoire: true
|
||||
},
|
||||
{
|
||||
id: 'vm-10-02',
|
||||
nom: 'Parquet',
|
||||
description: 'Pose du parquet',
|
||||
ordre: 2,
|
||||
dureeEstimee: null,
|
||||
budgetEstime: null,
|
||||
competencesRequises: ['Parqueteur'],
|
||||
obligatoire: true
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
id: 'vm-11',
|
||||
nom: 'Peinture',
|
||||
description: 'Peinture intérieure et extérieure',
|
||||
ordre: 11,
|
||||
dureeEstimee: null,
|
||||
budgetEstime: null,
|
||||
competencesRequises: ['Peintre'],
|
||||
prerequis: ['vm-10'],
|
||||
categorieMetier: 'FINITIONS' as const,
|
||||
obligatoire: true,
|
||||
personnalisable: true,
|
||||
sousPhases: [
|
||||
{
|
||||
id: 'vm-11-01',
|
||||
nom: 'Peinture intérieure',
|
||||
description: 'Peinture de tous les murs intérieurs',
|
||||
ordre: 1,
|
||||
dureeEstimee: null,
|
||||
budgetEstime: null,
|
||||
competencesRequises: ['Peintre'],
|
||||
obligatoire: true
|
||||
},
|
||||
{
|
||||
id: 'vm-11-02',
|
||||
nom: 'Peinture extérieure',
|
||||
description: 'Peinture des façades extérieures',
|
||||
ordre: 2,
|
||||
dureeEstimee: null,
|
||||
budgetEstime: null,
|
||||
competencesRequises: ['Peintre'],
|
||||
obligatoire: true
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
id: 'vm-12',
|
||||
nom: 'Finitions et Nettoyage',
|
||||
description: 'Finitions diverses et nettoyage final',
|
||||
ordre: 12,
|
||||
dureeEstimee: null,
|
||||
budgetEstime: null,
|
||||
competencesRequises: ['Finisseur'],
|
||||
prerequis: ['vm-11'],
|
||||
categorieMetier: 'FINITIONS' as const,
|
||||
obligatoire: true,
|
||||
personnalisable: false,
|
||||
sousPhases: [
|
||||
{
|
||||
id: 'vm-12-01',
|
||||
nom: 'Finitions diverses',
|
||||
description: 'Petites finitions et retouches',
|
||||
ordre: 1,
|
||||
dureeEstimee: null,
|
||||
budgetEstime: null,
|
||||
competencesRequises: ['Finisseur'],
|
||||
obligatoire: true
|
||||
},
|
||||
{
|
||||
id: 'vm-12-02',
|
||||
nom: 'Nettoyage final',
|
||||
description: 'Nettoyage complet du chantier',
|
||||
ordre: 2,
|
||||
dureeEstimee: null,
|
||||
budgetEstime: null,
|
||||
competencesRequises: ['Nettoyage'],
|
||||
obligatoire: true
|
||||
}
|
||||
]
|
||||
}
|
||||
];
|
||||
|
||||
// Créer les templates finaux
|
||||
return [
|
||||
{
|
||||
id: 'villa-moderne',
|
||||
nom: 'Villa Moderne',
|
||||
description: 'Construction d\'une villa moderne avec prestations haut de gamme',
|
||||
categorie: 'RESIDENTIEL',
|
||||
complexiteMetier: 'MOYENNE',
|
||||
dureeGlobaleEstimee: null, // À saisir par l'utilisateur
|
||||
budgetGlobalEstime: null, // À saisir par l'utilisateur
|
||||
nombreTotalPhases: this.countTotalPhases(villaModernePhases),
|
||||
tags: ['Villa', 'Moderne', 'Haut de gamme', 'BBC'],
|
||||
phases: villaModernePhases
|
||||
},
|
||||
{
|
||||
id: 'extension-maison',
|
||||
nom: 'Extension Maison',
|
||||
description: 'Extension latérale d\'une maison existante',
|
||||
categorie: 'RESIDENTIEL',
|
||||
complexiteMetier: 'SIMPLE',
|
||||
dureeGlobaleEstimee: null,
|
||||
budgetGlobalEstime: null,
|
||||
nombreTotalPhases: 8, // 4 phases + 4 sous-phases
|
||||
tags: ['Extension', 'Raccordement', 'Rénovation'],
|
||||
phases: [
|
||||
{
|
||||
id: 'em-01',
|
||||
nom: 'Démolition et Préparation',
|
||||
description: 'Démolitions partielles et préparation du raccordement',
|
||||
ordre: 1,
|
||||
dureeEstimee: null,
|
||||
budgetEstime: null,
|
||||
competencesRequises: ['Démolition', 'Maçonnerie'],
|
||||
prerequis: [],
|
||||
categorieMetier: 'GROS_OEUVRE' as const,
|
||||
obligatoire: true,
|
||||
personnalisable: false,
|
||||
sousPhases: [
|
||||
{
|
||||
id: 'em-01-01',
|
||||
nom: 'Ouverture mur existant',
|
||||
description: 'Ouverture dans le mur existant pour raccordement',
|
||||
ordre: 1,
|
||||
dureeEstimee: null,
|
||||
budgetEstime: null,
|
||||
competencesRequises: ['Démolition'],
|
||||
obligatoire: true
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
id: 'em-02',
|
||||
nom: 'Fondations Extension',
|
||||
description: 'Fondations spécifiques pour l\'extension',
|
||||
ordre: 2,
|
||||
dureeEstimee: null,
|
||||
budgetEstime: null,
|
||||
competencesRequises: ['Béton armé', 'Maçonnerie'],
|
||||
prerequis: ['em-01'],
|
||||
categorieMetier: 'GROS_OEUVRE' as const,
|
||||
obligatoire: true,
|
||||
personnalisable: false,
|
||||
sousPhases: [
|
||||
{
|
||||
id: 'em-02-01',
|
||||
nom: 'Fondations raccordement',
|
||||
description: 'Fondations avec raccordement à l\'existant',
|
||||
ordre: 1,
|
||||
dureeEstimee: null,
|
||||
budgetEstime: null,
|
||||
competencesRequises: ['Béton armé'],
|
||||
obligatoire: true
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
id: 'em-03',
|
||||
nom: 'Élévation Extension',
|
||||
description: 'Construction de l\'extension',
|
||||
ordre: 3,
|
||||
dureeEstimee: null,
|
||||
budgetEstime: null,
|
||||
competencesRequises: ['Maçonnerie'],
|
||||
prerequis: ['em-02'],
|
||||
categorieMetier: 'GROS_OEUVRE' as const,
|
||||
obligatoire: true,
|
||||
personnalisable: true,
|
||||
sousPhases: [
|
||||
{
|
||||
id: 'em-03-01',
|
||||
nom: 'Murs extension',
|
||||
description: 'Élévation des murs de l\'extension',
|
||||
ordre: 1,
|
||||
dureeEstimee: null,
|
||||
budgetEstime: null,
|
||||
competencesRequises: ['Maçonnerie'],
|
||||
obligatoire: true
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
id: 'em-04',
|
||||
nom: 'Finitions Extension',
|
||||
description: 'Finitions et raccordements',
|
||||
ordre: 4,
|
||||
dureeEstimee: null,
|
||||
budgetEstime: null,
|
||||
competencesRequises: ['Finisseur', 'Électricien', 'Plombier'],
|
||||
prerequis: ['em-03'],
|
||||
categorieMetier: 'FINITIONS' as const,
|
||||
obligatoire: true,
|
||||
personnalisable: true,
|
||||
sousPhases: [
|
||||
{
|
||||
id: 'em-04-01',
|
||||
nom: 'Raccordements techniques',
|
||||
description: 'Raccordements électriques et plomberie',
|
||||
ordre: 1,
|
||||
dureeEstimee: null,
|
||||
budgetEstime: null,
|
||||
competencesRequises: ['Électricien', 'Plombier'],
|
||||
obligatoire: true
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
export const typeChantierService = new TypeChantierService();
|
||||
export default typeChantierService;
|
||||
Reference in New Issue
Block a user