fix(evidence): resolve final review findings
This commit is contained in:
@@ -1,6 +1,10 @@
|
||||
"""Migration boundary: legacy formulas become curated evidence or session proposals."""
|
||||
|
||||
import hashlib
|
||||
|
||||
from tht.evidence import formula_store
|
||||
from tht.evidence.authoring import normalize_source_text
|
||||
from tht.evidence.canonical import CuratedEvidence
|
||||
from tht.evidence.formula_store import ConceptFormula
|
||||
|
||||
|
||||
@@ -13,17 +17,124 @@ def test_reviewed_formula_migration_has_deterministic_provenance_hash():
|
||||
sources=["Regola clinica approvata dal gruppo pediatrico."],
|
||||
)
|
||||
|
||||
original_source = """---
|
||||
concept: fascia pediatrica
|
||||
columns: [clinical.patient.birth_date]
|
||||
status: reviewed
|
||||
sources:
|
||||
- Regola clinica approvata dal gruppo pediatrico.
|
||||
---
|
||||
CASE WHEN age < 18 THEN 'pediatrica' ELSE 'adulta' END
|
||||
"""
|
||||
|
||||
first = formula_store.legacy_formula_to_curated(
|
||||
formula, legacy_path="formulas/fascia-pediatrica-1.sql.md",
|
||||
formula,
|
||||
legacy_path="formulas/fascia-pediatrica-1.sql.md",
|
||||
source_content=original_source,
|
||||
)
|
||||
second = formula_store.legacy_formula_to_curated(
|
||||
formula,
|
||||
legacy_path="formulas/fascia-pediatrica-1.sql.md",
|
||||
source_content=original_source,
|
||||
)
|
||||
|
||||
assert isinstance(first, CuratedEvidence)
|
||||
assert isinstance(second, CuratedEvidence)
|
||||
assert first.provenance.source_sha256 == second.provenance.source_sha256
|
||||
expected = hashlib.sha256(normalize_source_text(original_source).encode("utf-8")).hexdigest()
|
||||
assert first.provenance.source_sha256 == f"sha256:{expected}"
|
||||
|
||||
|
||||
def test_reviewed_formula_without_original_source_fails_closed():
|
||||
formula = ConceptFormula(
|
||||
concept="fascia pediatrica",
|
||||
columns=["clinical.patient.birth_date"],
|
||||
sql="CASE WHEN age < 18 THEN 'pediatrica' ELSE 'adulta' END",
|
||||
status="reviewed",
|
||||
sources=["Regola clinica approvata dal gruppo pediatrico."],
|
||||
)
|
||||
|
||||
outcome = formula_store.legacy_formula_to_curated(
|
||||
formula, legacy_path="formulas/fascia-pediatrica-1.sql.md",
|
||||
)
|
||||
|
||||
assert first is not None
|
||||
assert second is not None
|
||||
assert first.provenance.source_sha256 == second.provenance.source_sha256
|
||||
assert first.provenance.source_sha256.startswith("sha256:")
|
||||
assert outcome.code == "legacy_formula_requires_manual_review"
|
||||
assert outcome.problems == ("original_source_required",)
|
||||
|
||||
|
||||
def test_reviewed_formula_without_verified_supporting_excerpts_fails_closed():
|
||||
formula = ConceptFormula(
|
||||
concept="fascia pediatrica",
|
||||
columns=["clinical.patient.birth_date"],
|
||||
sql="CASE WHEN age < 18 THEN 'pediatrica' ELSE 'adulta' END",
|
||||
status="reviewed",
|
||||
sources=["Nota non presente nel sorgente originale."],
|
||||
)
|
||||
original_source = """---
|
||||
concept: fascia pediatrica
|
||||
columns: [clinical.patient.birth_date]
|
||||
status: reviewed
|
||||
sources:
|
||||
- >-
|
||||
Nota non presente nel
|
||||
sorgente originale.
|
||||
---
|
||||
CASE WHEN age < 18 THEN 'pediatrica' ELSE 'adulta' END
|
||||
"""
|
||||
|
||||
outcome = formula_store.legacy_formula_to_curated(
|
||||
formula,
|
||||
legacy_path="formulas/fascia-pediatrica-1.sql.md",
|
||||
source_content=original_source,
|
||||
)
|
||||
|
||||
assert outcome.code == "legacy_formula_requires_manual_review"
|
||||
assert outcome.problems == ("supporting_excerpt_unverified",)
|
||||
|
||||
|
||||
def test_reviewed_formula_without_provenance_notes_fails_closed():
|
||||
formula = ConceptFormula(
|
||||
concept="fascia pediatrica",
|
||||
columns=["clinical.patient.birth_date"],
|
||||
sql="CASE WHEN age < 18 THEN 'pediatrica' ELSE 'adulta' END",
|
||||
status="reviewed",
|
||||
sources=[],
|
||||
)
|
||||
|
||||
outcome = formula_store.legacy_formula_to_curated(
|
||||
formula,
|
||||
legacy_path="formulas/fascia-pediatrica-1.sql.md",
|
||||
source_content=formula.dump(),
|
||||
)
|
||||
|
||||
assert outcome.code == "legacy_formula_requires_manual_review"
|
||||
assert outcome.problems == ("supporting_excerpts_required",)
|
||||
|
||||
|
||||
def test_reviewed_formula_must_match_the_original_source_record():
|
||||
formula = ConceptFormula(
|
||||
concept="fascia pediatrica",
|
||||
columns=["clinical.patient.birth_date"],
|
||||
sql="CASE WHEN age < 18 THEN 'pediatrica' ELSE 'adulta' END",
|
||||
status="reviewed",
|
||||
sources=["Regola clinica approvata dal gruppo pediatrico."],
|
||||
)
|
||||
different_source = ConceptFormula(
|
||||
concept=formula.concept,
|
||||
columns=formula.columns,
|
||||
sql="CASE WHEN age < 16 THEN 'pediatrica' ELSE 'adulta' END",
|
||||
status=formula.status,
|
||||
sources=formula.sources,
|
||||
).dump()
|
||||
|
||||
outcome = formula_store.legacy_formula_to_curated(
|
||||
formula,
|
||||
legacy_path="formulas/fascia-pediatrica-1.sql.md",
|
||||
source_content=different_source,
|
||||
)
|
||||
|
||||
assert outcome.code == "legacy_formula_requires_manual_review"
|
||||
assert outcome.problems == ("original_source_mismatch",)
|
||||
|
||||
|
||||
def test_incompatible_reviewed_legacy_formula_fails_closed_with_the_original_record():
|
||||
|
||||
Reference in New Issue
Block a user