← Roadmap publique

Contexte développement

CRM AWM V1.6.29Snapshot sécurisé de la version effectivement publiée. Les lignes potentiellement sensibles sont masquées automatiquement.
# Contexte développement — CRM AWM 1.6.29


---

## CHANGELOG.md

## 1.6.29 - Correctif du fatal Pulse WP_User - 2026-09-12

- Le Pulse utilise les objets WP_User renvoyes par canonical_clients() et la methode PUBLIQUE canonical_client_is_active().
- Aucun acces tableau sur WP_User et aucun appel a la methode privee client_is_active().
- Compatibilite avec les profils tableaux explicitement types; un type inconnu reste inconnu, pas automatiquement inactif.
- Comptage en lecture seule, sans construire de profil pouvant creer un site_id. Inactif et archive ne sont pas renommes abusivement suspendus.
- Aucune migration du schema metier. Regression reproduite sur l'ancienne version puis testee avec la classe CRM reelle et des doubles WordPress.

## 1.6.28 — Pulse v2 Health / cycle client — 2026-09-12

- CRM expose un score/fraîcheur Health tout en restant l autorité du statut actif/inactif.
- Le nombre de clients suspendus reste contextuel et ne pénalise pas automatiquement le score technique.

## 1.6.27 — Pulse opérationnel transversal — 2026-09-12

- Expose au Core un pulse clients actifs / suspendus depuis le statut CRM canonique.
- Prépare Health/SLA à distinguer une suspension commerciale d une panne technique.

# CRM AWM 1.6.26 — ancres Connector par site

- Chaque bloc Connector principal ou secondaire expose maintenant une ancre stable dérivée du `site_id`.
- Tech AWM peut ainsi ouvrir directement le bon Connector depuis le badge **À connecter** ou depuis un diagnostic indisponible.
- Le Connector ciblé est mis en évidence sans modifier sa clé, son état ou son `instance_uuid`.

## 1.6.25 — 2026-09-11

- Ajoute un **motif d’inactivité** et une **date de réactivation planifiée** directement dans l’état du compte CRM, sans créer de second statut.
- Conserve le clic rapide Actif/Inactif de la liste exactement comme en 1.6.24; les détails d’inactivité restent optionnels dans la fiche client.
- Ajoute une réactivation automatique horaire : lorsque la date planifiée est atteinte, CRM repasse le client à `active` et republie l’événement canonique à toute la Suite.
- Historise les périodes de suspension avec début, fin, motif et source de réactivation afin que Health/SLA puissent distinguer une vraie indisponibilité d’une suspension commerciale.
- Expose `canonical_client_status_context()`, `canonical_client_status_history()` et `canonical_client_suspensions()` aux autres modules AWM.
- La chronologie du dossier client inclut désormais les changements de statut et les mises à jour du contexte d’inactivité.
- Aucun Connector, incident historique, appel, statistique, ticket, facture ou service n’est supprimé lors d’une suspension ou d’une réactivation.

## 1.6.24 — 2026-09-11

- Remplace la soumission/recharge complète du badge **Actif / Inactif** par une bascule AJAX sécurisée.
- Conserve la position de défilement, la recherche, le filtre Actifs/Inactifs/Tous et le mode Fiches/Tableau après le changement.
- Met à jour simultanément la fiche et la ligne Tableau du même client sans dupliquer le statut.
- Le loader AWM suit l action et affiche le résultat; aucune notice WordPress ni retour en haut de page n est nécessaire.
- Le traitement serveur conserve `_callink_crm_account_status`, `_callink_manual_inactive`, le journal de sécurité et l événement `awm_crm_client_status_changed` utilisés par Tech, Hub, Stats, Studio, CallTracker et le Connector.
- La route `admin-post.php` historique reste disponible pour les autres écrans CRM et comme compatibilité serveur.

## 1.6.23 — 2026-09-11

- Le badge **Actif / Inactif** des fiches clients devient un interrupteur direct dans les vues Fiches et Tableau.
- CRM demeure la source unique du statut `active / inactive / archived` et expose ce statut aux autres modules via l API canonique.
- Chaque changement de statut publie l événement `awm_crm_client_status_changed` pour suspendre ou reprendre proprement les modules opérationnels.
- Une désactivation ne supprime aucune facture, statistique, campagne, appel, ticket, incident, site, clé Connector ou historique.
- Le retour Inactif → Actif réutilise la même fiche, les mêmes `client_id`, `site_id`, `instance_uuid` et Connectors existants.

## 1.6.22 — 2026-09-09

- Clarifie le parcours Connector des sites secondaires : `Clé en attente` remplace le statut ambigu `Code prêt`.
- Un site avec une clé en attente affiche maintenant **Régénérer la clé** et un raccourci pour ouvrir Hub Client sur le WordPress concerné.
- Explique directement dans la fiche qu un site runtime connecté alimente Stats/Health et devient éligible aux actions distantes.
- Aucun changement aux `client_id`, `site_id`, `instance_uuid` ou secrets existants.

## 1.6.21 — 2026-09-08
- Corrige les cartes KPI blanches et illisibles dans la fiche client lorsque le thème AWM sombre est actif.
- Formalise le **site principal** comme source graphique canonique et comme destination **Hub Client par défaut**.
- Expose `canonical_primary_site_id()`, `canonical_hub_default_site()` et `canonical_design_source_site()` pour les autres modules AWM.
- Ajoute les indicateurs `is_design_source` et `is_hub_default` à la liste canonique des sites.
- Une promotion de site secondaire déplace automatiquement la référence visuelle et le Hub Client par défaut vers le nouveau site principal.
- Conserve un Connector indépendant par `client_id + site_id`; générer, régénérer ou révoquer une clé secondaire n'affecte jamais le site principal ni les autres sites.
- Clarifie le panneau Sites du client avec le badge **Design + Hub par défaut** et une note d'isolation des Connectors.
- Aucun changement aux secrets, `instance_uuid`, paiements, WHMCS ou données commerciales.

## 1.6.19 — 2026-09-05
- Refonte premium et responsive du bloc **Sites du client** dans la fiche client canonique.
- Remplace les radios et styles inline par des cartes compactes, actions directes **Promouvoir / Supprimer**, ajout secondaire visible et état de promotion avant enregistrement.
- Ajoute un champ `site_type` distinct de l'environnement technique et conserve la compatibilité des sites déjà enregistrés.
- Étend les types disponibles : Production, Landing page, Sous-domaine, Répertoire, Staging, Développement, Boutique, Blog, Portail client, Campagne, Microsite, Réservation, Site multilingue, Intranet, Extranet et Autre.
- Le site principal reste la source canonique des couleurs, typographies et règles visuelles pour tous les sites secondaires.

## 1.6.18 — 2026-09-05
- Ajoute `Site principal` comme source graphique canonique du client.
- Ajoute une liste extensible de sites secondaires avec URL complète, libellé, environnement et `site_id` persistant.
- Permet de promouvoir un site secondaire en site principal avec journalisation.
- Expose `canonical_client_sites()` et `canonical_primary_site_url()` aux autres modules de la Suite.
- Conserve `_callink_client_site_url` comme méta principale pour compatibilité et pour le moteur de style Hub.

## 1.6.17 — 2026-09-04
- Ajoute deux blocs permanents à la fiche client canonique : **Hub Client & connexion** et **Services**.
- Ces blocs sont visibles sur toutes les sections de la fiche client et restent liés au même `client_id` CRM.
- CRM reste propriétaire des données maîtres et des abonnements; Hub gère l application des services et Core garde la sécurité/Connector.
- Aucun répertoire ni fiche client parallèle n est créé.

## 1.6.16 — 2026-09-04
- CRM AWM devient explicitement la source canonique unique de toutes les fiches clients de la Suite.
- Ajoute l API `canonical_client*` pour la recherche, la lecture et les liens vers la fiche client unifiée.
- Ajoute `update_canonical_client_fields()` afin que les outils de la Suite modifient les données maîtres uniquement via CRM.
- La fiche client CRM accepte maintenant les onglets des modules AWM sans dupliquer les données clients.

## 1.6.15 — 2026-09-03

- Ajoute une protection explicite des **forfaits historiques** CallTracker.
- Le tarif **10 $ + taxes / mois** est marqué comme modèle tarifaire réservé aux nouveaux Funnels créés explicitement depuis le parcours Nouveau funnel.
- Refuse l activation de ce tarif sur un service CRM qui ne provient pas du nouveau Funnel CallTracker.
- Les campagnes et services existants conservent leur prix, taxes, cycle et forfait historiques sans migration rétroactive.
- Le prix retourné à Hub Client provient maintenant du service CRM créé, au lieu d être supposé sur les services existants.

## 1.6.14 — 2026-09-02

- Rend CRM explicitement propriétaire du cycle commercial des **Funnels CallTracker à 10 $/mois**.
- Crée le service dès l étape **Nouveau funnel** avec l état `awaiting_number`, le cycle mensuel et la formule **1 numéro + 1 formulaire**.
- Conserve le service en pause et la facturation automatique désactivée pendant la configuration du numéro.
- Lie le service CRM à la campagne technique CallTracker préparée avant tout achat Twilio.
- Active le service, son application au Hub et la facturation récurrente seulement après attribution confirmée du numéro.
- Ajoute une lecture CRM des funnels du client afin que Hub Client affiche une liste commerciale unique sans créer de catalogue parallèle dans CallTracker.

# Changelog — CRM AWM

## 1.6.13 — 2026-09-02

- Ajoute le service métier **Funnel CallTracker** créé automatiquement lors d un achat autorisé depuis Hub Client.
- Chaque funnel est enregistré à **10 $/mois**, avec un numéro et un formulaire associés.
- Le service est d abord préparé en pause, puis activé seulement après confirmation de l achat Twilio.
- Le service CRM conserve le lien vers la campagne et le numéro CallTracker et peut rejoindre la facturation récurrente native CRM.
- Une opération Twilio échouée avant achat supprime le service préparatoire afin d éviter une facturation fantôme.

## 1.6.12 — 2026-08-25

- Remplace la liste générale du catalogue par des fiches responsives et lisibles sans défilement horizontal.
- Rend les éditeurs de catalogue et d’attributions réellement responsives sur tablette et mobile.
- Ajoute une couleur configurable par catégorie avec valeurs initiales françaises et support des catégories personnalisées.
- Ajoute un panneau **Couleurs des catégories** et un sélecteur de couleur dans l’éditeur du catalogue.
- Applique la même couleur à tous les badges d’une catégorie et calcule automatiquement une couleur de texte contrastée.
- Affiche les catégories colorées dans le registre des services clients.
- Ajoute une progression intégrée aux opérations d’enregistrement, application, modification, changement d’état et suppression.
- Journalise les changements de couleurs dans Core AWM et conserve les retours d’opération dans le loader AWM.
- Maintient CRM propriétaire du catalogue, Hub propriétaire de l’application et WHMCS facultatif.
- Exige Core AWM 4.5.40.

---

## 1.6.11 — 2026-08-25

- Ajoute une **catégorie modifiable** à chaque définition du catalogue de services et abonnements ainsi qu’à chaque attribution cliente.
- Préconfigure les catégories : Publicité et marketing, Sites Web et développement, Hébergement et domaines, Téléphonie et CallTracker, Modules AWM, Création de contenu, Services professionnels, Autres et Sans catégorie.
- Permet de saisir une catégorie personnalisée sans limiter Alliance aux suggestions préconfigurées.
- Ajoute la catégorie à la recherche, au filtre, au tri et à la colonne du catalogue général.
- Affiche et permet de modifier la catégorie dans la fiche commerciale propre à chaque client.
- Transmet la catégorie du catalogue lorsqu’un service est appliqué à un client et permet sa propagation facultative aux attributions existantes.
- Ajoute la catégorie au sélecteur des services déjà appliqués lors de la création d’une facture ou d’une soumission.
- Classe automatiquement les anciens services sans catégorie sous **Sans catégorie**, sans modifier leurs prix, cycles, taxes ou historique.
- Utilise des identifiants `datalist` uniques dans les formulaires imbriqués afin d’éviter les collisions HTML lorsque plusieurs éditeurs sont ouverts.
- Maintient Hub AWM comme propriétaire de l’application du service au portail et Soutien AWM comme propriétaire exclusif du soutien opérationnel.
- Exige Core AWM 4.5.39.

---

## 1.6.10 — 2026-08-25

- Ajoute un **catalogue réel des services et abonnements**, indépendant des clients, visible avant le registre des services attribués.
- Construit automatiquement le catalogue à partir des noms de services déjà présents, sans limiter l’affichage aux clients qui possèdent actuellement un service.
- Permet de créer, rechercher, filtrer, modifier, archiver et supprimer une définition de service du catalogue.
- Ajoute une propagation facultative et explicitement cochée du nom, de la description, du prix, du cycle et des taxes vers les services clients déjà reliés, sans remplacer leurs dates, états ni autorisations de facturation.
- Permet d’appliquer un service du catalogue à un client; chaque attribution reçoit ensuite ses propres prix, cycle, taxes, état, prochaine échéance et réglages de facturation.
- La suppression d’une définition du catalogue conserve tous les services déjà attribués aux clients et leur historique financier.
- Affiche par défaut **tous** les services attribués aux clients, qu’ils soient appliqués au Hub ou non, avec filtres distincts.
- Ajoute la suppression sécurisée d’un service client vers une corbeille, sa restauration contrôlée et la conservation des factures, soumissions et transactions existantes.
- Ajoute une exclusion persistante pour empêcher WHMCS de recréer automatiquement un service externe supprimé dans CRM.
- Maintient Hub AWM comme propriétaire de l’application au portail et Soutien AWM comme propriétaire exclusif du soutien.
- Exige Core AWM 4.5.38.

---

## 1.6.9 — 2026-08-25

- Affiche par défaut la liste des services et abonnements déjà appliqués aux clients dans **CRM AWM → Services et abonnements**.
- Ajoute les filtres par application, client et état, la recherche ainsi que des indicateurs globaux.
- Place les services appliqués en premier dans chaque fiche client et conserve les autres services dans une section séparée.
- Permet de modifier le nom, la description, le prix, le cycle, la prochaine échéance, les taxes, l’état et la facturation automatique.
- Ajoute les cycles semestriel, biennal, triennal, unique et gratuit; un service unique désactive sa récurrence après génération.
- Limite le sélecteur de services des nouvelles factures et soumissions aux services déjà appliqués au client dans Hub AWM.
- Protège les modifications CRM des services reliés à WHMCS : les synchronisations futures conservent seulement un instantané de comparaison et signalent les écarts.
- Maintient Hub AWM comme propriétaire de l’application au portail et Soutien AWM comme propriétaire exclusif du soutien.
- Exige Core AWM 4.5.37.

---

## 1.6.8 — 2026-08-25

- Traduit en français les titres visibles des 86 modèles courriel préconfigurés tout en conservant le nom WHMCS original comme référence technique.
- Met automatiquement à jour les titres existants lors de la mise à niveau, sans toucher aux sujets ni aux corps personnalisés.
- Transforme le badge **Activé / Désactivé** en commande cliquable pour basculer immédiatement l’état d’un modèle depuis la liste.
- Conserve l’édition détaillée dans chaque modèle et synchronise le même état avec la case d’activation du formulaire.
- Journalise chaque activation/désactivation dans le journal de sécurité Core AWM.
- Les modèles de référence peuvent être activés comme modèles disponibles, mais ne déclenchent aucun envoi tant que leur événement AWM n’est pas branché.
- Exige Core AWM 4.5.36.

---

## 1.6.7 — 2026-08-25

- Corrige la cause du catalogue vide dans **CRM AWM → Courriels** : l’identifiant interne `callink_email_template` dépassait la limite WordPress de 20 caractères et empêchait l’enregistrement du type de contenu.
- Remplace cet identifiant par `callink_email_tpl`, valide et compatible avec WordPress.
- Installe automatiquement les 86 modèles AWM préconfigurés lors de l’activation ou de la mise à niveau, sans exiger l’import WHMCS.
- Répare automatiquement un catalogue incomplet et recrée uniquement les modèles manquants.
- Préserve les sujets et corps déjà modifiés localement; une réparation ne remplace jamais une version marquée comme éditée.
- Migre les éventuelles entrées héritées portant l’ancien identifiant interne vers le nouveau registre.
- Conserve pour chaque modèle l’édition du sujet, du corps, de l’état actif et la restauration de la version source.
- Exige Core AWM 4.5.35.

---

## 1.6.6 — 2026-08-25

- Étend l’onglet **Courriels** à une bibliothèque locale de 86 modèles éditables couvrant les familles visibles dans WHMCS Alliance, hors Soutien/tickets.
- Ajoute les références personnalisées **Soumission** et **Soumission Orange**.
- Ajoute recherche, filtre par catégorie, regroupement et badges de propriétaire, branchement et activation.
- Conserve les modèles opérationnels réellement branchés aux factures, relances, paiements, avoirs, remboursements, soumissions et renouvellements.
- Maintient toute la bibliothèque disponible lorsque WHMCS refuse l’import par HTTP 403 et fournit un lien direct vers les réglages du connecteur.
- Préserve les modifications locales lors d’un nouvel import; les sujets et corps WHMCS disponibles sont stockés comme source de restauration.
- Harmonise la navigation avec le shell Core AWM et retire la seconde barre d’onglets interne.
- Désactive l’ancien endpoint de création de ticket CRM et cesse d’enregistrer le type de contenu ticket dans CRM; Soutien AWM reste l’unique propriétaire du soutien.
- Exige Core AWM 4.5.34.

---

## 1.6.5 — 2026-08-25

- Ajoute l’onglet **Courriels** avec une copie locale et modifiable des modèles utilisés par CRM AWM.
- Ajoute l’import/actualisation en lecture seule du catalogue de modèles WHMCS pour les types général, produit, domaine, facture et affiliation; les modèles Soutien/tickets sont volontairement exclus et restent sous Soutien AWM.
- Conserve le sujet et, lorsque la version WHMCS le fournit, le corps source comme référence; une modification locale CRM n’est jamais écrasée silencieusement lors d’un nouvel import.
- Ajoute des modèles AWM natifs pour nouvelle facture, trois niveaux de rappel, paiement reçu, avoir, remboursement, soumission et renouvellement de service.
- Les avis de facture, rappels, confirmations de paiement, avoirs et remboursements utilisent désormais les modèles CRM actifs et leurs variables AWM.
- Ajoute la sélection directe des **Services et abonnements du client** dans les formulaires de facture et de soumission; le service choisi devient une ligne structurée du document.
- Ajoute dans **Services et abonnements** les actions Activer, Mettre en pause et Retirer, en conservant l’historique et en désactivant la récurrence lors d’un retrait.
- Permet d’ajouter un service/abonnement directement depuis l’onglet Services de la fiche client sans dépendre de WHMCS.
- Retire l’onglet et les interfaces de tickets/soutien de CRM AWM; Soutien AWM reste l’unique propriétaire des tickets, conversations et opérations de soutien.
- Corrige les styles clair/sombre des badges, champs de paiement, boutons, actions financières, Services et modèles de courriels afin d’éviter les contrôles WordPress/CSS par défaut illisibles.
- Conserve la série de facturation native `28102` et la séparation stricte CRM / Hub / Core / Soutien AWM.
- Exige Core AWM 4.5.33 pour l’import sécurisé du catalogue WHMCS.

---

## 1.6.4 — 2026-08-25

- Change la numérotation des nouvelles factures natives CRM : préfixe fixe `28102` suivi d’une séquence continue sur au moins 4 chiffres (`281020001`, `281020002`, ...).
- Les factures existantes ne sont jamais renumérotées; la séquence recherche les numéros `28102` déjà présents avant de choisir le prochain numéro afin d’éviter les collisions.
- Étend la migration WHMCS aux factures contenant un crédit historique lorsque le montant est confirmé par le snapshot de facture.
- Crée un avoir historique CRM explicite pour le crédit appliqué à la facture; le montant est exact et la date est marquée comme estimée lorsque WHMCS ne fournit pas la date d’application.
- Ajoute une catégorie **Exceptions détaillées** pour les factures remboursées; elles ne sont jamais cochées automatiquement.
- Exige `GetTransactions` pour une facture remboursée et utilise `amountout` / `refundid` afin de reconstruire les remboursements réels sans les déduire d’un simple statut.
- Importe les remboursements historiques dans le grand livre et crée leur avoir compensatoire, en réduisant le paiement net appliqué pour conserver exactement le solde WHMCS.
- Distingue paiement brut historique, remboursement, paiement net, crédit appliqué et crédit compensatoire dans le snapshot de migration.
- Ventile les taxes WHMCS sur les lignes taxables en conservant exactement les montants de taxe de la facture et le reliquat d’arrondi sur la dernière ligne taxable.
- Utilise une ligne agrégée explicitement identifiée lorsque le détail des lignes historiques est indisponible; bloque les lignes négatives/remises tant que CRM ne les gère pas comme objet financier natif.
- Enregistre un rapprochement fiscal de migration et conserve les identifiants de lignes/transactions WHMCS lorsqu’ils existent.
- Maintient le rollback par facture : avoirs, remboursements et transactions créés pendant une migration échouée sont supprimés avant restauration des métadonnées précédentes.
- Préserve le statut **Remboursée** lors des recalculs financiers ultérieurs d’une facture migrée.
- Exige Core AWM 4.5.32 pour obtenir le détail officiel `GetTransactions` des remboursements.

---

## 1.6.3 — 2026-08-25

- Ajoute la migration contrôlée des factures WHMCS historiques vers le registre financier natif CRM.
- Ajoute un aperçu des factures pré-admissibles, bloquées et déjà migrées dans **Connecteurs / migration**.
- Exige une sélection explicite et une confirmation intégrée AWM; aucune fenêtre `confirm()` native n’est utilisée.
- Vérifie client, source, montants et absence d’écritures CRM concurrentes avant migration.
- Préfère un snapshot WHMCS détaillé en direct et utilise l’archive locale seulement lorsque les informations disponibles permettent une bascule sûre.
- Reprend les paiements historiques détaillés dans le grand livre et ajoute un mouvement de rapprochement explicite si le montant payé connu dépasse le détail transactionnel disponible.
- Bloque les factures comportant crédits/remboursements historiques ambigus ou incohérences au lieu de fabriquer une écriture comptable.
- Conserve l’identifiant WHMCS et un snapshot de migration, mais bascule `_callink_invoice_source` vers `crm_native_migrated`.
- Ajoute un journal de migration par lot et un rollback par facture si une écriture financière échoue.
- Exige Core AWM 4.5.31 afin qu’une synchronisation WHMCS future ne puisse pas reprendre le contrôle financier d’une facture migrée.
- Affiche aussi l’état de comparaison des factures déjà migrées : conforme au dernier état connu ou dérive externe détectée.

---

## 1.6.2 — 2026-08-24

- Ajoute les **avoirs natifs CRM** liés à une facture et numérotés `AVO-AAAA-NNNN`.
- Le solde d’une facture devient `total - paiements - avoirs`; les paiements sont automatiquement limités au solde réellement exigible.
- Ajoute les statuts financiers **Créditée** et **Réglée** pour distinguer une facture annulée par avoir d’une facture soldée par combinaison paiement + avoir.
- Ajoute un **grand livre financier natif** regroupant encaissements, avoirs, remboursements et ajustements avec type, sens, méthode, référence et date.
- Ajoute l’enregistrement des remboursements sur factures natives avec création d’un avoir compensatoire, afin qu’un remboursement ne recrée pas artificiellement un solde dû.
- L’action de remboursement est comptable : elle doit être utilisée après le remboursement réel effectué chez le prestataire de paiement ou par le moyen externe concerné, tant qu’aucune passerelle native n’est connectée.
- Empêche les avoirs et remboursements CRM sur les factures encore contrôlées par un connecteur WHMCS historique.
- Ajoute des contrôles de cohérence et rollback si l’écriture du grand livre échoue.
- Corrige les relances : elles utilisent maintenant le solde après avoirs et incluent correctement les factures déjà marquées En retard.
- Ajoute une date de règlement distincte et retire la date de paiement lorsqu’une facture est réglée autrement que par paiement intégral.
- Expose les avoirs et mouvements financiers autorisés au payload Hub/Core.
- Conserve WHMCS comme connecteur optionnel de migration seulement; aucune opération de ce lot ne nécessite WHMCS.

---

# Changelog — CRM AWM

## 1.6.1 — 2026-08-24

- Ajoute les lignes multiples aux factures et soumissions natives : description, quantité et prix unitaire.
- Permet d’appliquer séparément les deux taxes configurées à chaque ligne.
- Remplace les taxes figées TPS/TVQ dans les nouveaux documents par deux profils configurables : nom, numéro et taux; les clés historiques restent synchronisées pour compatibilité.
- Fige les libellés, numéros et taux de taxes sur chaque document afin qu’un changement futur de réglages ne modifie pas son historique comptable.
- Expose les lignes détaillées des factures natives dans le payload Hub/Core tout en conservant les champs de total historiques.
- La conversion d’une soumission en facture conserve ses lignes et son instantané fiscal.
- Ajoute la facturation récurrente native à partir des Services et abonnements CRM : mensuelle, trimestrielle, annuelle ou unique.
- Ajoute une double autorisation de sécurité pour la récurrence : activation globale dans Réglages et activation explicite sur chaque service.
- Ajoute un cron quotidien dédié qui ne génère qu’une occurrence identifiable par service/date, puis avance la prochaine échéance sans dépendre de WHMCS.
- L’envoi automatique du courriel de facture récurrente est optionnel et désactivé par défaut.
- Les anciens documents sans lignes structurées restent lisibles grâce à un repli compatible.

## 1.6.0 — 2026-08-24

- Fait de CRM AWM la source native des nouvelles factures, soldes et paiements.
- Retire l’appel automatique à `CreateInvoice` WHMCS lors de la création d’une facture CRM.
- Ajoute le statut client CRM autonome : Actif, Inactif ou Archivé.
- Ajoute la création de clients directement dans CRM AWM et l’édition de leurs coordonnées sans compte WHMCS.
- Protège les coordonnées modifiées dans CRM contre l’écrasement par un connecteur externe.
- Ajoute les contacts multiples par compte Alliance.
- Ajoute les champs personnalisés natifs du dossier client avec types texte, texte long, courriel, URL, nombre et date.
- Ajoute les rappels CRM assignables avec échéance, statut ouvert/en retard/terminé et action de clôture.
- Ajoute un registre natif de transactions créé lors de chaque paiement manuel.
- Renforce l’intégrité des paiements : si la transaction ne peut pas être créée, le solde et le statut de la facture sont restaurés.
- Valide les montants avant création d’une facture/soumission et bloque la double conversion d’une soumission.
- Limite les rappels automatiques de paiement aux factures natives CRM pour éviter les doubles relances avec un ancien système externe.
- Ajoute une première chronologie 360° dans le dossier client CRM.
- Renomme l’accès WHMCS en **Connecteurs / migration** et conserve les références externes pour la transition.
- Les factures importées WHMCS restent verrouillées sur leur source tant qu’elles ne sont pas migrées, afin d’éviter un double solde.
- Hub/Core peut consommer les factures CRM natives en priorité; aucune connexion WHMCS n’est nécessaire pour les afficher.
- Journalise les créations de factures natives, conversions de soumissions, paiements, changements de statut, champs personnalisés et rappels via Core lorsqu’il est disponible.


## 1.5.3 — 2026-08-24

- Retire le bandeau vert de règle client de la vue d’ensemble CRM.
- Route les confirmations CRM vers le loader AWM.
- Corrige `À recevoir` pour ignorer les statuts payée, annulée, remboursée et brouillon.
- Corrige `Facturé` afin d’exclure les factures annulées/remboursées/brouillons des KPI opérationnels.
- Conserve WHMCS comme source de vérité et la compatibilité des métas historiques.

## 1.5.2 — 2026-08-24

- Masque les clients supprimés localement et leurs identifiants WHMCS tombstonés des listes CRM.
- Conserve WHMCS comme source de vérité, sans relancer ni recréer un client explicitement supprimé dans AWM.
- Maintient le contexte CRM indépendant de CallTracker et la facturation Alliance en arrière-plan.

## 1.5.1 — 2026-08-24

- Les cartes et le tableau **Fiches clients** ouvrent maintenant le dossier directement dans `CRM AWM`, au lieu de la route historique CallTracker `callink-clients`.
- Le dossier client conserve donc l’en-tête, les permissions et la navigation CRM.
- Les modules AWM actifs sont présentés comme cartes/actions explicites; CallTracker ne s’ouvre que si l’administrateur clique sur **Ouvrir CallTracker**.
- WHMCS reste la source de vérité des coordonnées et de la facturation.
- Aucun identifiant client, service, facture, campagne ou méta historique n’est renommé.

---

## 1.4.1 — 2026-08-18

- L’application des services clients est déplacée vers Hub AWM → Services clients.
- L’ancien onglet CRM « Module offert aux clients » n’est plus affiché; son URL historique reste compatible et redirige fonctionnellement vers Hub.
- `_callink_crm_enabled` est synchronisé avec l’application du module CRM décidée dans Hub, sans suppression de données ni changement d’identifiant technique.

## 1.4.0 — 2026-08-18

- CRM AWM 1.4.0 adopte le shell visuel Core 4.5.0. Les onglets clients, services, soumissions, contrats, factures, soutien, WHMCS et réglages utilisent la même hiérarchie visuelle que CallTracker, sans modifier les données CRM/WHMCS.


## Sécurité 1.3.1 — 2026-08-17

- CRM AWM 1.3.1 délègue le chiffrement des secrets WooCommerce au coffre Core tout en conservant le déchiffrement des valeurs historiques.
# Historique — CRM AWM

## 1.3.0 — 2026-08-17

- Contrat de permissions Core AWM 1.0 appliqué aux pages et actions CRM.
- Consultation, modification, approbation et administration séparées.
- Interface de lecture seule sans création d’entité, import, paiement ni réglage de connexion.
- Import WHMCS autorisé avec CRM Approbation ou Core Approbation.
- Réglages WHMCS conservés sous Core Administrer.
- Activation arrêtée proprement avec Core antérieur à 4.3.0, sans modification de données.

## 1.2.0 — 2026-08-15

- CRM AWM séparé comme extension indépendante avec son propre onglet WordPress.
- Conservation du dossier technique, des données et des réglages historiques.

## 1.5.0 — 2026-08-24
- Création des factures WHMCS directement depuis CRM AWM.
- Synchronisation immédiate de l’identifiant, du statut, des taxes, du total et du solde dans la facture CRM.
- Option d’envoi de la facture par WHMCS et conservation du mode local pour les fiches non liées.

---

## README.md

## 1.6.29 - Correctif du fatal Pulse WP_User - 2026-09-12

- Le Pulse utilise les objets WP_User renvoyes par canonical_clients() et la methode PUBLIQUE canonical_client_is_active().
- Aucun acces tableau sur WP_User et aucun appel a la methode privee client_is_active().
- Compatibilite avec les profils tableaux explicitement types; un type inconnu reste inconnu, pas automatiquement inactif.
- Comptage en lecture seule, sans construire de profil pouvant creer un site_id. Inactif et archive ne sont pas renommes abusivement suspendus.
- Aucune migration du schema metier. Regression reproduite sur l'ancienne version puis testee avec la classe CRM reelle et des doubles WordPress.

## 1.6.28 — Pulse v2 Health / cycle client — 2026-09-12

- CRM expose un score/fraîcheur Health tout en restant l autorité du statut actif/inactif.
- Le nombre de clients suspendus reste contextuel et ne pénalise pas automatiquement le score technique.

## 1.6.27 — Pulse opérationnel transversal — 2026-09-12

- Expose au Core un pulse clients actifs / suspendus depuis le statut CRM canonique.
- Prépare Health/SLA à distinguer une suspension commerciale d une panne technique.

# CRM AWM 1.6.26

Les Connectors de la fiche Sites du client possèdent maintenant une destination directe par `site_id`, afin que Tech puisse envoyer le technicien au bon site principal ou secondaire sans ambiguïté.


> Version 1.6.25 : cycle Actif/Inactif traçable, motif/date optionnels et réactivation planifiée sans perte de Connector ni d’historique.

## 1.6.24 — statut client instantané sans rechargement

Le badge **Actif / Inactif** de la liste clients utilise maintenant une action AJAX. Le statut canonique CRM est modifié côté serveur avec le même nonce et le même événement inter-modules, mais la page n est plus rechargée : recherche, filtre, mode Fiches/Tableau et position de défilement sont conservés. Dans le filtre Actifs ou Inactifs, le client disparaît immédiatement de la vue lorsqu il ne correspond plus au filtre; dans Tous, seul le badge change. Le loader AWM suit la requête et affiche le résultat sans bandeau WordPress.

# CRM AWM 1.6.21 — site principal et Connectors par site
CRM AWM 1.6.22 simplifie la liaison des sites secondaires : une clé générée est présentée comme **Clé en attente**, avec un raccourci vers Hub Client. Le site n est considéré réellement connecté que lorsque le runtime Connector a terminé son appairage.


Le site principal est maintenant la référence officielle du client pour les couleurs/typographies et la destination Hub Client par défaut. Chaque site secondaire conserve son propre `site_id`, son propre Connector et ses actions Générer/Régénérer/Révoquer. Une action sur un site n'affecte pas les autres. Le thème sombre des cartes KPI de la fiche client est également corrigé.

# CRM AWM 1.6.19 — sites principal et secondaires

La fiche client multi-sites utilise maintenant une interface premium et responsive. Le **site principal** reste la source de vérité visuelle; les sites secondaires disposent d'un `site_type` canonique (landing page, sous-domaine, répertoire, staging, boutique, blog, portail client, campagne, microsite, etc.) tout en conservant un environnement technique compatible avec Tech AWM.

La fiche client canonique gère maintenant un **site principal** obligatoire et une liste extensible de **sites secondaires**. Le site principal reste la source de vérité visuelle (couleurs, typographies, styles et règles de marque) utilisée par les modules AWM. Chaque site secondaire reçoit un `site_id` persistant, son URL complète (sous-domaine ou répertoire), un libellé et un type d’environnement.

# CRM AWM 1.6.17 — blocs permanents de la fiche client

La fiche client canonique affiche maintenant en permanence les contrôles Hub Client/Connector et le choix des services, sans déplacer la propriété des données hors de CRM.

# CRM AWM 1.6.16 — source client canonique

CRM AWM est la source unique des données maîtres clients. Tous les modules de la Suite utilisent le même `client_id` et ne stockent que leurs données métier.

# CRM AWM 1.6.15 — protection des forfaits CallTracker

Le prix 10 $ + taxes est réservé aux nouveaux Funnels. Les forfaits et campagnes existants restent inchangés.

# CRM AWM 1.6.14 — gestion commerciale des Funnels CallTracker

CRM AWM gère désormais explicitement le service **Funnel CallTracker à 10 $/mois**. Le service est créé avant le numéro, reste en configuration sans facturation automatique, puis devient actif et récurrent seulement après attribution confirmée du numéro par CallTracker.

# CRM AWM 1.6.13 — UX responsive et couleurs des catégories

Le catalogue **Services et abonnements** est réorganisé pour une utilisation plus rapide sur ordinateur, tablette et mobile. Les définitions du catalogue s’affichent sous forme de fiches responsives plutôt que dans un tableau horizontal difficile à manipuler.

## Livré
- fiches responsives du catalogue avec catégorie, état, prix, cycle, taxes, utilisation et actions;
- formulaires Modifier / Appliquer / Supprimer sans largeur minimale qui déborde sur les petits écrans;
- registre des services attribués transformé automatiquement en fiches sous 1100 px;
- couleur personnalisable pour chaque catégorie;
- gestion centralisée des couleurs depuis **Couleurs des catégories**;
- choix de couleur directement lors de la création ou modification d’un service du catalogue;
- couleur reprise automatiquement sur tous les badges CRM de la même catégorie;
- contraste texte/fond calculé automatiquement pour conserver la lisibilité;
- progression intégrée pour les actions de service : Préparation → Enregistrement → Synchronisation → résultat;
- messages de résultat conservés dans le loader AWM après rechargement;
- journalisation Core des changements de couleurs.

La couleur d’une catégorie est purement visuelle : elle ne change jamais le prix, les taxes, le cycle, l’état, les factures ou l’application Hub.

---

# CRM AWM 1.6.11 — catégories de services et abonnements

Le catalogue général et chaque attribution cliente possèdent maintenant une catégorie commerciale modifiable. Alliance peut utiliser les catégories proposées ou écrire librement une nouvelle catégorie.

## Fonctions
- catégories françaises préconfigurées;
- catégorie personnalisée autorisée;
- filtre, recherche, tri et colonne Catégorie;
- catégorie transmise lors de l’application d’un service à un client;
- propagation facultative vers les attributions déjà reliées;
- catégorie visible dans les fiches clients, factures et soumissions;
- anciens services classés automatiquement sous **Sans catégorie**;
- aucun changement aux prix, cycles, taxes, dates, états ou historiques pendant la mise à niveau.

CRM reste propriétaire du catalogue commercial. Hub reste propriétaire de l’application au portail. Core sécurise et journalise. Soutien AWM reste séparé.

---

# CRM AWM 1.6.10 — catalogue autonome des services et abonnements

CRM AWM sépare maintenant clairement deux niveaux :

1. **Catalogue des services et abonnements** : la liste générale des services disponibles, même lorsqu’aucun client ne les utilise actuellement.
2. **Services et abonnements attribués aux clients** : les exemplaires propres à chaque client, avec leur prix, cycle, taxes, état et prochaine échéance.

## Catalogue général

- création d’un nouveau service ou abonnement sans choisir de client;
- amorçage automatique depuis les services historiques déjà enregistrés;
- recherche et filtre Actif / Archivé;
- modification du nom, de la description, du prix par défaut, du cycle et des taxes;
- option explicite pour propager ces valeurs aux services clients déjà reliés, sans toucher à leurs dates, états ou autorisations de facturation;
- application du service à un client;
- suppression du catalogue sans effacer les services déjà attribués ni leur historique.

## Registre des services clients

- affichage par défaut de tous les services attribués, appliqués au Hub ou non;
- modification complète de chaque attribution;
- actions Activer, Mettre en pause et Retirer;
- suppression vers une corbeille avec restauration;
- exclusion persistante d’un service WHMCS supprimé afin d’empêcher sa recréation lors d’une synchronisation ultérieure.

## Frontières

CRM possède le catalogue et les conditions commerciales. Hub possède l’application au portail client. Core protège les permissions, le journal et les exclusions de connecteurs. WHMCS reste optionnel. Soutien AWM demeure l’unique propriétaire du soutien opérationnel.

---

# CRM AWM 1.6.9 — services et abonnements appliqués modifiables

CRM AWM présente maintenant une vue complète des services et abonnements déjà appliqués aux clients. La liste permet de rechercher, filtrer et modifier les paramètres commerciaux sans dépendre de WHMCS.

## Fonctions principales

- liste par défaut des services appliqués au Hub client;
- filtres par client, état et application;
- fiche client avec services appliqués en premier;
- modification du nom, de la description, du montant, du cycle, de la prochaine date, des taxes et de la facturation automatique;
- actions Activer, Mettre en pause et Retirer tout en conservant l’historique;
- cycles mensuel, trimestriel, semestriel, annuel, biennal, triennal, unique et gratuit;
- sélection des services appliqués directement dans une nouvelle facture ou soumission;
- protection des modifications locales pour les services historiquement liés à WHMCS;
- accès direct à Hub AWM pour gérer l’application au portail client.

## Frontières

CRM possède la fiche commerciale du service. Hub possède l’application au portail. Core sécurise les permissions et le journal. WHMCS reste optionnel. Soutien AWM n’est jamais reproduit dans CRM.

---

# CRM AWM 1.6.8 — titres français et activation rapide des courriels

CRM AWM affiche maintenant les titres de sa bibliothèque de courriels en français. Le nom WHMCS d’origine reste visible comme référence technique lorsque pertinent. Le statut **Activé / Désactivé** est une vraie commande : un administrateur autorisé peut cliquer directement dessus pour basculer l’état du modèle, sans devoir ouvrir l’éditeur.

- 86 modèles préconfigurés avec titres visibles en français;
- conservation des sujets et corps déjà personnalisés;
- activation/désactivation rapide depuis la liste;
- état synchronisé avec le formulaire détaillé;
- journalisation de chaque changement d’état;
- aucun changement aux communications Soutien AWM.

---

# CRM AWM 1.6.7 — modèles courriel préconfigurés et réparés

CRM AWM 1.6.7 corrige le registre qui empêchait WordPress de créer les modèles. À l’installation ou à la mise à niveau, les **86 modèles AWM** sont maintenant créés automatiquement, visibles dans **CRM AWM → Courriels** et modifiables individuellement. Aucun import WHMCS n’est requis pour les afficher.

## Comportement

- catalogue préconfiguré dès la mise à niveau;
- sujet et corps éditables pour chaque modèle;
- activation/désactivation par modèle;
- restauration de la version source AWM;
- réparation automatique des modèles manquants;
- conservation stricte des textes déjà modifiés localement;
- migration des éventuelles entrées héritées de l’ancien registre;
- import WHMCS toujours facultatif et limité au rapprochement des sujets disponibles.

## Cause corrigée

WordPress limite les identifiants de types de contenu à 20 caractères. L’ancien identifiant interne des modèles en comptait 22; WordPress refusait donc silencieusement leur création et l’écran affichait `0`. Le nouveau registre utilise un identifiant valide et le catalogue est amorcé automatiquement.

---

# CRM AWM 1.6.6 — bibliothèque complète de courriels AWM

CRM AWM 1.6.6 fournit une bibliothèque locale complète et modifiable inspirée des familles de modèles actuellement utilisées dans WHMCS Alliance. Elle reste disponible sans WHMCS et permet de réécrire les sujets et les corps directement dans CRM. Les communications de soutien sont volontairement absentes : Soutien AWM demeure le seul module propriétaire des tickets et conversations.

## Livré

- catalogue local de 86 modèles couvrant général/commercial, utilisateurs, invitations, facturation, services, domaines, administration, notifications et affiliation;
- modèles personnalisés Alliance **Soumission** et **Soumission Orange** ajoutés comme références modifiables;
- recherche, filtre par catégorie, regroupement, statut actif/désactivé, propriétaire AWM et état Branché/Référence;
- modèles opérationnels reliés aux événements CRM existants : facture, trois relances, paiement, avoir, remboursement, soumission et renouvellement;
- import WHMCS optionnel qui rapproche les sujets et conserve le corps lorsqu’il est fourni, sans écraser une modification locale;
- bibliothèque utilisable même si l’import retourne HTTP 403, avec lien direct vers la configuration du connecteur;
- navigation CRM harmonisée dans le shell Core et suppression de la navigation dupliquée;
- ancien endpoint de création de ticket CRM désactivé; aucun nouveau ticket n’est enregistré dans CRM.

---

# CRM AWM 1.6.5 — services facturables et centre de courriels

CRM AWM 1.6.5 poursuit l’autonomie du CRM sans WHMCS et relie directement la facturation aux services/abonnements du client. Le soutien opérationnel demeure entièrement dans Soutien AWM.

## Services et abonnements

- ajout d’un service ou abonnement directement dans la fiche client;
- actions **Activer**, **Mettre en pause** et **Retirer** avec conservation de l’historique;
- retrait d’un service = arrêt de sa facturation automatique;
- sélection des services du client lors de la création d’une facture ou d’une soumission;
- ajout d’un service comme ligne structurée, avec montant et taxes du service;
- lignes manuelles toujours permises;
- les factures natives conservent la série `28102` (`281020001`, `281020002`, ...).

## Onglet Courriels

CRM possède maintenant son propre registre de modèles de courriels. Alliance peut voir, activer/désactiver et réécrire le sujet et le contenu de chaque modèle.

Modèles AWM opérationnels livrés :
- nouvelle facture;
- premier, deuxième et dernier rappel de facture;
- confirmation de paiement;
- avoir appliqué;
- remboursement enregistré;
- nouvelle soumission;
- renouvellement de service.

Si le connecteur WHMCS est configuré, **Importer / actualiser depuis WHMCS** copie en lecture seule son catalogue général, produit, domaine, facture et affiliation dans CRM. Les modifications sont ensuite locales à CRM et ne sont jamais réécrites dans WHMCS. L’API officielle `GetEmailTemplates` garantit le catalogue et les sujets; si une version WHMCS ne retourne pas le corps d’un modèle, CRM conserve son corps AWM lorsqu’il existe ou laisse le contenu modifiable à compléter.

Les modèles de type support/ticket sont exclus de CRM : **Soutien AWM** reste l’unique module métier de soutien.

## Variables principales

`{{business_name}}`, `{{client_name}}`, `{{client_firstname}}`, `{{invoice_number}}`, `{{invoice_total}}`, `{{invoice_balance}}`, `{{due_date}}`, `{{issue_date}}`, `{{days_overdue}}`, `{{invoice_url}}`, `{{payment_instructions}}`, `{{invoice_lines}}`.

## Architecture

- **CRM AWM** : clients, contacts, services/abonnements, documents commerciaux et finances;
- **Hub AWM** : application et présentation des services clients;
- **Core AWM** : sécurité, permissions, API et connecteurs;
- **Soutien AWM** : tickets, conversations, réanalyses et opérations de soutien;
- **WHMCS** : connecteur optionnel de migration ou de lecture historique seulement.


---

## ROADMAP.md

# Priorite de stabilisation - Suite 4.5.232

**Livraison locale candidate; non deployee.** Les evolutions fonctionnelles sont en pause jusqu'au retablissement et a la validation des sauvegardes.

## A valider avant reprise
- Installation du correctif d'amorcage, sauvegarde hebergeur et recuperation de wp-admin.
- Vrai test MySQL/MariaDB dans une base isolee; recette WordPress/Vault sur preproduction sans emails/paiements/webhooks sortants.
- Verification de la fenetre de maintenance, des cron externes, du quota, de la copie hors serveur et de la conservation des cles.

## Prochaines etapes, non livrees
- Contrat Recovery propre a chaque client_id + site_id + instance_uuid, sans reactivation implicite de flotte.
- Fournisseurs de snapshots hebergeur pour les installations non standard et bases partagees; aucune restauration partielle presentee comme complete.
- Test automatise de restauration WordPress complete sur preproduction, puis retention/offsite et tableau d'historique enrichi.
- Reprise du roadmap Health seulement apres validation de ces garde-fous.

## 1.6.29 - Correctif du fatal Pulse WP_User - 2026-09-12

- Le Pulse utilise les objets WP_User renvoyes par canonical_clients() et la methode PUBLIQUE canonical_client_is_active().
- Aucun acces tableau sur WP_User et aucun appel a la methode privee client_is_active().
- Compatibilite avec les profils tableaux explicitement types; un type inconnu reste inconnu, pas automatiquement inactif.
- Comptage en lecture seule, sans construire de profil pouvant creer un site_id. Inactif et archive ne sont pas renommes abusivement suspendus.
- Aucune migration du schema metier. Regression reproduite sur l'ancienne version puis testee avec la classe CRM reelle et des doubles WordPress.

# Awm Crm Alliance 1.6.28 — Pulse v2 Health / cycle client

## Livré
- CRM expose un score/fraîcheur Health tout en restant l autorité du statut actif/inactif.
- Le nombre de clients suspendus reste contextuel et ne pénalise pas automatiquement le score technique.

## Prochain lot accéléré
- Objectifs client, SLA commerciaux et signaux de réactivation pour Health sans inventer d engagement contractuel.

# CRM AWM 1.6.27 — Pulse opérationnel transversal

## Livré
- Expose au Core un pulse clients actifs / suspendus depuis le statut CRM canonique.
- Prépare Health/SLA à distinguer une suspension commerciale d une panne technique.

## Prochain lot accéléré
- Objectifs SLA attachés aux services/contrats, sensibles aux périodes de suspension.
- Vue santé commerciale : abonnements, échéances et relances sans créer de statut concurrent.

# CRM AWM 1.6.26 — navigation Connector exacte

- [x] Ajouter une ancre stable sur chaque Connector principal/secondaire.
- [x] Mettre visuellement en évidence le Connector ciblé depuis Tech.


**Livré :** motif et date de réactivation optionnels dans la fiche, réactivation automatique, historique append-only des périodes de suspension et API canonique pour Health/SLA. Le clic rapide de la liste reste inchangé.

**Maintenant :** valider une désactivation avec motif, une réactivation manuelle et un test de date planifiée sur un client de test.

**Prochaines étapes :** exploiter les périodes de suspension dans Health et, uniquement avec une règle non ambiguë, rattacher des objectifs SLA aux services/contrats CRM.

# CRM AWM 1.6.24 — bascule Actif/Inactif sans perdre le contexte

**Livré :** la bascule du statut dans la liste clients se fait sans rechargement complet. La recherche, le filtre, le mode d affichage et le scroll restent en place; le loader AWM confirme l opération.

**Maintenant :** valider sur un client réel en milieu de liste, en vues Fiches et Tableau, puis vérifier Actif → Inactif → Actif sous les filtres Actifs, Inactifs et Tous.

**Prochaines étapes :** ajouter au besoin un motif et une date planifiée d inactivité, toujours sans créer de second statut ni supprimer l historique.

# CRM AWM 1.6.23 — statut client opérationnel canonique

**Livré :** le badge Actif/Inactif est cliquable directement dans la liste; CRM publie le changement de statut à la Suite et conserve intégralement la fiche et son historique.

**Maintenant :** valider sur un client réel Actif → Inactif → Actif et confirmer la disparition/réapparition dans Tech, Hub, Stats, Studio et CallTracker sans recréer le Connector.

**Prochaines étapes :** ajouter au besoin un motif de désactivation et une date planifiée de réactivation, sans créer un second système de statut.

# CRM AWM 1.6.22 — liaison secondaire guidée

- Distinguer clairement site enregistré, clé en attente et Connector runtime connecté.
- Donner au stagiaire un raccourci direct vers Hub Client pour terminer le pairing.
- Ne considérer un site comme cible distante qu une fois `runtime_authorized`.

# CRM AWM 1.6.21 — site principal canonique et Connectors isolés

**Livré :** correction du thème sombre dans les KPI de fiche client; site principal utilisé par défaut pour l'identité visuelle et Hub Client; Connectors générés/régénérés/révoqués indépendamment par `site_id`; promotion d'un site synchronisée avec la référence Hub/design.

**Maintenant :** valider sur un client multi-sites la connexion du site principal et d'au moins un site secondaire, puis régénérer la clé secondaire pour confirmer que le principal reste connecté.

**Prochaines étapes :** permettre éventuellement à un expert de définir explicitement une destination Hub différente du site principal, tout en gardant le site principal comme valeur recommandée pour un stagiaire.

# CRM AWM 1.6.19 — fiche client multi-sites premium

## Livré
- UI premium responsive pour **Site principal** et **Sites secondaires**.
- Actions directes Ajouter, Promouvoir et Supprimer sans radio visuellement envahissante.
- `site_type` canonique avec types Production, Landing page, Sous-domaine, Répertoire, Staging, Développement, Boutique, Blog, Portail client, Campagne, Microsite, Réservation, Site multilingue, Intranet, Extranet et Autre.
- Migration compatible des anciennes valeurs `environment`.
- Site principal toujours utilisé comme source officielle du design.

## Maintenant
- Valider la fiche sur desktop, tablette et mobile avec plusieurs sites secondaires.
- Confirmer promotion d'un secondaire et conservation des `site_id`.

## Prochaines étapes
- Associer automatiquement chaque runtime Hub Client / Tech au `site_id` précis.
- Afficher connexion, santé et dernière communication directement dans chaque ligne de site.

## Futur
- Vue réseau complète par client avec filtres par type de site.
- Exceptions de design explicites par secondaire tout en gardant le principal comme référence par défaut.