def METHOD_NAME(positions: list[Position]) -> pd.DataFrame:
    """
    Generate a positions report.
    Parameters
    ----------
    positions : list[Position]
        The positions for the report.
    Returns
    -------
    pd.DataFrame
    """
    if not positions:
        return pd.DataFrame()
    positions = [p.to_dict() for p in positions]
    if not positions:
        return pd.DataFrame()
    sort = ["ts_opened", "ts_closed", "position_id"]
    report = pd.DataFrame(data=positions).set_index("position_id").sort_values(sort)
    del report["signed_qty"]
    del report["quantity"]
    del report["quote_currency"]
    del report["base_currency"]
    del report["settlement_currency"]
    report["ts_opened"] = [unix_nanos_to_dt(ts_opened) for ts_opened in report["ts_opened"]]
    report["ts_closed"] = [
        unix_nanos_to_dt(ts_closed) if not pd.isna(ts_closed) else pd.NA
        for ts_closed in report["ts_closed"]
    ]
    return report