[M4] Scoring de similarité et suggestions automatiques de fusion d'identités #55

Closed
opened 2026-04-06 01:37:08 +00:00 by charles · 0 comments
Owner

Contexte

Proposer automatiquement à l'utilisateur de lier des identités puppet qui semblent appartenir à la même personne, basé sur la similarité de nom et/ou de numéro de téléphone.

Critères d'acceptation

  • similarity_score(a, b) -> f64 : score 0.0–1.0 combinant similarité Levenshtein (×0.4) + numéro de téléphone commun (×0.5) + même serveur bridge (×0.1)
  • Les bridges de même type ne génèrent pas de suggestion (score = 0.0)
  • Seuil de suggestion : score ≥ 0.6 → notification discrète "Ces contacts semblent identiques"
  • L'utilisateur peut confirmer la fusion, refuser (+ ne plus suggérer ce pair), ou ignorer
  • suggest_merges = true dans config active/désactive les suggestions

Notes techniques

  • Dépend de : #44 (BridgeType), #45 (UnifiedContact)
  • Distance Levenshtein normalisée : 1 - levenshtein(a, b) / max(len(a), len(b))
  • Extraction du numéro de téléphone depuis display_name ou external_id via regex E.164
  • Table SQLite merge_rejections(user_id_a, user_id_b) pour les refus explicites
## Contexte Proposer automatiquement à l'utilisateur de lier des identités puppet qui semblent appartenir à la même personne, basé sur la similarité de nom et/ou de numéro de téléphone. ## Critères d'acceptation - [ ] `similarity_score(a, b) -> f64` : score 0.0–1.0 combinant similarité Levenshtein (×0.4) + numéro de téléphone commun (×0.5) + même serveur bridge (×0.1) - [ ] Les bridges de même type ne génèrent pas de suggestion (score = 0.0) - [ ] Seuil de suggestion : score ≥ 0.6 → notification discrète "Ces contacts semblent identiques" - [ ] L'utilisateur peut confirmer la fusion, refuser (+ ne plus suggérer ce pair), ou ignorer - [ ] `suggest_merges = true` dans config active/désactive les suggestions ## Notes techniques - Dépend de : #44 (BridgeType), #45 (UnifiedContact) - Distance Levenshtein normalisée : `1 - levenshtein(a, b) / max(len(a), len(b))` - Extraction du numéro de téléphone depuis `display_name` ou `external_id` via regex E.164 - Table SQLite `merge_rejections(user_id_a, user_id_b)` pour les refus explicites
Sign in to join this conversation.
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
charles/my-fractal#55
No description provided.