diff --git a/app/Http/Controllers/JobPositionController.php b/app/Http/Controllers/JobPositionController.php
index a5896e9..706c8ba 100644
--- a/app/Http/Controllers/JobPositionController.php
+++ b/app/Http/Controllers/JobPositionController.php
@@ -25,12 +25,14 @@ class JobPositionController extends Controller
'title' => 'required|string|max:255',
'description' => 'required|string',
'requirements' => 'nullable|array',
+ 'ai_prompt' => 'nullable|string',
]);
JobPosition::create([
'title' => $request->title,
'description' => $request->description,
'requirements' => $request->requirements,
+ 'ai_prompt' => $request->ai_prompt,
]);
return back()->with('success', 'Fiche de poste créée avec succès.');
@@ -44,12 +46,14 @@ class JobPositionController extends Controller
'title' => 'required|string|max:255',
'description' => 'required|string',
'requirements' => 'nullable|array',
+ 'ai_prompt' => 'nullable|string',
]);
$jobPosition->update([
'title' => $request->title,
'description' => $request->description,
'requirements' => $request->requirements,
+ 'ai_prompt' => $request->ai_prompt,
]);
return back()->with('success', 'Fiche de poste mise à jour.');
diff --git a/app/Models/JobPosition.php b/app/Models/JobPosition.php
index af40e07..73e86c1 100644
--- a/app/Models/JobPosition.php
+++ b/app/Models/JobPosition.php
@@ -7,7 +7,7 @@ use Illuminate\Database\Eloquent\Relations\HasMany;
use Illuminate\Database\Eloquent\Attributes\Fillable;
use Illuminate\Database\Eloquent\Factories\HasFactory;
-#[Fillable(['title', 'description', 'requirements'])]
+#[Fillable(['title', 'description', 'requirements', 'ai_prompt'])]
class JobPosition extends Model
{
use HasFactory;
diff --git a/app/Services/AIAnalysisService.php b/app/Services/AIAnalysisService.php
index b1645a4..4663cb1 100644
--- a/app/Services/AIAnalysisService.php
+++ b/app/Services/AIAnalysisService.php
@@ -95,6 +95,9 @@ class AIAnalysisService
CONTENU DE LA LETTRE DE MOTIVATION:
" . ($letterText ?? "Non fournie") . "
+ CONTEXTE ADDITIONNEL & INSTRUCTIONS PARTICULIÈRES:
+ " . ($candidate->jobPosition->ai_prompt ?? "Aucune instruction spécifique.") . "
+
Fournis une analyse structurée en JSON avec les clés suivantes:
- match_score: note de 0 à 100
- summary: résumé de 3-4 phrases sur le profil
diff --git a/database/migrations/2026_03_22_222246_add_ai_prompt_to_job_positions_table.php b/database/migrations/2026_03_22_222246_add_ai_prompt_to_job_positions_table.php
new file mode 100644
index 0000000..a45fdea
--- /dev/null
+++ b/database/migrations/2026_03_22_222246_add_ai_prompt_to_job_positions_table.php
@@ -0,0 +1,28 @@
+text('ai_prompt')->nullable()->after('description');
+ });
+ }
+
+ /**
+ * Reverse the migrations.
+ */
+ public function down(): void
+ {
+ Schema::table('job_positions', function (Blueprint $table) {
+ $table->dropColumn('ai_prompt');
+ });
+ }
+};
diff --git a/resources/js/Pages/Admin/JobPositions/Index.vue b/resources/js/Pages/Admin/JobPositions/Index.vue
index e21587c..6217fd1 100644
--- a/resources/js/Pages/Admin/JobPositions/Index.vue
+++ b/resources/js/Pages/Admin/JobPositions/Index.vue
@@ -18,7 +18,8 @@ const editingPosition = ref(null);
const form = useForm({
title: '',
description: '',
- requirements: []
+ requirements: [],
+ ai_prompt: ''
});
const openModal = (position = null) => {
@@ -27,6 +28,7 @@ const openModal = (position = null) => {
form.title = position.title;
form.description = position.description;
form.requirements = position.requirements || [];
+ form.ai_prompt = position.ai_prompt || '';
} else {
form.reset();
}
@@ -165,6 +167,18 @@ const removeRequirement = (index) => {
Utilisez cette zone pour donner des instructions spécifiques à l'IA (priorités, contexte entreprise, ton de l'analyse...)
+ +