Files
btpxpress-frontend/types/chantier-form.ts

159 lines
4.7 KiB
TypeScript
Executable File

/**
* Types pour les formulaires de chantier avec gestion avancée des types et phases
*/
import { TypeChantier } from './chantier-templates';
// Interface pour le formulaire de création/modification de chantier
export interface ChantierFormData {
nom: string;
description?: string;
adresse: string;
codePostal?: string;
ville?: string;
dateDebut: string;
dateFinPrevue?: string;
montantPrevu?: number;
clientId: string;
// Nouveaux champs avancés
typeChantier: TypeChantier;
surface?: number;
nombreNiveaux?: number;
autoGenererPhases: boolean;
inclureSousPhases: boolean;
ajusterDelais: boolean;
// Spécificités et contraintes
specificites?: string[];
contraintes?: string;
accesPMR?: boolean;
performanceEnergetique?: string;
// Informations techniques
natureTerrain?: string;
presenceReseaux?: boolean;
accessibiliteChantier?: 'FACILE' | 'MOYENNE' | 'DIFFICILE';
stockagePossible?: boolean;
// Réglementation
permisRequis?: boolean;
numeroPermis?: string;
dateObtentionPermis?: string;
controleUrbanismeRequis?: boolean;
// Options de planification
margeSecurite?: number; // en jours
periodesTravailRestreintes?: Array<{
dateDebut: string;
dateFin: string;
motif: string;
}>;
// Équipes et ressources préférées
equipePrefereId?: string;
materielsRequis?: string[];
// Statut et activation
statut?: string;
actif?: boolean;
}
// Interface pour la prévisualisation du projet
export interface ChantierPreview {
typeChantier: TypeChantier;
nom: string;
dureeEstimee: number;
dateFinEstimee: Date;
complexite: {
niveau: 'SIMPLE' | 'MOYEN' | 'COMPLEXE' | 'TRES_COMPLEXE';
score: number;
facteurs: string[];
};
phasesCount: number;
sousePhasesCount: number;
specificites: string[];
reglementations: string[];
coutEstime?: number;
}
// Interface pour les options de génération de phases
export interface PhaseGenerationOptions {
inclureSousPhases: boolean;
ajusterDelais: boolean;
margeSecurite: number;
personnaliserDurees: boolean;
conserverOrdreStandard: boolean;
genererMateriels: boolean;
genererFournisseurs: boolean;
calculerAnalysePrix: boolean;
}
// Interface pour les contraintes temporelles
export interface ContrainteTemporelle {
id?: string;
nom: string;
dateDebut: string;
dateFin: string;
type: 'INTEMPERIE' | 'CONGE' | 'AUTRE_CHANTIER' | 'MAINTENANCE' | 'REGLEMENTATION';
description?: string;
impactPhases?: string[]; // IDs des phases impactées
}
// Interface pour la validation du formulaire
export interface ChantierFormValidation {
isValid: boolean;
errors: {
[key in keyof ChantierFormData]?: string;
};
warnings: string[];
recommendations: string[];
}
// Interface pour les données calculées
export interface ChantierCalculatedData {
dureeEstimee: number;
dateFinCalculee: Date;
coutEstimeTotal?: number;
coutEstimeParPhase?: { [phaseId: string]: number };
ressourcesRequises: {
equipes: number;
materiels: string[];
competences: string[];
};
jalonsImportants: Array<{
nom: string;
date: Date;
critique: boolean;
}>;
}
// Types pour les options de projet
export type AccessibiliteChantier = 'FACILE' | 'MOYENNE' | 'DIFFICILE';
export type NatureTerrain = 'PLAT' | 'PENTE_LEGERE' | 'PENTE_FORTE' | 'ROCHEUX' | 'HUMIDE' | 'INSTABLE';
export type PerformanceEnergetique = 'RT2012' | 'RT2020' | 'RE2020' | 'PASSIF' | 'POSITIF' | 'STANDARD';
// Constantes pour les options
export const ACCESSIBILITE_OPTIONS = [
{ value: 'FACILE', label: 'Facile - Accès direct, terrain plat' },
{ value: 'MOYENNE', label: 'Moyenne - Quelques contraintes d\'accès' },
{ value: 'DIFFICILE', label: 'Difficile - Accès restreint, terrain complexe' }
] as const;
export const NATURE_TERRAIN_OPTIONS = [
{ value: 'PLAT', label: 'Terrain plat' },
{ value: 'PENTE_LEGERE', label: 'Pente légère' },
{ value: 'PENTE_FORTE', label: 'Pente forte' },
{ value: 'ROCHEUX', label: 'Terrain rocheux' },
{ value: 'HUMIDE', label: 'Terrain humide' },
{ value: 'INSTABLE', label: 'Terrain instable' }
] as const;
export const PERFORMANCE_ENERGETIQUE_OPTIONS = [
{ value: 'STANDARD', label: 'Standard (réglementation minimale)' },
{ value: 'RT2012', label: 'RT 2012' },
{ value: 'RT2020', label: 'RT 2020' },
{ value: 'RE2020', label: 'RE 2020 (obligatoire neuf)' },
{ value: 'PASSIF', label: 'Bâtiment passif' },
{ value: 'POSITIF', label: 'Bâtiment à énergie positive' }
] as const;