def missing_respondents(reported, observed, identified):
    """Fill in missing respondents for the f1_respondent_id table.

    Args:
        reported (iterable): Respondent IDs appearing in f1_respondent_id.
        observed (iterable): Respondent IDs appearing anywhere in the ferc1 DB.
        identified (dict): A {respondent_id: respondent_name} mapping for those
            observed but not reported respondent IDs which we have been able to
            identify based on circumstantial evidence. See also:
            `pudl.extract.ferc1.PUDL_RIDS`

    Returns:
        list: A list of dictionaries representing minimal f1_respondent_id table
        records, of the form {"respondent_id": ID, "respondent_name": NAME}. These
        records are generated only for unreported respondents. Identified respondents
        get the values passed in through ``identified`` and the other observed but
        unidentified respondents are named "Missing Respondent ID"

    """
    records = []
    for rid in observed:
        if rid in reported:
            continue
        elif rid in identified:
            records.append(
                {
                    "respondent_id": rid,
                    "respondent_name": f"{identified[rid]} (PUDL determined)",
                },
            )
        else:
            records.append(
                {
                    "respondent_id": rid,
                    "respondent_name": f"Missing Respondent {rid}",
                },
            )
    return records