<?php

declare(strict_types=1);

namespace App\Shared\Domain\Security;

/**
 * Codes des roles METIER MALIO partages entre modules.
 *
 * Distincts des roles SYSTEME (cf. App\Module\Core\Domain\Security\SystemRoles :
 * `admin` / `user`). Un role metier porte une intention fonctionnelle (poste de
 * travail) et conditionne certaines regles de gestion au-dela des permissions
 * RBAC pures — ex : RG-1.04 du M1 Clients rend l'onglet Information obligatoire
 * pour le seul role Commerciale, alors que Commerciale et Bureau partagent les
 * memes permissions (commercial.clients.view + manage, cf. spec-back M1 § 5.2).
 *
 * Ces constantes vivent dans Shared (et non dans un module) pour que :
 *  - le seed des roles cote Core (ERP-74) reference le meme code sans importer
 *    une constante du module Commercial (regle ABSOLUE n°1 : pas d'import
 *    inter-modules) ;
 *  - le ClientProcessor (module Commercial) detecte le role Commerciale via ce
 *    meme code, sans dependre de Core.
 *
 * Coordination stack M1 :
 *  - ERP-74 seede le role `commerciale` avec ce code exact.
 *  - ERP-59 / ERP-60 (declaration RBAC + tests personas) le reutilisent.
 *  - ERP-55 (ici) ne fait que le REFERENCER : tant qu'aucun user ne porte le
 *    role `commerciale`, la validation de completude Information reste dormante.
 */
final class BusinessRoles
{
    /**
     * Role metier « Commerciale » — code de Role RBAC (champ Role::code,
     * snake_case impose par la regex Role). Conditionne RG-1.04.
     */
    public const string COMMERCIALE = 'commerciale';

    private function __construct()
    {
        // Classe de constantes : non instanciable.
    }
}
