Première release

This commit is contained in:
Sdj Geek 2020-05-28 14:46:29 +02:00
parent 89d6e40a54
commit a27c46f062
5 changed files with 327 additions and 1 deletions

10
.gitignore vendored Normal file
View File

@ -0,0 +1,10 @@
# Byte-compiled / optimized / DLL files
__pycache__/
*.py[cod]
*$py.class
# Environments
localenv
# Temporary files
*~

21
LICENSE Normal file
View File

@ -0,0 +1,21 @@
MIT License
Copyright (c) 2020 Sdj Geek
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

104
README.md
View File

@ -1,2 +1,104 @@
# Purge Registres Décés INSEE # Purge Registres Décès INSEE
Ce programme s'adresse essentiellement aux greffiers des pieux, paroisse et
branches de France, de l'Église de Jésus Christ des Saints des Derniers Jours.
## Objectif
La tenue à jour des registres de l'Église n'est pas une tache aisée. Une des
difficultés est liée au fait que lorsqu'un membre s'éloigne de l'Église, ses
informations personnelles (adresse, téléphone, etc) ne sont plus mises à jour.
L'INSEE tient un fichier des personnes décédées en France de 1970 à
aujourd'hui. Ce fichier est disponible en [données
ouvertes](https://fr.wikipedia.org/wiki/Donn%C3%A9es_ouvertes) sur [le site du
gouvernement](https://www.data.gouv.fr/fr/datasets/fichier-des-personnes-decedees/).
Ce fichier est une aubaine, car il permet de savoir si un membre de l'Église
est décédé sans que nous le sachions. Si une personne figure à la fois dans
les registres de l'Église et dans le fichier de l'INSEE, alors une mise à jour
du registre de l'Église est nécessaire.
Parcourir à la main le registre de membres de paroisse est une tache longue et
fastidieuse. Ce programme permet de comparer automatiquement le registre de
paroisse avec le fichier de l'INSEE, et donne la liste des membres trouvés
dans le fichier de l'INSEE.
Le fichier de l'INSEE est actualisé de façon mensuelle. Il semble intéressant
d'utiliser ce programme régulièrement (une fois par an par exemple) pour
s'assurer que les registres restent à jour.
## Pré-requis
### Logiciels
- Git
- Python 3.6
- Virtualenv
Testé uniquement sur GNU/Linux (Ubuntu 18.4)
### Données
Le fichier de l'INSEE tel qu'il est présenté n'est pas facile à exploiter. Je
l'ai donc converti en base de donnée SQLite, plus pratique d'utilisation. Je
n'ai pas encore uploadé ce fichier, mais vous pouvez me le demander par
courriel.
## Installation
- Cloner le code
```bash
git clone -b latest-release https://git.roflcopter.fr/sdjgeek/purge-registres-deces-insee.git
cd purge-registres-deces-insee
```
- Mettre en place l'environnement virtuel Python
```bash
python3 -m venv localenv
. localenv/bin/activate
pip install -r requirements.txt
```
## Utilisation
Le début du fichier ```trouver_deces.py``` contient les paramètres à configurer :
- chemin_base_donnees : Le chemin vers le fichier téléchargé (me contacter)
- 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 panneau 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
Une fois la configuration effectuée, lancer le script :
```bash
. localenv/bin/activate
python trouver_deces.py
```
Le script mettra un peu de temps à s'exécuter. En fin d'exécution, le fichier
liste_membres_decedes_unite_{unite}.txt contiendra la liste des membres
trouvés dans le fichier de l'INSEE. Il est recommandé de contrôler les
informations du membres avant de le déclarer comme décédé dans les registres
de l'Église.
## Licence
Copyright (c) 2020 Sdj Geek
Ce logiciel est sous licence MIT/X Consortium. Elle donne à toute personne
recevant le logiciel (et ses fichiers) le droit illimité de l'utiliser, le
copier, le modifier, le fusionner, le publier, le distribuer, le vendre et le
"sous-licencier" (l'incorporer dans une autre licence). La seule obligation
est d'incorporer la notice de licence et de copyright dans toutes les
copies. Voir le fichier [LICENSE](LICENSE) pour le texte complet.

2
requirements.txt Normal file
View File

@ -0,0 +1,2 @@
peewee
requests

191
trouver_decedes.py Executable file
View File

@ -0,0 +1,191 @@
"""
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
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
##
# Texte inscrit dans le fichier de sortie
output_template = """
{full_name} dans nos registres
{last_name}, {first_name} dans la liste des décés
{feminin} le {jour_naissance:0>2}/{mois_naissance:0>2}/{annee_naissance:0>4}
décédé{feminin} le {jour_deces:0>2}/{mois_deces:0>2}/{annee_deces:0>4}
"""
###
# 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(111848, 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:
# 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
# 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']
try:
last_name, first_name = full_name.split(',')
annee_naissance, mois_naissance, jour_naissance = 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_naissance, mois_naissance, jour_naissance)
if maiden_name:
full_name = f"{full_name} née {maiden_name}"
if member['sex'] == "F":
feminin = "e"
else:
feminin = ""
for person in query:
text = output_template.format(full_name=full_name,
last_name=person.last_name.capitalize(),
first_name=person.first_name.capitalize(),
jour_naissance=person.jour_naissance,
mois_naissance=person.mois_naissance,
annee_naissance=person.annee_naissance,
jour_deces=person.jour_deces,
mois_deces=person.mois_deces,
annee_deces=person.annee_deces,
feminin=feminin)
print(text)
out_file.write(text)