""" Copyright (c) 2020 Sdj Geek Voir le fichier LICENSE Ce programme permet de comparer le fichier des personnes décédées établi par l'INSEE avec les registre de membres de l'Église, afin de déterminer si figurent dans nos registre des personnes décédées. L'INSEE reçoit des communes les décès enregistrés. Le fichier des personnes décédées établi par l'INSEE est en accès libre sur le site https://www.data.gouv.fr. """ import argparse import os from bdd_insee import BddInsee from site_eglise import SiteEglise def default_tracker(step=None, text=None, set_max=None): if text: print(text) def trouver_decedes(chemin_base_donnees, numeros_unites, chemin_repertoire_sortie, cookie_path=None, tracker=None): """Recherche les personnes décédées dans les registres :param chemin_base_donnees: chemin vers le fichier SQLite :param numeros_unites: liste des numéros d'unités à analyser :param chemin_repertoire_sortie: chemin vers le répertoire où inscrire les fichiers de sortie :param cookie_path: chemin vers la base de donnée des cookies """ # Tracker par défaut if tracker is None: tracker = default_tracker # Initialiser les accès aux données (INSEE et site de l'Église) base_insee = BddInsee(chemin_base_donnees) site_eglise = SiteEglise(cookie_path) # Boucler sur la liste des unités for unite in numeros_unites: tracker(text=f"Unité {unite}") # Récupérer la liste des membres members = site_eglise.get_member_list(unite) # Préparer le fichier de sortie output_file = os.path.join(chemin_repertoire_sortie, f"liste_membres_decedes_unite_{unite}.txt") with open(output_file, 'w') as out_file: out_file.write("Les lieux dans le fichier de l'INSEE sont donnés en Code Officiel Géographique en vigueur au moment de la prise en compte du décès\n") # Boucler sur la liste des membres tracker(set_max=len(members)) for member in members: # Lire les noms et date de naissance name_registre = member['nameListPreferredLocal'] full_birthdate = member['birth']['date']['date'] maiden_name = None ville_registre = None # S'il s'agit d'une femme mariée, trouver son nom de jeune fille if member['isSpouse']: member_profile = site_eglise.get_member_profile(member['legacyCmisId']) maiden_name = member_profile['individual']['maidenNameGroup']['name1']['family'] ville_registre = member_profile['individual']['birthPlace'] try: last_name, first_name = name_registre.split(',') annee_registre, mois_registre, jour_registre = full_birthdate.split('-') except ValueError: print(f"Error with member [{name_registre}, {full_birthdate}]") continue first_name = first_name.strip().split(' ')[0] last_name = last_name.strip().split(' ')[0] query = base_insee.find_person(first_name, last_name, maiden_name, annee_registre, mois_registre, jour_registre) name_registre = name_registre.upper() if maiden_name: name_registre = f"{name_registre} née {maiden_name.upper()}" if member['sex'] == "F": feminin = "e" else: feminin = "" for person in query: if not ville_registre: member_profile = site_eglise.get_member_profile(member['legacyCmisId']) ville_registre = member_profile['individual']['birthPlace'] if not ville_registre: ville_registre = "" text = f""" Le membre {name_registre}, né{feminin} le {jour_registre:0>2}/{mois_registre:0>2}/{annee_registre:0>4} à {ville_registre.upper()} semble être décédé{feminin}. Dans le fichier de l'INSEE on peut trouver {person.last_name}, {person.first_name} né{feminin} le {person.jour_naissance:0>2}/{person.mois_naissance:0>2}/{person.annee_naissance:0>4} à {person.code_lieu_naissance} décédé{feminin} le {person.jour_deces:0>2}/{person.mois_deces:0>2}/{person.annee_deces:0>4} à {person.code_lieu_deces} """ tracker(text=text) out_file.write(text) tracker(step=1) if __name__ == "__main__": parser = argparse.ArgumentParser(description='Recherche des personnes décédées dans les registres.') parser.add_argument('chemin_base_donnees', type=str, help="chemin vers la base de données") parser.add_argument('chemin_repertoire_sortie', type=str, help="chemin vers le répertoire de sortie") parser.add_argument('numeros_unites', type=str, help="numéros des l'unités à traiter, séparés par des virgules (ex: 123,753,469)") parser.add_argument('--cookie', '-c', type=str, help='chemin vers la base de donnée des cookies de Firefox') args = parser.parse_args() trouver_decedes(args.chemin_base_donnees, args.numeros_unites.split(','), args.chemin_repertoire_sortie, args.cookie)