# OptiqueStock

Application de gestion de magasin d'optique — full-stack Next.js avec gestion des clients, produits, ventes, achats, atelier et rapports.

## Modules

| Module | Description |
|---|---|
| **Accueil** | Dashboard avec accès aux modules |
| **Clients** | Gestion des clients, relevés de vision, ordonnances |
| **Produits** | Catalogue (montures, verres, lentilles, accessoires), alertes stock, codes QR, images |
| **Fournisseurs** | Gestion des fournisseurs |
| **Achats & Stock** | Factures d'achat, réception de stock, upload PDF |
| **Point de Vente** | Panier, paiements fractionnés, historique des ventes |
| **Atelier** | Suivi des commandes de montage (4 statuts : EN_ATTENTE → EN_COURS → TERMINE → PRET) |
| **Rapports** | KPIs, graphiques (ventes, catégories, stocks), export CSV |

## Stack

- **Framework**: Next.js 16 (App Router), React 19, TypeScript 5
- **Base de données**: SQLite via Prisma ORM
- **UI**: Tailwind CSS 4, shadcn/ui, lucide-react
- **État & données**: Zustand, TanStack Query, TanStack Table
- **Formulaires**: react-hook-form + Zod
- **Graphiques**: Recharts
- **Autre**: Framer Motion, DND Kit, Sharp, QR Code, Sonner (toasts)

## Démarrage rapide

```bash
# Cloner et configurer
bun install
echo 'DATABASE_URL="file:./dev.db"' > .env

# Base de données
bunx prisma generate
bunx prisma db push

# Lancer le serveur de développement
bun run dev
# → http://localhost:3000
```

## Scripts

| Commande | Description |
|---|---|
| `bun run dev` | Serveur de développement (port 3000) |
| `bun run build` | Build production |
| `bun start` | Serveur production |
| `bun run lint` | ESLint |
| `bun run db:push` | Push Prisma schema → DB |
| `bun run db:generate` | Générer client Prisma |
| `bun run db:migrate` | Migration Prisma |
| `bun run db:reset` | Reset base de données |

## Structure

```
src/
├── app/
│   ├── page.tsx              # SPA — commutation de modules
│   ├── layout.tsx            # Layout racine
│   ├── globals.css           # Styles Tailwind + shadcn
│   └── api/                  # API REST (12 groupes de routes)
├── components/
│   ├── clients/              # Module Clients
│   ├── products/             # Module Produits
│   ├── pos/                  # Module Point de Vente
│   ├── purchases/            # Module Achats
│   ├── suppliers/            # Module Fournisseurs
│   ├── atelier/              # Module Atelier
│   ├── reports/              # Module Rapports
│   └── ui/                   # Composants shadcn/ui
├── hooks/                    # Hooks personnalisés
└── lib/                      # Utilitaires (db, optical-utils, qr-code)
```

## API

Toutes les routes sous `/api/` suivent le pattern REST :

- `api/clients`, `api/clients/[id]`, `api/clients/[id]/patients`
- `api/patients`, `api/patients/[id]`, `api/patients/[id]/ordonnances`
- `api/produits`, `api/produits/[id]`, `api/produits/[id]/images`
- `api/fournisseurs`, `api/fournisseurs/[id]`, `api/fournisseurs/[id]/factures`
- `api/achats/factures`, `api/achats/factures/[id]`, `api/achats/factures/[id]/valider`
- `api/pos/products`, `api/pos/clients`, `api/pos/sales`, `api/pos/sales/[id]`
- `api/atelier/orders`, `api/atelier/orders/[id]`
- `api/reports/dashboard`, `api/reports/sales`, `api/reports/inventory`, `api/reports/export/*`
- `api/fichiers/[id]`

Base de données SQLite auto-contenue — aucun serveur externe requis.
