All checks were successful
Practical field-by-field intake doc for the first merchants — maps each question to its DB column so the call → admin UI is 1:1. Includes a section on marketing-material reuse aimed at franchisees, with written-authorization clauses for the future marketing module. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
341 lines
17 KiB
Markdown
341 lines
17 KiB
Markdown
# Fiche d'intégration commerçant — Premier point de vente
|
||
|
||
Liste pratique de toutes les données à collecter auprès d'un nouveau
|
||
commerçant avant de mettre en service son premier point de vente sur la
|
||
plateforme de fidélité. Chaque champ est rattaché à la colonne de base
|
||
de données correspondante, de sorte que ce qui est collecté lors de la
|
||
réunion d'intégration se reporte 1:1 dans l'interface d'administration.
|
||
|
||
À utiliser comme formulaire à partager, ou comme trame de discussion
|
||
pour le premier appel d'intégration.
|
||
|
||
## Comment utiliser ce document
|
||
|
||
1. Envoyer au commerçant les sections **« Ce que vous devez nous
|
||
fournir »** (1–7) avant la réunion de lancement, pour qu'il
|
||
prépare les logos, numéros de TVA et informations du personnel.
|
||
2. Utiliser les sections **décisions métier** (3, 5) pour structurer
|
||
l'appel — ce sont les choix que seul le commerçant peut faire.
|
||
3. Après l'appel, remplir l'interface d'administration dans l'ordre
|
||
ci-dessous ; le modèle impose cette chaîne de dépendances
|
||
(commerçant → point de vente → programme de fidélité → personnel).
|
||
|
||
## TL;DR — ce sans quoi vous ne pouvez absolument pas lancer
|
||
|
||
- Raison sociale + numéro de TVA + adresse de l'entreprise
|
||
- E-mail du propriétaire (identifiant et destinataire de l'invitation)
|
||
- Nom du point de vente + code de point de vente (slug URL)
|
||
- Type de programme de fidélité (tampons / points / hybride) et
|
||
structure de récompense
|
||
- URL de la politique de confidentialité (RGPD)
|
||
- Logo de la marque (PNG carré, fond transparent)
|
||
- Couleur principale de la marque (hex)
|
||
- Au moins un code PIN du personnel
|
||
|
||
Tout le reste peut être complété de manière itérative après le
|
||
lancement.
|
||
|
||
---
|
||
|
||
## 1. Identité de l'entreprise (entité **commerçant**)
|
||
|
||
Un par commerçant — alimente la table `merchants`.
|
||
|
||
| Champ | Requis ? | Colonne BDD | Notes |
|
||
|---|---|---|---|
|
||
| Raison sociale | ✅ | `name` | Apparaît sur les factures et pieds d'e-mails |
|
||
| Nom commercial (si différent) | optionnel | (utiliser `name`) | Le nom que voient les clients |
|
||
| Description de l'activité | recommandé | `description` | Slogan d'une ligne |
|
||
| Numéro de TVA | ✅ UE | `tax_number` | Format LU : `LU12345678` |
|
||
| Numéro d'immatriculation | ✅ | `tax_number` (ou champ séparé si disponible) | LU : `RCS Lxxxxxx` |
|
||
| Adresse de l'entreprise | ✅ | `business_address` | Rue + ville + code postal + pays |
|
||
| E-mail de contact principal | ✅ | `contact_email` | Pour factures et alertes plateforme |
|
||
| Téléphone principal | recommandé | `contact_phone` | Pour rappels du support |
|
||
| URL du site web | optionnel | `website` | Lié depuis le pied de page du storefront |
|
||
|
||
## 2. Compte propriétaire / administrateur
|
||
|
||
La personne qui se connecte en tant que propriétaire du commerçant.
|
||
|
||
| Champ | Requis ? | Notes |
|
||
|---|---|---|
|
||
| Nom complet | ✅ | Affiché dans les journaux d'audit |
|
||
| E-mail (identifiant) | ✅ | L'invitation y est envoyée — doit être livrable |
|
||
| Téléphone | recommandé | |
|
||
| Langue d'interface préférée (en / fr / de / lb) | ✅ | Pilote la langue du tableau de bord d'admin |
|
||
|
||
## 3. Chaque point de vente
|
||
|
||
À répéter par emplacement. Alimente la table `stores`. La plateforme
|
||
supporte le multi-emplacement dès le premier jour — même les
|
||
commerçants mono-magasin vivent dans cette structure.
|
||
|
||
| Champ | Requis ? | Colonne BDD | Notes |
|
||
|---|---|---|---|
|
||
| Nom du point de vente | ✅ | `name` | Ex. : « Fashion Hub City Concorde » |
|
||
| Code interne du point de vente | ✅ | `store_code` | Slug en MAJUSCULES, sans espaces — utilisé dans les URLs (`/store/FASHIONHUB`). À choisir une fois, difficile à modifier |
|
||
| Sous-domaine | optionnel | `subdomain` | Ex. : `fashionhub.rewardflow.lu` pour le storefront |
|
||
| Adresse physique | ✅ | `business_address` | Par emplacement, remplace l'adresse du commerçant si différente |
|
||
| E-mail de contact local | optionnel | `contact_email` | Remplace l'e-mail commerçant si le point de vente a le sien |
|
||
| Téléphone local | optionnel | `contact_phone` | |
|
||
| Taux de TVA par défaut % | optionnel | `letzshop_default_tax_rate` | Par défaut 17 % (TVA standard LU) |
|
||
| Langue d'interface par défaut | ✅ | `default_language` / `dashboard_language` | Langue d'ouverture du terminal du personnel |
|
||
| Langues client | ✅ | `storefront_languages` | Sous-ensemble de `{en, fr, de, lb}` pour LU |
|
||
| Horaires d'ouverture | optionnel | pas encore dans le schéma | Contexte utile pour le support |
|
||
|
||
## 4. Personnel (par point de vente, pour chaque caissier)
|
||
|
||
Alimente `users` + `store_users` (flux d'invitation).
|
||
|
||
| Champ | Requis ? | Notes |
|
||
|---|---|---|
|
||
| Nom complet | ✅ | Affiché sur l'écran PIN de la tablette |
|
||
| E-mail | ✅ si accès web nécessaire | Les opérateurs uniquement-PIN-tablette n'ont pas besoin de compte |
|
||
| Code PIN à 4 chiffres | ✅ | Ils le choisissent ; vous le configurez dans `/admin/loyalty/pins` ; saisi à chaque transaction sur la tablette |
|
||
| Identifiant / numéro d'employé | optionnel | Affiché à côté du nom dans la piste d'audit |
|
||
| Rôle | ✅ | Un parmi : `merchant_owner`, `store_admin`, `store_staff` |
|
||
|
||
## 5. Programme de fidélité — les **décisions métier**
|
||
|
||
Un programme par commerçant. Alimente la table `loyalty_programs`.
|
||
C'est ici que se déroule l'essentiel de la discussion de lancement —
|
||
aidez-les à choisir.
|
||
|
||
### 5.1 Type de programme
|
||
|
||
| Type | Quand le recommander |
|
||
|---|---|
|
||
| **Tampons** | Modèle « achetez-en 10, le suivant est offert ». Cafés, coiffeurs, restaurants, partout où il existe une unité de vente claire |
|
||
| **Points** | « Gagnez X points par €, échangez-les contre des récompenses ». Commerce avec paniers variés |
|
||
| **Hybride** | Les deux à la fois. Rare en v1 — à différer |
|
||
|
||
### 5.2 Si tampons
|
||
|
||
| Champ | Valeur typique | Notes |
|
||
|---|---|---|
|
||
| `stamps_target` | 10 | Tampons pour remplir une carte |
|
||
| `stamps_reward_description` | « Café offert » | Nom de la récompense côté client |
|
||
| `stamps_reward_value_cents` | 500 (= 5 €) | Valeur interne pour l'analytique |
|
||
|
||
### 5.3 Si points
|
||
|
||
| Champ | Valeur typique | Notes |
|
||
|---|---|---|
|
||
| `points_per_euro` | 1, 5 ou 10 | Taux d'acquisition |
|
||
| `welcome_bonus_points` | 50–100 | Attribués à l'inscription, donnent une bonne première impression |
|
||
| `minimum_purchase_cents` | 500 (= 5 €) | Montant minimum de vente pour gagner — élimine les achats de chewing-gums |
|
||
| `minimum_redemption_points` | 100 | Points minimum pour échanger quoi que ce soit |
|
||
| `points_expiration_days` | 365 | Au-delà, les points non utilisés expirent |
|
||
| `points_rewards` (liste JSON) | voir ci-dessous | Le menu des récompenses |
|
||
|
||
Chaque entrée de `points_rewards` doit contenir : `name`,
|
||
`points_required`, `description`, `value`. Exemple :
|
||
|
||
```json
|
||
[
|
||
{"name": "Bon de 5 €", "points_required": 100, "description": "À utiliser en caisse", "value": 500},
|
||
{"name": "Bon de 15 €", "points_required": 250, "description": "À utiliser en caisse", "value": 1500},
|
||
{"name": "Produit XYZ offert", "points_required": 400, "description": "Retrait en magasin", "value": null}
|
||
]
|
||
```
|
||
|
||
### 5.4 Garde-fous anti-fraude
|
||
|
||
| Champ | Défaut | Quand modifier |
|
||
|---|---|---|
|
||
| `cooldown_minutes` | 0 | Mettre 30–60 pour les cafés à fort volume, pour limiter les abus du personnel |
|
||
| `max_daily_stamps` | 10 | Réduire si volume faible ; plafonne les tampons quotidiens d'une carte |
|
||
| `require_staff_pin` | true | Recommandé `true` dès qu'il y a >1 employé ; la tablette gère hors ligne |
|
||
|
||
### 5.5 Comportement multi-emplacement
|
||
|
||
Ces paramètres sont sur les réglages commerçant
|
||
(`merchant_loyalty_settings`), pas sur le programme :
|
||
|
||
| Paramètre | Défaut | Notes |
|
||
|---|---|---|
|
||
| `allow_cross_location_redemption` | ✅ activé | Gagner en A et échanger en B ? Oui pour les chaînes, non pour des indépendants partageant l'infrastructure |
|
||
| `allow_void_transactions` | ✅ activé | Certains commerçants désactivent pour contrôler la fraude |
|
||
| `require_order_reference` | désactivé | Utile si intégration avec leur caisse — relie chaque transaction de fidélité à un numéro de ticket |
|
||
|
||
## 6. Éléments de marque
|
||
|
||
À collecter sous forme de **fichiers**, pas de liens — nous les
|
||
hébergeons.
|
||
|
||
| Élément | Format | Taille | Champ BDD |
|
||
|---|---|---|---|
|
||
| Logo principal | PNG, fond transparent | 600×600 min, carré | `logo_url` |
|
||
| Bannière hero | JPG / PNG | 1200×400 | `hero_image_url` |
|
||
| Couleur principale | Hex | ex. `#7C3AED` | `card_color` |
|
||
| Couleur secondaire | Hex | ex. `#10B981` | `card_secondary_color` |
|
||
| Nom affiché de la carte | Chaîne courte | ex. « Fashion Hub Rewards » | `card_name` |
|
||
|
||
Le logo sert aussi de **logo Google Wallet**, donc 600×600 minimum
|
||
avec fond transparent est le plancher pratique — Google exige une
|
||
bonne lisibilité.
|
||
|
||
## 7. Conformité & RGPD
|
||
|
||
Requis pour le go-live, en particulier au Luxembourg.
|
||
|
||
| Champ | Requis ? | Champ BDD | Notes |
|
||
|---|---|---|---|
|
||
| URL de la politique de confidentialité | ✅ UE | `privacy_url` | Lié depuis le formulaire d'inscription. Leur site ou votre CMS |
|
||
| CGU de fidélité | ✅ | `terms_text` ou `terms_cms_page_slug` | Texte en ligne ou slug de page CMS. À couvrir : fonctionnement des points, expiration, conditions de révocation, contact en cas de litige |
|
||
| Contact DPO (si applicable) | dépend de la taille | pas dans le schéma | Règle LU : >5 000 enregistrements clients → DPO désigné requis |
|
||
| Consentement marketing | implicite | (case à cocher sur le formulaire d'inscription) | Obligatoire si envoi d'e-mails anniversaire / réengagement |
|
||
|
||
## 8. Tablettes (si vous fournissez le matériel POS)
|
||
|
||
| Question | Pourquoi |
|
||
|---|---|
|
||
| Combien de tablettes par point de vente ? | Détermine le nombre d'appairages à configurer |
|
||
| Tablettes Android existantes ? Modèle + OS ? | Nécessite Android 8.0+ (API 26), Play Services. Fire OS ne fonctionnera pas |
|
||
| Sourcer les tablettes pour eux ? | Lenovo Tab M11 ou Samsung Galaxy Tab A9 (100–200 € l'unité) — modèles éprouvés |
|
||
| Montage ? Support comptoir ou mural ? | Influe sur le plan d'alimentation/recharge |
|
||
| Wi-Fi à chaque emplacement | La file d'attente hors ligne gère les coupures brèves, pas une journée entière. Confirmer le Wi-Fi au comptoir |
|
||
|
||
## 9. Migration de données initiales (optionnel mais utile)
|
||
|
||
| Question | Pourquoi |
|
||
|---|---|
|
||
| Liste clients fidélité existante ? | S'ils passent d'un autre système ou de cartes papier, import en masse via CSV (e-mail, nom, solde, date d'inscription) |
|
||
| Nombre approximatif de clients initiaux ? | Dimensionne la discussion de capacité |
|
||
| Volume mensuel actuel de transactions | Idem |
|
||
|
||
## 10. Réutilisation de matériel marketing (pour le futur module marketing)
|
||
|
||
Beaucoup de nos premiers commerçants sont franchisés (chaînes de mode,
|
||
restauration, beauté) et reçoivent en continu du matériel de campagne
|
||
du franchiseur — bannières, modèles d'e-mails, publications sociales,
|
||
promotions saisonnières. Le futur module marketing vise à
|
||
**republier** ce matériel au niveau du point de vente local : un
|
||
franchisé ne devrait pas avoir à concevoir lui-même un e-mail
|
||
anniversaire alors que le siège en produit cinq par an.
|
||
|
||
À l'intégration, posez les questions sous forme d'autorisation pour
|
||
avoir le feu vert *avant* de construire la chaîne d'ingestion. On ne
|
||
leur demande rien aujourd'hui — on inventorie les sources et on
|
||
obtient une autorisation écrite.
|
||
|
||
### 10.1 Matériel marketing existant — inventaire
|
||
|
||
| Question | Pourquoi |
|
||
|---|---|
|
||
| Le commerçant est-il franchisé ? De quelle enseigne ? | Détermine les sources institutionnelles potentielles |
|
||
| Reçoit-il une **newsletter régulière** du franchiseur ? Nous transférer 3–5 récentes | Permet d'évaluer le type de contenu, la fréquence, le mix linguistique et le formatage |
|
||
| Existe-t-il un **extranet / portail franchiseur** où sont publiées les campagnes ? URL + identifiants en lecture seule | Source idéale : structurée, datée, multilingue |
|
||
| **Comptes sociaux** sur lesquels le franchiseur publie (Instagram, Facebook, LinkedIn) | Public, scrapable, mais ratio signal/bruit faible |
|
||
| **Groupes WhatsApp / Telegram** de diffusion auxquels ils appartiennent | Parfois le seul canal — transfert manuel peut être l'unique voie |
|
||
| Packs **PDF / images** reçus par e-mail ou lien de téléchargement | Fréquent pour les campagnes saisonnières ; demander les derniers |
|
||
| Fréquence : hebdomadaire / mensuelle / par campagne | Dimensionne le volume d'ingestion |
|
||
| Langues de publication du franchiseur | Détermine si on réutilise tel quel ou si on retraduit |
|
||
|
||
### 10.2 Autorisation de réutilisation — à obtenir par écrit
|
||
|
||
Avant tout scraping ou republication, le commerçant doit nous
|
||
autoriser. À recueillir à l'intégration (case à cocher sur le
|
||
formulaire ou clause dans le contrat commerçant) :
|
||
|
||
- ✅ **« J'autorise {plateforme} à ingérer le matériel marketing que je
|
||
transfère, partage ou rends accessible, et à le republier en mon nom
|
||
via les canaux de fidélité/marketing offerts par la plateforme. »**
|
||
- ✅ **« Je confirme avoir le droit (en tant que franchisé) d'utiliser
|
||
ce matériel en marketing local, et que les chartes de marque ou
|
||
conditions de licence du franchiseur autorisent la republication via
|
||
des plateformes tierces. »**
|
||
- ✅ Nous transférer les **chartes de marque / politique de marketing
|
||
collaboratif** du franchiseur si elle existe. Cela détermine ce qui
|
||
peut être fait en toute sécurité.
|
||
|
||
### 10.3 Voies pratiques de capture (du plus simple au plus complexe)
|
||
|
||
Pour le futur module marketing, par ordre de facilité de mise en
|
||
œuvre :
|
||
|
||
1. **Transfert vers une boîte dédiée.** Donner au commerçant un alias
|
||
par point de vente, ex. `marketing+FASHIONHUB@rewardflow.lu`. Il
|
||
transfère tout e-mail du franchiseur là-bas. On parse et on
|
||
catégorise.
|
||
2. **Téléversement glisser-déposer.** Une page où le commerçant colle
|
||
une URL ou téléverse un PDF/image ; on OCR/parse et on met en file
|
||
pour validation.
|
||
3. **Récupération authentifiée sur extranet.** Ils nous fournissent
|
||
des identifiants en lecture seule au portail franchiseur ; on
|
||
sonde régulièrement. Signal le plus élevé, exigence légale la plus
|
||
haute — nécessite l'aval explicite du franchiseur.
|
||
4. **Scraping social public.** En dernier recours, uniquement pour le
|
||
matériel publié ouvertement par le franchiseur. Respecter
|
||
`robots.txt` et les CGU des plateformes.
|
||
|
||
### 10.4 Canaux de republication sur lesquels brancher
|
||
|
||
Ce qu'on **fait** de ce matériel une fois capté :
|
||
|
||
- Rotation de la **bannière storefront** (déjà dans le CMS)
|
||
- E-mails **fidélité bienvenue / réengagement / anniversaire** (module
|
||
loyalty v1 — modèles fixes ; module marketing v2 — pilotés par
|
||
campagne)
|
||
- **SMS / WhatsApp** (module marketing v2, différé)
|
||
- **Notifications push** via la carte Wallet (Google Wallet prend en
|
||
charge les mises à jour au niveau de la classe — push à chaque
|
||
téléphone client)
|
||
|
||
### 10.5 Signaux d'alerte à remonter au commerçant
|
||
|
||
Si l'un de ces points apparaît à l'intégration, signaler pour revue
|
||
juridique **avant** de toucher au matériel :
|
||
|
||
- Présence de marques du franchiseur sans licence explicite du
|
||
franchisé pour cet usage
|
||
- Références à des marques tierces (co-promotions) — ces marques n'ont
|
||
pas consenti à notre plateforme
|
||
- Matériel dans une langue que la clientèle du commerçant ne parle pas
|
||
— on ne traduit pas automatiquement sans autorisation
|
||
- Données personnelles de personnes nommées (témoignages, photos) —
|
||
la chaîne de consentement RGPD ne s'étend peut-être pas à nous
|
||
|
||
## 11. Client de test pour vérification
|
||
|
||
Avant d'ouvrir aux vrais clients, dérouler les 8 tests utilisateur de
|
||
bout en bout avec deux comptes de test :
|
||
|
||
- L'e-mail personnel du propriétaire commerçant
|
||
- Un membre de l'équipe ou votre propre e-mail
|
||
|
||
La liste de tests E2E se trouve dans
|
||
[`app/modules/loyalty/docs/user-journeys.md`](../modules/loyalty/user-journeys.md).
|
||
|
||
---
|
||
|
||
## Ordre de saisie suggéré dans l'interface d'administration
|
||
|
||
Le modèle a des dépendances de clés étrangères strictes, donc à
|
||
remplir dans cet ordre :
|
||
|
||
1. **Créer le commerçant** (`/admin/merchants/new`) — nécessite § 1.
|
||
2. **Inviter le propriétaire** — nécessite § 2.
|
||
3. **Créer le(s) point(s) de vente** (`/admin/stores/new`) —
|
||
nécessite § 3.
|
||
4. **Créer le programme de fidélité**
|
||
(`/admin/loyalty/programs/new`) — nécessite §§ 5, 6, 7.
|
||
5. **Créer les codes PIN du personnel**
|
||
(`/admin/loyalty/pins/new` par point de vente) — nécessite § 4.
|
||
6. **Configurer les paramètres multi-emplacement**
|
||
(`/admin/loyalty/settings/{merchant}`) — nécessite § 5.5.
|
||
7. **(Optionnel) importer les clients en masse** via CSV —
|
||
nécessite § 9.
|
||
8. **Appairer la/les tablette(s)** à chaque point de vente
|
||
(`/admin/loyalty/terminals/new`, QR ou manuel) — nécessite § 8.
|
||
|
||
---
|
||
|
||
## Référence
|
||
|
||
- Modèles de base de données : `models/database/{merchants,stores,loyalty}.py`
|
||
- Plan de lancement production fidélité : [`app/modules/loyalty/docs/production-launch-plan.md`](../modules/loyalty/production-launch-plan.md)
|
||
- Synthèse de prêt-au-lancement : [`loyalty-go-live-readiness.md`](loyalty-go-live-readiness.md)
|
||
- Tests E2E utilisateur : [`app/modules/loyalty/docs/user-journeys.md`](../modules/loyalty/user-journeys.md)
|
||
- Version anglaise : [`merchant-intake-checklist.md`](merchant-intake-checklist.md)
|