98 lines
4.6 KiB
Plaintext
98 lines
4.6 KiB
Plaintext
# Contexte projet — Application Marchand de Biens
|
|
|
|
## Qui utilise cette app
|
|
Marchand de biens professionnel en France. L'app est utilisée au quotidien sur mobile (iOS/Android) et navigateur web. Elle remplace un ensemble d'outils épars (notes, tableurs, contacts téléphoniques, etc.).
|
|
|
|
## Stack technique
|
|
- **Frontend** : React Native avec Expo (SDK 51+)
|
|
- **Navigation** : Expo Router (file-based routing)
|
|
- **Base de données** : Supabase (PostgreSQL)
|
|
- **Auth** : Supabase Auth (email/password)
|
|
- **Stockage fichiers** : Supabase Storage (photos, PDFs)
|
|
- **IA** : API Anthropic Claude (claude-sonnet-4-20250514)
|
|
- **UI** : NativeWind (Tailwind pour React Native) + React Native Paper pour les composants complexes
|
|
- **State** : Zustand pour le state global, React Query (TanStack) pour le cache serveur
|
|
- **Déploiement mobile** : Expo EAS
|
|
- **Déploiement web** : Vercel
|
|
|
|
## Conventions de code
|
|
- TypeScript strict partout, jamais de `any`
|
|
- Noms de fichiers : kebab-case pour les fichiers, PascalCase pour les composants
|
|
- Toujours utiliser des hooks personnalisés pour la logique métier (ex: `useBiens`, `useContacts`)
|
|
- Les appels Supabase se font UNIQUEMENT dans les hooks, jamais dans les composants
|
|
- Les types TypeScript sont définis dans `/types/database.ts` (généré depuis Supabase)
|
|
- Les constantes métier sont dans `/constants/metier.ts`
|
|
- Toujours gérer les états de chargement et d'erreur
|
|
- Commentaires en français pour la logique métier, anglais pour le code technique
|
|
|
|
## Vocabulaire métier (utiliser ces termes précis)
|
|
- **Bien** : propriété immobilière prospectée ou acquise
|
|
- **Piste** : bien en cours d'analyse, pas encore d'offre
|
|
- **Dossier** : bien avec offre en cours ou acte signé
|
|
- **Fiche bien** : écran de détail d'un bien
|
|
- **Compromis** : avant-contrat de vente (SPC)
|
|
- **Acte** : acte authentique de vente chez notaire
|
|
- **Portage** : période entre achat et revente (coût = intérêts + taxes)
|
|
- **Marge brute** : prix revente - prix achat - travaux - frais notaire achat
|
|
- **Marge nette** : marge brute - frais de portage - frais d'agence vente - impôts
|
|
- **DPE** : Diagnostic de Performance Énergétique
|
|
- **Surface habitable** : surface loi Carrez pour appartements
|
|
- **Marchand de biens** = le user, l'utilisateur de cette app
|
|
|
|
## Modules de l'application
|
|
1. **Prospection** : pipeline Kanban des biens (piste → analyse → offre → compromis → acte → revente)
|
|
2. **Annuaire** : contacts métier (notaires, artisans, banquiers, agents immo)
|
|
3. **Fiches biens** : dossier complet par bien (photos, docs, historique)
|
|
4. **Calculateur** : analyse de rentabilité financière
|
|
5. **Visites** : compte-rendus de visites avec check-list
|
|
6. **Travaux** : suivi de chantier et devis
|
|
7. **Administratif** : documents, délais légaux, alertes
|
|
8. **Agenda** : tâches et rappels liés aux biens
|
|
9. **Dashboard** : vue globale et KPIs
|
|
|
|
## Structure des dossiers
|
|
```
|
|
/app → écrans (Expo Router)
|
|
/(tabs) → navigation principale
|
|
/prospection
|
|
/annuaire
|
|
/agenda
|
|
/dashboard
|
|
/bien/[id] → fiche bien
|
|
/visite/[id] → rapport de visite
|
|
/contact/[id] → fiche contact
|
|
/components → composants réutilisables
|
|
/ui → composants génériques (Button, Card, Input...)
|
|
/biens → composants spécifiques aux biens
|
|
/visites → composants spécifiques aux visites
|
|
/hooks → hooks personnalisés
|
|
/services → appels API (Supabase, Anthropic)
|
|
/supabase.ts → client Supabase
|
|
/ai.ts → appels Claude API
|
|
/types → types TypeScript
|
|
/constants → constantes et configuration
|
|
/utils → fonctions utilitaires
|
|
```
|
|
|
|
## Variables d'environnement nécessaires
|
|
```
|
|
EXPO_PUBLIC_SUPABASE_URL=
|
|
EXPO_PUBLIC_SUPABASE_ANON_KEY=
|
|
ANTHROPIC_API_KEY= ← côté serveur uniquement, jamais exposé côté client
|
|
```
|
|
|
|
## Règles de sécurité importantes
|
|
- La clé API Anthropic ne doit JAMAIS être dans le code client
|
|
- Créer une Supabase Edge Function pour les appels IA
|
|
- Row Level Security (RLS) activé sur toutes les tables Supabase
|
|
- Les photos et docs sont dans des buckets Supabase privés
|
|
|
|
## Calculs financiers — formules exactes
|
|
```
|
|
frais_notaire_achat = prix_achat * 0.075 (ancien) ou * 0.02 (neuf)
|
|
prix_revient = prix_achat + frais_notaire_achat + travaux + frais_portage
|
|
marge_brute = prix_revente_cible - prix_revient
|
|
frais_portage_mensuel = (prix_achat * taux_credit / 12) + taxe_fonciere_mensuelle
|
|
taux_marge_brute = marge_brute / prix_revente_cible * 100
|
|
```
|