3.0 KiB
3.0 KiB
Rapport de déduplication
DUP-001 · Score 92 · Formulaire de contact site
- Motif : duplication à l’identique du bloc de champs de contact (nom, téléphone, adresse…) entre les modales de création et d’édition de site.
- Occurrences détectées :
app/components/sites/SiteCreateModal.vue— lignes 1-52 (bloc de formulaire remplacé par<SiteContactFormFields />).app/components/sites/SiteEditModal.vue— lignes 1-155 (même bloc de formulaire remplacé par<SiteContactFormFields />).
- Extraction : nouveau composant
app/components/sites/SiteContactFormFields.vueexposant la propform: SiteForm(référence réactive vers l’objet du formulaire). - Plan / Statut : les deux modales importent désormais le composant partagé (
<SiteContactFormFields :form="..." />), supprimant l’ancienne duplication. Aucun changement d’API publique côté modale.
DUP-002 · Score 95 · Éditeur de contraintes (composants/pièces)
- Motif : logique et template identiques pour la gestion des groupes requis dans
TypeEditComponentRequirementsSectionetTypeEditPieceRequirementsSection(ajout/suppression, formulaires, cases à cocher). - Occurrences détectées :
app/components/TypeEditComponentRequirementsSection.vue— lignes 1-94 (ancien template remplacé par<RequirementListEditor />).app/components/TypeEditPieceRequirementsSection.vue— lignes 1-94 (même duplication remplacée).
- Extraction : composant générique
app/components/common/RequirementListEditor.vueparamétrable via :v-modelpour la liste de contraintes,type-options,type-fieldpour la clé d’association,labels(structure textuelle),defaultRequirement,requiredFallback,minFallback.
- Plan / Statut : les deux sections n’hébergent plus de logique métier, se contentent de fournir les options/labels spécifiques. La structure, les watchers et les props exposés restent inchangés côté parent.
DUP-003 · Score 88 · Formatage de dates UI
- Motif : fonctions utilitaires de formatage (
toLocaleDateString/Intl.DateTimeFormat) recopiées dans plusieurs pages (catalogues modèles et documents). - Occurrences détectées :
app/pages/component-catalog.vue— lignes 70-311 (affichage de la colonne « Modifié »).app/pages/pieces-catalog.vue— lignes 70-310.app/pages/documents.vue— lignes 90-188.
- Extraction : utilitaire commun
app/utils/date.tsexposantformatFrenchDate(value: Date | string | number | null | undefined): stringavec gestion des valeurs nulles/invalides. - Plan / Statut : toutes les pages importent
formatFrenchDateet l’utilisent directement en template. Plus de fonction locale dupliquée.
Couverture & suites
- Les trois duplications les plus impactantes repérées ont été factorisées (>= 80 % du volume ciblé).
- Les contrôles
npm run buildpassent avec succès ; aucun changement fonctionnel attendu. - Aucune duplication résiduelle critique détectée dans le périmètre ciblé après refacto.