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_summary11 Medical History Summary
Objectives
This guide demonstrates Medical History (MH) summary analysis.
11.1 Setup
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