SPB Git

spb/job-ka

Public

Documentation connecteurs (standard Groupe-KA) + registre de conformité

- scripts/gen_connector_docs.py : générateur rejouable (ast + sources.json +
  BD live en lecture seule + sync_log + git) -> docs/connecteurs/ :
  INDEX.md + 17 fiches plateformes ATS (mécanique, endpoints, budgets,
  tableau des tenants) + 217 fiches employeurs + 3 fiches portails +
  fiche dépôt direct (239 fichiers, sections fixes standardisées)
- docs/CONFORMITE.md : registre de conformité par famille (base d accès,
  attribution/lien candidature vérifié -> offre originale, zéro donnée
  personnelle de candidat, Québec Emploi écarté clicSÉQUR, vérifié 2026-08-18)
- README : section Connecteurs (17 ATS, 217 employeurs directs, 3 portails,
  badge Offre directe, dépôt direct), structure/env/API à jour
- data/sources.json : _meta enrichi (compteurs, liste ATS, pointeurs docs)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Simon-Pierre Boucher committed (Aug 18, 2026) parent 1604ff9 Browse files

190 changed files +19,920 −18

190 changed files
modified README.md +44 −17
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : README.md
7 7 Rôle : Documentation principale du projet
8 −Créé : 2026-08-17 Modifié : 2026-08-17
8 +Créé : 2026-08-17 Modifié : 2026-08-18
9 9 =============================================================================
10 10 -->
11 11
@@ -18,9 +18,10 @@ Créé : 2026-08-17 Modifié : 2026-08-17
18 18 **[www.job-ka.com](https://www.job-ka.com)**
19 19
20 20 *Job·Ka collecte les offres directement sur les pages carrières des employeurs
21 −du Québec — pas sur les job boards. Chaque offre est traçable à sa source,
22 −les salaires sont normalisés en $/h et $/an, et la candidature se fait chez
23 −l'employeur. Zéro boîte noire, zéro intermédiaire.*
21 +du Québec — 217 employeurs branchés sur 17 plateformes ATS, complétés par
22 +3 portails publics (l'offre directe gagne toujours). Chaque offre est
23 +traçable à sa source, les salaires sont normalisés en $/h et $/an, et la
24 +candidature se fait chez l'employeur. Zéro boîte noire, zéro intermédiaire.*
24 25
25 26 </div>
26 27
@@ -31,6 +32,7 @@ l'employeur. Zéro boîte noire, zéro intermédiaire.*
31 32 - [Pourquoi Job·Ka ?](#pourquoi-job-ka-)
32 33 - [L'architecture en 30 secondes](#larchitecture-en-30-secondes)
33 34 - [Le pipeline en détail](#le-pipeline-en-détail)
35 +- [Connecteurs](#connecteurs)
34 36 - [Structure du dépôt](#structure-du-dépôt)
35 37 - [Démarrage rapide](#démarrage-rapide)
36 38 - [CLI `run.py`](#cli-runpy)
@@ -51,8 +53,10 @@ offres mortes. L'offre originale — celle de la page carrière de l'employeur
51 53 est la seule source fiable : à jour, complète, sans frais de mise en avant.
52 54
53 55 > Job·Ka se branche directement sur les systèmes de recrutement (ATS) des
54 −> employeurs : Workday, Lever, Greenhouse, SmartRecruiters, ou leur site
55 −> maison. Un connecteur = un employeur. Le tout resynchronisé jour et nuit.
56 +> employeurs — 17 plateformes : Workday, Lever, Greenhouse, SmartRecruiters,
57 +> BambooHR, Breezy, Recruitee, Ashby, Workable, Taleo, Njoyn, UltiPro,
58 +> iCIMS, SuccessFactors, ADP WFN, Digital Recruiters, Workland. Un
59 +> connecteur = un employeur. Le tout resynchronisé jour et nuit.
56 60
57 61 Ce n'est pas un job board qui vend de la visibilité, c'est un index fidèle de
58 62 ce que les employeurs québécois affichent réellement — **avec les salaires en
@@ -92,11 +96,10 @@ flowchart LR
92 96
93 97 ### Connecteurs auto-découverts
94 98 Toute sous-classe de `BaseConnector` avec un `source_id` est enregistrée par
95 −`pkgutil` — aucun registre à maintenir. Les plateformes ATS (Workday, Lever,
96 −Greenhouse, SmartRecruiters) sont des classes de base : brancher un nouvel
97 −employeur = ~10 lignes. Politesse : throttling par source (`request_delay`),
98 −User-Agent identifiable `JobKaBot/1.0`, budgets de requêtes, cache BD des
99 −pages détail.
99 +`pkgutil` — aucun registre à maintenir. Les 17 plateformes ATS sont des
100 +classes de base : brancher un nouvel employeur = ~10 lignes. Politesse :
101 +throttling par source (`request_delay`), User-Agent identifiable
102 +`JobKaBot/1.0`, budgets de requêtes, cache BD des pages détail.
100 103
101 104 ### Diff engine avec garde-fou anti-dérive
102 105 Chaque sync compare le `content_hash` de chaque offre : ajout, mise à jour, ou
@@ -123,6 +126,28 @@ exigence d'un second signal concordant (type, salaire ±4 %, date ±7 j). Le
123 126 canonique est la source la plus autoritaire (page carrière avant agrégat) ;
124 127 les doublons sont masqués (`dup_of`), jamais supprimés.
125 128
129 +## Connecteurs
130 +
131 +**217 employeurs directs** connectés via **17 plateformes ATS** (Workday,
132 +Lever, Greenhouse, SmartRecruiters, BambooHR, Breezy, Recruitee, Ashby,
133 +Workable, Taleo, Njoyn, UltiPro, iCIMS, SuccessFactors, ADP WFN, Digital
134 +Recruiters, Workland) + **3 portails agrégateurs** en complément
135 +(Guichet-Emplois — Crawl-delay 5 s respecté —, Jobillico via sitemaps,
136 +Espresso-Jobs) + un **canal de dépôt direct** pour les employeurs
137 +(`/employeurs`, modération manuelle).
138 +
139 +- Les offres issues des pages carrières portent le badge **« Offre
140 + directe »** (`is_direct`) ; la candidature se fait chez l'employeur.
141 +- En cas de doublon entre une offre directe et sa copie portail, **l'offre
142 + directe gagne la canonique** (dédup direct-prioritaire, `dup_of`).
143 +- **Documentation par connecteur** (générée, standard Groupe-KA) :
144 + [`docs/connecteurs/INDEX.md`](docs/connecteurs/INDEX.md) — une fiche par
145 + plateforme ATS, par employeur, par portail et pour le dépôt direct.
146 + Régénérer : `.venv/bin/python scripts/gen_connector_docs.py`.
147 +- **Registre de conformité** : [`docs/CONFORMITE.md`](docs/CONFORMITE.md)
148 + (base d'accès par famille, attribution, zéro donnée personnelle de
149 + candidat ; Québec Emploi écarté — auth clicSÉQUR).
150 +
126 151 ## Structure du dépôt
127 152
128 153 ```
@@ -141,15 +166,15 @@ job-ka/
141 166 │ └── connectors/
142 167 │ ├── base.py # BaseConnector (throttling, Scrapfly, cache détail)
143 168 │ ├── workday.py # plateforme Workday (facette Québec auto-découverte)
144 −│ ├── lever.py # plateforme Lever
145 −│ ├── greenhouse.py # plateforme Greenhouse
146 −│ ├── smartrecruiters.py # plateforme SmartRecruiters
147 −│ └── <employeur>.py # 1 fichier = 1 employeur (sous-classe)
148 −├── data/sources.json # registre descriptif des employeurs
169 +│ ├── <ats>.py # 16 autres plateformes ATS partagées
170 +│ ├── guichet_emplois.py # + jobillico.py, espresso_jobs.py : portails
171 +│ └── <employeur>.py # 1 fichier = 1 employeur (sous-classe ~10 lignes)
172 +├── data/sources.json # registre descriptif des sources (221 entrées)
149 173 ├── frontend/ # React 18 + Vite + TS (carte MapLibre, sans jeton)
150 174 ├── tests/ # pytest : normalisation + rejeu des connecteurs
151 175 ├── scripts/check_headers.py # hook pre-commit : en-tête d'auteur obligatoire
152 −└── docs/ # audit Lou·Ka, déploiement
176 +├── scripts/gen_connector_docs.py # génère docs/connecteurs/ (fiches + INDEX)
177 +└── docs/ # connecteurs/, CONFORMITE.md, déploiement
153 178 ```
154 179
155 180 ## Démarrage rapide
@@ -194,6 +219,7 @@ En dev frontend : `npm run dev` dans `frontend/` (proxy `/api` → :8096).
194 219 | `SCRAPFLY_API_KEY` | rendu JS / anti-bot pour les pages carrières maison |
195 220 | `JOBKA_WORKDAY_DETAIL_LIMIT` | plafond de pages détail Workday par sync (défaut 300) |
196 221 | `JOBKA_SR_DETAIL_LIMIT` | plafond de pages détail SmartRecruiters (défaut 300) |
222 +| `JOBKA_<PLATEFORME>_*` | budgets par plateforme/portail (pages, détails, fenêtres) — défauts et rôle documentés dans [`docs/connecteurs/`](docs/connecteurs/INDEX.md) |
197 223
198 224 ## API
199 225
@@ -207,6 +233,7 @@ En dev frontend : `npm run dev` dans `frontend/` (proxy `/api` → :8096).
207 233 | `GET /api/sources` | registre des employeurs + fraîcheur par source |
208 234 | `GET /api/stats` | totaux, catégories, villes, dernières syncs |
209 235 | `POST /api/sync` | déclenche une synchronisation (webhook) |
236 +| `POST /api/employeurs/offres` | dépôt direct d'une offre par un employeur (modération manuelle) |
210 237
211 238 ## Ajouter un employeur (≈ 10 lignes)
212 239
modified data/sources.json +27 −1
@@ -3,7 +3,33 @@
3 3 "project": "Job·Ka — Groupe KA",
4 4 "author": "Simon-Pierre Boucher <contact@spboucher.ai>",
5 5 "role": "Registre descriptif des sources (alimente la page Sources)",
6 − "updated": "2026-08-18"
6 + "updated": "2026-08-18",
7 + "counts": {
8 + "employeurs_directs": 217,
9 + "plateformes_ats": 17,
10 + "portails": 3,
11 + "depot_direct": 1
12 + },
13 + "ats": [
14 + "adp",
15 + "ashby",
16 + "bamboohr",
17 + "breezy",
18 + "digitalrecruiters",
19 + "greenhouse",
20 + "icims",
21 + "lever",
22 + "njoyn",
23 + "recruitee",
24 + "smartrecruiters",
25 + "successfactors",
26 + "taleo",
27 + "ultipro",
28 + "workable",
29 + "workday",
30 + "workland"
31 + ],
32 + "docs": "docs/connecteurs/INDEX.md (fiches générées par scripts/gen_connector_docs.py) ; conformité : docs/CONFORMITE.md"
7 33 },
8 34 "sources": [
9 35 {
added docs/CONFORMITE.md +58 −0
@@ -0,0 +1,58 @@
1 +<!--
2 +=============================================================================
3 +Job·Ka — Groupe KA
4 +Auteur : Simon-Pierre Boucher
5 +Contact : contact@spboucher.ai
6 +Fichier : docs/CONFORMITE.md
7 +Rôle : Registre de conformité des sources de données — base d'accès,
8 + attribution, lien de candidature, données personnelles
9 +Créé : 2026-08-18 Modifié : 2026-08-18
10 +=============================================================================
11 +-->
12 +
13 +# Job·Ka — Registre de conformité des sources
14 +
15 +> **Date de vérification : 2026-08-18** (vérifié dans le code, la base live et
16 +> le frontend). Détail par source : [`docs/connecteurs/INDEX.md`](connecteurs/INDEX.md).
17 +
18 +## Principes vérifiés (2026-08-18)
19 +
20 +- **L'app renvoie toujours vers l'offre originale.** Chaque offre conserve son
21 + URL source (`jobs.url`) ; le bouton « Postuler chez {employeur} » du
22 + frontend (`frontend/src/pages/Job.tsx`) ouvre `job.url` dans un nouvel
23 + onglet. Il n'existe **aucun formulaire de candidature** dans Job·Ka.
24 +- **Aucune donnée personnelle de candidat n'est collectée** : pas de CV, pas
25 + de profil candidat, pas de suivi de candidature. Le seul champ de contact
26 + stocké est le **courriel d'affaires** fourni volontairement par un employeur
27 + qui dépose une offre (`depot-direct`, `details.contact_email`).
28 +- **Identification honnête** : User-Agent
29 + `JobKaBot/1.0 (+https://www.job-ka.com; contact@spboucher.ai)` sur les
30 + accès directs ; throttling par source (`request_delay`) et budgets de
31 + requêtes/pages détail par synchronisation ; cache BD des pages détail.
32 +- **Fidélité** : aucune valeur inventée (salaire, date, coordonnées) ; les
33 + offres retirées sont désactivées, jamais falsifiées.
34 +
35 +## Tableau par famille de sources
36 +
37 +| Famille | Sources | Base d'accès | Attribution / lien candidature | Données personnelles | Vérifié |
38 +|---|---|---|---|---|---|
39 +| **Employeurs directs — ATS** (workday, lever, greenhouse, smartrecruiters, bamboohr, breezy, recruitee, ashby, workable, taleo, njoyn, ultipro, icims, successfactors, adp, digitalrecruiters, workland) | 217 employeurs, 17 plateformes | **API JSON publique du tenant ATS** (ou HTML rendu serveur du babillard officiel) — le flux même que la page carrière de l'employeur utilise pour diffuser ses offres, sans authentification. Quelques domaines derrière anti-bot (ex. `*.njoyn.com`) lus via Scrapfly, sur pages strictement publiques. | Employeur affiché, badge « Offre directe », lien « Postuler » → page de l'offre **chez l'employeur** | Aucune | 2026-08-18 |
40 +| **Portail — Guichet-Emplois** (`guichet_emplois`) | 1 | Scraping de pages **publiques** (guichetemplois.gc.ca, gouv. du Canada), fenêtre bornée. `robots.txt` respecté : **Crawl-delay 5 s appliqué** (`request_delay = 5.0`). | Lien vers la fiche Guichet-Emplois, qui référence l'offre originale ; pas de badge « directe » ; masquée si l'offre directe existe (dédup direct-prioritaire) | Aucune | 2026-08-18 |
41 +| **Portail — Jobillico** (`jobillico`) | 1 | **Sitemaps publics** (`sitemap_job_postings_*.xml`) + **JSON-LD schema.org/JobPosting** publié par chaque page offre à destination des moteurs. robots.txt respecté, budgets par sync. | Lien vers l'offre originale sur Jobillico ; pas de badge « directe » ; dédup direct-prioritaire | Aucune | 2026-08-18 |
42 +| **Portail — Espresso-Jobs** (`espresso_jobs`) | 1 | Pages publiques + **JSON-LD schema.org** (ItemList + JobPosting). robots.txt respecté, budgets par sync. | Lien vers l'offre originale sur le portail ; pas de badge « directe » ; dédup direct-prioritaire | Aucune | 2026-08-18 |
43 +| **Dépôt direct employeurs** (`depot-direct`) | 1 canal | Soumission **volontaire** par l'employeur (`POST /api/employeurs/offres`), stockée inactive jusqu'à **modération manuelle** ; pot de miel anti-robots. | Lien fourni par l'employeur lui-même | Courriel d'affaires de contact seulement (fourni volontairement) | 2026-08-18 |
44 +
45 +## Sources écartées
46 +
47 +| Source | Raison |
48 +|---|---|
49 +| **Québec Emploi** (quebecemploi.gouv.qc.ca) | Accès derrière **authentification clicSÉQUR** — pas de flux public prévu pour la diffusion ; écarté (2026-08-18). |
50 +
51 +## Rappels d'exploitation
52 +
53 +- La déduplication inter-sources donne **toujours la canonique à l'offre
54 + directe** (`jobka/dedup.py`, `AGGREGATORS`) : la copie portail est masquée
55 + (`dup_of`), jamais supprimée.
56 +- Toute nouvelle source doit être ajoutée à ce registre **avec sa base
57 + d'accès et sa date de vérification**, et recevoir une fiche via
58 + `scripts/gen_connector_docs.py`.
added docs/connecteurs/INDEX.md +278 −0
@@ -0,0 +1,278 @@
1 +<!--
2 +=============================================================================
3 +Job·Ka — Groupe KA
4 +Auteur : Simon-Pierre Boucher
5 +Contact : contact@spboucher.ai
6 +Fichier : docs/connecteurs/INDEX.md
7 +Rôle : Index généré de la documentation des connecteurs (ATS, employeurs, portails, dépôt)
8 +Généré : 2026-08-18 11:37 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 + relancer le script pour régénérer.
10 +=============================================================================
11 +-->
12 +
13 +# Job·Ka — Connecteurs (index)
14 +
15 +> Index généré le 2026-08-18 11:37 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 +
17 +**217 employeurs directs** connectés via **17 plateformes ATS** + **3 portails agrégateurs** + le canal de **dépôt direct** — **8519 offres actives** (7951 directes, 568 portails ; 16 masquées comme doublons inter-sources, soit 8503 visibles). 239 fiches.
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).
20 +
21 +## Plateformes ATS
22 +
23 +| Plateforme | Employeurs | Actives | Salaire | GPS |
24 +|---|---|---|---|---|
25 +| [`workday`](ats-workday.md) | 41 | 3552 | 26 % | 56 % |
26 +| [`successfactors`](ats-successfactors.md) | 3 | 1049 | 7 % | 85 % |
27 +| [`smartrecruiters`](ats-smartrecruiters.md) | 28 | 958 | 16 % | 100 % |
28 +| [`workable`](ats-workable.md) | 19 | 689 | 4 % | 100 % |
29 +| [`lever`](ats-lever.md) | 19 | 457 | 21 % | 96 % |
30 +| [`bamboohr`](ats-bamboohr.md) | 31 | 226 | 13 % | 96 % |
31 +| [`ashby`](ats-ashby.md) | 11 | 213 | 12 % | 75 % |
32 +| [`greenhouse`](ats-greenhouse.md) | 20 | 195 | 13 % | 99 % |
33 +| [`breezy`](ats-breezy.md) | 14 | 132 | 57 % | 97 % |
34 +| [`recruitee`](ats-recruitee.md) | 11 | 130 | 12 % | 98 % |
35 +| [`njoyn`](ats-njoyn.md) | 5 | 119 | 71 % | 42 % |
36 +| [`taleo`](ats-taleo.md) | 4 | 68 | 0 % | 100 % |
37 +| [`icims`](ats-icims.md) | 5 | 57 | 25 % | 95 % |
38 +| [`digitalrecruiters`](ats-digitalrecruiters.md) | 1 | 49 | 98 % | 61 % |
39 +| [`workland`](ats-workland.md) | 1 | 23 | 0 % | 0 % |
40 +| [`ultipro`](ats-ultipro.md) | 1 | 22 | 91 % | 100 % |
41 +| [`adp`](ats-adp.md) | 3 | 12 | 75 % | 100 % |
42 +
43 +## Portails agrégateurs & dépôt
44 +
45 +| Source | Actives | Salaire | Dernier sync |
46 +|---|---|---|---|
47 +| [Guichet-Emplois (Canada)](guichet_emplois.md) | 25 | 100 % | 2026-08-18 11:25 |
48 +| [Jobillico](jobillico.md) | 249 | 49 % | 2026-08-18 11:26 |
49 +| [Espresso-Jobs](espresso_jobs.md) | 294 | 22 % | 2026-08-18 11:24 |
50 +| [Dépôt direct employeurs](depot-direct.md) | 0 (0 en modération) | — | au fil de l'eau |
51 +
52 +## Employeurs directs (par volume d'offres actives)
53 +
54 +| Employeur | ATS | Actives | Salaire | GPS | Dernier sync OK |
55 +|---|---|---|---|---|---|
56 +| [Couche-Tard / Circle K](circlek.md) | [`workday`](ats-workday.md) | 1005 | 45 % | 63 % | ✅ |
57 +| [Walmart Canada](walmart.md) | [`workday`](ats-workday.md) | 972 | 0 % | 0 % | ✅ |
58 +| [Bombardier](bombardier.md) | [`successfactors`](ats-successfactors.md) | 843 | 0 % | 82 % | ✅ |
59 +| [TEHORA](tehora.md) | [`workable`](ats-workable.md) | 389 | 0 % | 100 % | ✅ |
60 +| [Go RH](gorh.md) | [`lever`](ats-lever.md) | 266 | 18 % | 97 % | ✅ |
61 +| [Mouvement Desjardins](desjardins.md) | [`workday`](ats-workday.md) | 245 | 0 % | 94 % | ✅ |
62 +| [CIMA+](cima2.md) | [`smartrecruiters`](ats-smartrecruiters.md) | 221 | 0 % | 100 % | ✅ |
63 +| [Université McGill](mcgill.md) | [`workday`](ats-workday.md) | 180 | 18 % | 96 % | ✅ |
64 +| [Reitmans](reitmanscanadalteltd.md) | [`smartrecruiters`](ats-smartrecruiters.md) | 142 | 22 % | 100 % | ✅ |
65 +| [Ubisoft](ubisoft.md) | [`smartrecruiters`](ats-smartrecruiters.md) | 125 | 0 % | 100 % | ✅ |
66 +| [BMO Groupe financier](bmo.md) | [`workday`](ats-workday.md) | 107 | 84 % | 79 % | ✅ |
67 +| [Domtar](domtar.md) | [`successfactors`](ats-successfactors.md) | 107 | 0 % | 99 % | ✅ |
68 +| [Cascades](cascades.md) | [`successfactors`](ats-successfactors.md) | 99 | 75 % | 99 % | ✅ |
69 +| [Genetec](genetec_inc.md) | [`workable`](ats-workable.md) | 79 | 0 % | 100 % | ✅ |
70 +| [MaintainX](maintainx.md) | [`ashby`](ats-ashby.md) | 78 | 6 % | 83 % | ✅ |
71 +| [Vidéotron](videotron.md) | [`smartrecruiters`](ats-smartrecruiters.md) | 78 | 35 % | 100 % | ✅ |
72 +| [Groupe Banque TD](td.md) | [`workday`](ats-workday.md) | 76 | 97 % | 100 % | ✅ |
73 +| [Agropur](agropur.md) | [`workday`](ats-workday.md) | 75 | 91 % | 99 % | ✅ |
74 +| [Airbus Canada](airbus.md) | [`workday`](ats-workday.md) | 73 | 1 % | 100 % | ✅ |
75 +| [Autodesk](autodesk.md) | [`workday`](ats-workday.md) | 67 | 91 % | 48 % | ✅ |
76 +| [EMCO](emcocorporation.md) | [`smartrecruiters`](ats-smartrecruiters.md) | 67 | 30 % | 100 % | ✅ |
77 +| [Groupe Canam](groupecanam.md) | [`smartrecruiters`](ats-smartrecruiters.md) | 67 | 63 % | 99 % | ✅ |
78 +| [Banque CIBC](cibc.md) | [`workday`](ats-workday.md) | 63 | 2 % | 100 % | ✅ |
79 +| [ANCIA Personnel](anciapersonnelinc.md) | [`recruitee`](ats-recruitee.md) | 59 | 10 % | 100 % | ✅ |
80 +| [Lightspeed Commerce](lightspeedhq.md) | [`ashby`](ats-ashby.md) | 56 | 7 % | 98 % | ✅ |
81 +| [CAE](cae.md) | [`workday`](ats-workday.md) | 52 | 8 % | 92 % | ✅ |
82 +| [Manuvie](manulife.md) | [`workday`](ats-workday.md) | 51 | 90 % | 71 % | ✅ |
83 +| [Santé Québec — Montréal](sante_montreal.md) | [`njoyn`](ats-njoyn.md) | 50 | 98 % | 100 % | ✅ |
84 +| [Santé Québec](sante_quebec.md) | [`digitalrecruiters`](ats-digitalrecruiters.md) | 49 | 98 % | 61 % | ✅ |
85 +| [Beneva](beneva.md) | [`workday`](ats-workday.md) | 48 | 2 % | 100 % | ✅ |
86 +| [Cogeco](cogeco.md) | [`workday`](ats-workday.md) | 48 | 17 % | 56 % | ✅ |
87 +| [Cohere](cohere.md) | [`ashby`](ats-ashby.md) | 46 | 17 % | 37 % | ✅ |
88 +| [Investissements PSP](investpsp.md) | [`workday`](ats-workday.md) | 44 | 2 % | 100 % | ✅ |
89 +| [McKesson Canada](mckesson.md) | [`workday`](ats-workday.md) | 43 | 81 % | 86 % | ✅ |
90 +| [SOGECLAIR](sogeclair.md) | [`workable`](ats-workable.md) | 43 | 2 % | 100 % | ✅ |
91 +| [Levio](levio.md) | [`greenhouse`](ats-greenhouse.md) | 42 | 0 % | 100 % | ✅ |
92 +| [Techo-Bloc](techo_bloc.md) | [`smartrecruiters`](ats-smartrecruiters.md) | 40 | 40 % | 100 % | ✅ |
93 +| [Behaviour Interactif](bhvr.md) | [`lever`](ats-lever.md) | 39 | 3 % | 100 % | ✅ |
94 +| [Transat A.T.](transatat1.md) | [`smartrecruiters`](ats-smartrecruiters.md) | 39 | 5 % | 97 % | ✅ |
95 +| [Promutuel Assurance](promutuel.md) | [`workday`](ats-workday.md) | 37 | 0 % | 100 % | ✅ |
96 +| [QSL](qsl.md) | [`smartrecruiters`](ats-smartrecruiters.md) | 37 | 38 % | 100 % | ✅ |
97 +| [Valsoft](valsoft_corp.md) | [`workable`](ats-workable.md) | 37 | 11 % | 100 % | ✅ |
98 +| [Side (PTW)](sideinc.md) | [`workable`](ats-workable.md) | 32 | 0 % | 100 % | ✅ |
99 +| [Service alimentaire Gordon](gfs.md) | [`workday`](ats-workday.md) | 31 | 55 % | 0 % | ✅ |
100 +| [Altasciences](altasciences.md) | [`workday`](ats-workday.md) | 29 | 0 % | 100 % | ✅ |
101 +| [Brand Momentum](brandmomentum.md) | [`breezy`](ats-breezy.md) | 27 | 67 % | 100 % | ✅ |
102 +| [CDPQ — Caisse de dépôt et placement du Québec](cdpq.md) | [`workday`](ats-workday.md) | 27 | 0 % | 100 % | ✅ |
103 +| [EXFO](exfo.md) | [`workday`](ats-workday.md) | 27 | 0 % | 100 % | ✅ |
104 +| [Scotts Canada (Fafard)](scottsmiraclegro.md) | [`workday`](ats-workday.md) | 27 | 4 % | 0 % | ✅ |
105 +| [Tecsys](tecsys.md) | [`workable`](ats-workable.md) | 27 | 0 % | 100 % | ✅ |
106 +| [Saputo](saputo.md) | [`workday`](ats-workday.md) | 25 | 80 % | 100 % | ✅ |
107 +| [AppDirect](appdirect.md) | [`greenhouse`](ats-greenhouse.md) | 23 | 26 % | 100 % | ✅ |
108 +| [Broccolini](broccolini.md) | [`bamboohr`](ats-bamboohr.md) | 23 | 0 % | 100 % | ✅ |
109 +| [Centre de services scolaire de Montréal](cssdm.md) | [`workland`](ats-workland.md) | 23 | 0 % | 0 % | ✅ |
110 +| [CIUSSS de l'Est-de-l'Île-de-Montréal](ciusss_est_montreal.md) | [`taleo`](ats-taleo.md) | 23 | 0 % | 100 % | ✅ |
111 +| [Intact Corporation financière](intactfc.md) | [`workday`](ats-workday.md) | 23 | 0 % | 100 % | ✅ |
112 +| [MEDFAR Solutions Cliniques](medfar.md) | [`smartrecruiters`](ats-smartrecruiters.md) | 23 | 0 % | 100 % | ✅ |
113 +| [Rio Tinto](riotinto.md) | [`workday`](ats-workday.md) | 23 | 0 % | 100 % | ✅ |
114 +| [Cirque du Soleil](cirquedusoleil.md) | [`lever`](ats-lever.md) | 22 | 0 % | 86 % | ✅ |
115 +| [McCarthy Tétrault](mccarthy_tetrault.md) | [`icims`](ats-icims.md) | 22 | 0 % | 100 % | ✅ |
116 +| [Messer Canada](messer_canada.md) | [`ultipro`](ats-ultipro.md) | 22 | 91 % | 100 % | ✅ |
117 +| [mthree](mthreerecruitingportal.md) | [`greenhouse`](ats-greenhouse.md) | 22 | 0 % | 95 % | ✅ |
118 +| [Xsolla](xsolla.md) | [`lever`](ats-lever.md) | 21 | 95 % | 95 % | ✅ |
119 +| [dcbel](dcbel.md) | [`bamboohr`](ats-bamboohr.md) | 20 | 0 % | 100 % | ✅ |
120 +| [Rodeo FX](rodeofx.md) | [`smartrecruiters`](ats-smartrecruiters.md) | 20 | 0 % | 100 % | ✅ |
121 +| [Vosker](vosker.md) | [`smartrecruiters`](ats-smartrecruiters.md) | 20 | 0 % | 100 % | ✅ |
122 +| [CAA-Québec](caaquebec.md) | [`workday`](ats-workday.md) | 19 | 16 % | 100 % | ✅ |
123 +| [Réseau de transport de la Capitale](rtc_quebec.md) | [`njoyn`](ats-njoyn.md) | 19 | 0 % | 0 % | ✅ |
124 +| [Agnico Eagle Mines](agnico_eagle.md) | [`taleo`](ats-taleo.md) | 18 | 0 % | 100 % | ✅ |
125 +| [Explorance](explorance.md) | [`bamboohr`](ats-bamboohr.md) | 18 | 0 % | 100 % | ✅ |
126 +| [Huawei Canada](huaweicanada.md) | [`recruitee`](ats-recruitee.md) | 18 | 11 % | 100 % | ✅ |
127 +| [OSEDEA](osedea.md) | [`lever`](ats-lever.md) | 18 | 0 % | 100 % | ✅ |
128 +| [Ville de Gatineau](ville_gatineau.md) | [`njoyn`](ats-njoyn.md) | 18 | 94 % | 0 % | ✅ |
129 +| [Vooban](vooban.md) | [`greenhouse`](ats-greenhouse.md) | 18 | 0 % | 100 % | ✅ |
130 +| [NOVIPRO](novipro.md) | [`breezy`](ats-breezy.md) | 17 | 0 % | 100 % | ✅ |
131 +| [Produits Labelink](labelink.md) | [`bamboohr`](ats-bamboohr.md) | 17 | 0 % | 100 % | ✅ |
132 +| [VO2 Group](vo2_group.md) | [`lever`](ats-lever.md) | 17 | 6 % | 100 % | ✅ |
133 +| [Alcoa Canada](alcoa.md) | [`workday`](ats-workday.md) | 16 | 12 % | 44 % | ✅ |
134 +| [BDC](bdc.md) | [`workday`](ats-workday.md) | 16 | 0 % | 100 % | ✅ |
135 +| [iA Groupe financier](ia_groupe.md) | [`workday`](ats-workday.md) | 16 | 6 % | 100 % | ✅ |
136 +| [Société de transport de Laval](stl_laval.md) | [`njoyn`](ats-njoyn.md) | 16 | 25 % | 0 % | ✅ |
137 +| [Spiria](spiria.md) | [`lever`](ats-lever.md) | 16 | 69 % | 100 % | ✅ |
138 +| [Valtech](valtech.md) | [`greenhouse`](ats-greenhouse.md) | 16 | 12 % | 100 % | ✅ |
139 +| [Ville de Terrebonne](ville_terrebonne.md) | [`njoyn`](ats-njoyn.md) | 16 | 88 % | 0 % | ✅ |
140 +| [Bell Textron Canada](bell_textron.md) | [`taleo`](ats-taleo.md) | 15 | 0 % | 100 % | ✅ |
141 +| [Gameloft](gameloft.md) | [`smartrecruiters`](ats-smartrecruiters.md) | 15 | 0 % | 100 % | ✅ |
142 +| [Réseau Mieux-Être](reseau_mieux_etre.md) | [`breezy`](ats-breezy.md) | 15 | 0 % | 100 % | ✅ |
143 +| [Sid Lee](sidlee.md) | [`greenhouse`](ats-greenhouse.md) | 15 | 0 % | 100 % | ✅ |
144 +| [Evolving Web](evolving_web.md) | [`workable`](ats-workable.md) | 14 | 0 % | 100 % | ✅ |
145 +| [LG2](lg2.md) | [`recruitee`](ats-recruitee.md) | 14 | 7 % | 100 % | ✅ |
146 +| [OPAL-RT Technologies](opalrt.md) | [`bamboohr`](ats-bamboohr.md) | 14 | 0 % | 100 % | ✅ |
147 +| [Investissement Québec](investquebec.md) | [`workday`](ats-workday.md) | 13 | 8 % | 100 % | ✅ |
148 +| [Logisco](logisco.md) | [`bamboohr`](ats-bamboohr.md) | 13 | 38 % | 100 % | ✅ |
149 +| [MicroHabitat](microhabitat.md) | [`breezy`](ats-breezy.md) | 13 | 100 % | 100 % | ✅ |
150 +| [Talan](talan.md) | [`smartrecruiters`](ats-smartrecruiters.md) | 13 | 0 % | 100 % | ✅ |
151 +| [Victoria Park Medispa](vicpark.md) | [`bamboohr`](ats-bamboohr.md) | 13 | 0 % | 92 % | ✅ |
152 +| [Bayshore HealthCare](bayshore.md) | [`taleo`](ats-taleo.md) | 12 | 0 % | 100 % | ✅ |
153 +| [GSK](gsk.md) | [`workday`](ats-workday.md) | 12 | 0 % | 83 % | ✅ |
154 +| [3 Brasseurs Canada](trois_brasseurs.md) | [`breezy`](ats-breezy.md) | 11 | 73 % | 100 % | ✅ |
155 +| [KPI Digital](kpidigital.md) | [`bamboohr`](ats-bamboohr.md) | 11 | 0 % | 100 % | ✅ |
156 +| [Mirego](mirego.md) | [`lever`](ats-lever.md) | 11 | 0 % | 100 % | ✅ |
157 +| [TSMG](tsmg.md) | [`lever`](ats-lever.md) | 11 | 0 % | 100 % | ✅ |
158 +| [AlayaCare](alayacare.md) | [`greenhouse`](ats-greenhouse.md) | 10 | 0 % | 100 % | ✅ |
159 +| [CAPREIT](capreit.md) | [`icims`](ats-icims.md) | 10 | 0 % | 100 % | ✅ |
160 +| [EQ3](eq3_ltd.md) | [`breezy`](ats-breezy.md) | 10 | 60 % | 100 % | ✅ |
161 +| [Fonds de solidarité FTQ](fondsftq.md) | [`workday`](ats-workday.md) | 10 | 0 % | 100 % | ✅ |
162 +| [JG Rive-Sud (GFS)](jgrivesud.md) | [`workday`](ats-workday.md) | 10 | 70 % | 0 % | ✅ |
163 +| [Lamour](lamour.md) | [`workable`](ats-workable.md) | 10 | 0 % | 100 % | ✅ |
164 +| [ADI - Albert Davidson Industries](adi_albert_davidson_industries.md) | [`breezy`](ats-breezy.md) | 9 | 100 % | 100 % | ✅ |
165 +| [Canadian Tire](canadiantirecorporation.md) | [`workday`](ats-workday.md) | 9 | 56 % | 100 % | ✅ |
166 +| [EDF Renouvelables Canada](edf_renouvelables.md) | [`icims`](ats-icims.md) | 9 | 67 % | 67 % | ✅ |
167 +| [Eminent Valet](eminent_valet.md) | [`workable`](ats-workable.md) | 9 | 100 % | 100 % | ✅ |
168 +| [Framestore](framestore.md) | [`recruitee`](ats-recruitee.md) | 9 | 0 % | 100 % | ✅ |
169 +| [J'Excelle](jexcelleinc.md) | [`smartrecruiters`](ats-smartrecruiters.md) | 9 | 0 % | 100 % | ✅ |
170 +| [Nora Pharma](nora_pharma.md) | [`breezy`](ats-breezy.md) | 9 | 100 % | 89 % | ✅ |
171 +| [SIA Innovations](siainnovationsinc.md) | [`greenhouse`](ats-greenhouse.md) | 9 | 56 % | 100 % | ✅ |
172 +| [Sun Life](sunlife.md) | [`workday`](ats-workday.md) | 9 | 0 % | 100 % | ✅ |
173 +| [Tetrix](tetrix.md) | [`ashby`](ats-ashby.md) | 9 | 100 % | 11 % | ✅ |
174 +| [Big Bang](bigbang.md) | [`bamboohr`](ats-bamboohr.md) | 8 | 25 % | 100 % | ✅ |
175 +| [Botpress](botpress.md) | [`workable`](ats-workable.md) | 8 | 0 % | 100 % | ✅ |
176 +| [CF Montréal](cfmontreal.md) | [`smartrecruiters`](ats-smartrecruiters.md) | 8 | 0 % | 100 % | ✅ |
177 +| [GURUS Solutions](gurussolutions.md) | [`greenhouse`](ats-greenhouse.md) | 8 | 0 % | 100 % | ✅ |
178 +| [LIDD Consultants](lidd.md) | [`workable`](ats-workable.md) | 8 | 0 % | 100 % | ✅ |
179 +| [Mila — Institut québécois d'IA](mila_2.md) | [`workable`](ats-workable.md) | 8 | 0 % | 100 % | ✅ |
180 +| [Nuovo Photography](nuovophotography.md) | [`workable`](ats-workable.md) | 8 | 12 % | 100 % | ✅ |
181 +| [Omni Hôtel Mont-Royal](omni_hotels_horaire.md) | [`icims`](ats-icims.md) | 8 | 50 % | 100 % | ✅ |
182 +| [Omni Hôtel Mont-Royal](omni_hotels_gestion.md) | [`icims`](ats-icims.md) | 8 | 50 % | 100 % | ✅ |
183 +| [People Can Fly](peoplecanfly.md) | [`smartrecruiters`](ats-smartrecruiters.md) | 8 | 0 % | 100 % | ✅ |
184 +| [AJ Walter Aviation](ajwalter.md) | [`recruitee`](ats-recruitee.md) | 7 | 0 % | 100 % | ✅ |
185 +| [Devimco Appartements](devimco.md) | [`bamboohr`](ats-bamboohr.md) | 7 | 14 % | 100 % | ✅ |
186 +| [Luqia (INO)](ino_ca.md) | [`breezy`](ats-breezy.md) | 7 | 0 % | 100 % | ✅ |
187 +| [Petal](petalmd.md) | [`recruitee`](ats-recruitee.md) | 7 | 14 % | 100 % | ✅ |
188 +| [Robotiq](robotiq.md) | [`bamboohr`](ats-bamboohr.md) | 7 | 0 % | 100 % | ✅ |
189 +| [Church & Dwight Canada](churchdwight.md) | [`workday`](ats-workday.md) | 6 | 0 % | 100 % | ✅ |
190 +| [EQ Bank](eqbank.md) | [`lever`](ats-lever.md) | 6 | 17 % | 50 % | ✅ |
191 +| [Hopper](hopper.md) | [`ashby`](ats-ashby.md) | 6 | 0 % | 67 % | ✅ |
192 +| [Mattel (Mega Bloks)](mattelinc.md) | [`smartrecruiters`](ats-smartrecruiters.md) | 6 | 0 % | 100 % | ✅ |
193 +| [Mitsubishi HC Capital Canada](mitsubishi_hc_capital.md) | [`adp`](ats-adp.md) | 6 | 50 % | 100 % | ✅ |
194 +| [MSI Gestion immobilière](msi_gestion.md) | [`adp`](ats-adp.md) | 6 | 100 % | 100 % | ✅ |
195 +| [MXO](mxo.md) | [`bamboohr`](ats-bamboohr.md) | 6 | 100 % | 0 % | ✅ |
196 +| [Nexapp](nexapp.md) | [`bamboohr`](ats-bamboohr.md) | 6 | 0 % | 100 % | ✅ |
197 +| [North West Rubber](northwestrubber.md) | [`bamboohr`](ats-bamboohr.md) | 6 | 0 % | 100 % | ✅ |
198 +| [Portage CyberTech](portagecybertech.md) | [`bamboohr`](ats-bamboohr.md) | 6 | 17 % | 100 % | ✅ |
199 +| [Sweat Pants Agency](sweat_pants_agency.md) | [`workable`](ats-workable.md) | 6 | 100 % | 100 % | ✅ |
200 +| [Triotech](triotech.md) | [`bamboohr`](ats-bamboohr.md) | 6 | 17 % | 100 % | ✅ |
201 +| [US Mobile](usmobile.md) | [`lever`](ats-lever.md) | 6 | 100 % | 100 % | ✅ |
202 +| [Adèle Express](adeleexpressfr.md) | [`recruitee`](ats-recruitee.md) | 5 | 60 % | 100 % | ✅ |
203 +| [Alphanumeric Systems](alphanumeric_systems.md) | [`breezy`](ats-breezy.md) | 5 | 100 % | 100 % | ✅ |
204 +| [Astucemedia](astucemedia.md) | [`smartrecruiters`](ats-smartrecruiters.md) | 5 | 0 % | 100 % | ✅ |
205 +| [Aviya Aerospace Systems](aviyatech.md) | [`lever`](ats-lever.md) | 5 | 0 % | 100 % | ✅ |
206 +| [Distro](distro.md) | [`lever`](ats-lever.md) | 5 | 100 % | 100 % | ✅ |
207 +| [Lush Cosmétiques](lush.md) | [`greenhouse`](ats-greenhouse.md) | 5 | 100 % | 100 % | ✅ |
208 +| [Mistral AI](mistral_ai.md) | [`ashby`](ats-ashby.md) | 5 | 0 % | 100 % | ✅ |
209 +| [Médialo](medialo.md) | [`recruitee`](ats-recruitee.md) | 5 | 0 % | 80 % | ✅ |
210 +| [Poka](poka.md) | [`greenhouse`](ats-greenhouse.md) | 5 | 0 % | 100 % | ✅ |
211 +| [Propriétés Scalia](scalia.md) | [`bamboohr`](ats-bamboohr.md) | 5 | 0 % | 100 % | ✅ |
212 +| [Raymond Chabot Grant Thornton](rcgt.md) | [`workday`](ats-workday.md) | 5 | 0 % | 100 % | ✅ |
213 +| [Surmesur](surmesur.md) | [`bamboohr`](ats-bamboohr.md) | 5 | 80 % | 100 % | ✅ |
214 +| [TandemLaunch](tandemlaunch.md) | [`greenhouse`](ats-greenhouse.md) | 5 | 40 % | 100 % | ✅ |
215 +| [Toon Boom Animation](toonboom.md) | [`bamboohr`](ats-bamboohr.md) | 5 | 0 % | 100 % | ✅ |
216 +| [VOXDATA](voxdata.md) | [`breezy`](ats-breezy.md) | 5 | 100 % | 80 % | ✅ |
217 +| [Broadsign](broadsign.md) | [`greenhouse`](ats-greenhouse.md) | 4 | 0 % | 100 % | ✅ |
218 +| [EOS Aircraft](eosaircraftinc.md) | [`bamboohr`](ats-bamboohr.md) | 4 | 0 % | 100 % | ✅ |
219 +| [HoYoverse](hoyoverse.md) | [`smartrecruiters`](ats-smartrecruiters.md) | 4 | 0 % | 100 % | ✅ |
220 +| [Korem](korem.md) | [`bamboohr`](ats-bamboohr.md) | 4 | 0 % | 100 % | ✅ |
221 +| [Mitacs](mitacs.md) | [`bamboohr`](ats-bamboohr.md) | 4 | 100 % | 100 % | ✅ |
222 +| [Nomic Bio](nomic.md) | [`ashby`](ats-ashby.md) | 4 | 0 % | 75 % | ✅ |
223 +| [Pfizer Canada](pfizer.md) | [`workday`](ats-workday.md) | 4 | 100 % | 0 % | ✅ |
224 +| [Plusgrade](plusgrade.md) | [`workday`](ats-workday.md) | 4 | 0 % | 100 % | ✅ |
225 +| [Vaco](vaco.md) | [`greenhouse`](ats-greenhouse.md) | 4 | 75 % | 100 % | ✅ |
226 +| [Bardel Entertainment](bardel_entertainment.md) | [`workable`](ats-workable.md) | 3 | 33 % | 100 % | ✅ |
227 +| [Brasseries Sleeman (Unibroue)](sleeman.md) | [`workday`](ats-workday.md) | 3 | 33 % | 0 % | ✅ |
228 +| [DiliTrust](dilitrust.md) | [`lever`](ats-lever.md) | 3 | 0 % | 100 % | ✅ |
229 +| [Flinks](flinks.md) | [`workable`](ats-workable.md) | 3 | 100 % | 100 % | ✅ |
230 +| [Fuse Energy](fuse.md) | [`ashby`](ats-ashby.md) | 3 | 0 % | 100 % | ✅ |
231 +| [Gearbox Studio Québec](gearboxquebec.md) | [`greenhouse`](ats-greenhouse.md) | 3 | 0 % | 100 % | ✅ |
232 +| [Mistplay](mistplay.md) | [`lever`](ats-lever.md) | 3 | 33 % | 100 % | ✅ |
233 +| [No Saint](no_saint.md) | [`ashby`](ats-ashby.md) | 3 | 0 % | 100 % | ✅ |
234 +| [Rethink](rethinkcanada.md) | [`bamboohr`](ats-bamboohr.md) | 3 | 0 % | 100 % | ✅ |
235 +| [Squeeze Studio Animation](squeezestudio.md) | [`recruitee`](ats-recruitee.md) | 3 | 0 % | 67 % | ✅ |
236 +| [Unit8](unit8.md) | [`workable`](ats-workable.md) | 3 | 0 % | 100 % | ✅ |
237 +| [Alimentiv](alimentiv_2.md) | [`lever`](ats-lever.md) | 2 | 100 % | 50 % | ✅ |
238 +| [Aliments Ouimet-Cordon Bleu inc.](cordonbleu.md) | [`bamboohr`](ats-bamboohr.md) | 2 | 50 % | 100 % | ✅ |
239 +| [BIXI Montréal](biximontreal.md) | [`recruitee`](ats-recruitee.md) | 2 | 100 % | 100 % | ✅ |
240 +| [Dulcedo Management](dulcedo.md) | [`lever`](ats-lever.md) | 2 | 50 % | 50 % | ✅ |
241 +| [EVLO (Hydro-Québec)](evlo.md) | [`bamboohr`](ats-bamboohr.md) | 2 | 0 % | 100 % | ✅ |
242 +| [Fenêtres Concept](fenetresconcept.md) | [`bamboohr`](ats-bamboohr.md) | 2 | 100 % | 100 % | ✅ |
243 +| [Flare (cybersécurité)](flare.md) | [`bamboohr`](ats-bamboohr.md) | 2 | 50 % | 100 % | ✅ |
244 +| [Groupe BC2](bc2.md) | [`bamboohr`](ats-bamboohr.md) | 2 | 0 % | 100 % | ✅ |
245 +| [On Running](onrunning.md) | [`greenhouse`](ats-greenhouse.md) | 2 | 0 % | 100 % | ✅ |
246 +| [OTT Financial](ott.md) | [`bamboohr`](ats-bamboohr.md) | 2 | 0 % | 100 % | ✅ |
247 +| [Playmind](playmind.md) | [`smartrecruiters`](ats-smartrecruiters.md) | 2 | 0 % | 100 % | ✅ |
248 +| [Potloc](potloc.md) | [`lever`](ats-lever.md) | 2 | 0 % | 100 % | ✅ |
249 +| [ServiceNow](servicenow.md) | [`smartrecruiters`](ats-smartrecruiters.md) | 2 | 0 % | 100 % | ✅ |
250 +| [Spreedly](spreedly.md) | [`lever`](ats-lever.md) | 2 | 0 % | 100 % | ✅ |
251 +| [Suncor Énergie](suncor.md) | [`workday`](ats-workday.md) | 2 | 0 % | 100 % | ✅ |
252 +| [Vaporus](vaporus_inc.md) | [`breezy`](ats-breezy.md) | 2 | 100 % | 50 % | ✅ |
253 +| [Vasco](vasco.md) | [`ashby`](ats-ashby.md) | 2 | 0 % | 100 % | ✅ |
254 +| [Venture Media](venturemedia.md) | [`smartrecruiters`](ats-smartrecruiters.md) | 2 | 50 % | 100 % | ✅ |
255 +| [VML Canada](vmlcanadaen.md) | [`greenhouse`](ats-greenhouse.md) | 2 | 50 % | 100 % | ✅ |
256 +| [Ziptrek Tremblant](ziptrekeco.md) | [`bamboohr`](ats-bamboohr.md) | 2 | 100 % | 0 % | ✅ |
257 +| [Amilia](amilia.md) | [`recruitee`](ats-recruitee.md) | 1 | 0 % | 0 % | ✅ |
258 +| [Atecna](atecna_montreal.md) | [`workable`](ats-workable.md) | 1 | 0 % | 100 % | ✅ |
259 +| [Canada Global Recruitment](canada_global.md) | [`breezy`](ats-breezy.md) | 1 | 0 % | 0 % | ✅ |
260 +| [Charger Logistics](charger_logistics_inc.md) | [`workable`](ats-workable.md) | 1 | 0 % | 100 % | ✅ |
261 +| [GoLogic](gologic.md) | [`smartrecruiters`](ats-smartrecruiters.md) | 1 | 0 % | 100 % | ✅ |
262 +| [Industrious](industrious.md) | [`ashby`](ats-ashby.md) | 1 | 0 % | 100 % | ✅ |
263 +| [NATIONAL](national.md) | [`greenhouse`](ats-greenhouse.md) | 1 | 0 % | 100 % | ✅ |
264 +| [Poulet Rouge](pouletrouge.md) | [`bamboohr`](ats-bamboohr.md) | 1 | 0 % | 0 % | ✅ |
265 +| [Samsara](samsara.md) | [`greenhouse`](ats-greenhouse.md) | 1 | 100 % | 100 % | ✅ |
266 +| [Sparkgrid](sparkgrid.md) | [`smartrecruiters`](ats-smartrecruiters.md) | 1 | 0 % | 100 % | ✅ |
267 +| [Stelpro](stelpro.md) | [`smartrecruiters`](ats-smartrecruiters.md) | 1 | 0 % | 100 % | ✅ |
268 +| [Talsom](talsom.md) | [`smartrecruiters`](ats-smartrecruiters.md) | 1 | 0 % | 100 % | ✅ |
269 +| [Xplornet](xplornet.md) | [`smartrecruiters`](ats-smartrecruiters.md) | 1 | 0 % | 100 % | ✅ |
270 +| [YouSet](youset.md) | [`breezy`](ats-breezy.md) | 1 | 0 % | 100 % | ✅ |
271 +| [Industries Lassonde](lassonde.md) | [`adp`](ats-adp.md) | 0 | — | — | ✅ |
272 +| [TTC Global](ttcglobal.md) | [`greenhouse`](ats-greenhouse.md) | 0 | — | — | ✅ |
273 +
274 +## Régénérer cette documentation
275 +
276 +```bash
277 +cd ~/apps/job-ka && .venv/bin/python scripts/gen_connector_docs.py
278 +```
added docs/connecteurs/adeleexpressfr.md +105 −0
@@ -0,0 +1,105 @@
1 +<!--
2 +=============================================================================
3 +Job·Ka — Groupe KA
4 +Auteur : Simon-Pierre Boucher
5 +Contact : contact@spboucher.ai
6 +Fichier : docs/connecteurs/adeleexpressfr.md
7 +Rôle : Fiche connecteur — Adèle Express (employeur direct, ATS recruitee)
8 +Généré : 2026-08-18 11:37 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 + relancer le script pour régénérer.
10 +=============================================================================
11 +-->
12 +
13 +# Adèle Express (`adeleexpressfr`)
14 +
15 +**Employeur direct** · Plateforme ATS : [`recruitee`](ats-recruitee.md) · Statut registre : actif · Connecteur : `jobka/connectors/adeleexpressfr.py`
16 +
17 +## Description
18 +
19 +- **Site** : [Adèle Express]()
20 +- **Page carrières** : https://adeleexpressfr.recruitee.com
21 +- **Secteurs** : Transport
22 +- **Région** : Montréal
23 +- Offres marquées **« Offre directe »** dans l'app (badge) : la candidature se fait chez l'employeur, jamais via un intermédiaire.
24 +
25 +## Accès
26 +
27 +- **Mécanique** : voir la fiche plateforme [`ats-recruitee.md`](ats-recruitee.md) — API JSON publique du site carrières, backend `requests` direct (Scrapfly seulement si indiqué sur la fiche plateforme).
28 +- **Identifiants du tenant** (attributs du connecteur) :
29 +
30 +| Attribut | Valeur |
31 +|---|---|
32 +| `EMPLOYER` | `Adèle Express` |
33 +| `ORG` | `adeleexpressfr` |
34 +- **Throttle** : 1.0 s entre requêtes.
35 +- **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).
36 +
37 +## Champs → schéma
38 +
39 +Complétude mesurée sur les **5 offres actives** de la source (base live, 2026-08-18 11:37 EDT).
40 +
41 +| Champ (`jobs.*`) | Rôle | Complétude |
42 +|---|---|---|
43 +| `title` — Titre | titre du poste | 100 % |
44 +| `employer` — Employeur | nom de l'entreprise | 100 % |
45 +| `url` — URL | lien direct vers l'offre originale | 100 % |
46 +| `description` — Description | texte complet (HTML nettoyé) | 100 % |
47 +| `city` — Ville | municipalité normalisée | 100 % |
48 +| `region` — Région | région administrative | 100 % |
49 +| `address` — Adresse | adresse du lieu de travail | 0 % |
50 +| `postal_code` — Code postal | code postal si publié | 0 % |
51 +| `work_mode` — Mode | presentiel / hybride / teletravail | 100 % |
52 +| `employment_type` — Type | temps_plein / temps_partiel / … | 100 % |
53 +| `salary` — Salaire ($) | bornes numériques normalisées $/h et $/an | 60 % |
54 +| `salary_label` — Libellé salaire | texte salarial original | 0 % |
55 +| `benefits` — Avantages | avantages sociaux publiés (JSON) | 0 % |
56 +| `requirements` — Exigences | scolarité, expérience, langues (JSON) | 0 % |
57 +| `date_posted` — Date de parution | ISO 8601 | 100 % |
58 +| `date_deadline` — Date limite | date limite pour postuler | 0 % |
59 +| `category` — Catégorie | taxonomie interne (TI, Santé, …) | 0 % |
60 +| `gps` — GPS | lat/lng (géocodage sans invention) | 100 % |
61 +
62 +Exemple réel : *Professionnel de ménage - Pour entretien ménager à domicile - Offre / Juin 2026* — Montréal · ∅ · parue le 2026-06-23.
63 +
64 +## Fréquence & budgets
65 +
66 +- **Cadence** : resynchronisation **horaire** (PM2 `job-ka-sync` = `run.py watch 60`), suivie du géocodage en lot puis de la déduplication inter-sources.
67 +- **Throttle** : 1.0 s minimum entre deux requêtes vers la source (`request_delay`).
68 +- Cache BD des pages détail (`detail_cache`) : le détail d'une offre n'est re-téléchargé que si sa ligne de liste change.
69 +
70 +## Volumétrie & complétude live
71 +
72 +*(mesuré le 2026-08-18 11:37 EDT dans `data/jobka.db`)*
73 +
74 +- **Offres en base** : 5 (dont **5 actives**, 0 masquées comme doublons `dup_of`)
75 +- **Salaire** : 3/5 actives (60 %)
76 +- **GPS** : 5/5 actives (100 %)
77 +- **Mode** : 5/5 actives (100 %)
78 +- **Parution** : 5/5 actives (100 %)
79 +- **Dernier sync** : 2026-08-18 11:12 — trouvées 5, +0, ~0, -0
80 +- **Syncs enregistrés** (`sync_log`) : 15
81 +
82 +## Erreurs & dépannage
83 +
84 +Aucune erreur dans `sync_log` pour cette source.
85 +
86 +- Rejouer un sync isolé : `.venv/bin/python run.py sync adeleexpressfr` puis inspecter `sync_log` : `sqlite3 data/jobka.db "SELECT * FROM sync_log WHERE source='adeleexpressfr' ORDER BY ts DESC LIMIT 5;"`
87 +- Garde-fous : une source qui retourne ≤ 25 % de sa médiane historique déclenche une alerte et les retraits sont suspendus ; une offre doit manquer 2 syncs consécutifs avant `active=0`.
88 +
89 +## Licence / conformité
90 +
91 +**Flux public du site carrières officiel de l'employeur** (API JSON de l'ATS ou HTML rendu serveur) — le même contenu que la page carrière affiche publiquement, prévu pour la diffusion des offres, sans authentification. Chaque offre conserve son URL originale et le bouton « Postuler chez Adèle Express » renvoie chez l'employeur. Aucune donnée personnelle de candidat n'est collectée. User-Agent identifié `JobKaBot/1.0 (+https://www.job-ka.com; contact@spboucher.ai)` sur les accès directs ; requêtes throttlées et plafonnées par budgets.
92 +
93 +## Historique
94 +
95 +**Mission connecteurs du 2026-08-18** — passage de 135 à 217 employeurs directs connectés, de 9 à 17 plateformes ATS, ajout de 3 portails agrégateurs et du canal de dépôt direct :
96 +- `fd4bfc8` qualité lieux : rejet des villes hors Québec, bâtiments McGill → Montréal ;
97 +- `5a66f48` +59 employeurs (sondage massif d'ATS + détection de pages carrières) ;
98 +- `4917d57` 8 nouveaux ATS (Taleo, Njoyn, UltiPro, iCIMS, SuccessFactors, ADP WFN, Digital Recruiters, Workland) + 23 employeurs publics/parapublics ;
99 +- `f6e7571` portails Guichet-Emplois, Jobillico, Espresso-Jobs — l'offre directe gagne toujours la canonique (dédup) ;
100 +- `744cbfc` badge « Offre directe », stats directes/portails, dépôt direct employeurs ;
101 +- `1604ff9` reprise sur coupure WAF Guichet-Emplois (retry + acquis partiel).
102 +
103 +Commits touchant `jobka/connectors/adeleexpressfr.py` :
104 +
105 +- `4657429` 2026-08-17 Création massive : 135 connecteurs employeurs québécois sur 9 plateformes ATS
added docs/connecteurs/adi_albert_davidson_industries.md +105 −0
@@ -0,0 +1,105 @@
1 +<!--
2 +=============================================================================
3 +Job·Ka — Groupe KA
4 +Auteur : Simon-Pierre Boucher
5 +Contact : contact@spboucher.ai
6 +Fichier : docs/connecteurs/adi_albert_davidson_industries.md
7 +Rôle : Fiche connecteur — ADI - Albert Davidson Industries (employeur direct, ATS breezy)
8 +Généré : 2026-08-18 11:37 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 + relancer le script pour régénérer.
10 +=============================================================================
11 +-->
12 +
13 +# ADI - Albert Davidson Industries (`adi_albert_davidson_industries`)
14 +
15 +**Employeur direct** · Plateforme ATS : [`breezy`](ats-breezy.md) · Statut registre : actif · Connecteur : `jobka/connectors/adi_albert_davidson_industries.py`
16 +
17 +## Description
18 +
19 +- **Site** : [ADI - Albert Davidson Industries]()
20 +- **Page carrières** : https://adi-albert-davidson-industries.breezy.hr
21 +- **Secteurs** : Manufacture
22 +- **Région** : Pointe-Claire
23 +- Offres marquées **« Offre directe »** dans l'app (badge) : la candidature se fait chez l'employeur, jamais via un intermédiaire.
24 +
25 +## Accès
26 +
27 +- **Mécanique** : voir la fiche plateforme [`ats-breezy.md`](ats-breezy.md) — API JSON publique du site carrières, backend `requests` direct (Scrapfly seulement si indiqué sur la fiche plateforme).
28 +- **Identifiants du tenant** (attributs du connecteur) :
29 +
30 +| Attribut | Valeur |
31 +|---|---|
32 +| `EMPLOYER` | `ADI - Albert Davidson Industries` |
33 +| `ORG` | `adi-albert-davidson-industries` |
34 +- **Throttle** : 1.0 s entre requêtes.
35 +- **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).
36 +
37 +## Champs → schéma
38 +
39 +Complétude mesurée sur les **9 offres actives** de la source (base live, 2026-08-18 11:37 EDT).
40 +
41 +| Champ (`jobs.*`) | Rôle | Complétude |
42 +|---|---|---|
43 +| `title` — Titre | titre du poste | 100 % |
44 +| `employer` — Employeur | nom de l'entreprise | 100 % |
45 +| `url` — URL | lien direct vers l'offre originale | 100 % |
46 +| `description` — Description | texte complet (HTML nettoyé) | 100 % |
47 +| `city` — Ville | municipalité normalisée | 100 % |
48 +| `region` — Région | région administrative | 100 % |
49 +| `address` — Adresse | adresse du lieu de travail | 0 % |
50 +| `postal_code` — Code postal | code postal si publié | 0 % |
51 +| `work_mode` — Mode | presentiel / hybride / teletravail | 11 % |
52 +| `employment_type` — Type | temps_plein / temps_partiel / … | 100 % |
53 +| `salary` — Salaire ($) | bornes numériques normalisées $/h et $/an | 100 % |
54 +| `salary_label` — Libellé salaire | texte salarial original | 100 % |
55 +| `benefits` — Avantages | avantages sociaux publiés (JSON) | 0 % |
56 +| `requirements` — Exigences | scolarité, expérience, langues (JSON) | 0 % |
57 +| `date_posted` — Date de parution | ISO 8601 | 100 % |
58 +| `date_deadline` — Date limite | date limite pour postuler | 0 % |
59 +| `category` — Catégorie | taxonomie interne (TI, Santé, …) | 100 % |
60 +| `gps` — GPS | lat/lng (géocodage sans invention) | 100 % |
61 +
62 +Exemple réel : *Assistant Production Director* — Pointe-Claire · $28 – $34 / hour · parue le 2026-06-08.
63 +
64 +## Fréquence & budgets
65 +
66 +- **Cadence** : resynchronisation **horaire** (PM2 `job-ka-sync` = `run.py watch 60`), suivie du géocodage en lot puis de la déduplication inter-sources.
67 +- **Throttle** : 1.0 s minimum entre deux requêtes vers la source (`request_delay`).
68 +- Cache BD des pages détail (`detail_cache`) : le détail d'une offre n'est re-téléchargé que si sa ligne de liste change.
69 +
70 +## Volumétrie & complétude live
71 +
72 +*(mesuré le 2026-08-18 11:37 EDT dans `data/jobka.db`)*
73 +
74 +- **Offres en base** : 9 (dont **9 actives**, 0 masquées comme doublons `dup_of`)
75 +- **Salaire** : 9/9 actives (100 %)
76 +- **GPS** : 9/9 actives (100 %)
77 +- **Mode** : 1/9 actives (11 %)
78 +- **Parution** : 9/9 actives (100 %)
79 +- **Dernier sync** : 2026-08-18 11:12 — trouvées 9, +0, ~0, -0
80 +- **Syncs enregistrés** (`sync_log`) : 15
81 +
82 +## Erreurs & dépannage
83 +
84 +Aucune erreur dans `sync_log` pour cette source.
85 +
86 +- Rejouer un sync isolé : `.venv/bin/python run.py sync adi_albert_davidson_industries` puis inspecter `sync_log` : `sqlite3 data/jobka.db "SELECT * FROM sync_log WHERE source='adi_albert_davidson_industries' ORDER BY ts DESC LIMIT 5;"`
87 +- Garde-fous : une source qui retourne ≤ 25 % de sa médiane historique déclenche une alerte et les retraits sont suspendus ; une offre doit manquer 2 syncs consécutifs avant `active=0`.
88 +
89 +## Licence / conformité
90 +
91 +**Flux public du site carrières officiel de l'employeur** (API JSON de l'ATS ou HTML rendu serveur) — le même contenu que la page carrière affiche publiquement, prévu pour la diffusion des offres, sans authentification. Chaque offre conserve son URL originale et le bouton « Postuler chez ADI - Albert Davidson Industries » renvoie chez l'employeur. Aucune donnée personnelle de candidat n'est collectée. User-Agent identifié `JobKaBot/1.0 (+https://www.job-ka.com; contact@spboucher.ai)` sur les accès directs ; requêtes throttlées et plafonnées par budgets.
92 +
93 +## Historique
94 +
95 +**Mission connecteurs du 2026-08-18** — passage de 135 à 217 employeurs directs connectés, de 9 à 17 plateformes ATS, ajout de 3 portails agrégateurs et du canal de dépôt direct :
96 +- `fd4bfc8` qualité lieux : rejet des villes hors Québec, bâtiments McGill → Montréal ;
97 +- `5a66f48` +59 employeurs (sondage massif d'ATS + détection de pages carrières) ;
98 +- `4917d57` 8 nouveaux ATS (Taleo, Njoyn, UltiPro, iCIMS, SuccessFactors, ADP WFN, Digital Recruiters, Workland) + 23 employeurs publics/parapublics ;
99 +- `f6e7571` portails Guichet-Emplois, Jobillico, Espresso-Jobs — l'offre directe gagne toujours la canonique (dédup) ;
100 +- `744cbfc` badge « Offre directe », stats directes/portails, dépôt direct employeurs ;
101 +- `1604ff9` reprise sur coupure WAF Guichet-Emplois (retry + acquis partiel).
102 +
103 +Commits touchant `jobka/connectors/adi_albert_davidson_industries.py` :
104 +
105 +- `4657429` 2026-08-17 Création massive : 135 connecteurs employeurs québécois sur 9 plateformes ATS
added docs/connecteurs/agnico_eagle.md +112 −0
@@ -0,0 +1,112 @@
1 +<!--
2 +=============================================================================
3 +Job·Ka — Groupe KA
4 +Auteur : Simon-Pierre Boucher
5 +Contact : contact@spboucher.ai
6 +Fichier : docs/connecteurs/agnico_eagle.md
7 +Rôle : Fiche connecteur — Agnico Eagle Mines (employeur direct, ATS taleo)
8 +Généré : 2026-08-18 11:37 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 + relancer le script pour régénérer.
10 +=============================================================================
11 +-->
12 +
13 +# Agnico Eagle Mines (`agnico_eagle`)
14 +
15 +**Employeur direct** · Plateforme ATS : [`taleo`](ats-taleo.md) · Statut registre : actif · Connecteur : `jobka/connectors/agnico_eagle.py`
16 +
17 +## Description
18 +
19 +- **Site** : [Agnico Eagle Mines](https://www.agnicoeagle.com)
20 +- **Page carrières** : https://agnicoeagle.taleo.net/careersection/2/jobsearch.ftl?lang=fr
21 +- **Secteurs** : Mines, Ingénierie, Métiers spécialisés
22 +- **Région** : Abitibi-Témiscamingue, Malartic, Rouyn-Noranda
23 +- Offres marquées **« Offre directe »** dans l'app (badge) : la candidature se fait chez l'employeur, jamais via un intermédiaire.
24 +
25 +## Accès
26 +
27 +- **Mécanique** : voir la fiche plateforme [`ats-taleo.md`](ats-taleo.md) — API JSON publique du site carrières, backend `requests` direct (Scrapfly seulement si indiqué sur la fiche plateforme).
28 +- **Identifiants du tenant** (attributs du connecteur) :
29 +
30 +| Attribut | Valeur |
31 +|---|---|
32 +| `EMPLOYER` | `Agnico Eagle Mines` |
33 +| `HOST` | `agnicoeagle` |
34 +| `LANG` | `fr` |
35 +| `SECTION` | `2` |
36 +- **Throttle** : 1.0 s entre requêtes.
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).
38 +
39 +## Champs → schéma
40 +
41 +Complétude mesurée sur les **18 offres actives** de la source (base live, 2026-08-18 11:37 EDT).
42 +
43 +| Champ (`jobs.*`) | Rôle | Complétude |
44 +|---|---|---|
45 +| `title` — Titre | titre du poste | 100 % |
46 +| `employer` — Employeur | nom de l'entreprise | 100 % |
47 +| `url` — URL | lien direct vers l'offre originale | 100 % |
48 +| `description` — Description | texte complet (HTML nettoyé) | 100 % |
49 +| `city` — Ville | municipalité normalisée | 100 % |
50 +| `region` — Région | région administrative | 100 % |
51 +| `address` — Adresse | adresse du lieu de travail | 0 % |
52 +| `postal_code` — Code postal | code postal si publié | 0 % |
53 +| `work_mode` — Mode | presentiel / hybride / teletravail | 0 % |
54 +| `employment_type` — Type | temps_plein / temps_partiel / … | 6 % |
55 +| `salary` — Salaire ($) | bornes numériques normalisées $/h et $/an | 0 % |
56 +| `salary_label` — Libellé salaire | texte salarial original | 0 % |
57 +| `benefits` — Avantages | avantages sociaux publiés (JSON) | 0 % |
58 +| `requirements` — Exigences | scolarité, expérience, langues (JSON) | 0 % |
59 +| `date_posted` — Date de parution | ISO 8601 | 94 % |
60 +| `date_deadline` — Date limite | date limite pour postuler | 0 % |
61 +| `category` — Catégorie | taxonomie interne (TI, Santé, …) | 100 % |
62 +| `gps` — GPS | lat/lng (géocodage sans invention) | 100 % |
63 +
64 +Exemple réel : *Coordonnateur ressources humaines – processus et projets* — Québec · ∅ · parue le 2026-08-31.
65 +
66 +## Fréquence & budgets
67 +
68 +- **Cadence** : resynchronisation **horaire** (PM2 `job-ka-sync` = `run.py watch 60`), suivie du géocodage en lot puis de la déduplication inter-sources.
69 +- **Throttle** : 1.0 s minimum entre deux requêtes vers la source (`request_delay`).
70 +- **Budgets / plafonds (variables d'environnement)** :
71 +
72 +| Variable | Défaut |
73 +|---|---|
74 +| `JOBKA_TALEO_DETAIL_LIMIT` | `120` |
75 +- Cache BD des pages détail (`detail_cache`) : le détail d'une offre n'est re-téléchargé que si sa ligne de liste change.
76 +
77 +## Volumétrie & complétude live
78 +
79 +*(mesuré le 2026-08-18 11:37 EDT dans `data/jobka.db`)*
80 +
81 +- **Offres en base** : 18 (dont **18 actives**, 0 masquées comme doublons `dup_of`)
82 +- **Salaire** : 0/18 actives (0 %)
83 +- **GPS** : 18/18 actives (100 %)
84 +- **Mode** : 0/18 actives (0 %)
85 +- **Parution** : 17/18 actives (94 %)
86 +- **Dernier sync** : 2026-08-18 11:12 — trouvées 18, +0, ~0, -0
87 +- **Syncs enregistrés** (`sync_log`) : 3
88 +
89 +## Erreurs & dépannage
90 +
91 +Aucune erreur dans `sync_log` pour cette source.
92 +
93 +- Rejouer un sync isolé : `.venv/bin/python run.py sync agnico_eagle` puis inspecter `sync_log` : `sqlite3 data/jobka.db "SELECT * FROM sync_log WHERE source='agnico_eagle' ORDER BY ts DESC LIMIT 5;"`
94 +- Garde-fous : une source qui retourne ≤ 25 % de sa médiane historique déclenche une alerte et les retraits sont suspendus ; une offre doit manquer 2 syncs consécutifs avant `active=0`.
95 +
96 +## Licence / conformité
97 +
98 +**Flux public du site carrières officiel de l'employeur** (API JSON de l'ATS ou HTML rendu serveur) — le même contenu que la page carrière affiche publiquement, prévu pour la diffusion des offres, sans authentification. Chaque offre conserve son URL originale et le bouton « Postuler chez Agnico Eagle Mines » renvoie chez l'employeur. Aucune donnée personnelle de candidat n'est collectée. User-Agent identifié `JobKaBot/1.0 (+https://www.job-ka.com; contact@spboucher.ai)` sur les accès directs ; requêtes throttlées et plafonnées par budgets.
99 +
100 +## Historique
101 +
102 +**Mission connecteurs du 2026-08-18** — passage de 135 à 217 employeurs directs connectés, de 9 à 17 plateformes ATS, ajout de 3 portails agrégateurs et du canal de dépôt direct :
103 +- `fd4bfc8` qualité lieux : rejet des villes hors Québec, bâtiments McGill → Montréal ;
104 +- `5a66f48` +59 employeurs (sondage massif d'ATS + détection de pages carrières) ;
105 +- `4917d57` 8 nouveaux ATS (Taleo, Njoyn, UltiPro, iCIMS, SuccessFactors, ADP WFN, Digital Recruiters, Workland) + 23 employeurs publics/parapublics ;
106 +- `f6e7571` portails Guichet-Emplois, Jobillico, Espresso-Jobs — l'offre directe gagne toujours la canonique (dédup) ;
107 +- `744cbfc` badge « Offre directe », stats directes/portails, dépôt direct employeurs ;
108 +- `1604ff9` reprise sur coupure WAF Guichet-Emplois (retry + acquis partiel).
109 +
110 +Commits touchant `jobka/connectors/agnico_eagle.py` :
111 +
112 +- `4917d57` 2026-08-18 8 nouveaux ATS (Taleo, Njoyn, UltiPro, iCIMS, SuccessFactors, ADP WFN, Digital Recruiters, Workland) + 23 employeurs publics/parapublics et grands employeurs QC
added docs/connecteurs/agropur.md +112 −0
@@ -0,0 +1,112 @@
1 +<!--
2 +=============================================================================
3 +Job·Ka — Groupe KA
4 +Auteur : Simon-Pierre Boucher
5 +Contact : contact@spboucher.ai
6 +Fichier : docs/connecteurs/agropur.md
7 +Rôle : Fiche connecteur — Agropur (employeur direct, ATS workday)
8 +Généré : 2026-08-18 11:37 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 + relancer le script pour régénérer.
10 +=============================================================================
11 +-->
12 +
13 +# Agropur (`agropur`)
14 +
15 +**Employeur direct** · Plateforme ATS : [`workday`](ats-workday.md) · Statut registre : actif · Connecteur : `jobka/connectors/agropur.py`
16 +
17 +## Description
18 +
19 +- **Site** : [Agropur](https://www.agropur.com)
20 +- **Page carrières** : https://agropur.wd3.myworkdayjobs.com/Agropur_Careers
21 +- **Secteurs** : Agroalimentaire, Production
22 +- **Région** : Longueuil / province
23 +- Offres marquées **« Offre directe »** dans l'app (badge) : la candidature se fait chez l'employeur, jamais via un intermédiaire.
24 +
25 +## Accès
26 +
27 +- **Mécanique** : voir la fiche plateforme [`ats-workday.md`](ats-workday.md) — API JSON publique du site carrières, backend `requests` direct (Scrapfly seulement si indiqué sur la fiche plateforme).
28 +- **Identifiants du tenant** (attributs du connecteur) :
29 +
30 +| Attribut | Valeur |
31 +|---|---|
32 +| `EMPLOYER` | `Agropur` |
33 +| `HOST` | `wd3` |
34 +| `SITE` | `Agropur_Careers` |
35 +| `TENANT` | `agropur` |
36 +- **Throttle** : 0.7 s entre requêtes.
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).
38 +
39 +## Champs → schéma
40 +
41 +Complétude mesurée sur les **75 offres actives** de la source (base live, 2026-08-18 11:37 EDT).
42 +
43 +| Champ (`jobs.*`) | Rôle | Complétude |
44 +|---|---|---|
45 +| `title` — Titre | titre du poste | 100 % |
46 +| `employer` — Employeur | nom de l'entreprise | 100 % |
47 +| `url` — URL | lien direct vers l'offre originale | 100 % |
48 +| `description` — Description | texte complet (HTML nettoyé) | 100 % |
49 +| `city` — Ville | municipalité normalisée | 100 % |
50 +| `region` — Région | région administrative | 99 % |
51 +| `address` — Adresse | adresse du lieu de travail | 0 % |
52 +| `postal_code` — Code postal | code postal si publié | 0 % |
53 +| `work_mode` — Mode | presentiel / hybride / teletravail | 0 % |
54 +| `employment_type` — Type | temps_plein / temps_partiel / … | 100 % |
55 +| `salary` — Salaire ($) | bornes numériques normalisées $/h et $/an | 91 % |
56 +| `salary_label` — Libellé salaire | texte salarial original | 91 % |
57 +| `benefits` — Avantages | avantages sociaux publiés (JSON) | 0 % |
58 +| `requirements` — Exigences | scolarité, expérience, langues (JSON) | 0 % |
59 +| `date_posted` — Date de parution | ISO 8601 | 100 % |
60 +| `date_deadline` — Date limite | date limite pour postuler | 0 % |
61 +| `category` — Catégorie | taxonomie interne (TI, Santé, …) | 57 % |
62 +| `gps` — GPS | lat/lng (géocodage sans invention) | 99 % |
63 +
64 +Exemple réel : *Analyste Inventaire* — Québec · Salary range 004: 73 000$ à 91 200$ (Salary will be determined based on ski · parue le 2026-08-18.
65 +
66 +## Fréquence & budgets
67 +
68 +- **Cadence** : resynchronisation **horaire** (PM2 `job-ka-sync` = `run.py watch 60`), suivie du géocodage en lot puis de la déduplication inter-sources.
69 +- **Throttle** : 0.7 s minimum entre deux requêtes vers la source (`request_delay`).
70 +- **Budgets / plafonds (variables d'environnement)** :
71 +
72 +| Variable | Défaut |
73 +|---|---|
74 +| `JOBKA_WORKDAY_DETAIL_LIMIT` | `300` |
75 +- Cache BD des pages détail (`detail_cache`) : le détail d'une offre n'est re-téléchargé que si sa ligne de liste change.
76 +
77 +## Volumétrie & complétude live
78 +
79 +*(mesuré le 2026-08-18 11:37 EDT dans `data/jobka.db`)*
80 +
81 +- **Offres en base** : 75 (dont **75 actives**, 0 masquées comme doublons `dup_of`)
82 +- **Salaire** : 68/75 actives (91 %)
83 +- **GPS** : 74/75 actives (99 %)
84 +- **Mode** : 0/75 actives (0 %)
85 +- **Parution** : 75/75 actives (100 %)
86 +- **Dernier sync** : 2026-08-18 11:12 — trouvées 75, +0, ~0, -0
87 +- **Syncs enregistrés** (`sync_log`) : 15
88 +
89 +## Erreurs & dépannage
90 +
91 +Aucune erreur dans `sync_log` pour cette source.
92 +
93 +- Rejouer un sync isolé : `.venv/bin/python run.py sync agropur` puis inspecter `sync_log` : `sqlite3 data/jobka.db "SELECT * FROM sync_log WHERE source='agropur' ORDER BY ts DESC LIMIT 5;"`
94 +- Garde-fous : une source qui retourne ≤ 25 % de sa médiane historique déclenche une alerte et les retraits sont suspendus ; une offre doit manquer 2 syncs consécutifs avant `active=0`.
95 +
96 +## Licence / conformité
97 +
98 +**Flux public du site carrières officiel de l'employeur** (API JSON de l'ATS ou HTML rendu serveur) — le même contenu que la page carrière affiche publiquement, prévu pour la diffusion des offres, sans authentification. Chaque offre conserve son URL originale et le bouton « Postuler chez Agropur » renvoie chez l'employeur. Aucune donnée personnelle de candidat n'est collectée. User-Agent identifié `JobKaBot/1.0 (+https://www.job-ka.com; contact@spboucher.ai)` sur les accès directs ; requêtes throttlées et plafonnées par budgets.
99 +
100 +## Historique
101 +
102 +**Mission connecteurs du 2026-08-18** — passage de 135 à 217 employeurs directs connectés, de 9 à 17 plateformes ATS, ajout de 3 portails agrégateurs et du canal de dépôt direct :
103 +- `fd4bfc8` qualité lieux : rejet des villes hors Québec, bâtiments McGill → Montréal ;
104 +- `5a66f48` +59 employeurs (sondage massif d'ATS + détection de pages carrières) ;
105 +- `4917d57` 8 nouveaux ATS (Taleo, Njoyn, UltiPro, iCIMS, SuccessFactors, ADP WFN, Digital Recruiters, Workland) + 23 employeurs publics/parapublics ;
106 +- `f6e7571` portails Guichet-Emplois, Jobillico, Espresso-Jobs — l'offre directe gagne toujours la canonique (dédup) ;
107 +- `744cbfc` badge « Offre directe », stats directes/portails, dépôt direct employeurs ;
108 +- `1604ff9` reprise sur coupure WAF Guichet-Emplois (retry + acquis partiel).
109 +
110 +Commits touchant `jobka/connectors/agropur.py` :
111 +
112 +- `4657429` 2026-08-17 Création massive : 135 connecteurs employeurs québécois sur 9 plateformes ATS
added docs/connecteurs/airbus.md +112 −0
@@ -0,0 +1,112 @@
1 +<!--
2 +=============================================================================
3 +Job·Ka — Groupe KA
4 +Auteur : Simon-Pierre Boucher
5 +Contact : contact@spboucher.ai
6 +Fichier : docs/connecteurs/airbus.md
7 +Rôle : Fiche connecteur — Airbus Canada (employeur direct, ATS workday)
8 +Généré : 2026-08-18 11:37 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 + relancer le script pour régénérer.
10 +=============================================================================
11 +-->
12 +
13 +# Airbus Canada (`airbus`)
14 +
15 +**Employeur direct** · Plateforme ATS : [`workday`](ats-workday.md) · Statut registre : actif · Connecteur : `jobka/connectors/airbus.py`
16 +
17 +## Description
18 +
19 +- **Site** : [Airbus Canada](https://airbus.com)
20 +- **Page carrières** : https://ag.wd3.myworkdayjobs.com/Airbus
21 +- **Secteurs** : n/d
22 +- **Région** : Mirabel
23 +- Offres marquées **« Offre directe »** dans l'app (badge) : la candidature se fait chez l'employeur, jamais via un intermédiaire.
24 +
25 +## Accès
26 +
27 +- **Mécanique** : voir la fiche plateforme [`ats-workday.md`](ats-workday.md) — API JSON publique du site carrières, backend `requests` direct (Scrapfly seulement si indiqué sur la fiche plateforme).
28 +- **Identifiants du tenant** (attributs du connecteur) :
29 +
30 +| Attribut | Valeur |
31 +|---|---|
32 +| `EMPLOYER` | `Airbus Canada` |
33 +| `HOST` | `wd3` |
34 +| `SITE` | `Airbus` |
35 +| `TENANT` | `ag` |
36 +- **Throttle** : 0.7 s entre requêtes.
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).
38 +
39 +## Champs → schéma
40 +
41 +Complétude mesurée sur les **73 offres actives** de la source (base live, 2026-08-18 11:37 EDT).
42 +
43 +| Champ (`jobs.*`) | Rôle | Complétude |
44 +|---|---|---|
45 +| `title` — Titre | titre du poste | 100 % |
46 +| `employer` — Employeur | nom de l'entreprise | 100 % |
47 +| `url` — URL | lien direct vers l'offre originale | 100 % |
48 +| `description` — Description | texte complet (HTML nettoyé) | 100 % |
49 +| `city` — Ville | municipalité normalisée | 100 % |
50 +| `region` — Région | région administrative | 100 % |
51 +| `address` — Adresse | adresse du lieu de travail | 0 % |
52 +| `postal_code` — Code postal | code postal si publié | 0 % |
53 +| `work_mode` — Mode | presentiel / hybride / teletravail | 0 % |
54 +| `employment_type` — Type | temps_plein / temps_partiel / … | 100 % |
55 +| `salary` — Salaire ($) | bornes numériques normalisées $/h et $/an | 1 % |
56 +| `salary_label` — Libellé salaire | texte salarial original | 1 % |
57 +| `benefits` — Avantages | avantages sociaux publiés (JSON) | 0 % |
58 +| `requirements` — Exigences | scolarité, expérience, langues (JSON) | 0 % |
59 +| `date_posted` — Date de parution | ISO 8601 | 100 % |
60 +| `date_deadline` — Date limite | date limite pour postuler | 0 % |
61 +| `category` — Catégorie | taxonomie interne (TI, Santé, …) | 84 % |
62 +| `gps` — GPS | lat/lng (géocodage sans invention) | 100 % |
63 +
64 +Exemple réel : *Conseiller.ère recrutement/Recruitment Advisor* — Montréal · Salaire : 82 000$ · parue le 2026-08-12.
65 +
66 +## Fréquence & budgets
67 +
68 +- **Cadence** : resynchronisation **horaire** (PM2 `job-ka-sync` = `run.py watch 60`), suivie du géocodage en lot puis de la déduplication inter-sources.
69 +- **Throttle** : 0.7 s minimum entre deux requêtes vers la source (`request_delay`).
70 +- **Budgets / plafonds (variables d'environnement)** :
71 +
72 +| Variable | Défaut |
73 +|---|---|
74 +| `JOBKA_WORKDAY_DETAIL_LIMIT` | `300` |
75 +- Cache BD des pages détail (`detail_cache`) : le détail d'une offre n'est re-téléchargé que si sa ligne de liste change.
76 +
77 +## Volumétrie & complétude live
78 +
79 +*(mesuré le 2026-08-18 11:37 EDT dans `data/jobka.db`)*
80 +
81 +- **Offres en base** : 73 (dont **73 actives**, 0 masquées comme doublons `dup_of`)
82 +- **Salaire** : 1/73 actives (1 %)
83 +- **GPS** : 73/73 actives (100 %)
84 +- **Mode** : 0/73 actives (0 %)
85 +- **Parution** : 73/73 actives (100 %)
86 +- **Dernier sync** : 2026-08-18 11:14 — trouvées 73, +0, ~0, -0
87 +- **Syncs enregistrés** (`sync_log`) : 3
88 +
89 +## Erreurs & dépannage
90 +
91 +Aucune erreur dans `sync_log` pour cette source.
92 +
93 +- Rejouer un sync isolé : `.venv/bin/python run.py sync airbus` puis inspecter `sync_log` : `sqlite3 data/jobka.db "SELECT * FROM sync_log WHERE source='airbus' ORDER BY ts DESC LIMIT 5;"`
94 +- Garde-fous : une source qui retourne ≤ 25 % de sa médiane historique déclenche une alerte et les retraits sont suspendus ; une offre doit manquer 2 syncs consécutifs avant `active=0`.
95 +
96 +## Licence / conformité
97 +
98 +**Flux public du site carrières officiel de l'employeur** (API JSON de l'ATS ou HTML rendu serveur) — le même contenu que la page carrière affiche publiquement, prévu pour la diffusion des offres, sans authentification. Chaque offre conserve son URL originale et le bouton « Postuler chez Airbus Canada » renvoie chez l'employeur. Aucune donnée personnelle de candidat n'est collectée. User-Agent identifié `JobKaBot/1.0 (+https://www.job-ka.com; contact@spboucher.ai)` sur les accès directs ; requêtes throttlées et plafonnées par budgets.
99 +
100 +## Historique
101 +
102 +**Mission connecteurs du 2026-08-18** — passage de 135 à 217 employeurs directs connectés, de 9 à 17 plateformes ATS, ajout de 3 portails agrégateurs et du canal de dépôt direct :
103 +- `fd4bfc8` qualité lieux : rejet des villes hors Québec, bâtiments McGill → Montréal ;
104 +- `5a66f48` +59 employeurs (sondage massif d'ATS + détection de pages carrières) ;
105 +- `4917d57` 8 nouveaux ATS (Taleo, Njoyn, UltiPro, iCIMS, SuccessFactors, ADP WFN, Digital Recruiters, Workland) + 23 employeurs publics/parapublics ;
106 +- `f6e7571` portails Guichet-Emplois, Jobillico, Espresso-Jobs — l'offre directe gagne toujours la canonique (dédup) ;
107 +- `744cbfc` badge « Offre directe », stats directes/portails, dépôt direct employeurs ;
108 +- `1604ff9` reprise sur coupure WAF Guichet-Emplois (retry + acquis partiel).
109 +
110 +Commits touchant `jobka/connectors/airbus.py` :
111 +
112 +- `5a66f48` 2026-08-18 Expansion ×: 59 nouveaux employeurs connectés via sondage massif d ATS + détection de pages carrières
added docs/connecteurs/ajwalter.md +105 −0
@@ -0,0 +1,105 @@
1 +<!--
2 +=============================================================================
3 +Job·Ka — Groupe KA
4 +Auteur : Simon-Pierre Boucher
5 +Contact : contact@spboucher.ai
6 +Fichier : docs/connecteurs/ajwalter.md
7 +Rôle : Fiche connecteur — AJ Walter Aviation (employeur direct, ATS recruitee)
8 +Généré : 2026-08-18 11:37 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 + relancer le script pour régénérer.
10 +=============================================================================
11 +-->
12 +
13 +# AJ Walter Aviation (`ajwalter`)
14 +
15 +**Employeur direct** · Plateforme ATS : [`recruitee`](ats-recruitee.md) · Statut registre : actif · Connecteur : `jobka/connectors/ajwalter.py`
16 +
17 +## Description
18 +
19 +- **Site** : [AJ Walter Aviation]()
20 +- **Page carrières** : https://ajwalter.recruitee.com
21 +- **Secteurs** : Aéronautique
22 +- **Région** : Montréal
23 +- Offres marquées **« Offre directe »** dans l'app (badge) : la candidature se fait chez l'employeur, jamais via un intermédiaire.
24 +
25 +## Accès
26 +
27 +- **Mécanique** : voir la fiche plateforme [`ats-recruitee.md`](ats-recruitee.md) — API JSON publique du site carrières, backend `requests` direct (Scrapfly seulement si indiqué sur la fiche plateforme).
28 +- **Identifiants du tenant** (attributs du connecteur) :
29 +
30 +| Attribut | Valeur |
31 +|---|---|
32 +| `EMPLOYER` | `AJ Walter Aviation` |
33 +| `ORG` | `ajwalter` |
34 +- **Throttle** : 1.0 s entre requêtes.
35 +- **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).
36 +
37 +## Champs → schéma
38 +
39 +Complétude mesurée sur les **7 offres actives** de la source (base live, 2026-08-18 11:37 EDT).
40 +
41 +| Champ (`jobs.*`) | Rôle | Complétude |
42 +|---|---|---|
43 +| `title` — Titre | titre du poste | 100 % |
44 +| `employer` — Employeur | nom de l'entreprise | 100 % |
45 +| `url` — URL | lien direct vers l'offre originale | 100 % |
46 +| `description` — Description | texte complet (HTML nettoyé) | 100 % |
47 +| `city` — Ville | municipalité normalisée | 100 % |
48 +| `region` — Région | région administrative | 100 % |
49 +| `address` — Adresse | adresse du lieu de travail | 0 % |
50 +| `postal_code` — Code postal | code postal si publié | 100 % |
51 +| `work_mode` — Mode | presentiel / hybride / teletravail | 100 % |
52 +| `employment_type` — Type | temps_plein / temps_partiel / … | 100 % |
53 +| `salary` — Salaire ($) | bornes numériques normalisées $/h et $/an | 0 % |
54 +| `salary_label` — Libellé salaire | texte salarial original | 0 % |
55 +| `benefits` — Avantages | avantages sociaux publiés (JSON) | 0 % |
56 +| `requirements` — Exigences | scolarité, expérience, langues (JSON) | 0 % |
57 +| `date_posted` — Date de parution | ISO 8601 | 100 % |
58 +| `date_deadline` — Date limite | date limite pour postuler | 0 % |
59 +| `category` — Catégorie | taxonomie interne (TI, Santé, …) | 43 % |
60 +| `gps` — GPS | lat/lng (géocodage sans invention) | 100 % |
61 +
62 +Exemple réel : *Analyste, Soutien à la production - Production Support Analyst* — Montréal · ∅ · parue le 2026-08-14.
63 +
64 +## Fréquence & budgets
65 +
66 +- **Cadence** : resynchronisation **horaire** (PM2 `job-ka-sync` = `run.py watch 60`), suivie du géocodage en lot puis de la déduplication inter-sources.
67 +- **Throttle** : 1.0 s minimum entre deux requêtes vers la source (`request_delay`).
68 +- Cache BD des pages détail (`detail_cache`) : le détail d'une offre n'est re-téléchargé que si sa ligne de liste change.
69 +
70 +## Volumétrie & complétude live
71 +
72 +*(mesuré le 2026-08-18 11:37 EDT dans `data/jobka.db`)*
73 +
74 +- **Offres en base** : 7 (dont **7 actives**, 0 masquées comme doublons `dup_of`)
75 +- **Salaire** : 0/7 actives (0 %)
76 +- **GPS** : 7/7 actives (100 %)
77 +- **Mode** : 7/7 actives (100 %)
78 +- **Parution** : 7/7 actives (100 %)
79 +- **Dernier sync** : 2026-08-18 11:14 — trouvées 7, +0, ~0, -0
80 +- **Syncs enregistrés** (`sync_log`) : 15
81 +
82 +## Erreurs & dépannage
83 +
84 +Aucune erreur dans `sync_log` pour cette source.
85 +
86 +- Rejouer un sync isolé : `.venv/bin/python run.py sync ajwalter` puis inspecter `sync_log` : `sqlite3 data/jobka.db "SELECT * FROM sync_log WHERE source='ajwalter' ORDER BY ts DESC LIMIT 5;"`
87 +- Garde-fous : une source qui retourne ≤ 25 % de sa médiane historique déclenche une alerte et les retraits sont suspendus ; une offre doit manquer 2 syncs consécutifs avant `active=0`.
88 +
89 +## Licence / conformité
90 +
91 +**Flux public du site carrières officiel de l'employeur** (API JSON de l'ATS ou HTML rendu serveur) — le même contenu que la page carrière affiche publiquement, prévu pour la diffusion des offres, sans authentification. Chaque offre conserve son URL originale et le bouton « Postuler chez AJ Walter Aviation » renvoie chez l'employeur. Aucune donnée personnelle de candidat n'est collectée. User-Agent identifié `JobKaBot/1.0 (+https://www.job-ka.com; contact@spboucher.ai)` sur les accès directs ; requêtes throttlées et plafonnées par budgets.
92 +
93 +## Historique
94 +
95 +**Mission connecteurs du 2026-08-18** — passage de 135 à 217 employeurs directs connectés, de 9 à 17 plateformes ATS, ajout de 3 portails agrégateurs et du canal de dépôt direct :
96 +- `fd4bfc8` qualité lieux : rejet des villes hors Québec, bâtiments McGill → Montréal ;
97 +- `5a66f48` +59 employeurs (sondage massif d'ATS + détection de pages carrières) ;
98 +- `4917d57` 8 nouveaux ATS (Taleo, Njoyn, UltiPro, iCIMS, SuccessFactors, ADP WFN, Digital Recruiters, Workland) + 23 employeurs publics/parapublics ;
99 +- `f6e7571` portails Guichet-Emplois, Jobillico, Espresso-Jobs — l'offre directe gagne toujours la canonique (dédup) ;
100 +- `744cbfc` badge « Offre directe », stats directes/portails, dépôt direct employeurs ;
101 +- `1604ff9` reprise sur coupure WAF Guichet-Emplois (retry + acquis partiel).
102 +
103 +Commits touchant `jobka/connectors/ajwalter.py` :
104 +
105 +- `4657429` 2026-08-17 Création massive : 135 connecteurs employeurs québécois sur 9 plateformes ATS
added docs/connecteurs/alayacare.md +105 −0
@@ -0,0 +1,105 @@
1 +<!--
2 +=============================================================================
3 +Job·Ka — Groupe KA
4 +Auteur : Simon-Pierre Boucher
5 +Contact : contact@spboucher.ai
6 +Fichier : docs/connecteurs/alayacare.md
7 +Rôle : Fiche connecteur — AlayaCare (employeur direct, ATS greenhouse)
8 +Généré : 2026-08-18 11:37 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 + relancer le script pour régénérer.
10 +=============================================================================
11 +-->
12 +
13 +# AlayaCare (`alayacare`)
14 +
15 +**Employeur direct** · Plateforme ATS : [`greenhouse`](ats-greenhouse.md) · Statut registre : actif · Connecteur : `jobka/connectors/alayacare.py`
16 +
17 +## Description
18 +
19 +- **Site** : [AlayaCare](https://www.alayacare.com)
20 +- **Page carrières** : https://job-boards.greenhouse.io/alayacare
21 +- **Secteurs** : TI, Santé
22 +- **Région** : Montréal
23 +- Offres marquées **« Offre directe »** dans l'app (badge) : la candidature se fait chez l'employeur, jamais via un intermédiaire.
24 +
25 +## Accès
26 +
27 +- **Mécanique** : voir la fiche plateforme [`ats-greenhouse.md`](ats-greenhouse.md) — API JSON publique du site carrières, backend `requests` direct (Scrapfly seulement si indiqué sur la fiche plateforme).
28 +- **Identifiants du tenant** (attributs du connecteur) :
29 +
30 +| Attribut | Valeur |
31 +|---|---|
32 +| `BOARD` | `alayacare` |
33 +| `EMPLOYER` | `AlayaCare` |
34 +- **Throttle** : 1.0 s entre requêtes.
35 +- **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).
36 +
37 +## Champs → schéma
38 +
39 +Complétude mesurée sur les **10 offres actives** de la source (base live, 2026-08-18 11:37 EDT).
40 +
41 +| Champ (`jobs.*`) | Rôle | Complétude |
42 +|---|---|---|
43 +| `title` — Titre | titre du poste | 100 % |
44 +| `employer` — Employeur | nom de l'entreprise | 100 % |
45 +| `url` — URL | lien direct vers l'offre originale | 100 % |
46 +| `description` — Description | texte complet (HTML nettoyé) | 100 % |
47 +| `city` — Ville | municipalité normalisée | 100 % |
48 +| `region` — Région | région administrative | 100 % |
49 +| `address` — Adresse | adresse du lieu de travail | 0 % |
50 +| `postal_code` — Code postal | code postal si publié | 0 % |
51 +| `work_mode` — Mode | presentiel / hybride / teletravail | 0 % |
52 +| `employment_type` — Type | temps_plein / temps_partiel / … | 10 % |
53 +| `salary` — Salaire ($) | bornes numériques normalisées $/h et $/an | 0 % |
54 +| `salary_label` — Libellé salaire | texte salarial original | 0 % |
55 +| `benefits` — Avantages | avantages sociaux publiés (JSON) | 0 % |
56 +| `requirements` — Exigences | scolarité, expérience, langues (JSON) | 0 % |
57 +| `date_posted` — Date de parution | ISO 8601 | 100 % |
58 +| `date_deadline` — Date limite | date limite pour postuler | 0 % |
59 +| `category` — Catégorie | taxonomie interne (TI, Santé, …) | 100 % |
60 +| `gps` — GPS | lat/lng (géocodage sans invention) | 100 % |
61 +
62 +Exemple réel : *Manager, Software Development* — Montréal · ∅ · parue le 2026-08-11.
63 +
64 +## Fréquence & budgets
65 +
66 +- **Cadence** : resynchronisation **horaire** (PM2 `job-ka-sync` = `run.py watch 60`), suivie du géocodage en lot puis de la déduplication inter-sources.
67 +- **Throttle** : 1.0 s minimum entre deux requêtes vers la source (`request_delay`).
68 +- Cache BD des pages détail (`detail_cache`) : le détail d'une offre n'est re-téléchargé que si sa ligne de liste change.
69 +
70 +## Volumétrie & complétude live
71 +
72 +*(mesuré le 2026-08-18 11:37 EDT dans `data/jobka.db`)*
73 +
74 +- **Offres en base** : 10 (dont **10 actives**, 0 masquées comme doublons `dup_of`)
75 +- **Salaire** : 0/10 actives (0 %)
76 +- **GPS** : 10/10 actives (100 %)
77 +- **Mode** : 0/10 actives (0 %)
78 +- **Parution** : 10/10 actives (100 %)
79 +- **Dernier sync** : 2026-08-18 11:14 — trouvées 10, +0, ~0, -0
80 +- **Syncs enregistrés** (`sync_log`) : 3
81 +
82 +## Erreurs & dépannage
83 +
84 +Aucune erreur dans `sync_log` pour cette source.
85 +
86 +- Rejouer un sync isolé : `.venv/bin/python run.py sync alayacare` puis inspecter `sync_log` : `sqlite3 data/jobka.db "SELECT * FROM sync_log WHERE source='alayacare' ORDER BY ts DESC LIMIT 5;"`
87 +- Garde-fous : une source qui retourne ≤ 25 % de sa médiane historique déclenche une alerte et les retraits sont suspendus ; une offre doit manquer 2 syncs consécutifs avant `active=0`.
88 +
89 +## Licence / conformité
90 +
91 +**Flux public du site carrières officiel de l'employeur** (API JSON de l'ATS ou HTML rendu serveur) — le même contenu que la page carrière affiche publiquement, prévu pour la diffusion des offres, sans authentification. Chaque offre conserve son URL originale et le bouton « Postuler chez AlayaCare » renvoie chez l'employeur. Aucune donnée personnelle de candidat n'est collectée. User-Agent identifié `JobKaBot/1.0 (+https://www.job-ka.com; contact@spboucher.ai)` sur les accès directs ; requêtes throttlées et plafonnées par budgets.
92 +
93 +## Historique
94 +
95 +**Mission connecteurs du 2026-08-18** — passage de 135 à 217 employeurs directs connectés, de 9 à 17 plateformes ATS, ajout de 3 portails agrégateurs et du canal de dépôt direct :
96 +- `fd4bfc8` qualité lieux : rejet des villes hors Québec, bâtiments McGill → Montréal ;
97 +- `5a66f48` +59 employeurs (sondage massif d'ATS + détection de pages carrières) ;
98 +- `4917d57` 8 nouveaux ATS (Taleo, Njoyn, UltiPro, iCIMS, SuccessFactors, ADP WFN, Digital Recruiters, Workland) + 23 employeurs publics/parapublics ;
99 +- `f6e7571` portails Guichet-Emplois, Jobillico, Espresso-Jobs — l'offre directe gagne toujours la canonique (dédup) ;
100 +- `744cbfc` badge « Offre directe », stats directes/portails, dépôt direct employeurs ;
101 +- `1604ff9` reprise sur coupure WAF Guichet-Emplois (retry + acquis partiel).
102 +
103 +Commits touchant `jobka/connectors/alayacare.py` :
104 +
105 +- `5a66f48` 2026-08-18 Expansion ×: 59 nouveaux employeurs connectés via sondage massif d ATS + détection de pages carrières
added docs/connecteurs/alcoa.md +112 −0
@@ -0,0 +1,112 @@
1 +<!--
2 +=============================================================================
3 +Job·Ka — Groupe KA
4 +Auteur : Simon-Pierre Boucher
5 +Contact : contact@spboucher.ai
6 +Fichier : docs/connecteurs/alcoa.md
7 +Rôle : Fiche connecteur — Alcoa Canada (employeur direct, ATS workday)
8 +Généré : 2026-08-18 11:37 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 + relancer le script pour régénérer.
10 +=============================================================================
11 +-->
12 +
13 +# Alcoa Canada (`alcoa`)
14 +
15 +**Employeur direct** · Plateforme ATS : [`workday`](ats-workday.md) · Statut registre : actif · Connecteur : `jobka/connectors/alcoa.py`
16 +
17 +## Description
18 +
19 +- **Site** : [Alcoa Canada](https://alcoa.com)
20 +- **Page carrières** : https://alcoa.wd5.myworkdayjobs.com/Careers
21 +- **Secteurs** : n/d
22 +- **Région** : Baie-Comeau
23 +- Offres marquées **« Offre directe »** dans l'app (badge) : la candidature se fait chez l'employeur, jamais via un intermédiaire.
24 +
25 +## Accès
26 +
27 +- **Mécanique** : voir la fiche plateforme [`ats-workday.md`](ats-workday.md) — API JSON publique du site carrières, backend `requests` direct (Scrapfly seulement si indiqué sur la fiche plateforme).
28 +- **Identifiants du tenant** (attributs du connecteur) :
29 +
30 +| Attribut | Valeur |
31 +|---|---|
32 +| `EMPLOYER` | `Alcoa Canada` |
33 +| `HOST` | `wd5` |
34 +| `SITE` | `Careers` |
35 +| `TENANT` | `alcoa` |
36 +- **Throttle** : 0.7 s entre requêtes.
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).
38 +
39 +## Champs → schéma
40 +
41 +Complétude mesurée sur les **16 offres actives** de la source (base live, 2026-08-18 11:37 EDT).
42 +
43 +| Champ (`jobs.*`) | Rôle | Complétude |
44 +|---|---|---|
45 +| `title` — Titre | titre du poste | 100 % |
46 +| `employer` — Employeur | nom de l'entreprise | 100 % |
47 +| `url` — URL | lien direct vers l'offre originale | 100 % |
48 +| `description` — Description | texte complet (HTML nettoyé) | 100 % |
49 +| `city` — Ville | municipalité normalisée | 56 % |
50 +| `region` — Région | région administrative | 94 % |
51 +| `address` — Adresse | adresse du lieu de travail | 0 % |
52 +| `postal_code` — Code postal | code postal si publié | 0 % |
53 +| `work_mode` — Mode | presentiel / hybride / teletravail | 0 % |
54 +| `employment_type` — Type | temps_plein / temps_partiel / … | 100 % |
55 +| `salary` — Salaire ($) | bornes numériques normalisées $/h et $/an | 12 % |
56 +| `salary_label` — Libellé salaire | texte salarial original | 12 % |
57 +| `benefits` — Avantages | avantages sociaux publiés (JSON) | 0 % |
58 +| `requirements` — Exigences | scolarité, expérience, langues (JSON) | 0 % |
59 +| `date_posted` — Date de parution | ISO 8601 | 100 % |
60 +| `date_deadline` — Date limite | date limite pour postuler | 0 % |
61 +| `category` — Catégorie | taxonomie interne (TI, Santé, …) | 88 % |
62 +| `gps` — GPS | lat/lng (géocodage sans invention) | 44 % |
63 +
64 +Exemple réel : *Assistant(e) opérateur ou opératrice* — Baie-Comeau · Salaire horaire au-delà de 45 $ l'heure · parue le 2026-08-05.
65 +
66 +## Fréquence & budgets
67 +
68 +- **Cadence** : resynchronisation **horaire** (PM2 `job-ka-sync` = `run.py watch 60`), suivie du géocodage en lot puis de la déduplication inter-sources.
69 +- **Throttle** : 0.7 s minimum entre deux requêtes vers la source (`request_delay`).
70 +- **Budgets / plafonds (variables d'environnement)** :
71 +
72 +| Variable | Défaut |
73 +|---|---|
74 +| `JOBKA_WORKDAY_DETAIL_LIMIT` | `300` |
75 +- Cache BD des pages détail (`detail_cache`) : le détail d'une offre n'est re-téléchargé que si sa ligne de liste change.
76 +
77 +## Volumétrie & complétude live
78 +
79 +*(mesuré le 2026-08-18 11:37 EDT dans `data/jobka.db`)*
80 +
81 +- **Offres en base** : 16 (dont **16 actives**, 0 masquées comme doublons `dup_of`)
82 +- **Salaire** : 2/16 actives (12 %)
83 +- **GPS** : 7/16 actives (44 %)
84 +- **Mode** : 0/16 actives (0 %)
85 +- **Parution** : 16/16 actives (100 %)
86 +- **Dernier sync** : 2026-08-18 11:14 — trouvées 16, +0, ~0, -0
87 +- **Syncs enregistrés** (`sync_log`) : 3
88 +
89 +## Erreurs & dépannage
90 +
91 +Aucune erreur dans `sync_log` pour cette source.
92 +
93 +- Rejouer un sync isolé : `.venv/bin/python run.py sync alcoa` puis inspecter `sync_log` : `sqlite3 data/jobka.db "SELECT * FROM sync_log WHERE source='alcoa' ORDER BY ts DESC LIMIT 5;"`
94 +- Garde-fous : une source qui retourne ≤ 25 % de sa médiane historique déclenche une alerte et les retraits sont suspendus ; une offre doit manquer 2 syncs consécutifs avant `active=0`.
95 +
96 +## Licence / conformité
97 +
98 +**Flux public du site carrières officiel de l'employeur** (API JSON de l'ATS ou HTML rendu serveur) — le même contenu que la page carrière affiche publiquement, prévu pour la diffusion des offres, sans authentification. Chaque offre conserve son URL originale et le bouton « Postuler chez Alcoa Canada » renvoie chez l'employeur. Aucune donnée personnelle de candidat n'est collectée. User-Agent identifié `JobKaBot/1.0 (+https://www.job-ka.com; contact@spboucher.ai)` sur les accès directs ; requêtes throttlées et plafonnées par budgets.
99 +
100 +## Historique
101 +
102 +**Mission connecteurs du 2026-08-18** — passage de 135 à 217 employeurs directs connectés, de 9 à 17 plateformes ATS, ajout de 3 portails agrégateurs et du canal de dépôt direct :
103 +- `fd4bfc8` qualité lieux : rejet des villes hors Québec, bâtiments McGill → Montréal ;
104 +- `5a66f48` +59 employeurs (sondage massif d'ATS + détection de pages carrières) ;
105 +- `4917d57` 8 nouveaux ATS (Taleo, Njoyn, UltiPro, iCIMS, SuccessFactors, ADP WFN, Digital Recruiters, Workland) + 23 employeurs publics/parapublics ;
106 +- `f6e7571` portails Guichet-Emplois, Jobillico, Espresso-Jobs — l'offre directe gagne toujours la canonique (dédup) ;
107 +- `744cbfc` badge « Offre directe », stats directes/portails, dépôt direct employeurs ;
108 +- `1604ff9` reprise sur coupure WAF Guichet-Emplois (retry + acquis partiel).
109 +
110 +Commits touchant `jobka/connectors/alcoa.py` :
111 +
112 +- `5a66f48` 2026-08-18 Expansion ×: 59 nouveaux employeurs connectés via sondage massif d ATS + détection de pages carrières
added docs/connecteurs/alimentiv_2.md +105 −0
@@ -0,0 +1,105 @@
1 +<!--
2 +=============================================================================
3 +Job·Ka — Groupe KA
4 +Auteur : Simon-Pierre Boucher
5 +Contact : contact@spboucher.ai
6 +Fichier : docs/connecteurs/alimentiv_2.md
7 +Rôle : Fiche connecteur — Alimentiv (employeur direct, ATS lever)
8 +Généré : 2026-08-18 11:37 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 + relancer le script pour régénérer.
10 +=============================================================================
11 +-->
12 +
13 +# Alimentiv (`alimentiv_2`)
14 +
15 +**Employeur direct** · Plateforme ATS : [`lever`](ats-lever.md) · Statut registre : actif · Connecteur : `jobka/connectors/alimentiv_2.py`
16 +
17 +## Description
18 +
19 +- **Site** : [Alimentiv]()
20 +- **Page carrières** : https://jobs.lever.co/alimentiv-2
21 +- **Secteurs** : Recherche clinique
22 +- **Région** : Montréal, Québec
23 +- Offres marquées **« Offre directe »** dans l'app (badge) : la candidature se fait chez l'employeur, jamais via un intermédiaire.
24 +
25 +## Accès
26 +
27 +- **Mécanique** : voir la fiche plateforme [`ats-lever.md`](ats-lever.md) — API JSON publique du site carrières, backend `requests` direct (Scrapfly seulement si indiqué sur la fiche plateforme).
28 +- **Identifiants du tenant** (attributs du connecteur) :
29 +
30 +| Attribut | Valeur |
31 +|---|---|
32 +| `EMPLOYER` | `Alimentiv` |
33 +| `ORG` | `alimentiv-2` |
34 +- **Throttle** : 1.0 s entre requêtes.
35 +- **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).
36 +
37 +## Champs → schéma
38 +
39 +Complétude mesurée sur les **2 offres actives** de la source (base live, 2026-08-18 11:37 EDT).
40 +
41 +| Champ (`jobs.*`) | Rôle | Complétude |
42 +|---|---|---|
43 +| `title` — Titre | titre du poste | 100 % |
44 +| `employer` — Employeur | nom de l'entreprise | 100 % |
45 +| `url` — URL | lien direct vers l'offre originale | 100 % |
46 +| `description` — Description | texte complet (HTML nettoyé) | 100 % |
47 +| `city` — Ville | municipalité normalisée | 0 % |
48 +| `region` — Région | région administrative | 0 % |
49 +| `address` — Adresse | adresse du lieu de travail | 0 % |
50 +| `postal_code` — Code postal | code postal si publié | 0 % |
51 +| `work_mode` — Mode | presentiel / hybride / teletravail | 100 % |
52 +| `employment_type` — Type | temps_plein / temps_partiel / … | 100 % |
53 +| `salary` — Salaire ($) | bornes numériques normalisées $/h et $/an | 100 % |
54 +| `salary_label` — Libellé salaire | texte salarial original | 0 % |
55 +| `benefits` — Avantages | avantages sociaux publiés (JSON) | 0 % |
56 +| `requirements` — Exigences | scolarité, expérience, langues (JSON) | 0 % |
57 +| `date_posted` — Date de parution | ISO 8601 | 100 % |
58 +| `date_deadline` — Date limite | date limite pour postuler | 0 % |
59 +| `category` — Catégorie | taxonomie interne (TI, Santé, …) | 100 % |
60 +| `gps` — GPS | lat/lng (géocodage sans invention) | 50 % |
61 +
62 +Exemple réel : *Statistician* — ∅ · ∅ · parue le 2026-07-28.
63 +
64 +## Fréquence & budgets
65 +
66 +- **Cadence** : resynchronisation **horaire** (PM2 `job-ka-sync` = `run.py watch 60`), suivie du géocodage en lot puis de la déduplication inter-sources.
67 +- **Throttle** : 1.0 s minimum entre deux requêtes vers la source (`request_delay`).
68 +- Cache BD des pages détail (`detail_cache`) : le détail d'une offre n'est re-téléchargé que si sa ligne de liste change.
69 +
70 +## Volumétrie & complétude live
71 +
72 +*(mesuré le 2026-08-18 11:37 EDT dans `data/jobka.db`)*
73 +
74 +- **Offres en base** : 2 (dont **2 actives**, 0 masquées comme doublons `dup_of`)
75 +- **Salaire** : 2/2 actives (100 %)
76 +- **GPS** : 1/2 actives (50 %)
77 +- **Mode** : 2/2 actives (100 %)
78 +- **Parution** : 2/2 actives (100 %)
79 +- **Dernier sync** : 2026-08-18 11:14 — trouvées 2, +0, ~0, -0
80 +- **Syncs enregistrés** (`sync_log`) : 15
81 +
82 +## Erreurs & dépannage
83 +
84 +Aucune erreur dans `sync_log` pour cette source.
85 +
86 +- Rejouer un sync isolé : `.venv/bin/python run.py sync alimentiv_2` puis inspecter `sync_log` : `sqlite3 data/jobka.db "SELECT * FROM sync_log WHERE source='alimentiv_2' ORDER BY ts DESC LIMIT 5;"`
87 +- Garde-fous : une source qui retourne ≤ 25 % de sa médiane historique déclenche une alerte et les retraits sont suspendus ; une offre doit manquer 2 syncs consécutifs avant `active=0`.
88 +
89 +## Licence / conformité
90 +
91 +**Flux public du site carrières officiel de l'employeur** (API JSON de l'ATS ou HTML rendu serveur) — le même contenu que la page carrière affiche publiquement, prévu pour la diffusion des offres, sans authentification. Chaque offre conserve son URL originale et le bouton « Postuler chez Alimentiv » renvoie chez l'employeur. Aucune donnée personnelle de candidat n'est collectée. User-Agent identifié `JobKaBot/1.0 (+https://www.job-ka.com; contact@spboucher.ai)` sur les accès directs ; requêtes throttlées et plafonnées par budgets.
92 +
93 +## Historique
94 +
95 +**Mission connecteurs du 2026-08-18** — passage de 135 à 217 employeurs directs connectés, de 9 à 17 plateformes ATS, ajout de 3 portails agrégateurs et du canal de dépôt direct :
96 +- `fd4bfc8` qualité lieux : rejet des villes hors Québec, bâtiments McGill → Montréal ;
97 +- `5a66f48` +59 employeurs (sondage massif d'ATS + détection de pages carrières) ;
98 +- `4917d57` 8 nouveaux ATS (Taleo, Njoyn, UltiPro, iCIMS, SuccessFactors, ADP WFN, Digital Recruiters, Workland) + 23 employeurs publics/parapublics ;
99 +- `f6e7571` portails Guichet-Emplois, Jobillico, Espresso-Jobs — l'offre directe gagne toujours la canonique (dédup) ;
100 +- `744cbfc` badge « Offre directe », stats directes/portails, dépôt direct employeurs ;
101 +- `1604ff9` reprise sur coupure WAF Guichet-Emplois (retry + acquis partiel).
102 +
103 +Commits touchant `jobka/connectors/alimentiv_2.py` :
104 +
105 +- `4657429` 2026-08-17 Création massive : 135 connecteurs employeurs québécois sur 9 plateformes ATS
added docs/connecteurs/alphanumeric_systems.md +105 −0
@@ -0,0 +1,105 @@
1 +<!--
2 +=============================================================================
3 +Job·Ka — Groupe KA
4 +Auteur : Simon-Pierre Boucher
5 +Contact : contact@spboucher.ai
6 +Fichier : docs/connecteurs/alphanumeric_systems.md
7 +Rôle : Fiche connecteur — Alphanumeric Systems (employeur direct, ATS breezy)
8 +Généré : 2026-08-18 11:37 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 + relancer le script pour régénérer.
10 +=============================================================================
11 +-->
12 +
13 +# Alphanumeric Systems (`alphanumeric_systems`)
14 +
15 +**Employeur direct** · Plateforme ATS : [`breezy`](ats-breezy.md) · Statut registre : actif · Connecteur : `jobka/connectors/alphanumeric_systems.py`
16 +
17 +## Description
18 +
19 +- **Site** : [Alphanumeric Systems]()
20 +- **Page carrières** : https://alphanumeric-systems.breezy.hr
21 +- **Secteurs** : TI, Santé
22 +- **Région** : Montréal, Sainte-Foy
23 +- Offres marquées **« Offre directe »** dans l'app (badge) : la candidature se fait chez l'employeur, jamais via un intermédiaire.
24 +
25 +## Accès
26 +
27 +- **Mécanique** : voir la fiche plateforme [`ats-breezy.md`](ats-breezy.md) — API JSON publique du site carrières, backend `requests` direct (Scrapfly seulement si indiqué sur la fiche plateforme).
28 +- **Identifiants du tenant** (attributs du connecteur) :
29 +
30 +| Attribut | Valeur |
31 +|---|---|
32 +| `EMPLOYER` | `Alphanumeric Systems` |
33 +| `ORG` | `alphanumeric-systems` |
34 +- **Throttle** : 1.0 s entre requêtes.
35 +- **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).
36 +
37 +## Champs → schéma
38 +
39 +Complétude mesurée sur les **5 offres actives** de la source (base live, 2026-08-18 11:37 EDT).
40 +
41 +| Champ (`jobs.*`) | Rôle | Complétude |
42 +|---|---|---|
43 +| `title` — Titre | titre du poste | 100 % |
44 +| `employer` — Employeur | nom de l'entreprise | 100 % |
45 +| `url` — URL | lien direct vers l'offre originale | 100 % |
46 +| `description` — Description | texte complet (HTML nettoyé) | 100 % |
47 +| `city` — Ville | municipalité normalisée | 100 % |
48 +| `region` — Région | région administrative | 100 % |
49 +| `address` — Adresse | adresse du lieu de travail | 0 % |
50 +| `postal_code` — Code postal | code postal si publié | 0 % |
51 +| `work_mode` — Mode | presentiel / hybride / teletravail | 40 % |
52 +| `employment_type` — Type | temps_plein / temps_partiel / … | 100 % |
53 +| `salary` — Salaire ($) | bornes numériques normalisées $/h et $/an | 100 % |
54 +| `salary_label` — Libellé salaire | texte salarial original | 100 % |
55 +| `benefits` — Avantages | avantages sociaux publiés (JSON) | 0 % |
56 +| `requirements` — Exigences | scolarité, expérience, langues (JSON) | 0 % |
57 +| `date_posted` — Date de parution | ISO 8601 | 100 % |
58 +| `date_deadline` — Date limite | date limite pour postuler | 0 % |
59 +| `category` — Catégorie | taxonomie interne (TI, Santé, …) | 100 % |
60 +| `gps` — GPS | lat/lng (géocodage sans invention) | 100 % |
61 +
62 +Exemple réel : *Bilingual Customer Service Specialist for Pharmaceuticals/Healthcare (English/French) - Fu…* — Montréal · $45,000 / year · parue le 2026-08-10.
63 +
64 +## Fréquence & budgets
65 +
66 +- **Cadence** : resynchronisation **horaire** (PM2 `job-ka-sync` = `run.py watch 60`), suivie du géocodage en lot puis de la déduplication inter-sources.
67 +- **Throttle** : 1.0 s minimum entre deux requêtes vers la source (`request_delay`).
68 +- Cache BD des pages détail (`detail_cache`) : le détail d'une offre n'est re-téléchargé que si sa ligne de liste change.
69 +
70 +## Volumétrie & complétude live
71 +
72 +*(mesuré le 2026-08-18 11:37 EDT dans `data/jobka.db`)*
73 +
74 +- **Offres en base** : 5 (dont **5 actives**, 0 masquées comme doublons `dup_of`)
75 +- **Salaire** : 5/5 actives (100 %)
76 +- **GPS** : 5/5 actives (100 %)
77 +- **Mode** : 2/5 actives (40 %)
78 +- **Parution** : 5/5 actives (100 %)
79 +- **Dernier sync** : 2026-08-18 11:14 — trouvées 5, +0, ~0, -0
80 +- **Syncs enregistrés** (`sync_log`) : 15
81 +
82 +## Erreurs & dépannage
83 +
84 +Aucune erreur dans `sync_log` pour cette source.
85 +
86 +- Rejouer un sync isolé : `.venv/bin/python run.py sync alphanumeric_systems` puis inspecter `sync_log` : `sqlite3 data/jobka.db "SELECT * FROM sync_log WHERE source='alphanumeric_systems' ORDER BY ts DESC LIMIT 5;"`
87 +- Garde-fous : une source qui retourne ≤ 25 % de sa médiane historique déclenche une alerte et les retraits sont suspendus ; une offre doit manquer 2 syncs consécutifs avant `active=0`.
88 +
89 +## Licence / conformité
90 +
91 +**Flux public du site carrières officiel de l'employeur** (API JSON de l'ATS ou HTML rendu serveur) — le même contenu que la page carrière affiche publiquement, prévu pour la diffusion des offres, sans authentification. Chaque offre conserve son URL originale et le bouton « Postuler chez Alphanumeric Systems » renvoie chez l'employeur. Aucune donnée personnelle de candidat n'est collectée. User-Agent identifié `JobKaBot/1.0 (+https://www.job-ka.com; contact@spboucher.ai)` sur les accès directs ; requêtes throttlées et plafonnées par budgets.
92 +
93 +## Historique
94 +
95 +**Mission connecteurs du 2026-08-18** — passage de 135 à 217 employeurs directs connectés, de 9 à 17 plateformes ATS, ajout de 3 portails agrégateurs et du canal de dépôt direct :
96 +- `fd4bfc8` qualité lieux : rejet des villes hors Québec, bâtiments McGill → Montréal ;
97 +- `5a66f48` +59 employeurs (sondage massif d'ATS + détection de pages carrières) ;
98 +- `4917d57` 8 nouveaux ATS (Taleo, Njoyn, UltiPro, iCIMS, SuccessFactors, ADP WFN, Digital Recruiters, Workland) + 23 employeurs publics/parapublics ;
99 +- `f6e7571` portails Guichet-Emplois, Jobillico, Espresso-Jobs — l'offre directe gagne toujours la canonique (dédup) ;
100 +- `744cbfc` badge « Offre directe », stats directes/portails, dépôt direct employeurs ;
101 +- `1604ff9` reprise sur coupure WAF Guichet-Emplois (retry + acquis partiel).
102 +
103 +Commits touchant `jobka/connectors/alphanumeric_systems.py` :
104 +
105 +- `4657429` 2026-08-17 Création massive : 135 connecteurs employeurs québécois sur 9 plateformes ATS
added docs/connecteurs/altasciences.md +112 −0
Large diff (112 lines) is not loaded by default to keep the page fast.Load diff
added docs/connecteurs/amilia.md +105 −0
Large diff (105 lines) is not loaded by default to keep the page fast.Load diff
added docs/connecteurs/anciapersonnelinc.md +105 −0
Large diff (105 lines) is not loaded by default to keep the page fast.Load diff
added docs/connecteurs/appdirect.md +105 −0
Large diff (105 lines) is not loaded by default to keep the page fast.Load diff
added docs/connecteurs/astucemedia.md +110 −0
Large diff (110 lines) is not loaded by default to keep the page fast.Load diff
added docs/connecteurs/atecna_montreal.md +105 −0
Large diff (105 lines) is not loaded by default to keep the page fast.Load diff
added docs/connecteurs/ats-adp.md +63 −0
Large diff (63 lines) is not loaded by default to keep the page fast.Load diff
added docs/connecteurs/ats-ashby.md +71 −0
Large diff (71 lines) is not loaded by default to keep the page fast.Load diff
added docs/connecteurs/ats-bamboohr.md +94 −0
Large diff (94 lines) is not loaded by default to keep the page fast.Load diff
added docs/connecteurs/ats-breezy.md +71 −0
Large diff (71 lines) is not loaded by default to keep the page fast.Load diff
added docs/connecteurs/ats-digitalrecruiters.md +57 −0
Large diff (57 lines) is not loaded by default to keep the page fast.Load diff
added docs/connecteurs/ats-greenhouse.md +77 −0
Large diff (77 lines) is not loaded by default to keep the page fast.Load diff
added docs/connecteurs/ats-icims.md +64 −0
Large diff (64 lines) is not loaded by default to keep the page fast.Load diff
added docs/connecteurs/ats-lever.md +76 −0
Large diff (76 lines) is not loaded by default to keep the page fast.Load diff
added docs/connecteurs/ats-njoyn.md +69 −0
Large diff (69 lines) is not loaded by default to keep the page fast.Load diff
added docs/connecteurs/ats-recruitee.md +69 −0
Large diff (69 lines) is not loaded by default to keep the page fast.Load diff
added docs/connecteurs/ats-smartrecruiters.md +89 −0
Large diff (89 lines) is not loaded by default to keep the page fast.Load diff
added docs/connecteurs/ats-successfactors.md +61 −0
Large diff (61 lines) is not loaded by default to keep the page fast.Load diff
added docs/connecteurs/ats-taleo.md +69 −0
Large diff (69 lines) is not loaded by default to keep the page fast.Load diff
added docs/connecteurs/ats-ultipro.md +61 −0
Large diff (61 lines) is not loaded by default to keep the page fast.Load diff
added docs/connecteurs/ats-workable.md +78 −0
Large diff (78 lines) is not loaded by default to keep the page fast.Load diff
added docs/connecteurs/ats-workday.md +105 −0
Large diff (105 lines) is not loaded by default to keep the page fast.Load diff
added docs/connecteurs/ats-workland.md +57 −0
Large diff (57 lines) is not loaded by default to keep the page fast.Load diff
added docs/connecteurs/autodesk.md +112 −0
Large diff (112 lines) is not loaded by default to keep the page fast.Load diff
added docs/connecteurs/aviyatech.md +105 −0
Large diff (105 lines) is not loaded by default to keep the page fast.Load diff
added docs/connecteurs/bardel_entertainment.md +105 −0
Large diff (105 lines) is not loaded by default to keep the page fast.Load diff
added docs/connecteurs/bayshore.md +112 −0
Large diff (112 lines) is not loaded by default to keep the page fast.Load diff
added docs/connecteurs/bc2.md +110 −0
Large diff (110 lines) is not loaded by default to keep the page fast.Load diff
added docs/connecteurs/bdc.md +112 −0
Large diff (112 lines) is not loaded by default to keep the page fast.Load diff
added docs/connecteurs/bell_textron.md +112 −0
Large diff (112 lines) is not loaded by default to keep the page fast.Load diff
added docs/connecteurs/beneva.md +112 −0
Large diff (112 lines) is not loaded by default to keep the page fast.Load diff
added docs/connecteurs/bhvr.md +105 −0
Large diff (105 lines) is not loaded by default to keep the page fast.Load diff
added docs/connecteurs/bigbang.md +110 −0
Large diff (110 lines) is not loaded by default to keep the page fast.Load diff
added docs/connecteurs/biximontreal.md +105 −0
Large diff (105 lines) is not loaded by default to keep the page fast.Load diff
added docs/connecteurs/bmo.md +112 −0
Large diff (112 lines) is not loaded by default to keep the page fast.Load diff
added docs/connecteurs/bombardier.md +110 −0
Large diff (110 lines) is not loaded by default to keep the page fast.Load diff
added docs/connecteurs/botpress.md +105 −0
Large diff (105 lines) is not loaded by default to keep the page fast.Load diff
added docs/connecteurs/brandmomentum.md +105 −0
Large diff (105 lines) is not loaded by default to keep the page fast.Load diff
added docs/connecteurs/broadsign.md +105 −0
Large diff (105 lines) is not loaded by default to keep the page fast.Load diff
added docs/connecteurs/broccolini.md +110 −0
Large diff (110 lines) is not loaded by default to keep the page fast.Load diff
added docs/connecteurs/caaquebec.md +112 −0
Large diff (112 lines) is not loaded by default to keep the page fast.Load diff
added docs/connecteurs/cae.md +112 −0
Large diff (112 lines) is not loaded by default to keep the page fast.Load diff
added docs/connecteurs/canada_global.md +105 −0
Large diff (105 lines) is not loaded by default to keep the page fast.Load diff
added docs/connecteurs/canadiantirecorporation.md +112 −0
Large diff (112 lines) is not loaded by default to keep the page fast.Load diff
added docs/connecteurs/capreit.md +110 −0
Large diff (110 lines) is not loaded by default to keep the page fast.Load diff
added docs/connecteurs/cascades.md +110 −0
Large diff (110 lines) is not loaded by default to keep the page fast.Load diff
added docs/connecteurs/cdpq.md +112 −0
Large diff (112 lines) is not loaded by default to keep the page fast.Load diff
added docs/connecteurs/cfmontreal.md +110 −0
Large diff (110 lines) is not loaded by default to keep the page fast.Load diff
added docs/connecteurs/charger_logistics_inc.md +105 −0
Large diff (105 lines) is not loaded by default to keep the page fast.Load diff
added docs/connecteurs/churchdwight.md +112 −0
Large diff (112 lines) is not loaded by default to keep the page fast.Load diff
added docs/connecteurs/cibc.md +116 −0
Large diff (116 lines) is not loaded by default to keep the page fast.Load diff
added docs/connecteurs/cima2.md +110 −0
Large diff (110 lines) is not loaded by default to keep the page fast.Load diff
added docs/connecteurs/circlek.md +112 −0
Large diff (112 lines) is not loaded by default to keep the page fast.Load diff
added docs/connecteurs/cirquedusoleil.md +105 −0
Large diff (105 lines) is not loaded by default to keep the page fast.Load diff
added docs/connecteurs/ciusss_est_montreal.md +112 −0
Large diff (112 lines) is not loaded by default to keep the page fast.Load diff
added docs/connecteurs/cogeco.md +112 −0
Large diff (112 lines) is not loaded by default to keep the page fast.Load diff
added docs/connecteurs/cohere.md +105 −0
Large diff (105 lines) is not loaded by default to keep the page fast.Load diff
added docs/connecteurs/cordonbleu.md +110 −0
Large diff (110 lines) is not loaded by default to keep the page fast.Load diff
added docs/connecteurs/cssdm.md +106 −0
Large diff (106 lines) is not loaded by default to keep the page fast.Load diff
added docs/connecteurs/dcbel.md +110 −0
Large diff (110 lines) is not loaded by default to keep the page fast.Load diff
added docs/connecteurs/depot-direct.md +67 −0
Large diff (67 lines) is not loaded by default to keep the page fast.Load diff
added docs/connecteurs/desjardins.md +112 −0
Large diff (112 lines) is not loaded by default to keep the page fast.Load diff
added docs/connecteurs/devimco.md +110 −0
Large diff (110 lines) is not loaded by default to keep the page fast.Load diff
added docs/connecteurs/dilitrust.md +105 −0
Large diff (105 lines) is not loaded by default to keep the page fast.Load diff
added docs/connecteurs/distro.md +105 −0
Large diff (105 lines) is not loaded by default to keep the page fast.Load diff
added docs/connecteurs/domtar.md +110 −0
Large diff (110 lines) is not loaded by default to keep the page fast.Load diff
added docs/connecteurs/dulcedo.md +105 −0
Large diff (105 lines) is not loaded by default to keep the page fast.Load diff
added docs/connecteurs/edf_renouvelables.md +110 −0
Large diff (110 lines) is not loaded by default to keep the page fast.Load diff
added docs/connecteurs/emcocorporation.md +110 −0
Large diff (110 lines) is not loaded by default to keep the page fast.Load diff
added docs/connecteurs/eminent_valet.md +105 −0
Large diff (105 lines) is not loaded by default to keep the page fast.Load diff
added docs/connecteurs/eosaircraftinc.md +110 −0
Large diff (110 lines) is not loaded by default to keep the page fast.Load diff
added docs/connecteurs/eq3_ltd.md +105 −0
Large diff (105 lines) is not loaded by default to keep the page fast.Load diff
added docs/connecteurs/eqbank.md +105 −0
Large diff (105 lines) is not loaded by default to keep the page fast.Load diff
added docs/connecteurs/espresso_jobs.md +110 −0
Large diff (110 lines) is not loaded by default to keep the page fast.Load diff
added docs/connecteurs/evlo.md +110 −0
Large diff (110 lines) is not loaded by default to keep the page fast.Load diff
added docs/connecteurs/evolving_web.md +105 −0
Large diff (105 lines) is not loaded by default to keep the page fast.Load diff
added docs/connecteurs/exfo.md +112 −0
Large diff (112 lines) is not loaded by default to keep the page fast.Load diff
added docs/connecteurs/explorance.md +110 −0
Large diff (110 lines) is not loaded by default to keep the page fast.Load diff
added docs/connecteurs/fenetresconcept.md +110 −0
Large diff (110 lines) is not loaded by default to keep the page fast.Load diff
added docs/connecteurs/flare.md +110 −0
Large diff (110 lines) is not loaded by default to keep the page fast.Load diff
added docs/connecteurs/flinks.md +105 −0
Large diff (105 lines) is not loaded by default to keep the page fast.Load diff
added docs/connecteurs/fondsftq.md +112 −0
Large diff (112 lines) is not loaded by default to keep the page fast.Load diff
added docs/connecteurs/framestore.md +105 −0
Large diff (105 lines) is not loaded by default to keep the page fast.Load diff
added docs/connecteurs/fuse.md +105 −0
Large diff (105 lines) is not loaded by default to keep the page fast.Load diff
added docs/connecteurs/gameloft.md +110 −0
Large diff (110 lines) is not loaded by default to keep the page fast.Load diff
added docs/connecteurs/gearboxquebec.md +105 −0
Large diff (105 lines) is not loaded by default to keep the page fast.Load diff
added docs/connecteurs/genetec_inc.md +105 −0
Large diff (105 lines) is not loaded by default to keep the page fast.Load diff
added docs/connecteurs/gfs.md +112 −0
Large diff (112 lines) is not loaded by default to keep the page fast.Load diff
added docs/connecteurs/gologic.md +110 −0
Large diff (110 lines) is not loaded by default to keep the page fast.Load diff
added docs/connecteurs/gorh.md +105 −0
Large diff (105 lines) is not loaded by default to keep the page fast.Load diff
added docs/connecteurs/groupecanam.md +110 −0
Large diff (110 lines) is not loaded by default to keep the page fast.Load diff
added docs/connecteurs/gsk.md +112 −0
Large diff (112 lines) is not loaded by default to keep the page fast.Load diff
added docs/connecteurs/guichet_emplois.md +122 −0
Large diff (122 lines) is not loaded by default to keep the page fast.Load diff
added docs/connecteurs/gurussolutions.md +105 −0
Large diff (105 lines) is not loaded by default to keep the page fast.Load diff
added docs/connecteurs/hopper.md +105 −0
Large diff (105 lines) is not loaded by default to keep the page fast.Load diff
added docs/connecteurs/hoyoverse.md +110 −0
Large diff (110 lines) is not loaded by default to keep the page fast.Load diff
added docs/connecteurs/huaweicanada.md +105 −0
Large diff (105 lines) is not loaded by default to keep the page fast.Load diff
added docs/connecteurs/ia_groupe.md +117 −0
Large diff (117 lines) is not loaded by default to keep the page fast.Load diff
added docs/connecteurs/industrious.md +105 −0
Large diff (105 lines) is not loaded by default to keep the page fast.Load diff
added docs/connecteurs/ino_ca.md +105 −0
Large diff (105 lines) is not loaded by default to keep the page fast.Load diff
added docs/connecteurs/intactfc.md +112 −0
Large diff (112 lines) is not loaded by default to keep the page fast.Load diff
added docs/connecteurs/investpsp.md +112 −0
Large diff (112 lines) is not loaded by default to keep the page fast.Load diff
added docs/connecteurs/investquebec.md +112 −0
Large diff (112 lines) is not loaded by default to keep the page fast.Load diff
added docs/connecteurs/jexcelleinc.md +110 −0
Large diff (110 lines) is not loaded by default to keep the page fast.Load diff
added docs/connecteurs/jgrivesud.md +112 −0
Large diff (112 lines) is not loaded by default to keep the page fast.Load diff
added docs/connecteurs/jobillico.md +119 −0
Large diff (119 lines) is not loaded by default to keep the page fast.Load diff
added docs/connecteurs/korem.md +110 −0
Large diff (110 lines) is not loaded by default to keep the page fast.Load diff
added docs/connecteurs/kpidigital.md +110 −0
Large diff (110 lines) is not loaded by default to keep the page fast.Load diff
added docs/connecteurs/labelink.md +110 −0
Large diff (110 lines) is not loaded by default to keep the page fast.Load diff
added docs/connecteurs/lamour.md +105 −0
Large diff (105 lines) is not loaded by default to keep the page fast.Load diff
added docs/connecteurs/lassonde.md +89 −0
Large diff (89 lines) is not loaded by default to keep the page fast.Load diff
added docs/connecteurs/levio.md +105 −0
Large diff (105 lines) is not loaded by default to keep the page fast.Load diff
added docs/connecteurs/lg2.md +105 −0
Large diff (105 lines) is not loaded by default to keep the page fast.Load diff
added docs/connecteurs/lidd.md +105 −0
Large diff (105 lines) is not loaded by default to keep the page fast.Load diff
added docs/connecteurs/lightspeedhq.md +105 −0
Large diff (105 lines) is not loaded by default to keep the page fast.Load diff
added docs/connecteurs/logisco.md +110 −0
Large diff (110 lines) is not loaded by default to keep the page fast.Load diff
added docs/connecteurs/lush.md +105 −0
Large diff (105 lines) is not loaded by default to keep the page fast.Load diff
added docs/connecteurs/maintainx.md +105 −0
Large diff (105 lines) is not loaded by default to keep the page fast.Load diff
added docs/connecteurs/manulife.md +112 −0
Large diff (112 lines) is not loaded by default to keep the page fast.Load diff
added docs/connecteurs/mattelinc.md +110 −0
Large diff (110 lines) is not loaded by default to keep the page fast.Load diff
added docs/connecteurs/mccarthy_tetrault.md +110 −0
Large diff (110 lines) is not loaded by default to keep the page fast.Load diff
added docs/connecteurs/mcgill.md +113 −0
Large diff (113 lines) is not loaded by default to keep the page fast.Load diff
added docs/connecteurs/mckesson.md +112 −0
Large diff (112 lines) is not loaded by default to keep the page fast.Load diff
added docs/connecteurs/medfar.md +110 −0
Large diff (110 lines) is not loaded by default to keep the page fast.Load diff
added docs/connecteurs/medialo.md +105 −0
Large diff (105 lines) is not loaded by default to keep the page fast.Load diff
added docs/connecteurs/messer_canada.md +115 −0
Large diff (115 lines) is not loaded by default to keep the page fast.Load diff
added docs/connecteurs/microhabitat.md +105 −0
Large diff (105 lines) is not loaded by default to keep the page fast.Load diff
added docs/connecteurs/mila_2.md +105 −0
Large diff (105 lines) is not loaded by default to keep the page fast.Load diff
added docs/connecteurs/mirego.md +105 −0
Large diff (105 lines) is not loaded by default to keep the page fast.Load diff
added docs/connecteurs/mistplay.md +105 −0
Large diff (105 lines) is not loaded by default to keep the page fast.Load diff
added docs/connecteurs/mistral_ai.md +105 −0
Large diff (105 lines) is not loaded by default to keep the page fast.Load diff
added docs/connecteurs/mitacs.md +110 −0
Large diff (110 lines) is not loaded by default to keep the page fast.Load diff
added docs/connecteurs/mitsubishi_hc_capital.md +112 −0
Large diff (112 lines) is not loaded by default to keep the page fast.Load diff
added docs/connecteurs/msi_gestion.md +112 −0
Large diff (112 lines) is not loaded by default to keep the page fast.Load diff
added docs/connecteurs/mthreerecruitingportal.md +105 −0
Large diff (105 lines) is not loaded by default to keep the page fast.Load diff
added docs/connecteurs/mxo.md +110 −0
Large diff (110 lines) is not loaded by default to keep the page fast.Load diff
added docs/connecteurs/national.md +105 −0
Large diff (105 lines) is not loaded by default to keep the page fast.Load diff
added docs/connecteurs/nexapp.md +110 −0
Large diff (110 lines) is not loaded by default to keep the page fast.Load diff
added docs/connecteurs/no_saint.md +105 −0
Large diff (105 lines) is not loaded by default to keep the page fast.Load diff
added docs/connecteurs/nomic.md +105 −0
Large diff (105 lines) is not loaded by default to keep the page fast.Load diff
added docs/connecteurs/nora_pharma.md +105 −0
Large diff (105 lines) is not loaded by default to keep the page fast.Load diff
added docs/connecteurs/northwestrubber.md +110 −0
Large diff (110 lines) is not loaded by default to keep the page fast.Load diff
added docs/connecteurs/novipro.md +105 −0
Large diff (105 lines) is not loaded by default to keep the page fast.Load diff
added docs/connecteurs/nuovophotography.md +105 −0
Large diff (105 lines) is not loaded by default to keep the page fast.Load diff
added docs/connecteurs/omni_hotels_gestion.md +110 −0
Large diff (110 lines) is not loaded by default to keep the page fast.Load diff
added docs/connecteurs/omni_hotels_horaire.md +110 −0
Large diff (110 lines) is not loaded by default to keep the page fast.Load diff
added docs/connecteurs/onrunning.md +105 −0
Large diff (105 lines) is not loaded by default to keep the page fast.Load diff
added docs/connecteurs/opalrt.md +110 −0
Large diff (110 lines) is not loaded by default to keep the page fast.Load diff
added docs/connecteurs/osedea.md +105 −0
Large diff (105 lines) is not loaded by default to keep the page fast.Load diff
added docs/connecteurs/ott.md +110 −0
Large diff (110 lines) is not loaded by default to keep the page fast.Load diff
added docs/connecteurs/peoplecanfly.md +110 −0
Large diff (110 lines) is not loaded by default to keep the page fast.Load diff
added docs/connecteurs/petalmd.md +105 −0
Large diff (105 lines) is not loaded by default to keep the page fast.Load diff
added docs/connecteurs/pfizer.md +112 −0
Large diff (112 lines) is not loaded by default to keep the page fast.Load diff
added docs/connecteurs/playmind.md +110 −0
Large diff (110 lines) is not loaded by default to keep the page fast.Load diff
added docs/connecteurs/plusgrade.md +112 −0
Large diff (112 lines) is not loaded by default to keep the page fast.Load diff
added docs/connecteurs/poka.md +105 −0
Large diff (105 lines) is not loaded by default to keep the page fast.Load diff
added docs/connecteurs/portagecybertech.md +110 −0
Large diff (110 lines) is not loaded by default to keep the page fast.Load diff
added docs/connecteurs/potloc.md +109 −0
Large diff (109 lines) is not loaded by default to keep the page fast.Load diff
added docs/connecteurs/pouletrouge.md +110 −0
Large diff (110 lines) is not loaded by default to keep the page fast.Load diff
added docs/connecteurs/promutuel.md +112 −0
Large diff (112 lines) is not loaded by default to keep the page fast.Load diff
added docs/connecteurs/qsl.md +110 −0
Large diff (110 lines) is not loaded by default to keep the page fast.Load diff
added docs/connecteurs/rcgt.md +112 −0
Large diff (112 lines) is not loaded by default to keep the page fast.Load diff
added docs/connecteurs/reitmanscanadalteltd.md +110 −0
Large diff (110 lines) is not loaded by default to keep the page fast.Load diff
added docs/connecteurs/reseau_mieux_etre.md +105 −0
Large diff (105 lines) is not loaded by default to keep the page fast.Load diff
added docs/connecteurs/rethinkcanada.md +110 −0
Large diff (110 lines) is not loaded by default to keep the page fast.Load diff
added docs/connecteurs/riotinto.md +112 −0
Large diff (112 lines) is not loaded by default to keep the page fast.Load diff
added docs/connecteurs/robotiq.md +110 −0
Large diff (110 lines) is not loaded by default to keep the page fast.Load diff
added docs/connecteurs/rodeofx.md +110 −0
Large diff (110 lines) is not loaded by default to keep the page fast.Load diff
added docs/connecteurs/rtc_quebec.md +116 −0
Large diff (116 lines) is not loaded by default to keep the page fast.Load diff
added docs/connecteurs/samsara.md +105 −0
Large diff (105 lines) is not loaded by default to keep the page fast.Load diff
added docs/connecteurs/sante_montreal.md +116 −0
Large diff (116 lines) is not loaded by default to keep the page fast.Load diff
added docs/connecteurs/sante_quebec.md +111 −0
Large diff (111 lines) is not loaded by default to keep the page fast.Load diff
added docs/connecteurs/saputo.md +116 −0
Large diff (116 lines) is not loaded by default to keep the page fast.Load diff
added docs/connecteurs/scalia.md +110 −0
Large diff (110 lines) is not loaded by default to keep the page fast.Load diff
added docs/connecteurs/scottsmiraclegro.md +112 −0
Large diff (112 lines) is not loaded by default to keep the page fast.Load diff
added docs/connecteurs/servicenow.md +59 −0
Large diff (59 lines) is not loaded by default to keep the page fast.Load diff

Diff truncated — file too large.

Menu

Theme