Files
gestion/docs
2026-08-24 08:53:44 +00:00
..
2026-08-24 08:53:44 +00:00

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.