98d616d82b
The learning point is not the hypothesis, it is the QUESTION — and confirmed/refuted is too coarse.
"partial, only critical suppliers" or "certified but not lived" are not "wrong", they are valuable
knowledge. So the chain is Hypothesis -> Question -> Observation -> (Review) -> Hypothesis, and the
observation model must be defined cleanly before any store/API (else thousands of too-coarse
observations get migrated later).
compliance/onboarding/observations.py:
- ObservationType: confirmed / partial / refuted / not_applicable / unknown (richer than binary).
- Observation: {hypothesis_id, capability, question, answer (free text), observation_type,
scope_note ("only critical suppliers"), evidence_uploaded, reviewed, reviewed_by}.
- empirical_distribution() -> a DISTRIBUTION (confirmed 61 / partial 31 / refuted 8), not one %.
- empirical_confidence() -> (confirmed + 0.5*partial) / (confirmed+partial+refuted); n.a./unknown
excluded; None until calibrated.
- REVIEW GATE: only reviewed observations calibrate — a raw answer never changes a hypothesis (no
learning from outliers).
Refactor: the hypothesis is now PURE curated knowledge — the binary observations counter and any
confidence are removed from CapabilityHypothesis and the YAML; confidence is COMPUTED from the separate
reviewed observation stream. Pure, mypy --strict clean. Persistence/aggregation/calibration are 59b/c/d.
Non-runtime -> no deploy. 12 tests pass, check-loc 0.
51 lines
1.4 KiB
Python
51 lines
1.4 KiB
Python
"""Smart Onboarding Advisor — the onboarding runtime step (orchestration over existing engines).
|
|
|
|
Turns (company + products + certifications + target) into inferred assumptions, the next best questions
|
|
(<=5, each self-explaining), the capability delta, top measures, evidence requests and completeness —
|
|
with NO sales interpretation and NO regulation picking. Orchestrator only: no new engine/registry/
|
|
meta-model; certificate->capability hypotheses and target requirements are INJECTED.
|
|
"""
|
|
|
|
from __future__ import annotations
|
|
|
|
from .engine import advisor_start, apply_answer
|
|
from .hypotheses import (
|
|
CapabilityHypothesis,
|
|
inferred_hypotheses,
|
|
resolve_for_certifications,
|
|
)
|
|
from .observations import (
|
|
Observation,
|
|
ObservationType,
|
|
empirical_confidence,
|
|
empirical_distribution,
|
|
reviewed,
|
|
)
|
|
from .schemas import (
|
|
AdvisorMeasure,
|
|
AdvisorQuestion,
|
|
AdvisorResult,
|
|
InferredAssumption,
|
|
OnboardingInput,
|
|
RejectedAssumption,
|
|
)
|
|
|
|
__all__ = [
|
|
"advisor_start",
|
|
"apply_answer",
|
|
"OnboardingInput",
|
|
"AdvisorResult",
|
|
"AdvisorQuestion",
|
|
"AdvisorMeasure",
|
|
"InferredAssumption",
|
|
"RejectedAssumption",
|
|
"CapabilityHypothesis",
|
|
"inferred_hypotheses",
|
|
"resolve_for_certifications",
|
|
"Observation",
|
|
"ObservationType",
|
|
"empirical_distribution",
|
|
"empirical_confidence",
|
|
"reviewed",
|
|
]
|