Ce guide explique comment préparer un fichier XLSX pour créer un compte client de démonstration via la commande demo:import.
Le fichier Excel doit contenir :
_config (obligatoire, en premier)Chaque onglet de table suit cette structure :
_configCet onglet contient les paramètres généraux du fichier.
| Colonne A (clé) | Colonne B (valeur) | Description |
|---|---|---|
version |
1.0 |
Version du format (laisser 1.0) |
source_idc |
999 ou GENERATED |
ID source si exporté, ou GENERATED si créé manuellement |
export_date |
2026-01-13 10:00:00 |
Date de création du fichier |
target_idc |
(vide) | Ne pas remplir, sera défini à l'import |
target_name |
(vide) | Ne pas remplir, sera défini à l'import |
| Élément | Description |
|---|---|
| IDs réels | Tous les IDs temporaires (TEMP_XXX) sont remplacés par de vrais IDs auto-générés |
_id (customer parent) |
Automatiquement mis à jour vers le target_idc fourni à l'import |
| SIRET | Un nouveau SIRET unique est généré pour chaque customer |
| Emails utilisateurs | Rendus uniques en ajoutant +demoXXX avant le @ |
| Mot de passe | Hashé automatiquement (valeur par défaut : password123) |
| Décalage des dates | Toutes les dates sont décalées pour être relatives à aujourd'hui |
| Élément | Description |
|---|---|
| Noms et libellés | lbname, lbproject, lbask, etc. |
| Descriptions | txdesc, lbdesc, etc. |
| Types et statuts | tpstate, tpurgency, tphard, etc. |
| Relations via TEMP_IDs | Les liens entre enregistrements |
| Données métier | Tout ce qui est spécifique à votre scénario de démo |
Les IDs temporaires permettent de créer des relations entre les enregistrements avant que les vrais IDs n'existent.
TEMP_{TABLE}_{NUMERO}
Exemples :
TEMP_CUSTOMER_0001 - Premier customerTEMP_USERS_0042 - 42ème utilisateurTEMP_PROJECT_0003 - 3ème projetExemple :
Onglet customer :
| idc | lbname | _id |
|-----|--------|-----|
| TEMP_CUSTOMER_0001 | Mon Entreprise | TEMP_CUSTOMER_0001 |
| TEMP_CUSTOMER_0002 | Filiale A | TEMP_CUSTOMER_0001 |
Onglet users :
| id | name | idc | _id |
|----|------|-----|-----|
| TEMP_USERS_0001 | Dupont | TEMP_CUSTOMER_0001 | TEMP_CUSTOMER_0001 |
| TEMP_USERS_0002 | Martin | TEMP_CUSTOMER_0002 | TEMP_CUSTOMER_0001 |
L'utilisateur Martin appartient à la Filiale A (idc), mais son _id pointe vers le customer principal.
customer - Clients/Entités| Colonne | Type | Obligatoire | Description |
|---|---|---|---|
idc |
TEMP_ID | Oui | Clé primaire (TEMP_CUSTOMER_XXXX) |
lbname |
Texte | Oui | Nom de l'entité |
_id |
TEMP_ID | Oui | Référence au customer parent (= idc pour le principal) |
idref |
Texte | Non | Code court (ex: SIEGE, AGENCE1) |
tpsector |
Texte | Non | Secteur d'activité |
lbmail |
Non | Email de contact | |
lbtel |
Texte | Non | Téléphone |
Note : Le premier customer de la liste devient le customer principal et reçoit le target_idc et target_name fournis à l'import.
customer_addr - Adresses| Colonne | Type | Obligatoire | Description |
|---|---|---|---|
idaddr |
TEMP_ID | Oui | Clé primaire |
lbaddr |
Texte | Oui | Format: customer_addr.lbaddr.{TEMP_ID} |
lbline1 |
Texte | Non | Adresse ligne 1 |
idc |
TEMP_ID | Oui | Référence au customer |
blmaster |
0/1 | Non | 1 = adresse principale |
_hide_cdpostal |
Texte | Non | Code postal |
_hide_lbtown |
Texte | Non | Ville |
users - Utilisateurs| Colonne | Type | Obligatoire | Description |
|---|---|---|---|
id |
TEMP_ID | Oui | Clé primaire |
name |
Texte | Oui | Nom de famille |
forname |
Texte | Non | Prénom |
email |
Oui | Email (sera rendu unique automatiquement) | |
idc |
TEMP_ID | Oui | Customer d'appartenance |
_id |
TEMP_ID | Oui | Customer principal |
tpuser |
Texte | Non | Type (S=Staff, A=Admin, M=Manager, T=Tech) |
Note : Le mot de passe est automatiquement défini à password123 (hashé).
tickets - Tickets support| Colonne | Type | Obligatoire | Description |
|---|---|---|---|
idask |
TEMP_ID | Oui | Clé primaire |
lbask |
Texte | Oui | Sujet du ticket |
idc |
TEMP_ID | Oui | Customer concerné |
idaddr |
TEMP_ID | Non | Adresse liée |
iduser_asker |
TEMP_ID | Non | Utilisateur demandeur |
tpstate |
Texte | Non | État (NEW, OPEN, PEND, CLOSE) |
tpurgency |
Texte | Non | Urgence (1=faible à 4=urgent) |
created_at |
Date | Non | Date de création |
project - Projets| Colonne | Type | Obligatoire | Description |
|---|---|---|---|
idproject |
TEMP_ID | Oui | Clé primaire |
lbproject |
Texte | Oui | Nom du projet |
_id |
TEMP_ID | Oui | Customer principal |
lbdesc |
Texte | Non | Description |
tpstade |
Texte | Non | Stade (P=Planifié, E=En cours, F=Fini) |
tpgo |
Texte | Non | Go/NoGo (O=Oui, N=Non) |
dtbegin |
Date | Non | Date de début |
dtend |
Date | Non | Date de fin |
csadvance |
Nombre | Non | % d'avancement (0-100) |
Si un onglet est absent ou vide, des données par défaut peuvent être insérées automatiquement pour certaines tables :
| Table | Données par défaut |
|---|---|
dsi_hwvm |
10 serveurs virtuels types |
dsi_lic |
8 licences logicielles courantes |
dsi_tel |
1 installation téléphonie IP |
dsi_planip |
12 VLANs réseau standards |
supplier |
10 fournisseurs IT courants |
customer_act_san |
5 activités sanitaires |
customer_act_ms |
3 activités médico-sociales |
_com_wiki |
8 articles de documentation |
_com_know |
5 fiches de résolution |
Pour éviter les données par défaut, créez un onglet avec au moins une ligne de données.
YYYY-MM-DD
ou
YYYY-MM-DD HH:MM:SS
Exemples : 2026-01-15 ou 2026-01-15 14:30:00
À l'import, toutes les dates sont décalées pour être relatives à la date actuelle.
Exemple :
Pour désactiver le décalage : --date-offset=0
Ces colonnes sont automatiquement gérées et n'ont pas besoin d'être remplies :
| Colonne | Raison |
|---|---|
password |
Hashé automatiquement |
remember_token |
Session, non pertinent |
_id |
Remplacé par target_idc |
idsiret |
Régénéré pour unicité |
L'ordre des onglets n'est pas important. Le système importe automatiquement dans le bon ordre de dépendance :
customer (niveau 0)customer_addr, users, supplier... (niveau 1)customer_addr_bat, tickets, project... (niveau 2)--dry-run après chaque ajout# Toujours valider en dry-run d'abord
php artisan demo:import mon_fichier.xlsx --dry-run
# Générer un template hospital complet
php artisan demo:generate-hospital
# Ou exporter un client existant comme base
php artisan demo:export 999 --output=exports/template.xlsx
Utilisez des noms cohérents et séquentiels :
TEMP_CUSTOMER_0001, TEMP_CUSTOMER_0002...TEMP_USERS_0001, TEMP_USERS_0002...La colonne spécifiée n'existe pas dans la table. Vérifiez le nom exact de la colonne.
Le target_idc existe déjà en base. Choisissez un autre ID.
Une colonne obligatoire est vide. Remplissez-la ou supprimez la ligne.
Un TEMP_ID référencé n'existe pas. Vérifiez que l'onglet source contient bien cet ID.
Un fichier Excel minimal valide :
Onglet _config :
| key | value |
|-----|-------|
| version | 1.0 |
| source_idc | GENERATED |
| export_date | 2026-01-13 |
Onglet customer :
| idc | lbname | _id | tpsector |
|-----|--------|-----|----------|
| TEMP_CUSTOMER_0001 | Ma Société | TEMP_CUSTOMER_0001 | IT |
Onglet users :
| id | name | forname | email | idc | _id |
|----|------|---------|-------|-----|-----|
| TEMP_USERS_0001 | Admin | Jean | admin@masociete.fr | TEMP_CUSTOMER_0001 | TEMP_CUSTOMER_0001 |
Import :
php artisan demo:import mon_fichier.xlsx --target-idc=500 --target-name="Ma Société Demo"