SPB Git

spb/job-ka

Public

[ka6] fix connecteur nemaska_lithium: frontal ADP intermittent PAR CID (8e cas, garde-fou retry borné répliqué) — stale causé par le 404 nocturne du 30/10 23:45 (épisode multi-tenants 23:45→04:42) suivi d'un nouveau 404 isolé à 12:29 ; sonde live 2/6 essais 200 totalNumber=1 + 4 « default backend - 404 » de 21 octets = intermittence, tenant vivant ; garde-fou _get_json (30 essais, pause 2 s, timeout 15 s) répliqué de bento_sushi/cookit/mitsubishi_hc_capital/niobec/osgoode_properties/uv_assurance/strathmore, complémentaire du repli « détail seulement » existant ; sync isolé vert found=1 (= médiane 1.0) en 2,5 s, 108 tests pytest verts, fiches nemaska_lithium.md/ats-adp.md/INDEX.md régénérées, 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 b6b8f9f Browse files

4 changed files +97 −43

modified docs/connecteurs/INDEX.md +17 −17
@@ -5,16 +5,16 @@ Auteur : Simon-Pierre Boucher
5 Contact : contact@spboucher.ai 5 Contact : contact@spboucher.ai
6 Fichier : docs/connecteurs/INDEX.md 6 Fichier : docs/connecteurs/INDEX.md
7 Rôle : Index généré de la documentation des connecteurs (ATS, employeurs, portails, dépôt) 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 11:33 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER, 8+Généré : 2026-10-31 13:33 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 relancer le script pour régénérer. 9 relancer le script pour régénérer.
10 ============================================================================= 10 =============================================================================
11 --> 11 -->
12 12
13 # Job·Ka — Connecteurs (index) 13 # Job·Ka — Connecteurs (index)
14 14
15−> Index généré le 2026-10-31 11:33 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 13:33 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** — **25246 offres actives** (22725 directes, 2521 portails ; 108 masquées comme doublons inter-sources, soit 25138 visibles). 1135 fiches. 17+**1103 employeurs directs** connectés via **27 plateformes ATS** + **3 portails agrégateurs** + le canal de **dépôt direct** — **25366 offres actives** (22732 directes, 2634 portails ; 111 masquées comme doublons inter-sources, soit 25255 visibles). 1135 fiches.
18 18
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). 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 | Plateforme | Employeurs | Actives | Salaire | GPS | 23 | Plateforme | Employeurs | Actives | Salaire | GPS |
24 |---|---|---|---|---| 24 |---|---|---|---|---|
25−| [`workday`](ats-workday.md) | 232 | 7340 | 47 % | 88 % | 25+| [`workday`](ats-workday.md) | 232 | 7347 | 47 % | 88 % |
26 | [`smartrecruiters`](ats-smartrecruiters.md) | 171 | 2894 | 16 % | 99 % | 26 | [`smartrecruiters`](ats-smartrecruiters.md) | 171 | 2894 | 16 % | 99 % |
27−| [`workable`](ats-workable.md) | 71 | 1994 | 17 % | 100 % | 27+| [`workable`](ats-workable.md) | 71 | 1993 | 17 % | 100 % |
28−| [`dayforce`](ats-dayforce.md) | 129 | 1897 | 10 % | 100 % | 28+| [`dayforce`](ats-dayforce.md) | 129 | 1899 | 10 % | 100 % |
29 | [`successfactors`](ats-successfactors.md) | 12 | 1639 | 19 % | 99 % | 29 | [`successfactors`](ats-successfactors.md) | 12 | 1639 | 19 % | 99 % |
30 | [`njoyn`](ats-njoyn.md) | 11 | 1265 | 69 % | 87 % | 30 | [`njoyn`](ats-njoyn.md) | 11 | 1265 | 69 % | 87 % |
31−| [`workland`](ats-workland.md) | 1 | 1107 | 37 % | 100 % | 31+| [`workland`](ats-workland.md) | 1 | 1106 | 37 % | 100 % |
32 | [`wpjobmanager`](ats-wpjobmanager.md) | 8 | 805 | 6 % | 100 % | 32 | [`wpjobmanager`](ats-wpjobmanager.md) | 8 | 805 | 6 % | 100 % |
33 | [`greenhouse`](ats-greenhouse.md) | 132 | 792 | 19 % | 100 % | 33 | [`greenhouse`](ats-greenhouse.md) | 132 | 792 | 19 % | 100 % |
34 | [`lever`](ats-lever.md) | 58 | 622 | 20 % | 95 % | 34 | [`lever`](ats-lever.md) | 58 | 622 | 20 % | 95 % |
@@ -54,20 +54,20 @@ Conformité : voir [`docs/CONFORMITE.md`](../CONFORMITE.md). Chaque offre conser
54 54
55 | Source | Actives | Salaire | Dernier sync | 55 | Source | Actives | Salaire | Dernier sync |
56 |---|---|---|---| 56 |---|---|---|---|
57−| [Espresso-Jobs](espresso_jobs.md) | 157 | 22 % | 2026-10-31 11:12 | 57+| [Espresso-Jobs](espresso_jobs.md) | 157 | 22 % | 2026-10-31 11:59 |
58−| [Guichet-Emplois (Canada)](guichet_emplois.md) | 532 | 100 % | 2026-10-31 11:23 | 58+| [Guichet-Emplois (Canada)](guichet_emplois.md) | 501 | 100 % | 2026-10-31 12:08 |
59−| [Jobillico](jobillico.md) | 1832 | 35 % | 2026-10-31 09:08 | 59+| [Jobillico](jobillico.md) | 1976 | 34 % | 2026-10-31 12:21 |
60 | [Dépôt direct employeurs](depot-direct.md) | 0 (0 en modération) | — | au fil de l'eau | 60 | [Dépôt direct employeurs](depot-direct.md) | 0 (0 en modération) | — | au fil de l'eau |
61 61
62 ## Employeurs directs (par volume d'offres actives) 62 ## Employeurs directs (par volume d'offres actives)
63 63
64 | Employeur | ATS | Actives | Salaire | GPS | Dernier sync OK | 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) | 1107 | 37 % | 100 % | ✅ | 66+| [Réseau Atlas Workland (~80 employeurs QC : CSS, cégeps, Santé Québec, STQ, UQTR…)](atlas_workland.md) | [`workland`](ats-workland.md) | 1106 | 37 % | 100 % | ✅ |
67 | [Couche-Tard / Circle K](circlek.md) | [`workday`](ats-workday.md) | 984 | 70 % | 67 % | ✅ | 67 | [Couche-Tard / Circle K](circlek.md) | [`workday`](ats-workday.md) | 984 | 70 % | 67 % | ✅ |
68 | [Solution SFT](solution_sft.md) | [`workable`](ats-workable.md) | 959 | 23 % | 100 % | ✅ | 68 | [Solution SFT](solution_sft.md) | [`workable`](ats-workable.md) | 959 | 23 % | 100 % | ✅ |
69 | [Bombardier](bombardier.md) | [`successfactors`](ats-successfactors.md) | 899 | 1 % | 100 % | ✅ | 69 | [Bombardier](bombardier.md) | [`successfactors`](ats-successfactors.md) | 899 | 1 % | 100 % | ✅ |
70−| [Walmart Canada](walmart.md) | [`workday`](ats-workday.md) | 877 | 98 % | 90 % | ✅ | 70+| [Walmart Canada](walmart.md) | [`workday`](ats-workday.md) | 886 | 98 % | 91 % | ✅ |
71 | [Santé Québec — Montréal](sante_montreal.md) | [`njoyn`](ats-njoyn.md) | 817 | 98 % | 98 % | ✅ | 71 | [Santé Québec — Montréal](sante_montreal.md) | [`njoyn`](ats-njoyn.md) | 817 | 98 % | 98 % | ✅ |
72 | [TEHORA](tehora.md) | [`workable`](ats-workable.md) | 421 | 0 % | 100 % | ✅ | 72 | [TEHORA](tehora.md) | [`workable`](ats-workable.md) | 421 | 0 % | 100 % | ✅ |
73 | [Université McGill](mcgill.md) | [`workday`](ats-workday.md) | 395 | 82 % | 100 % | ✅ | 73 | [Université McGill](mcgill.md) | [`workday`](ats-workday.md) | 395 | 82 % | 100 % | ✅ |
@@ -85,7 +85,7 @@ Conformité : voir [`docs/CONFORMITE.md`](../CONFORMITE.md). Chaque offre conser
85 | [Groupe Banque TD](td.md) | [`workday`](ats-workday.md) | 184 | 94 % | 96 % | ✅ | 85 | [Groupe Banque TD](td.md) | [`workday`](ats-workday.md) | 184 | 94 % | 96 % | ✅ |
86 | [CISSS de Laval](cisss_laval.md) | [`wpjobmanager`](ats-wpjobmanager.md) | 175 | 2 % | 100 % | ✅ | 86 | [CISSS de Laval](cisss_laval.md) | [`wpjobmanager`](ats-wpjobmanager.md) | 175 | 2 % | 100 % | ✅ |
87 | [La Vie en Rose](lavieenrose.md) | [`dayforce`](ats-dayforce.md) | 153 | 5 % | 100 % | ✅ | 87 | [La Vie en Rose](lavieenrose.md) | [`dayforce`](ats-dayforce.md) | 153 | 5 % | 100 % | ✅ |
88−| [Le Groupe Maurice](groupemaurice.md) | [`dayforce`](ats-dayforce.md) | 146 | 0 % | 100 % | ✅ | 88+| [Le Groupe Maurice](groupemaurice.md) | [`dayforce`](ats-dayforce.md) | 148 | 0 % | 100 % | ✅ |
89 | [CISSS de l'Abitibi-Témiscamingue](cisss_abitibi.md) | [`wpjobmanager`](ats-wpjobmanager.md) | 144 | 0 % | 100 % | ✅ | 89 | [CISSS de l'Abitibi-Témiscamingue](cisss_abitibi.md) | [`wpjobmanager`](ats-wpjobmanager.md) | 144 | 0 % | 100 % | ✅ |
90 | [Sodexo Canada](sodexocanadaltd.md) | [`smartrecruiters`](ats-smartrecruiters.md) | 143 | 82 % | 99 % | ✅ | 90 | [Sodexo Canada](sodexocanadaltd.md) | [`smartrecruiters`](ats-smartrecruiters.md) | 143 | 82 % | 99 % | ✅ |
91 | [CISSS des Laurentides](cisss_laurentides.md) | [`wpjobmanager`](ats-wpjobmanager.md) | 135 | 6 % | 100 % | ✅ | 91 | [CISSS des Laurentides](cisss_laurentides.md) | [`wpjobmanager`](ats-wpjobmanager.md) | 135 | 6 % | 100 % | ✅ |
@@ -161,12 +161,12 @@ Conformité : voir [`docs/CONFORMITE.md`](../CONFORMITE.md). Chaque offre conser
161 | [EXFO](exfo.md) | [`workday`](ats-workday.md) | 43 | 0 % | 100 % | ✅ | 161 | [EXFO](exfo.md) | [`workday`](ats-workday.md) | 43 | 0 % | 100 % | ✅ |
162 | [JD Sports Canada](jdsports.md) | [`dayforce`](ats-dayforce.md) | 42 | 0 % | 100 % | ✅ | 162 | [JD Sports Canada](jdsports.md) | [`dayforce`](ats-dayforce.md) | 42 | 0 % | 100 % | ✅ |
163 | [Myhrabc](myhrabc.md) | [`workday`](ats-workday.md) | 42 | 55 % | 50 % | ✅ | 163 | [Myhrabc](myhrabc.md) | [`workday`](ats-workday.md) | 42 | 55 % | 50 % | ✅ |
164−| [Valsoft](valsoft_corp.md) | [`workable`](ats-workable.md) | 41 | 7 % | 100 % | ✅ |
165 | [Cohere](cohere.md) | [`ashby`](ats-ashby.md) | 40 | 92 % | 25 % | ✅ | 164 | [Cohere](cohere.md) | [`ashby`](ats-ashby.md) | 40 | 92 % | 25 % | ✅ |
166 | [Levio](levio.md) | [`greenhouse`](ats-greenhouse.md) | 40 | 0 % | 100 % | ✅ | 165 | [Levio](levio.md) | [`greenhouse`](ats-greenhouse.md) | 40 | 0 % | 100 % | ✅ |
167−| [Uhaul](uhaul.md) | [`workday`](ats-workday.md) | 40 | 0 % | 100 % | ✅ | 166+| [Valsoft](valsoft_corp.md) | [`workable`](ats-workable.md) | 40 | 8 % | 100 % | ✅ |
168 | [Firststudent](firststudent.md) | [`workday`](ats-workday.md) | 39 | 41 % | 97 % | ✅ | 167 | [Firststudent](firststudent.md) | [`workday`](ats-workday.md) | 39 | 41 % | 97 % | ✅ |
169 | [Info-Ways](info_ways.md) | [`smartrecruiters`](ats-smartrecruiters.md) | 39 | 0 % | 100 % | ✅ | 168 | [Info-Ways](info_ways.md) | [`smartrecruiters`](ats-smartrecruiters.md) | 39 | 0 % | 100 % | ✅ |
169+| [Uhaul](uhaul.md) | [`workday`](ats-workday.md) | 39 | 0 % | 100 % | ✅ |
170 | [Domtar](domtar.md) | [`successfactors`](ats-successfactors.md) | 38 | 8 % | 100 % | ✅ | 170 | [Domtar](domtar.md) | [`successfactors`](ats-successfactors.md) | 38 | 8 % | 100 % | ✅ |
171 | [Sapsol Technologies Inc](sapsol_technologies_inc_7.md) | [`workable`](ats-workable.md) | 38 | 0 % | 100 % | ✅ | 171 | [Sapsol Technologies Inc](sapsol_technologies_inc_7.md) | [`workable`](ats-workable.md) | 38 | 0 % | 100 % | ✅ |
172 | [system canada technologies](systemcanadatechnologies.md) | [`smartrecruiters`](ats-smartrecruiters.md) | 38 | 0 % | 100 % | ✅ | 172 | [system canada technologies](systemcanadatechnologies.md) | [`smartrecruiters`](ats-smartrecruiters.md) | 38 | 0 % | 100 % | ✅ |
@@ -224,7 +224,6 @@ Conformité : voir [`docs/CONFORMITE.md`](../CONFORMITE.md). Chaque offre conser
224 | [Behaviour Interactif](bhvr.md) | [`lever`](ats-lever.md) | 24 | 0 % | 100 % | ✅ | 224 | [Behaviour Interactif](bhvr.md) | [`lever`](ats-lever.md) | 24 | 0 % | 100 % | ✅ |
225 | [Best Buy Canada](bestbuycanada.md) | [`workday`](ats-workday.md) | 24 | 0 % | 38 % | ✅ | 225 | [Best Buy Canada](bestbuycanada.md) | [`workday`](ats-workday.md) | 24 | 0 % | 38 % | ✅ |
226 | [CHUM](chum.md) | [`wpjobmanager`](ats-wpjobmanager.md) | 24 | 4 % | 100 % | ✅ | 226 | [CHUM](chum.md) | [`wpjobmanager`](ats-wpjobmanager.md) | 24 | 4 % | 100 % | ✅ |
227−| [Cineplex](cineplex.md) | [`workday`](ats-workday.md) | 24 | 0 % | 96 % | ✅ |
228 | [CSS des Découvreurs](cssdd.md) | [`digitalrecruiters`](ats-digitalrecruiters.md) | 24 | 83 % | 100 % | ✅ | 227 | [CSS des Découvreurs](cssdd.md) | [`digitalrecruiters`](ats-digitalrecruiters.md) | 24 | 83 % | 100 % | ✅ |
229 | [Directive](directive.md) | [`ashby`](ats-ashby.md) | 24 | 21 % | 0 % | ✅ | 228 | [Directive](directive.md) | [`ashby`](ats-ashby.md) | 24 | 21 % | 0 % | ✅ |
230 | [Exportation et développement Canada (EDC)](export_development_canada.md) | [`workable`](ats-workable.md) | 24 | 96 % | 100 % | ✅ | 229 | [Exportation et développement Canada (EDC)](export_development_canada.md) | [`workable`](ats-workable.md) | 24 | 96 % | 100 % | ✅ |
@@ -237,6 +236,7 @@ Conformité : voir [`docs/CONFORMITE.md`](../CONFORMITE.md). Chaque offre conser
237 | [Structube](structube1.md) | [`smartrecruiters`](ats-smartrecruiters.md) | 24 | 0 % | 100 % | ✅ | 236 | [Structube](structube1.md) | [`smartrecruiters`](ats-smartrecruiters.md) | 24 | 0 % | 100 % | ✅ |
238 | [Airliquidehr](airliquidehr.md) | [`workday`](ats-workday.md) | 23 | 22 % | 100 % | ✅ | 237 | [Airliquidehr](airliquidehr.md) | [`workday`](ats-workday.md) | 23 | 22 % | 100 % | ✅ |
239 | [Broccolini](broccolini.md) | [`bamboohr`](ats-bamboohr.md) | 23 | 4 % | 100 % | ✅ | 238 | [Broccolini](broccolini.md) | [`bamboohr`](ats-bamboohr.md) | 23 | 4 % | 100 % | ✅ |
239+| [Cineplex](cineplex.md) | [`workday`](ats-workday.md) | 23 | 0 % | 96 % | ✅ |
240 | [MEDFAR Solutions Cliniques](medfar.md) | [`smartrecruiters`](ats-smartrecruiters.md) | 23 | 0 % | 100 % | ✅ | 240 | [MEDFAR Solutions Cliniques](medfar.md) | [`smartrecruiters`](ats-smartrecruiters.md) | 23 | 0 % | 100 % | ✅ |
241 | [Progesys](progesys_inc.md) | [`breezy`](ats-breezy.md) | 23 | 9 % | 96 % | ✅ | 241 | [Progesys](progesys_inc.md) | [`breezy`](ats-breezy.md) | 23 | 9 % | 96 % | ✅ |
242 | [Unitytech](unitytech.md) | [`workday`](ats-workday.md) | 23 | 91 % | 83 % | ✅ | 242 | [Unitytech](unitytech.md) | [`workday`](ats-workday.md) | 23 | 91 % | 83 % | ✅ |
@@ -603,7 +603,7 @@ Conformité : voir [`docs/CONFORMITE.md`](../CONFORMITE.md). Chaque offre conser
603 | [Aviya Aerospace Systems](aviyatech.md) | [`lever`](ats-lever.md) | 5 | 0 % | 100 % | ✅ | 603 | [Aviya Aerospace Systems](aviyatech.md) | [`lever`](ats-lever.md) | 5 | 0 % | 100 % | ✅ |
604 | [BDL Énergie](bdl_energie.md) | [`breezy`](ats-breezy.md) | 5 | 20 % | 20 % | ✅ | 604 | [BDL Énergie](bdl_energie.md) | [`breezy`](ats-breezy.md) | 5 | 20 % | 20 % | ✅ |
605 | [Behavox](behavox.md) | [`greenhouse`](ats-greenhouse.md) | 5 | 0 % | 100 % | ✅ | 605 | [Behavox](behavox.md) | [`greenhouse`](ats-greenhouse.md) | 5 | 0 % | 100 % | ✅ |
606−| [Canadian Royalties](canadian_royalties.md) | [`adp`](ats-adp.md) | 5 | 40 % | 100 % | ❌ | 606+| [Canadian Royalties](canadian_royalties.md) | [`adp`](ats-adp.md) | 5 | 40 % | 100 % | ✅ |
607 | [Conagrabrands](conagrabrands.md) | [`workday`](ats-workday.md) | 5 | 80 % | 100 % | ✅ | 607 | [Conagrabrands](conagrabrands.md) | [`workday`](ats-workday.md) | 5 | 80 % | 100 % | ✅ |
608 | [Consultant(e) en développement des affaires](omnitrans.md) | [`dayforce`](ats-dayforce.md) | 5 | 40 % | 100 % | ✅ | 608 | [Consultant(e) en développement des affaires](omnitrans.md) | [`dayforce`](ats-dayforce.md) | 5 | 40 % | 100 % | ✅ |
609 | [Cultures Gen V](cultures_genv.md) | [`adp`](ats-adp.md) | 5 | 20 % | 100 % | ✅ | 609 | [Cultures Gen V](cultures_genv.md) | [`adp`](ats-adp.md) | 5 | 20 % | 100 % | ✅ |
modified docs/connecteurs/ats-adp.md +18 −18
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 Contact : contact@spboucher.ai 5 Contact : contact@spboucher.ai
6 Fichier : docs/connecteurs/ats-adp.md 6 Fichier : docs/connecteurs/ats-adp.md
7 Rôle : Fiche plateforme ATS adp — mécanique partagée + tableau des 17 tenants 7 Rôle : Fiche plateforme ATS adp — mécanique partagée + tableau des 17 tenants
8−Généré : 2026-10-31 11:33 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER, 8+Généré : 2026-10-31 13:33 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 relancer le script pour régénérer. 9 relancer le script pour régénérer.
10 ============================================================================= 10 =============================================================================
11 --> 11 -->
@@ -40,23 +40,23 @@ Généré : 2026-10-31 11:33 EDT par scripts/gen_connector_docs.py — NE PAS
40 40
41 | Employeur | Actives | Salaire | GPS | Mode | Dernier sync | OK | 41 | Employeur | Actives | Salaire | GPS | Mode | Dernier sync | OK |
42 |---|---|---|---|---|---|---| 42 |---|---|---|---|---|---|---|
43−| [Uniboard](uniboard.md) | 19 | 32 % | 63 % | 0 % | 2026-10-31 09:35 | ✅ | 43+| [Uniboard](uniboard.md) | 19 | 32 % | 63 % | 0 % | 2026-10-31 12:47 | ✅ |
44−| [Groupe Nordik (Nordik Spa-Nature)](groupe_nordik.md) | 16 | 25 % | 100 % | 0 % | 2026-10-31 11:17 | ✅ | 44+| [Groupe Nordik (Nordik Spa-Nature)](groupe_nordik.md) | 16 | 25 % | 100 % | 0 % | 2026-10-31 12:05 | ✅ |
45−| [UV Assurance](uv_assurance.md) | 14 | 0 % | 100 % | 0 % | 2026-10-31 09:35 | ✅ | 45+| [UV Assurance](uv_assurance.md) | 14 | 0 % | 100 % | 0 % | 2026-10-31 12:47 | ✅ |
46−| [Cook It](cookit.md) | 10 | 60 % | 100 % | 0 % | 2026-10-31 11:04 | ✅ | 46+| [Cook It](cookit.md) | 10 | 60 % | 100 % | 0 % | 2026-10-31 11:51 | ✅ |
47−| [H2O Innovation](h2o_innovation.md) | 9 | 0 % | 100 % | 0 % | 2026-10-31 11:23 | ✅ | 47+| [H2O Innovation](h2o_innovation.md) | 9 | 0 % | 100 % | 0 % | 2026-10-31 12:08 | ✅ |
48−| [Strathmore](strathmore.md) | 9 | 44 % | 100 % | 0 % | 2026-10-31 11:33 | ✅ | 48+| [Strathmore](strathmore.md) | 9 | 44 % | 100 % | 0 % | 2026-10-31 12:42 | ✅ |
49−| [Quincaillerie Richelieu](richelieu.md) | 9 | 0 % | 100 % | 0 % | 2026-10-31 09:24 | ✅ | 49+| [Quincaillerie Richelieu](richelieu.md) | 9 | 0 % | 100 % | 0 % | 2026-10-31 12:36 | ✅ |
50−| [Bento Sushi](bento_sushi.md) | 8 | 88 % | 100 % | 0 % | 2026-10-31 10:46 | ✅ | 50+| [Bento Sushi](bento_sushi.md) | 8 | 88 % | 100 % | 0 % | 2026-10-31 11:40 | ✅ |
51−| [MSI Gestion immobilière](msi_gestion.md) | 6 | 100 % | 100 % | 50 % | 2026-10-31 09:17 | ✅ | 51+| [MSI Gestion immobilière](msi_gestion.md) | 6 | 100 % | 100 % | 50 % | 2026-10-31 12:28 | ✅ |
52−| [Abritek](abritek.md) | 6 | 100 % | 100 % | 0 % | 2026-10-31 10:39 | ✅ | 52+| [Abritek](abritek.md) | 6 | 100 % | 100 % | 0 % | 2026-10-31 11:34 | ✅ |
53−| [Cultures Gen V](cultures_genv.md) | 5 | 20 % | 100 % | 0 % | 2026-10-31 11:05 | ✅ | 53+| [Cultures Gen V](cultures_genv.md) | 5 | 20 % | 100 % | 0 % | 2026-10-31 11:51 | ✅ |
54−| [Canadian Royalties](canadian_royalties.md) | 5 | 40 % | 100 % | 0 % | 2026-10-31 10:48 | ❌ | 54+| [Canadian Royalties](canadian_royalties.md) | 5 | 40 % | 100 % | 0 % | 2026-10-31 11:41 | ✅ |
55−| [Mitsubishi HC Capital Canada](mitsubishi_hc_capital.md) | 1 | 0 % | 100 % | 0 % | 2026-10-31 09:16 | ✅ | 55+| [Mitsubishi HC Capital Canada](mitsubishi_hc_capital.md) | 1 | 0 % | 100 % | 0 % | 2026-10-31 12:28 | ✅ |
56−| [Osgoode Properties](osgoode_properties.md) | 1 | 100 % | 100 % | 0 % | 2026-10-31 09:19 | ✅ | 56+| [Osgoode Properties](osgoode_properties.md) | 1 | 100 % | 100 % | 0 % | 2026-10-31 12:31 | ✅ |
57−| [Nemaska Lithium](nemaska_lithium.md) | 1 | 0 % | 100 % | 0 % | 2026-10-31 09:17 | ✅ | 57+| [Nemaska Lithium](nemaska_lithium.md) | 1 | 0 % | 100 % | 0 % | 2026-10-31 13:33 | ✅ |
58−| [Triple Boris](triple_boris.md) | 1 | 0 % | 100 % | 0 % | 2026-10-31 09:34 | ✅ | 58+| [Triple Boris](triple_boris.md) | 1 | 0 % | 100 % | 0 % | 2026-10-31 12:46 | ✅ |
59−| [Niobec (Magris Performance Materials)](niobec.md) | 0 | — | — | — | 2026-10-31 09:17 | ✅ | 59+| [Niobec (Magris Performance Materials)](niobec.md) | 0 | — | — | — | 2026-10-31 12:29 | ✅ |
60 60
61 ## Licence / conformité 61 ## Licence / conformité
62 62
modified docs/connecteurs/nemaska_lithium.md +6 −6
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 Contact : contact@spboucher.ai 5 Contact : contact@spboucher.ai
6 Fichier : docs/connecteurs/nemaska_lithium.md 6 Fichier : docs/connecteurs/nemaska_lithium.md
7 Rôle : Fiche connecteur — Nemaska Lithium (employeur direct, ATS adp) 7 Rôle : Fiche connecteur — Nemaska Lithium (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 13:33 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 relancer le script pour régénérer. 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 ## Champs → schéma 39 ## Champs → schéma
40 40
41−Complétude mesurée sur les **1 offres actives** de la source (base live, 2026-10-14 18:40 EDT). 41+Complétude mesurée sur les **1 offres actives** de la source (base live, 2026-10-31 13:33 EDT).
42 42
43 | Champ (`jobs.*`) | Rôle | Complétude | 43 | Champ (`jobs.*`) | Rôle | Complétude |
44 |---|---|---| 44 |---|---|---|
@@ -79,15 +79,15 @@ Exemple réel : *Candidature spontanée - Carrière à l'usine de Bécancour*
79 79
80 ## Volumétrie & complétude live 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-31 13:33 EDT dans `data/jobka.db`)*
83 83
84 - **Offres en base** : 1 (dont **1 actives**, 0 masquées comme doublons `dup_of`) 84 - **Offres en base** : 1 (dont **1 actives**, 0 masquées comme doublons `dup_of`)
85 - **Salaire** : 0/1 actives (0 %) 85 - **Salaire** : 0/1 actives (0 %)
86 - **GPS** : 1/1 actives (100 %) 86 - **GPS** : 1/1 actives (100 %)
87 - **Mode** : 0/1 actives (0 %) 87 - **Mode** : 0/1 actives (0 %)
88 - **Parution** : 1/1 actives (100 %) 88 - **Parution** : 1/1 actives (100 %)
89−- **Dernier sync** : 2026-10-14 15:45 — trouvées 1, +0, ~0, -0 89+- **Dernier sync** : 2026-10-31 13:33 — trouvées 1, +0, ~0, -0
90−- **Syncs enregistrés** (`sync_log`) : 469 90+- **Syncs enregistrés** (`sync_log`) : 616
91 91
92 ## Erreurs & dépannage 92 ## Erreurs & dépannage
93 93
@@ -95,7 +95,7 @@ Erreurs relevées dans `sync_log` :
95 95
96 | Erreur | Occurrences | Dernière fois | 96 | Erreur | Occurrences | Dernière fois |
97 |---|---|---| 97 |---|---|---|
98−| 404 Client Error: Not Found for url: https://workforcenow.adp.com/mascsr/default/careercen… | 1 | 2026-10-10 02:00 | 98+| 404 Client Error: Not Found for url: https://workforcenow.adp.com/mascsr/default/careercen… | 3 | 2026-10-31 12:29 |
99 | Expecting value: line 1 column 1 (char 0) | 3 | 2026-08-30 00:55 | 99 | Expecting value: line 1 column 1 (char 0) | 3 | 2026-08-30 00:55 |
100 | ('Connection aborted.', ConnectionResetError(54, 'Connection reset by peer')) | 1 | 2026-08-29 02:25 | 100 | ('Connection aborted.', ConnectionResetError(54, 'Connection reset by peer')) | 1 | 2026-08-29 02:25 |
101 101
modified jobka/connectors/nemaska_lithium.py +56 −2
@@ -5,11 +5,32 @@
5 # Fichier : jobka/connectors/nemaska_lithium.py 5 # Fichier : jobka/connectors/nemaska_lithium.py
6 # Rôle : Connecteur Nemaska Lithium — lithium (Whabouchi/Bécancour) — ADP WFN 6 # Rôle : Connecteur Nemaska Lithium — lithium (Whabouchi/Bécancour) — ADP WFN
7 # + repli « détail seulement » quand l'API liste échoue (maintenances 7 # + repli « détail seulement » quand l'API liste échoue (maintenances
8−# nocturnes ADP) 8+# nocturnes ADP) + garde-fou retry borné (frontal ADP intermittent
9−# Créé : 2026-08-25 Modifié : 2026-08-30 9+# par cid)
10+# Créé : 2026-08-25 Modifié : 2026-10-31
10 # ============================================================================= 11 # =============================================================================
11 """Nemaska Lithium — ADP Workforce Now, avec repli de revalidation. 12 """Nemaska Lithium — ADP Workforce Now, avec repli de revalidation.
12 13
14+Chronologie (mission ka6 2026-10-31) : 8e tenant ADP de l'app touché par le
15+frontal intermittent PAR CID (même panne que bento_sushi 64f53c8f, cookit
16+7873198d, mitsubishi_hc_capital du 2026-10-26, niobec 61a2ddf8,
17+osgoode_properties 3b95c432, uv_assurance 946898d9 et strathmore b6b8f9fc —
18+pool backend malade côté ADP, « default backend - 404 » nginx). Vert found=1
19+en continu (= la médiane 1.0), puis 404 franc sur la liste fr_CA à 23:45 le
20+30/10 (épisode nocturne multi-tenants 23:45→04:42) ; reverdi seul à 02:15,
21+06:25 et 09:17, puis NOUVEAU 404 isolé à 12:29 → stale. Sonde live 13:1x :
22+sur 6 essais sur la MÊME URL liste à la même minute, 2 × 200 JSON
23+(totalNumber=1) et 4 × « default backend - 404 » de 21 octets —
24+intermittence, tenant VIVANT, aucune migration. Garde-fou répliqué des sept
25+frères : `_get_json` retente jusqu'à 30 fois (pause 2 s) sur
26+404/502/503/504/timeout/non-JSON, timeout abaissé 30→15 s pour borner les
27+connexions qui pendent. Dormant dès que le frontal est sain (1er essai OK =
28+zéro surcoût) ; un sync vert ne coûte qu'UN appel liste (détails en cache
29+BD). NE PAS retirer ce garde-fou si un futur scan le croise : il est inerte
30+hors panne. Il couvre liste ET détail (_fetch_detail passe par _get_json) ;
31+le repli « détail seulement » ci-dessous reste la défense contre les
32+maintenances totales sorry.adp.com.
33+
13 Contexte (2026-08-28/29) : ADP Workforce Now a des fenêtres de maintenance 34 Contexte (2026-08-28/29) : ADP Workforce Now a des fenêtres de maintenance
14 nocturnes récurrentes (vendredi ET samedi soir ~22:00 → 02:00 ET) pendant 35 nocturnes récurrentes (vendredi ET samedi soir ~22:00 → 02:00 ET) pendant
15 lesquelles TOUT workforcenow.adp.com redirige vers sorry.adp.com — la liste 36 lesquelles TOUT workforcenow.adp.com redirige vers sorry.adp.com — la liste
@@ -33,6 +54,8 @@ fin de la maintenance.
33 """ 54 """
34 from __future__ import annotations 55 from __future__ import annotations
35 56
57+import time
58+
36 import requests 59 import requests
37 60
38 from ..schema import JobPosting, clean_html 61 from ..schema import JobPosting, clean_html
@@ -45,6 +68,37 @@ class NemaskaLithiumConnector(ADPWorkforceNowConnector):
45 CID = "79ec02f1-3a83-4cbd-93d3-571a0f8432e8" 68 CID = "79ec02f1-3a83-4cbd-93d3-571a0f8432e8"
46 CCID = "19000101_000001" 69 CCID = "19000101_000001"
47 70
71+ # Frontal ADP intermittent pour CE tenant (2026-10-31) : mêmes bornes que
72+ # bento_sushi/cookit/mitsubishi_hc_capital/niobec/osgoode_properties/
73+ # uv_assurance/strathmore — les 404 échouent vite (<1 s), le timeout
74+ # court borne les connexions qui pendent, et un sync vert ne coûte qu'UN
75+ # appel liste (détails en cache BD).
76+ timeout = 15
77+ _FLAKY_TRIES = 30
78+ _FLAKY_PAUSE = 2.0
79+
80+ def _get_json(self, url: str, params: dict) -> dict:
81+ last: Exception | None = None
82+ for attempt in range(self._FLAKY_TRIES):
83+ if attempt:
84+ time.sleep(self._FLAKY_PAUSE)
85+ try:
86+ return super()._get_json(url, params)
87+ except requests.HTTPError as exc:
88+ status = getattr(exc.response, "status_code", None)
89+ if status not in (404, 502, 503, 504):
90+ raise
91+ last = exc
92+ except (requests.Timeout, requests.ConnectionError) as exc:
93+ last = exc
94+ except RuntimeError as exc:
95+ # « ADP non-JSON après 3 essais » de la classe de base :
96+ # même frontal malade, même traitement.
97+ if not str(exc).startswith("ADP non-JSON"):
98+ raise
99+ last = exc
100+ raise last
101+
48 def fetch(self) -> list[JobPosting]: 102 def fetch(self) -> list[JobPosting]:
49 try: 103 try:
50 return super().fetch() 104 return super().fetch()
51 105
Menu

Theme