Première release
This commit is contained in:
parent
89d6e40a54
commit
a27c46f062
10
.gitignore
vendored
Normal file
10
.gitignore
vendored
Normal file
@ -0,0 +1,10 @@
|
||||
# Byte-compiled / optimized / DLL files
|
||||
__pycache__/
|
||||
*.py[cod]
|
||||
*$py.class
|
||||
|
||||
# Environments
|
||||
localenv
|
||||
|
||||
# Temporary files
|
||||
*~
|
21
LICENSE
Normal file
21
LICENSE
Normal 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
104
README.md
@ -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
2
requirements.txt
Normal file
@ -0,0 +1,2 @@
|
||||
peewee
|
||||
requests
|
191
trouver_decedes.py
Executable file
191
trouver_decedes.py
Executable 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
|
||||
né{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)
|
Loading…
Reference in New Issue
Block a user