5e5002c883
Architecture-validation finding: the implementation mode produced compliance-
flavored output ("teilweise erfüllt", "covered") from a mere customer claim,
blurring the line to the Execution layer. This is a design decision, not a text
fix — the reasoning layer judges only the customer's STATEMENT, never conformity.
- CoverageStatus -> ClaimCoverage; values are claim-relative + carry "potential":
potentially_addresses / partially_addresses / does_not_address /
insufficient_information.
- ImplementationAssessment -> ClaimObligationMapping (coverage_status ->
claim_coverage); ImplementationResponse -> ImplementationReasoningResponse
(assessments -> mappings, + explicit `disclaimer`); request renamed; engine
entry assess_implementation -> reason_implementation_claim.
- Endpoint /reasoning/implementation-assessment -> /reasoning/implementation-reasoning.
- Summary/explanations reworded: "adressiert wahrscheinlich N Pflichten … für
eine Bewertung der tatsächlichen Umsetzung sind Nachweise erforderlich (keine
Konformitätsaussage)". No "erfüllt"/"abgedeckt" leaks.
- New guard test asserts no compliance verdict leaks (no "erfüllt"; disclaimer
separates ClaimCoverage from ComplianceStatus). 23 tests green, mypy clean.
Discovery (scope/obligations) was already structurally claim-free and unaffected.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
93 lines
2.6 KiB
Python
93 lines
2.6 KiB
Python
"""Enumerations for the Regulatory Reasoning Engine.
|
|
|
|
Kept dependency-free and Python 3.9 compatible (str-Enums, no `|` unions).
|
|
The reasoning layer sits ON TOP of the Legal Knowledge Graph (obligation
|
|
registry) and the Compliance Execution Graph (control mapping / evidence).
|
|
See memory `project_compliance_graph.md` for the cross-session contract.
|
|
"""
|
|
|
|
from __future__ import annotations
|
|
|
|
from enum import Enum
|
|
|
|
|
|
class ManufacturerRole(str, Enum):
|
|
MANUFACTURER = "manufacturer"
|
|
IMPORTER = "importer"
|
|
DISTRIBUTOR = "distributor"
|
|
INTEGRATOR = "integrator"
|
|
OPERATOR = "operator"
|
|
SERVICE_PROVIDER = "service_provider"
|
|
|
|
|
|
class ProductLifecyclePhase(str, Enum):
|
|
DEVELOPMENT = "development"
|
|
PLACING_ON_MARKET = "placing_on_market"
|
|
OPERATION = "operation"
|
|
MAINTENANCE = "maintenance"
|
|
UPDATE = "update"
|
|
END_OF_LIFE = "end_of_life"
|
|
|
|
|
|
class MarketModel(str, Enum):
|
|
B2B = "b2b"
|
|
B2C = "b2c"
|
|
BOTH = "both"
|
|
|
|
|
|
class ApplicabilityStatus(str, Enum):
|
|
APPLICABLE = "applicable"
|
|
PARTIALLY_APPLICABLE = "partially_applicable"
|
|
UNCERTAIN = "uncertain"
|
|
NOT_APPLICABLE = "not_applicable"
|
|
|
|
|
|
class Confidence(str, Enum):
|
|
HIGH = "high"
|
|
MEDIUM = "medium"
|
|
LOW = "low"
|
|
|
|
|
|
class AuthorityLevel(str, Enum):
|
|
"""How binding a statement is — answers MUST visibly separate these."""
|
|
|
|
LEGAL_TEXT = "legal_text"
|
|
RECITAL = "recital"
|
|
GUIDANCE = "guidance"
|
|
HARMONIZED_STANDARD = "harmonized_standard"
|
|
TECHNICAL_STANDARD = "technical_standard"
|
|
BEST_PRACTICE = "best_practice"
|
|
INTERNAL_INTERPRETATION = "internal_interpretation"
|
|
|
|
|
|
class OverlapType(str, Enum):
|
|
IDENTICAL = "identical"
|
|
SIMILAR = "similar"
|
|
COMPLEMENTARY = "complementary"
|
|
CONFLICTING = "conflicting"
|
|
DIFFERENT_SCOPE = "different_scope"
|
|
|
|
|
|
class ClaimCoverage(str, Enum):
|
|
"""How a customer's *claim* relates to an obligation — Welt 1 (reasoning).
|
|
|
|
This is NOT a conformity verdict. It judges only the customer's statement,
|
|
never whether the obligation is actually met. The real compliance verdict
|
|
(erfüllt/offen/unklar from verified evidence) is `ComplianceStatus`, owned by
|
|
the Compliance Execution Graph — the two must never be conflated.
|
|
"""
|
|
|
|
POTENTIALLY_ADDRESSES = "potentially_addresses"
|
|
PARTIALLY_ADDRESSES = "partially_addresses"
|
|
DOES_NOT_ADDRESS = "does_not_address"
|
|
INSUFFICIENT_INFORMATION = "insufficient_information"
|
|
|
|
|
|
class InterpretationVerdict(str, Enum):
|
|
PLAUSIBLE = "plausible"
|
|
TOO_NARROW = "too_narrow"
|
|
TOO_BROAD = "too_broad"
|
|
PARTIALLY_CORRECT = "partially_correct"
|
|
UNSUPPORTED = "unsupported"
|
|
UNCERTAIN = "uncertain"
|