Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Import de l'historique des entreprises #1397

Merged
merged 11 commits into from
Dec 23, 2024
Merged

Import de l'historique des entreprises #1397

merged 11 commits into from
Dec 23, 2024

Conversation

pletelli
Copy link
Collaborator

@pletelli pletelli commented Dec 19, 2024

Closes part of #717

671654e consiste juste en un déplacement des fichiers relatifs à l'ETL des ingrédients.
Les tests sur les unmanaged model nécessitent une petite configuration supplémentaire décrite ici.

Pour importer les données Historiques de Teleicare, il a été décidé de :

  • créer les tables en SQL -> fait 1 fois sur prod
  • importer les csv grâce à la meta command psql \copy, préalablement convertis en UTF-8 -> fait sur prod. C'est une opération manuelle qui ne sera pas réitérée trop de fois.
  • générer les modèles Django grâce à manage.py inspectdb, cela génère des modèles unmanaged -> fait 1 fois
  • génération des migrations -> fait 1 fois

Lors de l'import définitif du dernier dump du SICCRF, il suffira de :

  • vider les tables psql -d complalim_db -c "truncate table ica_etablissement;"
  • réimporter les csv, les modèles resteront les mêmes psql -d complalim_db -c "\copy ica_etablissement from 'ICA_ETABLISSEMENT_utf8.csv' delimiter ',' csv header;"
  • lancer le script de jointure sur SIRET

Ce n'est pas le même procédé que pour l'import des ingrédients qui est utilisé :

  • car je souhaitais avoir un code de l'ETL plus simple (pas sûr que ce soit le cas au final)
  • pas les mêmes contraintes de mise à jour en parallèle dans Teleicare et ComplAlim

TODO next :

  • import des produits
  • import des compositions

Ce qui a été essayé, sans succès :

@pletelli pletelli marked this pull request as ready for review December 20, 2024 14:30
@pletelli pletelli requested a review from alemangui December 20, 2024 14:30
for etab in IcaEtablissement.objects.all():
if etab.etab_siret is not None:
siret_matching = Company.objects.filter(siret=etab.etab_siret)
if len(siret_matching) == 1:
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Question bête, j'imagine que de leur côté il y a une contrainte DB qui assure l'unicité du champ SIRET lorsqu'il est présent ? Est-ce qu'on pourrait se retrouver dans un cas où len(siret_matching) est supérieur à 1 ?

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

La contrainte d'unicité existe du côté Compl'Alim, mais pas du côté Teleicare (en tout cas pas en BDD, ni sur le champ siret, ni sur le champ TVA intracom).

Donc les deux seules possibilités ici sont len(siret_matching) == 1 ou len(siret_matching) == 0.
En revanche, on pourrait peut-être se retrouver avec un autre etab (dans une autre itération de la boucle) qui a le même siret et qui ferait un overwrite du siccrf_id, je vais lever une exception dans ce cas, pour qu'on soit informés.

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ajouté ici 8104147

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Si j'ai bien compris on doit exécuter ce script de création en local si on veut faire l'import de l'historique, et puis lors du dernier dump du SICCRF il faudra vider ces tables là avant de refaire l'import c'est ça ?

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Je dirais qu'on ne veut pas faire l'import de l'historique en local (on ne veut pas forcément avoir ces données confidentielles sur nos ordis perso)
Normalement ce n'est pas indispensable au bon fonctionnement de l'appli Compl'Alim en tout cas...
Après, je pourrais faire des fixtures pour qu'on puisse malgré tout tester ça.

En en effet comme ce sont des données figées pas de souci de faire un psql -d complalim_db -c "truncate table ica_etablissement;"

data/models/teleicare_history/etablissement.py Outdated Show resolved Hide resolved
data/models/teleicare_history/declaration.py Outdated Show resolved Hide resolved
dcl_date_fin_commercialisation = models.TextField(blank=True, null=True)

class Meta:
managed = False
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Trop bien cette approche 👍

data/tests/test_teleicare_history_importer.py Outdated Show resolved Hide resolved
data/tests/test_teleicare_history_importer.py Outdated Show resolved Hide resolved
@pletelli pletelli requested a review from alemangui December 23, 2024 11:17
@pletelli pletelli merged commit bff547d into staging Dec 23, 2024
5 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants