SPB Git forge

spb/job-ka

Public
229commits 1branches 0releases
38.1 MBsize
maindefault branch
2 h agolast push
HTML 82.1% Python 14.6% TypeScript 1.9% CSS 1% JavaScript 0.5%

[ka6] fix connecteur euromoneyplc: balayage fr-CA + en-CA + en-GB dans la plateforme dayforce (tenant seul) — la dernière offre QC du tenant (4827 « Partenaire, Acquisition de talent », Montréal, publiée en français) a été dépubliée par l'employeur le 2026-09-11 entre 09h19 et 11h40 EDT ; le tenant euromoneyplc publie désormais 0 poste TOTAL (vérifié en direct : boards CANDIDATEPORTAL + EUROMONEY × cultures fr-CA/en-CA/en-GB/en-US = 0 partout, détail id bidon → 404) → volume 0 légitime AUJOURD'HUI. Mais la recherche Dayforce étant PARTITIONNÉE par culture de publication (cf. harrisrebar 788bfb4) et le portail officiel de l'employeur étant en-GB (delinian.com/careers → dayforcehcm CandidatePortal en-GB du même tenant), fr-CA seul rendrait le connecteur aveugle à toute future offre QC publiée en anglais : fetch() balaie désormais fr-CA PUIS en-CA PUIS en-GB (pattern harrisrebar : CULTURE permuté en attribut d'instance, dédup par jobPostingId, version française gagnante — la classe plateforme dayforce et les autres tenants sont intacts). Correction au passage de EMPLOYER, artefact de génération (intitulé de poste) : « Talent Acquisition Partner » → « Delinian (ex-Euromoney) » (Euromoney Institutional Investor plc rebrandé Delinian en 2023, bureau de Montréal au 1001 De Maisonneuve Ouest). Sync isolé rejoué : found=0 en 7,2 s (exact, l'offre 4827 avait déjà été retirée par le mécanisme normal miss_count=2 au sync de 14h04), statut ok. 101 tests pytest verts. pm2 restart job-ka-sync OK, site 200.

Simon-Pierre Boucher committed 13 days ago (Sep 11, 2026) parent f183ae1

1 changed file +32 −3

modified jobka/connectors/euromoneyplc.py +32 −3
@@ -3,15 +3,44 @@
3 3 # Auteur : Simon-Pierre Boucher
4 4 # Contact : contact@spboucher.ai
5 5 # Fichier : jobka/connectors/euromoneyplc.py
6 −# Rôle : Connecteur Talent Acquisition Partner — dayforce (ns='euromoneyplc', board='CANDIDATEPORTAL')
6 +# Rôle : Connecteur Delinian (ex-Euromoney plc) — dayforce (ns='euromoneyplc',
7 +# board='CANDIDATEPORTAL'), balayage fr-CA + en-CA + en-GB
7 8 # [généré par scripts/gen_connectors.py, flux vérifié le 2026-08-23]
8 −# Créé : 2026-08-23 Modifié : 2026-08-23
9 +# Créé : 2026-08-23 Modifié : 2026-09-11
9 10 # =============================================================================
11 +"""Delinian (groupe britannique, ex-Euromoney Institutional Investor plc) —
12 +bureau de Montréal (1001 De Maisonneuve Ouest). delinian.com/careers pointe
13 +toujours vers ce tenant Dayforce (portail en-GB).
14 +
15 +Contexte 2026-09-11 : la dernière offre QC (4827, Montréal, publiée en
16 +français) a été dépubliée par l'employeur entre 09h19 et 11h40 EDT — le tenant
17 +publie 0 poste TOTAL (boards CANDIDATEPORTAL et EUROMONEY × cultures fr-CA,
18 +en-CA, en-GB, en-US vérifiés) : volume 0 légitime ce jour-là. Mais la
19 +recherche Dayforce est PARTITIONNÉE par culture de publication (cf.
20 +harrisrebar, 2026-09-10) et le portail officiel de Delinian est en-GB : une
21 +future offre QC publiée en anglais serait invisible en fr-CA seul. fetch()
22 +balaie donc fr-CA PUIS en-CA PUIS en-GB et déduplique par jobPostingId (la
23 +version française gagne)."""
24 +from ..schema import JobPosting
10 25 from .dayforce import DayforceConnector
11 26
12 27
13 28 class EuromoneyplcConnector(DayforceConnector):
14 29 source_id = 'euromoneyplc'
15 − EMPLOYER = 'Talent Acquisition Partner'
30 + EMPLOYER = 'Delinian (ex-Euromoney)'
16 31 NS = 'euromoneyplc'
17 32 BOARD = 'CANDIDATEPORTAL'
33 + EXTRA_CULTURES = ('en-CA', 'en-GB')
34 +
35 + def fetch(self) -> list[JobPosting]:
36 + jobs = super().fetch() # culture fr-CA (défaut)
37 + seen = {j.external_id for j in jobs}
38 + for culture in self.EXTRA_CULTURES:
39 + self.CULTURE = culture # attribut d'instance : la
40 + try: # classe (autres tenants)
41 + extra = super().fetch() # n'est pas modifiée
42 + finally:
43 + self.CULTURE = type(self).CULTURE
44 + jobs.extend(j for j in extra if j.external_id not in seen)
45 + seen.update(j.external_id for j in extra)
46 + return jobs
18 47