50ae9e94d1
Thin adapter — it judges the customer's reading WITHIN the already-built
RegulatoryMap, it does not assess abstract legal questions and it is not RCI.
- Reuses the existing assess_interpretation (no new legal reasoning); the 6
verdicts (plausible/too_narrow/too_broad/partially_correct/unsupported/uncertain)
pass through unchanged.
- Restricts affected_regulations/affected_obligations to those present in the map
(intersection); links to the map's uncertain regulations.
- Touched unsupported domains (wastewater/chemicals/...) are reported as
future_corpus_domains (future_corpus_needed) — never pseudo-evaluated.
- Customer-readable explanation ("Ihre Interpretation ist wahrscheinlich zu eng. …
Betroffen in Ihrer Map: CRA.").
- POST /reasoning/interpretation-in-map (renders the map, then interprets).
- 7 tests; 63 green (existing reasoning MVP stays green), mypy clean, LOC ok.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
37 lines
1.5 KiB
Python
37 lines
1.5 KiB
Python
"""Schemas for Interpretation-in-Map (step 5).
|
|
|
|
A thin adapter that evaluates a customer interpretation WITHIN the already-built
|
|
RegulatoryMap — it does not assess abstract legal questions. Application types
|
|
only; no compliance-meta-model classes (freeze v1.0 untouched).
|
|
"""
|
|
|
|
from __future__ import annotations
|
|
|
|
from typing import List
|
|
|
|
from pydantic import BaseModel, Field
|
|
|
|
from compliance.product_scope.schemas import UnsupportedDomain
|
|
from compliance.profile.canonical import CanonicalProductRegulatoryProfile
|
|
from compliance.reasoning.enums import Confidence, InterpretationVerdict
|
|
|
|
|
|
class InterpretationInMapRequest(BaseModel):
|
|
product_profile: CanonicalProductRegulatoryProfile
|
|
customer_interpretation: str
|
|
|
|
|
|
class InterpretationInMapResult(BaseModel):
|
|
raw_interpretation: str
|
|
assessment: InterpretationVerdict
|
|
in_scope_of_map: bool # True if it touches a regulation/obligation present in the map
|
|
affected_regulations: List[str] = Field(default_factory=list) # intersected with the map
|
|
affected_obligations: List[str] = Field(default_factory=list) # intersected (registry-linked)
|
|
related_uncertainties: List[str] = Field(default_factory=list) # map-uncertain regs it touches
|
|
future_corpus_domains: List[UnsupportedDomain] = Field(default_factory=list) # NOT evaluated
|
|
corrected_interpretation: str = ""
|
|
risks: List[str] = Field(default_factory=list)
|
|
legal_basis_refs: List[str] = Field(default_factory=list)
|
|
explanation: str = ""
|
|
confidence: Confidence = Confidence.MEDIUM
|