45 lines
1.5 KiB
Python
45 lines
1.5 KiB
Python
"""Migration boundary: legacy formulas become curated evidence or session proposals."""
|
|
|
|
from tht.evidence import formula_store
|
|
from tht.evidence.formula_store import ConceptFormula
|
|
|
|
|
|
def test_reviewed_formula_migration_has_deterministic_provenance_hash():
|
|
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."],
|
|
)
|
|
|
|
first = formula_store.legacy_formula_to_curated(
|
|
formula, legacy_path="formulas/fascia-pediatrica-1.sql.md",
|
|
)
|
|
second = 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:")
|
|
|
|
|
|
def test_incompatible_reviewed_legacy_formula_fails_closed_with_the_original_record():
|
|
formula = ConceptFormula(
|
|
concept="ablazione",
|
|
columns=["testo"],
|
|
sql="SELECT 2",
|
|
status="reviewed",
|
|
sources=["legacy manual"],
|
|
)
|
|
|
|
outcome = formula_store.legacy_formula_to_curated(
|
|
formula, legacy_path="formulas/ablazione-2.sql.md",
|
|
)
|
|
|
|
assert outcome.code == "legacy_formula_requires_manual_review"
|
|
assert outcome.legacy_path == "formulas/ablazione-2.sql.md"
|
|
assert outcome.formula == formula
|