"""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"