Files
btpxpress-frontend/types/btp-extended.ts
2025-10-01 01:39:07 +00:00

561 lines
17 KiB
TypeScript

/**
* Types TypeScript étendus pour les entités BTP
* Version complète avec toutes les nouvelles fonctionnalités
*/
// Énumérations communes
export type TypeFournisseur = 'MATERIEL' | 'SERVICE' | 'SOUS_TRAITANT' | 'LOCATION' | 'TRANSPORT' | 'CONSOMMABLE';
export type StatutCommande = 'BROUILLON' | 'ENVOYEE' | 'CONFIRMEE' | 'PARTIELLEMENT_LIVREE' | 'LIVREE' | 'FACTUREE' | 'ANNULEE';
export type StatutLivraison = 'PROGRAMMEE' | 'EN_COURS' | 'LIVREE' | 'RECEPTIONNEE' | 'REFUSEE';
export type StatutPhase = 'PLANIFIEE' | 'EN_ATTENTE' | 'EN_COURS' | 'EN_PAUSE' | 'TERMINEE' | 'ANNULEE' | 'EN_RETARD';
export type StatutSituation = 'BROUILLON' | 'ETABLIE' | 'ENVOYEE' | 'VALIDEE' | 'FACTUREE' | 'PAYEE' | 'CONTESTEE' | 'ANNULEE';
export type TypeDocument = 'PLAN' | 'PERMIS' | 'DEVIS' | 'FACTURE' | 'CONTRAT' | 'PHOTO_CHANTIER' | 'RAPPORT_VISITE' | 'PV_RECEPTION' | 'FICHE_TECHNIQUE' | 'CERTIFICAT' | 'ASSURANCE' | 'MANUEL' | 'GARANTIE' | 'COMPTE_RENDU' | 'EMAIL' | 'COURRIER' | 'BON_LIVRAISON' | 'BON_COMMANDE' | 'AUTRE';
export type TypeMouvement = 'ENTREE_ACHAT' | 'ENTREE_RETOUR' | 'ENTREE_CORRECTION' | 'ENTREE_TRANSFERT' | 'SORTIE_CHANTIER' | 'SORTIE_VENTE' | 'SORTIE_PERTE' | 'SORTIE_CORRECTION' | 'SORTIE_TRANSFERT' | 'INVENTAIRE';
export type TypeAlerte = 'STOCK_MINIMUM' | 'STOCK_ZERO' | 'STOCK_NEGATIF' | 'PEREMPTION_PROCHE' | 'PEREMPTION_DEPASSEE' | 'CONSOMMATION_ANORMALE' | 'IMMOBILISATION_LONGUE';
export type NiveauSeverite = 'INFO' | 'WARNING' | 'CRITICAL' | 'URGENT';
export type TypeJalon = 'DEBUT_PHASE' | 'FIN_PHASE' | 'LIVRAISON' | 'VALIDATION_CLIENT' | 'CONTROLE_QUALITE' | 'RECEPTION_TRAVAUX' | 'PAIEMENT' | 'AUTORISATION' | 'FORMATION' | 'AUTRE';
export type StatutJalon = 'PLANIFIE' | 'EN_COURS' | 'ATTEINT' | 'EN_RETARD' | 'REPORTE' | 'ANNULE';
export type TypePointage = 'TRAVAIL' | 'DEPLACEMENT' | 'FORMATION' | 'REUNION' | 'MAINTENANCE' | 'ARRET_TECHNIQUE' | 'INTEMPERIES' | 'AUTRE';
// Interfaces pour la gestion des fournisseurs
export interface Fournisseur {
id?: number;
nom: string;
siret?: string;
numeroTva?: string;
email?: string;
telephone?: string;
fax?: string;
adresse?: string;
codePostal?: string;
ville?: string;
pays?: string;
contactPrincipal?: string;
type: TypeFournisseur;
notes?: string;
actif?: boolean;
delaiPaiementJours?: number;
conditionsPaiement?: string;
dateCreation?: Date;
dateModification?: Date;
nombreCommandes?: number;
nombreArticlesCatalogue?: number;
}
export interface CommandeFournisseur {
id?: number;
numeroCommande: string;
fournisseur: Fournisseur;
chantier?: any; // Import du type Chantier existant
dateCommande: Date;
dateLivraisonPrevue?: Date;
dateLivraisonReelle?: Date;
statut: StatutCommande;
montantHT: number;
montantTVA: number;
montantTTC: number;
adresseLivraison?: string;
notes?: string;
referenceFournisseur?: string;
dateCreation?: Date;
dateModification?: Date;
lignes?: LigneCommandeFournisseur[];
livraisons?: LivraisonFournisseur[];
}
export interface LigneCommandeFournisseur {
id?: number;
commandeFournisseur: CommandeFournisseur;
materiel?: any; // Import du type Materiel existant
designation: string;
reference?: string;
quantite: number;
unite: string;
prixUnitaireHT: number;
tauxTVA: number;
quantiteLivree?: number;
notes?: string;
montantHT?: number;
montantTVA?: number;
montantTTC?: number;
}
export interface LivraisonFournisseur {
id?: number;
numeroLivraison: string;
commandeFournisseur: CommandeFournisseur;
dateLivraison: Date;
nomLivreur?: string;
numeroBonLivraison?: string;
adresseLivraison?: string;
statut: StatutLivraison;
notes?: string;
receptionneePar?: string;
dateReception?: Date;
conforme?: boolean;
notesReception?: string;
dateCreation?: Date;
dateModification?: Date;
lignes?: LigneLivraisonFournisseur[];
}
export interface LigneLivraisonFournisseur {
id?: number;
livraisonFournisseur: LivraisonFournisseur;
ligneCommande: LigneCommandeFournisseur;
quantiteLivree: number;
quantiteAcceptee?: number;
quantiteRefusee?: number;
motifRefus?: string;
notes?: string;
}
export interface CatalogueItem {
id?: number;
fournisseur: Fournisseur;
materiel?: any; // Import du type Materiel existant
designation: string;
referenceFournisseur?: string;
codeEAN?: string;
description?: string;
unite: string;
prixUnitaireHT?: number;
tauxTVA?: number;
delaiLivraisonJours?: number;
quantiteMinimumCommande?: number;
conditionnement?: number;
marque?: string;
modele?: string;
urlFicheTechnique?: string;
actif?: boolean;
derniereMiseAJourPrix?: Date;
dateCreation?: Date;
dateModification?: Date;
categories?: string[];
}
// Interfaces pour la gestion des phases de chantier
export interface PhaseChantier {
id?: string;
nom: string;
description?: string;
chantier?: any; // Import du type Chantier existant
chantierId?: string;
phaseParent?: string; // ID de la phase parent
sousPhases?: PhaseChantier[];
ordreExecution: number;
dateDebutPrevue: string; // ISO string format
dateFinPrevue: string; // ISO string format
dateDebutReelle?: string;
dateFinReelle?: string;
statut: StatutPhase;
pourcentageAvancement?: number;
budgetPrevu?: number;
coutReel?: number;
responsable?: any; // Import du type Employe existant
equipes?: any[]; // Import du type Equipe existant
prerequis?: string;
livrables?: string;
risques?: string;
notes?: string;
critique?: boolean;
dateCreation?: string; // ISO string format
dateModification?: string; // ISO string format
actif?: boolean;
// Propriétés étendues pour la création de phases
dureeEstimeeHeures?: number;
priorite?: string; // ou enum selon votre système
prerequisPhases?: string[]; // Liste des IDs des phases prérequises
competencesRequises?: string[];
materielsNecessaires?: string[];
fournisseursRecommandes?: string[];
jalons?: JalonPhase[];
pointages?: PointagePhase[];
// Nouveaux champs pour la gestion avancée des coûts et matériels
materielsRequis?: MaterielPhase[];
fournisseursAssocies?: FournisseurPhase[];
coutMateriau?: number;
coutMainOeuvre?: number;
coutSousTraitance?: number;
coutAutres?: number;
margePrevieweBrute?: number;
margePrevueNette?: number;
margeReelle?: number;
tauxMarge?: number;
prixVenteUnitaire?: number;
quantitePrevue?: number;
quantiteReelle?: number;
unite?: string;
}
export interface JalonPhase {
id?: number;
nom: string;
description?: string;
phase: PhaseChantier;
typeJalon: TypeJalon;
datePrevue: Date;
dateReelle?: Date;
statut: StatutJalon;
critique?: boolean;
responsable?: string;
livrablesRequis?: string;
criteresValidation?: string;
notesValidation?: string;
validePar?: string;
dateValidation?: Date;
notes?: string;
dateCreation?: Date;
dateModification?: Date;
}
export interface PointagePhase {
id?: number;
phase: PhaseChantier;
employe: any; // Import du type Employe existant
date: Date;
heureDebut?: string;
heureFin?: string;
heuresTravaillees?: number;
heuresSupplementaires?: number;
typePointage: TypePointage;
description?: string;
tauxHoraire?: number;
coutTotal?: number;
valide?: boolean;
validePar?: string;
dateValidation?: Date;
facture?: boolean;
factureAssociee?: any; // Import du type Facture existant
notes?: string;
dateCreation?: Date;
}
// Interfaces pour la gestion avancée des matériels et fournisseurs de phases
export interface MaterielPhase {
id?: number;
phase: PhaseChantier;
materiel?: any; // Import du type Materiel existant
designation: string;
reference?: string;
quantitePrevue: number;
quantiteUtilisee?: number;
unite: string;
prixUnitaireCatalogue?: number;
prixUnitaireNegocie?: number;
coutTotal?: number;
fournisseurPrincipal?: Fournisseur;
fournisseursAlternatifs?: FournisseurPhase[];
delaiLivraison?: number;
enStock?: boolean;
quantiteStock?: number;
seuilCritique?: number;
categorie?: string;
specifications?: string;
dateCreation?: Date;
dateModification?: Date;
}
export interface FournisseurPhase {
id?: number;
phase: PhaseChantier;
fournisseur: Fournisseur;
materielPhase?: MaterielPhase;
typeContribution: 'MATERIEL' | 'SERVICE' | 'SOUS_TRAITANCE' | 'LOCATION' | 'TRANSPORT';
prixCatalogue?: number;
prixNegocie?: number;
remise?: number;
tauxRemise?: number;
delaiLivraison?: number;
conditionsPaiement?: string;
garantie?: string;
notes?: string;
priorite?: number; // 1 = principal, 2 = alternatif, etc.
valide?: boolean;
dateNegociation?: Date;
validePar?: string;
dateCreation?: Date;
dateModification?: Date;
}
export interface AnalysePrixPhase {
id?: number;
phase: PhaseChantier;
coutMateriauxTotal: number;
coutMainOeuvreTotal: number;
coutSousTraitanceTotal: number;
coutAutresTotal: number;
coutTotalDirect: number;
fraisGeneraux?: number;
tauxFraisGeneraux?: number;
coutTotalAvecFrais: number;
margeObjectif?: number;
tauxMargeObjectif?: number;
prixVenteCalcule: number;
prixVentePropose?: number;
prixVenteAccepte?: number;
rentabilitePrevisionnelle?: number;
rentabiliteReelle?: number;
dateAnalyse?: Date;
analysePar?: string;
validee?: boolean;
dateValidation?: Date;
validePar?: string;
commentaires?: string;
}
// Interfaces pour la gestion financière avancée
export interface SituationTravaux {
id?: number;
numeroSituation: string;
chantier: any; // Import du type Chantier existant
periodeDebut: Date;
periodeFin: Date;
dateEtablissement: Date;
dateEnvoi?: Date;
dateValidationClient?: Date;
statut: StatutSituation;
montantHTTravaux?: number;
montantRevisions?: number;
montantAvenants?: number;
montantTotalHT?: number;
montantTVA?: number;
montantTTC?: number;
tauxRetenueGarantie?: number;
montantRetenueGarantie?: number;
montantAcomptesPrecedents?: number;
montantNetAPayer?: number;
pourcentageAvancement?: number;
observations?: string;
etabliPar?: string;
valideParClient?: string;
delaiPaiementJours?: number;
dateEcheancePaiement?: Date;
dateCreation?: Date;
dateModification?: Date;
lignes?: LigneSituationTravaux[];
factureGeneree?: any; // Import du type Facture existant
}
export interface LigneSituationTravaux {
id?: number;
situationTravaux: SituationTravaux;
ligneDevis?: any; // Import du type LigneDevis existant
designation: string;
quantitePrevue?: number;
quantiteRealisee?: number;
quantitePrecedente?: number;
quantitePeriode?: number;
unite: string;
prixUnitaireHT: number;
tauxTVA: number;
pourcentageAvancement?: number;
observations?: string;
montantHT?: number;
montantTVA?: number;
montantTTC?: number;
montantHTPrecedent?: number;
montantHTPeriode?: number;
}
// Interfaces pour la gestion du stock avancée
export interface MouvementStock {
id?: number;
materiel: any; // Import du type Materiel existant
typeMouvement: TypeMouvement;
quantite: number;
prixUnitaire?: number;
chantier?: any; // Import du type Chantier existant
employe?: any; // Import du type Employe existant
fournisseur?: Fournisseur;
commandeFournisseur?: CommandeFournisseur;
referenceDocument?: string;
emplacement?: string;
motif?: string;
utilisateur: string;
stockAvant?: number;
stockApres?: number;
valeurMouvement?: number;
dateMouvement?: Date;
annule?: boolean;
dateAnnulation?: Date;
annulePar?: string;
motifAnnulation?: string;
}
export interface AlerteStock {
id?: number;
materiel: any; // Import du type Materiel existant
typeAlerte: TypeAlerte;
niveauSeverite: NiveauSeverite;
message: string;
quantiteActuelle?: number;
seuil?: number;
active?: boolean;
acquittee?: boolean;
dateAcquittement?: Date;
acquitteePar?: string;
actionsEntreprises?: string;
dateCreation?: Date;
dateModification?: Date;
dateDerniereNotification?: Date;
nombreNotifications?: number;
}
// Interfaces pour la gestion documentaire
export interface Document {
id?: number;
nom: string;
description?: string;
typeDocument: TypeDocument;
cheminFichier: string;
nomFichier: string;
typeMime?: string;
tailleFichier?: number;
version?: number;
numeroVersion?: string;
estVersionCourante?: boolean;
chantier?: any; // Import du type Chantier existant
client?: any; // Import du type Client existant
fournisseur?: Fournisseur;
employe?: any; // Import du type Employe existant
documentParent?: Document;
versions?: Document[];
confidentiel?: boolean;
dateExpiration?: Date;
motsCles?: string;
checksum?: string;
dateCreation?: Date;
dateModification?: Date;
creePar?: string;
modifiePar?: string;
}
// Interfaces pour les libellés et options
export interface TypeFournisseurOption {
value: TypeFournisseur;
label: string;
}
export interface StatutOption {
value: string;
label: string;
color?: string;
}
// Constantes pour les libellés
export const TYPE_FOURNISSEUR_LABELS: Record<TypeFournisseur, string> = {
MATERIEL: 'Matériel',
SERVICE: 'Service',
SOUS_TRAITANT: 'Sous-traitant',
LOCATION: 'Location',
TRANSPORT: 'Transport',
CONSOMMABLE: 'Consommable'
};
export const STATUT_COMMANDE_LABELS: Record<StatutCommande, string> = {
BROUILLON: 'Brouillon',
ENVOYEE: 'Envoyée',
CONFIRMEE: 'Confirmée',
PARTIELLEMENT_LIVREE: 'Partiellement livrée',
LIVREE: 'Livrée',
FACTUREE: 'Facturée',
ANNULEE: 'Annulée'
};
export const STATUT_PHASE_LABELS: Record<StatutPhase, string> = {
PLANIFIEE: 'Planifiée',
EN_ATTENTE: 'En attente',
EN_COURS: 'En cours',
EN_PAUSE: 'En pause',
TERMINEE: 'Terminée',
ANNULEE: 'Annulée',
EN_RETARD: 'En retard'
};
export const NIVEAU_SEVERITE_LABELS: Record<NiveauSeverite, string> = {
INFO: 'Information',
WARNING: 'Attention',
CRITICAL: 'Critique',
URGENT: 'Urgent'
};
export const NIVEAU_SEVERITE_COLORS: Record<NiveauSeverite, string> = {
INFO: '#17a2b8',
WARNING: '#ffc107',
CRITICAL: '#dc3545',
URGENT: '#dc3545'
};
// Types pour les réponses API
export interface ApiResponse<T> {
data: T;
message?: string;
errors?: string[];
}
export interface PaginatedResponse<T> {
data: T[];
total: number;
page: number;
size: number;
totalPages: number;
}
// Types pour les formulaires
export interface FournisseurFormData extends Omit<Fournisseur, 'id' | 'dateCreation' | 'dateModification' | 'nombreCommandes' | 'nombreArticlesCatalogue'> {}
export interface CommandeFournisseurFormData extends Omit<CommandeFournisseur, 'id' | 'numeroCommande' | 'dateCreation' | 'dateModification' | 'lignes' | 'livraisons'> {}
export interface PhaseChantierFormData extends Omit<PhaseChantier, 'id' | 'dateCreation' | 'dateModification' | 'jalons' | 'pointages' | 'sousPhases'> {
chantierId?: string;
phaseParentId?: string;
}
// Alias for compatibility
export interface PhaseFormData extends PhaseChantierFormData {}
// Types pour les filtres et recherches
export interface FournisseurFilters {
nom?: string;
type?: TypeFournisseur;
ville?: string;
actif?: boolean;
}
export interface CommandeFilters {
numeroCommande?: string;
fournisseurId?: number;
chantierId?: number;
statut?: StatutCommande;
dateDebutCommande?: Date;
dateFinCommande?: Date;
}
export interface PhaseFilters {
chantierId?: number;
statut?: StatutPhase;
responsableId?: number;
critique?: boolean;
enRetard?: boolean;
}
// Types pour les statistiques et tableaux de bord
export interface StatistiquesFournisseur {
totalFournisseurs: number;
fournisseursActifs: number;
repartitionParType: Record<TypeFournisseur, number>;
totalCommandes: number;
montantTotalCommandes: number;
}
export interface StatistiquesChantier {
totalPhases: number;
phasesEnCours: number;
phasesEnRetard: number;
phasesTerminees: number;
avancementMoyen: number;
budgetTotal: number;
coutReel: number;
ecartBudget: number;
}