# 💰 DIRECTIVE · Module Financement Bancaire COMPLET · 2026-08-03

## Exigence Michel (2026-08-03 · 05h AM voyage)

Le module Financement Bancaire actuel est trop simpliste. Michel demande un module COMPLET pour un vrai parcours bancaire immobilier RD.

## Composants OBLIGATOIRES

### 1. Section « Information de l'achat » (auto-remplie)
Résumé de la réservation en cours ·
- Projet · code + nom (P01 Coralis, P03 Nakua, etc.)
- Unité · référence + typologie + surface + orientation + étage + prix USD
- Plan de paiement · 20% résident / 30% étranger + solde bancable
- Apport déjà versé · dépôt de réservation + éventuels versements
- Solde à financer · calcul auto (prix - apport - autres versements)
- Statut Fideicomiso Ley 189-11 · constitué OUI/NON
- Statut CONFOTUR · exonération Ley 158-01 confirmée OUI/NON

### 2. Section « Choix de la banque partenaire »
Liste des banques dominicaines partenaires OTOV7 avec profils ·
- **Banreservas** · banque d'État · taux préférentiels résidents · durée jusqu'à 25 ans · LTV 80%
- **Banco Popular Dominicano** · réseau large · rapide · CONFOTUR-friendly · LTV 75-85%
- **BHD León** · haut de gamme · étrangers acceptés · biling · durée 30 ans
- **Banco Santa Cruz** · taux compétitifs · pré-qualif rapide
- **Scotiabank Republica Dominicana** · étrangers spécialistes · devise USD acceptée · LTV 70%
- **López de Haro** · niche haut de gamme
- Autre · à ajouter selon demande spécifique

Chaque banque doit afficher · taux min-max %, LTV%, durée max ans, spécialités (résidents / étrangers / CONFOTUR / devises acceptées), documents typiquement requis.

Le client choisit UNE banque en priorité (radio button). Possibilité d'ajouter des banques additionnelles en parallèle (multi-dossiers).

### 3. Section « Formulaires banque pré-remplis »
Pour chaque banque, générer automatiquement les formulaires officiels PDF de la banque, pré-remplis avec ·
- Données personnelles (nom, prénom, cédula/passeport, téléphone, courriel, adresse, statut marital, dépendants)
- Données financières client (revenu mensuel, autres crédits, épargne)
- Données achat (projet, unité, prix, apport)
- Données WAG vendeur (RNC, adresse, coordonnées)

**Formulaires typiques par banque** (à obtenir en vrai de chaque banque via démarche relationship manager)  ·
- Solicitud de Préstamo Hipotecario
- Autorización de investigación creditica (DataCrédito)
- Declaración jurada de patrimonio
- Autorización débito automático quote-part
- Certificación de origen de fondos (pour étrangers)

Le client télécharge le PDF pré-rempli, le VÉRIFIE, le SIGNE, le RE-UPLOAD via l'interface. Un journal audit trace chaque signature.

### 4. Section « Exigences bancaires par banque »
Liste explicite des documents que la banque exige, cochée automatiquement au fur et à mesure des uploads.

Documents typiques (varient selon banque) ·
- **Client** · Cédula ou Passeport (2 côtés), Preuve d'adresse récente (<3 mois), 3 dernières fiches de paye ou déclarations ITBIS/DGII, États bancaires 6 derniers mois, Lettre employeur ou attestation profession libérale, Certification de solvabilité, Certification DataCrédito (délivré par banque)
- **Immobilier** · Promesa Irrévocable signée notariée, Fideicomiso Inmobiliario constitué, Titre définitif ou Certificado de Título (si disponible)
- **Étrangers uniquement** · Passeport valide 2 côtés, Visa/résidence si applicable, Lettre origine des fonds notariée (FinCEN GTO), Références bancaires internationales, Références commerciales/personnelles

Chaque item · statut (Non déposé / Déposé / Validé WAG / Envoyé banque), bouton Upload, prévisualisation, remplacement possible.

### 5. Section « Autorisations à signer »
Documents que le client doit signer AVANT que WAG envoie le dossier à la banque ·
- Autorisation de partage de données personnelles avec la banque (RGPD/Ley 172-13)
- Autorisation d'investigation DataCrédito
- Mandat WAG comme intermédiaire de financement
- Acknowledgment · risques de refus bancaire + politique annulation

Signature électronique OTO Sign™ (DocuSeal) sur chaque autorisation, horodatée + IP + hash.

### 6. Mention CRITIQUE affichée en permanence

En haut du module Financement Bancaire, bandeau rouge/or persistant ·

> ⚠ **AUCUN DOCUMENT N'EST TRANSMIS À LA BANQUE tant que ·**
> · **TOUS les documents exigés** ne sont pas déposés dans le portail
> · **TOUTES les autorisations** ne sont pas signées électroniquement
> · **Validation manuelle WAG** confirmée par le conseiller référent
>
> Le bouton « Envoyer à la banque » reste **désactivé** tant que ces 3 conditions ne sont pas remplies. Statut affiché en temps réel.

### 7. Statut envoi banque temps réel
Une fois toutes conditions remplies, le bouton « Envoyer à la banque » s'active. Après envoi ·
- Timestamp exact de l'envoi
- Confirmation email + WhatsApp au client
- Numéro de dossier banque attribué
- Timeline switch vers workflow suivi banque (Prequalifié → Dossier soumis → Analyse crédit → Offre reçue → Contrat signé → Décaissement)

### 8. Journal d'activité complet
Historique horodaté visible par le client ·
- Chaque document déposé (date + heure + IP)
- Chaque autorisation signée (date + heure + hash signature)
- Chaque interaction WAG (validation, remarque, demande complément)
- Chaque étape workflow avancée

## Architecture technique demandée

### Backend endpoints à créer/enrichir
- `GET /api/hypotheque/banques` (existe · enrichir avec profils complets)
- `POST /api/hypotheque/dossier` · créer un nouveau dossier
- `GET /api/hypotheque/dossier/{id}` · état complet du dossier
- `POST /api/hypotheque/dossier/{id}/document` · upload document exigé
- `POST /api/hypotheque/dossier/{id}/authorization` · signer autorisation
- `GET /api/hypotheque/dossier/{id}/form/{bank}/{form_type}.pdf` · télécharger formulaire pré-rempli
- `POST /api/hypotheque/dossier/{id}/submit` · envoyer à la banque (gate check TOUS docs + autorisations)
- `GET /api/hypotheque/dossier/{id}/journal` · historique activité

### Frontend refonte renderHypotheque
Layout accordéon 6 sections · Info achat / Choix banque / Formulaires / Exigences / Autorisations / Envoi
Bandeau alerte persistant en haut
Timeline visible en bas
Journal cliquable expandable

### Backend gate check
Fonction `can_submit_dossier(dossier_id) -> (bool, list_of_reasons)` qui vérifie ·
1. Tous les documents `is_required=True` de la banque choisie sont statut `Validé WAG` ou `Envoyé banque`
2. Toutes les autorisations sont signées (`signature_date NOT NULL`)
3. Un conseiller WAG a validé (`wag_validated_by NOT NULL`)

Si UNE de ces conditions manque, `submit_to_bank()` retourne 403 avec liste raisons détaillées.

## Estimation effort

- **Backend** · 5-8 endpoints + gate check + génération PDF formulaires · **3-5 jours**
- **Frontend** · refonte renderHypotheque 6 sections + upload UI + bandeau alerte + journal · **2-3 jours**
- **Templates PDF** · récupérer les vrais formulaires officiels de 6 banques (démarche relationship management) · **1-2 semaines**
- **Tests** · flow complet client + gate check + envoi simulé · **1-2 jours**

**Total · 3 semaines pour version complète production**

## Livrable MVP dès ce soir (agents Claude Code DTP)

**Phase 1 (P0 · MVP) · 4-6h autonome**
- Refonte renderHypotheque avec les 6 sections + bandeau alerte
- Bouton envoi désactivé + affichage raisons
- Upload documents basique (endpoint existant `/api/hypotheque/upload-doc`)
- Formulaires PDF templates génériques (placeholder texte pré-rempli)

**Phase 2 · vrais formulaires banques** · attend démarche externes Michel avec relationship managers

## Commit régulier

Chaque livraison majeure · commit Gitea `[Sprint 5 · Financement] description`. Michel voit progression au retour.

---

## AMENDEMENT · Michel 2026-08-03 · Dépôt initial obligatoire

### 4ème condition CRITIQUE ajoutée au gate check

Avant que le module Financement Bancaire soit activé et que les démarches avec la banque puissent commencer, **le dépôt initial minimum de l'unité doit être COMPLÈTEMENT versé** ·

- **Résident RD** · 20% du prix total de l'unité
- **Étranger** · 30% du prix total de l'unité

Cette exigence est également une **exigence des banques dominicaines** · elles n'analysent aucun dossier sans preuve d'apport initial complet. Ley 189-11 (Fideicomiso Inmobiliario) valide.

### Gate check étendu · 4 conditions

Fonction `can_submit_dossier(dossier_id) -> (bool, list_of_reasons)` doit vérifier ·
1. **Dépôt initial complet** · `sum(paiements.montant_verse_usd) >= apport_requis_usd` où apport_requis = prix × (0.20 si résident, 0.30 si étranger)
2. Tous les documents `is_required=True` de la banque choisie sont `Validé WAG` ou `Envoyé banque`
3. Toutes les autorisations sont signées (`signature_date NOT NULL`)
4. Un conseiller WAG a validé (`wag_validated_by NOT NULL`)

### Bandeau alerte mise à jour

En haut du module Financement Bancaire, bandeau rouge/or persistant ·

> ⚠ **AUCUN DOCUMENT N'EST TRANSMIS À LA BANQUE tant que ·**
> · **Dépôt initial complet** (20% résident RD · 30% étranger) versé et vérifié
> · **TOUS les documents exigés** ne sont pas déposés dans le portail
> · **TOUTES les autorisations** ne sont pas signées électroniquement
> · **Validation manuelle WAG** confirmée par le conseiller référent
>
> Le bouton « Envoyer à la banque » reste **désactivé** tant que ces 4 conditions ne sont pas remplies. Progression affichée en temps réel avec barre 0-100% par condition.

### Section « Statut apport initial » ajoutée
Nouvelle section au top du module ·
- Prix total unité · X USD
- Statut résidence · Résident RD / Étranger
- Apport requis (20% ou 30%) · Y USD
- Apport versé · Z USD (calcul depuis USER_DATA.paiements)
- **Solde apport restant · W USD**
- Barre de progression apport 0-100%
- Bouton « Compléter le dépôt » (redirige vers section Paiements avec pré-config Cardnet montant restant)

Si apport non complet · les autres sections (Choix banque / Formulaires / Exigences / Autorisations / Envoi) sont **grisées et non-cliquables**. Message · « Complétez d'abord votre apport initial pour démarrer les démarches bancaires ».

### Endpoint backend

- `GET /api/hypotheque/dossier/{id}/gate-status` retourne ·
```json
{
  "can_submit": false,
  "conditions": {
    "apport_initial_complet": {"ok": false, "required": 29000, "paid": 15000, "remaining": 14000, "percent": 51.7},
    "documents_exiges": {"ok": false, "total": 8, "deposited": 5, "validated": 3},
    "autorisations_signees": {"ok": false, "total": 4, "signed": 2},
    "validation_wag": {"ok": false, "validated_by": null}
  }
}
```

Frontend consomme cet endpoint pour afficher progression réelle et griser boutons.

---

## PRÉCISION · Michel 2026-08-03 · Validation par OTO Auditeur Finances (agent IA)

### La 4ème condition N'EST PAS un humain WAG

Contrairement à la version précédente qui mentionnait « conseiller WAG », la validation est faite **directement par OTO Auditeur Finances**, un agent IA autonome. Aucun humain WAG n'est requis dans le cycle · c'est de l'audit automatique par agent.

### Rôle OTO Auditeur Finances

Agent Claude Code (module OTOIA capability `auditeur_finances`) qui exécute les vérifications suivantes à chaque changement d'état du dossier bancaire ·

1. **Cohérence des données client** · nom, cédula/passeport, tel, adresse, employeur cohérents entre tous les documents déposés
2. **Vérification montant apport initial** · somme des paiements Cardnet + virements = apport requis (20% résident / 30% étranger)
3. **Complétude documentaire** · tous les documents `is_required=True` de la banque choisie déposés + non-expirés (< 3 mois pour états bancaires, < 6 mois pour fiches paye)
4. **Validation signatures** · toutes les autorisations OTO Sign™ ont hash + IP + timestamp valides · pas de manipulation
5. **Screening OFAC + PEP + AML** · nom client vs liste OFAC SDN (fichier CSV local /opt/oto/data/compliance/ofac-sdn.csv téléchargé le 2026-08-02)
6. **Cohérence financière** · revenu déclaré ÷ mensualité estimée respecte ratio d'endettement < 40% (norme Superintendencia Bancos RD)
7. **Statut Fideicomiso Ley 189-11** · confirmé constitué avec référence acte notarié
8. **CONFOTUR** · exonération vérifiée si applicable (Ley 158-01)

### Décision agent

L'agent produit un rapport structuré JSON dans `/opt/oto/data/finance-audits/{dossier_id}_{timestamp}.json` ·

```json
{
  "dossier": "HYPO-P01-50r7v1kj0a",
  "audited_at": "2026-08-03T14:30:00Z",
  "audited_by": "oto-auditeur-finances-v1",
  "decision": "APPROVED" | "REJECTED" | "REQUEST_MORE_INFO",
  "checks": {
    "coherence_donnees": "ok",
    "apport_initial": "ok · 30000/30000 USD versé",
    "documents_complets": "missing · manque état bancaire mars 2026",
    "signatures_valides": "ok · 4/4 signées",
    "ofac_screening": "clean",
    "pep_screening": "clean",
    "ratio_endettement": "ok · 28%",
    "fideicomiso": "ok · acte notarié réf ACT-2026-P01",
    "confotur": "n/a"
  },
  "reasons": ["Manque état bancaire mars 2026 pour Banreservas"],
  "next_action": "Client doit déposer document manquant"
}
```

### Signature audit

Le rapport est signé HMAC-SHA256 avec clé privée OTO Auditeur (`/etc/oto/oto-auditeur.env · AUDIT_SIGNING_KEY`) pour garantir intégrité et non-répudiation. La signature est vérifiée par le backend avant de flipper `validation_oto_auditeur` à True dans le dossier.

### Intervention humaine · uniquement en dernier recours

Un humain WAG (Michel, Xavier, Cesar, Martires) n'intervient QUE si ·
- Agent retourne `REJECTED` avec raisons ambiguës (< 3× consécutifs sur le même dossier)
- Détection OFAC/PEP positive (screening humain requis par Ley 155-17 AML RD)
- Ratio endettement border-line 38-45% (humain juge exception)
- Client fait un recours écrit contre décision agent

### Endpoint backend supplémentaire

- `POST /api/hypotheque/dossier/{id}/run-audit` · déclenche audit OTO Auditeur (lance capability OTOIA `auditeur_finances`)
- `GET /api/hypotheque/dossier/{id}/audit-latest` · retourne dernier rapport JSON
- `GET /api/hypotheque/dossier/{id}/audit-history` · liste tous les audits horodatés

### Cycle automatique

L'agent OTO Auditeur Finances tourne toutes les 15 minutes en background (cron + task queue OTOIA) pour tous les dossiers en état `Documents complets · en attente audit`. Décisions automatiques poussées à ERPNext + notification client (email + WhatsApp).

### Gate check condition 4 mise à jour

Au lieu de `wag_validated_by IS NOT NULL`, la condition devient ·
```python
audit = get_latest_audit(dossier_id)
condition_4_ok = audit and audit['decision'] == 'APPROVED' and audit['signature_valid']
```

Le client voit dans son portail « Audit OTO Auditeur Finances · APPROUVÉ le [date] » avec lien vers rapport JSON téléchargeable.
