| 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 |
|
|