File size: 2,149 Bytes
5dcfc5c
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
import json
from pathlib import Path
from typing import Any

from figment.rules import run_red_flag_checks


CARD_DIR = Path("data/protocol_cards")


def _known_card_ids() -> set[str]:
    return {
        json.loads(path.read_text(encoding="utf-8"))["card_id"]
        for path in CARD_DIR.glob("*.json")
    }


def _confirmed(**overrides: Any) -> dict[str, Any]:
    intake = {
        "confirmed": True,
        "setting": "field clinic",
        "patient_age": "42",
        "pregnancy_status": "not_applicable",
        "chief_concern": "",
        "symptoms": "",
        "vitals": "",
        "allergies": "unknown",
        "medications": "unknown",
        "available_supplies": "radio, basic kit",
        "responder_note": "",
    }
    intake.update(overrides)
    return intake


def test_red_flag_rules_emit_only_existing_protocol_card_ids() -> None:
    cases = [
        _confirmed(chief_concern="new confusion", symptoms="difficult to wake"),
        _confirmed(chief_concern="severe respiratory distress", symptoms="gasping and blue lips"),
        _confirmed(
            pregnancy_status="pregnant",
            chief_concern="vaginal bleeding",
            symptoms="severe headache",
        ),
        _confirmed(chief_concern="chest pain", symptoms="chest pressure"),
        _confirmed(chief_concern="stroke concern", symptoms="facial droop and slurred speech"),
        _confirmed(patient_age="7", chief_concern="dehydration", symptoms="lethargic with no urine"),
        _confirmed(chief_concern="fever", symptoms="stiff neck", vitals="temperature 103 F"),
        _confirmed(chief_concern="wound getting worse", symptoms="spreading redness and foul drainage"),
    ]
    known_cards = _known_card_ids()
    emitted_rules = []

    for intake in cases:
        emitted_rules.extend(run_red_flag_checks(intake))

    assert {
        "AMS-001",
        "RESP-001",
        "PREG-001",
        "red_flag_chest_pain",
        "STROKE-001",
        "PED-DEHYD-001",
        "FEVER-001",
        "WOUND-001",
    } == {rule.rule_id for rule in emitted_rules}
    assert {rule.card_id for rule in emitted_rules} <= known_cards