# DCG - Dossier de Conception Générale Arpelin

### 1. Objectif du document

Ce document a pour but de présenter l'architecture globale du CMS Arpelin, son environnement technique, sa cartographie fonctionnelle, et les éléments ayant un impact sur la conformité NF525 - Logiciel Gestion de l'Encaissement.

Le DCG constitue le référentiel technique du logiciel Arpelin dans le cadre de la certification NF525, conformément aux exigences du paragraphe 4.3.1 du référentiel.

***

### 2. Présentation d'Arpelin

#### 2.1. Description générale

Arpelin est un CMS (Content Management System) cloud, accessible via navigateur web, permettant à tout client de créer et gérer un site web sans installation locale. Le CMS est entièrement hébergé sur un VPS maintenu par l'éditeur.

#### 2.2. Positionnement fonctionnel

Arpelin combine les fonctionnalités d'un CMS traditionnel avec des modules de commerce électronique et de gestion de caisse conformes NF525 :

* Création et gestion de contenu web
* Boutique en ligne avec paiement sécurisé
* Caisse enregistreuse web
* Bornes de commande automatisées
* Gestion complète des encaissements

#### 2.3. Modèle de distribution

* **Hébergement** : SaaS (Software as a Service)
* **Accès** : Interface web sécurisée HTTPS
* **Maintenance** : Centralisée par l'éditeur
* **Déploiement** : Mutualisé avec isolation des données clients

***

### 3. Environnement technique

#### 3.1. Infrastructure d'hébergement

* **Hébergeur** : OVH SAS
* **Type** : VPS dédié
* **Système d'exploitation** : Ubuntu 24.04.2 LTS (GNU/Linux 6.8.0-60-generic x86\_64)
* **Architecture** : x86\_64

#### 3.2. Stack technique

* **Serveur web** : Nginx 1.24
* **Langage serveur** : PHP 8.3
* **Base de données** : MariaDB 10.11.13 (MySQL compatible)
* **Chiffrement** : HTTPS/TLS obligatoire
* **Gestion de version** : Git local

#### 3.3. Architecture mutualisée

Tous les clients partagent un répertoire de code commun (CMS), les données clients sont isolées logiquement par base de données MySQL séparée. Chaque client dispose :

* D'une base de données dédiée avec identifiant propre
* D'un répertoire d'assets personnalisés
* D'un accès conditionné par nom de domaine
* D'une séparation stricte des données utilisateurs
* D'une traçabilité complète des actions dans chaque instance

***

### 4. Architecture détaillée

#### 4.1. Structure des répertoires

```
/var/www/
├── _main/              ← Code CMS commun (versionné Git)
│   ├── core/           ← Fonctions principales
│   ├── modules/        ← Modules fonctionnels
│   ├── themes/         ← Templates d'affichage
│   └── api/            ← Interfaces API
├── _files/             ← Scripts privés PHP (versionné Git)
│   ├── config/         ← Configurations système
│   ├── security/       ← Fonctions sécurité
│   ├── database/       ← Accès base de données
│   └── payments/       ← Gestion paiements
├── cms_client1/        ← Instance client 1
│   ├── index.php       ← Point d'entrée
│   ├── images/         ← Fichiers client
│   └── pages/          ← Pages personnalisées créées
├── cms_client2/        ← Instance client 2
└── .git/               ← Dépôt Git (gestion versions)
```

#### 4.2. Architecture réseau

```
Internet
    ↓ HTTPS/TLS
[Nginx Load Balancer]
    ↓
[PHP-FPM 8.3]
    ↓
[MariaDB 10.11]
    ↓
[Stockage VPS OVH]
```

#### 4.3. Bases de données

* **Convention nommage** : `cms_domaine-client_fr`, `cms_domaine-client2_com`, `cms_domaine-clientX_org`
* **Taille type** : \~5 MB par client actif
* **Accès** : Résolution automatique via domaine appelé
* **Isolation** : Base dédiée par client, pas de données partagées
* **Sauvegarde** : Dump SQL quotidien de chaque base

***

### 5. Cartographie fonctionnelle

#### 5.1. Modules principaux

**5.1.1. Gestion du contenu**

* Création de pages statiques et dynamiques
* Gestion des menus de navigation
* Édition de blocs de contenu
* Gestion des médias (images, documents)
* Optimisation SEO intégrée

**5.1.2. Gestion des utilisateurs**

* Système d'authentification sécurisé
* Gestion des rôles et permissions
* Mode invité pour navigation publique
* Sessions sécurisées (8 heures)

**5.1.3. Commerce électronique**

* **Réservation en ligne** : Système de booking
* **Commande en ligne** : Intégration Stripe/Stancer/Offline
* **Gestion des articles** : Catalogue produits
* **Panier dynamique** : Gestion temps réel

**5.1.4. Paramétrage général**

* Configuration de l'identité visuelle (logo, couleurs)
* Gestion de l'identification de l'entreprise
* Paramètres SEO avancés
* Configuration des moyens de paiement

**5.1.5. Statistiques et reporting**

* Statistiques des ventes en temps réel
* Rapports de performance

#### 5.2. Modules conformes NF525

**5.2.1. Caisse enregistreuse web ⭐**

* Interface caissier intuitive
* Calcul automatique TVA (défini au préalable sur les articles)
* Génération tickets horodatés
* Gestion moyens de paiement multiples
* Traçabilité complète des transactions

**5.2.2. Clôtures de caisse ⭐**

* **Clôtures automatiques** : Programmées (quotidiennes, mensuelles, anuelles)
* **Clôtures manuelles** : À la demande du manager ou de l'administrateur (sur période personnalisée)
* Récapitulatifs détaillés par période
* Archivage automatique des données

**5.2.3. Bornes de commande ⭐**

* Interface client autonome
* Intégration avec la caisse centrale
* Validation automatique des commandes
* Synchronisation temps réel

***

### 6. Performances et Dimensionnement

#### 6.1. Capacité serveur

* **Clients simultanés maximum** : 50 par VPS
* **Sessions PHP** : Durée de vie 8 heures
* **Architecture** : Scalable horizontalement (ajout VPS supplémentaires)
* **Temps de réponse** : < 2 secondes pour les opérations courantes

#### 6.2. Dimensionnement base de données

* **Taille moyenne par client** : \~5 MB (client type avec quelques mois d'activité)
* **Isolation** : Une base de données MySQL dédiée par client
* **Croissance estimée** : Variable selon activité client
* **Optimisation** : Index sur tables critiques (transactions, logs, closures)

#### 6.3. Métriques de référence

* **Client type** : 4.77 MB (activité e-commerce quelques mois)
* **Capacité VPS** : 50 clients simultanés maximum
* **Temps session** : 8 heures pour maintenir continuité caisse
* **Rétention backup** : 7 jours (conformité opérationnelle)

***

### 7. Sauvegarde et Continuité

#### 7.1. Stratégie de sauvegarde

* **Fréquence** : Quotidienne via script cron automatisé
* **Contenu** : Données clients (bases MySQL) + pages créées + images importées
* **Rétention** : 7 jours glissants
* **Localisation** : VPS OVH (stockage local sécurisé)
* **Format** : Dumps SQL compressés + archive fichiers

#### 7.2. Procédure de restauration

* **Méthode** : Import manuel des dumps SQL de sauvegarde
* **Temps de restauration** : Selon taille base client (quelques minutes)
* **Validation** : Vérification fonctionnelle post-restauration
* **Documentation** : Procédure détaillée disponible
* **Tests** : Validation mensuelle des sauvegardes

#### 7.3. Plan de continuité

* **RTO** (Recovery Time Objective) : 4 heures maximum
* **RPO** (Recovery Point Objective) : 24 heures maximum
* **Escalade** : Contact éditeur 24h/24 en cas d'urgence
* **Communication** : Information clients via canaux dédiés

***

### 8. Sécurité et Monitoring

#### 8.1. Authentification et accès

* **HTTPS** : Certificat SSL/TLS obligatoire pour tous les accès
* **Authentification** : Mot de passe sécurisé par client/caissier
* **Sessions** : Durée 8h avec régénération automatique
* **Accès base** : Accès distant possible avec identifiants phpMyAdmin
* **Chiffrement** : Données sensibles chiffrées en base

#### 8.2. Isolation des données

* **Séparation physique** : Base MySQL dédiée par client
* **Accès conditionnel** : Résolution par nom de domaine
* **Logs d'audit** : Traçabilité complète dans table 'logs'
* **Permissions** : Droits granulaires par utilisateur
* **Conformité RGPD** : Gestion des données personnelles

#### 8.3. Monitoring et surveillance

* **Charge serveur** : Surveillance via htop (ligne de commande)
* **Base de données** : Monitoring via interface phpMyAdmin
* **Logs système** : Centralisation et analyse
* **Alertes** : Surveillance manuelle de la performance, e-mail reçu lorsque stockage VPS presque plein
* **Maintenance** : Intervention réactive selon besoins

***

### 9. Modèle conceptuel de données

#### 9.1. Tables principales

| Table                   | Description                                   | Rôle NF525              |
| ----------------------- | --------------------------------------------- | ----------------------- |
| **Users**               | Gestion des utilisateurs et caissiers         | Traçabilité des actions |
| **Commandes**           | Intentions de paiement (payées et non payées) | Base des transactions   |
| **Transactions** ⭐      | Commandes validées et archivées               | **Données certifiées**  |
| **Totals**              | Total perpétuel des encaissements             | Contrôle de cohérence   |
| **Panier\_utilisateur** | Paniers en cours (caissiers et clients)       | Gestion temps réel      |
| **Logs** ⭐              | Historique des modifications et suppressions  | **Audit NF525**         |
| **Closures** ⭐          | Clôtures manuelles et automatiques            | **Archivage NF525**     |
| **Categories**          | Catégories des articles                       | Organisation catalogue  |
| **Articles**            | Catalogue produits et services                | Base commerciale        |
| **Archives** ⭐          | Références des archives créées sur VPS        | **Traçabilité NF525**   |

#### 9.2. Relations critiques NF525

```
Articles → Panier_utilisateur → Commandes → Transactions
                                      ↓
                                  Logs (audit)
                                      ↓
                                  Closures → Archives
```

#### 9.3. Contraintes d'intégrité

* **Transactions** : Non modifiables après validation
* **Logs** : Ajout uniquement (pas de modification/suppression)
* **Closures** : Horodatage automatique et figé
* **Archives** : Références immuables des fichiers générés

***

### 10. Gestion des flux d'interfaces

#### 10.1. Interfaces externes

Le CMS Arpelin ne expose pas d'API publique, mais communique avec :

* **Stripe API** : Paiements par carte bancaire en ligne.
* **Stancer API** : Paiements par carte bancaire en ligne.
* **Sumup** : Paiements par carte bancaire en personne.
* **Smile\&Pay** : Paiements par carte bancaire en personne.
* **Webhooks** : Retours automatiques de validation

#### 10.2. Flux d'échange sécurisés

Tous les flux d'échange sont journalisés :

* Validation de commande
* Confirmation de paiement
* Retour webhook des passerelles
* Mise à jour statuts en base client

#### 10.3. Format des données

* **API REST** : JSON pour les échanges
* **Chiffrement** : HTTPS/TLS pour tous les flux
* **Authentification** : Clés API sécurisées
* **Logs** : Horodatage et traçabilité complète

***

### 11. Modules impactés par la conformité NF525

#### 11.1. Périmètre de certification ⭐

**Caisse enregistreuse web**

* Génération automatique de tickets numérotés et horodatés
* Tickets non modifiables après validation
* Traçabilité complète des opérations
* Gestion TVA automatique et conforme

**Bornes de commande**

* Intégration avec la caisse centrale
* Processus de validation identique
* Archivage selon même processus
* Synchronisation temps réel des données

#### 11.2. Exigences respectées

Ces modules sont soumis aux exigences de :

* **Traçabilité** : Table logs + horodatage
* **Inaltérabilité** : Données figées post-validation
* **Clôture** : Automatique et manuelle
* **Archivage** : Conservation données conformément à la réglementation

#### 11.3. Processus de conformité

1. **Encaissement** → Enregistrement table transactions
2. **Validation** → Génération ticket horodaté
3. **Archivage** → Stockage immutable
4. **Clôture** → Récapitulatif période + archive
5. **Audit** → Accès logs complets via table logs et JET

***

### 12. Évolutions et Maintenance

#### 12.1. Gestion des versions

* **Git** : Versioning du code source (\_main et \_files)
* **Tags** : Versions stables horodatées
* **Déploiement** : Mise à jour centralisée
* **Rollback** : Retour version antérieure possible

#### 12.2. Maintenance préventive

* **Mises à jour sécurité** : Automatiques (OS, PHP)
* **Optimisation base** : Mensuelle
* **Nettoyage logs** : Selon politique rétention
* **Tests fonctionnels** : Avant chaque déploiement

#### 12.3. Support et évolutions

* **Hotline** : Support technique dédié
* **Évolutions** : Roadmap produit documentée
* **Formation** : Accompagnement utilisateurs par téléphone, sur place ou via des vidéos tutoriels
* **Documentation** : Mise à jour continue

***

### 13. Conformité et Audit

#### 13.1. Traçabilité NF525

* **Logs complets** : Toutes actions tracées
* **Horodatage** : Précision à la seconde
* **Immutabilité** : Données figées après validation
* **Archivage** : Conservation réglementaire

#### 13.2. Procédures d'audit

* **Accès données** : Via interface dédiée
* **Extraction** : Exports conformes aux standards (Jet .CSV)
* **Vérification** : Cohérence données garantie via empreinte numérique et contrôle intégrité
* **Documentation** : Procédures formalisées

#### 13.3. Mise à disposition administration

En cas de contrôle fiscal ou demande administrative :

* **Documentation technique** : DCG complet
* **Accès aux données** : Via outils d'extraction
* **Logs d'audit** : Historique complet disponible
* **Support** : Accompagnement procédures

## 🏛️ Mapping R13 pour la table "transactions" (ventes réalisées) - Documentation de conformité INFOCERT

**Correspondance entre le dictionnaire R13 v4.2 et l'implémentation logiciel Arpelin**

***

### 📊 Légende

| Statut     | Description              |
| ---------- | ------------------------ |
| ✅ CONFORME | Entièrement implémenté   |
| ⚠️ PARTIEL | Partiellement implémenté |
| ➖ N/A      | Non applicable           |

***

### 📋 6.1.1 - DONNÉES D'EN-TÊTE

| N°   | Champ R13                      | Label FIDELE    | Champ logiciel               | Table/Source        | Statut     | Commentaire                       |
| ---- | ------------------------------ | --------------- | ---------------------------- | ------------------- | ---------- | --------------------------------- |
| 1    | Identifiant unique de pièce    | ENC-NID         | `id`                         | transactions        | ✅ CONFORME | Auto-incrémenté                   |
| 2    | Numéro unique de pièce         | ENC-TIK-NUM     | `numero_ticket`              | transactions        | ✅ CONFORME | Format T000001                    |
| 5    | Version du logiciel            | ENC-TIK-TAG-VER | `version_logiciel`           | transactions        | ✅ CONFORME | Figée au moment de la transaction |
| 6    | Nombre d'impressions           | ENC-TIK-PRN-NBR | `nb_impressions_panier`      | transactions        | ✅ CONFORME | Incrémenté automatiquement        |
| 7    | Nom de l'émetteur              | ENC-TIK-SOC-ETS | `ticket_prestataire`         | transactions/config | ✅ CONFORME | Configuration globale             |
| 9-12 | Adresse de l'émetteur          | ENC-TIK-SOC-ADR | `ticket_adresse_ligne_1/2/3` | transactions/config | ✅ CONFORME | Adresse complète                  |
| 13   | SIRET de l'émetteur            | ENC-TIK-SOC-SIR | `ticket_siret`               | transactions/config | ✅ CONFORME | SIRET complet                     |
| 23   | Date et heure d'enregistrement | ENC-TIK-HOR-GDH | `date_heure_enregistrement`  | transactions        | ✅ CONFORME | Format AAAAMMJJHHMMSS             |
| 24   | Type d'opération               | ENC-OPE-TYP     | `type_operation`             | transactions        | ✅ CONFORME | VENTE par défaut                  |
| 25   | Type de document               | ENC-TIK-DOC-TYP | `type_document`              | transactions        | ✅ CONFORME | TICKET par défaut                 |
| 29   | Signature Électronique         | ENC-TIK-TAG-SIG | `signature`                  | transactions        | ✅ CONFORME | Base64URL                         |
| 31   | Restitution Signature          | ENC-TIK-TAG-RET | `extrait_signature`          | transactions        | ✅ CONFORME | Positions 3,7,13,19               |
| 32   | Hash/condensat                 | ENC-TIK-HASH    | `current_hash`               | transactions        | ✅ CONFORME | SHA-256                           |
| 33   | Chaîne avant hash              | ENC-TIK-ARG     | `chaine_hash`                | transactions        | ✅ CONFORME | Chaîne complète stockée           |

***

### 📝 6.1.2 - DONNÉES DES LIGNES

| N° | Champ R13              | Label FIDELE        | Champ logiciel    | Table/Source | Statut     | Commentaire                  |
| -- | ---------------------- | ------------------- | ----------------- | ------------ | ---------- | ---------------------------- |
| 5  | Désignation du produit | ENC-TIK-LIG-PRO-LIB | `nom_article`     | transactions | ✅ CONFORME | Nom complet de l'article     |
| 6  | Quantité du produit    | ENC-TIK-LIG-PROQTE  | `quantite`        | transactions | ✅ CONFORME | Entier                       |
| 7  | Code TVA               | ENC-TIK-LIG-TAXNID  | `code_tva`        | transactions | ✅ CONFORME | Format 4 chiffres (ex: 2000) |
| 8  | Taux TVA               | ENC-TIK-LIG-TAXTXX  | `tva`             | transactions | ✅ CONFORME | Décimal (ex: 20.00)          |
| 11 | Prix unitaire HT       | ENC-TIK-LIG-PROMHT  | `prix_article_ht` | transactions | ✅ CONFORME | Calculé et stocké            |
| 12 | Prix unitaire TTC      | ENC-TIK-LIG-PROTTC  | `prix_article`    | transactions | ✅ CONFORME | Prix de vente                |
| 16 | Total HT               | ENC-TIK-LIG-TOTMHT  | `sous_total_ht`   | transactions | ✅ CONFORME | Quantité × Prix HT           |
| 17 | Total TTC              | ENC-TIK-LIG-TOTTTC  | `sous_total`      | transactions | ✅ CONFORME | Quantité × Prix TTC          |

***

### 🧮 6.1.3 - DONNÉES RÉCAPITULATIVES

| N°  | Champ R13             | Label FIDELE    | Champ logiciel     | Table/Source | Statut     | Commentaire                  |
| --- | --------------------- | --------------- | ------------------ | ------------ | ---------- | ---------------------------- |
| 3   | Total HT de la pièce  | ENC-TIK-TOT-MHT | `total_ht_ticket`  | transactions | ✅ CONFORME | Somme des HT                 |
| 4   | Total TTC de la pièce | ENC-TIK-TOT-TTC | `total_ttc_ticket` | transactions | ✅ CONFORME | Somme des TTC                |
| 3-6 | Récap par taux TVA    | ENC-TIK-TVA-\*  | `ventilation_tva`  | transactions | ✅ CONFORME | Format: 2000:3600\|1000:2200 |

***

### 💳 6.1.4 - DONNÉES DE RÈGLEMENTS

| N°  | Champ R13            | Label FIDELE    | Champ logiciel   | Table/Source | Statut     | Commentaire             |
| --- | -------------------- | --------------- | ---------------- | ------------ | ---------- | ----------------------- |
| 3-4 | Mode de règlement    | ENC-TIK-REG-TYP | `payment_method` | transactions | ✅ CONFORME | Format: Méthode:Montant |
| 6   | Montant du règlement | ENC-TIK-REG-MTN | `sous_total`     | transactions | ✅ CONFORME | Montant total payé      |

***

### 🔄 6.2 - TRAÇABILITÉ DES DUPLICATAS

| N° | Champ R13                 | Label FIDELE   | Champ logiciel             | Table/Source | Statut     | Commentaire                       |
| -- | ------------------------- | -------------- | -------------------------- | ------------ | ---------- | --------------------------------- |
| 4  | Numéro de réimpression    | ENC-DUP-PRNNUM | `nb_impressions_panier`    | transactions | ✅ CONFORME | Incrémenté à chaque impression    |
| 6  | Date d'émission duplicata | ENC-DUP-HORGDH | `date_derniere_impression` | transactions | ✅ CONFORME | Horodatage de dernière impression |

***

### 📊 6.3 - GRANDS TOTAUX PERPÉTUELS

| N° | Champ R13                              | Label FIDELE    | Champ logiciel    | Table/Source | Statut     | Commentaire                       |
| -- | -------------------------------------- | --------------- | ----------------- | ------------ | ---------- | --------------------------------- |
| 7  | Grand Total Perpétuel Cumul Algébrique | ENC-GTT-PER-TTC | `perpetual_total` | totals       | ✅ CONFORME | GTPCA - Mis à jour à chaque vente |

***

### 🔒 7. DONNÉES CONSTITUTIVES DE LA SIGNATURE ÉLECTRONIQUE

| Position | Champ R13                              | Label FIDELE       | Implémentation        | Statut     | Commentaire                   |
| -------- | -------------------------------------- | ------------------ | --------------------- | ---------- | ----------------------------- |
| 1        | Montants HT/TTC ventilés par taux TVA  | TAG-TIK-TOT-TTCTVA | `$ventilation_tva`    | ✅ CONFORME | Format: 2000:3600\|1000:2200  |
| 2        | Montant Total de l'opération           | TAG-TIK-TOT-TTC    | `$total_centimes`     | ✅ CONFORME | En centimes sans décimale     |
| 3        | Date et Heure enregistrement           | TAG-TIK-HOR-GDH    | `$date_heure`         | ✅ CONFORME | Format AAAAMMJJHHMMSS         |
| 4        | Numéro de la pièce                     | TAG-TIK-NUM        | `$numero_piece`       | ✅ CONFORME | Format T000001                |
| 5        | Type d'opération                       | TAG-TIK-OPE-TYP    | `$type_operation`     | ✅ CONFORME | VENTE par défaut              |
| 6        | Indication report signature précédente | TAG-TIK-OEN        | `$report_signature`   | ✅ CONFORME | N (première) ou O (suivantes) |
| 7        | Signature précédente                   | TAG-TIK-SIG        | `$previous_signature` | ✅ CONFORME | Chaînage des signatures       |

***

### 📝 CODES ÉVÉNEMENTS JET (R19)

| Code | Événement R19           | Implémentation                                                        | Fonction utilisée                | Statut     |
| ---- | ----------------------- | --------------------------------------------------------------------- | -------------------------------- | ---------- |
| 80   | Démarrage session       | `insertLog($conn, $user_id, "Début session paiement", 80, $role)`     | Début transformation note→ticket | ✅ CONFORME |
| 100  | Début fonction spéciale | `insertLog($conn, $user_id, "Début transformation note", 100, $role)` | Début génération ticket          | ✅ CONFORME |
| 105  | Fin fonction spéciale   | `insertLog($conn, $user_id, "Fin transformation", 105, $role)`        | Fin génération ticket            | ✅ CONFORME |

***

### 📋 Résumé de conformité

* **Total des exigences mappées**: 34
* **Conformes**: 34 (100%)
* **Partielles**: 0 (0%)
* **Non applicables**: 0 (0%)

#### 🎯 Points clés de l'implémentation

1. **Signature électronique** : Implémentation complète du chaînage des signatures avec SHA-256
2. **Traçabilité** : Gestion des duplicatas et du Grand Total Perpétuel Cumul Algébrique (GTPCA)
3. **Événements JET** : Logging complet des codes R19 pour l'audit
4. **Données fiscales** : Ventilation TVA conforme au format requis

#### 📚 Références

* **R13 v4.2** : Dictionnaire INFOCERT pour les logiciels de caisse
* **NF525** : Norme française pour les logiciels de gestion de l'encaissement
* **Logiciel** : Arpelin - Version certifiée

***

*Document établi dans le cadre de la certification NF525*\
\&#xNAN;*Version : 2.0*\
\&#xNAN;*Responsable : Emre KOSE*


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://arpelin.gitbook.io/arpelin/nf525/dcg-dossier-de-conception-generale-arpelin.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
