106 lines
5.2 KiB
Python
Executable File
106 lines
5.2 KiB
Python
Executable File
"""
|
|
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 = "<VIDE>"
|
|
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)
|