Files
ThothII/harness/tests/test_formula.py
T

83 lines
2.6 KiB
Python

"""L1: session-local Formula proposals and their reviewer decisions."""
from datetime import UTC, datetime
from tht.decisions import DecisionRecord
from tht.evidence.session import project_session
from tht.session.models import SchemaLinking
def test_concept_formula_decision_types_exist():
import typing
from tht.decisions import DecisionType
args = typing.get_args(DecisionType)
assert "concept_formula_approved" in args
assert "concept_formula_rejected" in args
def test_session_formula_proposal_is_versioned_and_is_not_published_evidence(tmp_path):
linking = SchemaLinking(
question="Conta i pazienti pediatrici",
concept_formulas=[{
"concept": "fascia pediatrica",
"columns": ["clinical.patient.birth_date"],
"sql": "CASE WHEN age < 18 THEN 'pediatrica' ELSE 'adulta' END",
"sources": ["Sintetizzata nella sessione"],
}],
)
decisions = [DecisionRecord(
seq=9,
ts=datetime(2026, 8, 25, tzinfo=UTC),
type="concept_formula_approved",
subject="phase:4",
detail="fascia pediatrica",
)]
projected = project_session(decisions, linking, tmp_path / "evidence")
assert projected == [{
"schema_version": 1,
"kind": "formula_proposal",
"publication": "session_only",
"concept": "fascia pediatrica",
"columns": ["clinical.patient.birth_date"],
"sql": "CASE WHEN age < 18 THEN 'pediatrica' ELSE 'adulta' END",
"sources": ["Sintetizzata nella sessione"],
"decision_seq": 9,
}]
def test_session_formula_proposals_require_an_unretracted_positive_f4_decision(tmp_path):
linking = SchemaLinking(
question="Conta i pazienti pediatrici",
concept_formulas=[
{"concept": "approvata", "columns": [], "sql": "1", "sources": []},
{"concept": "rifiutata", "columns": [], "sql": "2", "sources": []},
{"concept": "indecisa", "columns": [], "sql": "3", "sources": []},
],
)
decisions = [
DecisionRecord(
seq=3,
ts=datetime(2026, 8, 25, tzinfo=UTC),
type="concept_formula_approved",
subject="phase:4",
detail="approvata",
),
DecisionRecord(
seq=4,
ts=datetime(2026, 8, 25, tzinfo=UTC),
type="concept_formula_rejected",
subject="phase:4",
detail="rifiutata",
),
]
projected = project_session(decisions, linking, tmp_path / "evidence")
assert [(proposal["concept"], proposal["decision_seq"]) for proposal in projected] == [
("approvata", 3),
]