Files
Cleo/docs/RULES.md
pierre a4d1c22a93 feat(v2.0.3): Marchés hybrides et améliorations multiples
Fonctionnalités principales :

1. Marchés hybrides - Onglet Mercurial
   - Ajout onglet Mercurial avec style distinct (vert, gras, blanc)
   - Affichage des produits mercuriaux pour marchés hybrides
   - Filtrage automatique des produits "Hors Marché 999"
   - Documentation Phase 2 avec CAS 1 et CAS 2 de marchés hybrides
   - Règles métier pour validation différenciée (devis 100% mercurial vs mixte)

2. Corrections bugs
   - Fix flag chkChange sur onglet "Sélection Produits" (callback asynchrone)
   - Plus d'alerte intempestive après sauvegarde des produits

3. Outils de déploiement
   - Nouveau script deploy-file.sh pour déploiement unitaire (DEV/PROD)
   - Amélioration deploy-cleo.sh

4. Gestion multi-contacts (v2.0.3)
   - Contrôleur AJAX cjxcontacts.php
   - Script migration clients_contacts
   - Documentation complète

5. Documentation
   - Mise à jour TODO.md avec Phase 2 marchés hybrides
   - Mise à jour README.md v2.0.3
   - Ajout RULES.md
   - Ajout migration_clients_contacts.sql

6. Nettoyage
   - Suppression fichiers obsolètes (conf_new.php, conf_old.php, uof_linet_20250911.sql)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-05 15:40:06 +01:00

4.3 KiB

Règles métier - Application CLEO

Ce document recense les règles métier et de développement identifiées dans l'application CLEO.

1. Gestion des rôles et permissions

1.1 Hiérarchie des rôles

  • DIR-CO (fk_role = 1) : Direction commerciale

    • Accès complet aux devis (propres + statut >= 2)
    • Vision globale de l'activité
  • DV (fk_role = 2) : Directeur des ventes

    • Accès à ses propres devis
    • Accès aux devis de ses RR subordonnés (statut >= 3)
    • Récupération des RR via fk_parent dans la table users
  • RR (fk_role = 3) : Responsable régional

    • Accès uniquement à ses propres devis
  • Admin (fk_role = 90) : Administration système

    • Accès complet à l'administration

1.2 Visibilité des devis (mdevis.php)

La clause WHERE pour filtrer les devis dépend du rôle :

  • DIR-CO : d.fk_user = :fkUser OR d.fk_statut_devis >= 2
  • DV : d.fk_user = :fkUser OR (d.fk_statut_devis >= 3 AND d.fk_user IN ([RR_IDS]))
  • RR : d.fk_user = :fkUser

2. Gestion des marchés et produits

2.1 Types de marchés

  • Marché standard : Contient ses propres produits uniquement
  • Marché hybride (chk_marche_hybride = 1) : Combine les produits du marché + produits du marché 999
  • Marché avec remise sur TG (chk_remise_sur_tg = 1) : Charge uniquement les produits du marché 999
  • Marché 999 : Marché "Hors marché" ou "Tarif général"

2.2 Chargement des produits (load_devis_marche_produits)

Type de marché chk_remise_sur_tg chk_marche_hybride Produits chargés
Spécifique 1 - Tous les produits du marché 999
Spécifique 0 0 Produits du marché uniquement
Spécifique 0 1 Produits du marché + produits du 999 non présents
999 (Hors marché) - - Tous les produits du marché 999

2.3 Terme "Purchasing"

Quand terme_achat = 'Purchasing' dans marches_listes :

  • Récupère les prix d'achat nets depuis le marché 999
  • Applique les paliers de remise du marché 999

3. Sécurité et développement

3.1 Accès base de données

  • Obligatoire : Utiliser la classe Database avec ses méthodes
  • Interdit : Appeler directement $db->prepare() sur l'objet Database
  • Méthodes disponibles :
    • $db->fetchAll($sql, $params) : Récupérer plusieurs lignes
    • $db->fetchOne($sql, $params) : Récupérer une ligne
    • $db->query($sql, $params) : Exécuter une requête
    • $db->lastInsertId() : Récupérer le dernier ID inséré

3.2 Protection contre les injections SQL

  • Utiliser intval() pour les entiers dans les requêtes non préparées
  • Utiliser nettoie_input() pour nettoyer les entrées utilisateur
  • Privilégier les requêtes préparées via la classe Database

3.3 Variables de sécurité

  • $cidSafe = intval($cid) : Version sécurisée pour les requêtes SQL
  • Attention lors de la modification de variables : recalculer ou utiliser directement intval()

4. Statuts des devis

4.1 Statuts principaux

  • 1 : En cours
  • 2 : Validé niveau 1
  • 3 : Validé niveau 2
  • 20 : Archivé

4.2 Réactivation des devis

  • Un devis archivé (statut 20) peut être réactivé (statut 1)
  • La réactivation est tracée dans devis_histo
  • Disponible selon les droits du rôle

5. Conventions de nommage

5.1 Fichiers

  • Contrôleurs : c*.php pour les standards, cjx*.php pour AJAX
  • Modèles : m*.php
  • Vues : v*.php

5.2 Tables de base de données

  • Tables principales : Nom simple (devis, clients, produits)
  • Tables de référence : Préfixe x_ (x_familles, x_statuts)
  • Tables système : Préfixe y_ (y_pages) ou z_ (z_logs, z_sessions)

6. Gestion des prix et marges

6.1 Prix nets

  • chk_prix_net = 1 : Prix non modifiable (marché hybride)
  • chk_prix_net = 0 : Prix modifiable avec marges

6.2 Paliers de remise

Les produits peuvent avoir jusqu'à 6 paliers de remise :

  • prc_discount_1 avec quantite_1
  • prc_discount_2 avec quantite_2
  • ... jusqu'à 6

Document créé le 16 septembre 2025 À mettre à jour au fur et à mesure des découvertes