mirror of
https://github.com/JMP-MS/ASPIC.git
synced 2026-10-27 16:07:10 +00:00
122 lines
5.0 KiB
PHP
122 lines
5.0 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).
|
|
*
|
|
* "valide" est stocké tel quel (JSON opaque pour ce fichier, jamais inspecté
|
|
* ni validé ici) : son contenu exact suit ce que contact_ia_panel.js
|
|
* construit côté client, et a changé le 4 septembre 2026 (encore le même
|
|
* soir) sur un point à connaître pour qui lira PCT_Valide plus tard (le
|
|
* futur traitement n8n notamment) — valide.actions est passé d'un tableau
|
|
* d'objets {action_existante_code, action_nouvelle_libelle} à un simple
|
|
* tableau de libellés texte (3 zones de saisie libre, demande de Jean-Marc :
|
|
* la liste dynamique existant/nouveau était trop complexe pour un essai
|
|
* vocal rapide, et l'objectif de cette phase est justement de repérer les
|
|
* actions non encore couvertes par ASP_Actions). Aucune conséquence sur le
|
|
* schéma de la table : PCT_Valide reste une colonne JSON sans forme imposée.
|
|
*
|
|
* ⚠️ 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()]);
|