gwoe-antragspruefer/app/ports/__init__.py
Dotty Dotter 8f0f6d6e32 refactor(#136): DDD-Lightweight Tag 1-4 (Ports, Adapter, Repositories, Domain-Verhalten)
ADR 0008: Lightweight-Migration ohne Package-Split

- ports/llm_bewerter.py: Protocol + LlmRequest-Dataclass
- adapters/qwen_bewerter.py: Qwen/DashScope-Adapter mit Retry-Loop
- repositories/{antrag,bewertung,abonnement}_repository.py: Protocol + Sqlite-Impl + InMemory-Fake
- analyzer.py refactored: nimmt Optional[LlmBewerter], AsyncOpenAI-Import raus
- models.py: 5 Domain-Methoden auf Bewertung/MatrixEntry
  (ist_ablehnung, hat_fundamental_kritisches_feld, verletzt_score_cap, ...)
- analyzer loggt WARNING wenn LLM Score-Cap-Invariante verletzt

Folge-PR: Callsite-Migration in main.py (~21 direkte database.*-Aufrufe)

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-25 20:55:16 +02:00

12 lines
460 B
Python

"""Ports (Protocols) für externe Dienste — Teil der Hexagonal-Migration (ADR 0008).
Ein „Port" ist hier ein ``typing.Protocol``, das einen Infrastruktur-
Zugang beschreibt (LLM-Call, Embedding-Search, Mail-Versand) ohne
konkrete Implementierung. Adapter in ``app/adapters/`` implementieren
die Ports gegen reale Systeme; Tests nutzen Fake-Implementierungen.
"""
from .llm_bewerter import LlmBewerter, LlmRequest
__all__ = ["LlmBewerter", "LlmRequest"]