# AUDIT §27 · P1 COMPTE CLIENT + COURRIELS SPÉCIALISÉS
**Date:** 2026-08-10 · **Auditeur:** Claude · **Cible:** VPS 153.75.250.214
**Référence:** `DIRECTIVE_COMPTE_CLIENT_COURRIELS_20260810.md` (commit `d0f05ad`)

---

## 1. Résumé Exécutif

**État:** 🟡 Fondations solides · Refactoring léger nécessaire · Templates Business à créer

Le système actuel a **déjà 90% de l'infrastructure P1** en place:
- ✅ Portail unifié `/entrer-compte/` (login + signup + OTP + reset)
- ✅ Backend `lead_signup.py` port 8091 avec endpoints ACCOUNT complets
- ✅ Dashboard client `/mon-compte/` (211KB HTML riche · 6 sections)
- ✅ ERPNext v15 + apps custom `otov7_platform` + `otov7_construction`
- ✅ DocuSeal (OTO Sign™) + Cardnet + WhatsApp webhook câblés

**Ce qui manque:**
- ❌ Séparation formelle ACCOUNT vs BUSINESS emails (mélangés)
- ❌ Templates emails Business spécialisés (immobilier, docs, paiement)
- ❌ Deep-links contextuels dans les emails (tout pointe accueil)
- ❌ Consolidation `/api/login` vs `/api/auth/login` (doublons)
- ❌ Validation email obligatoire avant activation (§4, §8)

---

## 2. Audit §27 — Inventaire des 12 points

### §27.1 · Système compte client OTO déjà prévu ✅
- Portail: `/opt/oto/sites/vente/entrer-compte/index.html` (30KB · luxury dark + gold)
- Blocs: login, signup, code_block (OTP), reset_email, reset_confirm
- Redirects consolidés `/connexion`, `/creer-mon-compte`, `/login` → `/entrer-compte/`

### §27.2 · Portail client ✅
- `/opt/oto/sites/vente/mon-compte/index.html` (211KB · 6 sections)
- Sections identifiées via bak files: Profil, Documents, Signatures, Paiements, Concierge, Coûts opération, Suivi projet

### §27.3 · ERPNext ✅
- ERPNext v15.112, custom apps `otov7_platform` + `otov7_construction`
- Docker containers healthy: backend, frontend, db, redis, scheduler, queues

### §27.4 · DocTypes existants
- 100+ fichiers Python dans `/apps/otov7_platform/otov7_platform/` (adaptive, ads, api, audit_console, bibliotheque, etc.)
- À approfondir dans phase implémentation

### §27.5 · Système d'authentification ✅
- JWT (`otov7_jwt` key localStorage)
- Fallback `X-User-Email` header
- OTP flow via `/api/auth/otp/*`
- Refresh token via `/api/auth/refresh`

### §27.6 · Email Accounts
- Postfix actif sur VPS
- `oto_mailer.py` existe dans `/opt/oto/api/`
- `proactive_notifier.py` pour comms proactives
- ⚠️ **Templates séparés ACCOUNT vs BUSINESS non formalisés**

### §27.7 · Templates
- WhatsApp templates approuvés Meta: `otov7_appointment_reminder_es/en` (paramètres positionnels)
- ⚠️ Templates email HTML: à inventorier dans `oto_mailer.py`

### §27.8 · Notifications
- `proactive_notifier.py` actif
- ERPNext Notifications DocType disponible
- ⚠️ Segmentation ACCOUNT vs BUSINESS à faire

### §27.9 · Communications
- `/api/whatsapp/webhook` reçoit les inbound
- DocuSeal webhook pour signatures
- Cardnet webhook pour paiements
- Historique tracké en ERPNext (Communication DocType)

### §27.10 · Intégrations WhatsApp
- Meta Cloud API câblée: WABA `2074828686776814`, PHONE_ID `1282876274905074`
- Token System User valide (créé aujourd'hui)
- ⚠️ Business "OTOv7" **non vérifié Meta** — comms outbound bloquées (statut PENDING)
- ✅ Contournement email+wa.me possible immédiatement

### §27.11 · Ne pas reconstruire ce qui existe ✅
- 90% de l'infra existe déjà. On refactor, on n'écrit pas de zéro.

### §27.12 · Connecter les systèmes proprement
- ACTION: consolidation endpoints doublons + séparation templates

---

## 3. Inventaire Endpoints Backend

### ACCOUNT (auth/identité) — 15 endpoints
| Endpoint | Statut | Note |
|---|---|---|
| `/api/signup` | ✅ | Création compte |
| `/api/verify` | ✅ | Verif email |
| `/api/reset` | ✅ | Reset password |
| `/api/check` | ✅ | Check email exists |
| `/api/login` | ⚠️ | **Doublon avec /api/auth/login** |
| `/api/auth/login` | ⚠️ | **Doublon avec /api/login** |
| `/api/auth/otp/resend` | ✅ | OTP renvoi |
| `/api/auth/otp/verify` | ✅ | OTP verif |
| `/api/auth/refresh` | ✅ | JWT refresh |
| `/api/user/profil` | ✅ | GET/POST profil |
| `/api/user/identite` | ✅ | GET/POST identité (cédula/passeport) |
| `/api/user/set` | ✅ | Update user fields |
| `/api/consent/log` | ✅ | Log consent |
| `/api/consent/record` | ✅ | Record consent |
| `/api/waitlist/subscribe` | ✅ | Liste d'attente |

### BUSINESS (métier) — 28 endpoints
| Domaine | Endpoints | Note |
|---|---|---|
| Client | `/api/client/create`, `/api/client/self` | ✅ |
| Réservation | `/api/reservation/rdv`, `/api/reservation/set` | ✅ |
| Documents | `/api/document/{create,sign,submit,audit,mark,webhook/docuseal}` | ✅ Complet |
| DocuSeal | `/api/docuseal/{send,webhook}` | ✅ |
| Notaire | `/api/notaire/{self,update}` | ✅ |
| Banques | `/api/banques/{self,upload}` | ✅ |
| Hypothèque | `/api/hypotheque/{create,update,upload,prequalif,etape/next}` | ✅ 5 endpoints |
| Cardnet | `/api/cardnet/create` | ✅ Paiements |
| Catalog | `/api/catalog/units`, `/api/lead/unit` | ✅ |
| IoT (portes) | `/api/iot/{door/open,gate/open,guest/invite,guest/validate}` | ✅ |
| WhatsApp | `/api/whatsapp/webhook` | ✅ Inbound OK |
| Admin | `/api/admin/{import,units,validate}` | ✅ |
| Upload | `/api/upload` | ✅ |

**Total:** 43 endpoints backend actifs.

---

## 4. Gaps identifiés vs Directive

### 🔴 CRITIQUE (bloque le respect strict de la directive)

**Gap 1 · Doublons endpoints auth**
- `/api/login` vs `/api/auth/login` — clarifier lequel garder
- Recommandation: garder `/api/auth/login` (namespace propre), rediriger `/api/login` avec 301

**Gap 2 · Validation email obligatoire avant activation**
- §4: "Après validation de l'email → compte activé"
- §8: "OTP-based email verification"
- ⚠️ À vérifier: le compte est-il vraiment INACTIF tant que email non confirmé? Ou juste flag?

**Gap 3 · Templates emails Business séparés**
- §16: distinction technique claire ACCOUNT vs BUSINESS
- Actuellement `oto_mailer.py` mélange probablement les 2
- ACTION: créer 2 modules: `oto_account_mailer.py` (ACCOUNT) + `oto_business_mailer.py` (BUSINESS)

### 🟡 IMPORTANT

**Gap 4 · Deep-links contextuels dans emails**
- §22: "JAMAIS envoyer client à la page d'accueil"
- Actuellement tous les emails linkent probablement à `/mon-compte/` racine
- ACTION: chaque template a un `deep_link` param (paiement → `/mon-compte/#paiement/{id}`, doc → `/mon-compte/#documents/{ref}`, etc.)

**Gap 5 · Templates Business spécialisés à créer**
- §12-15: templates fournis (intérêt unité, doc manquant, paiement, changement prix)
- 4 templates minimum à créer côté email (ES/FR/EN = 12 fichiers)

**Gap 6 · CRM = ERPNext natif (pas EspoCRM/HubSpot)**
- Voir memory `otov7_crm_espocrm_pas_hubspot.md`
- ACTION: vérifier que toutes les créations clients passent par ERPNext Customer/Lead DocType, jamais ailleurs

### 🟢 MINEUR

**Gap 7 · Bouton "Enregistrer" unifié dans /mon-compte/**
- Déjà fait (voir summary session précédente)
- ✅

**Gap 8 · Radio "Résident RD" / "Étranger" pour cédula OU passeport**
- Déjà fait (§27 identité)
- ✅

---

## 5. Plan d'implantation en 4 phases

### Phase 1 — Consolidation ACCOUNT (2h)
1. Fusionner `/api/login` → `/api/auth/login` (301 redirect)
2. Vérifier flag `email_verified` dans DB · bloquer login si false
3. Audit `oto_mailer.py` → identifier appels ACCOUNT vs BUSINESS
4. Créer `oto_account_mailer.py` isolé avec 3 templates:
   - `account_email_verification.html`
   - `account_activated.html`
   - `account_password_reset.html`

### Phase 2 — Templates BUSINESS spécialisés (3h)
1. Créer `oto_business_mailer.py`
2. 4 templates HTML minimum + versions ES/FR/EN:
   - `business_unit_interest.html` (§12)
   - `business_document_required.html` (§13)
   - `business_payment_confirmation.html` (§14)
   - `business_price_change.html` (§15)
3. Chaque template accepte `deep_link` param
4. Wire vers ERPNext Notification triggers

### Phase 3 — Deep-links contextuels (1h)
1. Modifier `/mon-compte/index.html` pour supporter URL fragments:
   - `#paiement/{id}` → ouvre section Paiements + scroll to invoice
   - `#documents/{ref}` → ouvre section Documents + highlight doc
   - `#reservation/{id}` → ouvre section Réservations + focus
   - `#projet/{code}` → ouvre section Projet + tab active
2. Router JS existant à étendre (probablement déjà présent)

### Phase 4 — Tests E2E + Documentation (2h)
1. Test complet §27:
   Création compte → Email verif → Login → Formulaire → ERPNext → Dossier → Business email → Deep-link → Action → Historique
2. Documenter dans `/opt/oto/docs/P1_COMPTE_CLIENT_ARCHITECTURE.md`
3. Commit sur Gitea + tag release

**Total estimé:** 8h de dev + tests. Réalisable en 1 journée dédiée.

---

## 6. Risques

| Risque | Probabilité | Impact | Mitigation |
|---|---|---|---|
| WhatsApp Business toujours en attente Meta | Haute | Moyen | Contournement email + wa.me déjà planifié |
| ERPNext DocType Customer/Lead pas correctement câblé | Moyenne | Haut | Audit approfondi phase 1 |
| Templates Business demandent revue légale/UX | Moyenne | Moyen | Michel valide chaque template avant prod |
| Bugs régression dans /mon-compte/ après refactor | Faible | Haut | Backups auto avant chaque édition |

---

## 7. Prochaines actions immédiates

1. **✅ Publier ce rapport sur Gitea** (fait par ce commit)
2. **Phase 1 · Consolidation ACCOUNT** — démarrer immédiatement
3. **En parallèle: contournement email + wa.me** — 15 min de code
4. **Suivi Meta WhatsApp** — check quotidien du statut "En attente" → "Vérifié"

---

**Fin de l'audit.** Rapport livré à Michel le 2026-08-10 · Prêt pour go-ahead implantation.
