Skip to content

Recherche employeur : Fin de la pénalisation des entreprises recrutant sans fiche de poste dans les résultats de la recherche employeur [GEN-1728] - #6027

Merged
dejafait merged 7 commits into
masterfrom
dejafait/level_the_field_of_employer_search
Jul 21, 2025
Merged

Recherche employeur : Fin de la pénalisation des entreprises recrutant sans fiche de poste dans les résultats de la recherche employeur [GEN-1728]#6027
dejafait merged 7 commits into
masterfrom
dejafait/level_the_field_of_employer_search

Conversation

@dejafait

@dejafait dejafait commented Apr 24, 2025

Copy link
Copy Markdown
Contributor

🤔 Pourquoi ?

La logique officielle de notre recherche employeur est de répartir à peu près équitablement les candidatures entre les entreprises, en mettant toujours en avant en première page les entreprises ayant reçu aucune ou peu de candidatures récentes. Dès qu'elles recoivent des candidatures elles sont repoussées à des pages ultérieures et le cycle continue.

Pourtant historiquement on montre systématiquement d'abord (donc en première page) les entreprises ayant au moins une fiche de poste active et seulement ensuite les entreprises sans fiche de poste active.

Autrement dit, si on a déjà envoyé récemment un très grand nombre de candidatures à une entreprise A ayant au moins une fiche de poste active, et qu'on a envoyé aucune candidature à une entreprise B recrutant sans fiche de poste, on continue de montrer A toujours avant B ! C'est en sérieuse contradiction avec notre logique globale.

La cause racine est je pense technique et en fait involontaire, une histoire de division par zéro.

Ce correctif est d'actualité car l'imminente dépublication automatique des fiches de poste va faire augmenter considérablement le volume des entreprises sans fiche de poste active.

🍰 Comment ?

En traitant correctement le cas de l'entreprise sans fiche de poste active, qui sera maintenant mise au même niveau qu'une entreprise ayant 1 fiche de poste active et le même nombre de candidatures récentes.

Plot twist du 24 avril 2025

leo-naeka m'apprend l'existence du nouveau champ spontaneous_applications_open_since qui ajoute une couche de complexité par rapport à block_job_applications et a plusieurs implications sur la recherche. Ma PR est du coup incorrecte en l'état.

Comeback du 15 juillet 2025

Je déterre cette PR en intégrant spontaneous_applications_open_since proprement dans la recherche. with_is_hiring encapsule la logique "not block_job_applications AND (spontaneous_applications_open_since OR at least one active jd)".

Première page de résultats avant/après le changement

recherche Paris 75, dataset de prod du 16-17 juillet 2025

AVANT

les entreprises sans fdp étaient systématiquement invisibles

image

APRES

les entreprises sans fdp ont enfin leur chance en première page et vont obtenir elles aussi leur part de candidatures

image

@dejafait dejafait self-assigned this Apr 24, 2025
@notion-workspace

Copy link
Copy Markdown

@dejafait dejafait added the modifié Modifié dans le changelog. label Apr 24, 2025
@dejafait
dejafait marked this pull request as draft April 24, 2025 15:01
@dejafait
dejafait force-pushed the dejafait/level_the_field_of_employer_search branch from c6900d4 to 8b8e2b8 Compare July 15, 2025 14:41
@dejafait
dejafait force-pushed the dejafait/level_the_field_of_employer_search branch from 00c7016 to 6bae5db Compare July 15, 2025 15:28
@dejafait
dejafait force-pushed the dejafait/level_the_field_of_employer_search branch from 76962dc to a287d43 Compare July 15, 2025 15:39
@dejafait
dejafait marked this pull request as ready for review July 15, 2025 15:44
@dejafait
dejafait requested a review from leo-naeka July 15, 2025 15:45

@leo-naeka leo-naeka left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Il faudrait également modifier les fixtures et :

# Do not update if nothing changes (NULL values have to be handled separately because NULL)
.exclude(Q(job_app_score=F("computed_job_app_score")) & Q(computed_job_app_score__isnull=False))
.exclude(Q(job_app_score__isnull=True) & Q(computed_job_app_score__isnull=True))

Car on ne peut plus avoir de valeur nulle (computed_job_app_score strictement supérieur ou égal à zéro).
Et probablement dans un second temps passer la colonne NOT NULL.

Comment thread itou/companies/models.py Outdated
@leo-naeka

Copy link
Copy Markdown
Contributor

En tout cas ça devrait bien mieux distribuer les candidatures sur des SIAE en capacité de les traiter 👏

@dejafait
dejafait force-pushed the dejafait/level_the_field_of_employer_search branch 3 times, most recently from 6b7d6f2 to e728b04 Compare July 17, 2025 12:43
@dejafait
dejafait requested a review from leo-naeka July 17, 2025 13:20
dejafait added 2 commits July 17, 2025 16:55
Update job_app_score from null to 0 which is its correct value as no recent job application exists in fixtures
@dejafait
dejafait force-pushed the dejafait/level_the_field_of_employer_search branch from c3db61f to 0cea7a2 Compare July 17, 2025 13:55

@leo-naeka leo-naeka left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Au top 👏

@dejafait
dejafait added this pull request to the merge queue Jul 21, 2025
Merged via the queue into master with commit 88a93a6 Jul 21, 2025
14 checks passed
@dejafait
dejafait deleted the dejafait/level_the_field_of_employer_search branch July 21, 2025 11:19
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

modifié Modifié dans le changelog.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants