feat: 7 Analyse-Module auf 100% — Backend-Endpoints, DB-Model, Frontend-Persistenz
Alle 7 Analyse-Module (Requirements → Report) von ~80% auf 100% gebracht: - Modul 1 (Requirements): POST/DELETE Endpoints + Frontend-Anbindung + Rollback - Modul 2 (Controls): Evidence-Linking UI mit Validity-Badge - Modul 3 (Evidence): Pagination (Frontend + Backend) - Modul 4 (Risk Matrix): Mitigation-UI, Residual Risk, Status-Workflow - Modul 5 (AI Act): AISystemDB Model, 6 CRUD-Endpoints, Backend-Persistenz - Modul 6 (Audit Checklist): PDF-Download + Session-History - Modul 7 (Audit Report): Detail-Seite mit Checklist Sign-Off + Navigation Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -401,6 +401,60 @@ class RiskDB(Base):
|
||||
return RiskLevelEnum.LOW
|
||||
|
||||
|
||||
class AIClassificationEnum(str, enum.Enum):
|
||||
"""AI Act risk classification."""
|
||||
PROHIBITED = "prohibited"
|
||||
HIGH_RISK = "high-risk"
|
||||
LIMITED_RISK = "limited-risk"
|
||||
MINIMAL_RISK = "minimal-risk"
|
||||
UNCLASSIFIED = "unclassified"
|
||||
|
||||
|
||||
class AISystemStatusEnum(str, enum.Enum):
|
||||
"""Status of an AI system in compliance tracking."""
|
||||
DRAFT = "draft"
|
||||
CLASSIFIED = "classified"
|
||||
COMPLIANT = "compliant"
|
||||
NON_COMPLIANT = "non-compliant"
|
||||
|
||||
|
||||
class AISystemDB(Base):
|
||||
"""
|
||||
AI System registry for AI Act compliance.
|
||||
Tracks AI systems, their risk classification, and compliance status.
|
||||
"""
|
||||
__tablename__ = 'compliance_ai_systems'
|
||||
|
||||
id = Column(String(36), primary_key=True, default=lambda: str(uuid.uuid4()))
|
||||
name = Column(String(300), nullable=False)
|
||||
description = Column(Text)
|
||||
purpose = Column(String(500))
|
||||
sector = Column(String(100))
|
||||
|
||||
# AI Act classification
|
||||
classification = Column(Enum(AIClassificationEnum), default=AIClassificationEnum.UNCLASSIFIED)
|
||||
status = Column(Enum(AISystemStatusEnum), default=AISystemStatusEnum.DRAFT)
|
||||
|
||||
# Assessment
|
||||
assessment_date = Column(DateTime)
|
||||
assessment_result = Column(JSON) # Full assessment result
|
||||
obligations = Column(JSON) # List of AI Act obligations
|
||||
risk_factors = Column(JSON) # Risk factors from assessment
|
||||
recommendations = Column(JSON) # Recommendations from assessment
|
||||
|
||||
# Timestamps
|
||||
created_at = Column(DateTime, default=datetime.utcnow)
|
||||
updated_at = Column(DateTime, default=datetime.utcnow, onupdate=datetime.utcnow)
|
||||
|
||||
__table_args__ = (
|
||||
Index('ix_ai_system_classification', 'classification'),
|
||||
Index('ix_ai_system_status', 'status'),
|
||||
)
|
||||
|
||||
def __repr__(self):
|
||||
return f"<AISystem {self.name} ({self.classification.value})>"
|
||||
|
||||
|
||||
class AuditExportDB(Base):
|
||||
"""
|
||||
Tracks audit export packages generated for external auditors.
|
||||
|
||||
@@ -252,6 +252,15 @@ class RequirementRepository:
|
||||
|
||||
return items, total
|
||||
|
||||
def delete(self, requirement_id: str) -> bool:
|
||||
"""Delete a requirement."""
|
||||
requirement = self.db.query(RequirementDB).filter(RequirementDB.id == requirement_id).first()
|
||||
if not requirement:
|
||||
return False
|
||||
self.db.delete(requirement)
|
||||
self.db.commit()
|
||||
return True
|
||||
|
||||
def count(self) -> int:
|
||||
"""Count all requirements."""
|
||||
return self.db.query(func.count(RequirementDB.id)).scalar() or 0
|
||||
|
||||
Reference in New Issue
Block a user