[ka6] fix connecteur quadreal: balayage des deux sites carrières du tenant workday quadreal.wd10 (Parkbridge + QuadReal) — le connecteur ne scannait que le site filiale Parkbridge, dont l'unique offre QC historique (R0006877 « Préposé à l'entretien ménager », Magog) a été dépubliée par l'employeur le 2026-09-10 (détail API 403 permission denied, recherche mot-clé/ID → 0, facette province réduite à AB/ON/BC sur 7 postes) → found=0, statut stale. Le site principal QuadReal du même tenant publie pourtant 68 postes dont 1 au Québec (R0006871 « Property Administrator/Administrateur immobilier », Montréal), invisible pour le connecteur. fetch() balaie désormais Parkbridge PUIS QuadReal (pattern harrisrebar : SITE permuté en attribut d'instance, dédup par external_id/jobReqId — la classe plateforme workday et les autres tenants sont intacts). Correction au passage de EMPLOYER : Quadreal → QuadReal (graphie officielle). Sync rejoué : found=1 en 2,7 s (+1 Montréal, -1 Magog retirée par le mécanisme normal miss_count=2), volume conforme à la médiane 0.5–1. 101 tests pytest verts. pm2 restart job-ka-sync OK, site 200.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
1 changed file +33 −3
modified
jobka/connectors/quadreal.py
+33 −3
@@ -3,16 +3,46 @@ | ||
| 3 | 3 | # Auteur : Simon-Pierre Boucher |
| 4 | 4 | # Contact : contact@spboucher.ai |
| 5 | 5 | # Fichier : jobka/connectors/quadreal.py |
| 6 | −# Rôle : Connecteur Quadreal — workday (tenant quadreal.wd10, site Parkbridge) | |
| 6 | +# Rôle : Connecteur QuadReal — workday (tenant quadreal.wd10), balayage des | |
| 7 | +# deux sites carrières du tenant : Parkbridge + QuadReal | |
| 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-10 | |
| 9 | 10 | # ============================================================================= |
| 11 | +"""QuadReal Property Group expose DEUX sites carrières sur le même tenant | |
| 12 | +Workday `quadreal.wd10` : `Parkbridge` (filiale Parkbridge Lifestyle | |
| 13 | +Communities) et `QuadReal` (site principal corporate). | |
| 14 | + | |
| 15 | +Contexte 2026-09-10 : le connecteur ne balayait que `Parkbridge`, dont | |
| 16 | +l'unique offre QC historique (R0006877, Préposé à l'entretien ménager, Magog) | |
| 17 | +a été dépubliée par l'employeur (détail 403 « permission denied », recherche | |
| 18 | +par mot-clé et ID → 0, facette province réduite à AB/ON/BC sur 7 postes). | |
| 19 | +Pendant ce temps le site principal `QuadReal` publiait 68 postes dont 1 au | |
| 20 | +Québec (R0006871, Property Administrator/Administrateur immobilier, | |
| 21 | +Montréal) — invisible pour le connecteur. fetch() balaie désormais | |
| 22 | +`Parkbridge` PUIS `QuadReal` et déduplique par external_id (jobReqId, | |
| 23 | +unique au tenant) ; le SITE est permuté en attribut d'instance, la classe | |
| 24 | +plateforme et les autres tenants workday restent intacts.""" | |
| 25 | +from ..schema import JobPosting | |
| 10 | 26 | from .workday import WorkdayConnector |
| 11 | 27 | |
| 12 | 28 | |
| 13 | 29 | class QuadrealConnector(WorkdayConnector): |
| 14 | 30 | source_id = 'quadreal' |
| 15 | − EMPLOYER = 'Quadreal' | |
| 31 | + EMPLOYER = 'QuadReal' | |
| 16 | 32 | TENANT = 'quadreal' |
| 17 | 33 | HOST = 'wd10' |
| 18 | 34 | SITE = 'Parkbridge' |
| 35 | + EXTRA_SITES = ('QuadReal',) | |
| 36 | + | |
| 37 | + def fetch(self) -> list[JobPosting]: | |
| 38 | + jobs = super().fetch() # site Parkbridge (défaut) | |
| 39 | + seen = {j.external_id for j in jobs} | |
| 40 | + for site in self.EXTRA_SITES: | |
| 41 | + self.SITE = site # attribut d'instance : la | |
| 42 | + try: # classe (autres tenants) | |
| 43 | + extra = super().fetch() # n'est pas modifiée | |
| 44 | + finally: | |
| 45 | + self.SITE = type(self).SITE | |
| 46 | + jobs.extend(j for j in extra if j.external_id not in seen) | |
| 47 | + seen.update(j.external_id for j in extra) | |
| 48 | + return jobs | |
| 19 | 49 | |