Afin de rendre plus facile la comparaison entre les données du membre et les données de la personne trouvée dans le fichier de l'INSEE, quelques information complémentaires sont ajoutées dans le fichier de sortie : - Date de naissance trouvée dans les registres - Lieu de naissance trouvé dans les registres - Lieu de naissance trouvé dans le fichier INSEE - Lieu de décès trouvé dans le fichier INSEE Fix #1
191 lines
8.3 KiB
Python
Executable File
191 lines
8.3 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.
|
|
|
|
Comment utilise ce programme :
|
|
1) Demander le ficher de l'INSEE à cette adresse : sdjgeek@protonmail.com
|
|
2) Installer les dépendance du programme : "pip install requests peewee"
|
|
3) Configurer les paramètres du programme (un peu plus bas)
|
|
- chemin_base_donnees : Le chemin vers le fichier téléchargé sur le site data.gouv.fr
|
|
- numeros_unites : La liste des unités que le programme doit tester. La liste commence par le caractère '['. Les
|
|
numéros d'unités sont séparés par des virgules. La liste se termine par le caractère ']'. Par exemple
|
|
[47823, 67745, 31456]
|
|
- cookie : Les cookies de la session au compte SDJ. Pour obtenir ces cookies il faut
|
|
1- Ouvrir Firefox
|
|
2- Ouvrir les outils de développement : CTRL + MAJ + E
|
|
3- Aller sur le site des outils pour greffiers : https://lds.org/lcr
|
|
4- Entrer identifiant et mot de passe SDJ
|
|
5- Aller dans la liste des membres
|
|
6- Dans l'outil de développement, cliquer sur la dernière ligne
|
|
7- Dans le paneau de droite, dans la section "En-tête de la requête", rechercher le champ "cookie"
|
|
8- Copier la valeur contenue dans ce champ
|
|
- chemin_repertoire_sortie : Le chemin vers le répertoire qui contiendra la fichiers de sortie
|
|
4) Exécuter le programme : "python3.6 trouver_decedes.py"
|
|
|
|
------------------------------------------------------------------------------------------------------------------------
|
|
|
|
Auteur : SDJ GeeK <sdjgeek@protonmail.com>
|
|
Date : 16 mai 2020
|
|
Version : 1.0
|
|
|
|
------------------------------------------------------------------------------------------------------------------------
|
|
|
|
Journal des versions
|
|
|
|
v2.0 (2020/)
|
|
Le fichier de sortie contient plus d'informations pour faciliter la
|
|
comparaison
|
|
|
|
v1.0 (2020/05/16)
|
|
Première publication
|
|
|
|
"""
|
|
|
|
###
|
|
# Paramètres
|
|
|
|
# Chemin complet vers le fichier contenant les registres de l'INSEE
|
|
chemin_base_donnees = "/chemin/vers/fichier-des-personnes-decedees.sqlite"
|
|
|
|
# Numéro des l'unités à contrôler (par exemple [47823, 67745, 31456])
|
|
# Beziers 63789, Carcassonne 85774, Montauban 226122, Montpellier 83895, Nimes 72850, Perpignan 75698, Rodez 333824, Tarbes 65471, Capitole 111848, Concorde 263923
|
|
numeros_unites = [63789, 111848]
|
|
|
|
# Cookie de session compte SDJ
|
|
cookie = ""
|
|
|
|
# Chemin vers le répertoire de sortie
|
|
chemin_repertoire_sortie = "/chemin/vers/repertoire-de-sortie"
|
|
|
|
# Fin des paramètres. Ne pas modifier plus loin.
|
|
###
|
|
|
|
import os
|
|
import peewee
|
|
import requests
|
|
|
|
###
|
|
# Base de donnée INSEE
|
|
database = peewee.SqliteDatabase(chemin_base_donnees)
|
|
|
|
|
|
class Person(peewee.Model):
|
|
last_name = peewee.CharField()
|
|
first_name = peewee.CharField()
|
|
is_woman = peewee.BooleanField()
|
|
annee_naissance = peewee.IntegerField()
|
|
mois_naissance = peewee.IntegerField()
|
|
jour_naissance = peewee.IntegerField()
|
|
code_lieu_naissance = peewee.CharField()
|
|
commune_naissance = peewee.CharField()
|
|
pays_naissance = peewee.CharField()
|
|
annee_deces = peewee.IntegerField()
|
|
mois_deces = peewee.IntegerField()
|
|
jour_deces = peewee.IntegerField()
|
|
code_lieu_deces = peewee.CharField()
|
|
numero_act_deces = peewee.CharField()
|
|
|
|
class Meta:
|
|
database = database
|
|
|
|
|
|
def find_person(first_name, last_name, maiden_name, annee_naissance, mois_naissance, jour_naissance):
|
|
if maiden_name:
|
|
return Person.select().where((Person.annee_naissance == int(annee_naissance))
|
|
& (Person.mois_naissance == int(mois_naissance))
|
|
& (Person.jour_naissance == int(jour_naissance))
|
|
& (Person.first_name.contains(first_name.upper()))
|
|
& ((Person.last_name.contains(last_name.upper()))
|
|
| Person.last_name.contains(maiden_name.upper())))
|
|
else:
|
|
return Person.select().where((Person.annee_naissance == int(annee_naissance))
|
|
& (Person.mois_naissance == int(mois_naissance))
|
|
& (Person.jour_naissance == int(jour_naissance))
|
|
& (Person.first_name.contains(first_name.upper()))
|
|
& (Person.last_name.contains(last_name.upper())))
|
|
|
|
|
|
###
|
|
# Registres de l'Église
|
|
def get_member_list(unit_number, cookie):
|
|
r = requests.get('https://lcr.churchofjesuschrist.org/services/umlu/report/member-list',
|
|
params={'lang': "fra", 'unitNumber': unit_number},
|
|
headers={'Accept': "application/json",
|
|
'Cookie': cookie})
|
|
r.raise_for_status()
|
|
return r.json()
|
|
|
|
|
|
def get_member_profile(member_id, cookie):
|
|
r = requests.get(f'https://lcr.churchofjesuschrist.org/records/member-profile/service/{member_id}',
|
|
params={'lang': "fra"},
|
|
headers={'Accept': "application/json",
|
|
'Cookie': cookie,
|
|
'Referer': f"https://lcr.churchofjesuschrist.org/records/member-profile/{member_id}?lang=fra"})
|
|
r.raise_for_status()
|
|
return r.json()
|
|
|
|
|
|
###
|
|
# Programme principal
|
|
|
|
# Boucler sur la liste des unités
|
|
for unite in numeros_unites:
|
|
print(f"Unité {unite}")
|
|
# Récupérer la liste des membres
|
|
members = get_member_list(unite, cookie=cookie)
|
|
|
|
# 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")
|
|
# Boucler sur la liste des membres
|
|
for member in members:
|
|
# Lire les noms et date de naissance
|
|
full_name = 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 = get_member_profile(member['legacyCmisId'], cookie=cookie)
|
|
maiden_name = member_profile['individual']['maidenNameGroup']['name1']['family']
|
|
ville_registre = member_profile['individual']['birthPlace']
|
|
try:
|
|
last_name, first_name = full_name.split(',')
|
|
annee_registre, mois_registre, jour_registre = full_birthdate.split('-')
|
|
except ValueError:
|
|
print(f"Error with member [{full_name}, {full_birthdate}]")
|
|
continue
|
|
first_name = first_name.strip().split(' ')[0]
|
|
last_name = last_name.strip().split(' ')[0]
|
|
query = find_person(first_name, last_name, maiden_name, annee_registre, mois_registre, jour_registre)
|
|
if maiden_name:
|
|
full_name = f"{full_name} née {maiden_name}"
|
|
if member['sex'] == "F":
|
|
feminin = "e"
|
|
else:
|
|
feminin = ""
|
|
for person in query:
|
|
if not ville_registre:
|
|
member_profile = get_member_profile(member['legacyCmisId'], cookie=cookie)
|
|
ville_registre = member_profile['individual']['birthPlace']
|
|
text = f"""
|
|
Le membre {full_name},
|
|
né{feminin} le {jour_registre:0>2}/{mois_registre:0>2}/{annee_registre:0>4} à {ville_registre}
|
|
semble être décédé{feminin}.
|
|
Dans le fichier de l'INSEE on peut trouver {last_name}, {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}
|
|
"""
|
|
print(text)
|
|
out_file.write(text)
|