diff --git a/data/etl/teleicare_history/extractor.py b/data/etl/teleicare_history/extractor.py index 48fd5a57..605646f7 100644 --- a/data/etl/teleicare_history/extractor.py +++ b/data/etl/teleicare_history/extractor.py @@ -19,17 +19,29 @@ def match_companies_on_siret_or_vat(): for etab in IcaEtablissement.objects.all(): if etab.etab_siret is not None: siret_matching = Company.objects.filter(siret=etab.etab_siret) + # seulement 2 options possible pour len(siret_matching) sont 0 et 1 car il y a une contrainte d'unicité sur le champ Company.siret if len(siret_matching) == 1: - nb_siret_match += 1 - siret_matching[0].siccrf_id = etab.etab_ident - siret_matching[0].save() + if siret_matching[0].siccrf_id is not None and etab.etab_ident != siret_matching[0].siccrf_id: + logger.error( + "Plusieurs Etablissement provenant de Teleicare ont le même SIRET, ce qui rend le matching avec une Company Compl'Alim incertain." + ) + else: + nb_siret_match += 1 + siret_matching[0].siccrf_id = etab.etab_ident + siret_matching[0].save() elif etab.etab_numero_tva_intra is not None: vat_matching = Company.objects.filter(vat=etab.etab_numero_tva_intra) + # seulement 2 options possible pour len(vat_matching) sont 0 et 1 car il y a une contrainte d'unicité sur le champ Company.vat if len(vat_matching) == 1: - nb_vat_match += 1 - vat_matching[0].siccrf_id = etab.etab_ident - vat_matching[0].save() + if vat_matching[0].siccrf_id is not None and etab.etab_ident != vat_matching[0].siccrf_id: + logger.error( + "Plusieurs Etablissement provenant de Teleicare ont le même n° TVA, ce qui rend le matching avec une Company Compl'Alim incertain." + ) + else: + nb_vat_match += 1 + vat_matching[0].siccrf_id = etab.etab_ident + vat_matching[0].save() logger.info( f"{nb_vat_match} + {nb_siret_match} entreprises réconcilliées sur {len(IcaEtablissement.objects.all())}" diff --git a/data/tests/test_teleicare_history_importer.py b/data/tests/test_teleicare_history_importer.py index 911f2732..e7e7782a 100644 --- a/data/tests/test_teleicare_history_importer.py +++ b/data/tests/test_teleicare_history_importer.py @@ -1,3 +1,5 @@ +from unittest.mock import patch + from django.db import connection from django.test import TestCase @@ -38,7 +40,6 @@ def test_match_companies_on_siret_or_vat(self): Une entreprise enregistrée dans Teleicare ayant le même SIRET ou n° TVA intracom qu'une entreprise enregistrée dans Compl'Alim doit être liée par le siccrf_id """ - # create_model_table(IcaEtablissement) siret = _make_siret() etablissement_with_siret = EtablissementFactory(etab_siret=siret) company_with_siret = CompanyFactory(siret=siret) @@ -58,8 +59,24 @@ def test_match_companies_on_siret_or_vat(self): random_company.refresh_from_db() random_etablissement.refresh_from_db() - # self.assertEqual(company_with_siret.siccrf_id, etablissement_with_siret.etab_ident) + self.assertEqual(company_with_siret.siccrf_id, etablissement_with_siret.etab_ident) self.assertEqual(company_with_vat.siccrf_id, etablissement_with_vat.etab_ident) self.assertNotEqual(random_company.siccrf_id, random_etablissement.etab_ident) self.assertEqual(random_company.siccrf_id, None) - # delete_model_table(IcaEtablissement) + + @patch("data.etl.teleicare_history.extractor.logger") + def test_match_companies_on_vat_used_twice(self, mocked_logger): + """ + Si deux entreprises enregistrées dans Teleicare ont le même SIRET ou n° TVA intracom + alors le matching avec une Company Compl'Alim avec la contrainte d'unicité sur ces deux champs + n'est pas évident + """ + vat_used_twice = _make_vat() + _ = EtablissementFactory(etab_siret=None, etab_numero_tva_intra=vat_used_twice) + _ = EtablissementFactory(etab_siret=None, etab_numero_tva_intra=vat_used_twice) + _ = CompanyFactory(vat=vat_used_twice) + + match_companies_on_siret_or_vat() + mocked_logger.error.assert_called_with( + "Plusieurs Etablissement provenant de Teleicare ont le même n° TVA, ce qui rend le matching avec une Company Compl'Alim incertain." + )