def add_child(
        self,
        parent_slug=None,
        title="",
        level="",
        start_date=None,
        end_date=None,
        date_expression=None,
        notes=[],
    ):
        """
        Adds a new resource component parented within `parent`.

        :param str parent_slug: The parent's slug.
        :param str title: A title for the record.
        :param str level: The level of description.

        :return: The ID of the newly-created record.
        """

        new_object = {"title": title, "level_of_description": level}

        if parent_slug is not None:
            new_object["parent_slug"] = parent_slug

        # Optionally add date specification
        new_date = {}

        if start_date is not None:
            new_date["start_date"] = start_date

        if end_date is not None:
            new_date["end_date"] = end_date

        if date_expression is not None:
            new_date["date"] = date_expression

        if new_date != {}:
            new_object["dates"] = [new_date]

        # Optionally add notes
        new_object["notes"] = []
        for note in notes:
            note_type = note.get("type", "General note")
            # If there is a note, but it's an empty string, skip this;
            content = note.get("content")
            if not content:
                continue
            new_note = {"content": content, "type": note_type}
            new_object["notes"].append(new_note)

        return self._post(
            urljoin(self.base_url, "informationobjects"),
            data=json.dumps(new_object),
            expected_response=201,
        ).json()["slug"]