[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.
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 | |