| import uuid |
| from src.models.claim import Claim, ClaimType, Polarity, StudyDesign |
| from src.detection.temporal import check_temporal_supersession |
|
|
| def make_claim(year: int, study_design: StudyDesign, sample_size: int | None = None) -> Claim: |
| return Claim( |
| id=uuid.uuid4(), |
| text="Sample claim text", |
| paper_id="pmid123", |
| section="Abstract", |
| year=year, |
| confidence_score=1.0, |
| claim_type=ClaimType.CAUSAL, |
| polarity=Polarity.POSITIVE, |
| population="human patients", |
| context="metformin 1000mg", |
| quote_anchor="metformin reduces HbA1c", |
| study_design=study_design, |
| sample_size=sample_size |
| ) |
|
|
| def test_design_strength_promotion_supersedes(): |
| |
| older_claim = make_claim(year=2015, study_design=StudyDesign.COHORT) |
| newer_claim = make_claim(year=2020, study_design=StudyDesign.META_ANALYSIS) |
| |
| is_superseded, explanation = check_temporal_supersession(older_claim, newer_claim) |
| assert is_superseded is True |
| assert explanation is not None |
| assert "supersedes" in explanation |
| assert "higher-ranked study design category" in explanation |
| |
| |
| is_superseded_swap, explanation_swap = check_temporal_supersession(newer_claim, older_claim) |
| assert is_superseded_swap is True |
| assert explanation_swap is not None |
| assert "supersedes" in explanation_swap |
|
|
| def test_equal_study_design_rank_no_supersession(): |
| |
| older_claim = make_claim(year=2018, study_design=StudyDesign.RCT, sample_size=100) |
| newer_claim = make_claim(year=2024, study_design=StudyDesign.RCT, sample_size=500) |
| |
| is_superseded, explanation = check_temporal_supersession(older_claim, newer_claim) |
| assert is_superseded is False |
| assert explanation is None |
|
|
| def test_insufficient_year_gap_no_supersession(): |
| |
| older_claim = make_claim(year=2020, study_design=StudyDesign.RCT) |
| newer_claim = make_claim(year=2022, study_design=StudyDesign.META_ANALYSIS) |
| |
| is_superseded, explanation = check_temporal_supersession(older_claim, newer_claim) |
| assert is_superseded is False |
| assert explanation is None |
|
|
| def test_same_year_no_supersession(): |
| |
| claim_a = make_claim(year=2020, study_design=StudyDesign.COHORT) |
| claim_b = make_claim(year=2020, study_design=StudyDesign.RCT) |
| |
| is_superseded, explanation = check_temporal_supersession(claim_a, claim_b) |
| assert is_superseded is False |
| assert explanation is None |
|
|
| def test_weaker_study_design_no_supersession(): |
| |
| older_claim = make_claim(year=2015, study_design=StudyDesign.RCT) |
| newer_claim = make_claim(year=2020, study_design=StudyDesign.REVIEW) |
| |
| is_superseded, explanation = check_temporal_supersession(older_claim, newer_claim) |
| assert is_superseded is False |
| assert explanation is None |
|
|
| def test_missing_year_no_supersession(): |
| |
| older_claim = make_claim(year=0, study_design=StudyDesign.RCT) |
| newer_claim = make_claim(year=2020, study_design=StudyDesign.META_ANALYSIS) |
| |
| is_superseded, explanation = check_temporal_supersession(older_claim, newer_claim) |
| assert is_superseded is False |
| assert explanation is None |
|
|
|
|