Ersetzt den ursprünglichen KI-Websuche-Ansatz (GESTIS scheiterte sowohl über Websuche als auch über direkten API-Zugriff an fehlenden schulspezifischen Tätigkeitsbeschränkungen) durch einen reinen lokalen Datenbank-Lookup gegen die offizielle RiSU-Stoffliste (1764 Stoffe inkl. Tätigkeitsbeschränkungs-Codes, Legende zur Abfragezeit übersetzt statt in die Datenbank gebacken). Keine KI-Kosten, keine Drittanbieter-Abhängigkeit mehr für diese Funktion. HazardSubstance.AgeRestriction zu ActivityRestriction umbenannt, da die Tätigkeitsbeschränkung mehr abdeckt als reine Altersgrenzen. Details und verworfene Zwischenstände in TODO.md. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
38 lines
1.6 KiB
PHP
38 lines
1.6 KiB
PHP
<?php
|
|
declare(strict_types=1);
|
|
|
|
require_once __DIR__ . '/db.php';
|
|
require_once __DIR__ . '/stoffliste.php';
|
|
|
|
header('Content-Type: application/json');
|
|
|
|
$config = require __DIR__ . '/config.php';
|
|
$pdo = ai_backend_db($config);
|
|
ai_backend_authenticate($pdo); // nur eingeloggte Nutzer der App dürfen abfragen
|
|
|
|
$body = json_decode(file_get_contents('php://input'), true);
|
|
if (!is_array($body) || !isset($body['name']) || trim((string) $body['name']) === '') {
|
|
ai_backend_fail(400, 'Ungültige Anfrage: "name" fehlt.');
|
|
}
|
|
$name = trim((string) $body['name']);
|
|
|
|
// Reiner Datenbank-Lookup (siehe stoffliste.php) — kein KI-Aufruf, keine Kosten, keine
|
|
// Netzwerkabhängigkeit von Drittanbietern. Findet die App den Stoff nicht, trägt die Lehrkraft
|
|
// die Angaben von Hand ein (kein Rateversuch über eine externe Quelle mehr, siehe TODO.md).
|
|
$entry = stoffliste_lookup($name);
|
|
if ($entry === null) {
|
|
ai_backend_fail(404, 'Stoff nicht in der RiSU-Stoffliste gefunden. Bitte Schreibweise/CAS-Nummer prüfen oder Angaben manuell eintragen.');
|
|
}
|
|
|
|
echo json_encode([
|
|
'name' => $entry['name'],
|
|
'cas' => $entry['cas'],
|
|
'ghsPictograms' => $entry['ghsPictograms'],
|
|
'signalWord' => $entry['signalWord'],
|
|
'hStatements' => implode(', ', $entry['hStatements']),
|
|
'pStatements' => implode(', ', $entry['pStatements']),
|
|
'activityRestriction' => implode('; ', stoffliste_restriction_texts($entry['activityRestrictionCodes'])),
|
|
'source' => 'RiSU-Stoffliste (Sicheres Experimentieren im Unterricht)'
|
|
. ($entry['zvg'] !== '' && $entry['zvg'] !== '-' ? ', ZVG ' . $entry['zvg'] : ''),
|
|
]);
|