SPB Git

spb/job-ka

Public

[ka6] fix connecteur niobec: frontal ADP intermittent PAR CID (4e cas, garde-fou retry borné répliqué) + correction d'un angle mort de culture — FORCE_CITY publiait l'offre talc de Timmins (ON) comme Saint-Honoré QC → bascule LANG en_US, found=0 = reflet exact de la source

Stale (2 échecs 404) : vert found=1 jusqu'à 21:24 EDT le 30/10 puis « default
backend - 404 » nginx sur la liste à 23:45 et 02:15 — fenêtre nocturne ADP
multi-tenants (nemaska_lithium, osgoode_properties, strathmore, uv_assurance,
canadian_royalties touchés 23:45→03:23) qui a dégénéré pour CE cid en frontal
intermittent (sonde 03:5x : liste ET détail 404 pendant que nemaska/abritek/
strathmore répondent 200 la même minute ; 1 essai sur 6 aboutit). Même panne
que bento_sushi/cookit/mitsubishi_hc_capital du 2026-10-26 (fiche
adp-frontal-intermittent-par-cid) : garde-fou _get_json répliqué à
l'identique (30 essais, pause 2 s, timeout 15 s, 404/502/503/504/timeout/
non-JSON), inerte hors panne. Sync rejoué : vert found=1 en 1,9 s.

2e découverte pendant la vérification bi-culture (fiche dayforce-partition-
culture appliquée à ADP) : le cid 099e24b7 est le board corporatif MAGRIS
(magrispm.com/careers y pointe en en_US), pas un board Niobec mono-site. La
culture fr_CA ne liste qu'1 réquisition sur 20 ET en omet les
requisitionLocations ; l'unique offre fr_CA (9204575399835_1 « Process
Engineer/Metallurgist », circuits de TALC) est localisée « Timmins, ON » en
en_US — publiée à tort comme Saint-Honoré QC via FORCE_CITY depuis la vague D.
Board en_US vérifié live : 20 offres, 19/19 avec locations, toutes
ON/CO/MT/TX/VT, zéro lieu QC. Correctif : LANG='en_US' (culture sur-ensemble,
le filtre Québec tranche sur le vrai lieu), FORCE_CITY retiré. Syncs rejoués
3× : ok=1 found=0 (1er passage 10,7 s = retries flaky au travail), offre
Timmins retirée au 2e passage (garde-fou 2-miss ; DRIFT_MIN_BASE=8 > médiane
1.0, retraits non suspendus). found=0 est désormais la VÉRITÉ de la source —
profil « ok=1 found=0 médiane ≤1 » : si niobec est re-signalé stale avec le
board en_US sans lieu QC, rien à faire, il reverdira à la prochaine embauche
QC de Magris/Niobec.

Fiches niobec.md/ats-adp.md/INDEX.md régénérées (1132 autres restaurées, hors
périmètre). 108 tests pytest verts, pm2 restart job-ka-sync OK, site local
200, www.job-ka.com 200.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Simon-Pierre Boucher committed (Oct 31, 2026) parent 2a5092f Browse files

4 changed files +132 −84

modified docs/connecteurs/INDEX.md +21 −21
@@ -5,16 +5,16 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/INDEX.md
7 7 Rôle : Index généré de la documentation des connecteurs (ATS, employeurs, portails, dépôt)
8 −Généré : 2026-10-31 03:41 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-10-31 04:03 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
12 12
13 13 # Job·Ka — Connecteurs (index)
14 14
15 −> Index généré le 2026-10-31 03:41 EDT par `scripts/gen_connector_docs.py` (rejouable). Croise `data/sources.json`, l'introspection de `jobka/connectors/*.py` et la base live `data/jobka.db`.
15 +> Index généré le 2026-10-31 04:03 EDT par `scripts/gen_connector_docs.py` (rejouable). Croise `data/sources.json`, l'introspection de `jobka/connectors/*.py` et la base live `data/jobka.db`.
16 16
17 −**1103 employeurs directs** connectés via **27 plateformes ATS** + **3 portails agrégateurs** + le canal de **dépôt direct** — **25448 offres actives** (23018 directes, 2430 portails ; 101 masquées comme doublons inter-sources, soit 25347 visibles). 1135 fiches.
17 +**1103 employeurs directs** connectés via **27 plateformes ATS** + **3 portails agrégateurs** + le canal de **dépôt direct** — **25369 offres actives** (22939 directes, 2430 portails ; 101 masquées comme doublons inter-sources, soit 25268 visibles). 1135 fiches.
18 18
19 19 Conformité : voir [`docs/CONFORMITE.md`](../CONFORMITE.md). Chaque offre conserve son URL originale ; la candidature se fait chez l'employeur (badge « Offre directe » sur les sources directes).
20 20
@@ -22,13 +22,13 @@ Conformité : voir [`docs/CONFORMITE.md`](../CONFORMITE.md). Chaque offre conser
22 22
23 23 | Plateforme | Employeurs | Actives | Salaire | GPS |
24 24 |---|---|---|---|---|
25 −| [`workday`](ats-workday.md) | 232 | 7470 | 47 % | 88 % |
26 −| [`smartrecruiters`](ats-smartrecruiters.md) | 171 | 2909 | 16 % | 99 % |
25 +| [`workday`](ats-workday.md) | 232 | 7446 | 47 % | 88 % |
26 +| [`smartrecruiters`](ats-smartrecruiters.md) | 171 | 2903 | 16 % | 99 % |
27 27 | [`workable`](ats-workable.md) | 71 | 1974 | 17 % | 100 % |
28 −| [`dayforce`](ats-dayforce.md) | 129 | 1906 | 10 % | 100 % |
28 +| [`dayforce`](ats-dayforce.md) | 129 | 1901 | 10 % | 100 % |
29 29 | [`successfactors`](ats-successfactors.md) | 12 | 1656 | 19 % | 99 % |
30 30 | [`njoyn`](ats-njoyn.md) | 11 | 1345 | 70 % | 87 % |
31 −| [`workland`](ats-workland.md) | 1 | 1151 | 36 % | 100 % |
31 +| [`workland`](ats-workland.md) | 1 | 1109 | 37 % | 100 % |
32 32 | [`wpjobmanager`](ats-wpjobmanager.md) | 8 | 806 | 6 % | 100 % |
33 33 | [`greenhouse`](ats-greenhouse.md) | 132 | 792 | 19 % | 100 % |
34 34 | [`lever`](ats-lever.md) | 58 | 622 | 20 % | 95 % |
@@ -40,7 +40,7 @@ Conformité : voir [`docs/CONFORMITE.md`](../CONFORMITE.md). Chaque offre conser
40 40 | [`teamtailor`](ats-teamtailor.md) | 10 | 166 | 28 % | 96 % |
41 41 | [`zoho_recruit`](ats-zoho_recruit.md) | 16 | 146 | 14 % | 86 % |
42 42 | [`jazzhr`](ats-jazzhr.md) | 27 | 143 | 17 % | 91 % |
43 −| [`adp`](ats-adp.md) | 17 | 134 | 34 % | 91 % |
43 +| [`adp`](ats-adp.md) | 17 | 132 | 33 % | 91 % |
44 44 | [`taleo`](ats-taleo.md) | 5 | 105 | 0 % | 100 % |
45 45 | [`icims`](ats-icims.md) | 7 | 52 | 27 % | 98 % |
46 46 | [`ultipro`](ats-ultipro.md) | 4 | 48 | 50 % | 100 % |
@@ -63,7 +63,7 @@ Conformité : voir [`docs/CONFORMITE.md`](../CONFORMITE.md). Chaque offre conser
63 63
64 64 | Employeur | ATS | Actives | Salaire | GPS | Dernier sync OK |
65 65 |---|---|---|---|---|---|
66 −| [Réseau Atlas Workland (~80 employeurs QC : CSS, cégeps, Santé Québec, STQ, UQTR…)](atlas_workland.md) | [`workland`](ats-workland.md) | 1151 | 36 % | 100 % | ✅ |
66 +| [Réseau Atlas Workland (~80 employeurs QC : CSS, cégeps, Santé Québec, STQ, UQTR…)](atlas_workland.md) | [`workland`](ats-workland.md) | 1109 | 37 % | 100 % | ✅ |
67 67 | [Couche-Tard / Circle K](circlek.md) | [`workday`](ats-workday.md) | 987 | 70 % | 68 % | ✅ |
68 68 | [Solution SFT](solution_sft.md) | [`workable`](ats-workable.md) | 940 | 24 % | 99 % | ✅ |
69 69 | [Bombardier](bombardier.md) | [`successfactors`](ats-successfactors.md) | 899 | 1 % | 100 % | ✅ |
@@ -96,7 +96,6 @@ Conformité : voir [`docs/CONFORMITE.md`](../CONFORMITE.md). Chaque offre conser
96 96 | [TJX Canada (Winners, HomeSense, Marshalls)](tjx.md) | [`workday`](ats-workday.md) | 114 | 98 % | 100 % | ❌ |
97 97 | [Cascades](cascades.md) | [`successfactors`](ats-successfactors.md) | 112 | 83 % | 100 % | ✅ |
98 98 | [Vidéotron](videotron.md) | [`smartrecruiters`](ats-smartrecruiters.md) | 108 | 6 % | 100 % | ✅ |
99 −| [BMO Groupe financier](bmo.md) | [`workday`](ats-workday.md) | 104 | 82 % | 75 % | ✅ |
100 99 | [CISSS de Chaudière-Appalaches](cisss_chaudiere_appalaches.md) | [`wpjobmanager`](ats-wpjobmanager.md) | 103 | 2 % | 100 % | ✅ |
101 100 | [Groupe Helios](groupehelios.md) | [`smartrecruiters`](ats-smartrecruiters.md) | 103 | 3 % | 100 % | ✅ |
102 101 | [Dentalcorp](dentalcorp.md) | [`workday`](ats-workday.md) | 102 | 16 % | 100 % | ✅ |
@@ -104,6 +103,7 @@ Conformité : voir [`docs/CONFORMITE.md`](../CONFORMITE.md). Chaque offre conser
104 103 | [Sépaq](sepaq.md) | [`taleo_tbe`](ats-taleo_tbe.md) | 99 | 55 % | 8 % | ✅ |
105 104 | [CISSS de Lanaudière](cisss_lanaudiere.md) | [`wpjobmanager`](ats-wpjobmanager.md) | 98 | 10 % | 100 % | ✅ |
106 105 | [Genetec](genetec_inc.md) | [`workable`](ats-workable.md) | 97 | 0 % | 100 % | ✅ |
106 +| [BMO Groupe financier](bmo.md) | [`workday`](ats-workday.md) | 96 | 80 % | 74 % | ✅ |
107 107 | [HIKINEX](recruiting.md) | [`breezy`](ats-breezy.md) | 91 | 0 % | 100 % | ✅ |
108 108 | [Artelia Canada](artelia.md) | [`smartrecruiters`](ats-smartrecruiters.md) | 90 | 0 % | 100 % | ✅ |
109 109 | [iA Groupe financier](ia_groupe.md) | [`workday`](ats-workday.md) | 90 | 100 % | 98 % | ✅ |
@@ -119,10 +119,10 @@ Conformité : voir [`docs/CONFORMITE.md`](../CONFORMITE.md). Chaque offre conser
119 119 | [CISSS de l'Outaouais](cisss_outaouais.md) | [`wpjobmanager`](ats-wpjobmanager.md) | 74 | 26 % | 100 % | ✅ |
120 120 | [Norda Stelo](nordastelo.md) | [`teamtailor`](ats-teamtailor.md) | 72 | 0 % | 97 % | ✅ |
121 121 | [Manuvie](manulife.md) | [`workday`](ats-workday.md) | 70 | 91 % | 46 % | ✅ |
122 −| [BPA (Experts-conseils)](bpa.md) | [`dayforce`](ats-dayforce.md) | 68 | 0 % | 100 % | ✅ |
123 122 | [Dexterra](dexterra.md) | [`smartrecruiters`](ats-smartrecruiters.md) | 68 | 0 % | 100 % | ✅ |
124 123 | [EMCO](emcocorporation.md) | [`smartrecruiters`](ats-smartrecruiters.md) | 68 | 40 % | 100 % | ✅ |
125 124 | [Gray Collection (Groupe Antonopoulos)](graycollection.md) | [`dayforce`](ats-dayforce.md) | 66 | 0 % | 100 % | ✅ |
125 +| [BPA (Experts-conseils)](bpa.md) | [`dayforce`](ats-dayforce.md) | 64 | 0 % | 100 % | ✅ |
126 126 | [Kiewit (Ganotec)](kiewit_ganotec.md) | [`successfactors`](ats-successfactors.md) | 62 | 0 % | 100 % | ✅ |
127 127 | [Lifeworks](lifeworks.md) | [`workday`](ats-workday.md) | 61 | 28 % | 87 % | ✅ |
128 128 | [McKesson Canada](mckesson.md) | [`workday`](ats-workday.md) | 60 | 82 % | 87 % | ✅ |
@@ -135,15 +135,15 @@ Conformité : voir [`docs/CONFORMITE.md`](../CONFORMITE.md). Chaque offre conser
135 135 | [Galderma](galderma.md) | [`workday`](ats-workday.md) | 54 | 0 % | 100 % | ✅ |
136 136 | [Techo-Bloc](techo_bloc.md) | [`smartrecruiters`](ats-smartrecruiters.md) | 54 | 41 % | 100 % | ✅ |
137 137 | [Gevernova](gevernova.md) | [`workday`](ats-workday.md) | 53 | 21 % | 98 % | ✅ |
138 −| [Beneva](beneva.md) | [`workday`](ats-workday.md) | 52 | 4 % | 100 % | ✅ |
139 138 | [CHU de Québec — Université Laval](chu_quebec.md) | [`wpjobmanager`](ats-wpjobmanager.md) | 52 | 4 % | 100 % | ✅ |
140 139 | [Intelcom (Dragonfly)](intelcomgroup.md) | [`workday`](ats-workday.md) | 52 | 0 % | 100 % | ✅ |
141 140 | [Kruger](kruger.md) | [`taleo_tbe`](ats-taleo_tbe.md) | 52 | 10 % | 100 % | ✅ |
142 141 | [Lightspeed Commerce](lightspeedhq.md) | [`ashby`](ats-ashby.md) | 52 | 4 % | 100 % | ✅ |
143 142 | [PwC Canada](pwc.md) | [`workday`](ats-workday.md) | 52 | 100 % | 75 % | ❌ |
144 143 | [Squarepoint Capital](squarepointcapital.md) | [`greenhouse`](ats-greenhouse.md) | 52 | 38 % | 100 % | ✅ |
145 −| [Agropur](agropur.md) | [`workday`](ats-workday.md) | 50 | 98 % | 98 % | ✅ |
144 +| [Agropur](agropur.md) | [`workday`](ats-workday.md) | 49 | 98 % | 98 % | ✅ |
146 145 | [Agnico Eagle Mines](agnico_eagle.md) | [`taleo`](ats-taleo.md) | 48 | 0 % | 100 % | ✅ |
146 +| [Beneva](beneva.md) | [`workday`](ats-workday.md) | 48 | 4 % | 100 % | ✅ |
147 147 | [SOGECLAIR](sogeclair.md) | [`workable`](ats-workable.md) | 48 | 2 % | 100 % | ✅ |
148 148 | [Cogeco](cogeco.md) | [`workday`](ats-workday.md) | 47 | 19 % | 45 % | ✅ |
149 149 | [Laura Canada](lauracanada.md) | [`dayforce`](ats-dayforce.md) | 47 | 0 % | 100 % | ✅ |
@@ -185,7 +185,6 @@ Conformité : voir [`docs/CONFORMITE.md`](../CONFORMITE.md). Chaque offre conser
185 185 | [KABS](kabs.md) | [`smartrecruiters`](ats-smartrecruiters.md) | 34 | 0 % | 100 % | ✅ |
186 186 | [QSL](qsl.md) | [`smartrecruiters`](ats-smartrecruiters.md) | 34 | 32 % | 100 % | ✅ |
187 187 | [Autodesk](autodesk.md) | [`eightfold`](ats-eightfold.md) | 33 | 88 % | 100 % | ✅ |
188 −| [Best Buy Canada](bestbuycanada.md) | [`workday`](ats-workday.md) | 33 | 0 % | 39 % | ✅ |
189 188 | [AccorHotel](accorhotel.md) | [`smartrecruiters`](ats-smartrecruiters.md) | 32 | 59 % | 100 % | ✅ |
190 189 | [Advanceauto](advanceauto.md) | [`workday`](ats-workday.md) | 32 | 0 % | 38 % | ✅ |
191 190 | [Industries Lassonde](lassonde.md) | [`custom`](ats-custom.md) | 32 | 34 % | 91 % | ✅ |
@@ -226,6 +225,7 @@ Conformité : voir [`docs/CONFORMITE.md`](../CONFORMITE.md). Chaque offre conser
226 225 | [AppDirect](appdirect.md) | [`greenhouse`](ats-greenhouse.md) | 24 | 25 % | 100 % | ✅ |
227 226 | [Baseten](baseten.md) | [`ashby`](ats-ashby.md) | 24 | 100 % | 0 % | ✅ |
228 227 | [Behaviour Interactif](bhvr.md) | [`lever`](ats-lever.md) | 24 | 0 % | 100 % | ✅ |
228 +| [Best Buy Canada](bestbuycanada.md) | [`workday`](ats-workday.md) | 24 | 0 % | 38 % | ✅ |
229 229 | [Directive](directive.md) | [`ashby`](ats-ashby.md) | 24 | 21 % | 0 % | ✅ |
230 230 | [Exportation et développement Canada (EDC)](export_development_canada.md) | [`workable`](ats-workable.md) | 24 | 96 % | 100 % | ✅ |
231 231 | [FedEx Express Canada](fedex.md) | [`workday`](ats-workday.md) | 24 | 100 % | 88 % | ✅ |
@@ -260,7 +260,6 @@ Conformité : voir [`docs/CONFORMITE.md`](../CONFORMITE.md). Chaque offre conser
260 260 | [Produits Labelink](labelink.md) | [`bamboohr`](ats-bamboohr.md) | 21 | 0 % | 100 % | ✅ |
261 261 | [Préparateur de commandes](sysco.md) | [`workday`](ats-workday.md) | 21 | 24 % | 86 % | ❌ |
262 262 | [Sales Associate III](tapestry.md) | [`workday`](ats-workday.md) | 21 | 100 % | 100 % | ✅ |
263 −| [Alcoa Canada](alcoa.md) | [`workday`](ats-workday.md) | 20 | 15 % | 45 % | ✅ |
264 263 | [Fund Accountant / Comptable de Fonds](sagardholdings.md) | [`workday`](ats-workday.md) | 20 | 15 % | 95 % | ✅ |
265 264 | [Keywords Studios](keywords_intl1.md) | [`workable`](ats-workable.md) | 20 | 95 % | 100 % | ✅ |
266 265 | [Logm](logm.md) | [`dayforce`](ats-dayforce.md) | 20 | 75 % | 100 % | ✅ |
@@ -274,6 +273,7 @@ Conformité : voir [`docs/CONFORMITE.md`](../CONFORMITE.md). Chaque offre conser
274 273 | [Ville de Gatineau](ville_gatineau.md) | [`njoyn`](ats-njoyn.md) | 20 | 100 % | 0 % | ✅ |
275 274 | [VinFast Canada](vinfastcanada.md) | [`dayforce`](ats-dayforce.md) | 20 | 25 % | 100 % | ✅ |
276 275 | [Vosker](vosker.md) | [`smartrecruiters`](ats-smartrecruiters.md) | 20 | 0 % | 100 % | ✅ |
276 +| [Alcoa Canada](alcoa.md) | [`workday`](ats-workday.md) | 19 | 16 % | 47 % | ✅ |
277 277 | [Groupe Nordik (Nordik Spa-Nature)](groupe_nordik.md) | [`adp`](ats-adp.md) | 19 | 26 % | 100 % | ✅ |
278 278 | [Groupeguilbault](groupeguilbault.md) | [`workday`](ats-workday.md) | 19 | 0 % | 100 % | ✅ |
279 279 | [H&M](hmgroup.md) | [`smartrecruiters`](ats-smartrecruiters.md) | 19 | 0 % | 100 % | ✅ |
@@ -284,7 +284,6 @@ Conformité : voir [`docs/CONFORMITE.md`](../CONFORMITE.md). Chaque offre conser
284 284 | [Uniboard](uniboard.md) | [`adp`](ats-adp.md) | 19 | 32 % | 63 % | ✅ |
285 285 | [Victoria Park Medispa](vicpark.md) | [`bamboohr`](ats-bamboohr.md) | 19 | 0 % | 100 % | ✅ |
286 286 | [Xsolla](xsolla.md) | [`lever`](ats-lever.md) | 19 | 100 % | 95 % | ✅ |
287 −| [AbbVie](abbvie.md) | [`smartrecruiters`](ats-smartrecruiters.md) | 18 | 0 % | 100 % | ✅ |
288 287 | [ALS Global](alsglobal.md) | [`workday`](ats-workday.md) | 18 | 6 % | 94 % | ✅ |
289 288 | [Bell Textron Canada](bell_textron.md) | [`taleo`](ats-taleo.md) | 18 | 0 % | 100 % | ✅ |
290 289 | [CONTRÔLEUR](novatech.md) | [`dayforce`](ats-dayforce.md) | 18 | 39 % | 100 % | ✅ |
@@ -366,12 +365,13 @@ Conformité : voir [`docs/CONFORMITE.md`](../CONFORMITE.md). Chaque offre conser
366 365 | [TransPerfect](transperfect.md) | [`recruitee`](ats-recruitee.md) | 13 | 0 % | 100 % | ✅ |
367 366 | [Triotech](triotech.md) | [`bamboohr`](ats-bamboohr.md) | 13 | 0 % | 100 % | ✅ |
368 367 | [Work From Home Customer Service Representative](usasurveyjob.md) | [`lever`](ats-lever.md) | 13 | 15 % | 100 % | ✅ |
368 +| [AbbVie](abbvie.md) | [`smartrecruiters`](ats-smartrecruiters.md) | 12 | 0 % | 100 % | ✅ |
369 369 | [Aritzia](aritzia.md) | [`workday`](ats-workday.md) | 12 | 58 % | 100 % | ✅ |
370 370 | [Artiste technique sénior·e UI / Senior UI Tech Artist](x2k.md) | [`greenhouse`](ats-greenhouse.md) | 12 | 8 % | 100 % | ✅ |
371 371 | [Avantage Plus](avantageplus.md) | [`recruitee`](ats-recruitee.md) | 12 | 17 % | 100 % | ✅ |
372 372 | [Aylo](aylo.md) | [`greenhouse`](ats-greenhouse.md) | 12 | 0 % | 100 % | ✅ |
373 373 | [Aylo](aylofr.md) | [`greenhouse`](ats-greenhouse.md) | 12 | 0 % | 100 % | ✅ |
374 −| [Bayshore HealthCare](bayshore.md) | [`taleo`](ats-taleo.md) | 12 | 0 % | 100 % | ❌ |
374 +| [Bayshore HealthCare](bayshore.md) | [`taleo`](ats-taleo.md) | 12 | 0 % | 100 % | ✅ |
375 375 | [Brasseries Sleeman (Unibroue)](sleeman.md) | [`workday`](ats-workday.md) | 12 | 8 % | 92 % | ❌ |
376 376 | [Epic Games](epicgames.md) | [`greenhouse`](ats-greenhouse.md) | 12 | 0 % | 100 % | ✅ |
377 377 | [Evolving Web](evolving_web.md) | [`workable`](ats-workable.md) | 12 | 0 % | 100 % | ✅ |
@@ -508,7 +508,6 @@ Conformité : voir [`docs/CONFORMITE.md`](../CONFORMITE.md). Chaque offre conser
508 508 | [Sweat Pants Agency](sweat_pants_agency.md) | [`workable`](ats-workable.md) | 8 | 25 % | 100 % | ✅ |
509 509 | [Vendeur 3ème Clé (Thirdy Key)](fossil.md) | [`dayforce`](ats-dayforce.md) | 8 | 0 % | 100 % | ✅ |
510 510 | [WestGroupe](westgroupe.md) | [`jazzhr`](ats-jazzhr.md) | 8 | 0 % | 100 % | ✅ |
511 −| [Abritek](abritek.md) | [`adp`](ats-adp.md) | 7 | 100 % | 100 % | ✅ |
512 511 | [Allegion](allegion.md) | [`workday`](ats-workday.md) | 7 | 57 % | 86 % | ✅ |
513 512 | [Alveole](alveole.md) | [`greenhouse`](ats-greenhouse.md) | 7 | 100 % | 100 % | ✅ |
514 513 | [Artefact North America](artefactnoram.md) | [`greenhouse`](ats-greenhouse.md) | 7 | 57 % | 100 % | ✅ |
@@ -547,9 +546,9 @@ Conformité : voir [`docs/CONFORMITE.md`](../CONFORMITE.md). Chaque offre conser
547 546 | [Trigyn Technologies](trigyntechnologies1.md) | [`smartrecruiters`](ats-smartrecruiters.md) | 7 | 0 % | 100 % | ✅ |
548 547 | [Turner & Townsend](turnertownsend.md) | [`smartrecruiters`](ats-smartrecruiters.md) | 7 | 29 % | 100 % | ✅ |
549 548 | [Valtech](valtech.md) | [`greenhouse`](ats-greenhouse.md) | 7 | 14 % | 100 % | ✅ |
549 +| [Abritek](abritek.md) | [`adp`](ats-adp.md) | 6 | 100 % | 100 % | ✅ |
550 550 | [Accedian Networks](accediannetworks.md) | [`smartrecruiters`](ats-smartrecruiters.md) | 6 | 0 % | 100 % | ✅ |
551 551 | [AJ Walter Aviation](ajwalter.md) | [`recruitee`](ats-recruitee.md) | 6 | 0 % | 100 % | ✅ |
552 −| [Aliaxis](aliaxis.md) | [`workday`](ats-workday.md) | 6 | 50 % | 83 % | ✅ |
553 552 | [Also Recrutement - Carrière](alsorecrutement.md) | [`zoho_recruit`](ats-zoho_recruit.md) | 6 | 17 % | 50 % | ✅ |
554 553 | [Altitude Aerospace](altitudeaerospace.md) | [`jazzhr`](ats-jazzhr.md) | 6 | 0 % | 100 % | ✅ |
555 554 | [Bain Magique](bainmagique.md) | [`greenhouse`](ats-greenhouse.md) | 6 | 67 % | 100 % | ✅ |
@@ -594,6 +593,7 @@ Conformité : voir [`docs/CONFORMITE.md`](../CONFORMITE.md). Chaque offre conser
594 593 | [Adèle Express](adeleexpressfr.md) | [`recruitee`](ats-recruitee.md) | 5 | 60 % | 100 % | ✅ |
595 594 | [Agile DSS](agiledss.md) | [`recruitee`](ats-recruitee.md) | 5 | 0 % | 100 % | ✅ |
596 595 | [Aleanza Recrutement Durable](aleanzarecrutementdurable.md) | [`teamtailor`](ats-teamtailor.md) | 5 | 40 % | 100 % | ✅ |
596 +| [Aliaxis](aliaxis.md) | [`workday`](ats-workday.md) | 5 | 40 % | 80 % | ✅ |
597 597 | [Alo Yoga](aloyoga.md) | [`greenhouse`](ats-greenhouse.md) | 5 | 40 % | 60 % | ✅ |
598 598 | [Alphanumeric Systems](alphanumeric_systems.md) | [`breezy`](ats-breezy.md) | 5 | 100 % | 100 % | ✅ |
599 599 | [Altitude Sports](altitude_sports.md) | [`zoho_recruit`](ats-zoho_recruit.md) | 5 | 20 % | 100 % | ✅ |
@@ -790,7 +790,6 @@ Conformité : voir [`docs/CONFORMITE.md`](../CONFORMITE.md). Chaque offre conser
790 790 | [Adaptive Financial Consulting](adaptivefinancialconsulting.md) | [`greenhouse`](ats-greenhouse.md) | 2 | 0 % | 100 % | ✅ |
791 791 | [Administrateur Immobilier](gwlra.md) | [`dayforce`](ats-dayforce.md) | 2 | 0 % | 100 % | ✅ |
792 792 | [ADVENS](advens.md) | [`smartrecruiters`](ats-smartrecruiters.md) | 2 | 0 % | 100 % | ✅ |
793 −| [Air Canada Rouge](acadierouge.md) | [`dayforce`](ats-dayforce.md) | 2 | 50 % | 100 % | ✅ |
794 793 | [Amgen](amgen.md) | [`workday`](ats-workday.md) | 2 | 0 % | 100 % | ✅ |
795 794 | [AON3D](aon3d.md) | [`greenhouse`](ats-greenhouse.md) | 2 | 0 % | 100 % | ✅ |
796 795 | [AON3D](aon3d_fr.md) | [`greenhouse`](ats-greenhouse.md) | 2 | 0 % | 100 % | ✅ |
@@ -885,6 +884,7 @@ Conformité : voir [`docs/CONFORMITE.md`](../CONFORMITE.md). Chaque offre conser
885 884 | [AG Globe Services](agglobeservices.md) | [`smartrecruiters`](ats-smartrecruiters.md) | 1 | 0 % | 100 % | ✅ |
886 885 | [Agapyo](agapyo.md) | [`greenhouse`](ats-greenhouse.md) | 1 | 0 % | 100 % | ✅ |
887 886 | [Agence](agence_carrieres.md) | [`breezy`](ats-breezy.md) | 1 | 100 % | 100 % | ✅ |
887 +| [Air Canada Rouge](acadierouge.md) | [`dayforce`](ats-dayforce.md) | 1 | 100 % | 100 % | ✅ |
888 888 | [Air Traffic Control (ATC)](navcanada.md) | [`workday`](ats-workday.md) | 1 | 0 % | 100 % | ✅ |
889 889 | [Alan Canada](alan.md) | [`ashby`](ats-ashby.md) | 1 | 0 % | 100 % | ✅ |
890 890 | [Aliments Ouimet-Cordon Bleu inc.](cordonbleu.md) | [`bamboohr`](ats-bamboohr.md) | 1 | 100 % | 100 % | ✅ |
@@ -972,7 +972,6 @@ Conformité : voir [`docs/CONFORMITE.md`](../CONFORMITE.md). Chaque offre conser
972 972 | [Nemaska Lithium](nemaska_lithium.md) | [`adp`](ats-adp.md) | 1 | 0 % | 100 % | ✅ |
973 973 | [Next Generation Inc](next_generation_inc.md) | [`breezy`](ats-breezy.md) | 1 | 100 % | 100 % | ✅ |
974 974 | [Nexxus Foods](nexxusfoods.md) | [`smartrecruiters`](ats-smartrecruiters.md) | 1 | 0 % | 100 % | ✅ |
975 −| [Niobec (Magris Performance Materials)](niobec.md) | [`adp`](ats-adp.md) | 1 | 100 % | 100 % | ❌ |
976 975 | [No Saint](no_saint.md) | [`ashby`](ats-ashby.md) | 1 | 0 % | 100 % | ✅ |
977 976 | [Novartis](novartis.md) | [`workday`](ats-workday.md) | 1 | 0 % | 100 % | ❌ |
978 977 | [Nucor Rebar Fabrication (Harris Rebar)](harrisrebar.md) | [`dayforce`](ats-dayforce.md) | 1 | 0 % | 100 % | ✅ |
@@ -1113,6 +1112,7 @@ Conformité : voir [`docs/CONFORMITE.md`](../CONFORMITE.md). Chaque offre conser
1113 1112 | [NATIONAL](national.md) | [`greenhouse`](ats-greenhouse.md) | 0 | — | — | ✅ |
1114 1113 | [New Era Technology](neweratech.md) | [`greenhouse`](ats-greenhouse.md) | 0 | — | — | ✅ |
1115 1114 | [NielsenIQ](nielseniq.md) | [`smartrecruiters`](ats-smartrecruiters.md) | 0 | — | — | ✅ |
1115 +| [Niobec (Magris Performance Materials)](niobec.md) | [`adp`](ats-adp.md) | 0 | — | — | ✅ |
1116 1116 | [Novisto Fr](novistofr.md) | [`greenhouse`](ats-greenhouse.md) | 0 | — | — | ✅ |
1117 1117 | [Ocado Group](ocadogroup.md) | [`greenhouse`](ats-greenhouse.md) | 0 | — | — | ✅ |
1118 1118 | [Ogilvy Canada](ogilvycanada.md) | [`greenhouse`](ats-greenhouse.md) | 0 | — | — | ✅ |
modified docs/connecteurs/ats-adp.md +19 −19
@@ -5,14 +5,14 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/ats-adp.md
7 7 Rôle : Fiche plateforme ATS adp — mécanique partagée + tableau des 17 tenants
8 −Généré : 2026-10-26 17:48 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-10-31 04:03 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
12 12
13 13 # Plateforme ATS `adp`
14 14
15 −**17 employeurs connectés** via cette plateforme — **134 offres actives**. Module partagé : `jobka/connectors/adp.py` ; un employeur = une sous-classe d'environ 10 lignes.
15 +**17 employeurs connectés** via cette plateforme — **132 offres actives**. Module partagé : `jobka/connectors/adp.py` ; un employeur = une sous-classe d'environ 10 lignes.
16 16
17 17 ## Description & mécanique
18 18
@@ -40,23 +40,23 @@ Généré : 2026-10-26 17:48 EDT par scripts/gen_connector_docs.py — NE PAS
40 40
41 41 | Employeur | Actives | Salaire | GPS | Mode | Dernier sync | OK |
42 42 |---|---|---|---|---|---|---|
43 −| [Groupe Nordik (Nordik Spa-Nature)](groupe_nordik.md) | 19 | 21 % | 100 % | 0 % | 2026-10-26 17:28 | ✅ |
44 −| [Uniboard](uniboard.md) | 19 | 32 % | 63 % | 0 % | 2026-10-26 15:44 | ✅ |
45 −| [UV Assurance](uv_assurance.md) | 13 | 0 % | 100 % | 0 % | 2026-10-26 15:45 | ✅ |
46 −| [Strathmore](strathmore.md) | 12 | 42 % | 100 % | 8 % | 2026-10-26 15:39 | ✅ |
47 −| [Quincaillerie Richelieu](richelieu.md) | 12 | 0 % | 100 % | 0 % | 2026-10-26 15:33 | ✅ |
48 −| [Cook It](cookit.md) | 11 | 64 % | 100 % | 0 % | 2026-10-26 17:13 | ✅ |
49 −| [Canadian Royalties](canadian_royalties.md) | 10 | 40 % | 100 % | 0 % | 2026-10-26 17:01 | ✅ |
50 −| [H2O Innovation](h2o_innovation.md) | 9 | 11 % | 100 % | 0 % | 2026-10-26 17:35 | ✅ |
51 −| [Bento Sushi](bento_sushi.md) | 8 | 88 % | 100 % | 0 % | 2026-10-26 16:59 | ✅ |
52 −| [MSI Gestion immobilière](msi_gestion.md) | 6 | 100 % | 100 % | 50 % | 2026-10-26 15:25 | ✅ |
53 −| [Cultures Gen V](cultures_genv.md) | 5 | 20 % | 100 % | 0 % | 2026-10-26 17:13 | ✅ |
54 −| [Abritek](abritek.md) | 5 | 100 % | 100 % | 0 % | 2026-10-26 16:51 | ✅ |
55 −| [Mitsubishi HC Capital Canada](mitsubishi_hc_capital.md) | 1 | 0 % | 100 % | 0 % | 2026-10-26 17:47 | ✅ |
56 −| [Osgoode Properties](osgoode_properties.md) | 1 | 100 % | 100 % | 0 % | 2026-10-26 15:28 | ✅ |
57 −| [Niobec (Magris Performance Materials)](niobec.md) | 1 | 100 % | 100 % | 0 % | 2026-10-26 15:26 | ✅ |
58 −| [Nemaska Lithium](nemaska_lithium.md) | 1 | 0 % | 100 % | 0 % | 2026-10-26 15:26 | ✅ |
59 −| [Triple Boris](triple_boris.md) | 1 | 0 % | 100 % | 0 % | 2026-10-26 15:43 | ✅ |
43 +| [Groupe Nordik (Nordik Spa-Nature)](groupe_nordik.md) | 19 | 26 % | 100 % | 0 % | 2026-10-31 01:39 | ✅ |
44 +| [Uniboard](uniboard.md) | 19 | 32 % | 63 % | 0 % | 2026-10-31 03:19 | ✅ |
45 +| [Quincaillerie Richelieu](richelieu.md) | 17 | 0 % | 71 % | 0 % | 2026-10-31 02:38 | ✅ |
46 +| [UV Assurance](uv_assurance.md) | 14 | 0 % | 100 % | 0 % | 2026-10-31 03:23 | ❌ |
47 +| [Cook It](cookit.md) | 10 | 60 % | 100 % | 0 % | 2026-10-31 01:26 | ✅ |
48 +| [H2O Innovation](h2o_innovation.md) | 9 | 0 % | 100 % | 0 % | 2026-10-31 01:47 | ✅ |
49 +| [Strathmore](strathmore.md) | 9 | 44 % | 100 % | 0 % | 2026-10-31 03:00 | ✅ |
50 +| [Bento Sushi](bento_sushi.md) | 8 | 88 % | 100 % | 0 % | 2026-10-31 03:56 | ✅ |
51 +| [MSI Gestion immobilière](msi_gestion.md) | 6 | 100 % | 100 % | 50 % | 2026-10-31 02:12 | ✅ |
52 +| [Canadian Royalties](canadian_royalties.md) | 6 | 33 % | 100 % | 0 % | 2026-10-31 01:18 | ❌ |
53 +| [Abritek](abritek.md) | 6 | 100 % | 100 % | 0 % | 2026-10-31 03:43 | ✅ |
54 +| [Cultures Gen V](cultures_genv.md) | 5 | 20 % | 100 % | 0 % | 2026-10-31 01:27 | ✅ |
55 +| [Mitsubishi HC Capital Canada](mitsubishi_hc_capital.md) | 1 | 0 % | 100 % | 0 % | 2026-10-31 02:08 | ✅ |
56 +| [Osgoode Properties](osgoode_properties.md) | 1 | 100 % | 100 % | 0 % | 2026-10-31 02:24 | ❌ |
57 +| [Nemaska Lithium](nemaska_lithium.md) | 1 | 0 % | 100 % | 0 % | 2026-10-31 02:15 | ✅ |
58 +| [Triple Boris](triple_boris.md) | 1 | 0 % | 100 % | 0 % | 2026-10-31 03:15 | ✅ |
59 +| [Niobec (Magris Performance Materials)](niobec.md) | 0 | — | — | — | 2026-10-31 04:03 | ✅ |
60 60
61 61 ## Licence / conformité
62 62
modified docs/connecteurs/niobec.md +12 −39
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/niobec.md
7 7 Rôle : Fiche connecteur — Niobec (Magris Performance Materials) (employeur direct, ATS adp)
8 −Généré : 2026-10-14 18:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-10-31 04:03 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -32,40 +32,13 @@ Généré : 2026-10-14 18:40 EDT par scripts/gen_connector_docs.py — NE PAS
32 32 | `CCID` | `19000101_000001` |
33 33 | `CID` | `099e24b7-1868-4283-a5d0-994ec5a80995` |
34 34 | `EMPLOYER` | `Niobec (Magris Performance Materials)` |
35 −| `FORCE_CITY` | `Saint-Honoré` |
36 −| `LANG` | `fr_CA` |
35 +| `LANG` | `en_US` |
37 36 - **Throttle** : 1.0 s entre requêtes.
38 37 - **Filtre Québec** : seuls les postes localisés au Québec sont conservés (facette serveur quand l'ATS en offre une, sinon `is_quebec_location` côté client).
39 38
40 39 ## Champs → schéma
41 40
42 −Complétude mesurée sur les **1 offres actives** de la source (base live, 2026-10-14 18:40 EDT).
43 −
44 −| Champ (`jobs.*`) | Rôle | Complétude |
45 −|---|---|---|
46 −| `title` — Titre | titre du poste | 100 % |
47 −| `employer` — Employeur | nom de l'entreprise | 100 % |
48 −| `url` — URL | lien direct vers l'offre originale | 100 % |
49 −| `description` — Description | texte complet (HTML nettoyé) | 100 % |
50 −| `city` — Ville | municipalité normalisée | 100 % |
51 −| `region` — Région | région administrative | 100 % |
52 −| `address` — Adresse | adresse du lieu de travail | 0 % |
53 −| `postal_code` — Code postal | code postal si publié | 0 % |
54 −| `work_mode` — Mode | presentiel / hybride / teletravail | 0 % |
55 −| `employment_type` — Type | temps_plein / temps_partiel / … | 100 % |
56 −| `salary` — Salaire ($) | bornes numériques normalisées $/h et $/an | 100 % |
57 −| `salary_label` — Libellé salaire | texte salarial original | 0 % |
58 −| `benefits` — Avantages | avantages sociaux publiés (JSON) | 0 % |
59 −| `requirements` — Exigences | scolarité, expérience, langues (JSON) | 100 % |
60 −| `date_posted` — Date de parution | ISO 8601 | 100 % |
61 −| `date_deadline` — Date limite | date limite pour postuler | 0 % |
62 −| `category` — Catégorie | taxonomie interne (TI, Santé, …) | 100 % |
63 −| `language` — Langue | fr / en / bilingue (source ou heuristique) | 100 % |
64 −| `company_logo` — Logo employeur | URL du logo si exposé par la source | 0 % |
65 −| `apply_url` — Candidature | lien de candidature directe | 0 % |
66 −| `gps` — GPS | lat/lng (géocodage sans invention) | 100 % |
67 −
68 −Exemple réel : *Process Engineer/Metallurgist* — Saint-Honoré · ∅ · parue le 2025-10-23.
41 +*Aucune offre active en base pour cette source.*
69 42
70 43 ## Fréquence & budgets
71 44
@@ -80,15 +53,15 @@ Exemple réel : *Process Engineer/Metallurgist* — Saint-Honoré · ∅ · paru
80 53
81 54 ## Volumétrie & complétude live
82 55
83 −*(mesuré le 2026-10-14 18:40 EDT dans `data/jobka.db`)*
56 +*(mesuré le 2026-10-31 04:03 EDT dans `data/jobka.db`)*
84 57
85 −- **Offres en base** : 1 (dont **1 actives**, 0 masquées comme doublons `dup_of`)
86 −- **Salaire** : 1/1 actives (100 %)
87 −- **GPS** : 1/1 actives (100 %)
88 −- **Mode** : 0/1 actives (0 %)
89 −- **Parution** : 1/1 actives (100 %)
90 −- **Dernier sync** : 2026-10-14 15:45 — trouvées 1, +0, ~0, -0
91 −- **Syncs enregistrés** (`sync_log`) : 469
58 +- **Offres en base** : 1 (dont **0 actives**, 0 masquées comme doublons `dup_of`)
59 +- **Salaire** : 0/0 actives (—)
60 +- **GPS** : 0/0 actives (—)
61 +- **Mode** : 0/0 actives (—)
62 +- **Parution** : 0/0 actives (—)
63 +- **Dernier sync** : 2026-10-31 04:03 — trouvées 0, +0, ~0, -0
64 +- **Syncs enregistrés** (`sync_log`) : 616
92 65
93 66 ## Erreurs & dépannage
94 67
@@ -96,7 +69,7 @@ Erreurs relevées dans `sync_log` :
96 69
97 70 | Erreur | Occurrences | Dernière fois |
98 71 |---|---|---|
99 −| 404 Client Error: Not Found for url: https://workforcenow.adp.com/mascsr/default/careercen… | 1 | 2026-10-10 02:00 |
72 +| 404 Client Error: Not Found for url: https://workforcenow.adp.com/mascsr/default/careercen… | 3 | 2026-10-31 02:15 |
100 73 | Expecting value: line 1 column 1 (char 0) | 2 | 2026-08-29 22:52 |
101 74 | ('Connection aborted.', ConnectionResetError(54, 'Connection reset by peer')) | 1 | 2026-08-29 02:25 |
102 75
modified jobka/connectors/niobec.py +80 −5
@@ -3,10 +3,11 @@
3 3 # Auteur : Simon-Pierre Boucher
4 4 # Contact : contact@spboucher.ai
5 5 # Fichier : jobka/connectors/niobec.py
6 −# Rôle : Connecteur Niobec (Magris Performance Materials) — mine de niobium,
7 −# Saint-Honoré (Saguenay) — ADP WFN + repli « détail seulement »
8 −# quand l'API liste échoue (maintenances nocturnes ADP)
9 −# Créé : 2026-08-25 Modifié : 2026-08-30
6 +# Rôle : Connecteur Niobec (Magris Performance Materials) — mine de niobium
7 +# à Saint-Honoré (Saguenay), board ADP WFN corporatif Magris
8 +# multi-sites filtré Québec + repli « détail seulement » quand
9 +# l'API liste échoue (maintenances nocturnes ADP)
10 +# Créé : 2026-08-25 Modifié : 2026-10-31
10 11 # =============================================================================
11 12 """Niobec (Magris Performance Materials) — ADP Workforce Now, avec repli.
12 13
@@ -30,9 +31,49 @@ sorry.adp.com), l'erreur d'origine est propagée pour que le sync reste un
30 31 échec (inventaire préservé). Limite assumée : le repli ne découvre pas les
31 32 NOUVELLES offres — le chemin liste normal reprend seul au cycle suivant la
32 33 fin de la maintenance.
34 +
35 +Chronologie (mission ka6 2026-10-31) : 4e tenant ADP de l'app touché par le
36 +frontal intermittent PAR CID (même panne que bento_sushi 64f53c8f, cookit
37 +7873198d et mitsubishi_hc_capital du 2026-10-26 — pool backend malade côté
38 +ADP, « default backend - 404 » nginx de 150 octets). Vert found=1 en continu
39 +jusqu'à 21:24 EDT le 30/10, puis 404 franc sur la liste à 23:45 et 02:15 ;
40 +le repli « détail seulement » ci-dessus laisse volontairement passer les
41 +4xx, d'où le stale. Sonde live 03:5x : liste ET détail 404 pour CE cid
42 +pendant que nemaska_lithium/abritek/strathmore répondent 200 à la même
43 +minute ; sur 6 essais, 1 seul a abouti (200 JSON, jobRequisitions non vide
44 +avec un NOUVEL itemID 9207369420912_2) — intermittence ~1/6, pas une panne
45 +totale. La page carrières officielle www.magrispm.com/careers référence
46 +toujours ce cid : tenant vivant, aucune migration. Garde-fou répliqué des
47 +trois frères : `_get_json` retente jusqu'à 30 fois (pause 2 s) sur
48 +404/502/503/504/timeout/non-JSON, timeout abaissé 30→15 s pour borner les
49 +connexions qui pendent. Dormant dès que le frontal est sain (1er essai OK =
50 +zéro surcoût) ; un sync vert ne coûte qu'UN appel liste (détails en cache
51 +BD). NE PAS retirer ce garde-fou si un futur scan le croise : il est inerte
52 +hors panne.
53 +
54 +Même mission, 2e découverte — FORCE_CITY était FAUX pour ce tenant : le cid
55 +099e24b7 n'est PAS un board Niobec mono-site mais le board corporatif
56 +MAGRIS (www.magrispm.com/careers y pointe en lang=en_US ; niobec.com
57 +redirige vers magrispm.com/niobec). La culture fr_CA est un angle mort
58 +double : elle ne liste qu'1 réquisition sur 20 ET en omet les
59 +requisitionLocations — l'unique offre fr_CA (9204575399835_1 « Process
60 +Engineer/Metallurgist », circuits de broyage/flottation de TALC = usine de
61 +Timmins) est localisée « Timmins, ON » dans la culture en_US, et était
62 +publiée à tort comme Saint-Honoré QC via FORCE_CITY. Vérifié live
63 +2026-10-31 : board en_US = 20 offres, 19/19 avec locations, toutes
64 +ON/CO/MT/TX/VT, ZÉRO lieu QC. Correctif : LANG='en_US' (culture
65 +sur-ensemble, locations fiables, le filtre Québec de la plateforme tranche
66 +sur le vrai lieu) et FORCE_CITY retiré (sur un board corporatif
67 +multi-sites, forcer une ville invente une donnée). found=0 est désormais le
68 +reflet EXACT de la source — profil « ok=1 found=0 médiane ≤1 » (fiche
69 +stale-volume-zero-faux-positif) : si niobec est re-signalé stale avec le
70 +board en_US sans lieu QC, RIEN À FAIRE, il reverdira seul à la prochaine
71 +embauche québécoise de Magris/Niobec.
33 72 """
34 73 from __future__ import annotations
35 74
75 +import time
76 +
36 77 import requests
37 78
38 79 from ..schema import JobPosting, clean_html
@@ -44,7 +85,41 @@ class NiobecConnector(ADPWorkforceNowConnector):
44 85 EMPLOYER = "Niobec (Magris Performance Materials)"
45 86 CID = "099e24b7-1868-4283-a5d0-994ec5a80995"
46 87 CCID = "19000101_000001"
47 − FORCE_CITY = "Saint-Honoré" # mine mono-site Saint-Honoré (Saguenay) : l'API n'expose aucune localisation
88 + # Board corporatif Magris multi-sites (QC/ON/CO/MT/TX/VT) : la culture
89 + # fr_CA masque 19 réquisitions sur 20 ET leurs locations — en_US est le
90 + # sur-ensemble fiable. PAS de FORCE_CITY : forcer Saint-Honoré publiait
91 + # l'offre talc de Timmins (ON) comme québécoise (voir docstring).
92 + LANG = "en_US"
93 +
94 + # Frontal ADP intermittent pour CE tenant (2026-10-31) : mêmes bornes que
95 + # bento_sushi/cookit/mitsubishi_hc_capital — les 404 échouent vite (<1 s),
96 + # le timeout court borne les connexions qui pendent, et un sync vert ne
97 + # coûte qu'UN appel liste (détails en cache BD).
98 + timeout = 15
99 + _FLAKY_TRIES = 30
100 + _FLAKY_PAUSE = 2.0
101 +
102 + def _get_json(self, url: str, params: dict) -> dict:
103 + last: Exception | None = None
104 + for attempt in range(self._FLAKY_TRIES):
105 + if attempt:
106 + time.sleep(self._FLAKY_PAUSE)
107 + try:
108 + return super()._get_json(url, params)
109 + except requests.HTTPError as exc:
110 + status = getattr(exc.response, "status_code", None)
111 + if status not in (404, 502, 503, 504):
112 + raise
113 + last = exc
114 + except (requests.Timeout, requests.ConnectionError) as exc:
115 + last = exc
116 + except RuntimeError as exc:
117 + # « ADP non-JSON après 3 essais » de la classe de base :
118 + # même frontal malade, même traitement.
119 + if not str(exc).startswith("ADP non-JSON"):
120 + raise
121 + last = exc
122 + raise last
48 123
49 124 def fetch(self) -> list[JobPosting]:
50 125 try:
51 126
Menu

Theme