Exemple #1
0
def convert_persoon_to_instance_dict(persoon):

    ingeschreven_persoon_dict = {
        "burgerservicenummer": persoon.burgerservicenummer_persoon,
        "geheimhoudingPersoonsgegevens": True,
        "naam": {
            "geslachtsnaam": persoon.geslachtsnaam_persoon,
            "voorletters": "string",
            "voornamen": persoon.voornamen_persoon,
            "voorvoegsel": persoon.voorvoegsel_geslachtsnaam_persoon,
            "inOnderzoek": {
                "geslachtsnaam": bool(persoon.geslachtsnaam_persoon),
                "voornamen": bool(persoon.voornamen_persoon),
                "voorvoegsel": bool(persoon.voorvoegsel_geslachtsnaam_persoon),
                "datumIngangOnderzoek": {
                    "dag":
                    int(persoon.datum_ingang_onderzoek[
                        settings.OPENPERSONEN_DAY_START:settings.
                        OPENPERSONEN_DAY_END]) if is_valid_date_format(
                            persoon.datum_ingang_onderzoek) else 0,
                    "datum":
                    persoon.datum_ingang_onderzoek,
                    "jaar":
                    int(persoon.datum_ingang_onderzoek[
                        settings.OPENPERSONEN_YEAR_START:settings.
                        OPENPERSONEN_YEAR_END]) if is_valid_date_format(
                            persoon.datum_ingang_onderzoek) else 0,
                    "maand":
                    int(persoon.datum_ingang_onderzoek[
                        settings.OPENPERSONEN_MONTH_START:settings.
                        OPENPERSONEN_MONTH_END]) if is_valid_date_format(
                            persoon.datum_ingang_onderzoek) else 0,
                },
            },
            "aanduidingNaamgebruik": persoon.aanduiding_naamgebruik,
        },
        "geboorte": {
            "datum": {
                "dag":
                int(persoon.geboortedatum_persoon[
                    settings.OPENPERSONEN_DAY_START:settings.
                    OPENPERSONEN_DAY_END])
                if is_valid_date_format(persoon.geboortedatum_persoon) else 0,
                "datum":
                persoon.geboortedatum_persoon,
                "jaar":
                int(persoon.geboortedatum_persoon[
                    settings.OPENPERSONEN_YEAR_START:settings.
                    OPENPERSONEN_YEAR_END])
                if is_valid_date_format(persoon.geboortedatum_persoon) else 0,
                "maand":
                int(persoon.geboortedatum_persoon[
                    settings.OPENPERSONEN_MONTH_START:settings.
                    OPENPERSONEN_MONTH_END])
                if is_valid_date_format(persoon.geboortedatum_persoon) else 0,
            },
            "land": {
                "code":
                persoon.geboorteland_persoon,
                "omschrijving":
                CountryCodeAndOmschrijving.get_omschrijving_from_code(
                    persoon.geboorteland_persoon),
            },
            "plaats": {
                "code":
                persoon.geboorteplaats_persoon,
                "omschrijving":
                GemeenteCodeAndOmschrijving.get_omschrijving_from_code(
                    persoon.geboorteplaats_persoon),
            },
            "inOnderzoek": {
                "datum": True,
                "land": True,
                "plaats": True,
                "datumIngangOnderzoek": {
                    "dag": 0,
                    "datum": "string",
                    "jaar": 0,
                    "maand": 0,
                },
            },
        },
        "geslachtsaanduiding": persoon.geslachtsaanduiding,
        "leeftijd": calculate_age(persoon.geboortedatum_persoon),
        "datumEersteInschrijvingGBA": {
            "dag": 0,
            "datum": "string",
            "jaar": 0,
            "maand": 0,
        },
        "inOnderzoek": {
            "burgerservicenummer": bool(persoon.burgerservicenummer_persoon),
            "geslachtsaanduiding": bool(persoon.geslachtsaanduiding),
            "datumIngangOnderzoek": {
                "dag": 0,
                "datum": "string",
                "jaar": 0,
                "maand": 0,
            },
        },
        "opschortingBijhouding": {
            "reden": "overlijden",
            "datum": {
                "dag": 0,
                "datum": "string",
                "jaar": 0,
                "maand": 0
            },
        },
    }

    ingeschreven_persoon_dict["kiesrecht"] = dict()
    kiesrecht = persoon.kiesrecht_set.first()
    if kiesrecht:
        ingeschreven_persoon_dict["kiesrecht"] = {
            "europeesKiesrecht":
            bool(kiesrecht.aanduiding_europees_kiesrecht),
            "uitgeslotenVanKiesrecht":
            bool(kiesrecht.aanduiding_uitgesloten_kiesrecht),
            "einddatumUitsluitingEuropeesKiesrecht": {
                "dag":
                int(kiesrecht.einddatum_uitsluiting_europees_kiesrecht[
                    settings.OPENPERSONEN_DAY_START:settings.
                    OPENPERSONEN_DAY_END])
                if is_valid_date_format(
                    kiesrecht.einddatum_uitsluiting_europees_kiesrecht) else 0,
                "datum":
                kiesrecht.einddatum_uitsluiting_europees_kiesrecht,
                "jaar":
                int(kiesrecht.einddatum_uitsluiting_europees_kiesrecht[
                    settings.OPENPERSONEN_YEAR_START:settings.
                    OPENPERSONEN_YEAR_END])
                if is_valid_date_format(
                    kiesrecht.einddatum_uitsluiting_europees_kiesrecht) else 0,
                "maand":
                int(kiesrecht.einddatum_uitsluiting_europees_kiesrecht[
                    settings.OPENPERSONEN_MONTH_START:settings.
                    OPENPERSONEN_MONTH_END])
                if is_valid_date_format(
                    kiesrecht.einddatum_uitsluiting_europees_kiesrecht) else 0,
            },
            "einddatumUitsluitingKiesrecht": {
                "dag":
                int(kiesrecht.einddatum_uitsluiting_kiesrecht[
                    settings.OPENPERSONEN_DAY_START:settings.
                    OPENPERSONEN_DAY_END]) if is_valid_date_format(
                        kiesrecht.einddatum_uitsluiting_kiesrecht) else 0,
                "datum":
                kiesrecht.einddatum_uitsluiting_kiesrecht,
                "jaar":
                int(kiesrecht.einddatum_uitsluiting_kiesrecht[
                    settings.OPENPERSONEN_YEAR_START:settings.
                    OPENPERSONEN_YEAR_END]) if is_valid_date_format(
                        kiesrecht.einddatum_uitsluiting_kiesrecht) else 0,
                "maand":
                int(kiesrecht.einddatum_uitsluiting_kiesrecht[
                    settings.OPENPERSONEN_MONTH_START:settings.
                    OPENPERSONEN_MONTH_END]) if is_valid_date_format(
                        kiesrecht.einddatum_uitsluiting_kiesrecht) else 0,
            },
        }

    ingeschreven_persoon_dict["overlijden"] = dict()
    overlijden = persoon.overlijden_set.first()
    if overlijden:
        ingeschreven_persoon_dict["overlijden"] = {
            "indicatieOverleden": True,
            "datum": {
                "dag":
                int(overlijden.
                    datum_overlijden[settings.OPENPERSONEN_DAY_START:settings.
                                     OPENPERSONEN_DAY_END])
                if is_valid_date_format(overlijden.datum_overlijden) else 0,
                "datum":
                overlijden.datum_overlijden,
                "jaar":
                int(overlijden.
                    datum_overlijden[settings.OPENPERSONEN_YEAR_START:settings.
                                     OPENPERSONEN_YEAR_END])
                if is_valid_date_format(overlijden.datum_overlijden) else 0,
                "maand":
                int(overlijden.
                    datum_overlijden[settings.OPENPERSONEN_MONTH_START:settings
                                     .OPENPERSONEN_MONTH_END])
                if is_valid_date_format(overlijden.datum_overlijden) else 0,
            },
            "land": {
                "code":
                overlijden.land_overlijden,
                "omschrijving":
                CountryCodeAndOmschrijving.get_omschrijving_from_code(
                    overlijden.land_overlijden),
            },
            "plaats": {
                "code":
                overlijden.plaats_overlijden,
                "omschrijving":
                GemeenteCodeAndOmschrijving.get_omschrijving_from_code(
                    overlijden.plaats_overlijden),
            },
            "inOnderzoek": {
                "datum": bool(overlijden.datum_overlijden),
                "land": bool(overlijden.land_overlijden),
                "plaats": bool(overlijden.plaats_overlijden),
                "datumIngangOnderzoek": {
                    "dag": 0,
                    "datum": "string",
                    "jaar": 0,
                    "maand": 0,
                },
            },
        }

    ingeschreven_persoon_dict["verblijfplaats"] = dict()
    verblijfplaats = persoon.verblijfplaats_set.first()
    if verblijfplaats:
        ingeschreven_persoon_dict["verblijfplaats"] = {
            "functieAdres": verblijfplaats.functie_adres,
            "huisletter": verblijfplaats.huisletter,
            "huisnummer": verblijfplaats.huisnummer,
            "huisnummertoevoeging": verblijfplaats.huisnummertoevoeging,
            "aanduidingBijHuisnummer":
            verblijfplaats.aanduiding_bij_huisnummer,
            "identificatiecodeNummeraanduiding":
            verblijfplaats.identificatiecode_nummeraanduiding,
            "naamOpenbareRuimte": verblijfplaats.naam_openbare_ruimte,
            "postcode": verblijfplaats.postcode,
            "woonplaatsnaam": verblijfplaats.woonplaatsnaam,
            "identificatiecodeAdresseerbaarObject": "string",
            "indicatieVestigingVanuitBuitenland": True,
            "locatiebeschrijving": verblijfplaats.locatiebeschrijving,
            "straatnaam": verblijfplaats.straatnaam,
            "vanuitVertrokkenOnbekendWaarheen": True,
            "datumAanvangAdreshouding": {
                "dag":
                int(verblijfplaats.datum_aanvang_adres_buitenland[
                    settings.OPENPERSONEN_DAY_START:settings.
                    OPENPERSONEN_DAY_END]) if is_valid_date_format(
                        verblijfplaats.datum_aanvang_adres_buitenland) else 0,
                "datum":
                verblijfplaats.datum_aanvang_adres_buitenland,
                "jaar":
                int(verblijfplaats.datum_aanvang_adres_buitenland[
                    settings.OPENPERSONEN_YEAR_START:settings.
                    OPENPERSONEN_YEAR_END]) if is_valid_date_format(
                        verblijfplaats.datum_aanvang_adres_buitenland) else 0,
                "maand":
                int(verblijfplaats.datum_aanvang_adres_buitenland[
                    settings.OPENPERSONEN_MONTH_START:settings.
                    OPENPERSONEN_MONTH_END]) if is_valid_date_format(
                        verblijfplaats.datum_aanvang_adres_buitenland) else 0,
            },
            "datumIngangGeldigheid": {
                "dag":
                int(verblijfplaats.ingangsdatum_geldigheid_met_betrekking[
                    settings.OPENPERSONEN_DAY_START:settings.
                    OPENPERSONEN_DAY_END]) if is_valid_date_format(
                        verblijfplaats.ingangsdatum_geldigheid_met_betrekking)
                else 0,
                "datum":
                verblijfplaats.ingangsdatum_geldigheid_met_betrekking,
                "jaar":
                int(verblijfplaats.ingangsdatum_geldigheid_met_betrekking[
                    settings.OPENPERSONEN_YEAR_START:settings.
                    OPENPERSONEN_YEAR_END]) if is_valid_date_format(
                        verblijfplaats.ingangsdatum_geldigheid_met_betrekking)
                else 0,
                "maand":
                int(verblijfplaats.ingangsdatum_geldigheid_met_betrekking[
                    settings.OPENPERSONEN_MONTH_START:settings.
                    OPENPERSONEN_MONTH_END]) if is_valid_date_format(
                        verblijfplaats.ingangsdatum_geldigheid_met_betrekking)
                else 0,
            },
            "datumInschrijvingInGemeente": {
                "dag":
                int(verblijfplaats.datum_inschrijving_in_de_gemeente[
                    settings.OPENPERSONEN_DAY_START:settings.
                    OPENPERSONEN_DAY_END])
                if is_valid_date_format(
                    verblijfplaats.datum_inschrijving_in_de_gemeente) else 0,
                "datum":
                verblijfplaats.datum_inschrijving_in_de_gemeente,
                "jaar":
                int(verblijfplaats.datum_inschrijving_in_de_gemeente[
                    settings.OPENPERSONEN_YEAR_START:settings.
                    OPENPERSONEN_YEAR_END])
                if is_valid_date_format(
                    verblijfplaats.datum_inschrijving_in_de_gemeente) else 0,
                "maand":
                int(verblijfplaats.datum_inschrijving_in_de_gemeente[
                    settings.OPENPERSONEN_MONTH_START:settings.
                    OPENPERSONEN_MONTH_END])
                if is_valid_date_format(
                    verblijfplaats.datum_inschrijving_in_de_gemeente) else 0,
            },
            "datumVestigingInNederland": {
                "dag":
                int(verblijfplaats.datum_vestiging_in_nederland[
                    settings.OPENPERSONEN_DAY_START:settings.
                    OPENPERSONEN_DAY_END]) if is_valid_date_format(
                        verblijfplaats.datum_vestiging_in_nederland) else 0,
                "datum":
                verblijfplaats.datum_vestiging_in_nederland,
                "jaar":
                int(verblijfplaats.datum_vestiging_in_nederland[
                    settings.OPENPERSONEN_YEAR_START:settings.
                    OPENPERSONEN_YEAR_END]) if is_valid_date_format(
                        verblijfplaats.datum_vestiging_in_nederland) else 0,
                "maand":
                int(verblijfplaats.datum_vestiging_in_nederland[
                    settings.OPENPERSONEN_MONTH_START:settings.
                    OPENPERSONEN_MONTH_END]) if is_valid_date_format(
                        verblijfplaats.datum_vestiging_in_nederland) else 0,
            },
            "gemeenteVanInschrijving": {
                "code": "string",
                "omschrijving": verblijfplaats.gemeente_van_inschrijving,
            },
            "landVanwaarIngeschreven": {
                "code": "string",
                "omschrijving": verblijfplaats.land_vanwaar_ingeschreven,
            },
            "verblijfBuitenland": {
                "adresRegel1": verblijfplaats.regel_1_adres_buitenland,
                "adresRegel2": verblijfplaats.regel_2_adres_buitenland,
                "adresRegel3": verblijfplaats.regel_3_adres_buitenland,
                "vertrokkenOnbekendWaarheen": True,
                "land": {
                    "code": "string",
                    "omschrijving": "string"
                },
            },
            "inOnderzoek": {
                "aanduidingBijHuisnummer":
                bool(verblijfplaats.aanduiding_bij_huisnummer),
                "datumAanvangAdreshouding":
                bool(verblijfplaats.datum_aanvang_adreshouding),
                "datumIngangGeldigheid":
                True,
                "datumInschrijvingInGemeente":
                bool(verblijfplaats.datum_inschrijving_in_de_gemeente),
                "datumVestigingInNederland":
                bool(verblijfplaats.datum_vestiging_in_nederland),
                "functieAdres":
                True,
                "gemeenteVanInschrijving":
                bool(verblijfplaats.gemeente_van_inschrijving),
                "huisletter":
                bool(verblijfplaats.huisletter),
                "huisnummer":
                bool(verblijfplaats.huisnummer),
                "huisnummertoevoeging":
                bool(verblijfplaats.huisnummertoevoeging),
                "identificatiecodeNummeraanduiding":
                bool(verblijfplaats.identificatiecode_nummeraanduiding),
                "identificatiecodeAdresseerbaarObject":
                True,
                "landVanwaarIngeschreven":
                bool(verblijfplaats.land_vanwaar_ingeschreven),
                "locatiebeschrijving":
                bool(verblijfplaats.locatiebeschrijving),
                "naamOpenbareRuimte":
                bool(verblijfplaats.naam_openbare_ruimte),
                "postcode":
                bool(verblijfplaats.postcode),
                "straatnaam":
                bool(verblijfplaats.straatnaam),
                "verblijfBuitenland":
                True,
                "woonplaatsnaam":
                bool(verblijfplaats.woonplaatsnaam),
                "datumIngangOnderzoek": {
                    "dag":
                    int(verblijfplaats.datum_ingang_onderzoek[
                        settings.OPENPERSONEN_DAY_START:settings.
                        OPENPERSONEN_DAY_END]) if is_valid_date_format(
                            verblijfplaats.datum_ingang_onderzoek) else 0,
                    "datum":
                    verblijfplaats.datum_ingang_onderzoek,
                    "jaar":
                    int(verblijfplaats.datum_ingang_onderzoek[
                        settings.OPENPERSONEN_YEAR_START:settings.
                        OPENPERSONEN_YEAR_END]) if is_valid_date_format(
                            verblijfplaats.datum_ingang_onderzoek) else 0,
                    "maand":
                    int(verblijfplaats.datum_ingang_onderzoek[
                        settings.OPENPERSONEN_MONTH_START:settings.
                        OPENPERSONEN_MONTH_END]) if is_valid_date_format(
                            verblijfplaats.datum_ingang_onderzoek) else 0,
                },
            },
        }

    ingeschreven_persoon_dict["gezagsverhouding"] = dict()
    gezagsverhouding = persoon.gezagsverhouding_set.first()
    if gezagsverhouding:
        ingeschreven_persoon_dict["gezagsverhouding"] = {
            "indicatieCurateleRegister":
            gezagsverhouding.indicatie_curateleregister,
            "indicatieGezagMinderjarige":
            gezagsverhouding.indicatie_gezag_minderjarige,
            "inOnderzoek": {
                "indicatieCurateleRegister":
                bool(gezagsverhouding.indicatie_curateleregister),
                "indicatieGezagMinderjarige":
                bool(gezagsverhouding.indicatie_gezag_minderjarige),
                "datumIngangOnderzoek": {
                    "dag":
                    int(gezagsverhouding.datum_ingang_onderzoek[
                        settings.OPENPERSONEN_DAY_START:settings.
                        OPENPERSONEN_DAY_END]) if is_valid_date_format(
                            gezagsverhouding.datum_ingang_onderzoek) else 0,
                    "datum":
                    gezagsverhouding.datum_ingang_onderzoek,
                    "jaar":
                    int(gezagsverhouding.datum_ingang_onderzoek[
                        settings.OPENPERSONEN_YEAR_START:settings.
                        OPENPERSONEN_YEAR_END]) if is_valid_date_format(
                            gezagsverhouding.datum_ingang_onderzoek) else 0,
                    "maand":
                    int(gezagsverhouding.datum_ingang_onderzoek[
                        settings.OPENPERSONEN_MONTH_START:settings.
                        OPENPERSONEN_MONTH_END]) if is_valid_date_format(
                            gezagsverhouding.datum_ingang_onderzoek) else 0,
                },
            },
        }

    ingeschreven_persoon_dict["verblijfstitel"] = dict()
    verblijfstitel = persoon.verblijfstitel_set.first()
    if verblijfstitel:
        ingeschreven_persoon_dict["verblijfstitel"] = {
            "aanduiding": {
                "code": "string",
                "omschrijving": verblijfstitel.aanduiding_verblijfstitel,
            },
            "datumEinde": {
                "dag":
                int(verblijfstitel.datum_einde_verblijfstitel[
                    settings.OPENPERSONEN_DAY_START:settings.
                    OPENPERSONEN_DAY_END]) if is_valid_date_format(
                        verblijfstitel.datum_einde_verblijfstitel) else 0,
                "datum":
                verblijfstitel.datum_einde_verblijfstitel,
                "jaar":
                int(verblijfstitel.datum_einde_verblijfstitel[
                    settings.OPENPERSONEN_YEAR_START:settings.
                    OPENPERSONEN_YEAR_END]) if is_valid_date_format(
                        verblijfstitel.datum_einde_verblijfstitel) else 0,
                "maand":
                int(verblijfstitel.datum_einde_verblijfstitel[
                    settings.OPENPERSONEN_MONTH_START:settings.
                    OPENPERSONEN_MONTH_END]) if is_valid_date_format(
                        verblijfstitel.datum_einde_verblijfstitel) else 0,
            },
            "datumIngang": {
                "dag":
                int(verblijfstitel.ingangsdatum_verblijfstitel[
                    settings.OPENPERSONEN_DAY_START:settings.
                    OPENPERSONEN_DAY_END]) if is_valid_date_format(
                        verblijfstitel.ingangsdatum_verblijfstitel) else 0,
                "datum":
                verblijfstitel.ingangsdatum_verblijfstitel,
                "jaar":
                int(verblijfstitel.ingangsdatum_verblijfstitel[
                    settings.OPENPERSONEN_YEAR_START:settings.
                    OPENPERSONEN_YEAR_END]) if is_valid_date_format(
                        verblijfstitel.ingangsdatum_verblijfstitel) else 0,
                "maand":
                int(verblijfstitel.ingangsdatum_verblijfstitel[
                    settings.OPENPERSONEN_MONTH_START:settings.
                    OPENPERSONEN_MONTH_END]) if is_valid_date_format(
                        verblijfstitel.ingangsdatum_verblijfstitel) else 0,
            },
            "inOnderzoek": {
                "aanduiding": bool(verblijfstitel.aanduiding_verblijfstitel),
                "datumEinde": bool(verblijfstitel.datum_einde_verblijfstitel),
                "datumIngang":
                bool(verblijfstitel.ingangsdatum_verblijfstitel),
                "datumIngangOnderzoek": {
                    "dag":
                    int(verblijfstitel.datum_ingang_onderzoek[
                        settings.OPENPERSONEN_DAY_START:settings.
                        OPENPERSONEN_DAY_END]) if is_valid_date_format(
                            verblijfstitel.datum_ingang_onderzoek) else 0,
                    "datum":
                    verblijfstitel.datum_ingang_onderzoek,
                    "jaar":
                    int(verblijfstitel.datum_ingang_onderzoek[
                        settings.OPENPERSONEN_YEAR_START:settings.
                        OPENPERSONEN_YEAR_END]) if is_valid_date_format(
                            verblijfstitel.datum_ingang_onderzoek) else 0,
                    "maand":
                    int(verblijfstitel.datum_ingang_onderzoek[
                        settings.OPENPERSONEN_MONTH_START:settings.
                        OPENPERSONEN_MONTH_END]) if is_valid_date_format(
                            verblijfstitel.datum_ingang_onderzoek) else 0,
                },
            },
        }

    ingeschreven_persoon_dict["nationaliteit"] = []

    nationaliteiten = persoon.nationaliteit_set.all()

    for nationaliteit in nationaliteiten:
        ingeschreven_persoon_dict["nationaliteit"].append({
            "aanduidingBijzonderNederlanderschap":
            nationaliteit.aanduiding_bijzonder_nederlanderschap,
            "datumIngangGeldigheid": {
                "dag":
                int(nationaliteit.datum_van_ingang_geldigheid_met_betrekking[
                    settings.OPENPERSONEN_DAY_START:settings.
                    OPENPERSONEN_DAY_END])
                if is_valid_date_format(
                    nationaliteit.datum_van_ingang_geldigheid_met_betrekking)
                else 0,
                "datum":
                nationaliteit.datum_van_ingang_geldigheid_met_betrekking,
                "jaar":
                int(nationaliteit.datum_van_ingang_geldigheid_met_betrekking[
                    settings.OPENPERSONEN_YEAR_START:settings.
                    OPENPERSONEN_YEAR_END])
                if is_valid_date_format(
                    nationaliteit.datum_van_ingang_geldigheid_met_betrekking)
                else 0,
                "maand":
                int(nationaliteit.datum_van_ingang_geldigheid_met_betrekking[
                    settings.OPENPERSONEN_MONTH_START:settings.
                    OPENPERSONEN_MONTH_END])
                if is_valid_date_format(
                    nationaliteit.datum_van_ingang_geldigheid_met_betrekking)
                else 0,
            },
            "nationaliteit": {
                "code": "string",
                "omschrijving": nationaliteit.nationaliteit,
            },
            "redenOpname": {
                "code":
                nationaliteit.reden_opname_nationaliteit,
                "omschrijving":
                RedenCodeAndOmschrijving.get_omschrijving_from_code(
                    nationaliteit.reden_opname_nationaliteit),
            },
            "inOnderzoek": {
                "aanduidingBijzonderNederlanderschap":
                bool(nationaliteit.aanduiding_bijzonder_nederlanderschap),
                "nationaliteit":
                bool(nationaliteit.nationaliteit),
                "redenOpname":
                bool(nationaliteit.reden_opname_nationaliteit),
                "datumIngangOnderzoek": {
                    "dag":
                    int(nationaliteit.datum_ingang_onderzoek[
                        settings.OPENPERSONEN_DAY_START:settings.
                        OPENPERSONEN_DAY_END]) if is_valid_date_format(
                            nationaliteit.datum_ingang_onderzoek) else 0,
                    "datum":
                    nationaliteit.datum_ingang_onderzoek,
                    "jaar":
                    int(nationaliteit.datum_ingang_onderzoek[
                        settings.OPENPERSONEN_YEAR_START:settings.
                        OPENPERSONEN_YEAR_END]) if is_valid_date_format(
                            nationaliteit.datum_ingang_onderzoek) else 0,
                    "maand":
                    int(nationaliteit.datum_ingang_onderzoek[
                        settings.OPENPERSONEN_MONTH_START:settings.
                        OPENPERSONEN_MONTH_END]) if is_valid_date_format(
                            nationaliteit.datum_ingang_onderzoek) else 0,
                },
            },
        })

    ingeschreven_persoon_dict["reisdocumenten"] = []
    for reisdocument in persoon.reisdocument_set.all():
        ingeschreven_persoon_dict["reisdocumenten"].append(
            reisdocument.nummer_nederlands_reisdocument)

    ingeschreven_persoon_dict["kinderen"] = []
    for kind in persoon.kind_set.all():
        ingeschreven_persoon_dict["kinderen"].append(
            convert_kind_instance_to_dict(kind))

    partners_title = None
    partners_last_name_prefix = None
    partners_last_name = None
    partners_date = None
    ingeschreven_persoon_dict["partners"] = []
    for partner in persoon.partnerschap_set.all():
        ingeschreven_persoon_dict["partners"].append(
            convert_partner_instance_to_dict(partner))
        if (not partners_last_name or
            (partner.datum_ontbinding_huwelijk_geregistreerd_partnerschap
             and partners_date >
             partner.datum_huwelijkssluiting_aangaan_geregistreerd_partnerschap
             ) or
            (partner.datum_ontbinding_huwelijk_geregistreerd_partnerschap == ""
             and partners_date <
             partner.datum_huwelijkssluiting_aangaan_geregistreerd_partnerschap
             )):
            (
                partners_title,
                partners_last_name_prefix,
                partners_last_name,
                partners_date,
            ) = _get_partner_info(partner)

    ingeschreven_persoon_dict["ouders"] = []
    for ouder in persoon.ouder_set.all():
        ingeschreven_persoon_dict["ouders"].append(
            convert_ouder_instance_to_dict(ouder))

    ingeschreven_persoon_dict["naam"]["aanhef"] = get_aanhef(
        persoon.voorvoegsel_geslachtsnaam_persoon,
        persoon.geslachtsnaam_persoon,
        partners_last_name_prefix,
        partners_last_name,
        persoon.aanduiding_naamgebruik,
        persoon.geslachtsaanduiding,
        persoon.adellijke_titel_predikaat_persoon,
        partners_title,
    )

    ingeschreven_persoon_dict["naam"]["aanschrijfwijze"] = get_aanschrijfwijze(
        persoon.voorvoegsel_geslachtsnaam_persoon,
        persoon.geslachtsnaam_persoon,
        persoon.voornamen_persoon,
        partners_last_name_prefix,
        partners_last_name,
        persoon.aanduiding_naamgebruik,
        persoon.geslachtsaanduiding,
        persoon.adellijke_titel_predikaat_persoon,
        partners_title,
    )

    ingeschreven_persoon_dict["naam"][
        "gebruikInLopendeTekst"] = get_gebruik_in_lopende_tekst(
            persoon.voorvoegsel_geslachtsnaam_persoon,
            persoon.geslachtsnaam_persoon,
            partners_last_name_prefix,
            partners_last_name,
            persoon.aanduiding_naamgebruik,
            persoon.geslachtsaanduiding,
            persoon.adellijke_titel_predikaat_persoon,
            partners_title,
        )

    return ingeschreven_persoon_dict
Exemple #2
0
    def test_get_aanhef_with_adelijke_titel_of_predikaat(self):
        table_string = """
              | geslachtsaanduiding | geslachtsaanduiding partner | adellijkeTitel_predikaat partner | aanduidingNaamgebruik | aanschrijfwijze                         | aanhef                                     |
              | V                   | M                           | Baron                            | Eigen                 | A.C. van der Veen                       | Geachte mevrouw Van der Veen               |
              | V                   | M                           | Baron                            | Partner na eigen      | A.C. van der Veen-barones van den Aedel | Hoogwelgeboren vrouwe                      |
              | V                   | M                           | Baron                            | Partner               | A.C. barones van den Aedel              | Hoogwelgeboren vrouwe                      |
              | V                   | M                           | Baron                            | Partner voor eigen    | A.C. barones van den Aedel-van der Veen | Hoogwelgeboren vrouwe                      |
              | M                   | V                           | Gravin                           | Eigen                 | W. van der Veen                         | Geachte heer Van der Veen                  |
              | M                   | V                           | Gravin                           | Partner na eigen      | W. van der Veen-van den Aedel           | Geachte heer Van der Veen-van den Aedel    |
              | M                   | V                           | Gravin                           | Partner               | W. van den Aedel                        | Geachte heer Van den Aedel                 |
              | M                   | V                           | Gravin                           | Partner voor eigen    | W. van den Aedel-van der Veen           | Geachte heer Van den Aedel-van der Veen    |
              | M                   | M                           | Baron                            | Partner na eigen      | W. van der Veen-van den Aedel           | Geachte heer Van der Veen-van den Aedel    |
              | V                   | V                           | Barones                          | Partner na eigen      | W. van der Veen-van den Aedel           | Geachte mevrouw Van der Veen-van den Aedel |
              | V                   | M                           | Ridder                           | Partner na eigen      | W. van der Veen-van den Aedel           | Geachte mevrouw Van der Veen-van den Aedel |
              | V                   | M                           | Ridder                           | Partner               | W. van den Aedel                        | Geachte mevrouw Van den Aedel              |
              | V                   | M                           | Jonkheer                         | Eigen                 | A.C. van der Veen                       | Geachte mevrouw Van der Veen               |
              | V                   | M                           | Jonkheer                         | Partner na eigen      | A.C. van der Veen-van den Aedel         | Geachte mevrouw Van der Veen-van den Aedel |
              | V                   | M                           | Jonkheer                         | Partner               | A.C. van den Aedel                      | Geachte mevrouw Van den Aedel              |
              | V                   | M                           | Jonkheer                         | Partner voor eigen    | A.C. van den Aedel-van der Veen         | Geachte mevrouw Van den Aedel-van der Veen |
        """

        # Convert table string to rows and remove empty rows, white spaces, and header row
        table_rows = [
            [item.strip() for item in row.strip().split("|") if item]
            for row in table_string.split("\n")
            if row.strip()
        ][1:]

        for row in table_rows:
            (
                gender_designation,
                geslachtsaanduiding_partner,
                adelijke_title_predikaat_partner,
                aanduiding_naamgebruik,
                aanschrijfwijze,
                aanhef,
            ) = row

            last_name = aanhef
            for title in [
                "Hoogwelgeboren heer",
                "Hoogwelgeboren vrouwe",
                "Geachte mevrouw ",
            ]:
                last_name = last_name.replace(title, "")

            last_name_prefix = None
            partner_last_name_prefix = None
            partner_last_name = None

            if aanduiding_naamgebruik == "Eigen":
                last_name = aanschrijfwijze.split(" ", 1)[-1]
                if len(last_name.split(" ")) > 1:
                    split_last_name = last_name.split(" ")
                    last_name_prefix = " ".join(split_last_name[:-1])
                    last_name = split_last_name[-1]
            elif aanduiding_naamgebruik == "Partner na eigen":
                last_name = aanschrijfwijze.split(" ", 1)[-1]
                last_name, partner_last_name = last_name.split("-")
                if len(last_name.split(" ")) > 1:
                    split_last_name = last_name.split(" ")
                    last_name_prefix = " ".join(split_last_name[:-1])
                    last_name = split_last_name[-1]
                if len(partner_last_name.split(" ")) > 1:
                    split_partner_last_name = partner_last_name.split(" ")
                    partner_last_name_prefix = " ".join(split_partner_last_name[:-1])
                    partner_last_name = split_partner_last_name[-1]
            elif aanduiding_naamgebruik == "Partner":
                partner_last_name = aanschrijfwijze.split(" ", 1)[-1]
                if len(partner_last_name.split(" ")) > 1:
                    split_partner_last_name = partner_last_name.split(" ")
                    partner_last_name_prefix = " ".join(split_partner_last_name[:-1])
                    partner_last_name = split_partner_last_name[-1]
            elif aanduiding_naamgebruik == "Partner voor eigen":
                last_name = aanschrijfwijze.split(" ", 1)[-1]
                partner_last_name, last_name = last_name.split("-")
                if len(last_name.split(" ")) > 1:
                    split_last_name = last_name.split(" ")
                    last_name_prefix = " ".join(split_last_name[:-1])
                    last_name = split_last_name[-1]
                if len(partner_last_name.split(" ")) > 1:
                    split_partner_last_name = partner_last_name.split(" ")
                    partner_last_name_prefix = " ".join(split_partner_last_name[:-1])
                    partner_last_name = split_partner_last_name[-1]

            with self.subTest(
                gender_designation=gender_designation,
                geslachtsaanduiding_partner=geslachtsaanduiding_partner,
                adelijke_title_predikaat_partner=adelijke_title_predikaat_partner,
                aanduiding_naamgebruik=aanduiding_naamgebruik,
            ):
                result = get_aanhef(
                    last_name_prefix,
                    last_name,
                    partner_last_name_prefix,
                    partner_last_name,
                    aanduiding_naamgebruik_to_enumeration[aanduiding_naamgebruik],
                    gender_designation,
                    None,
                    adelijke_title_predikaat_partner,
                )
                self.assertEqual(aanhef, result)
Exemple #3
0
    def test_get_aanhef_with_predikaat(self):
        table_string = """
            | adellijkeTitel_predikaat | aanduidingNaamgebruik | partner | Ontbinding huwelijk/geregistreerd partnerschap | aanhef                                 |
            | Jonkheer                 | Eigen                 | Geen    | Geen                                           | Hoogwelgeboren heer                    |
            | Jonkheer                 | Eigen                 | Ja      | Geen                                           | Hoogwelgeboren heer                    |
            | Jonkheer                 | Partner na eigen      | Ja      | Geen                                           | Hoogwelgeboren heer                    |
            | Jonkheer                 | Partner               | Ja      | Geen                                           | Hoogwelgeboren heer                    |
            | Jonkheer                 | Partner voor eigen    | Ja      | Geen                                           | Hoogwelgeboren heer                    |
            | Jonkvrouw                | Eigen                 | Geen    | Geen                                           | Hoogwelgeboren vrouwe                  |
            | Jonkvrouw                | Eigen                 | Ja      | Geen                                           | Geachte mevrouw Van Hoogh              |
            | Jonkvrouw                | Partner na eigen      | Ja      | Geen                                           | Geachte mevrouw Van Hoogh-van der Veen |
            | Jonkvrouw                | Partner               | Ja      | Geen                                           | Geachte mevrouw Van der Veen-van Hoogh |
            | Jonkvrouw                | Partner voor eigen    | Ja      | Geen                                           | Geachte mevrouw Van der Veen           |
            | Jonkvrouw                | Eigen                 | Ja      | Ja                                             | Hoogwelgeboren vrouwe                  |
            | Jonkvrouw                | Partner na eigen      | Ja      | Ja                                             | Geachte mevrouw Van Hoogh-van der Veen |
            | Jonkvrouw                | Partner               | Ja      | Ja                                             | Geachte mevrouw Van der Veen-van Hoogh |
            | Jonkvrouw                | Partner voor eigen    | Ja      | Ja                                             | Geachte mevrouw Van der Veen           |
        """

        # Convert table string to rows and remove empty rows, white spaces, and header row
        table_rows = [
            [item.strip() for item in row.strip().split("|") if item]
            for row in table_string.split("\n")
            if row.strip()
        ][1:]

        for row in table_rows:
            (
                adellijke_titel_predikaat,
                aanduiding_naamgebruik,
                has_partner,
                is_dissolved,
                aanhef,
            ) = row

            last_name = aanhef
            for title in [
                "Hoogwelgeboren heer",
                "Hoogwelgeboren vrouwe",
                "Geachte mevrouw ",
            ]:
                last_name = last_name.replace(title, "")

            gender_designation = None

            if "heer" in aanhef:
                gender_designation = "M"
            if "mevrouw" in aanhef:
                gender_designation = "V"

            last_name_prefix = None
            partner_last_name_prefix = None
            partner_last_name = None

            if last_name and aanduiding_naamgebruik == "Eigen":
                if len(last_name.split(" ")) > 1:
                    split_last_name = last_name.split(" ")
                    last_name_prefix = " ".join(split_last_name[:-1])
                    last_name = split_last_name[-1]
                if has_partner == "Ja":
                    partner_last_name = last_name
            elif last_name and aanduiding_naamgebruik == "Partner na eigen":
                last_name, partner_last_name = last_name.split("-")
                if len(last_name.split(" ")) > 1:
                    split_last_name = last_name.split(" ")
                    last_name_prefix = " ".join(split_last_name[:-1])
                    last_name = split_last_name[-1]
                if len(partner_last_name.split(" ")) > 1:
                    split_partner_last_name = partner_last_name.split(" ")
                    partner_last_name_prefix = " ".join(split_partner_last_name[:-1])
                    partner_last_name = split_partner_last_name[-1]
            elif last_name and aanduiding_naamgebruik == "Partner":
                partner_last_name = last_name
                last_name = None
                last_name_prefix = None
            elif last_name and aanduiding_naamgebruik == "Partner voor eigen":
                if len(last_name.split("-")) > 1:
                    partner_last_name, last_name = last_name.split("-")
                if len(last_name.split(" ")) > 1:
                    split_last_name = last_name.split(" ")
                    last_name_prefix = " ".join(split_last_name[:-1])
                    last_name = split_last_name[-1]
                if partner_last_name and len(partner_last_name.split(" ")) > 1:
                    split_partner_last_name = partner_last_name.split(" ")
                    partner_last_name_prefix = " ".join(split_partner_last_name[:-1])
                    partner_last_name = split_partner_last_name[-1]
                if not partner_last_name:
                    partner_last_name = ""
                    partner_last_name_prefix = ""

            with self.subTest(
                adellijke_titel_predikaat=adellijke_titel_predikaat,
                aanduiding_naamgebruik=aanduiding_naamgebruik,
                has_partner=has_partner,
            ):
                result = get_aanhef(
                    last_name_prefix,
                    last_name,
                    partner_last_name_prefix,
                    partner_last_name,
                    aanduiding_naamgebruik_to_enumeration[aanduiding_naamgebruik],
                    gender_designation,
                    adellijke_titel_predikaat,
                    None,
                )
                self.assertEqual(aanhef, result)
Exemple #4
0
    def test_get_aanhef_with_title(self):
        table_string = """
            | adellijkeTitel_predikaat | aanduidingNaamgebruik | aanschrijfwijze                             | aanhef                    |
            | Baron                    | Eigen                 | H.W. baron van den Aedel                    | Hoogwelgeboren heer       |
            | Barones                  | Partner na eigen      | W. barones van den Aedel-van der Veen       | Hoogwelgeboren vrouwe     |
            | Graaf                    | Partner               | F. van der Veen                             | Geachte heer Van der Veen |
            | Gravin                   | Partner voor eigen    | E.L. van der Veen-gravin van den Aedel      | Hooggeboren vrouwe        |
            | Prins                    | Eigen                 | O.B.B. prins van Roodt de Wit Blaauw        | Hoogheid                  |
            | Prinses                  | Eigen                 | E.M.V. prinses van Roodt de Wit Blaauw      | Hoogheid                  |
            | Ridder                   | Eigen                 | M. ridder van Hoogh                         | Hoogwelgeboren heer       |
        """

        # Convert table string to rows and remove empty rows, white spaces, and header row
        table_rows = [
            [item.strip() for item in row.strip().split("|") if item]
            for row in table_string.split("\n")
            if row.strip()
        ][1:]

        for row in table_rows:
            (
                adellijke_titel_predikaat,
                aanduiding_naamgebruik,
                aanschrijfwijze,
                aanhef,
            ) = row

            gender_designation = None

            if "heer" in aanhef:
                gender_designation = "M"
            if "vrouwe" in aanhef:
                gender_designation = "V"

            last_name_prefix = None
            last_name = None
            partner_last_name_prefix = None
            partner_last_name = None

            if aanduiding_naamgebruik == "Eigen":
                last_name = aanschrijfwijze.split(" ", 1)[-1]
                if len(last_name.split(" ")) > 1:
                    split_last_name = last_name.split(" ")
                    last_name_prefix = " ".join(split_last_name[:-1])
                    last_name = split_last_name[-1]
            elif aanduiding_naamgebruik == "Partner na eigen":
                last_name = aanschrijfwijze.split(" ", 1)[-1]
                last_name, partner_last_name = last_name.split("-")
                if len(last_name.split(" ")) > 1:
                    split_last_name = last_name.split(" ")
                    last_name_prefix = " ".join(split_last_name[:-1])
                    last_name = split_last_name[-1]
                if len(partner_last_name.split(" ")) > 1:
                    split_partner_last_name = partner_last_name.split(" ")
                    partner_last_name_prefix = " ".join(split_partner_last_name[:-1])
                    partner_last_name = split_partner_last_name[-1]
            elif aanduiding_naamgebruik == "Partner":
                partner_last_name = aanschrijfwijze.split(" ", 1)[-1]
                if len(partner_last_name.split(" ")) > 1:
                    split_partner_last_name = partner_last_name.split(" ")
                    partner_last_name_prefix = " ".join(split_partner_last_name[:-1])
                    partner_last_name = split_partner_last_name[-1]
            elif aanduiding_naamgebruik == "Partner voor eigen":
                last_name = aanschrijfwijze.split(" ", 1)[-1]
                partner_last_name, last_name = last_name.split("-")
                if len(last_name.split(" ")) > 1:
                    split_last_name = last_name.split(" ")
                    last_name_prefix = " ".join(split_last_name[:-1])
                    last_name = split_last_name[-1]
                if len(partner_last_name.split(" ")) > 1:
                    split_partner_last_name = partner_last_name.split(" ")
                    partner_last_name_prefix = " ".join(split_partner_last_name[:-1])
                    partner_last_name = split_partner_last_name[-1]

            with self.subTest(adellijke_titel_predikaat=adellijke_titel_predikaat):
                result = get_aanhef(
                    last_name_prefix,
                    last_name,
                    partner_last_name_prefix,
                    partner_last_name,
                    aanduiding_naamgebruik_to_enumeration[aanduiding_naamgebruik],
                    gender_designation,
                    adellijke_titel_predikaat,
                    None,
                )
                self.assertEqual(aanhef, result)
Exemple #5
0
    def test_aanhef_without_title(self):
        """
        Testing examples given here: https://github.com/VNG-Realisatie/Haal-Centraal-BRP-bevragen/blob/v1.0.0/features/aanhef.feature
        """
        table_string = """
            | aanduidingNaamgebruik | geslachtsaanduiding |samenstelling aanhef | aanschrijfwijze           | aanhef                                 |
            | Eigen                 | Man                 | GA VV GN            | H. in het Veld            | Geachte heer In het Veld               |
            | Eigen                 | Man                 | GA VV GN            | F. Groenen                | Geachte heer Groenen                   |
            | Partner na eigen      | Vrouw               | GA VV GN-VP GP      | I. van Velzen-in het Veld | Geachte mevrouw Van Velzen-in het Veld |
            | Partner na eigen      | Vrouw               | GA VV GN-VP GP      | F. Groenen-Groenink       | Geachte mevrouw Groenen-Groenink       |
            | Partner               | Vrouw               | GA VP GP            | S. van Velzen             | Geachte mevrouw Van Velzen             |
            | Partner               | Vrouw               | GA VP GP            | J.F.R. Groenen            | Geachte mevrouw Groenen                |
            | Partner voor eigen    | Man                 | GA VP GP-VV GN      | F. in het Veld-van Velzen | Geachte heer In het Veld-van Velzen    |
            | Partner voor eigen    | Man                 | GA VP GP-VV GN      | F. Groenen-Groenink       | Geachte heer Groenen-Groenink          |
        """

        # Convert table string to rows and remove empty rows, white spaces, and header row
        table_rows = [
            [item.strip() for item in row.strip().split("|") if item]
            for row in table_string.split("\n")
            if row.strip()
        ][1:]

        for row in table_rows:
            (
                aanduiding_naamgebruik,
                geslachtsaanduiding,
                _,
                aanschrijfwijze,
                aanhef,
            ) = row

            last_name_prefix = None
            last_name = None
            partner_last_name_prefix = None
            partner_last_name = None

            if aanduiding_naamgebruik == "Eigen":
                last_name = aanschrijfwijze.split(" ", 1)[-1]
                if len(last_name.split(" ")) > 1:
                    split_last_name = last_name.split(" ")
                    last_name_prefix = " ".join(split_last_name[:-1])
                    last_name = split_last_name[-1]
            elif aanduiding_naamgebruik == "Partner na eigen":
                last_name = aanschrijfwijze.split(" ", 1)[-1]
                last_name, partner_last_name = last_name.split("-")
                if len(last_name.split(" ")) > 1:
                    split_last_name = last_name.split(" ")
                    last_name_prefix = " ".join(split_last_name[:-1])
                    last_name = split_last_name[-1]
                if len(partner_last_name.split(" ")) > 1:
                    split_partner_last_name = partner_last_name.split(" ")
                    partner_last_name_prefix = " ".join(split_partner_last_name[:-1])
                    partner_last_name = split_partner_last_name[-1]
            elif aanduiding_naamgebruik == "Partner":
                partner_last_name = aanschrijfwijze.split(" ", 1)[-1]
                if len(partner_last_name.split(" ")) > 1:
                    split_partner_last_name = partner_last_name.split(" ")
                    partner_last_name_prefix = " ".join(split_partner_last_name[:-1])
                    partner_last_name = split_partner_last_name[-1]
            elif aanduiding_naamgebruik == "Partner voor eigen":
                last_name = aanschrijfwijze.split(" ", 1)[-1]
                partner_last_name, last_name = last_name.split("-")
                if len(last_name.split(" ")) > 1:
                    split_last_name = last_name.split(" ")
                    last_name_prefix = " ".join(split_last_name[:-1])
                    last_name = split_last_name[-1]
                if len(partner_last_name.split(" ")) > 1:
                    split_partner_last_name = partner_last_name.split(" ")
                    partner_last_name_prefix = " ".join(split_partner_last_name[:-1])
                    partner_last_name = split_partner_last_name[-1]

            with self.subTest(aanhef=aanhef):
                result = get_aanhef(
                    last_name_prefix,
                    last_name,
                    partner_last_name_prefix,
                    partner_last_name,
                    aanduiding_naamgebruik_to_enumeration[aanduiding_naamgebruik],
                    geslachtsaanduiding_to_enumeration[geslachtsaanduiding],
                    None,
                    None,
                )
                self.assertEqual(aanhef, result)
def get_persoon_instance_dict(instance_xml_dict):
    ingeschreven_persoon_dict = {
        "burgerservicenummer":
        instance_xml_dict.get("inp.bsn", "string"),
        "geheimhoudingPersoonsgegevens":
        instance_xml_dict.get("inp.indicatieGeheim", "string"),
        "naam": {
            "geslachtsnaam":
            instance_xml_dict.get("geslachtsnaam", "string"),
            "voorletters":
            instance_xml_dict.get("voorletters", "string"),
            "voornamen":
            instance_xml_dict.get("voornamen", "string"),
            "voorvoegsel":
            instance_xml_dict.get("voorvoegselGeslachtsnaam", "string"),
            "inOnderzoek": {
                "geslachtsnaam":
                any([
                    "Persoonsgegevens" == in_onderzoek.get("groepsnaam")
                    for in_onderzoek in instance_xml_dict.get(
                        "inOnderzoek", []) if isinstance(in_onderzoek, dict)
                ]),
                "voornamen":
                any([
                    "Persoonsgegevens" == in_onderzoek.get("groepsnaam")
                    for in_onderzoek in instance_xml_dict.get(
                        "inOnderzoek", []) if isinstance(in_onderzoek, dict)
                ]),
                "voorvoegsel":
                any([
                    "Persoonsgegevens" == in_onderzoek.get("groepsnaam")
                    for in_onderzoek in instance_xml_dict.get(
                        "inOnderzoek", []) if isinstance(in_onderzoek, dict)
                ]),
                "datumIngangOnderzoek": {
                    "dag": None,
                    "datum": None,
                    "jaar": None,
                    "maand": None,
                },
            },
            "aanduidingNaamgebruik":
            instance_xml_dict.get("aanduidingNaamgebruik", "string"),
        },
        "geboorte": {
            "datum": {
                "dag":
                int(
                    instance_xml_dict.get(
                        "geboortedatum",
                        "19000101")[settings.OPENPERSONEN_DAY_START:settings.
                                    OPENPERSONEN_DAY_END])
                if instance_xml_dict.get("geboortedatum")
                and not isinstance(instance_xml_dict["geboortedatum"], dict)
                else None,
                "datum":
                convert_datum_to_proper_date_format(
                    instance_xml_dict.get("geboortedatum"))
                if instance_xml_dict.get("geboortedatum")
                and not isinstance(instance_xml_dict["geboortedatum"], dict)
                else None,
                "jaar":
                int(
                    instance_xml_dict.get(
                        "geboortedatum",
                        "19000101")[settings.OPENPERSONEN_YEAR_START:settings.
                                    OPENPERSONEN_YEAR_END])
                if instance_xml_dict.get("geboortedatum")
                and not isinstance(instance_xml_dict["geboortedatum"], dict)
                else None,
                "maand":
                int(
                    instance_xml_dict.get(
                        "geboortedatum",
                        "19000101")[settings.OPENPERSONEN_MONTH_START:settings.
                                    OPENPERSONEN_MONTH_END])
                if instance_xml_dict.get("geboortedatum")
                and not isinstance(instance_xml_dict["geboortedatum"], dict)
                else None,
            },
            "land": {
                "code":
                instance_xml_dict.get("inp.geboorteLand"),
                "omschrijving":
                CountryCodeAndOmschrijving.get_omschrijving_from_code(
                    instance_xml_dict.get("inp.geboorteLand"))
                if instance_xml_dict.get("inp.geboorteLand") and
                not isinstance(instance_xml_dict.get("inp.geboorteLand"), dict)
                else None,
            },
            "plaats": {
                "code":
                GemeenteCodeAndOmschrijving.get_code_from_omschrijving(
                    instance_xml_dict.get("inp.geboorteplaats", 0))
                if not isinstance(instance_xml_dict.get("inp.geboorteplaats"),
                                  dict) else 0,
                "omschrijving":
                instance_xml_dict.get("inp.geboorteplaats", "string"),
            },
            "inOnderzoek": {
                "datum":
                any([
                    "Persoonsgegevens" == in_onderzoek.get("groepsnaam")
                    for in_onderzoek in instance_xml_dict.get(
                        "inOnderzoek", []) if isinstance(in_onderzoek, dict)
                ]),
                "land":
                any([
                    "Persoonsgegevens" == in_onderzoek.get("groepsnaam")
                    for in_onderzoek in instance_xml_dict.get(
                        "inOnderzoek", []) if isinstance(in_onderzoek, dict)
                ]),
                "plaats":
                any([
                    "Persoonsgegevens" == in_onderzoek.get("groepsnaam")
                    for in_onderzoek in instance_xml_dict.get(
                        "inOnderzoek", []) if isinstance(in_onderzoek, dict)
                ]),
                "datumIngangOnderzoek": {
                    "dag": None,
                    "datum": None,
                    "jaar": None,
                    "maand": None,
                },
            },
        },
        "geslachtsaanduiding":
        instance_xml_dict.get("geslachtsaanduiding", "string"),
        "leeftijd":
        calculate_age(instance_xml_dict.get("geboortedatum", "string")),
        "datumEersteInschrijvingGBA": {
            "dag":
            int(
                instance_xml_dict.get("inp.datumInschrijving", "19000101")
                [settings.OPENPERSONEN_DAY_START:settings.OPENPERSONEN_DAY_END]
            ) if instance_xml_dict.get("inp.datumInschrijving") and
            not isinstance(instance_xml_dict["inp.datumInschrijving"], dict)
            else None,
            "datum":
            convert_datum_to_proper_date_format(
                instance_xml_dict.get("inp.datumInschrijving"))
            if instance_xml_dict.get("inp.datumInschrijving") and
            not isinstance(instance_xml_dict["inp.datumInschrijving"], dict)
            else None,
            "jaar":
            int(
                instance_xml_dict.get(
                    "inp.datumInschrijving",
                    "19000101")[settings.OPENPERSONEN_YEAR_START:settings.
                                OPENPERSONEN_YEAR_END])
            if instance_xml_dict.get("inp.datumInschrijving") and
            not isinstance(instance_xml_dict["inp.datumInschrijving"], dict)
            else None,
            "maand":
            int(
                instance_xml_dict.get(
                    "inp.datumInschrijving",
                    "19000101")[settings.OPENPERSONEN_MONTH_START:settings.
                                OPENPERSONEN_MONTH_END]) if
            instance_xml_dict.get("inp.datumInschrijving") and not isinstance(
                instance_xml_dict["inp.datumInschrijving"], dict) else None,
        },
        "kiesrecht": {
            "europeesKiesrecht":
            instance_xml_dict.get("ing.aanduidingEuropeesKiesrecht") == "2",
            "uitgeslotenVanKiesrecht":
            instance_xml_dict.get("ing.aanduidingUitgeslotenKiesrecht") == "A",
            "einddatumUitsluitingEuropeesKiesrecht": {
                "dag": None,
                "datum": None,
                "jaar": None,
                "maand": None,
            },
            "einddatumUitsluitingKiesrecht": {
                "dag": None,
                "datum": None,
                "jaar": None,
                "maand": None,
            },
        },
        "inOnderzoek": {
            "burgerservicenummer":
            any([
                "Persoonsgegevens" == in_onderzoek.get("groepsnaam")
                for in_onderzoek in instance_xml_dict.get("inOnderzoek", [])
                if isinstance(in_onderzoek, dict)
            ]),
            "geslachtsaanduiding":
            any([
                "Persoonsgegevens" == in_onderzoek.get("groepsnaam")
                for in_onderzoek in instance_xml_dict.get("inOnderzoek", [])
                if isinstance(in_onderzoek, dict)
            ]),
            "datumIngangOnderzoek": {
                "dag": None,
                "datum": None,
                "jaar": None,
                "maand": None,
            },
        },
        "nationaliteit": [{
            "aanduidingBijzonderNederlanderschap":
            instance_xml_dict.get("inp.aanduidingBijzonderNederlanderschap",
                                  "string")
            if not isinstance(
                instance_xml_dict.get(
                    "inp.aanduidingBijzonderNederlanderschap"),
                dict,
            ) else 1,
            "datumIngangGeldigheid": {
                "dag":
                int(
                    instance_xml_dict.get("inp.heeftAlsNationaliteit", {}).get(
                        "inp.datumVerkrijging",
                        "19000101")[settings.OPENPERSONEN_DAY_START:settings.
                                    OPENPERSONEN_DAY_END])
                if instance_xml_dict.get("inp.heeftAlsNationaliteit",
                                         {}).get("inp.datumVerkrijging")
                and not isinstance(
                    instance_xml_dict.get("inp.heeftAlsNationaliteit",
                                          {})["inp.datumVerkrijging"],
                    dict,
                ) else None,
                "datum":
                convert_datum_to_proper_date_format(
                    instance_xml_dict.get("inp.heeftAlsNationaliteit",
                                          {}).get("inp.datumVerkrijging"))
                if instance_xml_dict.get("inp.heeftAlsNationaliteit",
                                         {}).get("inp.datumVerkrijging")
                and not isinstance(
                    instance_xml_dict.get("inp.heeftAlsNationaliteit",
                                          {})["inp.datumVerkrijging"],
                    dict,
                ) else None,
                "jaar":
                int(
                    instance_xml_dict.get("inp.heeftAlsNationaliteit", {}).get(
                        "inp.datumVerkrijging",
                        "19000101")[settings.OPENPERSONEN_YEAR_START:settings.
                                    OPENPERSONEN_YEAR_END])
                if instance_xml_dict.get("inp.heeftAlsNationaliteit",
                                         {}).get("inp.datumVerkrijging")
                and not isinstance(
                    instance_xml_dict.get("inp.heeftAlsNationaliteit",
                                          {})["inp.datumVerkrijging"],
                    dict,
                ) else None,
                "maand":
                int(
                    instance_xml_dict.get("inp.heeftAlsNationaliteit", {}).get(
                        "inp.datumVerkrijging",
                        "19000101")[settings.OPENPERSONEN_MONTH_START:settings.
                                    OPENPERSONEN_MONTH_END])
                if instance_xml_dict.get("inp.heeftAlsNationaliteit",
                                         {}).get("inp.datumVerkrijging")
                and not isinstance(
                    instance_xml_dict.get("inp.heeftAlsNationaliteit",
                                          {})["inp.datumVerkrijging"],
                    dict,
                ) else None,
            },
            "nationaliteit": {
                "code":
                instance_xml_dict.get("inp.heeftAlsNationaliteit",
                                      {}).get("gerelateerde", {}).get("code"),
                "omschrijving":
                instance_xml_dict.get("inp.heeftAlsNationaliteit",
                                      {}).get("gerelateerde",
                                              {}).get("omschrijving"),
            },
            "redenOpname": {
                "code":
                instance_xml_dict.get("inp.heeftAlsNationaliteit", {}).get(
                    "inp.redenVerkrijging", ".") if not isinstance(
                        instance_xml_dict.get("inp.heeftAlsNationaliteit",
                                              {}).get("inp.redenVerkrijging"),
                        dict,
                    ) else "string",
                "omschrijving":
                RedenCodeAndOmschrijving.get_omschrijving_from_code(
                    instance_xml_dict.get("inp.heeftAlsNationaliteit", {}).get(
                        "inp.redenVerkrijging", 0))
                if not isinstance(
                    instance_xml_dict.get("inp.heeftAlsNationaliteit",
                                          {}).get("inp.redenVerkrijging"),
                    dict,
                ) else 0,
            },
            "inOnderzoek": {
                "aanduidingBijzonderNederlanderschap":
                any([
                    "aanduidingBijzonderNederlanderschap" == in_onderzoek.get(
                        "elementnaam")
                    for in_onderzoek in instance_xml_dict.get(
                        "inOnderzoek", []) if isinstance(in_onderzoek, dict)
                ]),
                "nationaliteit":
                any([
                    "Nationaliteit" == in_onderzoek.get("groepsnaam")
                    for in_onderzoek in instance_xml_dict.get(
                        "inOnderzoek", []) if isinstance(in_onderzoek, dict)
                ]),
                "redenOpname":
                False,
                "datumIngangOnderzoek": {
                    "dag": None,
                    "datum": None,
                    "jaar": None,
                    "maand": None,
                },
            },
        }],
        "opschortingBijhouding": {
            "reden":
            instance_xml_dict.get("inp.redenOpschortingBijhouding", "string"),
            "datum": {
                "dag":
                int(
                    instance_xml_dict.get(
                        "inp.datumOpschortingBijhouding",
                        "19000101")[settings.OPENPERSONEN_DAY_START:settings.
                                    OPENPERSONEN_DAY_END])
                if instance_xml_dict.get("inp.datumOpschortingBijhouding")
                and not isinstance(
                    instance_xml_dict.get("inp.datumOpschortingBijhouding"),
                    dict) else None,
                "datum":
                convert_datum_to_proper_date_format(
                    instance_xml_dict.get("inp.datumOpschortingBijhouding"))
                if instance_xml_dict.get("inp.datumOpschortingBijhouding")
                and not isinstance(
                    instance_xml_dict.get("inp.datumOpschortingBijhouding"),
                    dict) else None,
                "jaar":
                int(
                    instance_xml_dict.get(
                        "inp.datumOpschortingBijhouding",
                        "19000101")[settings.OPENPERSONEN_YEAR_START:settings.
                                    OPENPERSONEN_YEAR_END])
                if instance_xml_dict.get("inp.datumOpschortingBijhouding")
                and not isinstance(
                    instance_xml_dict.get("inp.datumOpschortingBijhouding"),
                    dict) else None,
                "maand":
                int(
                    instance_xml_dict.get(
                        "inp.datumOpschortingBijhouding",
                        "19000101")[settings.OPENPERSONEN_MONTH_START:settings.
                                    OPENPERSONEN_MONTH_END])
                if instance_xml_dict.get("inp.datumOpschortingBijhouding")
                and not isinstance(
                    instance_xml_dict.get("inp.datumOpschortingBijhouding"),
                    dict) else None,
            },
        },
        "overlijden": {
            "indicatieOverleden":
            instance_xml_dict.get("inp.redenOpschortingBijhouding") == "O",
            "datum": {
                "dag":
                int(
                    instance_xml_dict.get(
                        "overlijdensdatum",
                        "19000101")[settings.OPENPERSONEN_DAY_START:settings.
                                    OPENPERSONEN_DAY_END])
                if instance_xml_dict.get("overlijdensdatum")
                and not isinstance(instance_xml_dict["overlijdensdatum"], dict)
                else None,
                "datum":
                convert_datum_to_proper_date_format(
                    instance_xml_dict.get("overlijdensdatum"))
                if instance_xml_dict.get("overlijdensdatum")
                and not isinstance(instance_xml_dict["overlijdensdatum"], dict)
                else None,
                "jaar":
                int(
                    instance_xml_dict.get(
                        "overlijdensdatum",
                        "19000101")[settings.OPENPERSONEN_YEAR_START:settings.
                                    OPENPERSONEN_YEAR_END])
                if instance_xml_dict.get("overlijdensdatum")
                and not isinstance(instance_xml_dict["overlijdensdatum"], dict)
                else None,
                "maand":
                int(
                    instance_xml_dict.get(
                        "overlijdensdatum",
                        "19000101")[settings.OPENPERSONEN_MONTH_START:settings.
                                    OPENPERSONEN_MONTH_END])
                if instance_xml_dict.get("overlijdensdatum")
                and not isinstance(instance_xml_dict["overlijdensdatum"], dict)
                else None,
            },
            "land": {
                "code":
                instance_xml_dict.get("inp.overlijdenLand") if
                not isinstance(instance_xml_dict.get("overlijdensdatum"), dict)
                else None,
                "omschrijving":
                CountryCodeAndOmschrijving.get_omschrijving_from_code(
                    instance_xml_dict.get("inp.overlijdenLand"))
                if instance_xml_dict.get("inp.overlijdenLand")
                and not isinstance(instance_xml_dict.get("inp.overlijdenLand"),
                                   dict) else None,
            },
            "plaats": {
                "code":
                GemeenteCodeAndOmschrijving.get_code_from_omschrijving(
                    instance_xml_dict.get("inp.overlijdenplaats", 0)) if
                not isinstance(instance_xml_dict.get("inp.overlijdenplaats"),
                               dict) else 0,
                "omschrijving": (instance_xml_dict.get("inp.overlijdenplaats",
                                                       "string")),
            },
            "inOnderzoek": {
                "datum":
                any([
                    "Overlijden" == in_onderzoek.get("groepsnaam")
                    for in_onderzoek in instance_xml_dict.get(
                        "inOnderzoek", []) if isinstance(in_onderzoek, dict)
                ]),
                "land":
                any([
                    "Overlijden" == in_onderzoek.get("groepsnaam")
                    for in_onderzoek in instance_xml_dict.get(
                        "inOnderzoek", []) if isinstance(in_onderzoek, dict)
                ]),
                "plaats":
                any([
                    "Overlijden" == in_onderzoek.get("groepsnaam")
                    for in_onderzoek in instance_xml_dict.get(
                        "inOnderzoek", []) if isinstance(in_onderzoek, dict)
                ]),
                "datumIngangOnderzoek": {
                    "dag": None,
                    "datum": None,
                    "jaar": None,
                    "maand": None,
                },
            },
        },
        "verblijfplaats": {
            "functieAdres":
            "woonadres",
            "huisletter":
            instance_xml_dict.get("verblijfsadres",
                                  {}).get("aoa.huisletter", "string"),
            "huisnummer":
            instance_xml_dict.get("verblijfsadres",
                                  {}).get("aoa.huisnummer", "string"),
            "huisnummertoevoeging":
            instance_xml_dict.get("verblijfsadres",
                                  {}).get("aoa.huisnummertoevoeging",
                                          "string"),
            "aanduidingBijHuisnummer":
            None,
            "identificatiecodeNummeraanduiding":
            instance_xml_dict.get("verblijfsadres",
                                  {}).get("aoa.identificatie", "string"),
            "naamOpenbareRuimte":
            instance_xml_dict.get("verblijfsadres",
                                  {}).get("gor.openbareRuimteNaam", "string"),
            "postcode":
            instance_xml_dict.get("verblijfsadres",
                                  {}).get("aoa.postcode", "string"),
            "woonplaatsnaam":
            instance_xml_dict.get("verblijfsadres",
                                  {}).get("wpl.woonplaatsNaam", "string"),
            "identificatiecodeAdresseerbaarObject":
            instance_xml_dict.get("verblijfsadres",
                                  {}).get("wpl.identificatie", "string"),
            "indicatieVestigingVanuitBuitenland":
            True,
            "locatiebeschrijving":
            instance_xml_dict.get("verblijfsadres",
                                  {}).get("inp.locatiebeschrijving", "string"),
            "straatnaam":
            instance_xml_dict.get("verblijfsadres",
                                  {}).get("gor.straatnaam", "string"),
            "vanuitVertrokkenOnbekendWaarheen":
            True,
            "datumAanvangAdreshouding": {
                "dag":
                int(
                    instance_xml_dict.get("verblijfsadres", {}).get(
                        "begindatumVerblijf",
                        "19000101")[settings.OPENPERSONEN_DAY_START:settings.
                                    OPENPERSONEN_DAY_END])
                if instance_xml_dict.get("verblijfsadres",
                                         {}).get("begindatumVerblijf")
                and not isinstance(
                    instance_xml_dict.get("verblijfsadres",
                                          {})["begindatumVerblijf"],
                    dict,
                ) else None,
                "datum":
                convert_datum_to_proper_date_format(
                    instance_xml_dict.get("verblijfsadres",
                                          {}).get("begindatumVerblijf"))
                if instance_xml_dict.get("verblijfsadres",
                                         {}).get("begindatumVerblijf")
                and not isinstance(
                    instance_xml_dict.get("verblijfsadres",
                                          {})["begindatumVerblijf"],
                    dict,
                ) else None,
                "jaar":
                int(
                    instance_xml_dict.get("verblijfsadres", {}).get(
                        "begindatumVerblijf",
                        "19000101")[settings.OPENPERSONEN_YEAR_START:settings.
                                    OPENPERSONEN_YEAR_END])
                if instance_xml_dict.get("verblijfsadres",
                                         {}).get("begindatumVerblijf")
                and not isinstance(
                    instance_xml_dict.get("verblijfsadres",
                                          {})["begindatumVerblijf"],
                    dict,
                ) else None,
                "maand":
                int(
                    instance_xml_dict.get("verblijfsadres", {}).get(
                        "begindatumVerblijf",
                        "19000101")[settings.OPENPERSONEN_MONTH_START:settings.
                                    OPENPERSONEN_MONTH_END])
                if instance_xml_dict.get("verblijfsadres",
                                         {}).get("begindatumVerblijf")
                and not isinstance(
                    instance_xml_dict.get("verblijfsadres",
                                          {})["begindatumVerblijf"],
                    dict,
                ) else None,
            },
            "datumIngangGeldigheid": {
                "dag":
                int(
                    instance_xml_dict.get("inp.verblijftIn", {}).get(
                        "gerelateerde", {}).get("ingangsdatumObject",
                                                "19000101")
                    [settings.OPENPERSONEN_DAY_START:settings.
                     OPENPERSONEN_DAY_END])
                if instance_xml_dict.get("inp.verblijftIn", {}).get(
                    "gerelateerde", {}).get("ingangsdatumObject")
                and not isinstance(
                    instance_xml_dict.get("inp.verblijftIn", {}).get(
                        "gerelateerde", {})["ingangsdatumObject"],
                    dict,
                ) else None,
                "datum":
                convert_datum_to_proper_date_format(
                    instance_xml_dict.get("inp.verblijftIn", {}).get(
                        "gerelateerde", {}).get("ingangsdatumObject"))
                if instance_xml_dict.get("inp.verblijftIn", {}).get(
                    "gerelateerde", {}).get("ingangsdatumObject")
                and not isinstance(
                    instance_xml_dict.get("inp.verblijftIn", {}).get(
                        "gerelateerde", {})["ingangsdatumObject"],
                    dict,
                ) else None,
                "jaar":
                int(
                    instance_xml_dict.get("inp.verblijftIn", {}).get(
                        "gerelateerde", {}).get("ingangsdatumObject",
                                                "19000101")
                    [settings.OPENPERSONEN_YEAR_START:settings.
                     OPENPERSONEN_YEAR_END])
                if instance_xml_dict.get("inp.verblijftIn", {}).get(
                    "gerelateerde", {}).get("ingangsdatumObject")
                and not isinstance(
                    instance_xml_dict.get("inp.verblijftIn", {}).get(
                        "gerelateerde", {})["ingangsdatumObject"],
                    dict,
                ) else None,
                "maand":
                int(
                    instance_xml_dict.get("inp.verblijftIn", {}).get(
                        "gerelateerde", {}).get("ingangsdatumObject",
                                                "19000101")
                    [settings.OPENPERSONEN_MONTH_START:settings.
                     OPENPERSONEN_MONTH_END])
                if instance_xml_dict.get("inp.verblijftIn", {}).get(
                    "gerelateerde", {}).get("ingangsdatumObject")
                and not isinstance(
                    instance_xml_dict.get("inp.verblijftIn", {}).get(
                        "gerelateerde", {})["ingangsdatumObject"],
                    dict,
                ) else None,
            },
            "datumInschrijvingInGemeente": {
                "dag": None,
                "datum": None,
                "jaar": None,
                "maand": None,
            },
            "datumVestigingInNederland": {
                "dag": None,
                "datum": None,
                "jaar": None,
                "maand": None,
            },
            "gemeenteVanInschrijving": {
                "code":
                instance_xml_dict.get("inp.verblijftIn",
                                      {}).get("gerelateerde",
                                              {}).get("gemeenteCode"),
                "omschrijving":
                instance_xml_dict.get("inp.verblijftIn",
                                      {}).get("gerelateerde",
                                              {}).get("gemeenteNaam"),
            },
            "landVanwaarIngeschreven": {
                "code": "",
                "omschrijving": ""
            },
            "verblijfBuitenland": {
                "adresRegel1":
                instance_xml_dict.get("sub.verblijfBuitenland",
                                      {}).get("sub.adresBuitenland1"),
                "adresRegel2":
                instance_xml_dict.get("sub.verblijfBuitenland",
                                      {}).get("sub.adresBuitenland2"),
                "adresRegel3":
                instance_xml_dict.get("sub.verblijfBuitenland",
                                      {}).get("sub.adresBuitenland3"),
                "vertrokkenOnbekendWaarheen":
                True,
                "land": {
                    "code":
                    instance_xml_dict.get("sub.verblijfBuitenland",
                                          {}).get("lnd.landcode"),
                    "omschrijving":
                    CountryCodeAndOmschrijving.get_omschrijving_from_code(
                        instance_xml_dict.get("sub.verblijfBuitenland",
                                              {}).get("lnd.landcode", 0))
                    if not isinstance(
                        instance_xml_dict.get("sub.verblijfBuitenland",
                                              {}).get("lnd.landcode"),
                        dict,
                    ) else None,
                },
            },
            "inOnderzoek": {
                "aanduidingBijHuisnummer":
                False,
                "datumAanvangAdreshouding":
                False,
                "datumIngangGeldigheid":
                False,
                "datumInschrijvingInGemeente":
                False,
                "datumVestigingInNederland":
                False,
                "functieAdres":
                False,
                "gemeenteVanInschrijving":
                False,
                "huisletter":
                any([
                    "Verblijfplaats" == in_onderzoek.get("groepsnaam")
                    for in_onderzoek in instance_xml_dict.get(
                        "inOnderzoek", []) if isinstance(in_onderzoek, dict)
                ]),
                "huisnummer":
                any([
                    "Verblijfplaats" == in_onderzoek.get("groepsnaam")
                    for in_onderzoek in instance_xml_dict.get(
                        "inOnderzoek", []) if isinstance(in_onderzoek, dict)
                ]),
                "huisnummertoevoeging":
                any([
                    "Verblijfplaats" == in_onderzoek.get("groepsnaam")
                    for in_onderzoek in instance_xml_dict.get(
                        "inOnderzoek", []) if isinstance(in_onderzoek, dict)
                ]),
                "identificatiecodeNummeraanduiding":
                any([
                    "Verblijfplaats" == in_onderzoek.get("groepsnaam")
                    for in_onderzoek in instance_xml_dict.get(
                        "inOnderzoek", []) if isinstance(in_onderzoek, dict)
                ]),
                "identificatiecodeAdresseerbaarObject":
                any([
                    "Verblijfplaats" == in_onderzoek.get("groepsnaam")
                    for in_onderzoek in instance_xml_dict.get(
                        "inOnderzoek", []) if isinstance(in_onderzoek, dict)
                ]),
                "landVanwaarIngeschreven":
                any([
                    "Verblijfplaats" == in_onderzoek.get("groepsnaam")
                    for in_onderzoek in instance_xml_dict.get(
                        "inOnderzoek", []) if isinstance(in_onderzoek, dict)
                ]),
                "locatiebeschrijving":
                any([
                    "Verblijfplaats" == in_onderzoek.get("groepsnaam")
                    for in_onderzoek in instance_xml_dict.get(
                        "inOnderzoek", []) if isinstance(in_onderzoek, dict)
                ]),
                "naamOpenbareRuimte":
                any([
                    "Verblijfplaats" == in_onderzoek.get("groepsnaam")
                    for in_onderzoek in instance_xml_dict.get(
                        "inOnderzoek", []) if isinstance(in_onderzoek, dict)
                ]),
                "postcode":
                any([
                    "Verblijfplaats" == in_onderzoek.get("groepsnaam")
                    for in_onderzoek in instance_xml_dict.get(
                        "inOnderzoek", []) if isinstance(in_onderzoek, dict)
                ]),
                "straatnaam":
                any([
                    "Verblijfplaats" == in_onderzoek.get("groepsnaam")
                    for in_onderzoek in instance_xml_dict.get(
                        "inOnderzoek", []) if isinstance(in_onderzoek, dict)
                ]),
                "verblijfBuitenland":
                any([
                    "Verblijfplaats" == in_onderzoek.get("groepsnaam")
                    for in_onderzoek in instance_xml_dict.get(
                        "inOnderzoek", []) if isinstance(in_onderzoek, dict)
                ]),
                "woonplaatsnaam":
                any([
                    "Verblijfplaats" == in_onderzoek.get("groepsnaam")
                    for in_onderzoek in instance_xml_dict.get(
                        "inOnderzoek", []) if isinstance(in_onderzoek, dict)
                ]),
                "datumIngangOnderzoek": {
                    "dag": None,
                    "datum": None,
                    "jaar": None,
                    "maand": None,
                },
            },
        },
        "gezagsverhouding": {
            "indicatieCurateleRegister":
            instance_xml_dict.get("ing.indicatieCurateleRegister", False),
            "indicatieGezagMinderjarige":
            instance_xml_dict.get("ing.indicatieGezagMinderjarige", False),
            "inOnderzoek": {
                "indicatieCurateleRegister":
                any([
                    "Gezagsverhouding" == in_onderzoek.get("groepsnaam")
                    for in_onderzoek in instance_xml_dict.get(
                        "inOnderzoek", []) if isinstance(in_onderzoek, dict)
                ]),
                "indicatieGezagMinderjarige":
                any([
                    "Gezagsverhouding" == in_onderzoek.get("groepsnaam")
                    for in_onderzoek in instance_xml_dict.get(
                        "inOnderzoek", []) if isinstance(in_onderzoek, dict)
                ]),
                "datumIngangOnderzoek": {
                    "dag": None,
                    "datum": None,
                    "jaar": None,
                    "maand": None,
                },
            },
        },
        "verblijfstitel": {
            "aanduiding": {
                "code": instance_xml_dict.get("vbt.aanduidingVerblijfstitel"),
                "omschrijving": None,
            },
            "datumEinde": {
                "dag":
                int(
                    instance_xml_dict.get(
                        "ing.datumVerliesVerblijfstitel",
                        "19000101")[settings.OPENPERSONEN_DAY_START:settings.
                                    OPENPERSONEN_DAY_END])
                if instance_xml_dict.get("ing.datumVerliesVerblijfstitel")
                and not isinstance(
                    instance_xml_dict["ing.datumVerliesVerblijfstitel"],
                    dict,
                ) else None,
                "datum":
                convert_datum_to_proper_date_format(
                    instance_xml_dict.get("ing.datumVerliesVerblijfstitel",
                                          "19000101"))
                if instance_xml_dict.get("ing.datumVerliesVerblijfstitel")
                and not isinstance(
                    instance_xml_dict["ing.datumVerliesVerblijfstitel"],
                    dict,
                ) else None,
                "jaar":
                int(
                    instance_xml_dict.get(
                        "ing.datumVerliesVerblijfstitel",
                        "19000101")[settings.OPENPERSONEN_YEAR_START:settings.
                                    OPENPERSONEN_YEAR_END])
                if instance_xml_dict.get("ing.datumVerliesVerblijfstitel")
                and not isinstance(
                    instance_xml_dict["ing.datumVerliesVerblijfstitel"],
                    dict,
                ) else None,
                "maand":
                int(
                    instance_xml_dict.get(
                        "ing.datumVerliesVerblijfstitel",
                        "19000101")[settings.OPENPERSONEN_MONTH_START:settings.
                                    OPENPERSONEN_MONTH_END])
                if instance_xml_dict.get("ing.datumVerliesVerblijfstitel")
                and not isinstance(
                    instance_xml_dict["ing.datumVerliesVerblijfstitel"],
                    dict,
                ) else None,
            },
            "datumIngang": {
                "dag":
                int(
                    instance_xml_dict.get(
                        "ing.datumVerkrijgingVerblijfstitel",
                        "19000101")[settings.OPENPERSONEN_DAY_START:settings.
                                    OPENPERSONEN_DAY_END])
                if instance_xml_dict.get("ing.datumVerkrijgingVerblijfstitel")
                and not isinstance(
                    instance_xml_dict["ing.datumVerkrijgingVerblijfstitel"],
                    dict,
                ) else None,
                "datum":
                convert_datum_to_proper_date_format(
                    instance_xml_dict.get("ing.datumVerkrijgingVerblijfstitel",
                                          "19000101"))
                if instance_xml_dict.get("ing.datumVerkrijgingVerblijfstitel")
                and not isinstance(
                    instance_xml_dict["ing.datumVerkrijgingVerblijfstitel"],
                    dict,
                ) else None,
                "jaar":
                int(
                    instance_xml_dict.get(
                        "ing.datumVerkrijgingVerblijfstitel",
                        "19000101")[settings.OPENPERSONEN_YEAR_START:settings.
                                    OPENPERSONEN_YEAR_END])
                if instance_xml_dict.get("ing.datumVerkrijgingVerblijfstitel")
                and not isinstance(
                    instance_xml_dict["ing.datumVerkrijgingVerblijfstitel"],
                    dict,
                ) else None,
                "maand":
                int(
                    instance_xml_dict.get(
                        "ing.datumVerkrijgingVerblijfstitel",
                        "19000101")[settings.OPENPERSONEN_MONTH_START:settings.
                                    OPENPERSONEN_MONTH_END])
                if instance_xml_dict.get("ing.datumVerkrijgingVerblijfstitel")
                and not isinstance(
                    instance_xml_dict["ing.datumVerkrijgingVerblijfstitel"],
                    dict,
                ) else None,
            },
            "inOnderzoek": {
                "aanduiding":
                any([
                    "aanduidingVerblijfstitel" == in_onderzoek.get(
                        "elementnaam")
                    for in_onderzoek in instance_xml_dict.get(
                        "inOnderzoek", []) if isinstance(in_onderzoek, dict)
                ]),
                "datumEinde":
                False,
                "datumIngang":
                False,
                "datumIngangOnderzoek": {
                    "dag": None,
                    "datum": None,
                    "jaar": None,
                    "maand": None,
                },
            },
        },
        "reisdocumenten": [],
    }

    kinderen_info = instance_xml_dict["inp.heeftAlsKinderen"]
    ouders_info = instance_xml_dict["inp.heeftAlsOuders"]
    partners_info = instance_xml_dict["inp.heeftAlsEchtgenootPartner"]

    if not isinstance(kinderen_info, list):
        kinderen_info = [kinderen_info]

    if not isinstance(ouders_info, list):
        ouders_info = [ouders_info]

    if not isinstance(partners_info, list):
        partners_info = [partners_info]

    ingeschreven_persoon_dict["kinderen"] = []
    ingeschreven_persoon_dict["ouders"] = []
    ingeschreven_persoon_dict["partners"] = []

    for kind_info in kinderen_info:
        if "gerelateerde" in kind_info:
            ingeschreven_persoon_dict["kinderen"].append(
                get_kind_instance_dict(kind_info["gerelateerde"]))

    for ouder_info in ouders_info:
        if "gerelateerde" in ouder_info:
            ingeschreven_persoon_dict["ouders"].append(
                get_ouder_instance_dict(ouder_info["gerelateerde"]))

    partners_title = None
    partners_last_name_prefix = None
    partners_last_name = None
    partners_date = None
    for partner_info in partners_info:
        if "gerelateerde" in partner_info:
            ingeschreven_persoon_dict["partners"].append(
                get_partner_instance_dict(partner_info["gerelateerde"]))
        if (not partners_last_name
                or (partner_info.get("datumOntbinding") and partners_date
                    and partners_date > partner_info["datumSluiting"]) or
            (partner_info.get("datumOntbinding") is None and partners_date
             and partners_date < partner_info["datumSluiting"])):
            (
                partners_title,
                partners_last_name_prefix,
                partners_last_name,
                partners_date,
            ) = _get_partner_info(partner_info)

    ingeschreven_persoon_dict["naam"]["aanhef"] = get_aanhef(
        instance_xml_dict.get("voorvoegselGeslachtsnaam"),
        instance_xml_dict.get("geslachtsnaam"),
        partners_last_name_prefix,
        partners_last_name,
        instance_xml_dict.get("aanduidingNaamgebruik"),
        instance_xml_dict.get("geslachtsaanduiding"),
        instance_xml_dict.get("adellijkeTitelPredikaat"),
        partners_title,
    )

    ingeschreven_persoon_dict["naam"]["aanschrijfwijze"] = get_aanschrijfwijze(
        instance_xml_dict.get("voorvoegselGeslachtsnaam"),
        instance_xml_dict.get("geslachtsnaam"),
        instance_xml_dict.get("voornamen"),
        partners_last_name_prefix,
        partners_last_name,
        instance_xml_dict.get("aanduidingNaamgebruik"),
        instance_xml_dict.get("geslachtsaanduiding"),
        instance_xml_dict.get("adellijkeTitelPredikaat"),
        partners_title,
    )

    ingeschreven_persoon_dict["naam"][
        "gebruikInLopendeTekst"] = get_gebruik_in_lopende_tekst(
            instance_xml_dict.get("voorvoegselGeslachtsnaam"),
            instance_xml_dict.get("geslachtsnaam"),
            partners_last_name_prefix,
            partners_last_name,
            instance_xml_dict.get("aanduidingNaamgebruik"),
            instance_xml_dict.get("geslachtsaanduiding"),
            instance_xml_dict.get("adellijkeTitelPredikaat"),
            partners_title,
        )

    convert_empty_instances(ingeschreven_persoon_dict)

    return ingeschreven_persoon_dict