SPB Git

spb/job-ka

Public

[ka6] fix connecteur bento_sushi: le tenant ADP WFN a cessé d'exposer requisitionLocations (liste+détail, toutes langues) entre 23:35 et 02:00 EDT le 2026-10-23 — le filtre Québec rejetait les 8 offres pourtant toujours publiées (mêmes itemID, frères ADP sains: uniboard 12/12 avec locations → pas systémique). Correctif scoped au connecteur: les réquisitions sans location passent le filtre et la qualification Québec + ville/code postal sont extraites de l'adresse complète que l'employeur publie dans chaque description (« Emplacement Loblaws : 1840 Bd Monseigneur-Langlois, Salaberry-de-Valleyfield, QC J6S 5R1 »), marqueur QC explicite ou code postal G/H/J exclusif au Québec exigé — rien d'inventé, une offre sans marqueur QC est écartée, et le chemin normal reprend tel quel si ADP ré-expose les locations (fallback dormant). Canonicalisation « St Bruno de Montarville » → Saint-Bruno-de-Montarville via region_for_city/canonical_city. Sync isolé rejoué: ok=1 found=8 (= médiane 8.0), 8 offres QC actives avec ville/région/GPS et codes postaux gagnés (avant 0%). 108 tests verts, pm2 restart job-ka-sync OK, site local 200, www.job-ka.com 200. Fiches bento_sushi.md/ats-adp.md/INDEX.md régénérées (1131 autres fiches restaurées, hors périmètre).

Simon-Pierre Boucher committed (Oct 23, 2026) parent 19490bc Browse files

4 changed files +130 −47

modified docs/connecteurs/INDEX.md +24 −24
@@ -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-23 03:52 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-10-23 05:25 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-23 03:52 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-23 05:25 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 −**1104 employeurs directs** connectés via **25 plateformes ATS** + **3 portails agrégateurs** + le canal de **dépôt direct** — **25985 offres actives** (23119 directes, 2866 portails ; 161 masquées comme doublons inter-sources, soit 25824 visibles). 1134 fiches.
17 +**1104 employeurs directs** connectés via **25 plateformes ATS** + **3 portails agrégateurs** + le canal de **dépôt direct** — **25937 offres actives** (23091 directes, 2846 portails ; 162 masquées comme doublons inter-sources, soit 25775 visibles). 1134 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,12 +22,12 @@ 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 | 7505 | 47 % | 87 % |
25 +| [`workday`](ats-workday.md) | 232 | 7479 | 48 % | 87 % |
26 26 | [`smartrecruiters`](ats-smartrecruiters.md) | 172 | 2918 | 16 % | 99 % |
27 27 | [`workable`](ats-workable.md) | 71 | 1999 | 18 % | 100 % |
28 −| [`dayforce`](ats-dayforce.md) | 129 | 1925 | 9 % | 100 % |
29 −| [`successfactors`](ats-successfactors.md) | 12 | 1691 | 17 % | 99 % |
30 −| [`njoyn`](ats-njoyn.md) | 11 | 1255 | 70 % | 87 % |
28 +| [`dayforce`](ats-dayforce.md) | 129 | 1924 | 9 % | 100 % |
29 +| [`successfactors`](ats-successfactors.md) | 12 | 1690 | 17 % | 99 % |
30 +| [`njoyn`](ats-njoyn.md) | 11 | 1254 | 70 % | 87 % |
31 31 | [`workland`](ats-workland.md) | 1 | 1184 | 36 % | 100 % |
32 32 | [`greenhouse`](ats-greenhouse.md) | 132 | 818 | 18 % | 100 % |
33 33 | [`wpjobmanager`](ats-wpjobmanager.md) | 8 | 800 | 6 % | 100 % |
@@ -35,7 +35,7 @@ Conformité : voir [`docs/CONFORMITE.md`](../CONFORMITE.md). Chaque offre conser
35 35 | [`breezy`](ats-breezy.md) | 71 | 426 | 38 % | 95 % |
36 36 | [`recruitee`](ats-recruitee.md) | 30 | 286 | 20 % | 97 % |
37 37 | [`bamboohr`](ats-bamboohr.md) | 37 | 286 | 8 % | 100 % |
38 −| [`ashby`](ats-ashby.md) | 41 | 283 | 53 % | 54 % |
38 +| [`ashby`](ats-ashby.md) | 41 | 284 | 53 % | 54 % |
39 39 | [`taleo_tbe`](ats-taleo_tbe.md) | 7 | 206 | 29 % | 56 % |
40 40 | [`zoho_recruit`](ats-zoho_recruit.md) | 17 | 158 | 15 % | 87 % |
41 41 | [`teamtailor`](ats-teamtailor.md) | 10 | 156 | 29 % | 96 % |
@@ -52,9 +52,9 @@ Conformité : voir [`docs/CONFORMITE.md`](../CONFORMITE.md). Chaque offre conser
52 52
53 53 | Source | Actives | Salaire | Dernier sync |
54 54 |---|---|---|---|
55 −| [Espresso-Jobs](espresso_jobs.md) | 315 | 20 % | 2026-10-23 02:21 |
56 −| [Guichet-Emplois (Canada)](guichet_emplois.md) | 558 | 99 % | 2026-10-23 02:34 |
57 −| [Jobillico](jobillico.md) | 1993 | 37 % | 2026-10-23 02:48 |
55 +| [Espresso-Jobs](espresso_jobs.md) | 314 | 20 % | 2026-10-23 04:37 |
56 +| [Guichet-Emplois (Canada)](guichet_emplois.md) | 502 | 99 % | 2026-10-23 04:58 |
57 +| [Jobillico](jobillico.md) | 2030 | 36 % | 2026-10-23 05:19 |
58 58 | [Dépôt direct employeurs](depot-direct.md) | 0 (0 en modération) | — | au fil de l'eau |
59 59
60 60 ## Employeurs directs (par volume d'offres actives)
@@ -62,15 +62,15 @@ Conformité : voir [`docs/CONFORMITE.md`](../CONFORMITE.md). Chaque offre conser
62 62 | Employeur | ATS | Actives | Salaire | GPS | Dernier sync OK |
63 63 |---|---|---|---|---|---|
64 64 | [Réseau Atlas Workland (~80 employeurs QC : CSS, cégeps, Santé Québec, STQ, UQTR…)](atlas_workland.md) | [`workland`](ats-workland.md) | 1184 | 36 % | 100 % | ✅ |
65 −| [Couche-Tard / Circle K](circlek.md) | [`workday`](ats-workday.md) | 994 | 69 % | 69 % | ✅ |
65 +| [Couche-Tard / Circle K](circlek.md) | [`workday`](ats-workday.md) | 993 | 69 % | 68 % | ✅ |
66 66 | [Solution SFT](solution_sft.md) | [`workable`](ats-workable.md) | 956 | 25 % | 100 % | ✅ |
67 67 | [Bombardier](bombardier.md) | [`successfactors`](ats-successfactors.md) | 953 | 1 % | 100 % | ✅ |
68 68 | [Walmart Canada](walmart.md) | [`workday`](ats-workday.md) | 927 | 98 % | 89 % | ✅ |
69 69 | [Santé Québec — Montréal](sante_montreal.md) | [`njoyn`](ats-njoyn.md) | 818 | 97 % | 98 % | ✅ |
70 70 | [Université McGill](mcgill.md) | [`workday`](ats-workday.md) | 435 | 82 % | 100 % | ✅ |
71 71 | [TEHORA](tehora.md) | [`workable`](ats-workable.md) | 419 | 0 % | 100 % | ✅ |
72 −| [CGI](cgi.md) | [`njoyn`](ats-njoyn.md) | 290 | 0 % | 94 % | ✅ |
73 −| [Mouvement Desjardins](desjardins.md) | [`workday`](ats-workday.md) | 287 | 1 % | 92 % | ✅ |
72 +| [CGI](cgi.md) | [`njoyn`](ats-njoyn.md) | 289 | 0 % | 94 % | ✅ |
73 +| [Mouvement Desjardins](desjardins.md) | [`workday`](ats-workday.md) | 274 | 1 % | 92 % | ✅ |
74 74 | [Slihrms](slihrms.md) | [`workday`](ats-workday.md) | 258 | 11 % | 93 % | ✅ |
75 75 | [CIMA+](cima2.md) | [`smartrecruiters`](ats-smartrecruiters.md) | 255 | 1 % | 100 % | ✅ |
76 76 | [Go RH](gorh.md) | [`lever`](ats-lever.md) | 255 | 17 % | 98 % | ✅ |
@@ -101,8 +101,8 @@ Conformité : voir [`docs/CONFORMITE.md`](../CONFORMITE.md). Chaque offre conser
101 101 | [CISSS de Lanaudière](cisss_lanaudiere.md) | [`wpjobmanager`](ats-wpjobmanager.md) | 98 | 9 % | 100 % | ✅ |
102 102 | [Genetec](genetec_inc.md) | [`workable`](ats-workable.md) | 97 | 0 % | 100 % | ✅ |
103 103 | [Sépaq](sepaq.md) | [`taleo_tbe`](ats-taleo_tbe.md) | 97 | 54 % | 9 % | ✅ |
104 −| [Intact Corporation financière](intactfc.md) | [`workday`](ats-workday.md) | 96 | 0 % | 81 % | ✅ |
105 104 | [BMO Groupe financier](bmo.md) | [`workday`](ats-workday.md) | 95 | 85 % | 79 % | ✅ |
105 +| [Intact Corporation financière](intactfc.md) | [`workday`](ats-workday.md) | 95 | 0 % | 82 % | ✅ |
106 106 | [UAP Inc.](uapinc.md) | [`smartrecruiters`](ats-smartrecruiters.md) | 90 | 43 % | 98 % | ✅ |
107 107 | [HIKINEX](recruiting.md) | [`breezy`](ats-breezy.md) | 89 | 0 % | 100 % | ✅ |
108 108 | [Renaud-Bray](renaud_bray.md) | [`smartrecruiters`](ats-smartrecruiters.md) | 85 | 1 % | 100 % | ✅ |
@@ -113,8 +113,8 @@ Conformité : voir [`docs/CONFORMITE.md`](../CONFORMITE.md). Chaque offre conser
113 113 | [Gflenv](gflenv.md) | [`workday`](ats-workday.md) | 80 | 5 % | 85 % | ✅ |
114 114 | [CAE](cae.md) | [`workday`](ats-workday.md) | 77 | 18 % | 95 % | ✅ |
115 115 | [CISSS de l'Outaouais](cisss_outaouais.md) | [`wpjobmanager`](ats-wpjobmanager.md) | 77 | 29 % | 100 % | ✅ |
116 −| [Gevernova](gevernova.md) | [`workday`](ats-workday.md) | 77 | 21 % | 96 % | ✅ |
117 −| [Banque CIBC](cibc.md) | [`workday`](ats-workday.md) | 74 | 0 % | 100 % | ✅ |
116 +| [Gevernova](gevernova.md) | [`workday`](ats-workday.md) | 73 | 22 % | 96 % | ✅ |
117 +| [Banque CIBC](cibc.md) | [`workday`](ats-workday.md) | 72 | 0 % | 100 % | ✅ |
118 118 | [MaintainX](maintainx.md) | [`ashby`](ats-ashby.md) | 67 | 93 % | 73 % | ✅ |
119 119 | [EMCO](emcocorporation.md) | [`smartrecruiters`](ats-smartrecruiters.md) | 66 | 42 % | 100 % | ✅ |
120 120 | [Norda Stelo](nordastelo.md) | [`teamtailor`](ats-teamtailor.md) | 65 | 0 % | 97 % | ✅ |
@@ -147,11 +147,11 @@ Conformité : voir [`docs/CONFORMITE.md`](../CONFORMITE.md). Chaque offre conser
147 147 | [Firststudent](firststudent.md) | [`workday`](ats-workday.md) | 46 | 37 % | 96 % | ✅ |
148 148 | [SOGECLAIR](sogeclair.md) | [`workable`](ats-workable.md) | 46 | 2 % | 100 % | ✅ |
149 149 | [Techo-Bloc](techo_bloc.md) | [`smartrecruiters`](ats-smartrecruiters.md) | 46 | 39 % | 100 % | ✅ |
150 −| [Hydro-Québec](hydroquebec.md) | [`successfactors`](ats-successfactors.md) | 45 | 18 % | 71 % | ✅ |
151 150 | [Laura Canada](lauracanada.md) | [`dayforce`](ats-dayforce.md) | 45 | 0 % | 100 % | ✅ |
152 151 | [Saputo](saputo.md) | [`workday`](ats-workday.md) | 45 | 82 % | 100 % | ✅ |
153 152 | [Unoria](unoria.md) | [`dayforce`](ats-dayforce.md) | 45 | 0 % | 100 % | ✅ |
154 153 | [Alterra](alterra.md) | [`workday`](ats-workday.md) | 44 | 66 % | 100 % | ✅ |
154 +| [Hydro-Québec](hydroquebec.md) | [`successfactors`](ats-successfactors.md) | 44 | 18 % | 70 % | ✅ |
155 155 | [La Maison Simons](simons.md) | [`workday`](ats-workday.md) | 44 | 0 % | 89 % | ✅ |
156 156 | [Levio](levio.md) | [`greenhouse`](ats-greenhouse.md) | 44 | 0 % | 100 % | ✅ |
157 157 | [Bdo](bdo.md) | [`workday`](ats-workday.md) | 43 | 7 % | 70 % | ✅ |
@@ -177,10 +177,10 @@ Conformité : voir [`docs/CONFORMITE.md`](../CONFORMITE.md). Chaque offre conser
177 177 | [Rio Tinto](riotinto.md) | [`workday`](ats-workday.md) | 37 | 0 % | 97 % | ✅ |
178 178 | [Coveo](coveofr.md) | [`greenhouse`](ats-greenhouse.md) | 36 | 0 % | 100 % | ✅ |
179 179 | [Domtar](domtar.md) | [`successfactors`](ats-successfactors.md) | 36 | 11 % | 100 % | ✅ |
180 −| [Imperial Brady Canada](imperialdade.md) | [`dayforce`](ats-dayforce.md) | 36 | 0 % | 100 % | ✅ |
181 180 | [KABS](kabs.md) | [`smartrecruiters`](ats-smartrecruiters.md) | 36 | 0 % | 100 % | ✅ |
182 181 | [QSL](qsl.md) | [`smartrecruiters`](ats-smartrecruiters.md) | 36 | 25 % | 100 % | ✅ |
183 182 | [Uhaul](uhaul.md) | [`workday`](ats-workday.md) | 36 | 0 % | 100 % | ✅ |
183 +| [Imperial Brady Canada](imperialdade.md) | [`dayforce`](ats-dayforce.md) | 35 | 0 % | 100 % | ✅ |
184 184 | [Montreal Export Package Handler (18:00-23:00)](hcmportal.md) | [`workday`](ats-workday.md) | 35 | 83 % | 100 % | ✅ |
185 185 | [CDPQ — Caisse de dépôt et placement du Québec](cdpq.md) | [`workday`](ats-workday.md) | 34 | 0 % | 100 % | ✅ |
186 186 | [OPENLANE Canada](openlane.md) | [`workday`](ats-workday.md) | 34 | 24 % | 88 % | ✅ |
@@ -189,11 +189,11 @@ Conformité : voir [`docs/CONFORMITE.md`](../CONFORMITE.md). Chaque offre conser
189 189 | [Rodeo FX](rodeofx.md) | [`smartrecruiters`](ats-smartrecruiters.md) | 33 | 0 % | 94 % | ✅ |
190 190 | [Abinbev](abinbev.md) | [`workday`](ats-workday.md) | 32 | 100 % | 100 % | ✅ |
191 191 | [AppDirect](appdirect.md) | [`greenhouse`](ats-greenhouse.md) | 32 | 31 % | 100 % | ✅ |
192 −| [Cineplex](cineplex.md) | [`workday`](ats-workday.md) | 32 | 0 % | 53 % | ✅ |
193 192 | [Coveo](coveoen.md) | [`greenhouse`](ats-greenhouse.md) | 32 | 0 % | 100 % | ✅ |
194 193 | [EXFO](exfo.md) | [`workday`](ats-workday.md) | 32 | 0 % | 100 % | ✅ |
195 194 | [Onepoint (nventive / Logient)](onepoint.md) | [`workday`](ats-workday.md) | 32 | 0 % | 100 % | ✅ |
196 195 | [AccorHotel](accorhotel.md) | [`smartrecruiters`](ats-smartrecruiters.md) | 31 | 61 % | 100 % | ✅ |
196 +| [Cineplex](cineplex.md) | [`workday`](ats-workday.md) | 31 | 0 % | 52 % | ✅ |
197 197 | [Le Massif de Charlevoix](lemassif.md) | [`dayforce`](ats-dayforce.md) | 31 | 0 % | 100 % | ✅ |
198 198 | [LG2](lg2.md) | [`recruitee`](ats-recruitee.md) | 31 | 3 % | 100 % | ✅ |
199 199 | [Tecsys](tecsys.md) | [`workable`](ats-workable.md) | 31 | 0 % | 100 % | ✅ |
@@ -333,7 +333,6 @@ Conformité : voir [`docs/CONFORMITE.md`](../CONFORMITE.md). Chaque offre conser
333 333 | [Comptable de projet / Project Accountant](ellisdon.md) | [`workday`](ats-workday.md) | 14 | 14 % | 93 % | ✅ |
334 334 | [dentago](dentago.md) | [`zoho_recruit`](ats-zoho_recruit.md) | 14 | 7 % | 64 % | ✅ |
335 335 | [Défis RH](defisrh.md) | [`zoho_recruit`](ats-zoho_recruit.md) | 14 | 50 % | 100 % | ✅ |
336 −| [Fccfac](fccfac.md) | [`workday`](ats-workday.md) | 14 | 93 % | 50 % | ✅ |
337 336 | [GSK](gsk.md) | [`workday`](ats-workday.md) | 14 | 7 % | 100 % | ✅ |
338 337 | [Nutreco](nutreco.md) | [`workday`](ats-workday.md) | 14 | 7 % | 100 % | ✅ |
339 338 | [OSEDEA](osedea.md) | [`lever`](ats-lever.md) | 14 | 0 % | 100 % | ✅ |
@@ -350,6 +349,7 @@ Conformité : voir [`docs/CONFORMITE.md`](../CONFORMITE.md). Chaque offre conser
350 349 | [Egon Zehnder](ezrecruiting.md) | [`workable`](ats-workable.md) | 13 | 8 % | 100 % | ✅ |
351 350 | [Epic Games](epicgames.md) | [`greenhouse`](ats-greenhouse.md) | 13 | 0 % | 100 % | ✅ |
352 351 | [Explorance](explorance.md) | [`bamboohr`](ats-bamboohr.md) | 13 | 0 % | 100 % | ✅ |
352 +| [Fccfac](fccfac.md) | [`workday`](ats-workday.md) | 13 | 92 % | 46 % | ✅ |
353 353 | [Gameloft](gameloft.md) | [`smartrecruiters`](ats-smartrecruiters.md) | 13 | 0 % | 100 % | ✅ |
354 354 | [Groupe AGF](groupeagf.md) | [`dayforce`](ats-dayforce.md) | 13 | 38 % | 100 % | ✅ |
355 355 | [Intervenant·e au suivi psychosocial](obm.md) | [`dayforce`](ats-dayforce.md) | 13 | 15 % | 100 % | ✅ |
@@ -371,7 +371,6 @@ Conformité : voir [`docs/CONFORMITE.md`](../CONFORMITE.md). Chaque offre conser
371 371 | [Avantage Plus](avantageplus.md) | [`recruitee`](ats-recruitee.md) | 12 | 17 % | 100 % | ✅ |
372 372 | [Botpress](botpress.md) | [`workable`](ats-workable.md) | 12 | 0 % | 100 % | ✅ |
373 373 | [Brasseries Sleeman (Unibroue)](sleeman.md) | [`workday`](ats-workday.md) | 12 | 8 % | 92 % | ✅ |
374 −| [Cisco](cisco.md) | [`workday`](ats-workday.md) | 12 | 100 % | 33 % | ✅ |
375 374 | [Evolving Web](evolving_web.md) | [`workable`](ats-workable.md) | 12 | 0 % | 100 % | ✅ |
376 375 | [Groupe Master](groupe_master.md) | [`njoyn`](ats-njoyn.md) | 12 | 75 % | 100 % | ✅ |
377 376 | [Groupe Montoni](groupemontoni.md) | [`smartrecruiters`](ats-smartrecruiters.md) | 12 | 0 % | 100 % | ✅ |
@@ -389,6 +388,7 @@ Conformité : voir [`docs/CONFORMITE.md`](../CONFORMITE.md). Chaque offre conser
389 388 | [AlayaCare](alayacare.md) | [`greenhouse`](ats-greenhouse.md) | 11 | 0 % | 100 % | ✅ |
390 389 | [Bayshore HealthCare](bayshore.md) | [`taleo`](ats-taleo.md) | 11 | 0 % | 100 % | ✅ |
391 390 | [CEP Forensique](cep.md) | [`dayforce`](ats-dayforce.md) | 11 | 0 % | 100 % | ✅ |
391 +| [Cisco](cisco.md) | [`workday`](ats-workday.md) | 11 | 100 % | 27 % | ✅ |
392 392 | [Colabor](colabor.md) | [`dayforce`](ats-dayforce.md) | 11 | 9 % | 100 % | ✅ |
393 393 | [Cook It](cookit.md) | [`adp`](ats-adp.md) | 11 | 64 % | 100 % | ✅ |
394 394 | [EOS Aircraft](eosaircraftinc.md) | [`bamboohr`](ats-bamboohr.md) | 11 | 0 % | 100 % | ✅ |
@@ -484,7 +484,6 @@ Conformité : voir [`docs/CONFORMITE.md`](../CONFORMITE.md). Chaque offre conser
484 484 | [CAM Mécanique](cammecanique.md) | [`teamtailor`](ats-teamtailor.md) | 8 | 0 % | 100 % | ✅ |
485 485 | [Canadian Helicopters](canadianhelicopters.md) | [`smartrecruiters`](ats-smartrecruiters.md) | 8 | 0 % | 100 % | ✅ |
486 486 | [CF Montréal](cfmontreal.md) | [`smartrecruiters`](ats-smartrecruiters.md) | 8 | 0 % | 75 % | ✅ |
487 −| [Chef de secteur](gsknch.md) | [`workday`](ats-workday.md) | 8 | 0 % | 100 % | ✅ |
488 487 | [Cloud Chamber Montréal](cloudchamberfr.md) | [`greenhouse`](ats-greenhouse.md) | 8 | 0 % | 100 % | ✅ |
489 488 | [Coordinateur, Achats Numériques](dentsuaegis.md) | [`workday`](ats-workday.md) | 8 | 88 % | 88 % | ✅ |
490 489 | [DRW](drweng.md) | [`greenhouse`](ats-greenhouse.md) | 8 | 0 % | 100 % | ✅ |
@@ -561,6 +560,7 @@ Conformité : voir [`docs/CONFORMITE.md`](../CONFORMITE.md). Chaque offre conser
561 560 | [Carnaval de Québec Inc.](carnaval.md) | [`zoho_recruit`](ats-zoho_recruit.md) | 6 | 0 % | 100 % | ✅ |
562 561 | [Carrier](carrier.md) | [`workday`](ats-workday.md) | 6 | 83 % | 50 % | ✅ |
563 562 | [Chef d'équipe Agile](aspentech.md) | [`workday`](ats-workday.md) | 6 | 0 % | 100 % | ✅ |
563 +| [Chef de secteur](gsknch.md) | [`workday`](ats-workday.md) | 6 | 0 % | 100 % | ✅ |
564 564 | [Church & Dwight Canada](churchdwight.md) | [`workday`](ats-workday.md) | 6 | 0 % | 100 % | ✅ |
565 565 | [Clyde & Co](clydeco.md) | [`workday`](ats-workday.md) | 6 | 0 % | 100 % | ✅ |
566 566 | [Conseil de gestion financière des Premières Nations (FNFMB)](fnfmb.md) | [`dayforce`](ats-dayforce.md) | 6 | 0 % | 100 % | ✅ |
@@ -750,6 +750,7 @@ Conformité : voir [`docs/CONFORMITE.md`](../CONFORMITE.md). Chaque offre conser
750 750 | [Haven Interactive Studios - English](havenenglish.md) | [`greenhouse`](ats-greenhouse.md) | 3 | 0 % | 100 % | ✅ |
751 751 | [Homepage](quanteo.md) | [`recruitee`](ats-recruitee.md) | 3 | 67 % | 100 % | ✅ |
752 752 | [Hopper](hopper.md) | [`ashby`](ats-ashby.md) | 3 | 33 % | 67 % | ✅ |
753 +| [inBeat Agency](inbeat_agency.md) | [`ashby`](ats-ashby.md) | 3 | 0 % | 0 % | ✅ |
753 754 | [Intersand](intersand.md) | [`smartrecruiters`](ats-smartrecruiters.md) | 3 | 0 % | 100 % | ✅ |
754 755 | [Keyrus](keyrus2.md) | [`smartrecruiters`](ats-smartrecruiters.md) | 3 | 0 % | 100 % | ✅ |
755 756 | [LE CAFÉ DES ARTISTES](lecafdesartistes.md) | [`smartrecruiters`](ats-smartrecruiters.md) | 3 | 0 % | 100 % | ✅ |
@@ -827,7 +828,6 @@ Conformité : voir [`docs/CONFORMITE.md`](../CONFORMITE.md). Chaque offre conser
827 828 | [Groupe BC2](bc2.md) | [`bamboohr`](ats-bamboohr.md) | 2 | 0 % | 100 % | ✅ |
828 829 | [Groupe Unigesco](groupe_unigesco.md) | [`breezy`](ats-breezy.md) | 2 | 100 % | 100 % | ✅ |
829 830 | [HP](hp.md) | [`workday`](ats-workday.md) | 2 | 100 % | 100 % | ✅ |
830 −| [inBeat Agency](inbeat_agency.md) | [`ashby`](ats-ashby.md) | 2 | 0 % | 0 % | ✅ |
831 831 | [Jj](jj.md) | [`workday`](ats-workday.md) | 2 | 100 % | 50 % | ✅ |
832 832 | [Kiongroup](kiongroup.md) | [`workday`](ats-workday.md) | 2 | 50 % | 50 % | ✅ |
833 833 | [Kodify Media Group](kodify.md) | [`recruitee`](ats-recruitee.md) | 2 | 0 % | 100 % | ✅ |
modified docs/connecteurs/ats-adp.md +8 −8
@@ -5,7 +5,7 @@ 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-23 03:52 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-10-23 05:25 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -40,18 +40,18 @@ Généré : 2026-10-23 03:52 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 | 26 % | 100 % | 0 % | 2026-10-23 02:27 | ✅ |
43 +| [Groupe Nordik (Nordik Spa-Nature)](groupe_nordik.md) | 19 | 26 % | 100 % | 0 % | 2026-10-23 04:51 | ✅ |
44 44 | [Uniboard](uniboard.md) | 19 | 32 % | 63 % | 0 % | 2026-10-23 03:37 | ✅ |
45 45 | [UV Assurance](uv_assurance.md) | 12 | 0 % | 100 % | 0 % | 2026-10-23 03:52 | ✅ |
46 46 | [Strathmore](strathmore.md) | 11 | 45 % | 100 % | 9 % | 2026-10-23 03:15 | ✅ |
47 47 | [Quincaillerie Richelieu](richelieu.md) | 11 | 0 % | 100 % | 0 % | 2026-10-23 03:04 | ✅ |
48 −| [Cook It](cookit.md) | 11 | 64 % | 100 % | 0 % | 2026-10-23 02:14 | ✅ |
49 −| [Canadian Royalties](canadian_royalties.md) | 10 | 40 % | 100 % | 0 % | 2026-10-23 03:52 | ✅ |
50 −| [H2O Innovation](h2o_innovation.md) | 10 | 10 % | 100 % | 0 % | 2026-10-23 02:35 | ✅ |
51 −| [Bento Sushi](bento_sushi.md) | 8 | 88 % | 100 % | 0 % | 2026-10-23 03:45 | ✅ |
48 +| [Cook It](cookit.md) | 11 | 64 % | 100 % | 0 % | 2026-10-23 04:26 | ✅ |
49 +| [Canadian Royalties](canadian_royalties.md) | 10 | 40 % | 100 % | 0 % | 2026-10-23 04:03 | ✅ |
50 +| [H2O Innovation](h2o_innovation.md) | 10 | 10 % | 100 % | 0 % | 2026-10-23 04:58 | ✅ |
51 +| [Bento Sushi](bento_sushi.md) | 8 | 88 % | 100 % | 0 % | 2026-10-23 05:25 | ✅ |
52 52 | [MSI Gestion immobilière](msi_gestion.md) | 6 | 100 % | 100 % | 50 % | 2026-10-23 02:55 | ✅ |
53 −| [Cultures Gen V](cultures_genv.md) | 5 | 20 % | 100 % | 0 % | 2026-10-23 02:15 | ✅ |
54 −| [Abritek](abritek.md) | 5 | 100 % | 100 % | 0 % | 2026-10-23 03:38 | ✅ |
53 +| [Cultures Gen V](cultures_genv.md) | 5 | 20 % | 100 % | 0 % | 2026-10-23 04:26 | ✅ |
54 +| [Abritek](abritek.md) | 5 | 100 % | 100 % | 0 % | 2026-10-23 03:53 | ✅ |
55 55 | [Mitsubishi HC Capital Canada](mitsubishi_hc_capital.md) | 1 | 0 % | 100 % | 0 % | 2026-10-23 02:54 | ✅ |
56 56 | [Osgoode Properties](osgoode_properties.md) | 1 | 100 % | 100 % | 0 % | 2026-10-23 02:57 | ✅ |
57 57 | [Niobec (Magris Performance Materials)](niobec.md) | 1 | 100 % | 100 % | 0 % | 2026-10-23 02:56 | ✅ |
modified docs/connecteurs/bento_sushi.md +14 −14
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/bento_sushi.md
7 7 Rôle : Fiche connecteur — Bento Sushi (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-23 05:25 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -38,7 +38,7 @@ Généré : 2026-10-14 18:40 EDT par scripts/gen_connector_docs.py — NE PAS
38 38
39 39 ## Champs → schéma
40 40
41 −Complétude mesurée sur les **10 offres actives** de la source (base live, 2026-10-14 18:40 EDT).
41 +Complétude mesurée sur les **8 offres actives** de la source (base live, 2026-10-23 05:25 EDT).
42 42
43 43 | Champ (`jobs.*`) | Rôle | Complétude |
44 44 |---|---|---|
@@ -52,19 +52,19 @@ Complétude mesurée sur les **10 offres actives** de la source (base live, 2026
52 52 | `postal_code` — Code postal | code postal si publié | 100 % |
53 53 | `work_mode` — Mode | presentiel / hybride / teletravail | 0 % |
54 54 | `employment_type` — Type | temps_plein / temps_partiel / … | 100 % |
55 −| `salary` — Salaire ($) | bornes numériques normalisées $/h et $/an | 90 % |
56 −| `salary_label` — Libellé salaire | texte salarial original | 30 % |
55 +| `salary` — Salaire ($) | bornes numériques normalisées $/h et $/an | 88 % |
56 +| `salary_label` — Libellé salaire | texte salarial original | 12 % |
57 57 | `benefits` — Avantages | avantages sociaux publiés (JSON) | 0 % |
58 58 | `requirements` — Exigences | scolarité, expérience, langues (JSON) | 100 % |
59 59 | `date_posted` — Date de parution | ISO 8601 | 100 % |
60 60 | `date_deadline` — Date limite | date limite pour postuler | 0 % |
61 −| `category` — Catégorie | taxonomie interne (TI, Santé, …) | 10 % |
61 +| `category` — Catégorie | taxonomie interne (TI, Santé, …) | 12 % |
62 62 | `language` — Langue | fr / en / bilingue (source ou heuristique) | 100 % |
63 63 | `company_logo` — Logo employeur | URL du logo si exposé par la source | 0 % |
64 64 | `apply_url` — Candidature | lien de candidature directe | 0 % |
65 65 | `gps` — GPS | lat/lng (géocodage sans invention) | 100 % |
66 66
67 −Exemple réel : *Membres de l'équipe de service alimentaire* — Sherbrooke · Poste à temps partiel, entrée en fonction immédiate, à partir de 17,00 $/h · parue le 2026-09-22.
67 +Exemple réel : *Membres de l'équipe de service alimentaire* — Salaberry-de-Valleyfield · Temps partiel commencent immédiatement à 17,50 $ /heure · parue le 2026-10-21.
68 68
69 69 ## Fréquence & budgets
70 70
@@ -79,15 +79,15 @@ Exemple réel : *Membres de l'équipe de service alimentaire* — Sherbrooke ·
79 79
80 80 ## Volumétrie & complétude live
81 81
82 −*(mesuré le 2026-10-14 18:40 EDT dans `data/jobka.db`)*
82 +*(mesuré le 2026-10-23 05:25 EDT dans `data/jobka.db`)*
83 83
84 −- **Offres en base** : 15 (dont **10 actives**, 0 masquées comme doublons `dup_of`)
85 −- **Salaire** : 9/10 actives (90 %)
86 −- **GPS** : 10/10 actives (100 %)
87 −- **Mode** : 0/10 actives (0 %)
88 −- **Parution** : 10/10 actives (100 %)
89 −- **Dernier sync** : 2026-10-14 18:13 — trouvées 10, +0, ~0, -0
90 −- **Syncs enregistrés** (`sync_log`) : 640
84 +- **Offres en base** : 16 (dont **8 actives**, 0 masquées comme doublons `dup_of`)
85 +- **Salaire** : 7/8 actives (88 %)
86 +- **GPS** : 8/8 actives (100 %)
87 +- **Mode** : 0/8 actives (0 %)
88 +- **Parution** : 8/8 actives (100 %)
89 +- **Dernier sync** : 2026-10-23 05:25 — trouvées 8, +0, ~1, -0
90 +- **Syncs enregistrés** (`sync_log`) : 761
91 91
92 92 ## Erreurs & dépannage
93 93
modified jobka/connectors/bento_sushi.py +84 −1
@@ -5,13 +5,96 @@
5 5 # Fichier : jobka/connectors/bento_sushi.py
6 6 # Rôle : Connecteur Bento Sushi (comptoirs et cuisines — postes QC)
7 7 # — ADP Workforce Now
8 −# Créé : 2026-08-19 Modifié : 2026-08-19
8 +# Créé : 2026-08-19 Modifié : 2026-10-23
9 9 # =============================================================================
10 +"""Bento Sushi — tenant ADP WFN d0dfb14c (babillard fr_CA = postes Québec).
11 +
12 +Chronologie (mission ka6 2026-10-23) : entre le sync vert de 23:35 EDT
13 +(found=8) et celui de 02:00 EDT (found=0), le tenant a CESSÉ d'exposer
14 +`requisitionLocations` dans l'API publique — liste ET détail, toutes
15 +langues (fr_CA 8 offres, en_CA 25, zéro location partout), alors que les
16 +tenants frères (uniboard 12/12…) restent normaux. Les 8 offres QC sont
17 +toujours publiées (mêmes itemID) et l'employeur publie l'ADRESSE COMPLÈTE
18 +du lieu dans chaque description (« Emplacement Loblaws : 1840 Bd
19 +Monseigneur-Langlois, Salaberry-de-Valleyfield, QC J6S 5R1 | … »).
20 +
21 +Adaptation : quand une réquisition n'a aucune location (sinon le filtre
22 +Québec de la plateforme rejetterait tout), on la garde puis on tranche sur
23 +la description — province « QC » explicite ou code postal G/H/J (préfixes
24 +exclusifs au Québec). Ville et code postal sont extraits de cette adresse
25 +publiée par l'employeur : rien n'est inventé, et une offre sans marqueur
26 +québécois dans sa description est écartée. Si ADP ré-expose les locations,
27 +le chemin normal de la plateforme reprend tel quel (fallback dormant).
28 +"""
29 +from __future__ import annotations
30 +
31 +import re
32 +
33 +from ..normalize import canonical_city
34 +from ..regions import region_for_city
35 +from ..schema import JobPosting
10 36 from .adp import ADPWorkforceNowConnector
11 37
38 +# « …, Salaberry-de-Valleyfield, QC J6S 5R1 » — ville, province facultative,
39 +# code postal QUÉBÉCOIS (G/H/J) obligatoire.
40 +_RX_CITY_POSTAL = re.compile(
41 + r",\s*([A-ZÀ-ÿ][A-Za-zÀ-ÿ'’.\- ]{1,50}?)\s*,?\s*"
42 + r"(?:\(?(?:QC|Qu[ée]bec)\)?\s*,?\s*)?"
43 + r"([GHJ]\d[A-Z]\s?\d[A-Z]\d)\b")
44 +# Repli : « …, Magog, QC » sans code postal.
45 +_RX_CITY_QC = re.compile(
46 + r",\s*([A-ZÀ-ÿ][A-Za-zÀ-ÿ'’.\- ]{1,50}?)\s*,\s*(?:QC|Qu[ée]bec)\b")
47 +
12 48
13 49 class BentoSushiConnector(ADPWorkforceNowConnector):
14 50 source_id = "bento_sushi"
15 51 EMPLOYER = "Bento Sushi"
16 52 CID = "d0dfb14c-f365-4599-b39b-0fdccb3d1160"
17 53 CCID = "19000101_000001"
54 +
55 + def _keep(self, locations: list[dict]) -> bool:
56 + # Sans location, impossible de trancher ici : on laisse passer et
57 + # fetch() tranchera sur l'adresse publiée dans la description.
58 + if not locations:
59 + return True
60 + return super()._keep(locations)
61 +
62 + @staticmethod
63 + def _canon_city(city: str) -> str:
64 + # « St Bruno de Montarville » (adresse en abrégé, espaces) →
65 + # « Saint-Bruno-de-Montarville » : variante tentée seulement si la
66 + # forme extraite n'est pas une municipalité connue.
67 + if region_for_city(city):
68 + return city
69 + alt = re.sub(r"^Ste\b\.?", "Sainte",
70 + re.sub(r"^St\b\.?", "Saint", city)).replace(" ", "-")
71 + if region_for_city(alt):
72 + return canonical_city(alt)
73 + return city
74 +
75 + @classmethod
76 + def _city_from_description(cls, text: str) -> tuple[str, str] | None:
77 + """(ville, code postal) depuis l'adresse publiée, sinon None."""
78 + m = _RX_CITY_POSTAL.search(text or "")
79 + if m:
80 + return cls._canon_city(m.group(1).strip()), m.group(2).strip()
81 + m = _RX_CITY_QC.search(text or "")
82 + if m:
83 + return cls._canon_city(m.group(1).strip()), ""
84 + return None
85 +
86 + def fetch(self) -> list[JobPosting]:
87 + jobs = super().fetch()
88 + kept: list[JobPosting] = []
89 + for job in jobs:
90 + if job.city: # location ADP normale : intact
91 + kept.append(job)
92 + continue
93 + found = self._city_from_description(job.description)
94 + if not found: # pas de marqueur QC : écartée
95 + continue
96 + job.city, postal = found
97 + if postal and not job.postal_code:
98 + job.postal_code = postal
99 + kept.append(job)
100 + return kept
18 101
Menu

Theme