SPB Git forge

spb/job-ka

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

[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>
Simon-Pierre Boucher committed 14 days ago (Sep 11, 2026) parent 09c7254

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