feat(interpretation-in-map): judge a customer interpretation within the map (step 5)
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>
This commit is contained in:
@@ -0,0 +1,36 @@
|
||||
"""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
|
||||
Reference in New Issue
Block a user