api_entreprise: fix mandataires’ first names delimiter (#76737) #218

Merged
pmarillonnet merged 1 commits from wip/76737-api-entrepise-mandataire-social-first-names-delimiter into main 2023-04-19 16:33:45 +02:00
2 changed files with 55 additions and 10 deletions

View File

@ -27,7 +27,7 @@ def normalize(s):
def simple_match(mandataire, first_name, last_name, birthdate):
if any([attr not in mandataire for attr in ['prenom', 'nom', 'date_naissance']]):
return False
if normalize(mandataire['prenom'].split(',')[0]) != normalize(first_name):
if normalize(mandataire['prenom'].replace(',', ' ').split(maxsplit=1)[0]) != normalize(first_name):

Assez étonné que ça ne nécessite pas le changement d'au moins un test.

Assez étonné que ça ne nécessite pas le changement d'au moins un test.

Oui, on peut adapter les tests, y placer des données de mandataires avec plusieurs prénoms, pour relever la correction apportée. C’est à jour dans la branche.

Oui, on peut adapter les tests, y placer des données de mandataires avec plusieurs prénoms, pour relever la correction apportée. C’est à jour dans la branche.
return False
if normalize(mandataire['nom']) != normalize(last_name):
return False
@ -41,7 +41,12 @@ def levenshtein_match(mandataire, first_name, last_name, birthdate):
return False
dist_first_name = min(2, int(len(first_name) / 4))
dist_last_name = min(2, int(len(last_name) / 4))
if ldistance(normalize(mandataire['prenom'].split(',')[0]), normalize(first_name)) > dist_first_name:
if (
ldistance(
normalize(mandataire['prenom'].replace(',', ' ').split(maxsplit=1)[0]), normalize(first_name)
)
> dist_first_name
):
return False
if ldistance(normalize(mandataire['nom']), normalize(last_name)) > dist_last_name:
return False

View File

@ -122,7 +122,7 @@ RCS_UNITES_LEGALES_MANDATAIRES_SOCIAUX_RESPONSE = {
{
"data": {
"nom": "HISQUIN",
"prenom": "FRANCOIS",
"prenom": "FRANCOIS CARLOS PIOTR",
"fonction": "PRESIDENT DU DIRECTOIRE",
"dirigeant": True,
"date_naissance": "1965-01-27",
@ -131,6 +131,19 @@ RCS_UNITES_LEGALES_MANDATAIRES_SOCIAUX_RESPONSE = {
"type": "PP",
},
},
{
"data": {
"nom": "MICHU",
"prenom": "ETIENNE,ALI,CLAY",
"fonction": "FIGURANT LDIF",
"dirigeant": True,
"date_naissance": "1969-08-15",
"date_naissance_timestamp": 0,
"raison_sociale": "BCRH & ASSOCIES - SOCIETE A RESPONSABILITE LIMITEE A ASSOCIE UNIQUE",
"identifiant": "490092574",
"type": "PP",
},
},
{
"data": {
"fonction": "COMMISSAIRE AUX COMPTES SUPPLEANT",
@ -293,11 +306,11 @@ def test_entreprises_endpoint(app, resource):
mandataires_sociaux = data['entreprise']['mandataires_sociaux']
assert mandataires_sociaux[0]['date_naissance'] == '1965-01-27'
assert mandataires_sociaux[0]['nom'] == 'HISQUIN'
assert mandataires_sociaux[0]['prenom'] == 'FRANCOIS'
assert mandataires_sociaux[0]['prenom'] == 'FRANCOIS CARLOS PIOTR'
assert mandataires_sociaux[0]['fonction'] == 'PRESIDENT DU DIRECTOIRE'
assert mandataires_sociaux[1]['nom'] == ''
assert mandataires_sociaux[1]['prenom'] == ''
assert mandataires_sociaux[1]['fonction'] == 'COMMISSAIRE AUX COMPTES SUPPLEANT'
assert mandataires_sociaux[1]['nom'] == 'MICHU'
assert mandataires_sociaux[1]['prenom'] == 'ETIENNE,ALI,CLAY'
assert mandataires_sociaux[1]['fonction'] == 'FIGURANT LDIF'
assert 'etablissement_siege' in data
assert data['etablissement_siege']['siret'] == '41816609600051'
@ -334,7 +347,7 @@ def test_simple_match_mandataire_social(app, resource):
# successful matching
data = response.json['data']
assert data['nom'] == 'HISQUIN'
assert data['prenom'] == 'FRANCOIS'
assert data['prenom'] == 'FRANCOIS CARLOS PIOTR'
assert data['date_naissance'] == '1965-01-27'
assert data['type'] == 'PP'
@ -360,6 +373,20 @@ def test_simple_match_mandataire_social(app, resource):
assert not response.json['err']
assert not response.json['data']
params['first_name'] = 'etienne'
params['last_name'] = 'MichU'
params['birthdate'] = '19690815'
params['method'] = 'simple'
response = app.get(url, params=params)
# successful matching with comma-separated first names
data = response.json['data']
assert data['nom'] == 'MICHU'
assert data['prenom'] == 'ETIENNE,ALI,CLAY'
assert data['date_naissance'] == '1969-08-15'
assert data['type'] == 'PP'
def test_levenshtein_match_mandataire_social(app, resource):
params = {
@ -382,7 +409,7 @@ def test_levenshtein_match_mandataire_social(app, resource):
# successful matching
data = response.json['data']
assert data['nom'] == 'HISQUIN'
assert data['prenom'] == 'FRANCOIS'
assert data['prenom'] == 'FRANCOIS CARLOS PIOTR'
assert data['date_naissance'] == '1965-01-27'
assert data['type'] == 'PP'
@ -400,10 +427,23 @@ def test_levenshtein_match_mandataire_social(app, resource):
# successful matching within distance bracket
data = response.json['data']
assert data['nom'] == 'HISQUIN'
assert data['prenom'] == 'FRANCOIS'
assert data['prenom'] == 'FRANCOIS CARLOS PIOTR'
assert data['date_naissance'] == '1965-01-27'
assert data['type'] == 'PP'
params['first_name'] = 'etienn'
params['last_name'] = 'Michui'
params['birthdate'] = '19690815'
response = app.get(url, params=params)
# successful matching with distance bracket, with comma-separated first names
data = response.json['data']
assert data['nom'] == 'MICHU'
assert data['prenom'] == 'ETIENNE,ALI,CLAY'
assert data['date_naissance'] == '1969-08-15'
assert data['type'] == 'PP'
def test_entreprises_endpoint_include_private(app, resource):
with responses.RequestsMock() as rsps: