Contrats
Contrats
Les contrats définissent les conditions dans lesquelles une organisation peut acheter, vendre, être facturée ou bénéficier de droits particuliers.
À quoi sert un contrat ?
| Fonction | Description |
|---|---|
| Autoriser | Ouvrir certains droits d'achat, de vente ou de gestion |
| Encadrer | Définir conditions, commissions, frais, dépôt, facturation |
| Relier | Associer une organisation, un shop, une vente ou un type d'activité |
| Contrôler | Servir de base aux vérifications avant publication ou facturation |
Cycle de vie fonctionnel
flowchart TD
draft["Contrat préparé"] --> review["Contrôle interne"]
review --> active{"Validé ?"}
active -->|Oui| actif["Contrat actif"]
active -->|Non| correction["Correction ou rejet"]
actif --> usage["Droits appliqués aux ventes, achats, factures"]
usage --> archive["Archivage ou remplacement"]
Actions possibles
| Action | Qui ? | Règle |
|---|---|---|
| Créer un contrat | Admin autorisé (SALES.CONTRACT.MANAGE, ou INTERNAL.TEMPLATE.MANAGE pour un modèle) | Un contrat non modèle est créé directement avec le statut Actif : il n'existe pas d'étape de validation ou d'« activation » séparée. Créer sur une organisation exige en plus ORGANISATION.ORGANISATION.MANAGE sur celle-ci. |
| Modifier | Admin autorisé | Certaines modifications peuvent impacter les droits existants |
| Désactiver / Expirer / Réactiver | Admin autorisé (SALES.CONTRACT.MANAGE ou INTERNAL.TEMPLATE.MANAGE) | Voir Effets des changements de statut |
| Archiver | Admin autorisé (SALES.CONTRACT.ARCHIVE pour un contrat non modèle, SALES.CONTRACT.MANAGE/INTERNAL.TEMPLATE.MANAGE pour un modèle) | Le contrat ne doit plus être utilisé pour de nouveaux droits |
| Consulter | Organisation concernée ou admin | Les informations confidentielles sont limitées |
Règles de gestion
- Les droits d'une session peuvent dépendre des contrats actifs.
- Une mise en vente self-service peut exiger un contrat actif. Voir Éligibilité au self-service.
- Certaines conditions financières doivent être présentes pour générer les factures.
- Un contrat template ne doit pas être confondu avec un contrat appliqué à une organisation. Voir Contrat modèle vs contrat non modèle.
- Une organisation parent peut transmettre certains droits seulement si cette transmission est prévue, via le transfert de contrat activé sur le contrat parent (
meta.childTransfer). Concrètement, la vérification d'appartenance organisation-contrat est alors contournée : n'importe quelle organisation de la hiérarchie visible (l'organisation courante et ses ancêtres) peut sélectionner ce contrat pour créer une annonce, pas seulement les organisations filles directes. - Les accès ouverts par un contrat se cochent dans son onglet « Accès », regroupés par thème; ils plafonnent ce que les utilisateurs de l'organisation peuvent obtenir. Voir Calcul des droits d'accès.
- Un « niveau d'accès » de contrat (
meta.accessLevel: Admin, Client, Partenaire, Vendeur) est distinct de l'arbre des clés d'accès. Le niveau Admin n'est sélectionnable que si l'organisation du contrat est l'organisation propriétaire du shop.
Contrat modèle vs contrat non modèle
Contrat modèle (isTemplate: true) | Contrat non modèle (isTemplate: false) | |
|---|---|---|
| Rattachement | Aucune organisation requise ; sert de gabarit | Rattaché obligatoirement à une organisation, reçoit une référence générée |
| Champs obligatoires à la création | Nom du modèle (meta.templateName), statut, shop(s) | Type de client, statut Actif, informations de vente complètes (contact commercial, contact support), mode de vente, organisation, shop(s), date de début |
| Droit de gestion requis | INTERNAL.TEMPLATE.MANAGE | SALES.CONTRACT.MANAGE |
| Droit d'archivage requis | INTERNAL.TEMPLATE.MANAGE | SALES.CONTRACT.ARCHIVE (distinct du droit de gestion) |
| Usage | Sert de source pour créer un contrat réel (report de la tarification, des autorisations, du mode de vente, etc.) ; ne peut pas être sélectionné pour mettre un lot en vente | Peut être sélectionné pour créer une annonce et porte les droits réels d'une organisation |
| Duplication | Duplique un autre modèle | Duplique un contrat réel (conserve previousContract comme référence à l'ancien) |
Un contrat non modèle peut garder une référence vers le modèle dont il est issu (meta.sourceTemplateShortId), utilisée notamment pour retrouver le libellé du modèle d'origine.
Éligibilité d'un lot au self-service
Un contrat n'est proposable pour créer/rattacher une annonce en self-service que si toutes ces conditions sont vraies :
| Condition | Détail |
|---|---|
| Shop | Le shop courant doit figurer dans shopShortIds du contrat |
| Statut | Le contrat doit être au statut Actif |
| Rôle | Le contrat doit être un contrat vendeur (customerType parmi Cessation, Public, Faillite, Société, Commerçant, Particulier) — les contrats acheteur sont exclus |
| Tarification | Le contrat doit porter au moins un bloc de tarification de type Vente (transactionType: SALE), sinon aucune ligne de prix n'est disponible |
| Organisation | L'organisation du contrat doit correspondre à l'organisation du vendeur, sauf si le transfert de contrat (meta.childTransfer) est activé |
Si le contrat sélectionné porte meta.self = true, l'annonce est marquée self-service (indexedMeta.saleInformation.selfService) et suit le workflow self-service (soumission directe possible en statut « à modifier », pas de validation de vente préalable côté back-office). Si meta.self est absent ou false, l'annonce suit le circuit de validation classique.
Exception : en mode impersonation (un admin agit pour le compte d'un vendeur), le self-service est toujours forcé à false, quelle que soit la valeur meta.self du contrat — un admin ne publie jamais en self-service au nom d'un tiers.
Restriction tarifaire par catégorie
Chaque bloc de tarification d'un contrat (meta.pricing[]) porte un champ categoryShortIds permettant, dans le formulaire d'édition, de restreindre visuellement ce bloc à certaines catégories de produits. Le calcul du frais standard appliqué à un lot (sélection du bloc de tarification, sélection de la ligne de palier), côté front, ne filtre pas par catégorie — seul le type du bloc (commission vendeur, frais acheteur, etc.) est utilisé pour retrouver le bloc à appliquer.
categoryShortIds est en revanche bien exploité côté backend, mais pour un calcul différent: le service de facturation (auctelia/book-keeper, buildCancellationInvoiceLines) l'utilise pour choisir le bloc de tarification à appliquer lors du calcul des frais d'annulation d'un lot — le bloc dont categoryShortIds contient la catégorie du lot est retenu; un bloc sans categoryShortIds (liste vide) s'applique à toutes les catégories, en repli. Ce filtre par catégorie ne s'applique donc pas au tarif de vente normal, seulement au calcul du frais d'annulation.
Tarification portée par le contrat (taux, commission, TVA)
Chaque bloc de tarification (meta.pricing[]) définit :
| Champ | Rôle |
|---|---|
type | Nature du frais : commission vendeur, frais de dossier vendeur, frais acheteur, frais de service, etc. |
chargeTo | Partie qui supporte le frais (vendeur / acheteur) |
transactionType | Vente ou prestation de service |
baseValues | Dimension(s) sur laquelle le bloc est tarifé : palier de prix (levels), pourcentage, montant fixe, ou tranche de facturation — détermine quelles colonnes des lignes de tarification sont actives |
pricingLines[] | Une ou plusieurs lignes tarifaires (paliers), chacune avec un seuil de déclenchement (start), un plancher/plafond (min/max) et un montant (fix et/ou percent) |
Calcul d'une ligne applicable pour un montant d'enchère donné : les lignes sont triées par seuil start décroissant, et la première dont le seuil est inférieur ou égal au montant est retenue (à défaut, la première ligne du bloc sert de repli). Le montant du frais est alors : pourcentage du montant si percent > 0, sinon montant fixe (fix), puis le résultat est borné par min et max de la ligne si définis.
Si la TVA vendeur (meta.sellerVat) est absente sur un contrat non modèle, TARS calcule une TVA par défaut à partir du pays de l'organisation, uniquement si celle-ci est une société assujettie à la TVA (type: COMPANY et subjectToVat: true) ; sinon la TVA par défaut est 0. Le taux appliqué provient d'une table de taux standard par pays (ex. FR 20 %, DE 19 %, BE 21 %, LU 17 %…), recalculée automatiquement quand l'organisation change sur le formulaire.
Effets des changements de statut (désactivation, expiration, réactivation)
| Action | Depuis | Effet |
|---|---|---|
| Désactiver | Actif | Statut → Désactivé. Exige la saisie d'un motif, enregistré comme commentaire sur le contrat. |
| Expirer | Actif ou Désactivé | Statut → Expiré. Simple confirmation. |
| Réactiver | Désactivé ou Expiré | Statut → Actif. Simple confirmation. |
| Archiver | Actif, Désactivé ou Expiré | Statut → Archivé, aucune action possible ensuite. |
Effet immédiat le plus important : dès qu'un contrat quitte le statut Actif, il disparaît immédiatement de la liste des contrats sélectionnables pour créer ou rattacher une nouvelle annonce (le filtrage par statut Actif est une des conditions d'éligibilité, voir plus haut) — un vendeur ne peut donc plus créer de nouveau lot avec ce contrat tant qu'il n'est pas réactivé. En revanche, cet effet n'est pas rétroactif : la tarification et les modes (facturation, paiement, reversement) sont recopiés dans les métadonnées de chaque annonce/lot au moment de sa création (indexedMeta.contractInformation) ; désactiver ou expirer le contrat ne modifie donc pas les lots déjà créés ni les commissions déjà appliquées sur des ventes en cours.
Ce qui est implémenté
- Un contrat non modèle est rattaché à une organisation et reçoit une référence générée.
- Les contrats modèles automatiques sont contrôlés pour éviter les doublons sur type, shop, année et type client.
- Les conditions tarifaires sont validées à la création et à la mise à jour.
- Si la TVA vendeur manque sur un contrat non modèle, TARS détermine une TVA par défaut depuis l'organisation.
- Un contrat automatique peut faire avancer l'onboarding de l'organisation.
- Une mise à jour de contrat peut propager des flags aux organisations enfants et réindexer l'organisation.
- La fiche détail admin d'un contrat regroupe accès, empreinte bancaire, contacts, informations, libellés, tarification et paramètres, avec un arbre des clés d'accès accordées.
- Les listes de contrats proposent des filtres rapides : « à échéance sous 90 jours » (
indexedMeta.expirationDate), et « à moi » qui restreint aux contrats des organisations dont l'utilisateur connecté est account manager (champaccountManagersde l'organisation). Ambiguïté : le filtre « à valider » mentionné précédemment n'a pas été retrouvé dans le code des filtres de liste de contrats consulté. - La case d'engagement vendeur sur les conditions tarifaires affiche désormais explicitement le prix minimal réellement engagé (prix de réserve si défini, sinon prix de départ), pas un texte générique.
- Les contrats utilisables pour créer une annonce sont restreints à ceux de l'organisation elle-même et de ses ancêtres, pas ceux de ses organisations filles.
- Activer le rôle acheteur d'une organisation pour un shop, depuis sa fiche admin, déclenche automatiquement l'activation du contrat acheteur correspondant; en cas d'échec, l'enregistrement de la fiche n'est pas bloqué mais un message d'erreur dédié est affiché.
Actions par statut implémentées
| Statut contrat | Actions disponibles |
|---|---|
| Actif modèle | Archiver |
| Actif non modèle | Archiver, expirer, désactiver |
| Désactivé | Archiver, expirer, réactiver |
| Expiré | Archiver |
| Archivé | Aucune action |
Impacts
| Domaine | Impact du contrat |
|---|---|
| Accès | Détermine ou limite des droits |
| Vente | Peut autoriser la mise en vente et la publication |
| Finance | Sert aux commissions, factures et conditions |
| Enchère | Peut porter dépôt, limites ou conditions particulières |
| Audit | Les changements contractuels doivent être traçables |
Commentaires et questions
Les commentaires structurent les échanges autour des lots, ventes, organisations ou dossiers. Certains commentaires sont publics ou visibles par les utilisateurs, d'autres sont internes.
Documents et conformité
Les documents servent à justifier une identité, une organisation, une facture, une autorisation, un paiement, une vente ou une obligation de conformité.