Phase 3 des Payment Compliance Moduls: 1. Backend: Tender Upload + LLM Requirement Extraction + Control Matching - DB Migration 025 (tender_analyses Tabelle) - TenderHandlers: Upload, Extract, Match, List, Get (5 Endpoints) - LLM-Extraktion via Anthropic API mit Keyword-Fallback - Control-Matching mit Domain-Bonus + Keyword-Overlap Relevance 2. Frontend: Dritter Tab "Ausschreibung" in /sdk/payment-compliance - PDF/TXT/Word Upload mit Drag-Area - Automatische Analyse-Pipeline (Upload → Extract → Match) - Ergebnis-Dashboard: Abgedeckt/Teilweise/Luecken - Requirement-by-Requirement Matching mit Control-IDs + Relevanz% - Gap-Beschreibung fuer nicht-gematchte Requirements - Analyse-Historie mit Klick-to-Detail Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
38 lines
1.1 KiB
SQL
38 lines
1.1 KiB
SQL
-- Migration 025: Tender Analysis Schema
|
|
-- Stores uploaded tender documents, extracted requirements, and control matching results
|
|
|
|
CREATE TABLE IF NOT EXISTS tender_analyses (
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
tenant_id UUID NOT NULL,
|
|
|
|
-- Document
|
|
file_name VARCHAR(500) NOT NULL,
|
|
file_size BIGINT DEFAULT 0,
|
|
file_content BYTEA,
|
|
|
|
-- Project
|
|
project_name VARCHAR(500),
|
|
customer_name VARCHAR(500),
|
|
|
|
-- Status
|
|
status VARCHAR(50) DEFAULT 'uploaded',
|
|
-- CHECK (status IN ('uploaded', 'extracting', 'extracted', 'matched', 'completed', 'error'))
|
|
|
|
-- Extracted requirements
|
|
requirements JSONB DEFAULT '[]'::jsonb,
|
|
total_requirements INT DEFAULT 0,
|
|
|
|
-- Match results
|
|
match_results JSONB DEFAULT '[]'::jsonb,
|
|
matched_count INT DEFAULT 0,
|
|
unmatched_count INT DEFAULT 0,
|
|
partial_count INT DEFAULT 0,
|
|
|
|
-- Audit
|
|
created_at TIMESTAMPTZ DEFAULT NOW(),
|
|
updated_at TIMESTAMPTZ DEFAULT NOW()
|
|
);
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_ta_tenant ON tender_analyses (tenant_id);
|
|
CREATE INDEX IF NOT EXISTS idx_ta_status ON tender_analyses (status);
|