5.1 KiB
5.1 KiB
Gestion - Documentation détaillée
Architecture
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)
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
cd /opt/gestion
npm install
npx prisma generate
npx prisma db push
npm run dev # Next.js dev sur :3005
Déploiement
# Production (bare metal, pas Docker)
NODE_ENV=production nohup npx next start -p 3005 &
Note
: Pas de process manager. Envisager pm2 ou systemd.