11  Medical History Summary

Objectives

This guide demonstrates Medical History (MH) summary analysis.

11.1 Setup

import os
import sys
import polars as pl
from pathlib import Path

sys.path.insert(0, 'src')

from rtflite import LibreOfficeConverter
try:
    converter = LibreOfficeConverter()
except Exception:
    converter = None
    print("WARNING: LibreOffice not found. PDF conversion will be skipped.")

from csrlite import load_plan, study_plan_to_mh_summary
from csrlite.mh.mh_summary import mh_summary

11.2 Medical History Summary

Summarizes medical history by System Organ Class (SOC) and Preferred Term (PT).

11.3 StudyPlan-Driven Workflow

study_plan = load_plan("studies/xyz123/yaml/plan_xyz123.yaml")
study_plan.get_plan_df().filter(pl.col("analysis") == "mh_summary")
2026-02-03 15:27:22,133 - csrlite.common.plan - INFO - Successfully loaded dataset 'adsl' from 'studies/xyz123/yaml/../../../data/adsl.parquet'
2026-02-03 15:27:22,137 - csrlite.common.plan - INFO - Successfully loaded dataset 'adae' from 'studies/xyz123/yaml/../../../data/adae.parquet'
2026-02-03 15:27:22,139 - csrlite.common.plan - INFO - Successfully loaded dataset 'adie' from 'studies/xyz123/yaml/../../../data/adie.parquet'
2026-02-03 15:27:22,140 - csrlite.common.plan - INFO - Successfully loaded dataset 'adpd' from 'studies/xyz123/yaml/../../../data/adpd.parquet'
shape: (0, 5)
analysis population observation parameter group
str str str str str
output_files = study_plan_to_mh_summary(study_plan)

11.4 Complete Pipeline

# Load data
data_path = Path("data") if Path("data").exists() else Path("../data")
adsl = pl.read_parquet(data_path / "adsl.parquet")
admh = pl.read_parquet(data_path / "admh.parquet")

# Define output path for summary
output_summary_rtf = "studies/xyz123/rtf/mh_summary_manual.rtf"
# Ensure directory exists
Path(output_summary_rtf).parent.mkdir(parents=True, exist_ok=True)

summary_path = mh_summary(
    population=adsl,
    observation=admh,
    population_filter="SAFFL = 'Y'",
    observation_filter="MHOCCUR = 'Y'",
    id=("USUBJID", "Subject ID"),
    group=("TRT01A", "Treatment"),
    title=[
        "Summary of Medical History",
        "(Safety Population)"
    ],
    footnote=["Sorted by SOC and Preferred Term."],
    source=["Source: ADSL and ADMH datasets"],
    output_file=output_summary_rtf,
)
print(f"Generated: {summary_path}")
studies/xyz123/rtf/mh_summary_manual.rtf
Generated: studies/xyz123/rtf/mh_summary_manual.rtf