0d0e705117
New 3-tab structure: Website-Scan, Compliance-Check, Banner-Check. Compliance-Check Tab (replaces Dokumenten-Pruefung + Impressum-Check): - 8 document rows: DSI, Impressum, Social Media, Cookie, AGB, Nutzungsbedingungen, Widerruf, DSB-Kontakt - Each row: URL input + "Text laden" + file upload + manual text - "Text laden" extracts via consent-tester, shows in editable textarea - User verifies/corrects text before checking - Empty fields = "not present" → own finding Business Profiler (business_profiler.py): - Detects B2B/B2C/B2G from all documents together - Recognizes regulated professions, online shops, editorial content - Context-aware: INFO checks become PASS/FAIL based on profile Backend: /compliance-check + /extract-text endpoints Frontend: ComplianceCheckTab.tsx + DocumentRow.tsx API proxies: compliance-check/route.ts + extract-text/route.ts Also: Impressum regex fixes (Telefon, AG, Geschaeftsfuehrung) and INFO severity for context-dependent checks. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
40 lines
1.3 KiB
TypeScript
40 lines
1.3 KiB
TypeScript
/**
|
|
* Unified Compliance Check Proxy
|
|
* POST: start check for all documents, GET: poll status
|
|
*/
|
|
|
|
import { NextRequest, NextResponse } from 'next/server'
|
|
|
|
const BACKEND_URL = process.env.BACKEND_API_URL || 'http://backend-compliance:8002'
|
|
|
|
export async function POST(request: NextRequest) {
|
|
try {
|
|
const body = await request.text()
|
|
const response = await fetch(`${BACKEND_URL}/api/compliance/agent/compliance-check`, {
|
|
method: 'POST',
|
|
headers: { 'Content-Type': 'application/json' },
|
|
body,
|
|
signal: AbortSignal.timeout(30000),
|
|
})
|
|
const data = await response.json()
|
|
return NextResponse.json(data, { status: response.status })
|
|
} catch (error) {
|
|
return NextResponse.json({ error: 'Pruefung konnte nicht gestartet werden' }, { status: 503 })
|
|
}
|
|
}
|
|
|
|
export async function GET(request: NextRequest) {
|
|
const checkId = request.nextUrl.searchParams.get('check_id')
|
|
if (!checkId) return NextResponse.json({ error: 'check_id required' }, { status: 400 })
|
|
try {
|
|
const response = await fetch(
|
|
`${BACKEND_URL}/api/compliance/agent/compliance-check/${checkId}`,
|
|
{ signal: AbortSignal.timeout(10000) },
|
|
)
|
|
const data = await response.json()
|
|
return NextResponse.json(data)
|
|
} catch {
|
|
return NextResponse.json({ error: 'Status-Abfrage fehlgeschlagen' }, { status: 503 })
|
|
}
|
|
}
|