# ============================================================================= # Job·Ka — Groupe KA # Auteur : Simon-Pierre Boucher # Contact : contact@spboucher.ai # Fichier : jobka/connectors/canderel.py # Rôle : Connecteur Canderel — dayforce (ns='canderel', board='CANDIDATEPORTAL'), # balayage fr-CA + en-CA # [généré par scripts/gen_connectors.py, flux vérifié le 2026-08-23] # Créé : 2026-08-23 Modifié : 2026-09-21 # ============================================================================= """Canderel (canderel.com) — promoteur immobilier montréalais (siège à la Place Ville Marie), tenant Dayforce `canderel`. Contexte 2026-09-21 : la recherche Dayforce est PARTITIONNÉE par culture de publication — un poste publié en anglais n'apparaît PAS dans la recherche fr-CA (constat harrisrebar 2026-09-10, aucun repli serveur). Les 2 offres QC historiques (Coordonnateur RH 3674/3628, Montréal, publiées en français) ont été dépubliées par l'employeur le 2026-09-21 — volume 0 légitime ce jour-là — et les 3 offres restantes du board (Calgary 3709, Edmonton 3698, Toronto 3676) sont publiées en anglais seulement : la recherche fr-CA renvoie maxCount=0 alors que en-CA voit tout le board. Pour ne pas rater une future offre QC publiée en anglais seulement, fetch() balaie fr-CA PUIS en-CA et déduplique par jobPostingId (la version française gagne) ; le filtre Québec de la classe de base s'applique inchangé.""" from ..schema import JobPosting from .dayforce import DayforceConnector class CanderelConnector(DayforceConnector): source_id = 'canderel' EMPLOYER = 'Canderel' NS = 'canderel' BOARD = 'CANDIDATEPORTAL' def fetch(self) -> list[JobPosting]: jobs = super().fetch() # culture fr-CA (défaut) seen = {j.external_id for j in jobs} self.CULTURE = 'en-CA' # attribut d'instance : la try: # classe (autres tenants) extra = super().fetch() # n'est pas modifiée finally: self.CULTURE = type(self).CULTURE jobs.extend(j for j in extra if j.external_id not in seen) return jobs