# 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
jose JWT] Mail[Nodemailer] end subgraph "Base de données" PG[(PostgreSQL 17
gestion_secourit)] Prisma[Prisma Client 5] end subgraph "Services externes" SMTP[Infomaniak SMTP
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.