78aeedafae
Step 2 of the convergence sequence. The Navigator sits over the CanonicalProductRegulatoryProfile (prefilled from company-profile / ProductWizard) and reports ONLY which facts are still missing + prioritized questions to collect them. It decides which facts are needed, NEVER what applies — that stays with the Scope Engine (step 3). No regulation logic, no UI, no Go, no RAG. - NavigatorQuestion (interaction type, NOT a compliance-meta-model class — freeze v1.0 untouched): question_id, target_field, label, why_needed, regulatory_domains_unblocked (static metadata), answer_type, options, priority. - QUESTION_CATALOG: 12 questions over canonical gaps — P0 (markets, role, lifecycle, machine/component), P1 (radio, usage-data, security-function, environmental wastewater/air/chemicals triggers), P2 (structured BOM). - engine: navigate() -> missing_facts + suggested_questions (priority-sorted) + completeness_summary (ready_for_scope = no P0 missing); apply_answers() -> updated profile. Pure field-presence; no scope import. - 8 tests: <=10 questions for a filled company-profile, known facts not re-asked, environmental = trigger questions only (no law evaluation), apply round-trip, P0 ordering, ready_for_scope. 41 tests green, mypy clean, LOC ok. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
30 lines
828 B
Python
30 lines
828 B
Python
"""Product Regulatory Navigator — thin missing-facts layer.
|
|
|
|
Sits above the CanonicalProductRegulatoryProfile (prefilled from company-profile /
|
|
ProductWizard) and reports only which facts are still missing + prioritized
|
|
questions to collect them. It decides which facts are needed, NOT what regulation
|
|
applies — that stays with the Scope Engine (step 3). No regulation logic, no UI,
|
|
no Go, no RAG.
|
|
"""
|
|
|
|
from __future__ import annotations
|
|
|
|
from .engine import CompletenessSummary, NavigatorResult, apply_answers, navigate
|
|
from .questions import (
|
|
QUESTION_CATALOG,
|
|
AnswerType,
|
|
NavigatorQuestion,
|
|
QuestionPriority,
|
|
)
|
|
|
|
__all__ = [
|
|
"navigate",
|
|
"apply_answers",
|
|
"NavigatorResult",
|
|
"CompletenessSummary",
|
|
"NavigatorQuestion",
|
|
"AnswerType",
|
|
"QuestionPriority",
|
|
"QUESTION_CATALOG",
|
|
]
|