Files
ASPIC/contact_ia_valide.php
T

110 lines
4.2 KiB
PHP

<?php
/**
* ASPIC — contact_ia_valide.php
*
* Outil de mise au point interne (4 septembre 2026, correction explicite de
* Jean-Marc suite à un premier essai de contact_ia_test.html/.js) — PAS un
* endpoint destiné aux futurs utilisateurs.
*
* Ne crée JAMAIS de contact réel (ni de profession réelle) : la première
* version de contact_ia_test.js appelait directement contacts.php/
* professions.php depuis cet outil de test, ce que Jean-Marc a explicitement
* écarté. Ce fichier se contente d'enregistrer, côte à côte, les trois
* étapes d'un essai d'interprétation :
* - le texte brut tel que dicté (identique à l'esprit de dictees_test.php) ;
* - ce que le LLM a compris (JSON renvoyé par contact_ia_interprete.php,
* avant toute correction) ;
* - ce que Jean-Marc a réellement validé après relecture (JSON des champs du
* formulaire tels qu'affichés/corrigés au moment du clic sur "Valider").
*
* Objectif explicite de Jean-Marc : comparer les deux JSON dans la durée
* pour juger la qualité de l'interprétation, et — plus tard — s'appuyer sur
* ce qui est validé pour générer un post-it par instruction vocale, attribué
* à un assistant (vision "bureau à l'ancienne"). Cette seconde partie n'est
* PAS implémentée ici : elle suppose qu'un assistant puisse être attributaire
* d'une tâche dans ASP_ToDoList, ce qui n'existe pas encore (voir "reste à
* faire" du journal de développement) — ASP_PropositionsContact est
* volontairement une table à part, pas une écriture anticipée dans
* ASP_ToDoList qui préjugerait d'un mécanisme pas encore conçu.
*
* POST uniquement, corps JSON :
* { "texteBrut": "...", "extraction": {...} | null, "valide": {...} }
* "extraction" peut être null si l'utilisateur clique "Valider" sans être
* passé par "Interpréter" (cas limite, pas bloqué ici).
*
* ⚠️ Nécessite la création préalable de la table par Jean-Marc lui-même
* (Claude n'exécute jamais de modification de schéma — voir réflexions
* stratégiques) :
*
* CREATE TABLE ASP_PropositionsContact (
* PCT_Incr INT AUTO_INCREMENT PRIMARY KEY,
* PCT_TexteBrut TEXT NOT NULL,
* PCT_Extraction JSON NULL,
* PCT_Valide JSON NOT NULL,
* PCT_Utilisateur VARCHAR(10) NOT NULL,
* PCT_Date DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP
* );
*
* Session utilisateur : accès réservé aux utilisateurs identifiés, même
* principe que dictees_test.php/todolist.php.
*/
session_start();
header('Content-Type: application/json; charset=utf-8');
require __DIR__ . '/db.php';
if (empty($_SESSION['USR_Code'])) {
http_response_code(401);
echo json_encode(['error' => 'Non identifié — veuillez vous connecter.']);
exit;
}
if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
http_response_code(405);
echo json_encode(['error' => 'Méthode non autorisée']);
exit;
}
$data = json_decode(file_get_contents('php://input'), true) ?? [];
$texteBrut = trim((string) ($data['texteBrut'] ?? ''));
$extraction = $data['extraction'] ?? null;
$valide = $data['valide'] ?? null;
if ($texteBrut === '') {
http_response_code(400);
echo json_encode(['error' => 'Rien à enregistrer (texte brut vide)']);
exit;
}
if (!$valide) {
http_response_code(400);
echo json_encode(['error' => 'Rien à enregistrer (champs validés absents)']);
exit;
}
try {
$pdo = getDbConnection();
} catch (PDOException $e) {
http_response_code(500);
echo json_encode(['error' => 'Connexion base de données impossible']);
exit;
}
try {
$stmt = $pdo->prepare(
'INSERT INTO ASP_PropositionsContact (PCT_TexteBrut, PCT_Extraction, PCT_Valide, PCT_Utilisateur)
VALUES (?, ?, ?, ?)'
);
$stmt->execute([
$texteBrut,
$extraction !== null ? json_encode($extraction, JSON_UNESCAPED_UNICODE) : null,
json_encode($valide, JSON_UNESCAPED_UNICODE),
$_SESSION['USR_Code'],
]);
} catch (PDOException $e) {
http_response_code(500);
echo json_encode(['error' => 'Erreur base de données : ' . $e->getMessage() . ' — la table ASP_PropositionsContact existe-t-elle ? (voir en-tête de ce fichier)']);
exit;
}
echo json_encode(['success' => true, 'id' => (int) $pdo->lastInsertId()]);