# Cahier des Charges Technique et Fonctionnel
## Logiciel de Caisse Enregistreuse - Conformité Loi Anti-Fraude TVA 2025

**Version:** 1.0.0
**Date:** Janvier 2025
**Référence légale:** Article 286 du CGI - Certification NF525/LNE

---

## Table des Matières

1. [Contexte et Objectifs](#1-contexte-et-objectifs)
2. [Cadre Réglementaire](#2-cadre-réglementaire)
3. [Architecture Technique](#3-architecture-technique)
4. [Sécurité et Inaltérabilité](#4-sécurité-et-inaltérabilité)
5. [Fonctionnalités Détaillées](#5-fonctionnalités-détaillées)
6. [Interface Utilisateur](#6-interface-utilisateur)
7. [Système d'Installation](#7-système-dinstallation)
8. [Structure des Données](#8-structure-des-données)
9. [API et Intégrations](#9-api-et-intégrations)
10. [Livrables et Planning](#10-livrables-et-planning)

---

## 1. Contexte et Objectifs

### 1.1 Présentation du Projet

Développement d'un logiciel de caisse enregistreuse web (SaaS ou Auto-hébergé) conforme à la réglementation française anti-fraude à la TVA, applicable depuis le 1er janvier 2018 et renforcée en 2025.

### 1.2 Objectifs Principaux

| Objectif | Description |
|----------|-------------|
| **Conformité légale** | Respect des 4 principes : Inaltérabilité, Sécurisation, Conservation, Archivage |
| **Performance** | Interface ultra-rapide (<100ms de réponse) |
| **Accessibilité** | Déploiement simplifié type WordPress |
| **Évolutivité** | Architecture modulaire et extensible |

### 1.3 Public Cible

- Commerces de détail (boutiques, restaurants, bars)
- Professionnels de santé (pharmacies, opticiens)
- Prestataires de services avec encaissement
- TPE/PME soumises à l'obligation de certification

---

## 2. Cadre Réglementaire

### 2.1 Obligations Légales (Article 286 du CGI)

```
┌─────────────────────────────────────────────────────────────────────┐
│                    4 CONDITIONS CUMULATIVES                         │
├─────────────────────────────────────────────────────────────────────┤
│  1. INALTÉRABILITÉ   │ Impossible de modifier/supprimer une        │
│                      │ transaction sans laisser de trace           │
├──────────────────────┼──────────────────────────────────────────────┤
│  2. SÉCURISATION     │ Signature numérique de chaque opération     │
│                      │ avec chaînage cryptographique                │
├──────────────────────┼──────────────────────────────────────────────┤
│  3. CONSERVATION     │ Stockage des données sur 6 ans minimum      │
│                      │ avec accès en lecture seule                  │
├──────────────────────┼──────────────────────────────────────────────┤
│  4. ARCHIVAGE        │ Export périodique des données dans un       │
│                      │ format non modifiable (XML signé)            │
└──────────────────────┴──────────────────────────────────────────────┘
```

### 2.2 Sanctions Encourues

- **Amende:** 7 500 € par logiciel non conforme
- **Obligation:** Mise en conformité sous 60 jours
- **Récidive:** Sanctions pénales possibles

### 2.3 Mentions Obligatoires sur Factures

| Mention | Obligatoire | Description |
|---------|-------------|-------------|
| Numéro SIRET | ✅ | Identifiant unique de l'établissement |
| Numéro TVA Intracommunautaire | ✅ | Si assujetti |
| Date d'émission | ✅ | Format JJ/MM/AAAA |
| Numéro de facture | ✅ | Séquentiel sans rupture |
| Désignation des produits | ✅ | Nature, quantité, prix unitaire |
| Taux de TVA | ✅ | Par ligne si différent |
| Total HT / TVA / TTC | ✅ | Récapitulatif obligatoire |
| Conditions de règlement | ✅ | Délai, pénalités de retard |
| Signature numérique | ✅ | Hash de vérification |

---

## 3. Architecture Technique

### 3.1 Stack Technologique

```
┌─────────────────────────────────────────────────────────────────────┐
│                         FRONTEND                                     │
│  ┌─────────────┐  ┌─────────────┐  ┌─────────────┐                 │
│  │   HTML5     │  │   CSS3      │  │ JavaScript  │                 │
│  │   (Twig)    │  │ (Tailwind)  │  │  (Alpine)   │                 │
│  └─────────────┘  └─────────────┘  └─────────────┘                 │
├─────────────────────────────────────────────────────────────────────┤
│                         BACKEND                                      │
│  ┌─────────────────────────────────────────────────────────────┐   │
│  │                      PHP 8.2+                                │   │
│  │  ┌──────────┐  ┌──────────┐  ┌──────────┐  ┌──────────┐    │   │
│  │  │  Router  │  │Controllers│  │ Services │  │  Models  │    │   │
│  │  └──────────┘  └──────────┘  └──────────┘  └──────────┘    │   │
│  └─────────────────────────────────────────────────────────────┘   │
├─────────────────────────────────────────────────────────────────────┤
│                        DATABASE                                      │
│  ┌─────────────────────────────────────────────────────────────┐   │
│  │                    MySQL 8.0+ / MariaDB 10.6+               │   │
│  │           (InnoDB - Transactions ACID)                       │   │
│  └─────────────────────────────────────────────────────────────┘   │
├─────────────────────────────────────────────────────────────────────┤
│                      LIBRAIRIES                                      │
│  ┌──────────┐  ┌──────────┐  ┌──────────┐  ┌──────────┐           │
│  │  TCPDF   │  │ PHPMailer│  │ Monolog  │  │ Dotenv   │           │
│  │  (PDF)   │  │ (Email)  │  │ (Logs)   │  │ (Config) │           │
│  └──────────┘  └──────────┘  └──────────┘  └──────────┘           │
└─────────────────────────────────────────────────────────────────────┘
```

### 3.2 Configuration Serveur Minimale

| Composant | Minimum | Recommandé |
|-----------|---------|------------|
| PHP | 8.2 | 8.3 |
| MySQL/MariaDB | 8.0 / 10.6 | 8.0 / 10.11 |
| RAM | 512 Mo | 2 Go |
| Stockage | 10 Go | 50 Go SSD |
| SSL/TLS | Obligatoire | Let's Encrypt |

### 3.3 Extensions PHP Requises

```php
// Extensions obligatoires
ext-openssl    // Cryptographie et signatures
ext-pdo_mysql  // Connexion base de données
ext-mbstring   // Gestion des caractères UTF-8
ext-gd         // Génération d'images (codes-barres)
ext-json       // API JSON
ext-zip        // Archives d'export
ext-xml        // Export XML signé
ext-curl       // Communications externes
```

### 3.4 Structure des Dossiers

```
tech-vape/
├── app/
│   ├── Controllers/          # Contrôleurs MVC
│   │   ├── AuthController.php
│   │   ├── CashRegisterController.php
│   │   ├── InvoiceController.php
│   │   ├── InventoryController.php
│   │   └── AdminController.php
│   ├── Models/               # Modèles de données
│   │   ├── User.php
│   │   ├── Transaction.php
│   │   ├── Invoice.php
│   │   ├── Product.php
│   │   └── CashSession.php
│   ├── Services/             # Services métier
│   │   ├── SignatureService.php
│   │   ├── InvoicePdfService.php
│   │   ├── ArchiveService.php
│   │   └── StockService.php
│   ├── Middleware/           # Middlewares
│   │   ├── AuthMiddleware.php
│   │   └── AuditMiddleware.php
│   └── Helpers/              # Fonctions utilitaires
│       ├── DateHelper.php
│       └── FormatHelper.php
├── config/
│   ├── app.php               # Configuration générale
│   ├── database.php          # Configuration BDD
│   └── security.php          # Clés et certificats
├── database/
│   ├── migrations/           # Scripts de migration
│   └── seeds/                # Données initiales
├── install/
│   ├── index.php             # Wizard d'installation
│   ├── steps/                # Étapes du wizard
│   └── templates/            # Templates installation
├── public/
│   ├── index.php             # Point d'entrée unique
│   ├── assets/
│   │   ├── css/
│   │   ├── js/
│   │   └── img/
│   └── .htaccess
├── storage/
│   ├── invoices/             # Factures PDF générées
│   ├── archives/             # Archives périodiques
│   ├── logs/                 # Journaux d'audit
│   └── cache/                # Cache applicatif
├── templates/
│   ├── layouts/              # Layouts Twig
│   ├── pages/                # Pages principales
│   └── components/           # Composants réutilisables
├── vendor/                   # Dépendances Composer
├── .env.example              # Variables d'environnement
├── composer.json
└── README.md
```

---

## 4. Sécurité et Inaltérabilité

### 4.1 Principe du Chaînage Cryptographique

Le chaînage des signatures garantit l'inaltérabilité des transactions. Chaque opération inclut la signature de l'opération précédente, créant une chaîne inviolable.

```
┌──────────────────────────────────────────────────────────────────────┐
│                    CHAÎNAGE DES SIGNATURES                           │
├──────────────────────────────────────────────────────────────────────┤
│                                                                      │
│  Transaction N-1          Transaction N           Transaction N+1    │
│  ┌──────────────┐        ┌──────────────┐        ┌──────────────┐   │
│  │ ID: 001      │        │ ID: 002      │        │ ID: 003      │   │
│  │ Date: ...    │        │ Date: ...    │        │ Date: ...    │   │
│  │ Montant: ... │        │ Montant: ... │        │ Montant: ... │   │
│  │ Prev: NULL   │───────▶│ Prev: SIG001 │───────▶│ Prev: SIG002 │   │
│  │ SIG: SIG001  │        │ SIG: SIG002  │        │ SIG: SIG003  │   │
│  └──────────────┘        └──────────────┘        └──────────────┘   │
│                                                                      │
│  Formule de signature:                                               │
│  SIG_N = SHA256(ID + DATE + MONTANT + TYPE + SIG_N-1 + SECRET_KEY)  │
│                                                                      │
└──────────────────────────────────────────────────────────────────────┘
```

### 4.2 Algorithme de Signature

```php
/**
 * Génération de la signature d'une transaction
 * Conforme NF525 - Inaltérabilité garantie
 */
function generateSignature(Transaction $tx, ?string $previousSignature): string
{
    // Données à signer (ordre déterministe)
    $data = implode('|', [
        $tx->id,
        $tx->created_at->format('Y-m-d H:i:s'),
        number_format($tx->total_ttc, 2, '.', ''),
        $tx->type,
        $tx->payment_method,
        $previousSignature ?? 'GENESIS',
    ]);

    // Signature HMAC-SHA256 avec clé secrète
    return hash_hmac('sha256', $data, getenv('SIGNATURE_SECRET_KEY'));
}
```

### 4.3 Types de Transactions Signées

| Type | Code | Description |
|------|------|-------------|
| Vente | `SALE` | Transaction de vente standard |
| Avoir | `REFUND` | Remboursement total ou partiel |
| Annulation | `CANCEL` | Annulation avant encaissement |
| Ouverture | `OPEN` | Ouverture de caisse |
| Fermeture | `CLOSE` | Clôture de caisse avec Z |
| Prélèvement | `WITHDRAW` | Retrait d'espèces |
| Apport | `DEPOSIT` | Apport au fond de caisse |

### 4.4 Journal d'Événements Technique (JET)

Le JET enregistre toutes les actions avec horodatage et signature :

```sql
CREATE TABLE jet_audit_log (
    id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    event_datetime DATETIME(6) NOT NULL,
    event_type VARCHAR(50) NOT NULL,
    user_id INT UNSIGNED,
    terminal_id VARCHAR(50),
    event_data JSON NOT NULL,
    previous_signature VARCHAR(64),
    signature VARCHAR(64) NOT NULL,
    INDEX idx_datetime (event_datetime),
    INDEX idx_type (event_type)
) ENGINE=InnoDB;
```

### 4.5 Clôture Périodique et Archives

```
┌─────────────────────────────────────────────────────────────────────┐
│                    CYCLE D'ARCHIVAGE                                 │
├─────────────────────────────────────────────────────────────────────┤
│                                                                     │
│  QUOTIDIEN (Ticket Z)                                               │
│  ├── Clôture de caisse obligatoire                                  │
│  ├── Génération du ticket Z signé                                   │
│  └── Remise à zéro des compteurs journaliers                        │
│                                                                     │
│  MENSUEL                                                            │
│  ├── Export XML des transactions du mois                            │
│  ├── Signature globale de l'archive                                 │
│  └── Stockage dans /storage/archives/YYYY/MM/                       │
│                                                                     │
│  ANNUEL                                                             │
│  ├── Consolidation des archives mensuelles                          │
│  ├── Génération du Grand Livre Fiscal                               │
│  └── Archivage sur support externe (optionnel)                      │
│                                                                     │
│  CONSERVATION: 6 ans minimum (10 ans recommandé)                    │
│                                                                     │
└─────────────────────────────────────────────────────────────────────┘
```

---

## 5. Fonctionnalités Détaillées

### 5.1 Module Caisse

#### 5.1.1 Ouverture de Session

```
┌─────────────────────────────────────────────────────────────────────┐
│                    OUVERTURE DE CAISSE                               │
├─────────────────────────────────────────────────────────────────────┤
│                                                                     │
│  1. Authentification de l'opérateur (login + PIN)                   │
│  2. Saisie du fond de caisse initial                                │
│  3. Vérification de la dernière clôture                             │
│  4. Génération de l'événement OPEN signé                            │
│  5. Activation du terminal                                          │
│                                                                     │
│  Données enregistrées:                                              │
│  - ID Session                                                       │
│  - Opérateur                                                        │
│  - Horodatage                                                       │
│  - Fond de caisse                                                   │
│  - Signature                                                        │
│                                                                     │
└─────────────────────────────────────────────────────────────────────┘
```

#### 5.1.2 Tunnel de Vente

```
┌─────────────────────────────────────────────────────────────────────┐
│                    TUNNEL DE VENTE RAPIDE                            │
├─────────────────────────────────────────────────────────────────────┤
│                                                                     │
│  ÉTAPE 1: Ajout des articles                                        │
│  ├── Scan code-barres (EAN-13, Code 128)                            │
│  ├── Recherche par nom/référence                                    │
│  ├── Sélection dans grille de favoris                               │
│  └── Saisie manuelle (articles divers)                              │
│                                                                     │
│  ÉTAPE 2: Modification du panier                                    │
│  ├── Ajustement des quantités (+/-)                                 │
│  ├── Application de remises (% ou montant)                          │
│  ├── Suppression d'articles                                         │
│  └── Ajout de commentaires                                          │
│                                                                     │
│  ÉTAPE 3: Encaissement                                              │
│  ├── Sélection mode de paiement                                     │
│  ├── Calcul du rendu monnaie (espèces)                              │
│  ├── Paiement mixte (CB + espèces)                                  │
│  └── Validation et impression                                       │
│                                                                     │
│  TEMPS CIBLE: < 5 secondes pour une vente simple                    │
│                                                                     │
└─────────────────────────────────────────────────────────────────────┘
```

#### 5.1.3 Modes de Paiement

| Mode | Code | Particularités |
|------|------|----------------|
| Espèces | `CASH` | Calcul rendu monnaie |
| Carte Bancaire | `CARD` | Intégration TPE possible |
| Chèque | `CHECK` | Saisie numéro chèque |
| Ticket Restaurant | `MEAL_VOUCHER` | Plafond journalier |
| Virement | `TRANSFER` | Paiement différé |
| Avoir | `CREDIT_NOTE` | Utilisation d'un avoir client |

#### 5.1.4 Fermeture de Session (Ticket Z)

```
┌─────────────────────────────────────────────────────────────────────┐
│                    TICKET Z - CLÔTURE JOURNALIÈRE                    │
├─────────────────────────────────────────────────────────────────────┤
│                                                                     │
│  CONTENU OBLIGATOIRE:                                               │
│  ├── Période (date/heure ouverture → fermeture)                     │
│  ├── Nombre de tickets émis                                         │
│  ├── CA TTC par taux de TVA                                         │
│  ├── CA TTC par mode de paiement                                    │
│  ├── Nombre et montant des annulations                              │
│  ├── Nombre et montant des remises                                  │
│  ├── Fond de caisse théorique vs réel                               │
│  └── Signature cryptographique                                      │
│                                                                     │
│  GÉNÉRATION:                                                        │
│  ├── PDF archivé automatiquement                                    │
│  ├── Impression papier (optionnelle)                                │
│  └── Intégration comptable (export)                                 │
│                                                                     │
└─────────────────────────────────────────────────────────────────────┘
```

### 5.2 Module Inventaire

#### 5.2.1 Fiche Produit

```sql
-- Structure de la fiche produit
Product {
    id: INT
    reference: VARCHAR(50)      -- Référence interne
    barcode: VARCHAR(20)        -- Code-barres EAN
    name: VARCHAR(255)          -- Désignation
    description: TEXT           -- Description longue
    category_id: INT            -- Catégorie
    brand_id: INT               -- Marque
    supplier_id: INT            -- Fournisseur principal

    -- Prix
    purchase_price_ht: DECIMAL  -- Prix d'achat HT
    selling_price_ht: DECIMAL   -- Prix de vente HT
    vat_rate: DECIMAL           -- Taux TVA (20, 10, 5.5, 2.1)
    selling_price_ttc: DECIMAL  -- Prix TTC (calculé)

    -- Stock
    stock_quantity: INT         -- Quantité en stock
    stock_alert_threshold: INT  -- Seuil d'alerte
    stock_location: VARCHAR     -- Emplacement

    -- Attributs
    attributes: JSON            -- {taille: "M", couleur: "Rouge"}

    -- Métadonnées
    is_active: BOOLEAN
    created_at: DATETIME
    updated_at: DATETIME
}
```

#### 5.2.2 Gestion des Attributs (Variantes)

```
┌─────────────────────────────────────────────────────────────────────┐
│                    SYSTÈME DE VARIANTES                              │
├─────────────────────────────────────────────────────────────────────┤
│                                                                     │
│  Produit Parent: T-Shirt Basic                                      │
│  ├── Variante 1: Taille S, Couleur Noir  → Stock: 15                │
│  ├── Variante 2: Taille S, Couleur Blanc → Stock: 12                │
│  ├── Variante 3: Taille M, Couleur Noir  → Stock: 20                │
│  ├── Variante 4: Taille M, Couleur Blanc → Stock: 18                │
│  ├── Variante 5: Taille L, Couleur Noir  → Stock: 8                 │
│  └── Variante 6: Taille L, Couleur Blanc → Stock: 10                │
│                                                                     │
│  Chaque variante a:                                                 │
│  - Son propre code-barres                                           │
│  - Son propre stock                                                 │
│  - Prix identique ou différent du parent                            │
│                                                                     │
└─────────────────────────────────────────────────────────────────────┘
```

#### 5.2.3 Alertes de Stock

| Niveau | Condition | Action |
|--------|-----------|--------|
| 🟢 Normal | `stock > seuil * 2` | Aucune |
| 🟡 Attention | `seuil < stock <= seuil * 2` | Notification dashboard |
| 🔴 Critique | `stock <= seuil` | Email + notification urgente |
| ⚫ Rupture | `stock = 0` | Blocage vente (optionnel) |

#### 5.2.4 Promotions et Remises

```
┌─────────────────────────────────────────────────────────────────────┐
│                    SYSTÈME DE PROMOTIONS                             │
├─────────────────────────────────────────────────────────────────────┤
│                                                                     │
│  Types de promotions:                                               │
│  ├── Remise pourcentage (-10%, -20%, etc.)                          │
│  ├── Remise montant (-5€, -10€, etc.)                               │
│  ├── Prix fixe promotionnel                                         │
│  ├── X pour le prix de Y (3 pour 2)                                 │
│  └── Offre groupée (lot de produits)                                │
│                                                                     │
│  Conditions d'application:                                          │
│  ├── Période de validité (date début → date fin)                    │
│  ├── Jours de la semaine                                            │
│  ├── Quantité minimum                                               │
│  ├── Montant minimum panier                                         │
│  └── Catégorie client (fidélité)                                    │
│                                                                     │
│  Priorité: Les promotions ne se cumulent pas (la plus               │
│  avantageuse pour le client est automatiquement appliquée)          │
│                                                                     │
└─────────────────────────────────────────────────────────────────────┘
```

### 5.3 Module Facturation

#### 5.3.1 Types de Documents

| Document | Usage | Numérotation |
|----------|-------|--------------|
| Ticket de caisse | Vente au comptoir | T-YYYYMMDD-XXXXX |
| Facture | Vente avec coordonnées client | F-YYYY-XXXXX |
| Avoir | Remboursement | A-YYYY-XXXXX |
| Devis | Proposition commerciale | D-YYYY-XXXXX |
| Bon de livraison | Accompagne marchandise | BL-YYYY-XXXXX |

#### 5.3.2 Format Facture A4

```
┌─────────────────────────────────────────────────────────────────────┐
│                         FACTURE                                      │
│                                                                     │
│  ┌─────────────────────┐         ┌─────────────────────────────┐   │
│  │ [LOGO ENTREPRISE]   │         │ FACTURE N° F-2025-00042     │   │
│  │                     │         │ Date: 05/01/2025            │   │
│  │ Raison Sociale      │         │ Échéance: 05/02/2025        │   │
│  │ Adresse             │         │                             │   │
│  │ SIRET: XXX XXX XXX  │         │                             │   │
│  │ TVA: FR XX XXXXXXXXX│         │                             │   │
│  └─────────────────────┘         └─────────────────────────────┘   │
│                                                                     │
│  ┌─────────────────────────────────────────────────────────────┐   │
│  │ DESTINATAIRE                                                 │   │
│  │ Nom du client                                                │   │
│  │ Adresse de facturation                                       │   │
│  │ SIRET (si professionnel)                                     │   │
│  └─────────────────────────────────────────────────────────────┘   │
│                                                                     │
│  ┌─────────────────────────────────────────────────────────────┐   │
│  │ Réf.    │ Désignation          │ Qté │ P.U. HT │ Total HT  │   │
│  ├─────────┼──────────────────────┼─────┼─────────┼───────────┤   │
│  │ PRD001  │ Article exemple      │  2  │  45,00€ │   90,00€  │   │
│  │ PRD002  │ Autre article        │  1  │  30,00€ │   30,00€  │   │
│  └─────────┴──────────────────────┴─────┴─────────┴───────────┘   │
│                                                                     │
│  ┌─────────────────────────────────────────────────────────────┐   │
│  │                                    Total HT    │   120,00€  │   │
│  │                                    TVA 20%     │    24,00€  │   │
│  │                                    TOTAL TTC   │   144,00€  │   │
│  └─────────────────────────────────────────────────────────────┘   │
│                                                                     │
│  Conditions de règlement: Paiement à 30 jours                       │
│  Pénalités de retard: 3x taux d'intérêt légal                      │
│  Indemnité forfaitaire: 40€                                        │
│                                                                     │
│  ┌─────────────────────────────────────────────────────────────┐   │
│  │ Signature: a1b2c3d4e5f6... │ Vérif: https://example.com/v/X │   │
│  └─────────────────────────────────────────────────────────────┘   │
│                                                                     │
└─────────────────────────────────────────────────────────────────────┘
```

### 5.4 Module Administration

#### 5.4.1 Paramètres Entreprise

```yaml
Identité:
  - Raison sociale
  - Forme juridique (SARL, SAS, EI, etc.)
  - Capital social
  - Adresse du siège
  - Adresse de correspondance

Identification:
  - Numéro SIRET
  - Numéro SIREN
  - Code APE/NAF
  - Numéro TVA intracommunautaire
  - RCS (ville d'immatriculation)

Contact:
  - Téléphone
  - Email
  - Site web

Visuel:
  - Logo (PNG/JPG, min 300x100px)
  - Couleur principale
  - Pied de page personnalisé

Comptabilité:
  - Plan comptable
  - Journaux
  - Exercice fiscal
```

#### 5.4.2 Gestion des Utilisateurs

| Rôle | Droits |
|------|--------|
| **Super Admin** | Tous les droits, configuration système |
| **Gérant** | Accès complet sauf configuration technique |
| **Responsable** | Caisse + Inventaire + Rapports |
| **Caissier** | Caisse uniquement, pas d'annulation |
| **Inventoriste** | Inventaire uniquement |

#### 5.4.3 Configuration des Terminaux

```
Terminal {
    id: UUID
    name: "Caisse 1"
    location: "Entrée magasin"
    printer_type: "thermal_80mm" | "a4_laser"
    printer_config: {...}
    barcode_scanner: true
    cash_drawer: true
    payment_terminal: "ingenico_move5000"
}
```

---

## 6. Interface Utilisateur

### 6.1 Principes UX

```
┌─────────────────────────────────────────────────────────────────────┐
│                    PRINCIPES DE DESIGN                               │
├─────────────────────────────────────────────────────────────────────┤
│                                                                     │
│  1. RAPIDITÉ                                                        │
│     - Temps de réponse < 100ms                                      │
│     - Pas de rechargement de page (SPA-like)                        │
│     - Préchargement intelligent                                     │
│                                                                     │
│  2. ACCESSIBILITÉ                                                   │
│     - Contraste élevé                                               │
│     - Taille de police adaptée (16px min)                           │
│     - Zone de clic large (44px min)                                 │
│                                                                     │
│  3. EFFICACITÉ                                                      │
│     - Actions principales en 1-2 clics                              │
│     - Raccourcis clavier pour tout                                  │
│     - Feedback visuel immédiat                                      │
│                                                                     │
│  4. ROBUSTESSE                                                      │
│     - Fonctionne hors ligne (mode dégradé)                          │
│     - Gestion des erreurs gracieuse                                 │
│     - Sauvegarde automatique                                        │
│                                                                     │
└─────────────────────────────────────────────────────────────────────┘
```

### 6.2 Raccourcis Clavier

| Raccourci | Action |
|-----------|--------|
| `F1` | Aide contextuelle |
| `F2` | Recherche produit |
| `F3` | Recherche client |
| `F4` | Appliquer remise |
| `F5` | Rafraîchir |
| `F8` | Mettre en attente |
| `F9` | Reprendre vente en attente |
| `F10` | Annuler article |
| `F11` | Annuler vente |
| `F12` | Valider / Encaisser |
| `+` / `-` | Augmenter / Diminuer quantité |
| `Entrée` | Confirmer action |
| `Échap` | Annuler / Fermer modal |
| `Ctrl+P` | Imprimer |
| `Ctrl+Z` | Ticket Z (fermeture) |

### 6.3 Layout Principal

```
┌─────────────────────────────────────────────────────────────────────┐
│ [Logo] │ Caisse 1 │ Marie D. │ 14:32 │ [🔔] [⚙️] [🚪]              │
├─────────────────────────────────────────────────────────────────────┤
│                           │                                         │
│  ┌──────────────────────┐ │  ┌─────────────────────────────────┐   │
│  │ 🔍 Recherche...      │ │  │         PANIER                  │   │
│  └──────────────────────┘ │  ├─────────────────────────────────┤   │
│                           │  │ Article 1          2 x 25,00€   │   │
│  ┌─────┬─────┬─────┬────┐│  │ Article 2          1 x 15,00€   │   │
│  │ Cat1│ Cat2│ Cat3│Cat4││  │ Remise -10%           -5,00€    │   │
│  └─────┴─────┴─────┴────┘│  ├─────────────────────────────────┤   │
│                           │  │                                 │   │
│  ┌─────┬─────┬─────┬────┐│  │ Sous-total HT         54,17€    │   │
│  │Prod1│Prod2│Prod3│Prod4│  │ TVA 20%               10,83€    │   │
│  ├─────┼─────┼─────┼────┤│  │                                 │   │
│  │Prod5│Prod6│Prod7│Prod8│  │ ══════════════════════════════  │   │
│  ├─────┼─────┼─────┼────┤│  │ TOTAL TTC             65,00€    │   │
│  │Prod9│Pr10 │Pr11 │Pr12││  │                                 │   │
│  └─────┴─────┴─────┴────┘│  ├─────────────────────────────────┤   │
│                           │  │  [💵]  [💳]  [🎫]  [📋]         │   │
│  [◀ Page 1/3 ▶]          │  │  ESP.   CB   CHQ   AUTRE        │   │
│                           │  └─────────────────────────────────┘   │
│                           │                                         │
│  ┌─────────────────────────────────────────────────────────────┐   │
│  │ [F2 Produit] [F4 Remise] [F8 Attente] [F11 Annuler] [F12 OK]│   │
│  └─────────────────────────────────────────────────────────────┘   │
│                                                                     │
└─────────────────────────────────────────────────────────────────────┘
```

---

## 7. Système d'Installation

### 7.1 Processus Wizard

```
┌─────────────────────────────────────────────────────────────────────┐
│                    ASSISTANT D'INSTALLATION                          │
├─────────────────────────────────────────────────────────────────────┤
│                                                                     │
│  ÉTAPE 1/6 : Vérification Prérequis                                 │
│  ├── PHP 8.2+ .......................... ✅                         │
│  ├── Extensions requises ............... ✅                         │
│  ├── Permissions dossiers .............. ✅                         │
│  └── SSL/HTTPS ......................... ✅                         │
│                                                                     │
│  ÉTAPE 2/6 : Configuration Base de Données                          │
│  ├── Hôte MySQL                                                     │
│  ├── Nom de la base                                                 │
│  ├── Utilisateur                                                    │
│  └── Mot de passe                                                   │
│                                                                     │
│  ÉTAPE 3/6 : Informations Entreprise                                │
│  ├── Raison sociale                                                 │
│  ├── SIRET                                                          │
│  ├── Adresse                                                        │
│  └── Logo                                                           │
│                                                                     │
│  ÉTAPE 4/6 : Compte Administrateur                                  │
│  ├── Email                                                          │
│  ├── Mot de passe                                                   │
│  └── Code PIN caisse                                                │
│                                                                     │
│  ÉTAPE 5/6 : Configuration Sécurité                                 │
│  ├── Génération clé de signature                                    │
│  ├── Configuration certificat                                       │
│  └── Paramètres de sauvegarde                                       │
│                                                                     │
│  ÉTAPE 6/6 : Finalisation                                           │
│  ├── Création des tables                                            │
│  ├── Import données initiales                                       │
│  ├── Test de connexion                                              │
│  └── Suppression dossier /install                                   │
│                                                                     │
│  [◀ Précédent]                              [Suivant ▶]             │
│                                                                     │
└─────────────────────────────────────────────────────────────────────┘
```

### 7.2 Vérifications Automatiques

```php
// Liste des vérifications pré-installation
$checks = [
    'php_version'     => version_compare(PHP_VERSION, '8.2.0', '>='),
    'ext_openssl'     => extension_loaded('openssl'),
    'ext_pdo_mysql'   => extension_loaded('pdo_mysql'),
    'ext_mbstring'    => extension_loaded('mbstring'),
    'ext_gd'          => extension_loaded('gd'),
    'ext_json'        => extension_loaded('json'),
    'ext_zip'         => extension_loaded('zip'),
    'ext_xml'         => extension_loaded('xml'),
    'ext_curl'        => extension_loaded('curl'),
    'writable_config' => is_writable(__DIR__ . '/../config'),
    'writable_storage'=> is_writable(__DIR__ . '/../storage'),
    'https_enabled'   => isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on',
];
```

---

## 8. Structure des Données

### 8.1 Schéma de Base de Données

```sql
-- Voir fichier database/schema.sql pour le schéma complet

-- Tables principales:
-- - users              : Utilisateurs et authentification
-- - companies          : Informations entreprise
-- - terminals          : Terminaux de caisse
-- - cash_sessions      : Sessions de caisse (ouverture/fermeture)
-- - products           : Catalogue produits
-- - product_variants   : Variantes (taille, couleur)
-- - categories         : Catégories de produits
-- - customers          : Fichier clients
-- - transactions       : Transactions signées
-- - transaction_items  : Lignes de transaction
-- - invoices           : Factures générées
-- - payments           : Paiements (peut être multiple par transaction)
-- - promotions         : Promotions et remises
-- - stock_movements    : Mouvements de stock
-- - jet_audit_log      : Journal d'événements techniques
-- - archives           : Index des archives périodiques
```

### 8.2 Relations Principales

```
┌─────────────────────────────────────────────────────────────────────┐
│                    MODÈLE RELATIONNEL                                │
├─────────────────────────────────────────────────────────────────────┤
│                                                                     │
│  users ─────────┬───────────── cash_sessions                        │
│                 │                    │                              │
│                 │                    ▼                              │
│                 └──────────── transactions ◄──── customers          │
│                                    │                                │
│                                    ▼                                │
│  products ◄───── transaction_items                                  │
│     │                              │                                │
│     ▼                              ▼                                │
│  product_variants            payments                               │
│     │                                                               │
│     ▼                                                               │
│  stock_movements                                                    │
│                                                                     │
│  Toutes les transactions ──────▶ jet_audit_log                      │
│                                                                     │
└─────────────────────────────────────────────────────────────────────┘
```

---

## 9. API et Intégrations

### 9.1 API REST Interne

```yaml
Endpoints:
  # Authentification
  POST   /api/auth/login
  POST   /api/auth/logout
  POST   /api/auth/refresh

  # Produits
  GET    /api/products
  GET    /api/products/{id}
  GET    /api/products/barcode/{code}
  POST   /api/products
  PUT    /api/products/{id}

  # Transactions
  GET    /api/transactions
  GET    /api/transactions/{id}
  POST   /api/transactions

  # Caisse
  POST   /api/cash/open
  POST   /api/cash/close
  GET    /api/cash/status

  # Rapports
  GET    /api/reports/daily
  GET    /api/reports/z-ticket/{date}
  GET    /api/reports/sales
```

### 9.2 Intégrations Externes Possibles

| Intégration | Usage | Priorité |
|-------------|-------|----------|
| TPE (Ingenico, Verifone) | Paiement CB | Haute |
| Imprimante thermique | Tickets | Haute |
| Tiroir-caisse | Ouverture auto | Moyenne |
| Comptabilité (Sage, EBP) | Export | Moyenne |
| E-commerce (WooCommerce) | Sync stock | Basse |
| Balance connectée | Pesée | Basse |

---

## 10. Livrables et Phases

### 10.1 Phase 1 - Foundation (MVP)

- [x] Architecture et structure de dossiers
- [x] Système d'installation Wizard
- [x] Schéma de base de données
- [x] Authentification utilisateurs
- [x] Service de signature cryptographique
- [ ] Interface de caisse basique
- [ ] Génération de tickets

### 10.2 Phase 2 - Core Features

- [ ] Gestion complète du catalogue
- [ ] Système de variantes produits
- [ ] Gestion des promotions
- [ ] Génération factures PDF A4
- [ ] Ticket Z et clôtures
- [ ] Export archives XML

### 10.3 Phase 3 - Advanced

- [ ] Gestion multi-utilisateurs avancée
- [ ] Rapports et statistiques
- [ ] Mode hors-ligne
- [ ] Intégration TPE
- [ ] API complète

### 10.4 Phase 4 - Certification

- [ ] Audit de conformité NF525
- [ ] Tests de sécurité
- [ ] Documentation technique
- [ ] Procédure de certification

---

## Annexes

### A. Glossaire

| Terme | Définition |
|-------|------------|
| **CGI** | Code Général des Impôts |
| **JET** | Journal d'Événements Techniques |
| **NF525** | Norme française pour les systèmes de caisse |
| **Ticket Z** | Rapport de clôture journalière |
| **TVA** | Taxe sur la Valeur Ajoutée |
| **SIRET** | Système d'Identification du Répertoire des Établissements |

### B. Références

- [BOI-TVA-DECLA-30-10-30](https://bofip.impots.gouv.fr/) - Bulletin Officiel des Finances Publiques
- [NF525 - AFNOR](https://certification.afnor.org/) - Référentiel de certification
- [LNE](https://www.lne.fr/) - Laboratoire National de Métrologie et d'Essais

---

*Document généré le 05/01/2025 - Version 1.0.0*
