# Startlist AI — Guide de l'utilisateur

Startlist AI transforme les souhaits des cavaliers, rédigés en langage courant, en un **ordre de départ** qui les respecte.

Vous tapez ce que le cavalier demande — dans n'importe quelle langue, de la manière dont il l'a dit. L'IA lit la demande, la transforme en règles précises d'ordre de départ, et l'extension génère un ordre de départ qui les applique, puis l'envoie à Equipe.

L'IA fonctionne sur votre propre réseau : **les noms des cavaliers et leurs demandes ne quittent jamais votre réseau**.

Ce guide est destiné aux secrétaires de concours et aux organisateurs.

---

## Sommaire

1. [Comment ça marche](#how-it-works)
2. [Ouvrir l'extension](#opening-the-extension)
3. [Enregistrer les demandes des cavaliers](#recording-rider-requests)
4. [Rédiger une bonne demande](#writing-a-good-request)
5. [Ce que l'IA comprend](#what-the-ai-understands)
6. [Construire l'ordre de départ](#building-the-start-order)
7. [Icônes de statut](#status-icons)
8. [Bonnes pratiques](#good-practices)

---

## Comment ça marche

1. **Collecter les souhaits** — sur l'écran **Rider Requests**, enregistrez chaque demande au fur et à mesure qu'elle arrive. L'IA la lit dès que vous l'enregistrez et affiche ce qu'elle a compris.
2. **Construire l'ordre** — sur l'écran **Process Rider Requests**, choisissez une épreuve, laissez l'outil calculer l'ordre de départ, vérifiez le résultat et envoyez-le à Equipe.

Deux autres écrans, **Hippodata import** et **Hippodata Viewer**, vous permettent d'importer et de consulter les données Hippodata (épreuves, résultats, équipes, articles FEI) si nécessaire.

---

## Ouvrir l'extension

Ouvrez-la depuis le concours dans Equipe : elle fonctionne directement sur ce concours, sans aucune connexion nécessaire.

L'extension s'ouvre dans le même onglet qu'Equipe. Utilisez **Back to Equipe**, en haut à droite de chaque écran, pour revenir là où vous étiez.

---

## Enregistrer les demandes des cavaliers

L'écran comporte un formulaire en haut (**New request to AI**) et le tableau **Requests received** en dessous.

### Ajouter une demande

1. **Choisir le cavalier** — tapez le nom d'un cavalier ou d'un cheval et sélectionnez-le dans la liste. Choisir un cheval sélectionne automatiquement son cavalier.
2. **Choisir la portée** — par défaut, la demande s'applique à l'**ensemble du concours**. Pour la limiter, décochez **Whole show** et sélectionnez les épreuves. Pour les concours s'étalant sur plusieurs semaines, utilisez les onglets des semaines.
3. **Rédiger la demande** — dans n'importe quelle langue, telle que le cavalier l'a formulée.
4. **Enregistrer** — en quelques secondes, la ligne affiche ce que l'IA a compris.

Le **help button** à côté de Save affiche des exemples de demandes bien comprises.

### Le tableau Requests received

| Colonne | Contenu |
|---|---|
| **Rider** | Le cavalier, et le cheval si la demande concerne un cheval spécifique |
| **Classes** | *whole show* ou les numéros d'épreuves concernés |
| **AI Request / Response** | Le texte original, puis la ligne ✨ avec ce que l'IA a compris, et le temps écoulé |
| **Status** | L'état de la demande (voir [Status icons](#status-icons)) |

Utilisez ✎ pour **modifier** une demande et 🗑 pour la **supprimer**.

### Quand l'IA a besoin de vous

La plupart des demandes sont comprises immédiatement (coche verte). Trois cas nécessitent une décision :

- **Pick one** — le cavalier a nommé quelqu'un ("après Rozier") et plusieurs cavaliers correspondent. Choisissez le bon dans la liste déroulante.
- **Guessed** — la formulation était inhabituelle : l'IA propose la règle la plus proche mais la laisse **inactive**. Si elle est correcte, cliquez sur **✓ approve**.
- **Not understood** — l'IA n'a pas pu interpréter le texte, ou la demande est contradictoire ("avant 10:00 et après 14:00"). La raison est affichée ; utilisez **rephrase** pour la reformuler.

Le compteur en haut de l'écran indique le nombre d'éléments nécessitant encore une décision.

---

## Rédiger une bonne demande

- **N'importe quelle langue** — français, anglais, néerlandais, allemand, même un mélange.
- **Les propres mots du cavalier** — aucun mot-clé n'est nécessaire. "Mon cheval est vert, je préférerais passer tôt", "j'arrive du CSI voisin, pas avant 14h" et "graag vroeg starten" fonctionnent tous.
- **Plusieurs souhaits en une seule demande** — "Pas juste après Rozier, mais avec Gonin et Billot, et pas avant 14:30" génère quatre règles.
- **Les termes approximatifs conviennent** — "plus ou moins au milieu", "si possible tôt", "idéalement vers la fin".

### Exemples

| Le cavalier dit… | L'IA comprend |
|---|---|
| "quelque part au milieu s'il vous plaît" | partir dans le tiers central |
| "toujours dans les 4 premiers" | dans les 4 premiers à partir |
| "entre 25 et 40" | partir entre les positions 25 et 40 |
| "j'ai un cours de pony à 18:00" | doit avoir commencé **avant** 18:00 |
| "je viens du CSI voisin, pas avant 14:00" | ne peut pas partir **avant** 14:00 |
| "les deux chevaux avec au moins 15 d'écart" | au moins 15 départs entre les chevaux du cavalier |
| "Cartouche en premier, puis Fais Toi Belle" | ordre fixe entre les chevaux du cavalier |
| "gardez-moi à côté de Tom Green et Lisa Brown" | grouper le cavalier avec ces deux personnes |
| "veuillez mettre tous les Bek ensemble" | grouper tous les cavaliers nommés Bek |
| "juste avant la pause" | partir juste avant la pause |
| "pas juste après Rozier, il est toujours très long" | garder le cavalier **loin de** Rozier |

---

## Ce que l'IA comprend

Chaque demande devient une ou plusieurs des règles ci-dessous ; ce sont elles que vous voyez sur la ligne ✨.

### Position dans la liste

| Règle | Signification |
|---|---|
| `start_early` | dans le premier tiers |
| `start_middle` | dans le tiers central |
| `start_at_end` | dans le dernier tiers |
| `start_late` | après le premier tiers |
| `start_last` | le tout dernier |
| `start_within_first` | dans les *N* premiers |
| `start_within_last` | dans les *N* derniers |
| `start_between` | entre deux positions, ex: 25–40 |

### Heure

| Règle | Signification |
|---|---|
| `start_before_time` | doit avoir commencé **avant** une heure (ex: un autre engagement à 18:00) |
| `start_after_time` | ne peut pas partir **avant** une heure (ex: arrivée d'un autre concours) |

"Avant 10:00" définit l'heure de départ **au plus tard** ; "pas avant 14:00" définit l'heure **au plus tôt**.

### Les propres chevaux du cavalier

| Règle | Signification |
|---|---|
| `min_gap_own_horses` | nombre minimum de départs entre les chevaux du cavalier |
| `horse_order` | ordre fixe entre les chevaux du cavalier |

### Autres cavaliers

| Règle | Signification |
|---|---|
| `after_rider` | après un cavalier nommé |
| `before_rider` | avant un cavalier nommé |
| `near_rider` | proche d'un cavalier nommé |
| `far_from_rider` | loin d'un cavalier nommé (signifie aussi "pas juste après X") |
| `group_with` | regrouper plusieurs cavaliers ensemble |
| `coach_far_from_group` | un entraîneur garde son groupe ensemble, avec plus de distance par rapport à lui-même |

**Familles :** "tous les Bek" ou "les trois Bek" regroupe **chaque cavalier inscrit** portant ce nom de famille — il n'est pas nécessaire de les nommer un par un.

### La pause

| Règle | Signification |
|---|---|
| `before_break` | juste avant la pause |
| `after_break` | juste après la pause |

"Avant la pause" désigne la pause ; "avant Cyrius" signifie avant ce cheval ou ce cavalier.

### Négations et contradictions

Les négations sont comprises : "pas après la pause" devient *avant la pause*, "pas trop tôt" devient *commencer tard*.
Une requête qui ne peut jamais être satisfaite (en premier **et** après la pause ; avant 10:00 **et** après 14:00) est marquée **not understood**, avec la raison.
Un message qui ne fait que décrire le cheval ou qui dit merci est délibérément laissé en **unknown** : l'IA ne devine pas.

---

## Construire l'ordre de départ

Sur l'écran **Process Rider Requests** :

1. **Choisissez l'épreuve** — utilisez les onglets **Week / Day** (la ligne Week est masquée pour un concours d'une semaine), puis choisissez l'épreuve.
2. **Calculez l'ordre** — l'outil propose un ordre de départ qui respecte autant de règles que possible.
3. **Consultez le log** — pour chaque règle : appliquée, non applicable (avec la raison) ou encore à réviser. Les cavaliers regroupés sont mis en évidence. Les requêtes jamais comprises sont listées pour qu'aucune ne soit oubliée.
4. **Surveillez les chevauchements** — un avertissement apparaît si un cavalier devait partir en même temps dans deux carrières fonctionnant en parallèle.
5. **Annulez si nécessaire** — le panneau d'historique restaure l'ordre précédent de l'épreuve.
6. **Appliquez à Equipe** — envoyez l'ordre à Equipe.

---

## Icônes de statut

**Statut de la requête**

| Icône | Statut | Signification |
|---|---|---|
| ⏳ (bleu) | received | Enregistré, en attente de l'IA |
| ✅ (vert) | interpreted | Compris — règles sur la ligne ✨ |
| ❌ (rouge) | failed | Non traité — reformulez |
| ⏹ (jaune) | cancelled | Requête annulée |

**Règles à l'intérieur d'une requête**

- **✓** — prêt.
- **⚠ pick one** — plusieurs cavaliers correspondent au nom : choisissez-en un.
- **guessed / ✓ approve** — proposé suite à une formulation inhabituelle : approuvez pour activer.
- **✗ not found / ✗ incomplete** — un cavalier ou un cheval n'a pas pu être trouvé, ou un groupe contient trop peu de membres.

---

## Bonnes pratiques

- **Enregistrez les requêtes dès leur arrivée** : chacune est lue en quelques secondes, et vous voyez immédiatement ce qui nécessite une décision.
- **Utilisez les mots du cavalier** plutôt que votre propre résumé : les nuances sont ainsi préservées.
- **Définissez le périmètre précisément** lorsqu'une requête ne concerne que certaines épreuves.
- **Lisez les lignes "not applicable"** avant d'appliquer un ordre : ce sont des souhaits qui méritent d'être discutés avec le cavalier.