Add detailed documentation
This commit is contained in:
+235
@@ -0,0 +1,235 @@
|
|||||||
|
# Gestion - Documentation détaillée
|
||||||
|
|
||||||
|
## Architecture
|
||||||
|
|
||||||
|
```mermaid
|
||||||
|
graph TD
|
||||||
|
subgraph "Frontend (Next.js 14)"
|
||||||
|
Pages[App Router Pages]
|
||||||
|
Components[Composants React]
|
||||||
|
Forms[react-hook-form + zod]
|
||||||
|
Charts[Recharts]
|
||||||
|
end
|
||||||
|
|
||||||
|
subgraph "Backend (Next.js API Routes)"
|
||||||
|
API[API Routes]
|
||||||
|
Auth[Auth Middleware<br/>jose JWT]
|
||||||
|
Mail[Nodemailer]
|
||||||
|
end
|
||||||
|
|
||||||
|
subgraph "Base de données"
|
||||||
|
PG[(PostgreSQL 17<br/>gestion_secourit)]
|
||||||
|
Prisma[Prisma Client 5]
|
||||||
|
end
|
||||||
|
|
||||||
|
subgraph "Services externes"
|
||||||
|
SMTP[Infomaniak SMTP<br/>smtp.infomaniak.ch:465]
|
||||||
|
end
|
||||||
|
|
||||||
|
Pages --> Components
|
||||||
|
Components --> Forms
|
||||||
|
Components --> Charts
|
||||||
|
Components --> API
|
||||||
|
API --> Auth
|
||||||
|
API --> Prisma
|
||||||
|
API --> Mail
|
||||||
|
Prisma --> PG
|
||||||
|
Mail --> SMTP
|
||||||
|
```
|
||||||
|
|
||||||
|
## Modèle de données (Prisma)
|
||||||
|
|
||||||
|
```mermaid
|
||||||
|
erDiagram
|
||||||
|
USER ||--o{ SESSION : "a"
|
||||||
|
USER ||--o{ CLIENT : "gère"
|
||||||
|
USER ||--o{ QUOTE : "crée"
|
||||||
|
USER ||--o{ SALE : "enregistre"
|
||||||
|
USER ||--o{ TODO : "a"
|
||||||
|
CLIENT ||--o{ QUOTE : "reçoit"
|
||||||
|
CLIENT ||--o{ CONTRACT : "a"
|
||||||
|
CLIENT ||--o{ SALE : "a"
|
||||||
|
QUOTE ||--o{ QUOTE_ITEM : "contient"
|
||||||
|
QUOTE ||--o| CONTRACT : "devient"
|
||||||
|
CONTRACT ||--o{ INVOICE : "génère"
|
||||||
|
SALE ||--o{ SALE_ITEM : "contient"
|
||||||
|
|
||||||
|
USER {
|
||||||
|
string id PK
|
||||||
|
string email UK
|
||||||
|
string name
|
||||||
|
string passwordHash
|
||||||
|
string role
|
||||||
|
}
|
||||||
|
|
||||||
|
CLIENT {
|
||||||
|
string id PK
|
||||||
|
string name
|
||||||
|
string email
|
||||||
|
string phone
|
||||||
|
string address
|
||||||
|
string siret
|
||||||
|
enum type PROSPECT|CLIENT
|
||||||
|
boolean isProfessional
|
||||||
|
string userId FK
|
||||||
|
}
|
||||||
|
|
||||||
|
QUOTE {
|
||||||
|
string id PK
|
||||||
|
string clientId FK
|
||||||
|
string userId FK
|
||||||
|
string name
|
||||||
|
string quoteNumber
|
||||||
|
enum status DRAFT|PROPOSAL|SENT|ACCEPTED|REJECTED|EXPIRED
|
||||||
|
float setupTotal
|
||||||
|
float monthlyTotal
|
||||||
|
float costTotal
|
||||||
|
float marginTotal
|
||||||
|
float discount
|
||||||
|
int travelKm
|
||||||
|
float travelCost
|
||||||
|
}
|
||||||
|
|
||||||
|
QUOTE_ITEM {
|
||||||
|
string id PK
|
||||||
|
string quoteId FK
|
||||||
|
enum type PRODUCT|SERVICE
|
||||||
|
string label
|
||||||
|
float unitPrice
|
||||||
|
float costPrice
|
||||||
|
int quantity
|
||||||
|
boolean isRecurring
|
||||||
|
float setupPrice
|
||||||
|
float monthlyPrice
|
||||||
|
}
|
||||||
|
|
||||||
|
CONTRACT {
|
||||||
|
string id PK
|
||||||
|
string clientId FK
|
||||||
|
string quoteId FK
|
||||||
|
string userId FK
|
||||||
|
string contractNumber
|
||||||
|
enum status ACTIVE|TERMINATED|CANCELLED
|
||||||
|
date startDate
|
||||||
|
date endDate
|
||||||
|
}
|
||||||
|
|
||||||
|
INVOICE {
|
||||||
|
string id PK
|
||||||
|
string clientId FK
|
||||||
|
string contractId FK
|
||||||
|
string userId FK
|
||||||
|
string invoiceNumber
|
||||||
|
enum status DRAFT|SENT|PAID|OVERDUE
|
||||||
|
float total
|
||||||
|
date dueDate
|
||||||
|
}
|
||||||
|
|
||||||
|
SALE {
|
||||||
|
string id PK
|
||||||
|
string clientId FK
|
||||||
|
string userId FK
|
||||||
|
float total
|
||||||
|
date saleDate
|
||||||
|
string proposal
|
||||||
|
}
|
||||||
|
|
||||||
|
SALE_ITEM {
|
||||||
|
string id PK
|
||||||
|
string saleId FK
|
||||||
|
string productId
|
||||||
|
int quantity
|
||||||
|
float unitPrice
|
||||||
|
}
|
||||||
|
|
||||||
|
TODO {
|
||||||
|
string id PK
|
||||||
|
string userId FK
|
||||||
|
string title
|
||||||
|
string description
|
||||||
|
enum priority LOW|MEDIUM|HIGH
|
||||||
|
boolean completed
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
## Pages et Routes
|
||||||
|
|
||||||
|
### Pages (Frontend)
|
||||||
|
| Route | Description |
|
||||||
|
|-------|-------------|
|
||||||
|
| `/` | Dashboard principal |
|
||||||
|
| `/login` | Page de connexion |
|
||||||
|
| `/clients` | Liste des clients |
|
||||||
|
| `/quotes` | Liste des devis |
|
||||||
|
| `/contracts` | Liste des contrats |
|
||||||
|
| `/invoices` | Liste des factures |
|
||||||
|
| `/sales` | Liste des ventes |
|
||||||
|
| `/servers` | Gestion serveurs |
|
||||||
|
| `/todos` | To-do list |
|
||||||
|
|
||||||
|
### API Routes
|
||||||
|
| Méthode | Route | Description |
|
||||||
|
|---------|-------|-------------|
|
||||||
|
| POST | `/api/auth/login` | Connexion |
|
||||||
|
| POST | `/api/auth/register` | Inscription |
|
||||||
|
| GET | `/api/auth/me` | Profil |
|
||||||
|
| GET | `/api/clients` | Liste clients |
|
||||||
|
| POST | `/api/clients` | Créer client |
|
||||||
|
| GET | `/api/quotes` | Liste devis |
|
||||||
|
| POST | `/api/quotes` | Créer devis |
|
||||||
|
| GET | `/api/contracts` | Liste contrats |
|
||||||
|
| GET | `/api/invoices` | Liste factures |
|
||||||
|
| GET | `/api/sales` | Liste ventes |
|
||||||
|
| GET | `/api/dashboard` | Données dashboard |
|
||||||
|
| GET | `/api/todos` | Liste to-dos |
|
||||||
|
|
||||||
|
## Fonctionnalités
|
||||||
|
|
||||||
|
### Clients
|
||||||
|
- Types : prospect, client
|
||||||
|
- Informations pro (SIRET) ou perso
|
||||||
|
- Historique devis/contrats/factures
|
||||||
|
|
||||||
|
### Devis
|
||||||
|
- Lignes avec prix unitaire, coût, quantité
|
||||||
|
- Calcul automatique : setup total, mensuel, marge
|
||||||
|
- Frais de déplacement (km)
|
||||||
|
- Statuts : brouillon → proposition → envoyé → accepté/refusé/expiré
|
||||||
|
- Conversion en contrat
|
||||||
|
|
||||||
|
### Contrats
|
||||||
|
- Liés à un devis accepté
|
||||||
|
- Suivi durée (début/fin)
|
||||||
|
- Génération de factures
|
||||||
|
|
||||||
|
### Factures
|
||||||
|
- Numérotation auto
|
||||||
|
- Statuts : brouillon → envoyé → payé → en retard
|
||||||
|
- Notifications email
|
||||||
|
|
||||||
|
### Ventes
|
||||||
|
- Enregistrement avec lignes
|
||||||
|
- Référencement produits
|
||||||
|
|
||||||
|
### To-do list
|
||||||
|
- Priorités (low/medium/high)
|
||||||
|
- Suivi complétion
|
||||||
|
|
||||||
|
## Développement
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cd /opt/gestion
|
||||||
|
npm install
|
||||||
|
npx prisma generate
|
||||||
|
npx prisma db push
|
||||||
|
npm run dev # Next.js dev sur :3005
|
||||||
|
```
|
||||||
|
|
||||||
|
## Déploiement
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Production (bare metal, pas Docker)
|
||||||
|
NODE_ENV=production nohup npx next start -p 3005 &
|
||||||
|
```
|
||||||
|
|
||||||
|
> **Note** : Pas de process manager. Envisager pm2 ou systemd.
|
||||||
Reference in New Issue
Block a user