---
name: job-parser
description: Parser une offre d'emploi (texte brut collé depuis LinkedIn, Indeed, un email, etc.) pour en extraire l'entreprise, l'intitulé du poste et les compétences requises. À utiliser quand l'utilisateur colle ou mentionne le texte d'une annonce qu'il veut importer dans Relance.
argument-hint: "[texte brut de l'annonce]"
---

# Skill : job-parser

## Rôle

Extraire les informations structurées d'une offre d'emploi à partir d'un texte brut (copié-collé depuis n'importe quelle source : LinkedIn, Indeed, email, etc.).

## Entrée

Un `string` contenant le texte brut de l'annonce. Aucun formatage particulier n'est requis.

## Sortie

Un objet JSON validé par le schéma Zod `JobParserOutput` :

```json
{
  "companyName": "Stripe",
  "jobTitle": "Software Engineer – Backend",
  "requiredSkills": ["TypeScript", "Node.js", "PostgreSQL"]
}
```

| Champ            | Type       | Description                                           |
| ---------------- | ---------- | ----------------------------------------------------- |
| `companyName`    | `string`   | Nom de l'entreprise qui recrute                       |
| `jobTitle`       | `string`   | Intitulé exact du poste                               |
| `requiredSkills` | `string[]` | Liste des compétences techniques mentionnées (min. 1) |

## Contrat de fiabilité

La réponse du LLM est systématiquement passée dans un **Gate Zod** (`src/utils/validators.ts`) avant toute utilisation. Si la validation échoue, la Server Action lève une erreur explicite — elle ne retourne jamais de données partielles ou non conformes.

## Prompt système

Le LLM reçoit l'instruction suivante (définie dans la Server Action) :

> Tu es un extracteur de données structurées. À partir du texte d'une offre d'emploi, retourne UNIQUEMENT un objet JSON valide avec les champs : companyName (string), jobTitle (string), requiredSkills (array of strings). Ne retourne aucun texte en dehors du JSON. Renvoie UNIQUEMENT le JSON brut. N'ajoute AUCUN texte avant ou après. N'utilise PAS de blocs de code Markdown (```json)."

## Limites connues

- Le skill n'extrait pas les informations de salaire ni de localisation (hors scope v1).
- Si le texte ne contient pas clairement de nom d'entreprise, le LLM peut renvoyer une chaîne vide — le Gate Zod le signalera via `min(1)`.
