[ka6] fix connecteur harrisrebar: balayage en-CA complémentaire dans la plateforme dayforce (tenant seul) — la recherche Dayforce est PARTITIONNÉE par culture de publication, sans repli serveur (vérifié : lavieenrose fr-CA 172 / en-CA 281, soprema fr 23 / en 20). Le tenant harrisrebar (Harris Rebar, rebrandé Nucor Rebar Fabrication — harrisrebar.com redirige vers nucor.com) publie ses 12 postes actuels (ON/AB/NS/NB/BC) en en-CA seulement : la recherche fr-CA du connecteur renvoie 0 poste TOTAL. L'unique offre QC historique (16804 « AIDE À L'EXPÉDITION/À LA RÉCEPTION », Montréal, publiée en français) a été dépubliée par l'employeur le 2026-09-10 entre 10h04 et 14h35 EDT — absente des listings des 2 boards (CANDIDATEPORTAL + HarrisCanada) × 2 cultures, mot-clé compris ; le détail API 200 est un rendu résiduel (createdTimestampUTC = heure de la requête ; id bidon → 404). Volume 0 légitime AUJOURD'HUI, mais fr-CA seul rendrait le connecteur aveugle à toute future offre QC publiée en anglais : fetch() balaie désormais fr-CA PUIS en-CA (dédup par jobPostingId, version française gagnante, CULTURE restaurée en attribut d'instance — la classe plateforme et les ~124 autres tenants dayforce sont intacts). Correction au passage de EMPLOYER, artefact de génération (titre de poste) → « Nucor Rebar Fabrication (Harris Rebar) ». Test réel : fr-CA 0 + en-CA 12 postes scannés → 0 offre QC (exact). Sync isolé rejoué : found=0, removed=1 (16804 retirée par le mécanisme normal miss_count=2), statut ok. 101 tests pytest verts. pm2 restart job-ka-sync OK, site 200.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
1 changed file +28 −3
modified
jobka/connectors/harrisrebar.py
+28 −3
@@ -3,15 +3,40 @@ | ||
| 3 | 3 | # Auteur : Simon-Pierre Boucher |
| 4 | 4 | # Contact : contact@spboucher.ai |
| 5 | 5 | # Fichier : jobka/connectors/harrisrebar.py |
| 6 | −# Rôle : Connecteur AIDE À L'EXPÉDITION/À LA RÉCEPTION — dayforce (ns='harrisrebar', board='CANDIDATEPORTAL') | |
| 6 | +# Rôle : Connecteur Nucor Rebar Fabrication / Harris Rebar — dayforce | |
| 7 | +# (ns='harrisrebar', board='CANDIDATEPORTAL'), balayage fr-CA + en-CA | |
| 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 | +"""Harris Rebar (rebrandé Nucor Rebar Fabrication — harrisrebar.com redirige | |
| 12 | +vers nucor.com depuis 2026) garde son tenant Dayforce `harrisrebar` actif. | |
| 13 | + | |
| 14 | +Contexte 2026-09-10 : la recherche Dayforce est PARTITIONNÉE par culture de | |
| 15 | +publication — un poste publié en anglais n'apparaît PAS dans la recherche | |
| 16 | +fr-CA (aucun repli serveur ; vérifié sur lavieenrose fr 172 / en 281 et | |
| 17 | +soprema fr 23 / en 20). Ce tenant anglophone publie aujourd'hui 12 postes | |
| 18 | +(ON/AB/NS/NB/BC) tous en en-CA : la recherche fr-CA seule renvoie 0. L'unique | |
| 19 | +offre QC historique (16804, Montréal, publiée en français) a été dépubliée par | |
| 20 | +l'employeur le 2026-09-10 — volume 0 légitime ce jour-là. Pour ne pas rater | |
| 21 | +une future offre QC publiée en anglais seulement, fetch() balaie fr-CA PUIS | |
| 22 | +en-CA et déduplique par jobPostingId (la version française gagne).""" | |
| 23 | +from ..schema import JobPosting | |
| 10 | 24 | from .dayforce import DayforceConnector |
| 11 | 25 | |
| 12 | 26 | |
| 13 | 27 | class HarrisrebarConnector(DayforceConnector): |
| 14 | 28 | source_id = 'harrisrebar' |
| 15 | − EMPLOYER = "AIDE À L'EXPÉDITION/À LA RÉCEPTION" | |
| 29 | + EMPLOYER = 'Nucor Rebar Fabrication (Harris Rebar)' | |
| 16 | 30 | NS = 'harrisrebar' |
| 17 | 31 | BOARD = 'CANDIDATEPORTAL' |
| 32 | + | |
| 33 | + def fetch(self) -> list[JobPosting]: | |
| 34 | + jobs = super().fetch() # culture fr-CA (défaut) | |
| 35 | + seen = {j.external_id for j in jobs} | |
| 36 | + self.CULTURE = 'en-CA' # attribut d'instance : la | |
| 37 | + try: # classe (autres tenants) | |
| 38 | + extra = super().fetch() # n'est pas modifiée | |
| 39 | + finally: | |
| 40 | + self.CULTURE = type(self).CULTURE | |
| 41 | + jobs.extend(j for j in extra if j.external_id not in seen) | |
| 42 | + return jobs | |
| 18 | 43 | |