Files
fintrack/README.md

246 lines
8.8 KiB
Markdown

# FinTrack - Gestion de Compte Bancaire
Application web moderne de gestion personnelle de comptes bancaires avec import de fichiers OFX, catégorisation automatique des transactions et visualisations statistiques.
## 🚀 Fonctionnalités
- **Gestion de comptes** : Ajout, modification et organisation de vos comptes bancaires (chèques, épargne, cartes de crédit)
- **Import OFX** : Import automatique de transactions depuis des fichiers OFX exportés par votre banque
- **Catégorisation automatique** : Catégorisation intelligente des transactions basée sur des mots-clés
- **Organisation par dossiers** : Structurez vos comptes avec des dossiers personnalisables
- **Gestion de catégories** : Créez et gérez vos catégories de dépenses avec couleurs et icônes
- **Tableau de bord** : Vue d'ensemble avec cartes récapitulatives, transactions récentes et répartition par catégorie
- **Statistiques** : Visualisations graphiques de vos finances
- **Thème sombre/clair** : Support du mode sombre et clair
- **Stockage local** : Toutes vos données sont stockées localement dans le navigateur (localStorage)
## 🛠️ Technologies
- **Framework** : Next.js 16 (App Router)
- **UI** : React 19, TypeScript
- **Styling** : Tailwind CSS 4, shadcn/ui
- **Composants** : Radix UI
- **Graphiques** : Recharts
- **Formulaires** : React Hook Form + Zod
- **Thème** : next-themes
- **Base de données** : Prisma + SQLite
- **Authentification** : NextAuth.js v4
- **Hashing** : bcryptjs
## 📋 Prérequis
- Node.js 18+
- pnpm (recommandé) ou npm/yarn
## 🔧 Installation
1. Clonez le dépôt :
```bash
git clone <url-du-repo>
cd bank-account-management-app
```
2. Installez les dépendances :
```bash
pnpm install
```
3. Configurez les variables d'environnement :
Créez un fichier `.env.local` à la racine du projet :
```bash
# NextAuth Configuration
NEXTAUTH_URL=http://localhost:3000
NEXTAUTH_SECRET=votre-secret-genere-ici
# Database
DATABASE_URL="file:./prisma/dev.db"
```
**Génération d'un secret sécurisé** :
```bash
openssl rand -base64 32
```
Ou en Node.js :
```bash
node -e "console.log(require('crypto').randomBytes(32).toString('base64'))"
```
4. Initialisez la base de données :
```bash
pnpm prisma db push
pnpm prisma generate
```
5. Créez le fichier de mot de passe initial :
Le fichier `prisma/password.json` sera créé automatiquement au premier lancement avec le mot de passe par défaut `admin`. Vous pouvez aussi le créer manuellement :
```bash
node -e "const bcrypt = require('bcryptjs'); bcrypt.hash('admin', 10).then(hash => { const data = { hash, createdAt: new Date().toISOString(), updatedAt: new Date().toISOString() }; require('fs').promises.writeFile('prisma/password.json', JSON.stringify(data, null, 2)).then(() => console.log('✅ password.json created')); });"
```
6. Lancez le serveur de développement :
```bash
pnpm dev
```
7. Ouvrez [http://localhost:3000](http://localhost:3000) dans votre navigateur
8. Connectez-vous avec le mot de passe par défaut : `admin`
**⚠️ Important** : Changez le mot de passe par défaut dès la première connexion dans les paramètres !
## 📦 Scripts disponibles
- `pnpm dev` : Lance le serveur de développement
- `pnpm build` : Compile l'application pour la production
- `pnpm start` : Lance le serveur de production
- `pnpm lint` : Vérifie le code avec ESLint
- `pnpm db:push` : Synchronise le schéma Prisma avec la base de données
- `pnpm db:migrate` : Crée une nouvelle migration
- `pnpm db:seed` : Exécute le script de seed
- `pnpm db:studio` : Ouvre Prisma Studio pour visualiser la base de données
## 📁 Structure du projet
```
├── app/ # Pages Next.js (App Router)
│ ├── accounts/ # Page de gestion des comptes
│ ├── categories/ # Page de gestion des catégories
│ ├── folders/ # Page d'organisation par dossiers
│ ├── settings/ # Page des paramètres
│ ├── statistics/ # Page des statistiques
│ └── transactions/ # Page de gestion des transactions
├── components/ # Composants React
│ ├── dashboard/ # Composants du tableau de bord
│ ├── import/ # Composants d'import OFX
│ └── ui/ # Composants UI réutilisables (shadcn/ui)
├── lib/ # Utilitaires et logique métier
│ ├── hooks.ts # Hooks personnalisés
│ ├── ofx-parser.tsx # Parser de fichiers OFX
│ ├── types.ts # Types TypeScript
│ ├── utils.ts # Fonctions utilitaires
│ ├── prisma.ts # Client Prisma
│ └── auth.ts # Configuration NextAuth
├── services/ # Services métier
│ ├── banking.service.ts
│ ├── account.service.ts
│ ├── category.service.ts
│ ├── folder.service.ts
│ ├── transaction.service.ts
│ ├── backup.service.ts
│ └── auth.service.ts
├── prisma/ # Base de données
│ ├── schema.prisma # Schéma Prisma
│ ├── dev.db # Base de données SQLite (non versionné)
│ ├── password.json # Hash du mot de passe (non versionné)
│ └── backups/ # Sauvegardes automatiques (non versionné)
└── public/ # Assets statiques
```
## 💾 Stockage des données
L'application utilise **Prisma** avec **SQLite** pour stocker toutes les données dans un fichier local (`prisma/dev.db`). Les données sont sauvegardées automatiquement à chaque modification.
### Base de données
- **Fichier** : `prisma/dev.db` (SQLite)
- **Schéma** : Défini dans `prisma/schema.prisma`
- **Migrations** : Gérées avec Prisma Migrate
### Authentification
L'application est protégée par un **mot de passe global** stocké dans `prisma/password.json` (hashé avec bcrypt).
- **Mot de passe par défaut** : `admin` (à changer dès la première connexion)
- **Fichier** : `prisma/password.json` (créé automatiquement au premier lancement)
- **Changement de mot de passe** : Disponible dans les paramètres
**Note** : Les fichiers `prisma/password.json` et `prisma/dev.db` sont dans `.gitignore` et ne seront pas versionnés.
## 📥 Import de fichiers OFX
1. Exportez vos transactions depuis votre banque au format OFX
2. Cliquez sur "Importer OFX" dans le tableau de bord
3. Sélectionnez votre fichier OFX
4. Les transactions sont automatiquement importées et catégorisées
L'application détecte automatiquement les doublons basés sur l'ID unique (FITID) de chaque transaction.
## 🎨 Personnalisation
### Catégories par défaut
L'application inclut des catégories pré-configurées avec des mots-clés pour la catégorisation automatique :
- Alimentation
- Transport
- Logement
- Loisirs
- Santé
- Revenus
- Abonnements
- Shopping
Vous pouvez modifier, ajouter ou supprimer des catégories selon vos besoins.
### Thème
Le thème sombre/clair peut être changé dans les paramètres. L'application détecte automatiquement les préférences de votre système.
## 🔒 Sécurité et confidentialité
- **100% local** : Toutes vos données sont stockées localement dans un fichier SQLite
- **Authentification** : Protection par mot de passe global (hashé avec bcrypt)
- **Aucune connexion externe** : Aucune donnée n'est envoyée à des serveurs externes
- **Pas de tracking** : Aucun service d'analytics tiers (sauf Vercel Analytics optionnel)
- **Sauvegardes automatiques** : Système de sauvegarde automatique configurable (horaire, quotidienne, hebdomadaire, mensuelle)
### Variables d'environnement
Le fichier `.env.local` contient des secrets sensibles et ne doit **jamais** être versionné. En production, configurez ces variables dans votre plateforme de déploiement :
- `NEXTAUTH_SECRET` : Secret pour signer les tokens JWT (générez un secret sécurisé)
- `NEXTAUTH_URL` : URL de base de l'application
- `DATABASE_URL` : Chemin vers la base de données SQLite
## 🚧 Développement
### Ajouter une nouvelle fonctionnalité
1. Créez vos composants dans `components/`
2. Ajoutez les types nécessaires dans `lib/types.ts`
3. Ajoutez la logique métier dans `lib/store.ts`
4. Créez la page dans `app/`
### Structure des données
Les données sont structurées comme suit :
- **Accounts** : Comptes bancaires avec solde et métadonnées
- **Transactions** : Transactions avec montant, date, description, catégorie
- **Folders** : Dossiers pour organiser les comptes
- **Categories** : Catégories avec mots-clés pour auto-catégorisation
- **CategoryRules** : Règles avancées de catégorisation (futur)
## 📝 Licence
Ce projet est privé et destiné à un usage personnel.
## 🤝 Contribution
Ce projet est en développement actif. Les suggestions et améliorations sont les bienvenues.
---
Développé avec ❤️ en utilisant Next.js et React