diff --git a/admin-compliance/app/sdk/cra/_components/DatasheetExtract.tsx b/admin-compliance/app/sdk/cra/_components/DatasheetExtract.tsx new file mode 100644 index 00000000..afd98aa5 --- /dev/null +++ b/admin-compliance/app/sdk/cra/_components/DatasheetExtract.tsx @@ -0,0 +1,133 @@ +'use client' + +import { useState } from 'react' +import { DATASHEET_EXAMPLES } from './readiness-presets' + +interface Followup { key: string; label: string; question: string } +interface ExtractResult { + limits: Record + provenance: Record + detected: { interfaces: string[]; units: string[] } + filled: string[] + missing: string[] + followup: Followup[] +} + +const FIELD_LABEL: Record = { + machine_designation: 'Maschinenbezeichnung', machine_type: 'Maschinentyp', manufacturer: 'Hersteller', + year_of_construction: 'Baujahr', general_description: 'Allgemeine Beschreibung', + intended_purpose: 'Verwendungszweck', area_of_use: 'Einsatzbereich', operating_modes: 'Betriebsarten', + variants: 'Varianten', foreseeable_misuses: 'Vorhersehbare Fehlanwendungen', + spatial_limits: 'Räumliche Grenzen', temporal_limits: 'Zeitliche Grenzen', + operating_conditions: 'Betriebsbedingungen', energy_supply: 'Energieversorgung', + mechanical_interfaces: 'Mechanische Schnittstellen', electrical_interfaces: 'Elektrische Schnittstellen', + software_interfaces: 'Software-Schnittstellen', pneumatic_hydraulic_interfaces: 'Pneumatik/Hydraulik', + person_groups: 'Personengruppen', qualification_requirements: 'Qualifikationsanforderungen', +} + +export function DatasheetExtract() { + const [text, setText] = useState('') + const [res, setRes] = useState(null) + const [loading, setLoading] = useState(false) + const [answers, setAnswers] = useState>({}) + + const run = async () => { + setLoading(true) + try { + const r = await fetch('/api/v1/cra/extract-datasheet', { + method: 'POST', headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ text }), + }) + setRes(r.ok ? await r.json() : null) + setAnswers({}) + } finally { setLoading(false) } + } + + return ( +
+

Datenblatt-Analyse → Maschinengrenzen

+

+ Datenblatt einfügen — wir füllen die ISO-12100-Grenzen automatisch (lokales KI-Modell, Datenhoheit) + und fragen gezielt nach, was nicht im Datenblatt steht. Jeder übernommene Wert trägt seine Quelle. +

+ +
+ Beispiel laden: + {DATASHEET_EXAMPLES.map((d) => ( + + ))} +
+ +