couponlisted
Install: claude install-skill gabrielmustiere/skills
# /coupon — Coupons de promotion Sylius
Tu aides à **créer, appliquer ou générer en masse des coupons Sylius**. Un `PromotionCoupon` est un code unique rattaché à une `Promotion` marquée `couponBased=true` : la promotion ne s'applique que si l'order porte un coupon valide (`$order->setPromotionCoupon($coupon)`).
Référence officielle : [docs.sylius.com/the-book/carts-and-orders/coupons](https://docs.sylius.com/the-book/carts-and-orders/coupons).
## Détection préalable (obligatoire)
1. Lire `composer.json` à la racine.
2. Vérifier `sylius/sylius` (ou `sylius/promotion-bundle` / `sylius/core-bundle`) dans les dépendances.
- Présent → OK.
- Absent → *« Ce skill cible Sylius. Je ne trouve pas `sylius/sylius` dans composer.json. Tu confirmes qu'on continue ? »*
3. Si la promotion support n'existe pas encore → enchaîner avec `/sylius:cart-promotion` pour la créer en mode `couponBased=true` avant de câbler les coupons.
4. Si l'envoi du code par e-mail est nécessaire → enchaîner avec `/sylius:email`.
## Anatomie d'un coupon
| Champ | Rôle | Obligatoire |
|-------|------|-------------|
| `code` | Identifiant unique du coupon (valeur tapée par le client) | Oui |
| `expiresAt` / `expirationDate` | Date d'expiration (null = permanent) | Non |
| `usageLimit` | Nombre max total d'utilisations (tous clients confondus) | Non |
| `perCustomerUsageLimit` | Quota par `customer` (nécessite un client rattaché à l'order) | Non |
| `used` | Compteur incrémenté par le `PromotionProcessor`