83 lines
2.6 KiB
Python
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),
|
|
]
|