SPB Git forge

spb/job-ka

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

Phase 3 — registres et conformité : sources.json (244 sources, 19 familles ATS + réseau Atlas multi-employeurs, retraits cssdm/ttcglobal, lassonde re-pointé sur le site maison) ; docs/CONFORMITE.md daté 2026-08-19 (bases d'accès des nouvelles familles, base légale des API ATS publiques, démarche documentée pour le flux officiel Guichet-Emplois/Job Bank — page libre-service disparue, passer par le formulaire Aide et soutien —, 11 sources écartées avec raisons) ; docs/connecteurs régénérées (265 fiches) ; njoyn : signature stricte de l'habillage tableau (le libellé du lien doit être le numéro de poste) pour ne jamais intercepter les habillages « titre dans le lien » (STL/RTC).

Simon-Pierre Boucher committed 1 mo ago (Aug 19, 2026) parent 0298197

268 changed files +7,498 −4,232

modified data/sources.json +3088 −2783
@@ -1,2785 +1,3090 @@
1 1 {
2 − "_meta": {
3 − "project": "Job·Ka — Groupe KA",
4 − "author": "Simon-Pierre Boucher <contact@spboucher.ai>",
5 − "role": "Registre descriptif des sources (alimente la page Sources)",
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"
33 − },
34 − "sources": [
35 − {
36 − "id": "cae",
37 − "name": "CAE",
38 − "url": "https://www.cae.com",
39 − "careers_url": "https://cae.wd3.myworkdayjobs.com/career",
40 − "sectors": [
41 − "Aéronautique",
42 − "Simulation",
43 − "TI"
44 − ],
45 − "connector": "workday",
46 − "status": "actif",
47 − "region": "Montréal"
48 − },
49 − {
50 − "id": "desjardins",
51 − "name": "Mouvement Desjardins",
52 − "url": "https://www.desjardins.com",
53 − "careers_url": "https://desjardins.wd10.myworkdayjobs.com/Desjardins",
54 − "sectors": [
55 − "Finance",
56 − "Assurance",
57 − "TI"
58 − ],
59 − "connector": "workday",
60 − "status": "actif",
61 − "region": "Lévis / province"
62 − },
63 − {
64 − "id": "poka",
65 − "name": "Poka",
66 − "url": "https://www.poka.io",
67 − "careers_url": "https://job-boards.greenhouse.io/poka",
68 − "sectors": [
69 − "TI",
70 − "SaaS manufacturier"
71 − ],
72 − "connector": "greenhouse",
73 − "status": "actif",
74 − "region": "Québec"
75 − },
76 − {
77 − "id": "mistplay",
78 − "name": "Mistplay",
79 − "url": "https://www.mistplay.com",
80 − "careers_url": "https://jobs.lever.co/mistplay",
81 − "sectors": [
82 − "TI",
83 − "Jeu mobile"
84 − ],
85 − "connector": "lever",
86 − "status": "actif",
87 − "region": "Montréal"
88 − },
89 − {
90 − "id": "ubisoft",
91 − "name": "Ubisoft",
92 − "url": "https://www.ubisoft.com",
93 − "careers_url": "https://jobs.smartrecruiters.com/company/Ubisoft2",
94 − "sectors": [
95 − "Jeux vidéo",
96 − "TI",
97 − "Création"
98 − ],
99 − "connector": "smartrecruiters",
100 − "status": "actif",
101 − "region": "Montréal / Québec / Sherbrooke"
102 − },
103 − {
104 − "id": "mcgill",
105 − "name": "Université McGill",
106 − "url": "https://www.mcgill.ca",
107 − "careers_url": "https://mcgill.wd3.myworkdayjobs.com/McGill_Careers",
108 − "sectors": [
109 − "Éducation",
110 − "Recherche",
111 − "Administration"
112 − ],
113 − "connector": "workday",
114 − "status": "actif",
115 − "region": "Montréal"
116 − },
117 − {
118 − "id": "agropur",
119 − "name": "Agropur",
120 − "url": "https://www.agropur.com",
121 − "careers_url": "https://agropur.wd3.myworkdayjobs.com/Agropur_Careers",
122 − "sectors": [
123 − "Agroalimentaire",
124 − "Production"
125 − ],
126 − "connector": "workday",
127 − "status": "actif",
128 − "region": "Longueuil / province"
129 − },
130 − {
131 − "id": "saputo",
132 − "name": "Saputo",
133 − "url": "https://www.saputo.com",
134 − "careers_url": "https://saputo.wd5.myworkdayjobs.com/Saputo_External_Careers",
135 − "sectors": [
136 − "Agroalimentaire",
137 − "Production"
138 − ],
139 − "connector": "workday",
140 − "status": "actif",
141 − "region": "Montréal / province"
142 − },
143 − {
144 − "id": "ia_groupe",
145 − "name": "iA Groupe financier",
146 − "url": "https://ia.ca",
147 − "careers_url": "https://ia.wd3.myworkdayjobs.com/Professional",
148 − "sectors": [
149 − "Assurance",
150 − "Finance",
151 − "TI"
152 − ],
153 − "connector": "workday",
154 − "status": "actif",
155 − "region": "Québec"
156 − },
157 − {
158 − "id": "tandemlaunch",
159 − "name": "TandemLaunch",
160 − "url": "https://www.tandemlaunch.com",
161 − "careers_url": "https://boards.greenhouse.io/tandemlaunch",
162 − "sectors": [
163 − "TI",
164 − "Deep tech"
165 − ],
166 − "connector": "greenhouse",
167 − "status": "actif",
168 − "region": "Montréal"
169 − },
170 − {
171 − "id": "potloc",
172 − "name": "Potloc",
173 − "url": "https://www.potloc.com",
174 − "careers_url": "https://jobs.lever.co/Potloc",
175 − "sectors": [
176 − "TI",
177 − "Études de marché"
178 − ],
179 − "connector": "lever",
180 − "status": "actif",
181 − "region": "Montréal"
182 − },
183 − {
184 − "id": "biximontreal",
185 − "name": "BIXI Montréal",
186 − "url": "",
187 − "careers_url": "https://biximontreal.recruitee.com",
188 − "sectors": [
189 − "Transport"
190 − ],
191 − "connector": "recruitee",
192 − "status": "actif",
193 − "region": "Montréal"
194 − },
195 − {
196 − "id": "adeleexpressfr",
197 − "name": "Adèle Express",
198 − "url": "",
199 − "careers_url": "https://adeleexpressfr.recruitee.com",
200 − "sectors": [
201 − "Transport"
202 − ],
203 − "connector": "recruitee",
204 − "status": "actif",
205 − "region": "Montréal"
206 − },
207 − {
208 − "id": "framestore",
209 − "name": "Framestore",
210 − "url": "",
211 − "careers_url": "https://framestore.recruitee.com",
212 − "sectors": [
213 − "Effets visuels",
214 − "Création"
215 − ],
216 − "connector": "recruitee",
217 − "status": "actif",
218 − "region": "Montréal"
219 − },
220 − {
221 − "id": "lg2",
222 − "name": "LG2",
223 − "url": "",
224 − "careers_url": "https://lg2.recruitee.com",
225 − "sectors": [
226 − "Publicité",
227 − "Création"
228 − ],
229 − "connector": "recruitee",
230 − "status": "actif",
231 − "region": "Montréal, Québec"
232 − },
233 − {
234 − "id": "petalmd",
235 − "name": "Petal",
236 − "url": "",
237 − "careers_url": "https://petalmd.recruitee.com",
238 − "sectors": [
239 − "TI",
240 − "Santé"
241 − ],
242 − "connector": "recruitee",
243 − "status": "actif",
244 − "region": "Montréal, Québec"
245 − },
246 − {
247 − "id": "squeezestudio",
248 − "name": "Squeeze Studio Animation",
249 − "url": "",
250 − "careers_url": "https://squeezestudio.recruitee.com",
251 − "sectors": [
252 − "Animation",
253 − "Création"
254 − ],
255 − "connector": "recruitee",
256 − "status": "actif",
257 − "region": "Montréal, Québec"
258 − },
259 − {
260 − "id": "medialo",
261 − "name": "Médialo",
262 − "url": "",
263 − "careers_url": "https://medialo.recruitee.com",
264 − "sectors": [
265 − "Médias"
266 − ],
267 − "connector": "recruitee",
268 − "status": "actif",
269 − "region": "Mont-Laurier, Terrebonne"
270 − },
271 − {
272 − "id": "huaweicanada",
273 − "name": "Huawei Canada",
274 − "url": "",
275 − "careers_url": "https://huaweicanada.recruitee.com",
276 − "sectors": [
277 − "TI",
278 − "Recherche"
279 − ],
280 − "connector": "recruitee",
281 − "status": "actif",
282 − "region": "Montréal"
283 − },
284 − {
285 − "id": "ajwalter",
286 − "name": "AJ Walter Aviation",
287 − "url": "",
288 − "careers_url": "https://ajwalter.recruitee.com",
289 − "sectors": [
290 − "Aéronautique"
291 − ],
292 − "connector": "recruitee",
293 − "status": "actif",
294 − "region": "Montréal"
295 − },
296 − {
297 − "id": "anciapersonnelinc",
298 − "name": "ANCIA Personnel",
299 − "url": "",
300 − "careers_url": "https://anciapersonnelinc.recruitee.com",
301 − "sectors": [
302 − "Placement"
303 − ],
304 − "connector": "recruitee",
305 − "status": "actif",
306 − "region": "Lévis, Québec, Montréal"
307 − },
308 − {
309 − "id": "youset",
310 − "name": "YouSet",
311 − "url": "",
312 − "careers_url": "https://youset.breezy.hr",
313 − "sectors": [
314 − "Assurance",
315 − "TI"
316 − ],
317 − "connector": "breezy",
318 − "status": "actif",
319 − "region": "Montréal"
320 − },
321 − {
322 − "id": "brandmomentum",
323 − "name": "Brand Momentum",
324 − "url": "",
325 − "careers_url": "https://brandmomentum.breezy.hr",
326 − "sectors": [
327 − "Marketing",
328 − "Ventes"
329 − ],
330 − "connector": "breezy",
331 − "status": "actif",
332 − "region": "Montréal, Laval, Québec"
333 − },
334 − {
335 − "id": "ino_ca",
336 − "name": "Luqia (INO)",
337 − "url": "",
338 − "careers_url": "https://ino-ca.breezy.hr",
339 − "sectors": [
340 − "Optique-photonique",
341 − "Recherche"
342 − ],
343 − "connector": "breezy",
344 − "status": "actif",
345 − "region": "Québec"
346 − },
347 − {
348 − "id": "canada_global",
349 − "name": "Canada Global Recruitment",
350 − "url": "",
351 − "careers_url": "https://canada-global.breezy.hr",
352 − "sectors": [
353 − "Placement"
354 − ],
355 − "connector": "breezy",
356 − "status": "actif",
357 − "region": "Montréal"
358 − },
359 − {
360 − "id": "alphanumeric_systems",
361 − "name": "Alphanumeric Systems",
362 − "url": "",
363 − "careers_url": "https://alphanumeric-systems.breezy.hr",
364 − "sectors": [
365 − "TI",
366 − "Santé"
367 − ],
368 − "connector": "breezy",
369 − "status": "actif",
370 − "region": "Montréal, Sainte-Foy"
371 − },
372 − {
373 − "id": "microhabitat",
374 − "name": "MicroHabitat",
375 − "url": "",
376 − "careers_url": "https://microhabitat.breezy.hr",
377 − "sectors": [
378 − "Agriculture urbaine"
379 − ],
380 − "connector": "breezy",
381 − "status": "actif",
382 − "region": "Montréal, Québec"
383 − },
384 − {
385 − "id": "eq3_ltd",
386 − "name": "EQ3",
387 − "url": "",
388 − "careers_url": "https://eq3-ltd.breezy.hr",
389 − "sectors": [
390 − "Commerce de détail",
391 − "Meuble"
392 − ],
393 − "connector": "breezy",
394 − "status": "actif",
395 − "region": "Brossard, Laval, Montréal"
396 − },
397 − {
398 − "id": "nora_pharma",
399 − "name": "Nora Pharma",
400 − "url": "",
401 − "careers_url": "https://nora-pharma.breezy.hr",
402 − "sectors": [
403 − "Pharmaceutique"
404 − ],
405 − "connector": "breezy",
406 − "status": "actif",
407 − "region": "Laval, Montréal, Granby"
408 − },
409 − {
410 − "id": "voxdata",
411 − "name": "VOXDATA",
412 − "url": "",
413 − "careers_url": "https://voxdata.breezy.hr",
414 − "sectors": [
415 − "Centre d'appels"
416 − ],
417 − "connector": "breezy",
418 − "status": "actif",
419 − "region": "Montréal"
420 − },
421 − {
422 − "id": "trois_brasseurs",
423 − "name": "3 Brasseurs Canada",
424 − "url": "",
425 − "careers_url": "https://3brasseurs.breezy.hr",
426 − "sectors": [
427 − "Restauration"
428 − ],
429 − "connector": "breezy",
430 − "status": "actif",
431 − "region": "Montréal, Laval, Brossard"
432 − },
433 − {
434 − "id": "vaporus_inc",
435 − "name": "Vaporus",
436 − "url": "",
437 − "careers_url": "https://vaporus-inc.breezy.hr",
438 − "sectors": [
439 − "Commerce de détail"
440 − ],
441 − "connector": "breezy",
442 − "status": "actif",
443 − "region": "Montréal"
444 − },
445 − {
446 − "id": "reseau_mieux_etre",
447 − "name": "Réseau Mieux-Être",
448 − "url": "",
449 − "careers_url": "https://reseau-mieux-etre.breezy.hr",
450 − "sectors": [
451 − "Santé"
452 − ],
453 − "connector": "breezy",
454 − "status": "actif",
455 − "region": "Montréal"
456 − },
457 − {
458 − "id": "novipro",
459 − "name": "NOVIPRO",
460 − "url": "",
461 − "careers_url": "https://novipro.breezy.hr",
462 − "sectors": [
463 − "TI"
464 − ],
465 − "connector": "breezy",
466 − "status": "actif",
467 − "region": "Montréal, Longueuil"
468 − },
469 − {
470 − "id": "adi_albert_davidson_industries",
471 − "name": "ADI - Albert Davidson Industries",
472 − "url": "",
473 − "careers_url": "https://adi-albert-davidson-industries.breezy.hr",
474 − "sectors": [
475 − "Manufacture"
476 − ],
477 − "connector": "breezy",
478 − "status": "actif",
479 − "region": "Pointe-Claire"
480 − },
481 − {
482 − "id": "tehora",
483 − "name": "TEHORA",
484 − "url": "",
485 − "careers_url": "https://apply.workable.com/tehora",
486 − "sectors": [
487 − "Ingénierie",
488 − "TI",
489 − "Conseil"
490 − ],
491 − "connector": "workable",
492 − "status": "actif",
493 − "region": "Montréal, Québec, Gatineau"
494 − },
495 − {
496 − "id": "sogeclair",
497 − "name": "SOGECLAIR",
498 − "url": "",
499 − "careers_url": "https://apply.workable.com/sogeclair",
500 − "sectors": [
501 − "Aéronautique",
502 − "Ingénierie"
503 − ],
504 − "connector": "workable",
505 − "status": "actif",
506 − "region": "Montréal, Mirabel, Laval"
507 − },
508 − {
509 − "id": "valsoft_corp",
510 − "name": "Valsoft",
511 − "url": "",
512 − "careers_url": "https://apply.workable.com/valsoft-corp",
513 − "sectors": [
514 − "TI",
515 − "Logiciel"
516 − ],
517 − "connector": "workable",
518 − "status": "actif",
519 − "region": "Montréal"
520 − },
521 − {
522 − "id": "sideinc",
523 − "name": "Side (PTW)",
524 − "url": "",
525 − "careers_url": "https://apply.workable.com/sideinc",
526 − "sectors": [
527 − "Jeux vidéo"
528 − ],
529 − "connector": "workable",
530 − "status": "actif",
531 − "region": "Montréal, Québec"
532 − },
533 − {
534 − "id": "tecsys",
535 − "name": "Tecsys",
536 − "url": "",
537 − "careers_url": "https://apply.workable.com/tecsys",
538 − "sectors": [
539 − "TI",
540 − "Logistique"
541 − ],
542 − "connector": "workable",
543 − "status": "actif",
544 − "region": "Montréal"
545 − },
546 − {
547 − "id": "evolving_web",
548 − "name": "Evolving Web",
549 − "url": "",
550 − "careers_url": "https://apply.workable.com/evolving-web",
551 − "sectors": [
552 − "TI",
553 − "Web"
554 − ],
555 − "connector": "workable",
556 − "status": "actif",
557 − "region": "Montréal"
558 − },
559 − {
560 − "id": "lamour",
561 − "name": "Lamour",
562 − "url": "",
563 − "careers_url": "https://apply.workable.com/lamour",
564 − "sectors": [
565 − "Textile",
566 − "Manufacture"
567 − ],
568 − "connector": "workable",
569 − "status": "actif",
570 − "region": "Montréal"
571 − },
572 − {
573 − "id": "botpress",
574 − "name": "Botpress",
575 − "url": "",
576 − "careers_url": "https://apply.workable.com/botpress",
577 − "sectors": [
578 − "TI",
579 − "IA"
580 − ],
581 − "connector": "workable",
582 − "status": "actif",
583 − "region": "Montréal, Québec"
584 − },
585 − {
586 − "id": "eminent_valet",
587 − "name": "Eminent Valet",
588 − "url": "",
589 − "careers_url": "https://apply.workable.com/eminent-valet",
590 − "sectors": [
591 − "Services"
592 − ],
593 − "connector": "workable",
594 − "status": "actif",
595 − "region": "Montréal"
596 − },
597 − {
598 − "id": "lidd",
599 − "name": "LIDD Consultants",
600 − "url": "",
601 − "careers_url": "https://apply.workable.com/lidd",
602 − "sectors": [
603 − "Conseil",
604 − "Logistique"
605 − ],
606 − "connector": "workable",
607 − "status": "actif",
608 − "region": "Montréal"
609 − },
610 − {
611 − "id": "nuovophotography",
612 − "name": "Nuovo Photography",
613 − "url": "",
614 − "careers_url": "https://apply.workable.com/nuovophotography",
615 − "sectors": [
616 − "Photographie"
617 − ],
618 − "connector": "workable",
619 − "status": "actif",
620 − "region": "Montréal"
621 − },
622 − {
623 − "id": "sweat_pants_agency",
624 − "name": "Sweat Pants Agency",
625 − "url": "",
626 − "careers_url": "https://apply.workable.com/sweat-pants-agency",
627 − "sectors": [
628 − "Marketing"
629 − ],
630 − "connector": "workable",
631 − "status": "actif",
632 − "region": "Montréal, Laval, Québec"
633 − },
634 − {
635 − "id": "flinks",
636 − "name": "Flinks",
637 − "url": "",
638 − "careers_url": "https://apply.workable.com/flinks",
639 − "sectors": [
640 − "TI",
641 − "Fintech"
642 − ],
643 − "connector": "workable",
644 − "status": "actif",
645 − "region": "Montréal"
646 − },
647 − {
648 − "id": "unit8",
649 − "name": "Unit8",
650 − "url": "",
651 − "careers_url": "https://apply.workable.com/unit8",
652 − "sectors": [
653 − "TI",
654 − "Données"
655 − ],
656 − "connector": "workable",
657 − "status": "actif",
658 − "region": "Montréal"
659 − },
660 − {
661 − "id": "bardel_entertainment",
662 − "name": "Bardel Entertainment",
663 − "url": "",
664 − "careers_url": "https://apply.workable.com/bardel-entertainment",
665 − "sectors": [
666 − "Animation"
667 − ],
668 − "connector": "workable",
669 − "status": "actif",
670 − "region": "Montréal"
671 − },
672 − {
673 − "id": "atecna_montreal",
674 − "name": "Atecna",
675 − "url": "",
676 − "careers_url": "https://apply.workable.com/atecna-montreal",
677 − "sectors": [
678 − "TI",
679 − "Conseil"
680 − ],
681 − "connector": "workable",
682 − "status": "actif",
683 − "region": "Montréal"
684 − },
685 − {
686 − "id": "charger_logistics_inc",
687 − "name": "Charger Logistics",
688 − "url": "",
689 − "careers_url": "https://apply.workable.com/charger-logistics-inc",
690 − "sectors": [
691 − "Transport",
692 − "Logistique"
693 − ],
694 − "connector": "workable",
695 − "status": "actif",
696 − "region": "Dorval"
697 − },
698 − {
699 − "id": "maintainx",
700 − "name": "MaintainX",
701 − "url": "",
702 − "careers_url": "https://jobs.ashbyhq.com/maintainx",
703 − "sectors": [
704 − "TI",
705 − "SaaS"
706 − ],
707 − "connector": "ashby",
708 − "status": "actif",
709 − "region": "Montréal"
710 − },
711 − {
712 − "id": "tetrix",
713 − "name": "Tetrix",
714 − "url": "",
715 − "careers_url": "https://jobs.ashbyhq.com/tetrix",
716 − "sectors": [
717 − "TI"
718 − ],
719 − "connector": "ashby",
720 − "status": "actif",
721 − "region": "Montréal"
722 − },
723 − {
724 − "id": "hopper",
725 − "name": "Hopper",
726 − "url": "",
727 − "careers_url": "https://jobs.ashbyhq.com/hopper",
728 − "sectors": [
729 − "TI",
730 − "Voyage"
731 − ],
732 − "connector": "ashby",
733 − "status": "actif",
734 − "region": "Montréal"
735 − },
736 − {
737 − "id": "mistral_ai",
738 − "name": "Mistral AI",
739 − "url": "",
740 − "careers_url": "https://jobs.ashbyhq.com/mistral.ai",
741 − "sectors": [
742 − "TI",
743 − "IA"
744 − ],
745 − "connector": "ashby",
746 − "status": "actif",
747 − "region": "Montréal"
748 − },
749 − {
750 − "id": "nomic",
751 − "name": "Nomic Bio",
752 − "url": "",
753 − "careers_url": "https://jobs.ashbyhq.com/nomic",
754 − "sectors": [
755 − "Biotechnologie"
756 − ],
757 − "connector": "ashby",
758 − "status": "actif",
759 − "region": "Montréal"
760 − },
761 − {
762 − "id": "fuse",
763 − "name": "Fuse Energy",
764 − "url": "",
765 − "careers_url": "https://jobs.ashbyhq.com/Fuse",
766 − "sectors": [
767 − "Énergie",
768 − "TI"
769 − ],
770 − "connector": "ashby",
771 − "status": "actif",
772 − "region": "Montréal"
773 − },
774 − {
775 − "id": "no_saint",
776 − "name": "No Saint",
777 − "url": "",
778 − "careers_url": "https://jobs.ashbyhq.com/no-saint",
779 − "sectors": [
780 − "Création"
781 − ],
782 − "connector": "ashby",
783 − "status": "actif",
784 − "region": "Montréal"
785 − },
786 − {
787 − "id": "vasco",
788 − "name": "Vasco",
789 − "url": "",
790 − "careers_url": "https://jobs.ashbyhq.com/vasco",
791 − "sectors": [
792 − "TI"
793 − ],
794 − "connector": "ashby",
795 − "status": "actif",
796 − "region": "Montréal"
797 − },
798 − {
799 − "id": "cohere",
800 − "name": "Cohere",
801 − "url": "",
802 − "careers_url": "https://jobs.ashbyhq.com/cohere",
803 − "sectors": [
804 − "TI",
805 − "IA"
806 − ],
807 − "connector": "ashby",
808 − "status": "actif",
809 − "region": "Montréal"
810 − },
811 − {
812 − "id": "industrious",
813 − "name": "Industrious",
814 − "url": "",
815 − "careers_url": "https://jobs.ashbyhq.com/industrious",
816 − "sectors": [
817 − "Immobilier",
818 − "Services"
819 − ],
820 − "connector": "ashby",
821 − "status": "actif",
822 − "region": "Montréal"
823 − },
824 − {
825 − "id": "eqbank",
826 − "name": "EQ Bank",
827 − "url": "",
828 − "careers_url": "https://jobs.lever.co/eqbank",
829 − "sectors": [
830 − "Finance"
831 − ],
832 − "connector": "lever",
833 − "status": "actif",
834 − "region": "Montréal"
835 − },
836 − {
837 − "id": "usmobile",
838 − "name": "US Mobile",
839 − "url": "",
840 − "careers_url": "https://jobs.lever.co/USMobile",
841 − "sectors": [
842 − "Télécoms"
843 − ],
844 − "connector": "lever",
845 − "status": "actif",
846 − "region": "Montréal"
847 − },
848 − {
849 − "id": "dilitrust",
850 − "name": "DiliTrust",
851 − "url": "",
852 − "careers_url": "https://jobs.lever.co/dilitrust",
853 − "sectors": [
854 − "TI",
855 − "Juridique"
856 − ],
857 − "connector": "lever",
858 − "status": "actif",
859 − "region": "Montréal"
860 − },
861 − {
862 − "id": "spreedly",
863 − "name": "Spreedly",
864 − "url": "",
865 − "careers_url": "https://jobs.lever.co/spreedly",
866 − "sectors": [
867 − "TI",
868 − "Fintech"
869 − ],
870 − "connector": "lever",
871 − "status": "actif",
872 − "region": "Montréal"
873 − },
874 − {
875 − "id": "xsolla",
876 − "name": "Xsolla",
877 − "url": "",
878 − "careers_url": "https://jobs.lever.co/xsolla",
879 − "sectors": [
880 − "TI",
881 − "Jeux vidéo"
882 − ],
883 − "connector": "lever",
884 − "status": "actif",
885 − "region": "Montréal"
886 − },
887 − {
888 − "id": "alimentiv_2",
889 − "name": "Alimentiv",
890 − "url": "",
891 − "careers_url": "https://jobs.lever.co/alimentiv-2",
892 − "sectors": [
893 − "Recherche clinique"
894 − ],
895 − "connector": "lever",
896 − "status": "actif",
897 − "region": "Montréal, Québec"
898 − },
899 − {
900 − "id": "vo2_group",
901 − "name": "VO2 Group",
902 − "url": "",
903 − "careers_url": "https://jobs.lever.co/vo2-group",
904 − "sectors": [
905 − "TI",
906 − "Conseil"
907 − ],
908 − "connector": "lever",
909 − "status": "actif",
910 − "region": "Montréal"
911 − },
912 − {
913 − "id": "distro",
914 − "name": "Distro",
915 − "url": "",
916 − "careers_url": "https://jobs.lever.co/distro",
917 − "sectors": [
918 − "Ventes",
919 − "TI"
920 − ],
921 − "connector": "lever",
922 − "status": "actif",
923 − "region": "Montréal, Westmount"
924 − },
925 − {
926 − "id": "aviyatech",
927 − "name": "Aviya Aerospace Systems",
928 − "url": "",
929 − "careers_url": "https://jobs.lever.co/aviyatech",
930 − "sectors": [
931 − "Aéronautique"
932 − ],
933 − "connector": "lever",
934 − "status": "actif",
935 − "region": "Longueuil"
936 − },
937 − {
938 − "id": "gorh",
939 − "name": "Go RH",
940 − "url": "",
941 − "careers_url": "https://jobs.lever.co/gorh",
942 − "sectors": [
943 − "Placement",
944 − "RH"
945 − ],
946 − "connector": "lever",
947 − "status": "actif",
948 − "region": "Montréal, Québec"
949 − },
950 − {
951 − "id": "tsmg",
952 − "name": "TSMG",
953 − "url": "",
954 − "careers_url": "https://jobs.lever.co/tsmg",
955 − "sectors": [
956 − "Placement",
957 − "Télécoms"
958 − ],
959 − "connector": "lever",
960 − "status": "actif",
961 − "region": "Montréal, Québec"
962 − },
963 − {
964 − "id": "dulcedo",
965 − "name": "Dulcedo Management",
966 − "url": "",
967 − "careers_url": "https://jobs.lever.co/dulcedo",
968 − "sectors": [
969 − "Mode",
970 − "Gestion d'artistes"
971 − ],
972 − "connector": "lever",
973 − "status": "actif",
974 − "region": "Montréal"
975 − },
976 − {
977 − "id": "osedea",
978 − "name": "OSEDEA",
979 − "url": "",
980 − "careers_url": "https://jobs.lever.co/osedea",
981 − "sectors": [
982 − "TI",
983 − "Web"
984 − ],
985 − "connector": "lever",
986 − "status": "actif",
987 − "region": "Montréal"
988 − },
989 − {
990 − "id": "mthreerecruitingportal",
991 − "name": "mthree",
992 − "url": "",
993 − "careers_url": "https://job-boards.greenhouse.io/mthreerecruitingportal",
994 − "sectors": [
995 − "TI",
996 − "Placement"
997 − ],
998 − "connector": "greenhouse",
999 − "status": "actif",
1000 − "region": "Montréal"
1001 − },
1002 − {
1003 − "id": "appdirect",
1004 − "name": "AppDirect",
1005 − "url": "",
1006 − "careers_url": "https://job-boards.greenhouse.io/appdirect",
1007 − "sectors": [
1008 − "TI",
1009 − "SaaS"
1010 − ],
1011 − "connector": "greenhouse",
1012 − "status": "actif",
1013 − "region": "Montréal"
1014 − },
1015 − {
1016 − "id": "siainnovationsinc",
1017 − "name": "SIA Innovations",
1018 − "url": "",
1019 − "careers_url": "https://job-boards.greenhouse.io/siainnovationsinc",
1020 − "sectors": [
1021 − "TI"
1022 − ],
1023 − "connector": "greenhouse",
1024 − "status": "actif",
1025 − "region": "Montréal"
1026 − },
1027 − {
1028 − "id": "gearboxquebec",
1029 − "name": "Gearbox Studio Québec",
1030 − "url": "",
1031 − "careers_url": "https://job-boards.greenhouse.io/gearboxquebec",
1032 − "sectors": [
1033 − "Jeux vidéo"
1034 − ],
1035 − "connector": "greenhouse",
1036 − "status": "actif",
1037 − "region": "Montréal, Québec"
1038 − },
1039 − {
1040 − "id": "broadsign",
1041 − "name": "Broadsign",
1042 − "url": "",
1043 − "careers_url": "https://job-boards.greenhouse.io/broadsign",
1044 − "sectors": [
1045 − "TI",
1046 − "Affichage"
1047 − ],
1048 − "connector": "greenhouse",
1049 − "status": "actif",
1050 − "region": "Montréal"
1051 − },
1052 − {
1053 − "id": "lush",
1054 − "name": "Lush Cosmétiques",
1055 − "url": "",
1056 − "careers_url": "https://job-boards.greenhouse.io/lush",
1057 − "sectors": [
1058 − "Commerce de détail"
1059 − ],
1060 − "connector": "greenhouse",
1061 − "status": "actif",
1062 − "region": "Montréal, Québec"
1063 − },
1064 − {
1065 − "id": "onrunning",
1066 − "name": "On Running",
1067 − "url": "",
1068 − "careers_url": "https://job-boards.greenhouse.io/onrunning",
1069 − "sectors": [
1070 − "Commerce de détail",
1071 − "Sport"
1072 − ],
1073 − "connector": "greenhouse",
1074 − "status": "actif",
1075 − "region": "Montréal"
1076 − },
1077 − {
1078 − "id": "vmlcanadaen",
1079 − "name": "VML Canada",
1080 − "url": "",
1081 − "careers_url": "https://job-boards.greenhouse.io/vmlcanadaen",
1082 − "sectors": [
1083 − "Publicité"
1084 − ],
1085 − "connector": "greenhouse",
1086 − "status": "actif",
1087 − "region": "Montréal"
1088 − },
1089 − {
1090 − "id": "ttcglobal",
1091 − "name": "TTC Global",
1092 − "url": "",
1093 − "careers_url": "https://job-boards.greenhouse.io/ttcglobal",
1094 − "sectors": [
1095 − "TI",
1096 − "Conseil"
1097 − ],
1098 − "connector": "greenhouse",
1099 − "status": "actif",
1100 − "region": "Montréal"
1101 − },
1102 − {
1103 − "id": "national",
1104 − "name": "NATIONAL",
1105 − "url": "",
1106 − "careers_url": "https://job-boards.greenhouse.io/national",
1107 − "sectors": [
1108 − "Relations publiques"
1109 − ],
1110 − "connector": "greenhouse",
1111 − "status": "actif",
1112 − "region": "Montréal"
1113 − },
1114 − {
1115 − "id": "vaco",
1116 − "name": "Vaco",
1117 − "url": "",
1118 − "careers_url": "https://job-boards.greenhouse.io/vaco",
1119 − "sectors": [
1120 − "Placement",
1121 − "Conseil"
1122 − ],
1123 − "connector": "greenhouse",
1124 − "status": "actif",
1125 − "region": "Montréal"
1126 − },
1127 − {
1128 − "id": "samsara",
1129 − "name": "Samsara",
1130 − "url": "",
1131 − "careers_url": "https://job-boards.greenhouse.io/samsara",
1132 − "sectors": [
1133 − "TI",
1134 − "IoT"
1135 − ],
1136 − "connector": "greenhouse",
1137 − "status": "actif",
1138 − "region": "Montréal"
1139 − },
1140 − {
1141 − "id": "rodeofx",
1142 − "name": "Rodeo FX",
1143 − "url": "",
1144 − "careers_url": "https://jobs.smartrecruiters.com/company/RodeoFX",
1145 − "sectors": [
1146 − "Effets visuels",
1147 − "Création"
1148 − ],
1149 − "connector": "smartrecruiters",
1150 − "status": "actif",
1151 − "region": "Montréal, Québec"
1152 − },
1153 − {
1154 − "id": "mattelinc",
1155 − "name": "Mattel (Mega Bloks)",
1156 − "url": "",
1157 − "careers_url": "https://jobs.smartrecruiters.com/company/MattelInc",
1158 − "sectors": [
1159 − "Jouets",
1160 − "Manufacture"
1161 − ],
1162 − "connector": "smartrecruiters",
1163 − "status": "actif",
1164 − "region": "Montréal"
1165 − },
1166 − {
1167 − "id": "servicenow",
1168 − "name": "ServiceNow",
1169 − "url": "",
1170 − "careers_url": "https://jobs.smartrecruiters.com/company/ServiceNow",
1171 − "sectors": [
1172 − "TI",
1173 − "SaaS"
1174 − ],
1175 − "connector": "smartrecruiters",
1176 − "status": "actif",
1177 − "region": "Montréal"
1178 − },
1179 − {
1180 − "id": "medfar",
1181 − "name": "MEDFAR Solutions Cliniques",
1182 − "url": "",
1183 − "careers_url": "https://jobs.smartrecruiters.com/company/Medfar",
1184 − "sectors": [
1185 − "TI",
1186 − "Santé"
1187 − ],
1188 − "connector": "smartrecruiters",
1189 − "status": "actif",
1190 − "region": "Montréal"
1191 − },
1192 − {
1193 − "id": "astucemedia",
1194 − "name": "Astucemedia",
1195 − "url": "",
1196 − "careers_url": "https://jobs.smartrecruiters.com/company/Astucemedia",
1197 − "sectors": [
1198 − "Médias",
1199 − "TI"
1200 − ],
1201 − "connector": "smartrecruiters",
1202 − "status": "actif",
1203 − "region": "Montréal"
1204 − },
1205 − {
1206 − "id": "emcocorporation",
1207 − "name": "EMCO",
1208 − "url": "",
1209 − "careers_url": "https://jobs.smartrecruiters.com/company/EMCOCorporation",
1210 − "sectors": [
1211 − "Distribution",
1212 − "Construction"
1213 − ],
1214 − "connector": "smartrecruiters",
1215 − "status": "actif",
1216 − "region": "Montréal, Québec, Laval"
1217 − },
1218 − {
1219 − "id": "cfmontreal",
1220 − "name": "CF Montréal",
1221 − "url": "",
1222 − "careers_url": "https://jobs.smartrecruiters.com/company/CFMontreal",
1223 − "sectors": [
1224 − "Sport"
1225 − ],
1226 − "connector": "smartrecruiters",
1227 − "status": "actif",
1228 − "region": "Montréal"
1229 − },
1230 − {
1231 − "id": "reitmanscanadalteltd",
1232 − "name": "Reitmans",
1233 − "url": "",
1234 − "careers_url": "https://jobs.smartrecruiters.com/company/ReitmansCanadaLteLtd",
1235 − "sectors": [
1236 − "Commerce de détail",
1237 − "Mode"
1238 − ],
1239 − "connector": "smartrecruiters",
1240 − "status": "actif",
1241 − "region": "Montréal, Québec, Laval"
1242 − },
1243 − {
1244 − "id": "transatat1",
1245 − "name": "Transat A.T.",
1246 − "url": "",
1247 − "careers_url": "https://jobs.smartrecruiters.com/company/TransatAT1",
1248 − "sectors": [
1249 − "Voyage",
1250 − "Aérien"
1251 − ],
1252 − "connector": "smartrecruiters",
1253 − "status": "actif",
1254 − "region": "Montréal"
1255 − },
1256 − {
1257 − "id": "talan",
1258 − "name": "Talan",
1259 − "url": "",
1260 − "careers_url": "https://jobs.smartrecruiters.com/company/Talan",
1261 − "sectors": [
1262 − "TI",
1263 − "Conseil"
1264 − ],
1265 − "connector": "smartrecruiters",
1266 − "status": "actif",
1267 − "region": "Montréal"
1268 − },
1269 − {
1270 − "id": "hoyoverse",
1271 − "name": "HoYoverse",
1272 − "url": "",
1273 − "careers_url": "https://jobs.smartrecruiters.com/company/hoyoverse",
1274 − "sectors": [
1275 − "Jeux vidéo"
1276 − ],
1277 − "connector": "smartrecruiters",
1278 − "status": "actif",
1279 − "region": "Montréal"
1280 − },
1281 − {
1282 − "id": "peoplecanfly",
1283 − "name": "People Can Fly",
1284 − "url": "",
1285 − "careers_url": "https://jobs.smartrecruiters.com/company/PeopleCanFly",
1286 − "sectors": [
1287 − "Jeux vidéo"
1288 − ],
1289 − "connector": "smartrecruiters",
1290 − "status": "actif",
1291 − "region": "Montréal"
1292 − },
1293 − {
1294 − "id": "techo_bloc",
1295 − "name": "Techo-Bloc",
1296 − "url": "",
1297 − "careers_url": "https://jobs.smartrecruiters.com/company/techo-bloc",
1298 − "sectors": [
1299 − "Manufacture",
1300 − "Aménagement"
1301 − ],
1302 − "connector": "smartrecruiters",
1303 − "status": "actif",
1304 − "region": "Chambly, Saint-Hubert"
1305 − },
1306 − {
1307 − "id": "sparkgrid",
1308 − "name": "Sparkgrid",
1309 − "url": "",
1310 − "careers_url": "https://jobs.smartrecruiters.com/company/Sparkgrid",
1311 − "sectors": [
1312 − "TI"
1313 − ],
1314 − "connector": "smartrecruiters",
1315 − "status": "actif",
1316 − "region": "Montréal"
1317 − },
1318 − {
1319 − "id": "xplornet",
1320 − "name": "Xplornet",
1321 − "url": "",
1322 − "careers_url": "https://jobs.smartrecruiters.com/company/XPLORNET",
1323 − "sectors": [
1324 − "Télécoms"
1325 − ],
1326 − "connector": "smartrecruiters",
1327 − "status": "actif",
1328 − "region": "Montréal"
1329 − },
1330 − {
1331 − "id": "cima2",
1332 − "name": "CIMA+",
1333 − "url": "",
1334 − "careers_url": "https://jobs.smartrecruiters.com/company/CIMA2",
1335 − "sectors": [
1336 − "Ingénierie"
1337 − ],
1338 − "connector": "smartrecruiters",
1339 − "status": "actif",
1340 − "region": "Montréal, Québec, Laval"
1341 − },
1342 − {
1343 − "id": "venturemedia",
1344 − "name": "Venture Media",
1345 − "url": "",
1346 − "careers_url": "https://jobs.smartrecruiters.com/company/VentureMedia",
1347 − "sectors": [
1348 − "Médias"
1349 − ],
1350 − "connector": "smartrecruiters",
1351 − "status": "actif",
1352 − "region": "Montréal"
1353 − },
1354 − {
1355 − "id": "jexcelleinc",
1356 − "name": "J'Excelle",
1357 − "url": "",
1358 − "careers_url": "https://jobs.smartrecruiters.com/company/JExcelleInc",
1359 − "sectors": [
1360 − "Placement"
1361 − ],
1362 − "connector": "smartrecruiters",
1363 − "status": "actif",
1364 − "region": "Montréal, Laval, Gatineau"
1365 − },
1366 − {
1367 − "id": "circlek",
1368 − "name": "Couche-Tard / Circle K",
1369 − "url": "",
1370 − "careers_url": "https://circlek.wd3.myworkdayjobs.com/CircleKStoreJobs",
1371 − "sectors": [
1372 − "Commerce de détail"
1373 − ],
1374 − "connector": "workday",
1375 − "status": "actif",
1376 − "region": "Québec, Montréal, Drummondville"
1377 − },
1378 − {
1379 − "id": "td",
1380 − "name": "Groupe Banque TD",
1381 − "url": "",
1382 − "careers_url": "https://td.wd3.myworkdayjobs.com/TD_Bank_Careers",
1383 − "sectors": [
1384 − "Finance"
1385 − ],
1386 − "connector": "workday",
1387 − "status": "actif",
1388 − "region": "Montréal, Québec"
1389 − },
1390 − {
1391 − "id": "cibc",
1392 − "name": "Banque CIBC",
1393 − "url": "",
1394 − "careers_url": "https://cibc.wd3.myworkdayjobs.com/search",
1395 − "sectors": [
1396 − "Finance"
1397 − ],
1398 − "connector": "workday",
1399 − "status": "actif",
1400 − "region": "Montréal, Québec"
1401 − },
1402 − {
1403 − "id": "bmo",
1404 − "name": "BMO Groupe financier",
1405 − "url": "",
1406 − "careers_url": "https://bmo.wd3.myworkdayjobs.com/External",
1407 − "sectors": [
1408 − "Finance"
1409 − ],
1410 − "connector": "workday",
1411 − "status": "actif",
1412 − "region": "Montréal, Laval, Gatineau"
1413 − },
1414 − {
1415 − "id": "autodesk",
1416 − "name": "Autodesk",
1417 − "url": "",
1418 − "careers_url": "https://autodesk.wd1.myworkdayjobs.com/Ext",
1419 − "sectors": [
1420 − "TI",
1421 − "Logiciel"
1422 − ],
1423 − "connector": "workday",
1424 − "status": "actif",
1425 − "region": "Montréal"
1426 − },
1427 − {
1428 − "id": "manulife",
1429 − "name": "Manuvie",
1430 − "url": "",
1431 − "careers_url": "https://manulife.wd3.myworkdayjobs.com/MFCJH_Jobs",
1432 − "sectors": [
1433 − "Assurance",
1434 − "Finance"
1435 − ],
1436 − "connector": "workday",
1437 − "status": "actif",
1438 − "region": "Montréal"
1439 − },
1440 − {
1441 − "id": "cogeco",
1442 − "name": "Cogeco",
1443 − "url": "",
1444 − "careers_url": "https://cogeco.wd3.myworkdayjobs.com/Cogeco_Careers",
1445 − "sectors": [
1446 − "Télécoms"
1447 − ],
1448 − "connector": "workday",
1449 − "status": "actif",
1450 − "region": "Montréal, Trois-Rivières"
1451 − },
1452 − {
1453 − "id": "mckesson",
1454 − "name": "McKesson Canada",
1455 − "url": "",
1456 − "careers_url": "https://mckesson.wd3.myworkdayjobs.com/External_Careers",
1457 − "sectors": [
1458 − "Pharmaceutique",
1459 − "Distribution"
1460 − ],
1461 − "connector": "workday",
1462 − "status": "actif",
1463 − "region": "Montréal"
1464 − },
1465 − {
1466 − "id": "sunlife",
1467 − "name": "Sun Life",
1468 − "url": "",
1469 − "careers_url": "https://sunlife.wd3.myworkdayjobs.com/Experienced-Jobs",
1470 − "sectors": [
1471 − "Assurance",
1472 − "Finance"
1473 − ],
1474 − "connector": "workday",
1475 − "status": "actif",
1476 − "region": "Montréal, Québec"
1477 − },
1478 − {
1479 − "id": "gsk",
1480 − "name": "GSK",
1481 − "url": "",
1482 − "careers_url": "https://gsk.wd5.myworkdayjobs.com/GSKCareers",
1483 − "sectors": [
1484 − "Pharmaceutique"
1485 − ],
1486 − "connector": "workday",
1487 − "status": "actif",
1488 − "region": "Laval, Québec"
1489 − },
1490 − {
1491 − "id": "pfizer",
1492 − "name": "Pfizer Canada",
1493 − "url": "",
1494 − "careers_url": "https://pfizer.wd1.myworkdayjobs.com/PfizerCareers",
1495 − "sectors": [
1496 − "Pharmaceutique"
1497 − ],
1498 − "connector": "workday",
1499 − "status": "actif",
1500 − "region": "Kirkland"
1501 − },
1502 − {
1503 − "id": "vicpark",
1504 − "name": "Victoria Park Medispa",
1505 − "url": "",
1506 − "careers_url": "https://vicpark.bamboohr.com/careers",
1507 − "sectors": [
1508 − "Santé",
1509 − "Esthétique"
1510 − ],
1511 − "connector": "bamboohr",
1512 − "status": "actif",
1513 − "region": "Montréal, Gatineau, Granby"
1514 − },
1515 − {
1516 − "id": "labelink",
1517 − "name": "Produits Labelink",
1518 − "url": "",
1519 − "careers_url": "https://labelink.bamboohr.com/careers",
1520 − "sectors": [
1521 − "Impression",
1522 − "Manufacture"
1523 − ],
1524 − "connector": "bamboohr",
1525 − "status": "actif",
1526 − "region": "Montréal, Laval, Granby"
1527 − },
1528 − {
1529 − "id": "dcbel",
1530 − "name": "dcbel",
1531 − "url": "",
1532 − "careers_url": "https://dcbel.bamboohr.com/careers",
1533 − "sectors": [
1534 − "Énergie",
1535 − "TI"
1536 − ],
1537 − "connector": "bamboohr",
1538 − "status": "actif",
1539 − "region": "Montréal"
1540 − },
1541 − {
1542 − "id": "explorance",
1543 − "name": "Explorance",
1544 − "url": "",
1545 − "careers_url": "https://explorance.bamboohr.com/careers",
1546 − "sectors": [
1547 − "TI",
1548 − "SaaS"
1549 − ],
1550 − "connector": "bamboohr",
1551 − "status": "actif",
1552 − "region": "Montréal"
1553 − },
1554 − {
1555 − "id": "opalrt",
1556 − "name": "OPAL-RT Technologies",
1557 − "url": "",
1558 − "careers_url": "https://opalrt.bamboohr.com/careers",
1559 − "sectors": [
1560 − "TI",
1561 − "Ingénierie"
1562 − ],
1563 − "connector": "bamboohr",
1564 − "status": "actif",
1565 − "region": "Montréal"
1566 − },
1567 − {
1568 − "id": "kpidigital",
1569 − "name": "KPI Digital",
1570 − "url": "",
1571 − "careers_url": "https://kpidigital.bamboohr.com/careers",
1572 − "sectors": [
1573 − "TI",
1574 − "Données"
1575 − ],
1576 − "connector": "bamboohr",
1577 − "status": "actif",
1578 − "region": "Montréal"
1579 − },
1580 − {
1581 − "id": "triotech",
1582 − "name": "Triotech",
1583 − "url": "",
1584 − "careers_url": "https://triotech.bamboohr.com/careers",
1585 − "sectors": [
1586 − "Divertissement",
1587 − "Manufacture"
1588 − ],
1589 − "connector": "bamboohr",
1590 − "status": "actif",
1591 − "region": "Joliette, Montréal"
1592 − },
1593 − {
1594 − "id": "robotiq",
1595 − "name": "Robotiq",
1596 − "url": "",
1597 − "careers_url": "https://robotiq.bamboohr.com/careers",
1598 − "sectors": [
1599 − "Robotique",
1600 − "Manufacture"
1601 − ],
1602 − "connector": "bamboohr",
1603 − "status": "actif",
1604 − "region": "Lévis"
1605 − },
1606 − {
1607 − "id": "northwestrubber",
1608 − "name": "North West Rubber",
1609 − "url": "",
1610 − "careers_url": "https://northwestrubber.bamboohr.com/careers",
1611 − "sectors": [
1612 − "Manufacture"
1613 − ],
1614 − "connector": "bamboohr",
1615 − "status": "actif",
1616 − "region": "Sherbrooke"
1617 − },
1618 − {
1619 − "id": "nexapp",
1620 − "name": "Nexapp",
1621 − "url": "",
1622 − "careers_url": "https://nexapp.bamboohr.com/careers",
1623 − "sectors": [
1624 − "TI",
1625 − "Web"
1626 − ],
1627 − "connector": "bamboohr",
1628 − "status": "actif",
1629 − "region": "Québec"
1630 − },
1631 − {
1632 − "id": "scalia",
1633 − "name": "Propriétés Scalia",
1634 − "url": "",
1635 − "careers_url": "https://scalia.bamboohr.com/careers",
1636 − "sectors": [
1637 − "Immobilier"
1638 − ],
1639 − "connector": "bamboohr",
1640 − "status": "actif",
1641 − "region": "Montréal, Anjou"
1642 − },
1643 − {
1644 − "id": "surmesur",
1645 − "name": "Surmesur",
1646 − "url": "",
1647 − "careers_url": "https://surmesur.bamboohr.com/careers",
1648 − "sectors": [
1649 − "Mode",
1650 − "Commerce de détail"
1651 − ],
1652 − "connector": "bamboohr",
1653 − "status": "actif",
1654 − "region": "Québec, Laval"
1655 − },
1656 − {
1657 − "id": "portagecybertech",
1658 − "name": "Portage CyberTech",
1659 − "url": "",
1660 − "careers_url": "https://portagecybertech.bamboohr.com/careers",
1661 − "sectors": [
1662 − "TI",
1663 − "Cybersécurité"
1664 − ],
1665 − "connector": "bamboohr",
1666 − "status": "actif",
1667 − "region": "Gatineau, Montréal"
1668 − },
1669 − {
1670 − "id": "toonboom",
1671 − "name": "Toon Boom Animation",
1672 − "url": "",
1673 − "careers_url": "https://toonboom.bamboohr.com/careers",
1674 − "sectors": [
1675 − "Animation",
1676 − "TI"
1677 − ],
1678 − "connector": "bamboohr",
1679 − "status": "actif",
1680 − "region": "Montréal"
1681 − },
1682 − {
1683 − "id": "eosaircraftinc",
1684 − "name": "EOS Aircraft",
1685 − "url": "",
1686 − "careers_url": "https://eosaircraftinc.bamboohr.com/careers",
1687 − "sectors": [
1688 − "Aéronautique"
1689 − ],
1690 − "connector": "bamboohr",
1691 − "status": "actif",
1692 − "region": "Montréal"
1693 − },
1694 − {
1695 − "id": "rethinkcanada",
1696 − "name": "Rethink",
1697 − "url": "",
1698 − "careers_url": "https://rethinkcanada.bamboohr.com/careers",
1699 − "sectors": [
1700 − "Publicité"
1701 − ],
1702 − "connector": "bamboohr",
1703 − "status": "actif",
1704 − "region": "Montréal"
1705 − },
1706 − {
1707 − "id": "bc2",
1708 − "name": "Groupe BC2",
1709 − "url": "",
1710 − "careers_url": "https://bc2.bamboohr.com/careers",
1711 − "sectors": [
1712 − "Urbanisme",
1713 − "Conseil"
1714 − ],
1715 − "connector": "bamboohr",
1716 − "status": "actif",
1717 − "region": "Montréal"
1718 − },
1719 − {
1720 − "id": "ott",
1721 − "name": "OTT Financial",
1722 − "url": "",
1723 − "careers_url": "https://ott.bamboohr.com/careers",
1724 − "sectors": [
1725 − "Finance"
1726 − ],
1727 − "connector": "bamboohr",
1728 − "status": "actif",
1729 − "region": "Montréal"
1730 − },
1731 − {
1732 − "id": "mitacs",
1733 − "name": "Mitacs",
1734 − "url": "",
1735 − "careers_url": "https://mitacs.bamboohr.com/careers",
1736 − "sectors": [
1737 − "Recherche",
1738 − "OBNL"
1739 − ],
1740 − "connector": "bamboohr",
1741 − "status": "actif",
1742 − "region": "Montréal"
1743 − },
1744 − {
1745 − "id": "lightspeedhq",
1746 − "name": "Lightspeed Commerce",
1747 − "url": "",
1748 − "careers_url": "https://jobs.ashbyhq.com/lightspeedhq",
1749 − "sectors": [
1750 − "TI"
1751 − ],
1752 − "connector": "ashby",
1753 − "status": "actif",
1754 − "region": "Montréal"
1755 − },
1756 − {
1757 − "id": "bigbang",
1758 − "name": "Big Bang",
1759 − "url": "",
1760 − "careers_url": "https://bigbang.bamboohr.com/careers",
1761 − "sectors": [
1762 − "TI"
1763 − ],
1764 − "connector": "bamboohr",
1765 − "status": "actif",
1766 − "region": "Montréal"
1767 − },
1768 − {
1769 − "id": "broccolini",
1770 − "name": "Broccolini",
1771 − "url": "",
1772 − "careers_url": "https://broccolini.bamboohr.com/careers",
1773 − "sectors": [
1774 − "Construction",
1775 − "Immobilier"
1776 − ],
1777 − "connector": "bamboohr",
1778 − "status": "actif",
1779 − "region": "Montréal"
1780 − },
1781 − {
1782 − "id": "cordonbleu",
1783 − "name": "Aliments Ouimet-Cordon Bleu inc.",
1784 − "url": "https://clarkcordonbleu.ca",
1785 − "careers_url": "https://cordonbleu.bamboohr.com/careers",
1786 − "sectors": [
1787 − "Production"
1788 − ],
1789 − "connector": "bamboohr",
1790 − "status": "actif",
1791 − "region": ""
1792 − },
1793 − {
1794 − "id": "devimco",
1795 − "name": "Devimco Appartements",
1796 − "url": "https://devimco.com",
1797 − "careers_url": "https://devimco.bamboohr.com/careers",
1798 − "sectors": [
1799 − "Immobilier"
1800 − ],
1801 − "connector": "bamboohr",
1802 − "status": "actif",
1803 − "region": ""
1804 − },
1805 − {
1806 − "id": "evlo",
1807 − "name": "EVLO (Hydro-Québec)",
1808 − "url": "",
1809 − "careers_url": "https://evlo.bamboohr.com/careers",
1810 − "sectors": [
1811 − "Énergie"
1812 − ],
1813 − "connector": "bamboohr",
1814 − "status": "actif",
1815 − "region": "Varennes"
1816 − },
1817 − {
1818 − "id": "fenetresconcept",
1819 − "name": "Fenêtres Concept",
1820 − "url": "https://fenetresconcept.com",
1821 − "careers_url": "https://fenetresconcept.bamboohr.com/careers",
1822 − "sectors": [
1823 − "Production"
1824 − ],
1825 − "connector": "bamboohr",
1826 − "status": "actif",
1827 − "region": ""
1828 − },
1829 − {
1830 − "id": "flare",
1831 − "name": "Flare (cybersécurité)",
1832 − "url": "",
1833 − "careers_url": "https://flare.bamboohr.com/careers",
1834 − "sectors": [
1835 − "TI"
1836 − ],
1837 − "connector": "bamboohr",
1838 − "status": "actif",
1839 − "region": "Montréal"
1840 − },
1841 − {
1842 − "id": "korem",
1843 − "name": "Korem",
1844 − "url": "",
1845 − "careers_url": "https://korem.bamboohr.com/careers",
1846 − "sectors": [
1847 − "TI"
1848 − ],
1849 − "connector": "bamboohr",
1850 − "status": "actif",
1851 − "region": "Québec"
1852 − },
1853 − {
1854 − "id": "logisco",
1855 − "name": "Logisco",
1856 − "url": "https://logisco.com",
1857 − "careers_url": "https://logisco.bamboohr.com/careers",
1858 − "sectors": [
1859 − "Immobilier"
1860 − ],
1861 − "connector": "bamboohr",
1862 − "status": "actif",
1863 − "region": ""
1864 − },
1865 − {
1866 − "id": "alayacare",
1867 − "name": "AlayaCare",
1868 − "url": "https://www.alayacare.com",
1869 − "careers_url": "https://job-boards.greenhouse.io/alayacare",
1870 − "sectors": [
1871 − "TI",
1872 − "Santé"
1873 − ],
1874 − "connector": "greenhouse",
1875 − "status": "actif",
1876 − "region": "Montréal"
1877 − },
1878 − {
1879 − "id": "gurussolutions",
1880 − "name": "GURUS Solutions",
1881 − "url": "",
1882 − "careers_url": "https://job-boards.greenhouse.io/gurussolutions",
1883 − "sectors": [
1884 − "TI"
1885 − ],
1886 − "connector": "greenhouse",
1887 − "status": "actif",
1888 − "region": "Montréal"
1889 − },
1890 − {
1891 − "id": "levio",
1892 − "name": "Levio",
1893 − "url": "",
1894 − "careers_url": "https://job-boards.greenhouse.io/levio",
1895 − "sectors": [
1896 − "TI"
1897 − ],
1898 − "connector": "greenhouse",
1899 − "status": "actif",
1900 − "region": "Québec, Montréal"
1901 − },
1902 − {
1903 − "id": "sidlee",
1904 − "name": "Sid Lee",
1905 − "url": "",
1906 − "careers_url": "https://job-boards.greenhouse.io/sidlee",
1907 − "sectors": [
1908 − "Marketing",
1909 − "Création"
1910 − ],
1911 − "connector": "greenhouse",
1912 − "status": "actif",
1913 − "region": "Montréal"
1914 − },
1915 − {
1916 − "id": "valtech",
1917 − "name": "Valtech",
1918 − "url": "",
1919 − "careers_url": "https://job-boards.greenhouse.io/valtech",
1920 − "sectors": [
1921 − "TI"
1922 − ],
1923 − "connector": "greenhouse",
1924 − "status": "actif",
1925 − "region": "Montréal"
1926 − },
1927 − {
1928 − "id": "vooban",
1929 − "name": "Vooban",
1930 − "url": "",
1931 − "careers_url": "https://job-boards.greenhouse.io/vooban",
1932 − "sectors": [
1933 − "TI"
1934 − ],
1935 − "connector": "greenhouse",
1936 − "status": "actif",
1937 − "region": "Québec"
1938 − },
1939 − {
1940 − "id": "bhvr",
1941 − "name": "Behaviour Interactif",
1942 − "url": "",
1943 − "careers_url": "https://jobs.lever.co/bhvr",
1944 − "sectors": [
1945 − "Jeux vidéo"
1946 − ],
1947 − "connector": "lever",
1948 − "status": "actif",
1949 − "region": "Montréal"
1950 − },
1951 − {
1952 − "id": "cirquedusoleil",
1953 − "name": "Cirque du Soleil",
1954 − "url": "https://www.cirquedusoleil.com",
1955 − "careers_url": "https://jobs.lever.co/cirquedusoleil",
1956 − "sectors": [
1957 − "Divertissement",
1958 − "Création"
1959 − ],
1960 − "connector": "lever",
1961 − "status": "actif",
1962 − "region": "Montréal"
1963 − },
1964 − {
1965 − "id": "mirego",
1966 − "name": "Mirego",
1967 − "url": "",
1968 − "careers_url": "https://jobs.lever.co/mirego",
1969 − "sectors": [
1970 − "TI"
1971 − ],
1972 − "connector": "lever",
1973 − "status": "actif",
1974 − "region": "Québec, Montréal"
1975 − },
1976 − {
1977 − "id": "spiria",
1978 − "name": "Spiria",
1979 − "url": "",
1980 − "careers_url": "https://jobs.lever.co/spiria",
1981 − "sectors": [
1982 − "TI"
1983 − ],
1984 − "connector": "lever",
1985 − "status": "actif",
1986 − "region": "Montréal, Gatineau"
1987 − },
1988 − {
1989 − "id": "amilia",
1990 − "name": "Amilia",
1991 − "url": "",
1992 − "careers_url": "https://amilia.recruitee.com",
1993 − "sectors": [
1994 − "TI"
1995 − ],
1996 − "connector": "recruitee",
1997 − "status": "actif",
1998 − "region": "Montréal"
1999 − },
2000 − {
2001 − "id": "gameloft",
2002 − "name": "Gameloft",
2003 − "url": "https://www.gameloft.com",
2004 − "careers_url": "https://jobs.smartrecruiters.com/company/gameloft",
2005 − "sectors": [
2006 − "Jeux vidéo"
2007 − ],
2008 − "connector": "smartrecruiters",
2009 − "status": "actif",
2010 − "region": "Montréal"
2011 − },
2012 − {
2013 − "id": "gologic",
2014 − "name": "GoLogic",
2015 − "url": "",
2016 − "careers_url": "https://jobs.smartrecruiters.com/company/gologic",
2017 − "sectors": [
2018 − "TI"
2019 − ],
2020 − "connector": "smartrecruiters",
2021 − "status": "actif",
2022 − "region": "Montréal"
2023 − },
2024 − {
2025 − "id": "groupecanam",
2026 − "name": "Groupe Canam",
2027 − "url": "",
2028 − "careers_url": "https://jobs.smartrecruiters.com/company/groupecanam",
2029 − "sectors": [
2030 − "Production",
2031 − "Construction"
2032 − ],
2033 − "connector": "smartrecruiters",
2034 − "status": "actif",
2035 − "region": "Saint-Georges"
2036 − },
2037 − {
2038 − "id": "playmind",
2039 − "name": "Playmind",
2040 − "url": "",
2041 − "careers_url": "https://jobs.smartrecruiters.com/company/playmind",
2042 − "sectors": [
2043 − "Jeux vidéo"
2044 − ],
2045 − "connector": "smartrecruiters",
2046 − "status": "actif",
2047 − "region": "Montréal"
2048 − },
2049 − {
2050 − "id": "qsl",
2051 − "name": "QSL",
2052 − "url": "https://qsl.com",
2053 − "careers_url": "https://jobs.smartrecruiters.com/company/qsl",
2054 − "sectors": [],
2055 − "connector": "smartrecruiters",
2056 − "status": "actif",
2057 − "region": "Québec"
2058 − },
2059 − {
2060 − "id": "stelpro",
2061 − "name": "Stelpro",
2062 − "url": "",
2063 − "careers_url": "https://jobs.smartrecruiters.com/company/stelpro",
2064 − "sectors": [
2065 − "Production"
2066 − ],
2067 − "connector": "smartrecruiters",
2068 − "status": "actif",
2069 − "region": "Saint-Bruno-de-Montarville"
2070 − },
2071 − {
2072 − "id": "talsom",
2073 − "name": "Talsom",
2074 − "url": "",
2075 − "careers_url": "https://jobs.smartrecruiters.com/company/talsom",
2076 − "sectors": [
2077 − "TI"
2078 − ],
2079 − "connector": "smartrecruiters",
2080 − "status": "actif",
2081 − "region": "Montréal"
2082 − },
2083 − {
2084 − "id": "videotron",
2085 − "name": "Vidéotron",
2086 − "url": "https://videotron.com",
2087 − "careers_url": "https://jobs.smartrecruiters.com/company/videotron",
2088 − "sectors": [],
2089 − "connector": "smartrecruiters",
2090 − "status": "actif",
2091 − "region": "Montréal"
2092 − },
2093 − {
2094 − "id": "vosker",
2095 − "name": "Vosker",
2096 − "url": "",
2097 − "careers_url": "https://jobs.smartrecruiters.com/company/vosker",
2098 − "sectors": [
2099 − "TI",
2100 − "Production"
2101 − ],
2102 − "connector": "smartrecruiters",
2103 − "status": "actif",
2104 − "region": "Victoriaville"
2105 − },
2106 − {
2107 − "id": "genetec_inc",
2108 − "name": "Genetec",
2109 − "url": "https://genetec.com",
2110 − "careers_url": "https://apply.workable.com/genetec-inc",
2111 − "sectors": [],
2112 − "connector": "workable",
2113 − "status": "actif",
2114 − "region": "Montréal"
2115 − },
2116 − {
2117 − "id": "mila_2",
2118 − "name": "Mila — Institut québécois d'IA",
2119 − "url": "https://mila.quebec",
2120 − "careers_url": "https://apply.workable.com/mila-2",
2121 − "sectors": [],
2122 − "connector": "workable",
2123 − "status": "actif",
2124 − "region": "Montréal"
2125 − },
2126 − {
2127 − "id": "airbus",
2128 − "name": "Airbus Canada",
2129 − "url": "https://airbus.com",
2130 − "careers_url": "https://ag.wd3.myworkdayjobs.com/Airbus",
2131 − "sectors": [],
2132 − "connector": "workday",
2133 − "status": "actif",
2134 − "region": "Mirabel"
2135 − },
2136 − {
2137 − "id": "alcoa",
2138 − "name": "Alcoa Canada",
2139 − "url": "https://alcoa.com",
2140 − "careers_url": "https://alcoa.wd5.myworkdayjobs.com/Careers",
2141 − "sectors": [],
2142 − "connector": "workday",
2143 − "status": "actif",
2144 − "region": "Baie-Comeau"
2145 − },
2146 − {
2147 − "id": "altasciences",
2148 − "name": "Altasciences",
2149 − "url": "",
2150 − "careers_url": "https://altasciences.wd1.myworkdayjobs.com/Careers",
2151 − "sectors": [
2152 − "Pharmaceutique"
2153 − ],
2154 − "connector": "workday",
2155 − "status": "actif",
2156 − "region": "Laval"
2157 − },
2158 − {
2159 − "id": "bdc",
2160 − "name": "BDC",
2161 − "url": "",
2162 − "careers_url": "https://bdc.wd10.myworkdayjobs.com/bdc_careers",
2163 − "sectors": [
2164 − "Finance"
2165 − ],
2166 − "connector": "workday",
2167 − "status": "actif",
2168 − "region": "Montréal"
2169 − },
2170 − {
2171 − "id": "beneva",
2172 − "name": "Beneva",
2173 − "url": "https://beneva.ca",
2174 − "careers_url": "https://beneva.wd10.myworkdayjobs.com/BenevaSite_carriere",
2175 − "sectors": [],
2176 − "connector": "workday",
2177 − "status": "actif",
2178 − "region": "Québec"
2179 − },
2180 − {
2181 − "id": "caaquebec",
2182 − "name": "CAA-Québec",
2183 − "url": "https://caaquebec.com",
2184 − "careers_url": "https://caaquebec.wd3.myworkdayjobs.com/CarrieresCAA-Quebec",
2185 − "sectors": [],
2186 − "connector": "workday",
2187 − "status": "actif",
2188 − "region": "Québec"
2189 − },
2190 − {
2191 − "id": "canadiantirecorporation",
2192 − "name": "Canadian Tire",
2193 − "url": "https://canadiantire.ca",
2194 − "careers_url": "https://canadiantirecorporation.wd3.myworkdayjobs.com/Enterprise_External_Careers_Site",
2195 − "sectors": [],
2196 − "connector": "workday",
2197 − "status": "actif",
2198 − "region": "Montréal"
2199 − },
2200 − {
2201 − "id": "cdpq",
2202 − "name": "CDPQ — Caisse de dépôt et placement du Québec",
2203 − "url": "https://cdpq.com",
2204 − "careers_url": "https://cdpq.wd10.myworkdayjobs.com/CDPQ",
2205 − "sectors": [],
2206 − "connector": "workday",
2207 − "status": "actif",
2208 − "region": "Montréal"
2209 − },
2210 − {
2211 − "id": "churchdwight",
2212 − "name": "Church & Dwight Canada",
2213 − "url": "https://churchdwight.ca",
2214 − "careers_url": "https://churchdwight.wd1.myworkdayjobs.com/chdcanadacareers",
2215 − "sectors": [
2216 − "Production"
2217 − ],
2218 − "connector": "workday",
2219 − "status": "actif",
2220 − "region": ""
2221 − },
2222 − {
2223 − "id": "exfo",
2224 − "name": "EXFO",
2225 − "url": "",
2226 − "careers_url": "https://exfo.wd10.myworkdayjobs.com/exfo_careers",
2227 − "sectors": [
2228 − "TI",
2229 − "Télécommunications"
2230 − ],
2231 − "connector": "workday",
2232 − "status": "actif",
2233 − "region": "Québec"
2234 − },
2235 − {
2236 − "id": "fondsftq",
2237 − "name": "Fonds de solidarité FTQ",
2238 − "url": "https://fondsftq.com",
2239 − "careers_url": "https://fondsftq.wd10.myworkdayjobs.com/sitecarriere_externe",
2240 − "sectors": [],
2241 − "connector": "workday",
2242 − "status": "actif",
2243 − "region": "Montréal"
2244 − },
2245 − {
2246 − "id": "intactfc",
2247 − "name": "Intact Corporation financière",
2248 − "url": "",
2249 − "careers_url": "https://intactfc.wd3.myworkdayjobs.com/Intactfc",
2250 − "sectors": [
2251 − "Assurance"
2252 − ],
2253 − "connector": "workday",
2254 − "status": "actif",
2255 − "region": "Montréal"
2256 − },
2257 − {
2258 − "id": "investpsp",
2259 − "name": "Investissements PSP",
2260 − "url": "https://investpsp.com",
2261 − "careers_url": "https://investpsp.wd3.myworkdayjobs.com/psp_careers",
2262 − "sectors": [],
2263 − "connector": "workday",
2264 − "status": "actif",
2265 − "region": "Montréal"
2266 − },
2267 − {
2268 − "id": "investquebec",
2269 − "name": "Investissement Québec",
2270 − "url": "https://investquebec.com",
2271 − "careers_url": "https://investquebec.wd10.myworkdayjobs.com/Ext",
2272 − "sectors": [],
2273 − "connector": "workday",
2274 − "status": "actif",
2275 − "region": "Québec"
2276 − },
2277 − {
2278 − "id": "plusgrade",
2279 − "name": "Plusgrade",
2280 − "url": "https://plusgrade.com",
2281 − "careers_url": "https://plusgrade.wd10.myworkdayjobs.com/Plusgrade_External_Site",
2282 − "sectors": [],
2283 − "connector": "workday",
2284 − "status": "actif",
2285 − "region": "Montréal"
2286 − },
2287 − {
2288 − "id": "promutuel",
2289 − "name": "Promutuel Assurance",
2290 − "url": "https://promutuelassurance.ca",
2291 − "careers_url": "https://promutuel.wd3.myworkdayjobs.com/promutuel_carrieres",
2292 − "sectors": [],
2293 − "connector": "workday",
2294 − "status": "actif",
2295 − "region": "Québec"
2296 − },
2297 − {
2298 − "id": "rcgt",
2299 − "name": "Raymond Chabot Grant Thornton",
2300 − "url": "https://rcgt.com",
2301 − "careers_url": "https://rcgt.wd3.myworkdayjobs.com/External",
2302 − "sectors": [],
2303 − "connector": "workday",
2304 − "status": "actif",
2305 − "region": "Montréal"
2306 − },
2307 − {
2308 − "id": "riotinto",
2309 − "name": "Rio Tinto",
2310 − "url": "",
2311 − "careers_url": "https://riotinto.wd3.myworkdayjobs.com/riotinto_careers",
2312 − "sectors": [
2313 − "Mines"
2314 − ],
2315 − "connector": "workday",
2316 − "status": "actif",
2317 − "region": "Saguenay, Montréal"
2318 − },
2319 − {
2320 − "id": "suncor",
2321 − "name": "Suncor Énergie",
2322 − "url": "https://suncor.com",
2323 − "careers_url": "https://suncor.wd1.myworkdayjobs.com/Suncor_External",
2324 − "sectors": [],
2325 − "connector": "workday",
2326 − "status": "actif",
2327 − "region": "Montréal"
2328 − },
2329 − {
2330 − "id": "walmart",
2331 − "name": "Walmart Canada",
2332 − "url": "https://walmart.ca",
2333 − "careers_url": "https://walmart.wd504.myworkdayjobs.com/WalmartExternal",
2334 − "sectors": [],
2335 − "connector": "workday",
2336 − "status": "actif",
2337 − "region": "Montréal"
2338 − },
2339 − {
2340 − "id": "agnico_eagle",
2341 − "name": "Agnico Eagle Mines",
2342 − "url": "https://www.agnicoeagle.com",
2343 − "careers_url": "https://agnicoeagle.taleo.net/careersection/2/jobsearch.ftl?lang=fr",
2344 − "sectors": [
2345 − "Mines",
2346 − "Ingénierie",
2347 − "Métiers spécialisés"
2348 − ],
2349 − "connector": "taleo",
2350 − "status": "actif",
2351 − "region": "Abitibi-Témiscamingue, Malartic, Rouyn-Noranda"
2352 − },
2353 − {
2354 − "id": "ciusss_est_montreal",
2355 − "name": "CIUSSS de l'Est-de-l'Île-de-Montréal",
2356 − "url": "https://ciusss-estmtl.gouv.qc.ca",
2357 − "careers_url": "https://ciusssemtl.taleo.net/careersection/cemtl/jobsearch.ftl?lang=fr",
2358 − "sectors": [
2359 − "Santé",
2360 − "Services sociaux",
2361 − "Secteur public"
2362 − ],
2363 − "connector": "taleo",
2364 − "status": "actif",
2365 − "region": "Montréal"
2366 − },
2367 − {
2368 − "id": "bayshore",
2369 − "name": "Bayshore HealthCare",
2370 − "url": "https://www.bayshore.ca",
2371 − "careers_url": "https://bayshore.taleo.net/careersection/bs_ex/jobsearch.ftl?lang=fr",
2372 − "sectors": [
2373 − "Santé",
2374 − "Soins à domicile"
2375 − ],
2376 − "connector": "taleo",
2377 − "status": "actif",
2378 − "region": "Montréal, Québec"
2379 − },
2380 − {
2381 − "id": "bell_textron",
2382 − "name": "Bell Textron Canada",
2383 − "url": "https://www.bellflight.com",
2384 − "careers_url": "https://textron.taleo.net/careersection/bell/jobsearch.ftl?lang=fr",
2385 − "sectors": [
2386 − "Aéronautique",
2387 − "Fabrication"
2388 − ],
2389 − "connector": "taleo",
2390 − "status": "actif",
2391 − "region": "Mirabel"
2392 − },
2393 − {
2394 − "id": "sante_montreal",
2395 − "name": "Santé Québec — Montréal",
2396 − "url": "https://santemontreal.ca",
2397 − "careers_url": "https://emplois.santemontreal.qc.ca/CL3/xweb/xweb.asp?clid=54327&page=joblisting&lang=2",
2398 − "sectors": [
2399 − "Santé",
2400 − "Services sociaux",
2401 − "Secteur public"
2402 − ],
2403 − "connector": "njoyn",
2404 − "status": "actif",
2405 − "region": "Montréal"
2406 − },
2407 − {
2408 − "id": "ville_gatineau",
2409 − "name": "Ville de Gatineau",
2410 − "url": "https://www.gatineau.ca",
2411 − "careers_url": "https://gatineau.njoyn.com/CL2/xweb/xweb.asp?clid=27082&page=joblisting&lang=2",
2412 − "sectors": [
2413 − "Municipal",
2414 − "Secteur public"
2415 − ],
2416 − "connector": "njoyn",
2417 − "status": "actif",
2418 − "region": "Gatineau"
2419 − },
2420 − {
2421 − "id": "ville_terrebonne",
2422 − "name": "Ville de Terrebonne",
2423 − "url": "https://www.ville.terrebonne.qc.ca",
2424 − "careers_url": "https://clients.njoyn.com/cl4/xweb/xweb.asp?clid=71764&page=joblisting&lang=2",
2425 − "sectors": [
2426 − "Municipal",
2427 − "Secteur public"
2428 − ],
2429 − "connector": "njoyn",
2430 − "status": "actif",
2431 − "region": "Terrebonne"
2432 − },
2433 − {
2434 − "id": "stl_laval",
2435 − "name": "Société de transport de Laval",
2436 − "url": "https://www.stlaval.ca",
2437 − "careers_url": "https://lavaltransit.njoyn.com/CL2/xweb/xweb.asp?clid=60406&page=joblisting&lang=2",
2438 − "sectors": [
2439 − "Transport collectif",
2440 − "Secteur public"
2441 − ],
2442 − "connector": "njoyn",
2443 − "status": "actif",
2444 − "region": "Laval"
2445 − },
2446 − {
2447 − "id": "rtc_quebec",
2448 − "name": "Réseau de transport de la Capitale",
2449 − "url": "https://www.rtcquebec.ca",
2450 − "careers_url": "https://rtc.njoyn.com/CGI/xweb/xweb.asp?clid=23009&page=joblisting&lang=2",
2451 − "sectors": [
2452 − "Transport collectif",
2453 − "Secteur public"
2454 − ],
2455 − "connector": "njoyn",
2456 − "status": "actif",
2457 − "region": "Québec"
2458 − },
2459 − {
2460 − "id": "messer_canada",
2461 − "name": "Messer Canada",
2462 − "url": "https://www.messer-ca.com",
2463 − "careers_url": "https://recruiting.ultipro.com/MES1005MESR/JobBoard/dbd63926-d756-486f-a254-b2a6ede1d26e",
2464 − "sectors": [
2465 − "Gaz industriels",
2466 − "Industrie"
2467 − ],
2468 − "connector": "ultipro",
2469 − "status": "actif",
2470 − "region": "Montréal, Québec, Saint-Georges"
2471 − },
2472 − {
2473 − "id": "capreit",
2474 − "name": "CAPREIT",
2475 − "url": "https://www.capreit.ca",
2476 − "careers_url": "https://careers-capreit.icims.com/jobs/search?ss=1",
2477 − "sectors": [
2478 − "Immobilier",
2479 − "Gestion immobilière"
2480 − ],
2481 − "connector": "icims",
2482 − "status": "actif",
2483 − "region": "Montréal"
2484 − },
2485 − {
2486 − "id": "mccarthy_tetrault",
2487 − "name": "McCarthy Tétrault",
2488 − "url": "https://www.mccarthy.ca",
2489 − "careers_url": "https://careers-mccarthyca.icims.com/jobs/search?ss=1",
2490 − "sectors": [
2491 − "Juridique",
2492 − "Services professionnels"
2493 − ],
2494 − "connector": "icims",
2495 − "status": "actif",
2496 − "region": "Montréal, Québec"
2497 − },
2498 − {
2499 − "id": "omni_hotels_horaire",
2500 − "name": "Omni Hôtel Mont-Royal",
2501 − "url": "https://www.omnihotels.com/fr/hotels/montreal-mont-royal",
2502 − "careers_url": "https://externalhourly-omnihotels.icims.com/jobs/search?ss=1",
2503 − "sectors": [
2504 − "Hôtellerie",
2505 − "Restauration"
2506 − ],
2507 − "connector": "icims",
2508 − "status": "actif",
2509 − "region": "Montréal"
2510 − },
2511 − {
2512 − "id": "omni_hotels_gestion",
2513 − "name": "Omni Hôtel Mont-Royal",
2514 − "url": "https://www.omnihotels.com/fr/hotels/montreal-mont-royal",
2515 − "careers_url": "https://externalmanager-omnihotels.icims.com/jobs/search?ss=1",
2516 − "sectors": [
2517 − "Hôtellerie",
2518 − "Gestion"
2519 − ],
2520 − "connector": "icims",
2521 − "status": "actif",
2522 − "region": "Montréal"
2523 − },
2524 − {
2525 − "id": "edf_renouvelables",
2526 − "name": "EDF Renouvelables Canada",
2527 − "url": "https://www.edf-renouvelables.ca",
2528 − "careers_url": "https://cafrench-edf-re.icims.com/jobs/search?ss=1",
2529 − "sectors": [
2530 − "Énergie",
2531 − "Ingénierie"
2532 − ],
2533 − "connector": "icims",
2534 − "status": "actif",
2535 − "region": "Montréal"
2536 − },
2537 − {
2538 − "id": "bombardier",
2539 − "name": "Bombardier",
2540 − "url": "https://bombardier.com",
2541 − "careers_url": "https://jobs.bombardier.com",
2542 − "sectors": [
2543 − "Aéronautique",
2544 − "Ingénierie",
2545 − "Fabrication"
2546 − ],
2547 − "connector": "successfactors",
2548 − "status": "actif",
2549 − "region": "Dorval, Mirabel, Montréal"
2550 − },
2551 − {
2552 − "id": "domtar",
2553 − "name": "Domtar",
2554 − "url": "https://www.domtar.com",
2555 − "careers_url": "https://jobs.domtar.com",
2556 − "sectors": [
2557 − "Pâtes et papiers",
2558 − "Foresterie",
2559 − "Fabrication"
2560 − ],
2561 − "connector": "successfactors",
2562 − "status": "actif",
2563 − "region": "Montréal, Windsor, Lachine"
2564 − },
2565 − {
2566 − "id": "cascades",
2567 − "name": "Cascades",
2568 − "url": "https://www.cascades.com",
2569 − "careers_url": "https://jobs.cascades.com",
2570 − "sectors": [
2571 − "Pâtes et papiers",
2572 − "Emballage",
2573 − "Fabrication"
2574 − ],
2575 − "connector": "successfactors",
2576 − "status": "actif",
2577 − "region": "Kingsey Falls, Drummondville, Candiac"
2578 − },
2579 − {
2580 − "id": "lassonde",
2581 − "name": "Industries Lassonde",
2582 − "url": "https://www.lassonde.com",
2583 − "careers_url": "https://workforcenow.adp.com/mascsr/default/mdf/recruitment/recruitment.html?cid=f96ce972-7721-4c7b-99ea-9a970ddc824a&ccId=19000101_000001&lang=fr_CA",
2584 − "sectors": [
2585 − "Agroalimentaire",
2586 − "Fabrication"
2587 − ],
2588 − "connector": "adp",
2589 − "status": "actif",
2590 − "region": "Rougemont, Montréal"
2591 − },
2592 − {
2593 − "id": "mitsubishi_hc_capital",
2594 − "name": "Mitsubishi HC Capital Canada",
2595 − "url": "https://www.mhccna.com",
2596 − "careers_url": "https://workforcenow.adp.com/mascsr/default/mdf/recruitment/recruitment.html?cid=b3ef4f03-f8ff-4ded-80c8-6dd5c5a224f7&ccId=9200144510729_2&lang=fr_CA",
2597 − "sectors": [
2598 − "Finance",
2599 − "Financement commercial"
2600 − ],
2601 − "connector": "adp",
2602 − "status": "actif",
2603 − "region": "Laval, Trois-Rivières"
2604 − },
2605 − {
2606 − "id": "msi_gestion",
2607 − "name": "MSI Gestion immobilière",
2608 − "url": "https://www.msimmobiliers.com",
2609 − "careers_url": "https://workforcenow.adp.com/mascsr/default/mdf/recruitment/recruitment.html?cid=47d4e792-26e5-471c-92ac-73c60131bab8&ccId=19000101_000001&lang=fr_CA",
2610 − "sectors": [
2611 − "Immobilier",
2612 − "Gestion immobilière"
2613 − ],
2614 − "connector": "adp",
2615 − "status": "actif",
2616 − "region": "Montréal"
2617 − },
2618 − {
2619 − "id": "sante_quebec",
2620 − "name": "Santé Québec",
2621 − "url": "https://sante.quebec",
2622 − "careers_url": "https://emplois.sante.quebec",
2623 − "sectors": [
2624 − "Santé",
2625 − "Secteur public",
2626 − "Administration"
2627 − ],
2628 − "connector": "digitalrecruiters",
2629 − "status": "actif",
2630 − "region": "Montréal, Québec"
2631 − },
2632 − {
2633 − "id": "cssdm",
2634 − "name": "Centre de services scolaire de Montréal",
2635 − "url": "https://www.cssdm.gouv.qc.ca",
2636 − "careers_url": "https://www.cssdm.gouv.qc.ca/travailler-cssdm/offres-emploi/",
2637 − "sectors": [
2638 − "Éducation",
2639 − "Secteur public"
2640 − ],
2641 − "connector": "workland",
2642 − "status": "actif",
2643 − "region": "Montréal"
2644 − },
2645 − {
2646 − "id": "guichet_emplois",
2647 − "name": "Guichet-Emplois (Canada)",
2648 − "url": "https://www.guichetemplois.gc.ca",
2649 − "careers_url": "https://www.guichetemplois.gc.ca/jobsearch/rechercheemplois?fprov=QC",
2650 − "sectors": [
2651 − "Portail",
2652 − "Tous secteurs"
2653 − ],
2654 − "connector": "portail",
2655 − "status": "actif",
2656 − "region": "Québec (province)",
2657 − "aggregator": true
2658 − },
2659 − {
2660 − "id": "jobillico",
2661 − "name": "Jobillico",
2662 − "url": "https://www.jobillico.com",
2663 − "careers_url": "https://www.jobillico.com/recherche-emploi",
2664 − "sectors": [
2665 − "Portail",
2666 − "Tous secteurs"
2667 − ],
2668 − "connector": "portail",
2669 − "status": "actif",
2670 − "region": "Québec (province)",
2671 − "aggregator": true
2672 − },
2673 − {
2674 − "id": "espresso_jobs",
2675 − "name": "Espresso-Jobs",
2676 − "url": "https://www.espresso-jobs.com",
2677 − "careers_url": "https://www.espresso-jobs.com/emploi",
2678 − "sectors": [
2679 − "Portail",
2680 − "TI",
2681 − "Créatif"
2682 − ],
2683 − "connector": "portail",
2684 − "status": "actif",
2685 − "region": "Québec (province)",
2686 − "aggregator": true
2687 − },
2688 − {
2689 − "id": "depot-direct",
2690 − "name": "Dépôt direct employeurs",
2691 − "url": "https://www.job-ka.com/employeurs",
2692 − "careers_url": "https://www.job-ka.com/employeurs",
2693 − "sectors": [
2694 − "Tous secteurs"
2695 − ],
2696 − "connector": "depot-direct",
2697 − "status": "modération",
2698 − "region": "Québec (province)"
2699 − },
2700 − {
2701 − "id": "mxo",
2702 − "name": "MXO",
2703 − "url": "https://mxoconseil.com",
2704 − "careers_url": "https://mxo.bamboohr.com/careers",
2705 − "sectors": [
2706 − "manufacturier/commerce"
2707 − ],
2708 − "connector": "bamboohr",
2709 − "status": "actif",
2710 − "region": ""
2711 − },
2712 − {
2713 − "id": "pouletrouge",
2714 − "name": "Poulet Rouge",
2715 − "url": "https://poulet-rouge.ca",
2716 − "careers_url": "https://pouletrouge.bamboohr.com/careers",
2717 − "sectors": [
2718 − "restauration"
2719 − ],
2720 − "connector": "bamboohr",
2721 − "status": "actif",
2722 − "region": "Montréal"
2723 − },
2724 − {
2725 − "id": "ziptrekeco",
2726 − "name": "Ziptrek Tremblant",
2727 − "url": "https://tremblant.ziptrek.com",
2728 − "careers_url": "https://ziptrekeco.bamboohr.com/careers",
2729 − "sectors": [
2730 − "manufacturier/commerce"
2731 − ],
2732 − "connector": "bamboohr",
2733 − "status": "actif",
2734 − "region": ""
2735 − },
2736 − {
2737 − "id": "jgrivesud",
2738 − "name": "JG Rive-Sud (GFS)",
2739 − "url": "https://jgfruitsetlegumes.com",
2740 − "careers_url": "https://gfs.wd5.myworkdayjobs.com/jgrive-sud",
2741 − "sectors": [
2742 − "manufacturier/commerce"
2743 − ],
2744 − "connector": "workday",
2745 − "status": "actif",
2746 − "region": ""
2747 − },
2748 − {
2749 − "id": "gfs",
2750 − "name": "Service alimentaire Gordon",
2751 − "url": "https://gfs.ca",
2752 − "careers_url": "https://gfs.wd5.myworkdayjobs.com/usjobs-french",
2753 − "sectors": [
2754 − "manufacturier/commerce"
2755 − ],
2756 − "connector": "workday",
2757 − "status": "actif",
2758 − "region": ""
2759 − },
2760 − {
2761 − "id": "scottsmiraclegro",
2762 − "name": "Scotts Canada (Fafard)",
2763 − "url": "https://scottsmiraclegro.com",
2764 − "careers_url": "https://scottsmiraclegro.wd5.myworkdayjobs.com/SMGExternal",
2765 − "sectors": [
2766 − "manufacturier/commerce"
2767 − ],
2768 − "connector": "workday",
2769 − "status": "actif",
2770 − "region": ""
2771 − },
2772 − {
2773 − "id": "sleeman",
2774 − "name": "Brasseries Sleeman (Unibroue)",
2775 − "url": "https://unibroue.com",
2776 − "careers_url": "https://sleeman.wd3.myworkdayjobs.com/SBL",
2777 − "sectors": [
2778 − "manufacturier/commerce"
2779 − ],
2780 − "connector": "workday",
2781 − "status": "actif",
2782 − "region": ""
2783 − }
2784 − ]
2 + "_meta": {
3 + "project": "Job·Ka — Groupe KA",
4 + "author": "Simon-Pierre Boucher <contact@spboucher.ai>",
5 + "role": "Registre descriptif des sources (alimente la page Sources)",
6 + "updated": "2026-08-19",
7 + "counts": {
8 + "employeurs_directs": 240,
9 + "plateformes_ats": 19,
10 + "portails": 3,
11 + "depot_direct": 1,
12 + "reseaux_multi_employeurs": 1
13 + },
14 + "ats": [
15 + "adp",
16 + "ashby",
17 + "bamboohr",
18 + "breezy",
19 + "digitalrecruiters",
20 + "greenhouse",
21 + "icims",
22 + "lever",
23 + "njoyn",
24 + "recruitee",
25 + "smartrecruiters",
26 + "successfactors",
27 + "taleo",
28 + "taleo_tbe",
29 + "ultipro",
30 + "workable",
31 + "workday",
32 + "workland",
33 + "wpjobmanager"
34 + ],
35 + "docs": "docs/connecteurs/INDEX.md (fiches générées par scripts/gen_connector_docs.py) ; conformité : docs/CONFORMITE.md"
36 + },
37 + "sources": [
38 + {
39 + "id": "adeleexpressfr",
40 + "name": "Adèle Express",
41 + "url": "",
42 + "careers_url": "https://adeleexpressfr.recruitee.com",
43 + "sectors": [
44 + "Transport"
45 + ],
46 + "connector": "recruitee",
47 + "status": "actif",
48 + "region": "Montréal"
49 + },
50 + {
51 + "id": "adi_albert_davidson_industries",
52 + "name": "ADI - Albert Davidson Industries",
53 + "url": "",
54 + "careers_url": "https://adi-albert-davidson-industries.breezy.hr",
55 + "sectors": [
56 + "Manufacture"
57 + ],
58 + "connector": "breezy",
59 + "status": "actif",
60 + "region": "Pointe-Claire"
61 + },
62 + {
63 + "id": "agnico_eagle",
64 + "name": "Agnico Eagle Mines",
65 + "url": "https://www.agnicoeagle.com",
66 + "careers_url": "https://agnicoeagle.taleo.net/careersection/2/jobsearch.ftl?lang=fr",
67 + "sectors": [
68 + "Mines",
69 + "Ingénierie",
70 + "Métiers spécialisés"
71 + ],
72 + "connector": "taleo",
73 + "status": "actif",
74 + "region": "Abitibi-Témiscamingue, Malartic, Rouyn-Noranda"
75 + },
76 + {
77 + "id": "agropur",
78 + "name": "Agropur",
79 + "url": "https://www.agropur.com",
80 + "careers_url": "https://agropur.wd3.myworkdayjobs.com/Agropur_Careers",
81 + "sectors": [
82 + "Agroalimentaire",
83 + "Production"
84 + ],
85 + "connector": "workday",
86 + "status": "actif",
87 + "region": "Longueuil / province"
88 + },
89 + {
90 + "id": "airbus",
91 + "name": "Airbus Canada",
92 + "url": "https://airbus.com",
93 + "careers_url": "https://ag.wd3.myworkdayjobs.com/Airbus",
94 + "sectors": [],
95 + "connector": "workday",
96 + "status": "actif",
97 + "region": "Mirabel"
98 + },
99 + {
100 + "id": "ajwalter",
101 + "name": "AJ Walter Aviation",
102 + "url": "",
103 + "careers_url": "https://ajwalter.recruitee.com",
104 + "sectors": [
105 + "Aéronautique"
106 + ],
107 + "connector": "recruitee",
108 + "status": "actif",
109 + "region": "Montréal"
110 + },
111 + {
112 + "id": "alayacare",
113 + "name": "AlayaCare",
114 + "url": "https://www.alayacare.com",
115 + "careers_url": "https://job-boards.greenhouse.io/alayacare",
116 + "sectors": [
117 + "TI",
118 + "Santé"
119 + ],
120 + "connector": "greenhouse",
121 + "status": "actif",
122 + "region": "Montréal"
123 + },
124 + {
125 + "id": "alcoa",
126 + "name": "Alcoa Canada",
127 + "url": "https://alcoa.com",
128 + "careers_url": "https://alcoa.wd5.myworkdayjobs.com/Careers",
129 + "sectors": [],
130 + "connector": "workday",
131 + "status": "actif",
132 + "region": "Baie-Comeau"
133 + },
134 + {
135 + "id": "alimentiv_2",
136 + "name": "Alimentiv",
137 + "url": "",
138 + "careers_url": "https://jobs.lever.co/alimentiv-2",
139 + "sectors": [
140 + "Recherche clinique"
141 + ],
142 + "connector": "lever",
143 + "status": "actif",
144 + "region": "Montréal, Québec"
145 + },
146 + {
147 + "id": "alphanumeric_systems",
148 + "name": "Alphanumeric Systems",
149 + "url": "",
150 + "careers_url": "https://alphanumeric-systems.breezy.hr",
151 + "sectors": [
152 + "TI",
153 + "Santé"
154 + ],
155 + "connector": "breezy",
156 + "status": "actif",
157 + "region": "Montréal, Sainte-Foy"
158 + },
159 + {
160 + "id": "altasciences",
161 + "name": "Altasciences",
162 + "url": "",
163 + "careers_url": "https://altasciences.wd1.myworkdayjobs.com/Careers",
164 + "sectors": [
165 + "Pharmaceutique"
166 + ],
167 + "connector": "workday",
168 + "status": "actif",
169 + "region": "Laval"
170 + },
171 + {
172 + "id": "amilia",
173 + "name": "Amilia",
174 + "url": "",
175 + "careers_url": "https://amilia.recruitee.com",
176 + "sectors": [
177 + "TI"
178 + ],
179 + "connector": "recruitee",
180 + "status": "actif",
181 + "region": "Montréal"
182 + },
183 + {
184 + "id": "anciapersonnelinc",
185 + "name": "ANCIA Personnel",
186 + "url": "",
187 + "careers_url": "https://anciapersonnelinc.recruitee.com",
188 + "sectors": [
189 + "Placement"
190 + ],
191 + "connector": "recruitee",
192 + "status": "actif",
193 + "region": "Lévis, Québec, Montréal"
194 + },
195 + {
196 + "id": "appdirect",
197 + "name": "AppDirect",
198 + "url": "",
199 + "careers_url": "https://job-boards.greenhouse.io/appdirect",
200 + "sectors": [
201 + "TI",
202 + "SaaS"
203 + ],
204 + "connector": "greenhouse",
205 + "status": "actif",
206 + "region": "Montréal"
207 + },
208 + {
209 + "id": "astucemedia",
210 + "name": "Astucemedia",
211 + "url": "",
212 + "careers_url": "https://jobs.smartrecruiters.com/company/Astucemedia",
213 + "sectors": [
214 + "Médias",
215 + "TI"
216 + ],
217 + "connector": "smartrecruiters",
218 + "status": "actif",
219 + "region": "Montréal"
220 + },
221 + {
222 + "id": "atecna_montreal",
223 + "name": "Atecna",
224 + "url": "",
225 + "careers_url": "https://apply.workable.com/atecna-montreal",
226 + "sectors": [
227 + "TI",
228 + "Conseil"
229 + ],
230 + "connector": "workable",
231 + "status": "actif",
232 + "region": "Montréal"
233 + },
234 + {
235 + "id": "atlas_workland",
236 + "name": "Réseau Atlas Workland (~80 employeurs QC : CSS, cégeps, Santé Québec, STQ, UQTR…)",
237 + "url": "https://www.workland.com",
238 + "careers_url": "https://atlas.workland.com",
239 + "connector": "workland",
240 + "sectors": [
241 + "Éducation",
242 + "Santé",
243 + "Secteur public",
244 + "Multi-employeurs"
245 + ],
246 + "region": "Québec (province)",
247 + "status": "actif"
248 + },
249 + {
250 + "id": "autodesk",
251 + "name": "Autodesk",
252 + "url": "",
253 + "careers_url": "https://autodesk.wd1.myworkdayjobs.com/Ext",
254 + "sectors": [
255 + "TI",
256 + "Logiciel"
257 + ],
258 + "connector": "workday",
259 + "status": "actif",
260 + "region": "Montréal"
261 + },
262 + {
263 + "id": "aviyatech",
264 + "name": "Aviya Aerospace Systems",
265 + "url": "",
266 + "careers_url": "https://jobs.lever.co/aviyatech",
267 + "sectors": [
268 + "Aéronautique"
269 + ],
270 + "connector": "lever",
271 + "status": "actif",
272 + "region": "Longueuil"
273 + },
274 + {
275 + "id": "bardel_entertainment",
276 + "name": "Bardel Entertainment",
277 + "url": "",
278 + "careers_url": "https://apply.workable.com/bardel-entertainment",
279 + "sectors": [
280 + "Animation"
281 + ],
282 + "connector": "workable",
283 + "status": "actif",
284 + "region": "Montréal"
285 + },
286 + {
287 + "id": "bayshore",
288 + "name": "Bayshore HealthCare",
289 + "url": "https://www.bayshore.ca",
290 + "careers_url": "https://bayshore.taleo.net/careersection/bs_ex/jobsearch.ftl?lang=fr",
291 + "sectors": [
292 + "Santé",
293 + "Soins à domicile"
294 + ],
295 + "connector": "taleo",
296 + "status": "actif",
297 + "region": "Montréal, Québec"
298 + },
299 + {
300 + "id": "bc2",
301 + "name": "Groupe BC2",
302 + "url": "",
303 + "careers_url": "https://bc2.bamboohr.com/careers",
304 + "sectors": [
305 + "Urbanisme",
306 + "Conseil"
307 + ],
308 + "connector": "bamboohr",
309 + "status": "actif",
310 + "region": "Montréal"
311 + },
312 + {
313 + "id": "bdc",
314 + "name": "BDC",
315 + "url": "",
316 + "careers_url": "https://bdc.wd10.myworkdayjobs.com/bdc_careers",
317 + "sectors": [
318 + "Finance"
319 + ],
320 + "connector": "workday",
321 + "status": "actif",
322 + "region": "Montréal"
323 + },
324 + {
325 + "id": "bell_textron",
326 + "name": "Bell Textron Canada",
327 + "url": "https://www.bellflight.com",
328 + "careers_url": "https://textron.taleo.net/careersection/bell/jobsearch.ftl?lang=fr",
329 + "sectors": [
330 + "Aéronautique",
331 + "Fabrication"
332 + ],
333 + "connector": "taleo",
334 + "status": "actif",
335 + "region": "Mirabel"
336 + },
337 + {
338 + "id": "beneva",
339 + "name": "Beneva",
340 + "url": "https://beneva.ca",
341 + "careers_url": "https://beneva.wd10.myworkdayjobs.com/BenevaSite_carriere",
342 + "sectors": [],
343 + "connector": "workday",
344 + "status": "actif",
345 + "region": "Québec"
346 + },
347 + {
348 + "id": "bento_sushi",
349 + "name": "Bento Sushi",
350 + "url": "https://www.bentosushi.com",
351 + "careers_url": "https://workforcenow.adp.com/mascsr/default/mdf/recruitment/recruitment.html?cid=d0dfb14c-f365-4599-b39b-0fdccb3d1160&ccId=19000101_000001&lang=fr_CA",
352 + "connector": "adp",
353 + "sectors": [
354 + "Restauration"
355 + ],
356 + "region": "Québec (province)",
357 + "status": "actif"
358 + },
359 + {
360 + "id": "bhvr",
361 + "name": "Behaviour Interactif",
362 + "url": "",
363 + "careers_url": "https://jobs.lever.co/bhvr",
364 + "sectors": [
365 + "Jeux vidéo"
366 + ],
367 + "connector": "lever",
368 + "status": "actif",
369 + "region": "Montréal"
370 + },
371 + {
372 + "id": "bigbang",
373 + "name": "Big Bang",
374 + "url": "",
375 + "careers_url": "https://bigbang.bamboohr.com/careers",
376 + "sectors": [
377 + "TI"
378 + ],
379 + "connector": "bamboohr",
380 + "status": "actif",
381 + "region": "Montréal"
382 + },
383 + {
384 + "id": "biximontreal",
385 + "name": "BIXI Montréal",
386 + "url": "",
387 + "careers_url": "https://biximontreal.recruitee.com",
388 + "sectors": [
389 + "Transport"
390 + ],
391 + "connector": "recruitee",
392 + "status": "actif",
393 + "region": "Montréal"
394 + },
395 + {
396 + "id": "bmo",
397 + "name": "BMO Groupe financier",
398 + "url": "",
399 + "careers_url": "https://bmo.wd3.myworkdayjobs.com/External",
400 + "sectors": [
401 + "Finance"
402 + ],
403 + "connector": "workday",
404 + "status": "actif",
405 + "region": "Montréal, Laval, Gatineau"
406 + },
407 + {
408 + "id": "bombardier",
409 + "name": "Bombardier",
410 + "url": "https://bombardier.com",
411 + "careers_url": "https://jobs.bombardier.com",
412 + "sectors": [
413 + "Aéronautique",
414 + "Ingénierie",
415 + "Fabrication"
416 + ],
417 + "connector": "successfactors",
418 + "status": "actif",
419 + "region": "Dorval, Mirabel, Montréal"
420 + },
421 + {
422 + "id": "botpress",
423 + "name": "Botpress",
424 + "url": "",
425 + "careers_url": "https://apply.workable.com/botpress",
426 + "sectors": [
427 + "TI",
428 + "IA"
429 + ],
430 + "connector": "workable",
431 + "status": "actif",
432 + "region": "Montréal, Québec"
433 + },
434 + {
435 + "id": "brandmomentum",
436 + "name": "Brand Momentum",
437 + "url": "",
438 + "careers_url": "https://brandmomentum.breezy.hr",
439 + "sectors": [
440 + "Marketing",
441 + "Ventes"
442 + ],
443 + "connector": "breezy",
444 + "status": "actif",
445 + "region": "Montréal, Laval, Québec"
446 + },
447 + {
448 + "id": "broadsign",
449 + "name": "Broadsign",
450 + "url": "",
451 + "careers_url": "https://job-boards.greenhouse.io/broadsign",
452 + "sectors": [
453 + "TI",
454 + "Affichage"
455 + ],
456 + "connector": "greenhouse",
457 + "status": "actif",
458 + "region": "Montréal"
459 + },
460 + {
461 + "id": "broccolini",
462 + "name": "Broccolini",
463 + "url": "",
464 + "careers_url": "https://broccolini.bamboohr.com/careers",
465 + "sectors": [
466 + "Construction",
467 + "Immobilier"
468 + ],
469 + "connector": "bamboohr",
470 + "status": "actif",
471 + "region": "Montréal"
472 + },
473 + {
474 + "id": "caaquebec",
475 + "name": "CAA-Québec",
476 + "url": "https://caaquebec.com",
477 + "careers_url": "https://caaquebec.wd3.myworkdayjobs.com/CarrieresCAA-Quebec",
478 + "sectors": [],
479 + "connector": "workday",
480 + "status": "actif",
481 + "region": "Québec"
482 + },
483 + {
484 + "id": "cae",
485 + "name": "CAE",
486 + "url": "https://www.cae.com",
487 + "careers_url": "https://cae.wd3.myworkdayjobs.com/career",
488 + "sectors": [
489 + "Aéronautique",
490 + "Simulation",
491 + "TI"
492 + ],
493 + "connector": "workday",
494 + "status": "actif",
495 + "region": "Montréal"
496 + },
497 + {
498 + "id": "canada_global",
499 + "name": "Canada Global Recruitment",
500 + "url": "",
501 + "careers_url": "https://canada-global.breezy.hr",
502 + "sectors": [
503 + "Placement"
504 + ],
505 + "connector": "breezy",
506 + "status": "actif",
507 + "region": "Montréal"
508 + },
509 + {
510 + "id": "canadiantirecorporation",
511 + "name": "Canadian Tire",
512 + "url": "https://canadiantire.ca",
513 + "careers_url": "https://canadiantirecorporation.wd3.myworkdayjobs.com/Enterprise_External_Careers_Site",
514 + "sectors": [],
515 + "connector": "workday",
516 + "status": "actif",
517 + "region": "Montréal"
518 + },
519 + {
520 + "id": "capreit",
521 + "name": "CAPREIT",
522 + "url": "https://www.capreit.ca",
523 + "careers_url": "https://careers-capreit.icims.com/jobs/search?ss=1",
524 + "sectors": [
525 + "Immobilier",
526 + "Gestion immobilière"
527 + ],
528 + "connector": "icims",
529 + "status": "actif",
530 + "region": "Montréal"
531 + },
532 + {
533 + "id": "cascades",
534 + "name": "Cascades",
535 + "url": "https://www.cascades.com",
536 + "careers_url": "https://jobs.cascades.com",
537 + "sectors": [
538 + "Pâtes et papiers",
539 + "Emballage",
540 + "Fabrication"
541 + ],
542 + "connector": "successfactors",
543 + "status": "actif",
544 + "region": "Kingsey Falls, Drummondville, Candiac"
545 + },
546 + {
547 + "id": "cdpq",
548 + "name": "CDPQ — Caisse de dépôt et placement du Québec",
549 + "url": "https://cdpq.com",
550 + "careers_url": "https://cdpq.wd10.myworkdayjobs.com/CDPQ",
551 + "sectors": [],
552 + "connector": "workday",
553 + "status": "actif",
554 + "region": "Montréal"
555 + },
556 + {
557 + "id": "cfmontreal",
558 + "name": "CF Montréal",
559 + "url": "",
560 + "careers_url": "https://jobs.smartrecruiters.com/company/CFMontreal",
561 + "sectors": [
562 + "Sport"
563 + ],
564 + "connector": "smartrecruiters",
565 + "status": "actif",
566 + "region": "Montréal"
567 + },
568 + {
569 + "id": "cgi",
570 + "name": "CGI",
571 + "url": "https://www.cgi.com",
572 + "careers_url": "https://cgi.njoyn.com/CORP/xweb/xweb.asp?clid=21001&page=joblisting&lang=2",
573 + "connector": "njoyn",
574 + "sectors": [
575 + "TI",
576 + "Services-conseils"
577 + ],
578 + "region": "Montréal, Québec",
579 + "status": "actif"
580 + },
581 + {
582 + "id": "charger_logistics_inc",
583 + "name": "Charger Logistics",
584 + "url": "",
585 + "careers_url": "https://apply.workable.com/charger-logistics-inc",
586 + "sectors": [
587 + "Transport",
588 + "Logistique"
589 + ],
590 + "connector": "workable",
591 + "status": "actif",
592 + "region": "Dorval"
593 + },
594 + {
595 + "id": "chu_quebec",
596 + "name": "CHU de Québec — Université Laval",
597 + "url": "https://www.chudequebec.ca",
598 + "careers_url": "https://chudequebec.carrieresante.gouv.qc.ca",
599 + "connector": "wpjobmanager",
600 + "sectors": [
601 + "Santé",
602 + "Secteur public"
603 + ],
604 + "region": "Québec",
605 + "status": "actif"
606 + },
607 + {
608 + "id": "chum",
609 + "name": "CHUM",
610 + "url": "https://www.chumontreal.qc.ca",
611 + "careers_url": "https://chum.carrieresante.gouv.qc.ca",
612 + "connector": "wpjobmanager",
613 + "sectors": [
614 + "Santé",
615 + "Secteur public"
616 + ],
617 + "region": "Montréal",
618 + "status": "actif"
619 + },
620 + {
621 + "id": "churchdwight",
622 + "name": "Church & Dwight Canada",
623 + "url": "https://churchdwight.ca",
624 + "careers_url": "https://churchdwight.wd1.myworkdayjobs.com/chdcanadacareers",
625 + "sectors": [
626 + "Production"
627 + ],
628 + "connector": "workday",
629 + "status": "actif",
630 + "region": ""
631 + },
632 + {
633 + "id": "cibc",
634 + "name": "Banque CIBC",
635 + "url": "",
636 + "careers_url": "https://cibc.wd3.myworkdayjobs.com/search",
637 + "sectors": [
638 + "Finance"
639 + ],
640 + "connector": "workday",
641 + "status": "actif",
642 + "region": "Montréal, Québec"
643 + },
644 + {
645 + "id": "cima2",
646 + "name": "CIMA+",
647 + "url": "",
648 + "careers_url": "https://jobs.smartrecruiters.com/company/CIMA2",
649 + "sectors": [
650 + "Ingénierie"
651 + ],
652 + "connector": "smartrecruiters",
653 + "status": "actif",
654 + "region": "Montréal, Québec, Laval"
655 + },
656 + {
657 + "id": "circlek",
658 + "name": "Couche-Tard / Circle K",
659 + "url": "",
660 + "careers_url": "https://circlek.wd3.myworkdayjobs.com/CircleKStoreJobs",
661 + "sectors": [
662 + "Commerce de détail"
663 + ],
664 + "connector": "workday",
665 + "status": "actif",
666 + "region": "Québec, Montréal, Drummondville"
667 + },
668 + {
669 + "id": "cirquedusoleil",
670 + "name": "Cirque du Soleil",
671 + "url": "https://www.cirquedusoleil.com",
672 + "careers_url": "https://jobs.lever.co/cirquedusoleil",
673 + "sectors": [
674 + "Divertissement",
675 + "Création"
676 + ],
677 + "connector": "lever",
678 + "status": "actif",
679 + "region": "Montréal"
680 + },
681 + {
682 + "id": "cisss_abitibi",
683 + "name": "CISSS de l'Abitibi-Témiscamingue",
684 + "url": "https://www.cisss-at.gouv.qc.ca",
685 + "careers_url": "https://cisssat.carrieresante.gouv.qc.ca",
686 + "connector": "wpjobmanager",
687 + "sectors": [
688 + "Santé",
689 + "Secteur public"
690 + ],
691 + "region": "Abitibi-Témiscamingue",
692 + "status": "actif"
693 + },
694 + {
695 + "id": "cisss_chaudiere_appalaches",
696 + "name": "CISSS de Chaudière-Appalaches",
697 + "url": "https://www.cisssca.com",
698 + "careers_url": "https://cisssca.carrieresante.gouv.qc.ca",
699 + "connector": "wpjobmanager",
700 + "sectors": [
701 + "Santé",
702 + "Secteur public"
703 + ],
704 + "region": "Chaudière-Appalaches",
705 + "status": "actif"
706 + },
707 + {
708 + "id": "cisss_lanaudiere",
709 + "name": "CISSS de Lanaudière",
710 + "url": "https://www.cisss-lanaudiere.gouv.qc.ca",
711 + "careers_url": "https://lanaudiere.carrieresante.gouv.qc.ca",
712 + "connector": "wpjobmanager",
713 + "sectors": [
714 + "Santé",
715 + "Secteur public"
716 + ],
717 + "region": "Lanaudière",
718 + "status": "actif"
719 + },
720 + {
721 + "id": "cisss_laurentides",
722 + "name": "CISSS des Laurentides",
723 + "url": "https://www.santelaurentides.gouv.qc.ca",
724 + "careers_url": "https://laurentides.carrieresante.gouv.qc.ca",
725 + "connector": "wpjobmanager",
726 + "sectors": [
727 + "Santé",
728 + "Secteur public"
729 + ],
730 + "region": "Laurentides",
731 + "status": "actif"
732 + },
733 + {
734 + "id": "cisss_laval",
735 + "name": "CISSS de Laval",
736 + "url": "https://www.lavalensante.com",
737 + "careers_url": "https://cissslaval.carrieresante.gouv.qc.ca",
738 + "connector": "wpjobmanager",
739 + "sectors": [
740 + "Santé",
741 + "Secteur public"
742 + ],
743 + "region": "Laval",
744 + "status": "actif"
745 + },
746 + {
747 + "id": "cisss_outaouais",
748 + "name": "CISSS de l'Outaouais",
749 + "url": "https://cisss-outaouais.gouv.qc.ca",
750 + "careers_url": "https://viensvivretespassions.ca",
751 + "connector": "wpjobmanager",
752 + "sectors": [
753 + "Santé",
754 + "Secteur public"
755 + ],
756 + "region": "Outaouais",
757 + "status": "actif"
758 + },
759 + {
760 + "id": "ciusss_est_montreal",
761 + "name": "CIUSSS de l'Est-de-l'Île-de-Montréal",
762 + "url": "https://ciusss-estmtl.gouv.qc.ca",
763 + "careers_url": "https://ciusssemtl.taleo.net/careersection/cemtl/jobsearch.ftl?lang=fr",
764 + "sectors": [
765 + "Santé",
766 + "Services sociaux",
767 + "Secteur public"
768 + ],
769 + "connector": "taleo",
770 + "status": "actif",
771 + "region": "Montréal"
772 + },
773 + {
774 + "id": "cogeco",
775 + "name": "Cogeco",
776 + "url": "",
777 + "careers_url": "https://cogeco.wd3.myworkdayjobs.com/Cogeco_Careers",
778 + "sectors": [
779 + "Télécoms"
780 + ],
781 + "connector": "workday",
782 + "status": "actif",
783 + "region": "Montréal, Trois-Rivières"
784 + },
785 + {
786 + "id": "cohere",
787 + "name": "Cohere",
788 + "url": "",
789 + "careers_url": "https://jobs.ashbyhq.com/cohere",
790 + "sectors": [
791 + "TI",
792 + "IA"
793 + ],
794 + "connector": "ashby",
795 + "status": "actif",
796 + "region": "Montréal"
797 + },
798 + {
799 + "id": "cordonbleu",
800 + "name": "Aliments Ouimet-Cordon Bleu inc.",
801 + "url": "https://clarkcordonbleu.ca",
802 + "careers_url": "https://cordonbleu.bamboohr.com/careers",
803 + "sectors": [
804 + "Production"
805 + ],
806 + "connector": "bamboohr",
807 + "status": "actif",
808 + "region": ""
809 + },
810 + {
811 + "id": "cssdd",
812 + "name": "CSS des Découvreurs",
813 + "url": "https://www.cssdd.gouv.qc.ca",
814 + "careers_url": "https://emplois.cssdd.gouv.qc.ca",
815 + "connector": "digitalrecruiters",
816 + "sectors": [
817 + "Éducation",
818 + "Secteur public"
819 + ],
820 + "region": "Québec",
821 + "status": "actif"
822 + },
823 + {
824 + "id": "cultures_genv",
825 + "name": "Cultures Gen V",
826 + "url": "https://gen-v.com",
827 + "careers_url": "https://workforcenow.adp.com/mascsr/default/mdf/recruitment/recruitment.html?cid=8b346731-d189-4cf2-a14c-9e48d38befde&ccId=36427051_2&lang=fr_CA",
828 + "connector": "adp",
829 + "sectors": [
830 + "Agroalimentaire",
831 + "Serriculture"
832 + ],
833 + "region": "Montérégie",
834 + "status": "actif"
835 + },
836 + {
837 + "id": "dcbel",
838 + "name": "dcbel",
839 + "url": "",
840 + "careers_url": "https://dcbel.bamboohr.com/careers",
841 + "sectors": [
842 + "Énergie",
843 + "TI"
844 + ],
845 + "connector": "bamboohr",
846 + "status": "actif",
847 + "region": "Montréal"
848 + },
849 + {
850 + "id": "deloitte",
851 + "name": "Deloitte Canada",
852 + "url": "https://www.deloitte.com/ca",
853 + "careers_url": "https://careers.deloitte.ca",
854 + "connector": "successfactors",
855 + "sectors": [
856 + "Services-conseils",
857 + "Comptabilité",
858 + "TI"
859 + ],
860 + "region": "Montréal, Québec",
861 + "status": "actif"
862 + },
863 + {
864 + "id": "depot-direct",
865 + "name": "Dépôt direct employeurs",
866 + "url": "https://www.job-ka.com/employeurs",
867 + "careers_url": "https://www.job-ka.com/employeurs",
868 + "sectors": [
869 + "Tous secteurs"
870 + ],
871 + "connector": "depot-direct",
872 + "status": "modération",
873 + "region": "Québec (province)"
874 + },
875 + {
876 + "id": "desjardins",
877 + "name": "Mouvement Desjardins",
878 + "url": "https://www.desjardins.com",
879 + "careers_url": "https://desjardins.wd10.myworkdayjobs.com/Desjardins",
880 + "sectors": [
881 + "Finance",
882 + "Assurance",
883 + "TI"
884 + ],
885 + "connector": "workday",
886 + "status": "actif",
887 + "region": "Lévis / province"
888 + },
889 + {
890 + "id": "devimco",
891 + "name": "Devimco Appartements",
892 + "url": "https://devimco.com",
893 + "careers_url": "https://devimco.bamboohr.com/careers",
894 + "sectors": [
895 + "Immobilier"
896 + ],
897 + "connector": "bamboohr",
898 + "status": "actif",
899 + "region": ""
900 + },
901 + {
902 + "id": "dilitrust",
903 + "name": "DiliTrust",
904 + "url": "",
905 + "careers_url": "https://jobs.lever.co/dilitrust",
906 + "sectors": [
907 + "TI",
908 + "Juridique"
909 + ],
910 + "connector": "lever",
911 + "status": "actif",
912 + "region": "Montréal"
913 + },
914 + {
915 + "id": "distro",
916 + "name": "Distro",
917 + "url": "",
918 + "careers_url": "https://jobs.lever.co/distro",
919 + "sectors": [
920 + "Ventes",
921 + "TI"
922 + ],
923 + "connector": "lever",
924 + "status": "actif",
925 + "region": "Montréal, Westmount"
926 + },
927 + {
928 + "id": "domtar",
929 + "name": "Domtar",
930 + "url": "https://www.domtar.com",
931 + "careers_url": "https://jobs.domtar.com",
932 + "sectors": [
933 + "Pâtes et papiers",
934 + "Foresterie",
935 + "Fabrication"
936 + ],
937 + "connector": "successfactors",
938 + "status": "actif",
939 + "region": "Montréal, Windsor, Lachine"
940 + },
941 + {
942 + "id": "dulcedo",
943 + "name": "Dulcedo Management",
944 + "url": "",
945 + "careers_url": "https://jobs.lever.co/dulcedo",
946 + "sectors": [
947 + "Mode",
948 + "Gestion d'artistes"
949 + ],
950 + "connector": "lever",
951 + "status": "actif",
952 + "region": "Montréal"
953 + },
954 + {
955 + "id": "edf_renouvelables",
956 + "name": "EDF Renouvelables Canada",
957 + "url": "https://www.edf-renouvelables.ca",
958 + "careers_url": "https://cafrench-edf-re.icims.com/jobs/search?ss=1",
959 + "sectors": [
960 + "Énergie",
961 + "Ingénierie"
962 + ],
963 + "connector": "icims",
964 + "status": "actif",
965 + "region": "Montréal"
966 + },
967 + {
968 + "id": "emcocorporation",
969 + "name": "EMCO",
970 + "url": "",
971 + "careers_url": "https://jobs.smartrecruiters.com/company/EMCOCorporation",
972 + "sectors": [
973 + "Distribution",
974 + "Construction"
975 + ],
976 + "connector": "smartrecruiters",
977 + "status": "actif",
978 + "region": "Montréal, Québec, Laval"
979 + },
980 + {
981 + "id": "eminent_valet",
982 + "name": "Eminent Valet",
983 + "url": "",
984 + "careers_url": "https://apply.workable.com/eminent-valet",
985 + "sectors": [
986 + "Services"
987 + ],
988 + "connector": "workable",
989 + "status": "actif",
990 + "region": "Montréal"
991 + },
992 + {
993 + "id": "eosaircraftinc",
994 + "name": "EOS Aircraft",
995 + "url": "",
996 + "careers_url": "https://eosaircraftinc.bamboohr.com/careers",
997 + "sectors": [
998 + "Aéronautique"
999 + ],
1000 + "connector": "bamboohr",
1001 + "status": "actif",
1002 + "region": "Montréal"
1003 + },
1004 + {
1005 + "id": "eq3_ltd",
1006 + "name": "EQ3",
1007 + "url": "",
1008 + "careers_url": "https://eq3-ltd.breezy.hr",
1009 + "sectors": [
1010 + "Commerce de détail",
1011 + "Meuble"
1012 + ],
1013 + "connector": "breezy",
1014 + "status": "actif",
1015 + "region": "Brossard, Laval, Montréal"
1016 + },
1017 + {
1018 + "id": "eqbank",
1019 + "name": "EQ Bank",
1020 + "url": "",
1021 + "careers_url": "https://jobs.lever.co/eqbank",
1022 + "sectors": [
1023 + "Finance"
1024 + ],
1025 + "connector": "lever",
1026 + "status": "actif",
1027 + "region": "Montréal"
1028 + },
1029 + {
1030 + "id": "espresso_jobs",
1031 + "name": "Espresso-Jobs",
1032 + "url": "https://www.espresso-jobs.com",
1033 + "careers_url": "https://www.espresso-jobs.com/emploi",
1034 + "sectors": [
1035 + "Portail",
1036 + "TI",
1037 + "Créatif"
1038 + ],
1039 + "connector": "portail",
1040 + "status": "actif",
1041 + "region": "Québec (province)",
1042 + "aggregator": true
1043 + },
1044 + {
1045 + "id": "evlo",
1046 + "name": "EVLO (Hydro-Québec)",
1047 + "url": "",
1048 + "careers_url": "https://evlo.bamboohr.com/careers",
1049 + "sectors": [
1050 + "Énergie"
1051 + ],
1052 + "connector": "bamboohr",
1053 + "status": "actif",
1054 + "region": "Varennes"
1055 + },
1056 + {
1057 + "id": "evolving_web",
1058 + "name": "Evolving Web",
1059 + "url": "",
1060 + "careers_url": "https://apply.workable.com/evolving-web",
1061 + "sectors": [
1062 + "TI",
1063 + "Web"
1064 + ],
1065 + "connector": "workable",
1066 + "status": "actif",
1067 + "region": "Montréal"
1068 + },
1069 + {
1070 + "id": "exfo",
1071 + "name": "EXFO",
1072 + "url": "",
1073 + "careers_url": "https://exfo.wd10.myworkdayjobs.com/exfo_careers",
1074 + "sectors": [
1075 + "TI",
1076 + "Télécommunications"
1077 + ],
1078 + "connector": "workday",
1079 + "status": "actif",
1080 + "region": "Québec"
1081 + },
1082 + {
1083 + "id": "exo",
1084 + "name": "exo (transport métropolitain)",
1085 + "url": "https://exo.quebec",
1086 + "careers_url": "https://phh.tbe.taleo.net/phh04/ats/careers/v2/jobSearch?org=AMT&cws=39",
1087 + "connector": "taleo_tbe",
1088 + "sectors": [
1089 + "Transport",
1090 + "Secteur public"
1091 + ],
1092 + "region": "Montréal",
1093 + "status": "actif"
1094 + },
1095 + {
1096 + "id": "explorance",
1097 + "name": "Explorance",
1098 + "url": "",
1099 + "careers_url": "https://explorance.bamboohr.com/careers",
1100 + "sectors": [
1101 + "TI",
1102 + "SaaS"
1103 + ],
1104 + "connector": "bamboohr",
1105 + "status": "actif",
1106 + "region": "Montréal"
1107 + },
1108 + {
1109 + "id": "fenetresconcept",
1110 + "name": "Fenêtres Concept",
1111 + "url": "https://fenetresconcept.com",
1112 + "careers_url": "https://fenetresconcept.bamboohr.com/careers",
1113 + "sectors": [
1114 + "Production"
1115 + ],
1116 + "connector": "bamboohr",
1117 + "status": "actif",
1118 + "region": ""
1119 + },
1120 + {
1121 + "id": "flare",
1122 + "name": "Flare (cybersécurité)",
1123 + "url": "",
1124 + "careers_url": "https://flare.bamboohr.com/careers",
1125 + "sectors": [
1126 + "TI"
1127 + ],
1128 + "connector": "bamboohr",
1129 + "status": "actif",
1130 + "region": "Montréal"
1131 + },
1132 + {
1133 + "id": "flinks",
1134 + "name": "Flinks",
1135 + "url": "",
1136 + "careers_url": "https://apply.workable.com/flinks",
1137 + "sectors": [
1138 + "TI",
1139 + "Fintech"
1140 + ],
1141 + "connector": "workable",
1142 + "status": "actif",
1143 + "region": "Montréal"
1144 + },
1145 + {
1146 + "id": "fondsftq",
1147 + "name": "Fonds de solidarité FTQ",
1148 + "url": "https://fondsftq.com",
1149 + "careers_url": "https://fondsftq.wd10.myworkdayjobs.com/sitecarriere_externe",
1150 + "sectors": [],
1151 + "connector": "workday",
1152 + "status": "actif",
1153 + "region": "Montréal"
1154 + },
1155 + {
1156 + "id": "framestore",
1157 + "name": "Framestore",
1158 + "url": "",
1159 + "careers_url": "https://framestore.recruitee.com",
1160 + "sectors": [
1161 + "Effets visuels",
1162 + "Création"
1163 + ],
1164 + "connector": "recruitee",
1165 + "status": "actif",
1166 + "region": "Montréal"
1167 + },
1168 + {
1169 + "id": "fruitdor",
1170 + "name": "Fruit d'Or",
1171 + "url": "https://fruitdor.ca",
1172 + "careers_url": "https://recruiting.ultipro.ca/FRU5100FRUIT/JobBoard/91103632-8052-480e-a5b0-a6028d640577/",
1173 + "connector": "ultipro",
1174 + "sectors": [
1175 + "Agroalimentaire",
1176 + "Manufacturier"
1177 + ],
1178 + "region": "Centre-du-Québec",
1179 + "status": "actif"
1180 + },
1181 + {
1182 + "id": "fuse",
1183 + "name": "Fuse Energy",
1184 + "url": "",
1185 + "careers_url": "https://jobs.ashbyhq.com/Fuse",
1186 + "sectors": [
1187 + "Énergie",
1188 + "TI"
1189 + ],
1190 + "connector": "ashby",
1191 + "status": "actif",
1192 + "region": "Montréal"
1193 + },
1194 + {
1195 + "id": "gameloft",
1196 + "name": "Gameloft",
1197 + "url": "https://www.gameloft.com",
1198 + "careers_url": "https://jobs.smartrecruiters.com/company/gameloft",
1199 + "sectors": [
1200 + "Jeux vidéo"
1201 + ],
1202 + "connector": "smartrecruiters",
1203 + "status": "actif",
1204 + "region": "Montréal"
1205 + },
1206 + {
1207 + "id": "gearboxquebec",
1208 + "name": "Gearbox Studio Québec",
1209 + "url": "",
1210 + "careers_url": "https://job-boards.greenhouse.io/gearboxquebec",
1211 + "sectors": [
1212 + "Jeux vidéo"
1213 + ],
1214 + "connector": "greenhouse",
1215 + "status": "actif",
1216 + "region": "Montréal, Québec"
1217 + },
1218 + {
1219 + "id": "genetec_inc",
1220 + "name": "Genetec",
1221 + "url": "https://genetec.com",
1222 + "careers_url": "https://apply.workable.com/genetec-inc",
1223 + "sectors": [],
1224 + "connector": "workable",
1225 + "status": "actif",
1226 + "region": "Montréal"
1227 + },
1228 + {
1229 + "id": "gfs",
1230 + "name": "Service alimentaire Gordon",
1231 + "url": "https://gfs.ca",
1232 + "careers_url": "https://gfs.wd5.myworkdayjobs.com/usjobs-french",
1233 + "sectors": [
1234 + "manufacturier/commerce"
1235 + ],
1236 + "connector": "workday",
1237 + "status": "actif",
1238 + "region": ""
1239 + },
1240 + {
1241 + "id": "gologic",
1242 + "name": "GoLogic",
1243 + "url": "",
1244 + "careers_url": "https://jobs.smartrecruiters.com/company/gologic",
1245 + "sectors": [
1246 + "TI"
1247 + ],
1248 + "connector": "smartrecruiters",
1249 + "status": "actif",
1250 + "region": "Montréal"
1251 + },
1252 + {
1253 + "id": "gorh",
1254 + "name": "Go RH",
1255 + "url": "",
1256 + "careers_url": "https://jobs.lever.co/gorh",
1257 + "sectors": [
1258 + "Placement",
1259 + "RH"
1260 + ],
1261 + "connector": "lever",
1262 + "status": "actif",
1263 + "region": "Montréal, Québec"
1264 + },
1265 + {
1266 + "id": "groupecanam",
1267 + "name": "Groupe Canam",
1268 + "url": "",
1269 + "careers_url": "https://jobs.smartrecruiters.com/company/groupecanam",
1270 + "sectors": [
1271 + "Production",
1272 + "Construction"
1273 + ],
1274 + "connector": "smartrecruiters",
1275 + "status": "actif",
1276 + "region": "Saint-Georges"
1277 + },
1278 + {
1279 + "id": "gsk",
1280 + "name": "GSK",
1281 + "url": "",
1282 + "careers_url": "https://gsk.wd5.myworkdayjobs.com/GSKCareers",
1283 + "sectors": [
1284 + "Pharmaceutique"
1285 + ],
1286 + "connector": "workday",
1287 + "status": "actif",
1288 + "region": "Laval, Québec"
1289 + },
1290 + {
1291 + "id": "guichet_emplois",
1292 + "name": "Guichet-Emplois (Canada)",
1293 + "url": "https://www.guichetemplois.gc.ca",
1294 + "careers_url": "https://www.guichetemplois.gc.ca/jobsearch/rechercheemplois?fprov=QC",
1295 + "sectors": [
1296 + "Portail",
1297 + "Tous secteurs"
1298 + ],
1299 + "connector": "portail",
1300 + "status": "actif",
1301 + "region": "Québec (province)",
1302 + "aggregator": true
1303 + },
1304 + {
1305 + "id": "gurussolutions",
1306 + "name": "GURUS Solutions",
1307 + "url": "",
1308 + "careers_url": "https://job-boards.greenhouse.io/gurussolutions",
1309 + "sectors": [
1310 + "TI"
1311 + ],
1312 + "connector": "greenhouse",
1313 + "status": "actif",
1314 + "region": "Montréal"
1315 + },
1316 + {
1317 + "id": "hec_montreal",
1318 + "name": "HEC Montréal",
1319 + "url": "https://www.hec.ca",
1320 + "careers_url": "https://tre.tbe.taleo.net/tre01/ats/careers/v2/jobSearch?org=NYQEDG&cws=40",
1321 + "connector": "taleo_tbe",
1322 + "sectors": [
1323 + "Éducation",
1324 + "Administration"
1325 + ],
1326 + "region": "Montréal",
1327 + "status": "actif"
1328 + },
1329 + {
1330 + "id": "hec_montreal_profs",
1331 + "name": "HEC Montréal — corps professoral",
1332 + "url": "https://www.hec.ca",
1333 + "careers_url": "https://tre.tbe.taleo.net/tre01/ats/careers/v2/jobSearch?org=NYQEDG&cws=41",
1334 + "connector": "taleo_tbe",
1335 + "sectors": [
1336 + "Éducation",
1337 + "Recherche"
1338 + ],
1339 + "region": "Montréal",
1340 + "status": "actif"
1341 + },
1342 + {
1343 + "id": "hopper",
1344 + "name": "Hopper",
1345 + "url": "",
1346 + "careers_url": "https://jobs.ashbyhq.com/hopper",
1347 + "sectors": [
1348 + "TI",
1349 + "Voyage"
1350 + ],
1351 + "connector": "ashby",
1352 + "status": "actif",
1353 + "region": "Montréal"
1354 + },
1355 + {
1356 + "id": "hoyoverse",
1357 + "name": "HoYoverse",
1358 + "url": "",
1359 + "careers_url": "https://jobs.smartrecruiters.com/company/hoyoverse",
1360 + "sectors": [
1361 + "Jeux vidéo"
1362 + ],
1363 + "connector": "smartrecruiters",
1364 + "status": "actif",
1365 + "region": "Montréal"
1366 + },
1367 + {
1368 + "id": "huaweicanada",
1369 + "name": "Huawei Canada",
1370 + "url": "",
1371 + "careers_url": "https://huaweicanada.recruitee.com",
1372 + "sectors": [
1373 + "TI",
1374 + "Recherche"
1375 + ],
1376 + "connector": "recruitee",
1377 + "status": "actif",
1378 + "region": "Montréal"
1379 + },
1380 + {
1381 + "id": "hydroquebec",
1382 + "name": "Hydro-Québec",
1383 + "url": "https://www.hydroquebec.com",
1384 + "careers_url": "https://emploi.hydroquebec.com",
1385 + "connector": "successfactors",
1386 + "sectors": [
1387 + "Énergie",
1388 + "Génie",
1389 + "TI",
1390 + "Secteur public"
1391 + ],
1392 + "region": "Montréal, Québec (province)",
1393 + "status": "actif"
1394 + },
1395 + {
1396 + "id": "ia_groupe",
1397 + "name": "iA Groupe financier",
1398 + "url": "https://ia.ca",
1399 + "careers_url": "https://ia.wd3.myworkdayjobs.com/Professional",
1400 + "sectors": [
1401 + "Assurance",
1402 + "Finance",
1403 + "TI"
1404 + ],
1405 + "connector": "workday",
1406 + "status": "actif",
1407 + "region": "Québec"
1408 + },
1409 + {
1410 + "id": "industrious",
1411 + "name": "Industrious",
1412 + "url": "",
1413 + "careers_url": "https://jobs.ashbyhq.com/industrious",
1414 + "sectors": [
1415 + "Immobilier",
1416 + "Services"
1417 + ],
1418 + "connector": "ashby",
1419 + "status": "actif",
1420 + "region": "Montréal"
1421 + },
1422 + {
1423 + "id": "ino_ca",
1424 + "name": "Luqia (INO)",
1425 + "url": "",
1426 + "careers_url": "https://ino-ca.breezy.hr",
1427 + "sectors": [
1428 + "Optique-photonique",
1429 + "Recherche"
1430 + ],
1431 + "connector": "breezy",
1432 + "status": "actif",
1433 + "region": "Québec"
1434 + },
1435 + {
1436 + "id": "intactfc",
1437 + "name": "Intact Corporation financière",
1438 + "url": "",
1439 + "careers_url": "https://intactfc.wd3.myworkdayjobs.com/Intactfc",
1440 + "sectors": [
1441 + "Assurance"
1442 + ],
1443 + "connector": "workday",
1444 + "status": "actif",
1445 + "region": "Montréal"
1446 + },
1447 + {
1448 + "id": "investpsp",
1449 + "name": "Investissements PSP",
1450 + "url": "https://investpsp.com",
1451 + "careers_url": "https://investpsp.wd3.myworkdayjobs.com/psp_careers",
1452 + "sectors": [],
1453 + "connector": "workday",
1454 + "status": "actif",
1455 + "region": "Montréal"
1456 + },
1457 + {
1458 + "id": "investquebec",
1459 + "name": "Investissement Québec",
1460 + "url": "https://investquebec.com",
1461 + "careers_url": "https://investquebec.wd10.myworkdayjobs.com/Ext",
1462 + "sectors": [],
1463 + "connector": "workday",
1464 + "status": "actif",
1465 + "region": "Québec"
1466 + },
1467 + {
1468 + "id": "jexcelleinc",
1469 + "name": "J'Excelle",
1470 + "url": "",
1471 + "careers_url": "https://jobs.smartrecruiters.com/company/JExcelleInc",
1472 + "sectors": [
1473 + "Placement"
1474 + ],
1475 + "connector": "smartrecruiters",
1476 + "status": "actif",
1477 + "region": "Montréal, Laval, Gatineau"
1478 + },
1479 + {
1480 + "id": "jgrivesud",
1481 + "name": "JG Rive-Sud (GFS)",
1482 + "url": "https://jgfruitsetlegumes.com",
1483 + "careers_url": "https://gfs.wd5.myworkdayjobs.com/jgrive-sud",
1484 + "sectors": [
1485 + "manufacturier/commerce"
1486 + ],
1487 + "connector": "workday",
1488 + "status": "actif",
1489 + "region": ""
1490 + },
1491 + {
1492 + "id": "jobillico",
1493 + "name": "Jobillico",
1494 + "url": "https://www.jobillico.com",
1495 + "careers_url": "https://www.jobillico.com/recherche-emploi",
1496 + "sectors": [
1497 + "Portail",
1498 + "Tous secteurs"
1499 + ],
1500 + "connector": "portail",
1501 + "status": "actif",
1502 + "region": "Québec (province)",
1503 + "aggregator": true
1504 + },
1505 + {
1506 + "id": "korem",
1507 + "name": "Korem",
1508 + "url": "",
1509 + "careers_url": "https://korem.bamboohr.com/careers",
1510 + "sectors": [
1511 + "TI"
1512 + ],
1513 + "connector": "bamboohr",
1514 + "status": "actif",
1515 + "region": "Québec"
1516 + },
1517 + {
1518 + "id": "kpidigital",
1519 + "name": "KPI Digital",
1520 + "url": "",
1521 + "careers_url": "https://kpidigital.bamboohr.com/careers",
1522 + "sectors": [
1523 + "TI",
1524 + "Données"
1525 + ],
1526 + "connector": "bamboohr",
1527 + "status": "actif",
1528 + "region": "Montréal"
1529 + },
1530 + {
1531 + "id": "kruger",
1532 + "name": "Kruger",
1533 + "url": "https://www.kruger.com",
1534 + "careers_url": "https://tre.tbe.taleo.net/tre01/ats/careers/v2/jobSearch?org=KRUGER2&cws=76",
1535 + "connector": "taleo_tbe",
1536 + "sectors": [
1537 + "Pâtes et papiers",
1538 + "Manufacturier"
1539 + ],
1540 + "region": "Montréal, Trois-Rivières",
1541 + "status": "actif"
1542 + },
1543 + {
1544 + "id": "labelink",
1545 + "name": "Produits Labelink",
1546 + "url": "",
1547 + "careers_url": "https://labelink.bamboohr.com/careers",
1548 + "sectors": [
1549 + "Impression",
1550 + "Manufacture"
1551 + ],
1552 + "connector": "bamboohr",
1553 + "status": "actif",
1554 + "region": "Montréal, Laval, Granby"
1555 + },
1556 + {
1557 + "id": "lamour",
1558 + "name": "Lamour",
1559 + "url": "",
1560 + "careers_url": "https://apply.workable.com/lamour",
1561 + "sectors": [
1562 + "Textile",
1563 + "Manufacture"
1564 + ],
1565 + "connector": "workable",
1566 + "status": "actif",
1567 + "region": "Montréal"
1568 + },
1569 + {
1570 + "id": "lassonde",
1571 + "name": "Industries Lassonde",
1572 + "url": "https://www.lassonde.com",
1573 + "careers_url": "https://www.lassonde.com/fr/emplois/",
1574 + "sectors": [
1575 + "Agroalimentaire",
1576 + "Fabrication"
1577 + ],
1578 + "connector": "custom",
1579 + "status": "actif",
1580 + "region": "Rougemont, Montréal"
1581 + },
1582 + {
1583 + "id": "levio",
1584 + "name": "Levio",
1585 + "url": "",
1586 + "careers_url": "https://job-boards.greenhouse.io/levio",
1587 + "sectors": [
1588 + "TI"
1589 + ],
1590 + "connector": "greenhouse",
1591 + "status": "actif",
1592 + "region": "Québec, Montréal"
1593 + },
1594 + {
1595 + "id": "lg2",
1596 + "name": "LG2",
1597 + "url": "",
1598 + "careers_url": "https://lg2.recruitee.com",
1599 + "sectors": [
1600 + "Publicité",
1601 + "Création"
1602 + ],
1603 + "connector": "recruitee",
1604 + "status": "actif",
1605 + "region": "Montréal, Québec"
1606 + },
1607 + {
1608 + "id": "lidd",
1609 + "name": "LIDD Consultants",
1610 + "url": "",
1611 + "careers_url": "https://apply.workable.com/lidd",
1612 + "sectors": [
1613 + "Conseil",
1614 + "Logistique"
1615 + ],
1616 + "connector": "workable",
1617 + "status": "actif",
1618 + "region": "Montréal"
1619 + },
1620 + {
1621 + "id": "lightspeedhq",
1622 + "name": "Lightspeed Commerce",
1623 + "url": "",
1624 + "careers_url": "https://jobs.ashbyhq.com/lightspeedhq",
1625 + "sectors": [
1626 + "TI"
1627 + ],
1628 + "connector": "ashby",
1629 + "status": "actif",
1630 + "region": "Montréal"
1631 + },
1632 + {
1633 + "id": "logisco",
1634 + "name": "Logisco",
1635 + "url": "https://logisco.com",
1636 + "careers_url": "https://logisco.bamboohr.com/careers",
1637 + "sectors": [
1638 + "Immobilier"
1639 + ],
1640 + "connector": "bamboohr",
1641 + "status": "actif",
1642 + "region": ""
1643 + },
1644 + {
1645 + "id": "lush",
1646 + "name": "Lush Cosmétiques",
1647 + "url": "",
1648 + "careers_url": "https://job-boards.greenhouse.io/lush",
1649 + "sectors": [
1650 + "Commerce de détail"
1651 + ],
1652 + "connector": "greenhouse",
1653 + "status": "actif",
1654 + "region": "Montréal, Québec"
1655 + },
1656 + {
1657 + "id": "mackenzie",
1658 + "name": "Placements Mackenzie (Power/IGM)",
1659 + "url": "https://www.placementsmackenzie.com",
1660 + "careers_url": "https://careersfr-mackenzieinvestments.icims.com/jobs/search?ss=1",
1661 + "connector": "icims",
1662 + "sectors": [
1663 + "Finance"
1664 + ],
1665 + "region": "Montréal",
1666 + "status": "actif"
1667 + },
1668 + {
1669 + "id": "maintainx",
1670 + "name": "MaintainX",
1671 + "url": "",
1672 + "careers_url": "https://jobs.ashbyhq.com/maintainx",
1673 + "sectors": [
1674 + "TI",
1675 + "SaaS"
1676 + ],
1677 + "connector": "ashby",
1678 + "status": "actif",
1679 + "region": "Montréal"
1680 + },
1681 + {
1682 + "id": "manulife",
1683 + "name": "Manuvie",
1684 + "url": "",
1685 + "careers_url": "https://manulife.wd3.myworkdayjobs.com/MFCJH_Jobs",
1686 + "sectors": [
1687 + "Assurance",
1688 + "Finance"
1689 + ],
1690 + "connector": "workday",
1691 + "status": "actif",
1692 + "region": "Montréal"
1693 + },
1694 + {
1695 + "id": "mattelinc",
1696 + "name": "Mattel (Mega Bloks)",
1697 + "url": "",
1698 + "careers_url": "https://jobs.smartrecruiters.com/company/MattelInc",
1699 + "sectors": [
1700 + "Jouets",
1701 + "Manufacture"
1702 + ],
1703 + "connector": "smartrecruiters",
1704 + "status": "actif",
1705 + "region": "Montréal"
1706 + },
1707 + {
1708 + "id": "mccarthy_tetrault",
1709 + "name": "McCarthy Tétrault",
1710 + "url": "https://www.mccarthy.ca",
1711 + "careers_url": "https://careers-mccarthyca.icims.com/jobs/search?ss=1",
1712 + "sectors": [
1713 + "Juridique",
1714 + "Services professionnels"
1715 + ],
1716 + "connector": "icims",
1717 + "status": "actif",
1718 + "region": "Montréal, Québec"
1719 + },
1720 + {
1721 + "id": "mcgill",
1722 + "name": "Université McGill",
1723 + "url": "https://www.mcgill.ca",
1724 + "careers_url": "https://mcgill.wd3.myworkdayjobs.com/McGill_Careers",
1725 + "sectors": [
1726 + "Éducation",
1727 + "Recherche",
1728 + "Administration"
1729 + ],
1730 + "connector": "workday",
1731 + "status": "actif",
1732 + "region": "Montréal"
1733 + },
1734 + {
1735 + "id": "mckesson",
1736 + "name": "McKesson Canada",
1737 + "url": "",
1738 + "careers_url": "https://mckesson.wd3.myworkdayjobs.com/External_Careers",
1739 + "sectors": [
1740 + "Pharmaceutique",
1741 + "Distribution"
1742 + ],
1743 + "connector": "workday",
1744 + "status": "actif",
1745 + "region": "Montréal"
1746 + },
1747 + {
1748 + "id": "medfar",
1749 + "name": "MEDFAR Solutions Cliniques",
1750 + "url": "",
1751 + "careers_url": "https://jobs.smartrecruiters.com/company/Medfar",
1752 + "sectors": [
1753 + "TI",
1754 + "Santé"
1755 + ],
1756 + "connector": "smartrecruiters",
1757 + "status": "actif",
1758 + "region": "Montréal"
1759 + },
1760 + {
1761 + "id": "medialo",
1762 + "name": "Médialo",
1763 + "url": "",
1764 + "careers_url": "https://medialo.recruitee.com",
1765 + "sectors": [
1766 + "Médias"
1767 + ],
1768 + "connector": "recruitee",
1769 + "status": "actif",
1770 + "region": "Mont-Laurier, Terrebonne"
1771 + },
1772 + {
1773 + "id": "messer_canada",
1774 + "name": "Messer Canada",
1775 + "url": "https://www.messer-ca.com",
1776 + "careers_url": "https://recruiting.ultipro.com/MES1005MESR/JobBoard/dbd63926-d756-486f-a254-b2a6ede1d26e",
1777 + "sectors": [
1778 + "Gaz industriels",
1779 + "Industrie"
1780 + ],
1781 + "connector": "ultipro",
1782 + "status": "actif",
1783 + "region": "Montréal, Québec, Saint-Georges"
1784 + },
1785 + {
1786 + "id": "microhabitat",
1787 + "name": "MicroHabitat",
1788 + "url": "",
1789 + "careers_url": "https://microhabitat.breezy.hr",
1790 + "sectors": [
1791 + "Agriculture urbaine"
1792 + ],
1793 + "connector": "breezy",
1794 + "status": "actif",
1795 + "region": "Montréal, Québec"
1796 + },
1797 + {
1798 + "id": "mila_2",
1799 + "name": "Mila — Institut québécois d'IA",
1800 + "url": "https://mila.quebec",
1801 + "careers_url": "https://apply.workable.com/mila-2",
1802 + "sectors": [],
1803 + "connector": "workable",
1804 + "status": "actif",
1805 + "region": "Montréal"
1806 + },
1807 + {
1808 + "id": "mirego",
1809 + "name": "Mirego",
1810 + "url": "",
1811 + "careers_url": "https://jobs.lever.co/mirego",
1812 + "sectors": [
1813 + "TI"
1814 + ],
1815 + "connector": "lever",
1816 + "status": "actif",
1817 + "region": "Québec, Montréal"
1818 + },
1819 + {
1820 + "id": "mistplay",
1821 + "name": "Mistplay",
1822 + "url": "https://www.mistplay.com",
1823 + "careers_url": "https://jobs.lever.co/mistplay",
1824 + "sectors": [
1825 + "TI",
1826 + "Jeu mobile"
1827 + ],
1828 + "connector": "lever",
1829 + "status": "actif",
1830 + "region": "Montréal"
1831 + },
1832 + {
1833 + "id": "mistral_ai",
1834 + "name": "Mistral AI",
1835 + "url": "",
1836 + "careers_url": "https://jobs.ashbyhq.com/mistral.ai",
1837 + "sectors": [
1838 + "TI",
1839 + "IA"
1840 + ],
1841 + "connector": "ashby",
1842 + "status": "actif",
1843 + "region": "Montréal"
1844 + },
1845 + {
1846 + "id": "mitacs",
1847 + "name": "Mitacs",
1848 + "url": "",
1849 + "careers_url": "https://mitacs.bamboohr.com/careers",
1850 + "sectors": [
1851 + "Recherche",
1852 + "OBNL"
1853 + ],
1854 + "connector": "bamboohr",
1855 + "status": "actif",
1856 + "region": "Montréal"
1857 + },
1858 + {
1859 + "id": "mitsubishi_hc_capital",
1860 + "name": "Mitsubishi HC Capital Canada",
1861 + "url": "https://www.mhccna.com",
1862 + "careers_url": "https://workforcenow.adp.com/mascsr/default/mdf/recruitment/recruitment.html?cid=b3ef4f03-f8ff-4ded-80c8-6dd5c5a224f7&ccId=9200144510729_2&lang=fr_CA",
1863 + "sectors": [
1864 + "Finance",
1865 + "Financement commercial"
1866 + ],
1867 + "connector": "adp",
1868 + "status": "actif",
1869 + "region": "Laval, Trois-Rivières"
1870 + },
1871 + {
1872 + "id": "msi_gestion",
1873 + "name": "MSI Gestion immobilière",
1874 + "url": "https://www.msimmobiliers.com",
1875 + "careers_url": "https://workforcenow.adp.com/mascsr/default/mdf/recruitment/recruitment.html?cid=47d4e792-26e5-471c-92ac-73c60131bab8&ccId=19000101_000001&lang=fr_CA",
1876 + "sectors": [
1877 + "Immobilier",
1878 + "Gestion immobilière"
1879 + ],
1880 + "connector": "adp",
1881 + "status": "actif",
1882 + "region": "Montréal"
1883 + },
1884 + {
1885 + "id": "mthreerecruitingportal",
1886 + "name": "mthree",
1887 + "url": "",
1888 + "careers_url": "https://job-boards.greenhouse.io/mthreerecruitingportal",
1889 + "sectors": [
1890 + "TI",
1891 + "Placement"
1892 + ],
1893 + "connector": "greenhouse",
1894 + "status": "actif",
1895 + "region": "Montréal"
1896 + },
1897 + {
1898 + "id": "mxo",
1899 + "name": "MXO",
1900 + "url": "https://mxoconseil.com",
1901 + "careers_url": "https://mxo.bamboohr.com/careers",
1902 + "sectors": [
1903 + "manufacturier/commerce"
1904 + ],
1905 + "connector": "bamboohr",
1906 + "status": "actif",
1907 + "region": ""
1908 + },
1909 + {
1910 + "id": "national",
1911 + "name": "NATIONAL",
1912 + "url": "",
1913 + "careers_url": "https://job-boards.greenhouse.io/national",
1914 + "sectors": [
1915 + "Relations publiques"
1916 + ],
1917 + "connector": "greenhouse",
1918 + "status": "actif",
1919 + "region": "Montréal"
1920 + },
1921 + {
1922 + "id": "nexapp",
1923 + "name": "Nexapp",
1924 + "url": "",
1925 + "careers_url": "https://nexapp.bamboohr.com/careers",
1926 + "sectors": [
1927 + "TI",
1928 + "Web"
1929 + ],
1930 + "connector": "bamboohr",
1931 + "status": "actif",
1932 + "region": "Québec"
1933 + },
1934 + {
1935 + "id": "no_saint",
1936 + "name": "No Saint",
1937 + "url": "",
1938 + "careers_url": "https://jobs.ashbyhq.com/no-saint",
1939 + "sectors": [
1940 + "Création"
1941 + ],
1942 + "connector": "ashby",
1943 + "status": "actif",
1944 + "region": "Montréal"
1945 + },
1946 + {
1947 + "id": "nomic",
1948 + "name": "Nomic Bio",
1949 + "url": "",
1950 + "careers_url": "https://jobs.ashbyhq.com/nomic",
1951 + "sectors": [
1952 + "Biotechnologie"
1953 + ],
1954 + "connector": "ashby",
1955 + "status": "actif",
1956 + "region": "Montréal"
1957 + },
1958 + {
1959 + "id": "nora_pharma",
1960 + "name": "Nora Pharma",
1961 + "url": "",
1962 + "careers_url": "https://nora-pharma.breezy.hr",
1963 + "sectors": [
1964 + "Pharmaceutique"
1965 + ],
1966 + "connector": "breezy",
1967 + "status": "actif",
1968 + "region": "Laval, Montréal, Granby"
1969 + },
1970 + {
1971 + "id": "nortera",
1972 + "name": "Nortera",
1973 + "url": "https://norterafoods.com",
1974 + "careers_url": "https://recruiting.ultipro.ca/NOR5100NOFD/JobBoard/e3ce2e8a-b8fc-42c9-97cf-ea17f4d5dd1d/",
1975 + "connector": "ultipro",
1976 + "sectors": [
1977 + "Agroalimentaire",
1978 + "Manufacturier"
1979 + ],
1980 + "region": "Montérégie, Brossard",
1981 + "status": "actif"
1982 + },
1983 + {
1984 + "id": "northwestrubber",
1985 + "name": "North West Rubber",
1986 + "url": "",
1987 + "careers_url": "https://northwestrubber.bamboohr.com/careers",
1988 + "sectors": [
1989 + "Manufacture"
1990 + ],
1991 + "connector": "bamboohr",
1992 + "status": "actif",
1993 + "region": "Sherbrooke"
1994 + },
1995 + {
1996 + "id": "novipro",
1997 + "name": "NOVIPRO",
1998 + "url": "",
1999 + "careers_url": "https://novipro.breezy.hr",
2000 + "sectors": [
2001 + "TI"
2002 + ],
2003 + "connector": "breezy",
2004 + "status": "actif",
2005 + "region": "Montréal, Longueuil"
2006 + },
2007 + {
2008 + "id": "nuovophotography",
2009 + "name": "Nuovo Photography",
2010 + "url": "",
2011 + "careers_url": "https://apply.workable.com/nuovophotography",
2012 + "sectors": [
2013 + "Photographie"
2014 + ],
2015 + "connector": "workable",
2016 + "status": "actif",
2017 + "region": "Montréal"
2018 + },
2019 + {
2020 + "id": "omni_hotels_gestion",
2021 + "name": "Omni Hôtel Mont-Royal",
2022 + "url": "https://www.omnihotels.com/fr/hotels/montreal-mont-royal",
2023 + "careers_url": "https://externalmanager-omnihotels.icims.com/jobs/search?ss=1",
2024 + "sectors": [
2025 + "Hôtellerie",
2026 + "Gestion"
2027 + ],
2028 + "connector": "icims",
2029 + "status": "actif",
2030 + "region": "Montréal"
2031 + },
2032 + {
2033 + "id": "omni_hotels_horaire",
2034 + "name": "Omni Hôtel Mont-Royal",
2035 + "url": "https://www.omnihotels.com/fr/hotels/montreal-mont-royal",
2036 + "careers_url": "https://externalhourly-omnihotels.icims.com/jobs/search?ss=1",
2037 + "sectors": [
2038 + "Hôtellerie",
2039 + "Restauration"
2040 + ],
2041 + "connector": "icims",
2042 + "status": "actif",
2043 + "region": "Montréal"
2044 + },
2045 + {
2046 + "id": "onrunning",
2047 + "name": "On Running",
2048 + "url": "",
2049 + "careers_url": "https://job-boards.greenhouse.io/onrunning",
2050 + "sectors": [
2051 + "Commerce de détail",
2052 + "Sport"
2053 + ],
2054 + "connector": "greenhouse",
2055 + "status": "actif",
2056 + "region": "Montréal"
2057 + },
2058 + {
2059 + "id": "opalrt",
2060 + "name": "OPAL-RT Technologies",
2061 + "url": "",
2062 + "careers_url": "https://opalrt.bamboohr.com/careers",
2063 + "sectors": [
2064 + "TI",
2065 + "Ingénierie"
2066 + ],
2067 + "connector": "bamboohr",
2068 + "status": "actif",
2069 + "region": "Montréal"
2070 + },
2071 + {
2072 + "id": "osedea",
2073 + "name": "OSEDEA",
2074 + "url": "",
2075 + "careers_url": "https://jobs.lever.co/osedea",
2076 + "sectors": [
2077 + "TI",
2078 + "Web"
2079 + ],
2080 + "connector": "lever",
2081 + "status": "actif",
2082 + "region": "Montréal"
2083 + },
2084 + {
2085 + "id": "osgoode_properties",
2086 + "name": "Osgoode Properties",
2087 + "url": "https://www.osgoodeproperties.com",
2088 + "careers_url": "https://workforcenow.adp.com/mascsr/default/mdf/recruitment/recruitment.html?cid=c6a2e782-c971-4a6d-9a63-1365f5ce7d21&ccId=19000101_000001&lang=fr_CA",
2089 + "connector": "adp",
2090 + "sectors": [
2091 + "Immobilier"
2092 + ],
2093 + "region": "Gatineau",
2094 + "status": "actif"
2095 + },
2096 + {
2097 + "id": "ott",
2098 + "name": "OTT Financial",
2099 + "url": "",
2100 + "careers_url": "https://ott.bamboohr.com/careers",
2101 + "sectors": [
2102 + "Finance"
2103 + ],
2104 + "connector": "bamboohr",
2105 + "status": "actif",
2106 + "region": "Montréal"
2107 + },
2108 + {
2109 + "id": "peoplecanfly",
2110 + "name": "People Can Fly",
2111 + "url": "",
2112 + "careers_url": "https://jobs.smartrecruiters.com/company/PeopleCanFly",
2113 + "sectors": [
2114 + "Jeux vidéo"
2115 + ],
2116 + "connector": "smartrecruiters",
2117 + "status": "actif",
2118 + "region": "Montréal"
2119 + },
2120 + {
2121 + "id": "petalmd",
2122 + "name": "Petal",
2123 + "url": "",
2124 + "careers_url": "https://petalmd.recruitee.com",
2125 + "sectors": [
2126 + "TI",
2127 + "Santé"
2128 + ],
2129 + "connector": "recruitee",
2130 + "status": "actif",
2131 + "region": "Montréal, Québec"
2132 + },
2133 + {
2134 + "id": "pfizer",
2135 + "name": "Pfizer Canada",
2136 + "url": "",
2137 + "careers_url": "https://pfizer.wd1.myworkdayjobs.com/PfizerCareers",
2138 + "sectors": [
2139 + "Pharmaceutique"
2140 + ],
2141 + "connector": "workday",
2142 + "status": "actif",
2143 + "region": "Kirkland"
2144 + },
2145 + {
2146 + "id": "playmind",
2147 + "name": "Playmind",
2148 + "url": "",
2149 + "careers_url": "https://jobs.smartrecruiters.com/company/playmind",
2150 + "sectors": [
2151 + "Jeux vidéo"
2152 + ],
2153 + "connector": "smartrecruiters",
2154 + "status": "actif",
2155 + "region": "Montréal"
2156 + },
2157 + {
2158 + "id": "plusgrade",
2159 + "name": "Plusgrade",
2160 + "url": "https://plusgrade.com",
2161 + "careers_url": "https://plusgrade.wd10.myworkdayjobs.com/Plusgrade_External_Site",
2162 + "sectors": [],
2163 + "connector": "workday",
2164 + "status": "actif",
2165 + "region": "Montréal"
2166 + },
2167 + {
2168 + "id": "poka",
2169 + "name": "Poka",
2170 + "url": "https://www.poka.io",
2171 + "careers_url": "https://job-boards.greenhouse.io/poka",
2172 + "sectors": [
2173 + "TI",
2174 + "SaaS manufacturier"
2175 + ],
2176 + "connector": "greenhouse",
2177 + "status": "actif",
2178 + "region": "Québec"
2179 + },
2180 + {
2181 + "id": "portagecybertech",
2182 + "name": "Portage CyberTech",
2183 + "url": "",
2184 + "careers_url": "https://portagecybertech.bamboohr.com/careers",
2185 + "sectors": [
2186 + "TI",
2187 + "Cybersécurité"
2188 + ],
2189 + "connector": "bamboohr",
2190 + "status": "actif",
2191 + "region": "Gatineau, Montréal"
2192 + },
2193 + {
2194 + "id": "potloc",
2195 + "name": "Potloc",
2196 + "url": "https://www.potloc.com",
2197 + "careers_url": "https://jobs.lever.co/Potloc",
2198 + "sectors": [
2199 + "TI",
2200 + "Études de marché"
2201 + ],
2202 + "connector": "lever",
2203 + "status": "actif",
2204 + "region": "Montréal"
2205 + },
2206 + {
2207 + "id": "pouletrouge",
2208 + "name": "Poulet Rouge",
2209 + "url": "https://poulet-rouge.ca",
2210 + "careers_url": "https://pouletrouge.bamboohr.com/careers",
2211 + "sectors": [
2212 + "restauration"
2213 + ],
2214 + "connector": "bamboohr",
2215 + "status": "actif",
2216 + "region": "Montréal"
2217 + },
2218 + {
2219 + "id": "produits_kruger",
2220 + "name": "Produits Kruger",
2221 + "url": "https://www.produitskruger.ca",
2222 + "careers_url": "https://tre.tbe.taleo.net/tre01/ats/careers/v2/jobSearch?org=KRUGER2&cws=78",
2223 + "connector": "taleo_tbe",
2224 + "sectors": [
2225 + "Manufacturier",
2226 + "Biens de consommation"
2227 + ],
2228 + "region": "Gatineau, Crabtree",
2229 + "status": "actif"
2230 + },
2231 + {
2232 + "id": "promutuel",
2233 + "name": "Promutuel Assurance",
2234 + "url": "https://promutuelassurance.ca",
2235 + "careers_url": "https://promutuel.wd3.myworkdayjobs.com/promutuel_carrieres",
2236 + "sectors": [],
2237 + "connector": "workday",
2238 + "status": "actif",
2239 + "region": "Québec"
2240 + },
2241 + {
2242 + "id": "qsl",
2243 + "name": "QSL",
2244 + "url": "https://qsl.com",
2245 + "careers_url": "https://jobs.smartrecruiters.com/company/qsl",
2246 + "sectors": [],
2247 + "connector": "smartrecruiters",
2248 + "status": "actif",
2249 + "region": "Québec"
2250 + },
2251 + {
2252 + "id": "rcgt",
2253 + "name": "Raymond Chabot Grant Thornton",
2254 + "url": "https://rcgt.com",
2255 + "careers_url": "https://rcgt.wd3.myworkdayjobs.com/External",
2256 + "sectors": [],
2257 + "connector": "workday",
2258 + "status": "actif",
2259 + "region": "Montréal"
2260 + },
2261 + {
2262 + "id": "reitmanscanadalteltd",
2263 + "name": "Reitmans",
2264 + "url": "",
2265 + "careers_url": "https://jobs.smartrecruiters.com/company/ReitmansCanadaLteLtd",
2266 + "sectors": [
2267 + "Commerce de détail",
2268 + "Mode"
2269 + ],
2270 + "connector": "smartrecruiters",
2271 + "status": "actif",
2272 + "region": "Montréal, Québec, Laval"
2273 + },
2274 + {
2275 + "id": "reseau_mieux_etre",
2276 + "name": "Réseau Mieux-Être",
2277 + "url": "",
2278 + "careers_url": "https://reseau-mieux-etre.breezy.hr",
2279 + "sectors": [
2280 + "Santé"
2281 + ],
2282 + "connector": "breezy",
2283 + "status": "actif",
2284 + "region": "Montréal"
2285 + },
2286 + {
2287 + "id": "rethinkcanada",
2288 + "name": "Rethink",
2289 + "url": "",
2290 + "careers_url": "https://rethinkcanada.bamboohr.com/careers",
2291 + "sectors": [
2292 + "Publicité"
2293 + ],
2294 + "connector": "bamboohr",
2295 + "status": "actif",
2296 + "region": "Montréal"
2297 + },
2298 + {
2299 + "id": "riotinto",
2300 + "name": "Rio Tinto",
2301 + "url": "",
2302 + "careers_url": "https://riotinto.wd3.myworkdayjobs.com/riotinto_careers",
2303 + "sectors": [
2304 + "Mines"
2305 + ],
2306 + "connector": "workday",
2307 + "status": "actif",
2308 + "region": "Saguenay, Montréal"
2309 + },
2310 + {
2311 + "id": "robotiq",
2312 + "name": "Robotiq",
2313 + "url": "",
2314 + "careers_url": "https://robotiq.bamboohr.com/careers",
2315 + "sectors": [
2316 + "Robotique",
2317 + "Manufacture"
2318 + ],
2319 + "connector": "bamboohr",
2320 + "status": "actif",
2321 + "region": "Lévis"
2322 + },
2323 + {
2324 + "id": "rodeofx",
2325 + "name": "Rodeo FX",
2326 + "url": "",
2327 + "careers_url": "https://jobs.smartrecruiters.com/company/RodeoFX",
2328 + "sectors": [
2329 + "Effets visuels",
2330 + "Création"
2331 + ],
2332 + "connector": "smartrecruiters",
2333 + "status": "actif",
2334 + "region": "Montréal, Québec"
2335 + },
2336 + {
2337 + "id": "rtc_quebec",
2338 + "name": "Réseau de transport de la Capitale",
2339 + "url": "https://www.rtcquebec.ca",
2340 + "careers_url": "https://rtc.njoyn.com/CGI/xweb/xweb.asp?clid=23009&page=joblisting&lang=2",
2341 + "sectors": [
2342 + "Transport collectif",
2343 + "Secteur public"
2344 + ],
2345 + "connector": "njoyn",
2346 + "status": "actif",
2347 + "region": "Québec"
2348 + },
2349 + {
2350 + "id": "samsara",
2351 + "name": "Samsara",
2352 + "url": "",
2353 + "careers_url": "https://job-boards.greenhouse.io/samsara",
2354 + "sectors": [
2355 + "TI",
2356 + "IoT"
2357 + ],
2358 + "connector": "greenhouse",
2359 + "status": "actif",
2360 + "region": "Montréal"
2361 + },
2362 + {
2363 + "id": "sante_montreal",
2364 + "name": "Santé Québec — Montréal",
2365 + "url": "https://santemontreal.ca",
2366 + "careers_url": "https://emplois.santemontreal.qc.ca/CL3/xweb/xweb.asp?clid=54327&page=joblisting&lang=2",
2367 + "sectors": [
2368 + "Santé",
2369 + "Services sociaux",
2370 + "Secteur public"
2371 + ],
2372 + "connector": "njoyn",
2373 + "status": "actif",
2374 + "region": "Montréal"
2375 + },
2376 + {
2377 + "id": "sante_quebec",
2378 + "name": "Santé Québec",
2379 + "url": "https://sante.quebec",
2380 + "careers_url": "https://emplois.sante.quebec",
2381 + "sectors": [
2382 + "Santé",
2383 + "Secteur public",
2384 + "Administration"
2385 + ],
2386 + "connector": "digitalrecruiters",
2387 + "status": "actif",
2388 + "region": "Montréal, Québec"
2389 + },
2390 + {
2391 + "id": "saputo",
2392 + "name": "Saputo",
2393 + "url": "https://www.saputo.com",
2394 + "careers_url": "https://saputo.wd5.myworkdayjobs.com/Saputo_External_Careers",
2395 + "sectors": [
2396 + "Agroalimentaire",
2397 + "Production"
2398 + ],
2399 + "connector": "workday",
2400 + "status": "actif",
2401 + "region": "Montréal / province"
2402 + },
2403 + {
2404 + "id": "scalia",
2405 + "name": "Propriétés Scalia",
2406 + "url": "",
2407 + "careers_url": "https://scalia.bamboohr.com/careers",
2408 + "sectors": [
2409 + "Immobilier"
2410 + ],
2411 + "connector": "bamboohr",
2412 + "status": "actif",
2413 + "region": "Montréal, Anjou"
2414 + },
2415 + {
2416 + "id": "scottsmiraclegro",
2417 + "name": "Scotts Canada (Fafard)",
2418 + "url": "https://scottsmiraclegro.com",
2419 + "careers_url": "https://scottsmiraclegro.wd5.myworkdayjobs.com/SMGExternal",
2420 + "sectors": [
2421 + "manufacturier/commerce"
2422 + ],
2423 + "connector": "workday",
2424 + "status": "actif",
2425 + "region": ""
2426 + },
2427 + {
2428 + "id": "sepaq",
2429 + "name": "Sépaq",
2430 + "url": "https://www.sepaq.com",
2431 + "careers_url": "https://tre.tbe.taleo.net/tre01/ats/careers/v2/jobSearch?org=SEPAQ&cws=37",
2432 + "connector": "taleo_tbe",
2433 + "sectors": [
2434 + "Tourisme",
2435 + "Plein air",
2436 + "Secteur public"
2437 + ],
2438 + "region": "Québec (province)",
2439 + "status": "actif"
2440 + },
2441 + {
2442 + "id": "servicenow",
2443 + "name": "ServiceNow",
2444 + "url": "",
2445 + "careers_url": "https://jobs.smartrecruiters.com/company/ServiceNow",
2446 + "sectors": [
2447 + "TI",
2448 + "SaaS"
2449 + ],
2450 + "connector": "smartrecruiters",
2451 + "status": "actif",
2452 + "region": "Montréal"
2453 + },
2454 + {
2455 + "id": "siainnovationsinc",
2456 + "name": "SIA Innovations",
2457 + "url": "",
2458 + "careers_url": "https://job-boards.greenhouse.io/siainnovationsinc",
2459 + "sectors": [
2460 + "TI"
2461 + ],
2462 + "connector": "greenhouse",
2463 + "status": "actif",
2464 + "region": "Montréal"
2465 + },
2466 + {
2467 + "id": "sideinc",
2468 + "name": "Side (PTW)",
2469 + "url": "",
2470 + "careers_url": "https://apply.workable.com/sideinc",
2471 + "sectors": [
2472 + "Jeux vidéo"
2473 + ],
2474 + "connector": "workable",
2475 + "status": "actif",
2476 + "region": "Montréal, Québec"
2477 + },
2478 + {
2479 + "id": "sidlee",
2480 + "name": "Sid Lee",
2481 + "url": "",
2482 + "careers_url": "https://job-boards.greenhouse.io/sidlee",
2483 + "sectors": [
2484 + "Marketing",
2485 + "Création"
2486 + ],
2487 + "connector": "greenhouse",
2488 + "status": "actif",
2489 + "region": "Montréal"
2490 + },
2491 + {
2492 + "id": "sleeman",
2493 + "name": "Brasseries Sleeman (Unibroue)",
2494 + "url": "https://unibroue.com",
2495 + "careers_url": "https://sleeman.wd3.myworkdayjobs.com/SBL",
2496 + "sectors": [
2497 + "manufacturier/commerce"
2498 + ],
2499 + "connector": "workday",
2500 + "status": "actif",
2501 + "region": ""
2502 + },
2503 + {
2504 + "id": "sogeclair",
2505 + "name": "SOGECLAIR",
2506 + "url": "",
2507 + "careers_url": "https://apply.workable.com/sogeclair",
2508 + "sectors": [
2509 + "Aéronautique",
2510 + "Ingénierie"
2511 + ],
2512 + "connector": "workable",
2513 + "status": "actif",
2514 + "region": "Montréal, Mirabel, Laval"
2515 + },
2516 + {
2517 + "id": "sparkgrid",
2518 + "name": "Sparkgrid",
2519 + "url": "",
2520 + "careers_url": "https://jobs.smartrecruiters.com/company/Sparkgrid",
2521 + "sectors": [
2522 + "TI"
2523 + ],
2524 + "connector": "smartrecruiters",
2525 + "status": "actif",
2526 + "region": "Montréal"
2527 + },
2528 + {
2529 + "id": "spiria",
2530 + "name": "Spiria",
2531 + "url": "",
2532 + "careers_url": "https://jobs.lever.co/spiria",
2533 + "sectors": [
2534 + "TI"
2535 + ],
2536 + "connector": "lever",
2537 + "status": "actif",
2538 + "region": "Montréal, Gatineau"
2539 + },
2540 + {
2541 + "id": "spreedly",
2542 + "name": "Spreedly",
2543 + "url": "",
2544 + "careers_url": "https://jobs.lever.co/spreedly",
2545 + "sectors": [
2546 + "TI",
2547 + "Fintech"
2548 + ],
2549 + "connector": "lever",
2550 + "status": "actif",
2551 + "region": "Montréal"
2552 + },
2553 + {
2554 + "id": "squeezestudio",
2555 + "name": "Squeeze Studio Animation",
2556 + "url": "",
2557 + "careers_url": "https://squeezestudio.recruitee.com",
2558 + "sectors": [
2559 + "Animation",
2560 + "Création"
2561 + ],
2562 + "connector": "recruitee",
2563 + "status": "actif",
2564 + "region": "Montréal, Québec"
2565 + },
2566 + {
2567 + "id": "stelpro",
2568 + "name": "Stelpro",
2569 + "url": "",
2570 + "careers_url": "https://jobs.smartrecruiters.com/company/stelpro",
2571 + "sectors": [
2572 + "Production"
2573 + ],
2574 + "connector": "smartrecruiters",
2575 + "status": "actif",
2576 + "region": "Saint-Bruno-de-Montarville"
2577 + },
2578 + {
2579 + "id": "stl_laval",
2580 + "name": "Société de transport de Laval",
2581 + "url": "https://www.stlaval.ca",
2582 + "careers_url": "https://lavaltransit.njoyn.com/CL2/xweb/xweb.asp?clid=60406&page=joblisting&lang=2",
2583 + "sectors": [
2584 + "Transport collectif",
2585 + "Secteur public"
2586 + ],
2587 + "connector": "njoyn",
2588 + "status": "actif",
2589 + "region": "Laval"
2590 + },
2591 + {
2592 + "id": "suncor",
2593 + "name": "Suncor Énergie",
2594 + "url": "https://suncor.com",
2595 + "careers_url": "https://suncor.wd1.myworkdayjobs.com/Suncor_External",
2596 + "sectors": [],
2597 + "connector": "workday",
2598 + "status": "actif",
2599 + "region": "Montréal"
2600 + },
2601 + {
2602 + "id": "sunlife",
2603 + "name": "Sun Life",
2604 + "url": "",
2605 + "careers_url": "https://sunlife.wd3.myworkdayjobs.com/Experienced-Jobs",
2606 + "sectors": [
2607 + "Assurance",
2608 + "Finance"
2609 + ],
2610 + "connector": "workday",
2611 + "status": "actif",
2612 + "region": "Montréal, Québec"
2613 + },
2614 + {
2615 + "id": "surmesur",
2616 + "name": "Surmesur",
2617 + "url": "",
2618 + "careers_url": "https://surmesur.bamboohr.com/careers",
2619 + "sectors": [
2620 + "Mode",
2621 + "Commerce de détail"
2622 + ],
2623 + "connector": "bamboohr",
2624 + "status": "actif",
2625 + "region": "Québec, Laval"
2626 + },
2627 + {
2628 + "id": "sweat_pants_agency",
2629 + "name": "Sweat Pants Agency",
2630 + "url": "",
2631 + "careers_url": "https://apply.workable.com/sweat-pants-agency",
2632 + "sectors": [
2633 + "Marketing"
2634 + ],
2635 + "connector": "workable",
2636 + "status": "actif",
2637 + "region": "Montréal, Laval, Québec"
2638 + },
2639 + {
2640 + "id": "talan",
2641 + "name": "Talan",
2642 + "url": "",
2643 + "careers_url": "https://jobs.smartrecruiters.com/company/Talan",
2644 + "sectors": [
2645 + "TI",
2646 + "Conseil"
2647 + ],
2648 + "connector": "smartrecruiters",
2649 + "status": "actif",
2650 + "region": "Montréal"
2651 + },
2652 + {
2653 + "id": "talsom",
2654 + "name": "Talsom",
2655 + "url": "",
2656 + "careers_url": "https://jobs.smartrecruiters.com/company/talsom",
2657 + "sectors": [
2658 + "TI"
2659 + ],
2660 + "connector": "smartrecruiters",
2661 + "status": "actif",
2662 + "region": "Montréal"
2663 + },
2664 + {
2665 + "id": "tandemlaunch",
2666 + "name": "TandemLaunch",
2667 + "url": "https://www.tandemlaunch.com",
2668 + "careers_url": "https://boards.greenhouse.io/tandemlaunch",
2669 + "sectors": [
2670 + "TI",
2671 + "Deep tech"
2672 + ],
2673 + "connector": "greenhouse",
2674 + "status": "actif",
2675 + "region": "Montréal"
2676 + },
2677 + {
2678 + "id": "td",
2679 + "name": "Groupe Banque TD",
2680 + "url": "",
2681 + "careers_url": "https://td.wd3.myworkdayjobs.com/TD_Bank_Careers",
2682 + "sectors": [
2683 + "Finance"
2684 + ],
2685 + "connector": "workday",
2686 + "status": "actif",
2687 + "region": "Montréal, Québec"
2688 + },
2689 + {
2690 + "id": "techo_bloc",
2691 + "name": "Techo-Bloc",
2692 + "url": "",
2693 + "careers_url": "https://jobs.smartrecruiters.com/company/techo-bloc",
2694 + "sectors": [
2695 + "Manufacture",
2696 + "Aménagement"
2697 + ],
2698 + "connector": "smartrecruiters",
2699 + "status": "actif",
2700 + "region": "Chambly, Saint-Hubert"
2701 + },
2702 + {
2703 + "id": "tecsys",
2704 + "name": "Tecsys",
2705 + "url": "",
2706 + "careers_url": "https://apply.workable.com/tecsys",
2707 + "sectors": [
2708 + "TI",
2709 + "Logistique"
2710 + ],
2711 + "connector": "workable",
2712 + "status": "actif",
2713 + "region": "Montréal"
2714 + },
2715 + {
2716 + "id": "tehora",
2717 + "name": "TEHORA",
2718 + "url": "",
2719 + "careers_url": "https://apply.workable.com/tehora",
2720 + "sectors": [
2721 + "Ingénierie",
2722 + "TI",
2723 + "Conseil"
2724 + ],
2725 + "connector": "workable",
2726 + "status": "actif",
2727 + "region": "Montréal, Québec, Gatineau"
2728 + },
2729 + {
2730 + "id": "tetrix",
2731 + "name": "Tetrix",
2732 + "url": "",
2733 + "careers_url": "https://jobs.ashbyhq.com/tetrix",
2734 + "sectors": [
2735 + "TI"
2736 + ],
2737 + "connector": "ashby",
2738 + "status": "actif",
2739 + "region": "Montréal"
2740 + },
2741 + {
2742 + "id": "toonboom",
2743 + "name": "Toon Boom Animation",
2744 + "url": "",
2745 + "careers_url": "https://toonboom.bamboohr.com/careers",
2746 + "sectors": [
2747 + "Animation",
2748 + "TI"
2749 + ],
2750 + "connector": "bamboohr",
2751 + "status": "actif",
2752 + "region": "Montréal"
2753 + },
2754 + {
2755 + "id": "transatat1",
2756 + "name": "Transat A.T.",
2757 + "url": "",
2758 + "careers_url": "https://jobs.smartrecruiters.com/company/TransatAT1",
2759 + "sectors": [
2760 + "Voyage",
2761 + "Aérien"
2762 + ],
2763 + "connector": "smartrecruiters",
2764 + "status": "actif",
2765 + "region": "Montréal"
2766 + },
2767 + {
2768 + "id": "triotech",
2769 + "name": "Triotech",
2770 + "url": "",
2771 + "careers_url": "https://triotech.bamboohr.com/careers",
2772 + "sectors": [
2773 + "Divertissement",
2774 + "Manufacture"
2775 + ],
2776 + "connector": "bamboohr",
2777 + "status": "actif",
2778 + "region": "Joliette, Montréal"
2779 + },
2780 + {
2781 + "id": "trois_brasseurs",
2782 + "name": "3 Brasseurs Canada",
2783 + "url": "",
2784 + "careers_url": "https://3brasseurs.breezy.hr",
2785 + "sectors": [
2786 + "Restauration"
2787 + ],
2788 + "connector": "breezy",
2789 + "status": "actif",
2790 + "region": "Montréal, Laval, Brossard"
2791 + },
2792 + {
2793 + "id": "tsmg",
2794 + "name": "TSMG",
2795 + "url": "",
2796 + "careers_url": "https://jobs.lever.co/tsmg",
2797 + "sectors": [
2798 + "Placement",
2799 + "Télécoms"
2800 + ],
2801 + "connector": "lever",
2802 + "status": "actif",
2803 + "region": "Montréal, Québec"
2804 + },
2805 + {
2806 + "id": "ubisoft",
2807 + "name": "Ubisoft",
2808 + "url": "https://www.ubisoft.com",
2809 + "careers_url": "https://jobs.smartrecruiters.com/company/Ubisoft2",
2810 + "sectors": [
2811 + "Jeux vidéo",
2812 + "TI",
2813 + "Création"
2814 + ],
2815 + "connector": "smartrecruiters",
2816 + "status": "actif",
2817 + "region": "Montréal / Québec / Sherbrooke"
2818 + },
2819 + {
2820 + "id": "unit8",
2821 + "name": "Unit8",
2822 + "url": "",
2823 + "careers_url": "https://apply.workable.com/unit8",
2824 + "sectors": [
2825 + "TI",
2826 + "Données"
2827 + ],
2828 + "connector": "workable",
2829 + "status": "actif",
2830 + "region": "Montréal"
2831 + },
2832 + {
2833 + "id": "usmobile",
2834 + "name": "US Mobile",
2835 + "url": "",
2836 + "careers_url": "https://jobs.lever.co/USMobile",
2837 + "sectors": [
2838 + "Télécoms"
2839 + ],
2840 + "connector": "lever",
2841 + "status": "actif",
2842 + "region": "Montréal"
2843 + },
2844 + {
2845 + "id": "vaco",
2846 + "name": "Vaco",
2847 + "url": "",
2848 + "careers_url": "https://job-boards.greenhouse.io/vaco",
2849 + "sectors": [
2850 + "Placement",
2851 + "Conseil"
2852 + ],
2853 + "connector": "greenhouse",
2854 + "status": "actif",
2855 + "region": "Montréal"
2856 + },
2857 + {
2858 + "id": "valsoft_corp",
2859 + "name": "Valsoft",
2860 + "url": "",
2861 + "careers_url": "https://apply.workable.com/valsoft-corp",
2862 + "sectors": [
2863 + "TI",
2864 + "Logiciel"
2865 + ],
2866 + "connector": "workable",
2867 + "status": "actif",
2868 + "region": "Montréal"
2869 + },
2870 + {
2871 + "id": "valtech",
2872 + "name": "Valtech",
2873 + "url": "",
2874 + "careers_url": "https://job-boards.greenhouse.io/valtech",
2875 + "sectors": [
2876 + "TI"
2877 + ],
2878 + "connector": "greenhouse",
2879 + "status": "actif",
2880 + "region": "Montréal"
2881 + },
2882 + {
2883 + "id": "vaporus_inc",
2884 + "name": "Vaporus",
2885 + "url": "",
2886 + "careers_url": "https://vaporus-inc.breezy.hr",
2887 + "sectors": [
2888 + "Commerce de détail"
2889 + ],
2890 + "connector": "breezy",
2891 + "status": "actif",
2892 + "region": "Montréal"
2893 + },
2894 + {
2895 + "id": "vasco",
2896 + "name": "Vasco",
2897 + "url": "",
2898 + "careers_url": "https://jobs.ashbyhq.com/vasco",
2899 + "sectors": [
2900 + "TI"
2901 + ],
2902 + "connector": "ashby",
2903 + "status": "actif",
2904 + "region": "Montréal"
2905 + },
2906 + {
2907 + "id": "venturemedia",
2908 + "name": "Venture Media",
2909 + "url": "",
2910 + "careers_url": "https://jobs.smartrecruiters.com/company/VentureMedia",
2911 + "sectors": [
2912 + "Médias"
2913 + ],
2914 + "connector": "smartrecruiters",
2915 + "status": "actif",
2916 + "region": "Montréal"
2917 + },
2918 + {
2919 + "id": "vicpark",
2920 + "name": "Victoria Park Medispa",
2921 + "url": "",
2922 + "careers_url": "https://vicpark.bamboohr.com/careers",
2923 + "sectors": [
2924 + "Santé",
2925 + "Esthétique"
2926 + ],
2927 + "connector": "bamboohr",
2928 + "status": "actif",
2929 + "region": "Montréal, Gatineau, Granby"
2930 + },
2931 + {
2932 + "id": "videotron",
2933 + "name": "Vidéotron",
2934 + "url": "https://videotron.com",
2935 + "careers_url": "https://jobs.smartrecruiters.com/company/videotron",
2936 + "sectors": [],
2937 + "connector": "smartrecruiters",
2938 + "status": "actif",
2939 + "region": "Montréal"
2940 + },
2941 + {
2942 + "id": "ville_gatineau",
2943 + "name": "Ville de Gatineau",
2944 + "url": "https://www.gatineau.ca",
2945 + "careers_url": "https://gatineau.njoyn.com/CL2/xweb/xweb.asp?clid=27082&page=joblisting&lang=2",
2946 + "sectors": [
2947 + "Municipal",
2948 + "Secteur public"
2949 + ],
2950 + "connector": "njoyn",
2951 + "status": "actif",
2952 + "region": "Gatineau"
2953 + },
2954 + {
2955 + "id": "ville_terrebonne",
2956 + "name": "Ville de Terrebonne",
2957 + "url": "https://www.ville.terrebonne.qc.ca",
2958 + "careers_url": "https://clients.njoyn.com/cl4/xweb/xweb.asp?clid=71764&page=joblisting&lang=2",
2959 + "sectors": [
2960 + "Municipal",
2961 + "Secteur public"
2962 + ],
2963 + "connector": "njoyn",
2964 + "status": "actif",
2965 + "region": "Terrebonne"
2966 + },
2967 + {
2968 + "id": "vmlcanadaen",
2969 + "name": "VML Canada",
2970 + "url": "",
2971 + "careers_url": "https://job-boards.greenhouse.io/vmlcanadaen",
2972 + "sectors": [
2973 + "Publicité"
2974 + ],
2975 + "connector": "greenhouse",
2976 + "status": "actif",
2977 + "region": "Montréal"
2978 + },
2979 + {
2980 + "id": "vo2_group",
2981 + "name": "VO2 Group",
2982 + "url": "",
2983 + "careers_url": "https://jobs.lever.co/vo2-group",
2984 + "sectors": [
2985 + "TI",
2986 + "Conseil"
2987 + ],
2988 + "connector": "lever",
2989 + "status": "actif",
2990 + "region": "Montréal"
2991 + },
2992 + {
2993 + "id": "vooban",
2994 + "name": "Vooban",
2995 + "url": "",
2996 + "careers_url": "https://job-boards.greenhouse.io/vooban",
2997 + "sectors": [
2998 + "TI"
2999 + ],
3000 + "connector": "greenhouse",
3001 + "status": "actif",
3002 + "region": "Québec"
3003 + },
3004 + {
3005 + "id": "vosker",
3006 + "name": "Vosker",
3007 + "url": "",
3008 + "careers_url": "https://jobs.smartrecruiters.com/company/vosker",
3009 + "sectors": [
3010 + "TI",
3011 + "Production"
3012 + ],
3013 + "connector": "smartrecruiters",
3014 + "status": "actif",
3015 + "region": "Victoriaville"
3016 + },
3017 + {
3018 + "id": "voxdata",
3019 + "name": "VOXDATA",
3020 + "url": "",
3021 + "careers_url": "https://voxdata.breezy.hr",
3022 + "sectors": [
3023 + "Centre d'appels"
3024 + ],
3025 + "connector": "breezy",
3026 + "status": "actif",
3027 + "region": "Montréal"
3028 + },
3029 + {
3030 + "id": "walmart",
3031 + "name": "Walmart Canada",
3032 + "url": "https://walmart.ca",
3033 + "careers_url": "https://walmart.wd504.myworkdayjobs.com/WalmartExternal",
3034 + "sectors": [],
3035 + "connector": "workday",
3036 + "status": "actif",
3037 + "region": "Montréal"
3038 + },
3039 + {
3040 + "id": "xplornet",
3041 + "name": "Xplornet",
3042 + "url": "",
3043 + "careers_url": "https://jobs.smartrecruiters.com/company/XPLORNET",
3044 + "sectors": [
3045 + "Télécoms"
3046 + ],
3047 + "connector": "smartrecruiters",
3048 + "status": "actif",
3049 + "region": "Montréal"
3050 + },
3051 + {
3052 + "id": "xsolla",
3053 + "name": "Xsolla",
3054 + "url": "",
3055 + "careers_url": "https://jobs.lever.co/xsolla",
3056 + "sectors": [
3057 + "TI",
3058 + "Jeux vidéo"
3059 + ],
3060 + "connector": "lever",
3061 + "status": "actif",
3062 + "region": "Montréal"
3063 + },
3064 + {
3065 + "id": "youset",
3066 + "name": "YouSet",
3067 + "url": "",
3068 + "careers_url": "https://youset.breezy.hr",
3069 + "sectors": [
3070 + "Assurance",
3071 + "TI"
3072 + ],
3073 + "connector": "breezy",
3074 + "status": "actif",
3075 + "region": "Montréal"
3076 + },
3077 + {
3078 + "id": "ziptrekeco",
3079 + "name": "Ziptrek Tremblant",
3080 + "url": "https://tremblant.ziptrek.com",
3081 + "careers_url": "https://ziptrekeco.bamboohr.com/careers",
3082 + "sectors": [
3083 + "manufacturier/commerce"
3084 + ],
3085 + "connector": "bamboohr",
3086 + "status": "actif",
3087 + "region": ""
3088 + }
3089 + ]
2785 3090 }
modified docs/CONFORMITE.md +54 −3
@@ -6,14 +6,15 @@ Contact : contact@spboucher.ai
6 6 Fichier : docs/CONFORMITE.md
7 7 Rôle : Registre de conformité des sources de données — base d'accès,
8 8 attribution, lien de candidature, données personnelles
9 −Créé : 2026-08-18 Modifié : 2026-08-18
9 +Créé : 2026-08-18 Modifié : 2026-08-19
10 10 =============================================================================
11 11 -->
12 12
13 13 # Job·Ka — Registre de conformité des sources
14 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).
15 +> **Dates de vérification : 2026-08-18 (socle) et 2026-08-19 (phase 3 —
16 +> nouvelles sources)**, vérifié dans le code, la base live et le frontend.
17 +> Détail par source : [`docs/connecteurs/INDEX.md`](connecteurs/INDEX.md).
17 18
18 19 ## Principes vérifiés (2026-08-18)
19 20
@@ -42,11 +43,61 @@ Créé : 2026-08-18 Modifié : 2026-08-18
42 43 | **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 44 | **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
46 +## Nouvelles familles et sources — phase 3 (2026-08-19)
47 +
48 +| Famille / source | Sources | Base d'accès (robots/CGU lus le 2026-08-19) | Fréquence & politesse | Décision |
49 +|---|---|---|---|---|
50 +| **Taleo Business Edition** (`taleo_tbe` — Sépaq, exo, HEC ×2, Kruger, Produits Kruger) | 6 | **Flux RSS public** `…/ats/servlet/Rss?org=&cws=` (publié par l'ATS pour la diffusion) + JSON-LD schema.org/JobPosting des pages `requisition.jsp` (données destinées aux moteurs). robots.txt tbe.taleo.net : pas d'interdiction des chemins carrières publics. | 1 req/s, budget détail 60/cycle (cache BD) | Connecté — offres publiques, lien direct employeur |
51 +| **WordPress + WP Job Manager** (`wpjobmanager` — plateforme **carrieresante.gouv.qc.ca** de Santé Québec : CHU de Québec, CHUM, CISSS AT / Chaudière-Appalaches / Laval, + viensvivretespassions.ca Outaouais) | 6 | **Flux RSS `job_feed` natif de WP Job Manager** (contenu complet publié pour syndication) + JSON-LD JobPosting des pages poste. Sites publics du gouvernement du Québec destinés à la diffusion des offres. | 1 req/s, 1 requête liste/cycle + détails budgetés | Connecté |
52 +| **Workland / Atlas — réseau** (`atlas_workland`, ~80 employeurs QC : CSS scolaires, cégeps, établissements Santé Québec, STQ, UQTR, INRS…) | 1 connecteur réseau | **API JSON publique du frontal** (`jobs-prod.workland.com/api/v1/job/published-external` + `default-profiles`) — celle que la SPA publique atlas.workland.com consomme sans authentification ; offres « publiées à l'externe » uniquement. | **2 requêtes par cycle** pour tout le réseau (politesse maximale) | Connecté — remplace les grattages unitaires (cssdm/uqam/cssvt) |
53 +| **SuccessFactors CSB** — ajouts (`hydroquebec`, `deloitte`) | +2 | Sitemap RSS public du site carrières officiel (comme bombardier/cascades/domtar) | 1 req/s, budget détail | Connecté |
54 +| **UKG Pro Recruiting** — instance canadienne (`fruitdor`, `nortera` sur recruiting.ultipro.**ca**) | +2 | API JSON publique du frontal (`LoadSearchResults`), famille existante paramétrée pour l'hôte canadien | 0,8 req/s | Connecté |
55 +| **Njoyn** — ajout (`cgi`) + pagination générale | +1 | Babillard public ; domaine `cgi.njoyn.com` derrière Radware → **Scrapfly** (pages strictement publiques, précédent njoyn documenté). Pagination = rejeu du **formulaire de recherche public** (`Inp_ItemsPerPage`/`pn`). | 6 pages liste + **12 détails max/cycle** (frugalité Scrapfly) ; filtre Québec sur le babillard mondial | Connecté |
56 +| **iCIMS** — ajout (`mackenzie`) | +1 | Portail iCIMS public (famille existante) | 1 req/s | Connecté |
57 +| **ADP WFN** — ajouts (`cultures_genv`, `bento_sushi`, `osgoode_properties`) | +3 | API JSON publique du centre de carrières (famille existante) | 1 req/s | Connecté |
58 +| **Cegid Digital Recruiters** — ajout (`cssdd`) | +1 | Sitemap + JSON-LD (famille existante) | 0,8 req/s | Connecté |
59 +| **Site maison Lassonde** (`lassonde`, réparation) | 1 | Pages publiques rendues serveur de lassonde.com/fr/emplois (l'ADP WFN de Lassonde ne sert plus que les postes américains) | 1 req/s, budget détail 40 | Reconnecté |
60 +
61 +> **Base légale d'usage des API ATS publiques** : chaque famille consomme le
62 +> point d'accès que l'employeur publie lui-même (flux RSS/sitemap destiné aux
63 +> moteurs, ou API JSON servie sans authentification au navigateur de tout
64 +> visiteur de sa page carrières). Job·Ka ne rediffuse que des **données
65 +> publiques d'offres d'emploi**, avec lien direct vers la source et sans
66 +> capter de candidature.
67 +
68 +### Guichet-Emplois / Job Bank — flux officiel (volet D, documenté 2026-08-19)
69 +
70 +- L'ancienne page libre-service « Data feeds / Flux de données » de Job Bank
71 + (jobbank.gc.ca/datafeeds, guichetemplois.gc.ca/flux-de-donnees) **n'existe
72 + plus** (404 vérifié 2026-08-19) ; aucun jeu « offres actives » sur
73 + ouvert.canada.ca.
74 +- **Démarche pour un accès officiel** (non entamée — exige une identité
75 + humaine/organisationnelle) : formulaire « Aide et soutien »
76 + `https://www.guichetemplois.gc.ca/aidesoutien` → demande écrite d'accès au
77 + **flux de données pour diffuseurs partenaires**, en décrivant Job·Ka
78 + (agrégateur QC, lien direct vers l'offre originale, aucune candidature
79 + captée). Historiquement, ce programme exige la signature d'une **entente de
80 + diffusion** avec EDSC (délai : quelques semaines).
81 +- En attendant : **scraping poli maintenu** (Crawl-delay 5 s de robots.txt
82 + respecté, fenêtre bornée, retries espacés 25 s) — inchangé.
83 +
45 84 ## Sources écartées
46 85
47 86 | Source | Raison |
48 87 |---|---|
49 88 | **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). |
89 +| **Canada Vie** (career5.successfactors.eu / careers.canadalife.com) | Portail SuccessFactors **héritage** (career5, session requise) + site AEM sans sitemap d'offres ; aucun flux public simple (2026-08-19). |
90 +| **Groupe Dynamite** (careers.groupedynamite.com/gdi) | Portail iCIMS nouvelle génération rendu par JS ; le babillard iframe hérité (`frcareers-groupedynamite.icims.com`) est **vide** (2026-08-19). |
91 +| **Jack Astor's / SIR Corp** (careersen-sircorp.icims.com) | Babillard fonctionnel mais **0 offre au Québec** (recherches lieu et mot-clé, 2026-08-19). |
92 +| **Méchant Bœuf** (mechantboeuf.com) | Plus aucun babillard UKG visible sur le site (détection 2026-08-18 périmée). |
93 +| **Université TÉLUQ** (phh01 TBE org=TELUQ) | Tenant Taleo Business Edition **fermé** (« Come Back Soon », 2026-08-19). |
94 +| **Valero — raffinerie Jean-Gaulin** (valero.taleo.net) | Portail Taleo joignable mais **0 offre** (totalCount=0, 2026-08-19) — confirme le retrait antérieur du connecteur. |
95 +| **Produits forestiers Résolu** (pfresolu.com) | Domaine carrières disparu ; employeur intégré à **Domtar** (déjà connecté via jobs.domtar.com) après la fusion. |
96 +| **Power Corporation (directe)** | Page carrières 404 ; le groupe recrute via ses filiales (Mackenzie **connectée**). |
97 +| **Deloitte via Taleo (dttit)** | Détection périmée (section Grèce) — remplacée par le site SuccessFactors `careers.deloitte.ca` (**connecté**). |
98 +| **TTC Global** (`ttcglobal`, retiré) | Board Greenhouse actif mais plus aucune offre au Québec (2 offres : Dallas, Londres) — connecteur retiré (2026-08-19). |
99 +| **CGI via site cgi.com** | Le moteur carrières de cgi.com est propriétaire (JS) — on passe par son babillard **Njoyn** public (connecté ci-dessus). |
100 +| **STL, RTC, Ville de Terrebonne, CIUSSS Est-de-l'Île, CAPREIT, MSI, Agnico Eagle, Cascades, Domtar, Bell Textron, HEC (détections)** | Entrées `detected-other-ats.jsonl` **déjà connectées** avant la phase 3 — détections périmées, aucun doublon créé. |
50 101
51 102 ## Rappels d'exploitation
52 103
modified docs/connecteurs/INDEX.md +48 −22
@@ -5,16 +5,16 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/INDEX.md
7 7 Rôle : Index généré de la documentation des connecteurs (ATS, employeurs, portails, dépôt)
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
12 12
13 13 # Job·Ka — Connecteurs (index)
14 14
15 −> Index généré le 2026-08-19 03:39 EDT par `scripts/gen_connector_docs.py` (rejouable). Croise `data/sources.json`, l'introspection de `jobka/connectors/*.py` et la base live `data/jobka.db`.
15 +> Index généré le 2026-08-19 05:40 EDT par `scripts/gen_connector_docs.py` (rejouable). Croise `data/sources.json`, l'introspection de `jobka/connectors/*.py` et la base live `data/jobka.db`.
16 16
17 −**217 employeurs directs** connectés via **17 plateformes ATS** + **3 portails agrégateurs** + le canal de **dépôt direct** — **10728 offres actives** (7916 directes, 2812 portails ; 19 masquées comme doublons inter-sources, soit 10709 visibles). 239 fiches.
17 +**240 employeurs directs** connectés via **20 plateformes ATS** + **3 portails agrégateurs** + le canal de **dépôt direct** — **14102 offres actives** (11238 directes, 2864 portails ; 91 masquées comme doublons inter-sources, soit 14011 visibles). 265 fiches.
18 18
19 19 Conformité : voir [`docs/CONFORMITE.md`](../CONFORMITE.md). Chaque offre conserve son URL originale ; la candidature se fait chez l'employeur (badge « Offre directe » sur les sources directes).
20 20
@@ -22,50 +22,64 @@ Conformité : voir [`docs/CONFORMITE.md`](../CONFORMITE.md). Chaque offre conser
22 22
23 23 | Plateforme | Employeurs | Actives | Salaire | GPS |
24 24 |---|---|---|---|---|
25 −| [`workday`](ats-workday.md) | 41 | 3571 | 60 % | 84 % |
26 −| [`successfactors`](ats-successfactors.md) | 3 | 1053 | 7 % | 100 % |
25 +| [`workday`](ats-workday.md) | 41 | 3570 | 60 % | 84 % |
26 +| [`workland`](ats-workland.md) | 1 | 1238 | 36 % | 100 % |
27 +| [`successfactors`](ats-successfactors.md) | 5 | 1224 | 18 % | 86 % |
28 +| [`njoyn`](ats-njoyn.md) | 6 | 956 | 81 % | 6 % |
27 29 | [`smartrecruiters`](ats-smartrecruiters.md) | 28 | 949 | 16 % | 100 % |
30 +| [`wpjobmanager`](ats-wpjobmanager.md) | 8 | 842 | 8 % | 0 % |
28 31 | [`workable`](ats-workable.md) | 19 | 649 | 4 % | 100 % |
29 32 | [`lever`](ats-lever.md) | 19 | 454 | 21 % | 97 % |
30 33 | [`bamboohr`](ats-bamboohr.md) | 31 | 227 | 13 % | 100 % |
31 34 | [`ashby`](ats-ashby.md) | 11 | 213 | 12 % | 75 % |
32 −| [`greenhouse`](ats-greenhouse.md) | 20 | 192 | 11 % | 100 % |
35 +| [`greenhouse`](ats-greenhouse.md) | 19 | 192 | 11 % | 100 % |
36 +| [`taleo_tbe`](ats-taleo_tbe.md) | 6 | 143 | 38 % | 0 % |
33 37 | [`breezy`](ats-breezy.md) | 14 | 135 | 58 % | 98 % |
34 38 | [`recruitee`](ats-recruitee.md) | 11 | 130 | 9 % | 98 % |
35 −| [`njoyn`](ats-njoyn.md) | 5 | 117 | 74 % | 43 % |
36 39 | [`taleo`](ats-taleo.md) | 4 | 71 | 0 % | 100 % |
37 −| [`icims`](ats-icims.md) | 5 | 57 | 37 % | 95 % |
38 −| [`digitalrecruiters`](ats-digitalrecruiters.md) | 1 | 41 | 98 % | 68 % |
39 −| [`workland`](ats-workland.md) | 1 | 23 | 0 % | 100 % |
40 −| [`ultipro`](ats-ultipro.md) | 1 | 22 | 91 % | 100 % |
41 −| [`adp`](ats-adp.md) | 3 | 12 | 75 % | 100 % |
40 +| [`digitalrecruiters`](ats-digitalrecruiters.md) | 2 | 68 | 90 % | 41 % |
41 +| [`icims`](ats-icims.md) | 6 | 60 | 40 % | 90 % |
42 +| [`ultipro`](ats-ultipro.md) | 3 | 58 | 60 % | 38 % |
43 +| [`custom`](ats-custom.md) | 1 | 31 | 0 % | 0 % |
44 +| [`adp`](ats-adp.md) | 5 | 28 | 71 % | 43 % |
42 45
43 46 ## Portails agrégateurs & dépôt
44 47
45 48 | Source | Actives | Salaire | Dernier sync |
46 49 |---|---|---|---|
47 −| [Guichet-Emplois (Canada)](guichet_emplois.md) | 566 | 99 % | 2026-08-19 01:54 |
48 −| [Jobillico](jobillico.md) | 1937 | 38 % | 2026-08-19 02:02 |
49 −| [Espresso-Jobs](espresso_jobs.md) | 309 | 23 % | 2026-08-19 01:46 |
50 +| [Espresso-Jobs](espresso_jobs.md) | 309 | 23 % | 2026-08-19 03:55 |
51 +| [Guichet-Emplois (Canada)](guichet_emplois.md) | 502 | 99 % | 2026-08-19 04:02 |
52 +| [Jobillico](jobillico.md) | 2053 | 37 % | 2026-08-19 04:10 |
50 53 | [Dépôt direct employeurs](depot-direct.md) | 0 (0 en modération) | — | au fil de l'eau |
51 54
52 55 ## Employeurs directs (par volume d'offres actives)
53 56
54 57 | Employeur | ATS | Actives | Salaire | GPS | Dernier sync OK |
55 58 |---|---|---|---|---|---|
59 +| [Réseau Atlas Workland (~80 employeurs QC : CSS, cégeps, Santé Québec, STQ, UQTR…)](atlas_workland.md) | [`workland`](ats-workland.md) | 1238 | 36 % | 100 % | ✅ |
56 60 | [Couche-Tard / Circle K](circlek.md) | [`workday`](ats-workday.md) | 1012 | 61 % | 63 % | ✅ |
57 −| [Walmart Canada](walmart.md) | [`workday`](ats-workday.md) | 980 | 93 % | 91 % | ✅ |
61 +| [Walmart Canada](walmart.md) | [`workday`](ats-workday.md) | 979 | 93 % | 91 % | ✅ |
58 62 | [Bombardier](bombardier.md) | [`successfactors`](ats-successfactors.md) | 847 | 0 % | 100 % | ✅ |
63 +| [Santé Québec — Montréal](sante_montreal.md) | [`njoyn`](ats-njoyn.md) | 762 | 97 % | 8 % | ✅ |
59 64 | [TEHORA](tehora.md) | [`workable`](ats-workable.md) | 346 | 0 % | 100 % | ✅ |
60 65 | [Go RH](gorh.md) | [`lever`](ats-lever.md) | 266 | 18 % | 98 % | ✅ |
61 66 | [Mouvement Desjardins](desjardins.md) | [`workday`](ats-workday.md) | 241 | 2 % | 94 % | ✅ |
62 67 | [CIMA+](cima2.md) | [`smartrecruiters`](ats-smartrecruiters.md) | 221 | 0 % | 100 % | ✅ |
63 68 | [Université McGill](mcgill.md) | [`workday`](ats-workday.md) | 193 | 70 % | 100 % | ✅ |
69 +| [CISSS de Laval](cisss_laval.md) | [`wpjobmanager`](ats-wpjobmanager.md) | 149 | 1 % | 0 % | ✅ |
70 +| [CISSS de l'Abitibi-Témiscamingue](cisss_abitibi.md) | [`wpjobmanager`](ats-wpjobmanager.md) | 141 | 0 % | 0 % | ✅ |
64 71 | [Reitmans](reitmanscanadalteltd.md) | [`smartrecruiters`](ats-smartrecruiters.md) | 138 | 22 % | 100 % | ✅ |
72 +| [CISSS des Laurentides](cisss_laurentides.md) | [`wpjobmanager`](ats-wpjobmanager.md) | 130 | 12 % | 0 % | ✅ |
73 +| [CGI](cgi.md) | [`njoyn`](ats-njoyn.md) | 127 | 0 % | 0 % | ✅ |
74 +| [CISSS de Lanaudière](cisss_lanaudiere.md) | [`wpjobmanager`](ats-wpjobmanager.md) | 124 | 4 % | 0 % | ✅ |
65 75 | [Ubisoft](ubisoft.md) | [`smartrecruiters`](ats-smartrecruiters.md) | 123 | 0 % | 100 % | ✅ |
76 +| [CISSS de Chaudière-Appalaches](cisss_chaudiere_appalaches.md) | [`wpjobmanager`](ats-wpjobmanager.md) | 112 | 8 % | 0 % | ✅ |
66 77 | [BMO Groupe financier](bmo.md) | [`workday`](ats-workday.md) | 106 | 88 % | 79 % | ✅ |
67 78 | [Domtar](domtar.md) | [`successfactors`](ats-successfactors.md) | 106 | 0 % | 99 % | ✅ |
79 +| [Deloitte Canada](deloitte.md) | [`successfactors`](ats-successfactors.md) | 105 | 96 % | 0 % | ✅ |
80 +| [CISSS de l'Outaouais](cisss_outaouais.md) | [`wpjobmanager`](ats-wpjobmanager.md) | 101 | 31 % | 0 % | ✅ |
68 81 | [Cascades](cascades.md) | [`successfactors`](ats-successfactors.md) | 100 | 77 % | 100 % | ✅ |
82 +| [Sépaq](sepaq.md) | [`taleo_tbe`](ats-taleo_tbe.md) | 99 | 55 % | 0 % | ✅ |
69 83 | [Genetec](genetec_inc.md) | [`workable`](ats-workable.md) | 80 | 0 % | 100 % | ✅ |
70 84 | [Vidéotron](videotron.md) | [`smartrecruiters`](ats-smartrecruiters.md) | 80 | 14 % | 100 % | ✅ |
71 85 | [MaintainX](maintainx.md) | [`ashby`](ats-ashby.md) | 78 | 6 % | 83 % | ✅ |
@@ -73,15 +87,16 @@ Conformité : voir [`docs/CONFORMITE.md`](../CONFORMITE.md). Chaque offre conser
73 87 | [Airbus Canada](airbus.md) | [`workday`](ats-workday.md) | 75 | 1 % | 100 % | ✅ |
74 88 | [Groupe Banque TD](td.md) | [`workday`](ats-workday.md) | 69 | 99 % | 100 % | ✅ |
75 89 | [EMCO](emcocorporation.md) | [`smartrecruiters`](ats-smartrecruiters.md) | 67 | 48 % | 100 % | ✅ |
90 +| [Hydro-Québec](hydroquebec.md) | [`successfactors`](ats-successfactors.md) | 66 | 61 % | 0 % | ✅ |
76 91 | [Autodesk](autodesk.md) | [`workday`](ats-workday.md) | 65 | 91 % | 48 % | ✅ |
77 92 | [Banque CIBC](cibc.md) | [`workday`](ats-workday.md) | 65 | 0 % | 100 % | ✅ |
78 93 | [Groupe Canam](groupecanam.md) | [`smartrecruiters`](ats-smartrecruiters.md) | 65 | 66 % | 98 % | ✅ |
94 +| [CHU de Québec — Université Laval](chu_quebec.md) | [`wpjobmanager`](ats-wpjobmanager.md) | 60 | 10 % | 0 % | ✅ |
79 95 | [ANCIA Personnel](anciapersonnelinc.md) | [`recruitee`](ats-recruitee.md) | 59 | 10 % | 100 % | ✅ |
80 96 | [Lightspeed Commerce](lightspeedhq.md) | [`ashby`](ats-ashby.md) | 56 | 7 % | 98 % | ✅ |
81 97 | [CAE](cae.md) | [`workday`](ats-workday.md) | 55 | 7 % | 93 % | ✅ |
82 98 | [Manuvie](manulife.md) | [`workday`](ats-workday.md) | 51 | 90 % | 75 % | ✅ |
83 99 | [Cogeco](cogeco.md) | [`workday`](ats-workday.md) | 50 | 18 % | 56 % | ✅ |
84 −| [Santé Québec — Montréal](sante_montreal.md) | [`njoyn`](ats-njoyn.md) | 50 | 100 % | 100 % | ✅ |
85 100 | [Beneva](beneva.md) | [`workday`](ats-workday.md) | 48 | 2 % | 100 % | ✅ |
86 101 | [Cohere](cohere.md) | [`ashby`](ats-ashby.md) | 46 | 17 % | 37 % | ✅ |
87 102 | [Investissements PSP](investpsp.md) | [`workday`](ats-workday.md) | 43 | 5 % | 100 % | ✅ |
@@ -96,17 +111,21 @@ Conformité : voir [`docs/CONFORMITE.md`](../CONFORMITE.md). Chaque offre conser
96 111 | [Valsoft](valsoft_corp.md) | [`workable`](ats-workable.md) | 37 | 11 % | 100 % | ✅ |
97 112 | [Transat A.T.](transatat1.md) | [`smartrecruiters`](ats-smartrecruiters.md) | 36 | 6 % | 100 % | ✅ |
98 113 | [Side (PTW)](sideinc.md) | [`workable`](ats-workable.md) | 33 | 0 % | 100 % | ✅ |
114 +| [Industries Lassonde](lassonde.md) | [`custom`](ats-custom.md) | 31 | 0 % | 0 % | ✅ |
99 115 | [Brand Momentum](brandmomentum.md) | [`breezy`](ats-breezy.md) | 30 | 70 % | 100 % | ✅ |
100 116 | [Service alimentaire Gordon](gfs.md) | [`workday`](ats-workday.md) | 30 | 73 % | 100 % | ✅ |
101 117 | [Altasciences](altasciences.md) | [`workday`](ats-workday.md) | 29 | 0 % | 100 % | ✅ |
102 118 | [CDPQ — Caisse de dépôt et placement du Québec](cdpq.md) | [`workday`](ats-workday.md) | 28 | 0 % | 100 % | ✅ |
119 +| [CSS des Découvreurs](cssdd.md) | [`digitalrecruiters`](ats-digitalrecruiters.md) | 27 | 78 % | 0 % | ✅ |
103 120 | [EXFO](exfo.md) | [`workday`](ats-workday.md) | 27 | 0 % | 100 % | ✅ |
104 121 | [Scotts Canada (Fafard)](scottsmiraclegro.md) | [`workday`](ats-workday.md) | 27 | 4 % | 100 % | ✅ |
105 122 | [Tecsys](tecsys.md) | [`workable`](ats-workable.md) | 27 | 0 % | 100 % | ✅ |
123 +| [CHUM](chum.md) | [`wpjobmanager`](ats-wpjobmanager.md) | 25 | 0 % | 0 % | ✅ |
124 +| [exo (transport métropolitain)](exo.md) | [`taleo_tbe`](ats-taleo_tbe.md) | 25 | 0 % | 0 % | ✅ |
106 125 | [AppDirect](appdirect.md) | [`greenhouse`](ats-greenhouse.md) | 24 | 25 % | 100 % | ✅ |
107 −| [Saputo](saputo.md) | [`workday`](ats-workday.md) | 24 | 79 % | 100 % | ❌ |
126 +| [Nortera](nortera.md) | [`ultipro`](ats-ultipro.md) | 24 | 62 % | 0 % | ✅ |
127 +| [Saputo](saputo.md) | [`workday`](ats-workday.md) | 24 | 75 % | 100 % | ✅ |
108 128 | [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 % | 100 % | ✅ |
110 129 | [CIUSSS de l'Est-de-l'Île-de-Montréal](ciusss_est_montreal.md) | [`taleo`](ats-taleo.md) | 23 | 0 % | 100 % | ✅ |
111 130 | [Intact Corporation financière](intactfc.md) | [`workday`](ats-workday.md) | 23 | 0 % | 100 % | ✅ |
112 131 | [MEDFAR Solutions Cliniques](medfar.md) | [`smartrecruiters`](ats-smartrecruiters.md) | 23 | 0 % | 100 % | ✅ |
@@ -147,6 +166,7 @@ Conformité : voir [`docs/CONFORMITE.md`](../CONFORMITE.md). Chaque offre conser
147 166 | [Sid Lee](sidlee.md) | [`greenhouse`](ats-greenhouse.md) | 13 | 0 % | 100 % | ✅ |
148 167 | [Talan](talan.md) | [`smartrecruiters`](ats-smartrecruiters.md) | 13 | 0 % | 100 % | ✅ |
149 168 | [Victoria Park Medispa](vicpark.md) | [`bamboohr`](ats-bamboohr.md) | 13 | 0 % | 100 % | ✅ |
169 +| [Fruit d'Or](fruitdor.md) | [`ultipro`](ats-ultipro.md) | 12 | 0 % | 0 % | ✅ |
150 170 | [GSK](gsk.md) | [`workday`](ats-workday.md) | 12 | 0 % | 83 % | ✅ |
151 171 | [Investissement Québec](investquebec.md) | [`workday`](ats-workday.md) | 12 | 8 % | 100 % | ✅ |
152 172 | [Logisco](logisco.md) | [`bamboohr`](ats-bamboohr.md) | 12 | 42 % | 100 % | ✅ |
@@ -162,10 +182,13 @@ Conformité : voir [`docs/CONFORMITE.md`](../CONFORMITE.md). Chaque offre conser
162 182 | [People Can Fly](peoplecanfly.md) | [`smartrecruiters`](ats-smartrecruiters.md) | 10 | 0 % | 100 % | ✅ |
163 183 | [ADI - Albert Davidson Industries](adi_albert_davidson_industries.md) | [`breezy`](ats-breezy.md) | 9 | 100 % | 100 % | ✅ |
164 184 | [AlayaCare](alayacare.md) | [`greenhouse`](ats-greenhouse.md) | 9 | 0 % | 100 % | ✅ |
185 +| [Bento Sushi](bento_sushi.md) | [`adp`](ats-adp.md) | 9 | 89 % | 0 % | ✅ |
165 186 | [Canadian Tire](canadiantirecorporation.md) | [`workday`](ats-workday.md) | 9 | 56 % | 100 % | ✅ |
166 187 | [EDF Renouvelables Canada](edf_renouvelables.md) | [`icims`](ats-icims.md) | 9 | 78 % | 67 % | ✅ |
167 188 | [Eminent Valet](eminent_valet.md) | [`workable`](ats-workable.md) | 9 | 100 % | 100 % | ✅ |
168 189 | [Framestore](framestore.md) | [`recruitee`](ats-recruitee.md) | 9 | 0 % | 100 % | ✅ |
190 +| [HEC Montréal](hec_montreal.md) | [`taleo_tbe`](ats-taleo_tbe.md) | 9 | 0 % | 0 % | ✅ |
191 +| [HEC Montréal — corps professoral](hec_montreal_profs.md) | [`taleo_tbe`](ats-taleo_tbe.md) | 9 | 0 % | 0 % | ✅ |
169 192 | [J'Excelle](jexcelleinc.md) | [`smartrecruiters`](ats-smartrecruiters.md) | 9 | 0 % | 100 % | ✅ |
170 193 | [JG Rive-Sud (GFS)](jgrivesud.md) | [`workday`](ats-workday.md) | 9 | 67 % | 100 % | ✅ |
171 194 | [Nora Pharma](nora_pharma.md) | [`breezy`](ats-breezy.md) | 9 | 100 % | 89 % | ✅ |
@@ -179,14 +202,15 @@ Conformité : voir [`docs/CONFORMITE.md`](../CONFORMITE.md). Chaque offre conser
179 202 | [LIDD Consultants](lidd.md) | [`workable`](ats-workable.md) | 8 | 0 % | 100 % | ✅ |
180 203 | [Mila — Institut québécois d'IA](mila_2.md) | [`workable`](ats-workable.md) | 8 | 0 % | 100 % | ✅ |
181 204 | [Nuovo Photography](nuovophotography.md) | [`workable`](ats-workable.md) | 8 | 25 % | 100 % | ✅ |
182 −| [Omni Hôtel Mont-Royal](omni_hotels_horaire.md) | [`icims`](ats-icims.md) | 8 | 88 % | 100 % | ✅ |
183 205 | [Omni Hôtel Mont-Royal](omni_hotels_gestion.md) | [`icims`](ats-icims.md) | 8 | 88 % | 100 % | ✅ |
206 +| [Omni Hôtel Mont-Royal](omni_hotels_horaire.md) | [`icims`](ats-icims.md) | 8 | 88 % | 100 % | ✅ |
184 207 | [Sun Life](sunlife.md) | [`workday`](ats-workday.md) | 8 | 0 % | 100 % | ✅ |
185 208 | [AJ Walter Aviation](ajwalter.md) | [`recruitee`](ats-recruitee.md) | 7 | 0 % | 100 % | ✅ |
186 209 | [Luqia (INO)](ino_ca.md) | [`breezy`](ats-breezy.md) | 7 | 0 % | 100 % | ✅ |
187 210 | [Petal](petalmd.md) | [`recruitee`](ats-recruitee.md) | 7 | 14 % | 100 % | ✅ |
188 211 | [Robotiq](robotiq.md) | [`bamboohr`](ats-bamboohr.md) | 7 | 0 % | 100 % | ✅ |
189 212 | [Church & Dwight Canada](churchdwight.md) | [`workday`](ats-workday.md) | 6 | 0 % | 100 % | ✅ |
213 +| [Cultures Gen V](cultures_genv.md) | [`adp`](ats-adp.md) | 6 | 33 % | 0 % | ✅ |
190 214 | [EQ Bank](eqbank.md) | [`lever`](ats-lever.md) | 6 | 50 % | 50 % | ✅ |
191 215 | [Hopper](hopper.md) | [`ashby`](ats-ashby.md) | 6 | 0 % | 67 % | ✅ |
192 216 | [Mattel (Mega Bloks)](mattelinc.md) | [`smartrecruiters`](ats-smartrecruiters.md) | 6 | 0 % | 100 % | ✅ |
@@ -233,6 +257,7 @@ Conformité : voir [`docs/CONFORMITE.md`](../CONFORMITE.md). Chaque offre conser
233 257 | [Gearbox Studio Québec](gearboxquebec.md) | [`greenhouse`](ats-greenhouse.md) | 3 | 0 % | 100 % | ✅ |
234 258 | [Mistplay](mistplay.md) | [`lever`](ats-lever.md) | 3 | 33 % | 100 % | ✅ |
235 259 | [No Saint](no_saint.md) | [`ashby`](ats-ashby.md) | 3 | 0 % | 100 % | ✅ |
260 +| [Placements Mackenzie (Power/IGM)](mackenzie.md) | [`icims`](ats-icims.md) | 3 | 100 % | 0 % | ✅ |
236 261 | [Rethink](rethinkcanada.md) | [`bamboohr`](ats-bamboohr.md) | 3 | 0 % | 100 % | ✅ |
237 262 | [Squeeze Studio Animation](squeezestudio.md) | [`recruitee`](ats-recruitee.md) | 3 | 0 % | 67 % | ✅ |
238 263 | [Suncor Énergie](suncor.md) | [`workday`](ats-workday.md) | 3 | 0 % | 100 % | ✅ |
@@ -261,15 +286,16 @@ Conformité : voir [`docs/CONFORMITE.md`](../CONFORMITE.md). Chaque offre conser
261 286 | [GoLogic](gologic.md) | [`smartrecruiters`](ats-smartrecruiters.md) | 1 | 0 % | 100 % | ✅ |
262 287 | [Industrious](industrious.md) | [`ashby`](ats-ashby.md) | 1 | 0 % | 100 % | ✅ |
263 288 | [NATIONAL](national.md) | [`greenhouse`](ats-greenhouse.md) | 1 | 0 % | 100 % | ✅ |
289 +| [Osgoode Properties](osgoode_properties.md) | [`adp`](ats-adp.md) | 1 | 100 % | 0 % | ✅ |
264 290 | [Poulet Rouge](pouletrouge.md) | [`bamboohr`](ats-bamboohr.md) | 1 | 0 % | 100 % | ✅ |
291 +| [Produits Kruger](produits_kruger.md) | [`taleo_tbe`](ats-taleo_tbe.md) | 1 | 0 % | 0 % | ✅ |
265 292 | [Samsara](samsara.md) | [`greenhouse`](ats-greenhouse.md) | 1 | 100 % | 100 % | ✅ |
266 293 | [Sparkgrid](sparkgrid.md) | [`smartrecruiters`](ats-smartrecruiters.md) | 1 | 0 % | 100 % | ✅ |
267 294 | [Stelpro](stelpro.md) | [`smartrecruiters`](ats-smartrecruiters.md) | 1 | 0 % | 100 % | ✅ |
268 295 | [Talsom](talsom.md) | [`smartrecruiters`](ats-smartrecruiters.md) | 1 | 0 % | 100 % | ✅ |
269 296 | [Xplornet](xplornet.md) | [`smartrecruiters`](ats-smartrecruiters.md) | 1 | 0 % | 100 % | ✅ |
270 297 | [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 | — | — | ✅ |
298 +| [Kruger](kruger.md) | [`taleo_tbe`](ats-taleo_tbe.md) | 0 | — | — | ✅ |
273 299
274 300 ## Régénérer cette documentation
275 301
modified docs/connecteurs/adeleexpressfr.md +3 −3
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/adeleexpressfr.md
7 7 Rôle : Fiche connecteur — Adèle Express (employeur direct, ATS recruitee)
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -36,7 +36,7 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
36 36
37 37 ## Champs → schéma
38 38
39 −Complétude mesurée sur les **5 offres actives** de la source (base live, 2026-08-19 03:39 EDT).
39 +Complétude mesurée sur les **5 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
40 40
41 41 | Champ (`jobs.*`) | Rôle | Complétude |
42 42 |---|---|---|
@@ -72,7 +72,7 @@ Exemple réel : *Professionnel de ménage - Pour entretien ménager à domicile
72 72
73 73 ## Volumétrie & complétude live
74 74
75 −*(mesuré le 2026-08-19 03:39 EDT dans `data/jobka.db`)*
75 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
76 76
77 77 - **Offres en base** : 5 (dont **5 actives**, 0 masquées comme doublons `dup_of`)
78 78 - **Salaire** : 3/5 actives (60 %)
modified docs/connecteurs/adi_albert_davidson_industries.md +3 −3
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/adi_albert_davidson_industries.md
7 7 Rôle : Fiche connecteur — ADI - Albert Davidson Industries (employeur direct, ATS breezy)
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -36,7 +36,7 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
36 36
37 37 ## Champs → schéma
38 38
39 −Complétude mesurée sur les **9 offres actives** de la source (base live, 2026-08-19 03:39 EDT).
39 +Complétude mesurée sur les **9 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
40 40
41 41 | Champ (`jobs.*`) | Rôle | Complétude |
42 42 |---|---|---|
@@ -72,7 +72,7 @@ Exemple réel : *Assistant Production Director* — Pointe-Claire · $28 – $34
72 72
73 73 ## Volumétrie & complétude live
74 74
75 −*(mesuré le 2026-08-19 03:39 EDT dans `data/jobka.db`)*
75 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
76 76
77 77 - **Offres en base** : 9 (dont **9 actives**, 0 masquées comme doublons `dup_of`)
78 78 - **Salaire** : 9/9 actives (100 %)
modified docs/connecteurs/agnico_eagle.md +3 −3
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/agnico_eagle.md
7 7 Rôle : Fiche connecteur — Agnico Eagle Mines (employeur direct, ATS taleo)
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -39,7 +39,7 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
39 39
40 40 ## Champs → schéma
41 41
42 −Complétude mesurée sur les **20 offres actives** de la source (base live, 2026-08-19 03:39 EDT).
42 +Complétude mesurée sur les **20 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
43 43
44 44 | Champ (`jobs.*`) | Rôle | Complétude |
45 45 |---|---|---|
@@ -80,7 +80,7 @@ Exemple réel : *Coordonnateur ressources humaines – processus et projets* —
80 80
81 81 ## Volumétrie & complétude live
82 82
83 −*(mesuré le 2026-08-19 03:39 EDT dans `data/jobka.db`)*
83 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
84 84
85 85 - **Offres en base** : 20 (dont **20 actives**, 0 masquées comme doublons `dup_of`)
86 86 - **Salaire** : 0/20 actives (0 %)
modified docs/connecteurs/agropur.md +3 −3
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/agropur.md
7 7 Rôle : Fiche connecteur — Agropur (employeur direct, ATS workday)
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -38,7 +38,7 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
38 38
39 39 ## Champs → schéma
40 40
41 −Complétude mesurée sur les **75 offres actives** de la source (base live, 2026-08-19 03:39 EDT).
41 +Complétude mesurée sur les **75 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
42 42
43 43 | Champ (`jobs.*`) | Rôle | Complétude |
44 44 |---|---|---|
@@ -79,7 +79,7 @@ Exemple réel : *Manager, Commercial Transformation and Process Optimization*
79 79
80 80 ## Volumétrie & complétude live
81 81
82 −*(mesuré le 2026-08-19 03:39 EDT dans `data/jobka.db`)*
82 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
83 83
84 84 - **Offres en base** : 75 (dont **75 actives**, 0 masquées comme doublons `dup_of`)
85 85 - **Salaire** : 70/75 actives (93 %)
modified docs/connecteurs/airbus.md +3 −3
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/airbus.md
7 7 Rôle : Fiche connecteur — Airbus Canada (employeur direct, ATS workday)
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -38,7 +38,7 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
38 38
39 39 ## Champs → schéma
40 40
41 −Complétude mesurée sur les **75 offres actives** de la source (base live, 2026-08-19 03:39 EDT).
41 +Complétude mesurée sur les **75 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
42 42
43 43 | Champ (`jobs.*`) | Rôle | Complétude |
44 44 |---|---|---|
@@ -79,7 +79,7 @@ Exemple réel : *Conseiller.ère recrutement/Recruitment Advisor* — Montréal
79 79
80 80 ## Volumétrie & complétude live
81 81
82 −*(mesuré le 2026-08-19 03:39 EDT dans `data/jobka.db`)*
82 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
83 83
84 84 - **Offres en base** : 75 (dont **75 actives**, 0 masquées comme doublons `dup_of`)
85 85 - **Salaire** : 1/75 actives (1 %)
modified docs/connecteurs/ajwalter.md +3 −3
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/ajwalter.md
7 7 Rôle : Fiche connecteur — AJ Walter Aviation (employeur direct, ATS recruitee)
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -36,7 +36,7 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
36 36
37 37 ## Champs → schéma
38 38
39 −Complétude mesurée sur les **7 offres actives** de la source (base live, 2026-08-19 03:39 EDT).
39 +Complétude mesurée sur les **7 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
40 40
41 41 | Champ (`jobs.*`) | Rôle | Complétude |
42 42 |---|---|---|
@@ -72,7 +72,7 @@ Exemple réel : *Analyste, Soutien à la production - Production Support Analyst
72 72
73 73 ## Volumétrie & complétude live
74 74
75 −*(mesuré le 2026-08-19 03:39 EDT dans `data/jobka.db`)*
75 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
76 76
77 77 - **Offres en base** : 7 (dont **7 actives**, 0 masquées comme doublons `dup_of`)
78 78 - **Salaire** : 0/7 actives (0 %)
modified docs/connecteurs/alayacare.md +3 −3
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/alayacare.md
7 7 Rôle : Fiche connecteur — AlayaCare (employeur direct, ATS greenhouse)
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -36,7 +36,7 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
36 36
37 37 ## Champs → schéma
38 38
39 −Complétude mesurée sur les **9 offres actives** de la source (base live, 2026-08-19 03:39 EDT).
39 +Complétude mesurée sur les **9 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
40 40
41 41 | Champ (`jobs.*`) | Rôle | Complétude |
42 42 |---|---|---|
@@ -72,7 +72,7 @@ Exemple réel : *Manager, Software Development* — Montréal · ∅ · parue le
72 72
73 73 ## Volumétrie & complétude live
74 74
75 −*(mesuré le 2026-08-19 03:39 EDT dans `data/jobka.db`)*
75 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
76 76
77 77 - **Offres en base** : 10 (dont **9 actives**, 0 masquées comme doublons `dup_of`)
78 78 - **Salaire** : 0/9 actives (0 %)
modified docs/connecteurs/alcoa.md +3 −3
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/alcoa.md
7 7 Rôle : Fiche connecteur — Alcoa Canada (employeur direct, ATS workday)
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -38,7 +38,7 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
38 38
39 39 ## Champs → schéma
40 40
41 −Complétude mesurée sur les **15 offres actives** de la source (base live, 2026-08-19 03:39 EDT).
41 +Complétude mesurée sur les **15 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
42 42
43 43 | Champ (`jobs.*`) | Rôle | Complétude |
44 44 |---|---|---|
@@ -79,7 +79,7 @@ Exemple réel : *Assistant(e) opérateur ou opératrice* — Baie-Comeau · Sala
79 79
80 80 ## Volumétrie & complétude live
81 81
82 −*(mesuré le 2026-08-19 03:39 EDT dans `data/jobka.db`)*
82 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
83 83
84 84 - **Offres en base** : 16 (dont **15 actives**, 0 masquées comme doublons `dup_of`)
85 85 - **Salaire** : 2/15 actives (13 %)
modified docs/connecteurs/alimentiv_2.md +3 −3
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/alimentiv_2.md
7 7 Rôle : Fiche connecteur — Alimentiv (employeur direct, ATS lever)
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -36,7 +36,7 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
36 36
37 37 ## Champs → schéma
38 38
39 −Complétude mesurée sur les **2 offres actives** de la source (base live, 2026-08-19 03:39 EDT).
39 +Complétude mesurée sur les **2 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
40 40
41 41 | Champ (`jobs.*`) | Rôle | Complétude |
42 42 |---|---|---|
@@ -72,7 +72,7 @@ Exemple réel : *Statistician* — ∅ · ∅ · parue le 2026-07-28.
72 72
73 73 ## Volumétrie & complétude live
74 74
75 −*(mesuré le 2026-08-19 03:39 EDT dans `data/jobka.db`)*
75 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
76 76
77 77 - **Offres en base** : 2 (dont **2 actives**, 0 masquées comme doublons `dup_of`)
78 78 - **Salaire** : 2/2 actives (100 %)
modified docs/connecteurs/alphanumeric_systems.md +3 −3
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/alphanumeric_systems.md
7 7 Rôle : Fiche connecteur — Alphanumeric Systems (employeur direct, ATS breezy)
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -36,7 +36,7 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
36 36
37 37 ## Champs → schéma
38 38
39 −Complétude mesurée sur les **5 offres actives** de la source (base live, 2026-08-19 03:39 EDT).
39 +Complétude mesurée sur les **5 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
40 40
41 41 | Champ (`jobs.*`) | Rôle | Complétude |
42 42 |---|---|---|
@@ -72,7 +72,7 @@ Exemple réel : *Bilingual Customer Service Specialist for Pharmaceuticals/Healt
72 72
73 73 ## Volumétrie & complétude live
74 74
75 −*(mesuré le 2026-08-19 03:39 EDT dans `data/jobka.db`)*
75 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
76 76
77 77 - **Offres en base** : 5 (dont **5 actives**, 0 masquées comme doublons `dup_of`)
78 78 - **Salaire** : 5/5 actives (100 %)
modified docs/connecteurs/altasciences.md +3 −3
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/altasciences.md
7 7 Rôle : Fiche connecteur — Altasciences (employeur direct, ATS workday)
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -38,7 +38,7 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
38 38
39 39 ## Champs → schéma
40 40
41 −Complétude mesurée sur les **29 offres actives** de la source (base live, 2026-08-19 03:39 EDT).
41 +Complétude mesurée sur les **29 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
42 42
43 43 | Champ (`jobs.*`) | Rôle | Complétude |
44 44 |---|---|---|
@@ -79,7 +79,7 @@ Exemple réel : *Medical Equipment and Systems Specialist* — Montréal · ∅
79 79
80 80 ## Volumétrie & complétude live
81 81
82 −*(mesuré le 2026-08-19 03:39 EDT dans `data/jobka.db`)*
82 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
83 83
84 84 - **Offres en base** : 29 (dont **29 actives**, 0 masquées comme doublons `dup_of`)
85 85 - **Salaire** : 0/29 actives (0 %)
modified docs/connecteurs/amilia.md +3 −3
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/amilia.md
7 7 Rôle : Fiche connecteur — Amilia (employeur direct, ATS recruitee)
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -36,7 +36,7 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
36 36
37 37 ## Champs → schéma
38 38
39 −Complétude mesurée sur les **1 offres actives** de la source (base live, 2026-08-19 03:39 EDT).
39 +Complétude mesurée sur les **1 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
40 40
41 41 | Champ (`jobs.*`) | Rôle | Complétude |
42 42 |---|---|---|
@@ -72,7 +72,7 @@ Exemple réel : *Coordonnateur.trice, Talent & Culture (contrat de 12 mois)* —
72 72
73 73 ## Volumétrie & complétude live
74 74
75 −*(mesuré le 2026-08-19 03:39 EDT dans `data/jobka.db`)*
75 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
76 76
77 77 - **Offres en base** : 1 (dont **1 actives**, 0 masquées comme doublons `dup_of`)
78 78 - **Salaire** : 0/1 actives (0 %)
modified docs/connecteurs/anciapersonnelinc.md +3 −3
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/anciapersonnelinc.md
7 7 Rôle : Fiche connecteur — ANCIA Personnel (employeur direct, ATS recruitee)
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -36,7 +36,7 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
36 36
37 37 ## Champs → schéma
38 38
39 −Complétude mesurée sur les **59 offres actives** de la source (base live, 2026-08-19 03:39 EDT).
39 +Complétude mesurée sur les **59 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
40 40
41 41 | Champ (`jobs.*`) | Rôle | Complétude |
42 42 |---|---|---|
@@ -72,7 +72,7 @@ Exemple réel : *Approvisionneur(euse) de pièces* — Saint-Eustache · Salaire
72 72
73 73 ## Volumétrie & complétude live
74 74
75 −*(mesuré le 2026-08-19 03:39 EDT dans `data/jobka.db`)*
75 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
76 76
77 77 - **Offres en base** : 60 (dont **59 actives**, 0 masquées comme doublons `dup_of`)
78 78 - **Salaire** : 6/59 actives (10 %)
modified docs/connecteurs/appdirect.md +3 −3
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/appdirect.md
7 7 Rôle : Fiche connecteur — AppDirect (employeur direct, ATS greenhouse)
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -36,7 +36,7 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
36 36
37 37 ## Champs → schéma
38 38
39 −Complétude mesurée sur les **24 offres actives** de la source (base live, 2026-08-19 03:39 EDT).
39 +Complétude mesurée sur les **24 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
40 40
41 41 | Champ (`jobs.*`) | Rôle | Complétude |
42 42 |---|---|---|
@@ -72,7 +72,7 @@ Exemple réel : *Développeur/Développeuse Logiciel Senior - PHP* — Montréal
72 72
73 73 ## Volumétrie & complétude live
74 74
75 −*(mesuré le 2026-08-19 03:39 EDT dans `data/jobka.db`)*
75 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
76 76
77 77 - **Offres en base** : 24 (dont **24 actives**, 0 masquées comme doublons `dup_of`)
78 78 - **Salaire** : 6/24 actives (25 %)
modified docs/connecteurs/astucemedia.md +3 −3
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/astucemedia.md
7 7 Rôle : Fiche connecteur — Astucemedia (employeur direct, ATS smartrecruiters)
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -36,7 +36,7 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
36 36
37 37 ## Champs → schéma
38 38
39 −Complétude mesurée sur les **5 offres actives** de la source (base live, 2026-08-19 03:39 EDT).
39 +Complétude mesurée sur les **5 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
40 40
41 41 | Champ (`jobs.*`) | Rôle | Complétude |
42 42 |---|---|---|
@@ -77,7 +77,7 @@ Exemple réel : *Lead Front & Back-End Developer* — Montréal · ∅ · parue
77 77
78 78 ## Volumétrie & complétude live
79 79
80 −*(mesuré le 2026-08-19 03:39 EDT dans `data/jobka.db`)*
80 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
81 81
82 82 - **Offres en base** : 5 (dont **5 actives**, 0 masquées comme doublons `dup_of`)
83 83 - **Salaire** : 0/5 actives (0 %)
modified docs/connecteurs/atecna_montreal.md +3 −3
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/atecna_montreal.md
7 7 Rôle : Fiche connecteur — Atecna (employeur direct, ATS workable)
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -36,7 +36,7 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
36 36
37 37 ## Champs → schéma
38 38
39 −Complétude mesurée sur les **1 offres actives** de la source (base live, 2026-08-19 03:39 EDT).
39 +Complétude mesurée sur les **1 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
40 40
41 41 | Champ (`jobs.*`) | Rôle | Complétude |
42 42 |---|---|---|
@@ -72,7 +72,7 @@ Exemple réel : *UI-UX Designer Senior* — Montréal · ∅ · parue le 2026-07
72 72
73 73 ## Volumétrie & complétude live
74 74
75 −*(mesuré le 2026-08-19 03:39 EDT dans `data/jobka.db`)*
75 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
76 76
77 77 - **Offres en base** : 1 (dont **1 actives**, 0 masquées comme doublons `dup_of`)
78 78 - **Salaire** : 0/1 actives (0 %)
added docs/connecteurs/atlas_workland.md +102 −0
@@ -0,0 +1,102 @@
1 +<!--
2 +=============================================================================
3 +Job·Ka — Groupe KA
4 +Auteur : Simon-Pierre Boucher
5 +Contact : contact@spboucher.ai
6 +Fichier : docs/connecteurs/atlas_workland.md
7 +Rôle : Fiche connecteur — Réseau Atlas Workland (~80 employeurs QC : CSS, cégeps, Santé Québec, STQ, UQTR…) (employeur direct, ATS workland)
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 + relancer le script pour régénérer.
10 +=============================================================================
11 +-->
12 +
13 +# Réseau Atlas Workland (~80 employeurs QC : CSS, cégeps, Santé Québec, STQ, UQTR…) (`atlas_workland`)
14 +
15 +**Employeur direct** · Plateforme ATS : [`workland`](ats-workland.md) · Statut registre : actif · Connecteur : `jobka/connectors/atlas_workland.py`
16 +
17 +## Description
18 +
19 +- **Site** : [Réseau Atlas Workland (~80 employeurs QC : CSS, cégeps, Santé Québec, STQ, UQTR…)](https://www.workland.com)
20 +- **Page carrières** : https://atlas.workland.com
21 +- **Secteurs** : Éducation, Santé, Secteur public, Multi-employeurs
22 +- **Région** : Québec (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-workland.md`](ats-workland.md) — API JSON publique du site carrières, backend `requests` direct (Scrapfly seulement si indiqué sur la fiche plateforme).
28 +- **Throttle** : 1.0 s entre requêtes.
29 +- **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).
30 +
31 +## Champs → schéma
32 +
33 +Complétude mesurée sur les **1238 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
34 +
35 +| Champ (`jobs.*`) | Rôle | Complétude |
36 +|---|---|---|
37 +| `title` — Titre | titre du poste | 100 % |
38 +| `employer` — Employeur | nom de l'entreprise | 100 % |
39 +| `url` — URL | lien direct vers l'offre originale | 100 % |
40 +| `description` — Description | texte complet (HTML nettoyé) | 100 % |
41 +| `city` — Ville | municipalité normalisée | 100 % |
42 +| `region` — Région | région administrative | 99 % |
43 +| `address` — Adresse | adresse du lieu de travail | 0 % |
44 +| `postal_code` — Code postal | code postal si publié | 82 % |
45 +| `work_mode` — Mode | presentiel / hybride / teletravail | 82 % |
46 +| `employment_type` — Type | temps_plein / temps_partiel / … | 71 % |
47 +| `salary` — Salaire ($) | bornes numériques normalisées $/h et $/an | 36 % |
48 +| `salary_label` — Libellé salaire | texte salarial original | 36 % |
49 +| `benefits` — Avantages | avantages sociaux publiés (JSON) | 0 % |
50 +| `requirements` — Exigences | scolarité, expérience, langues (JSON) | 0 % |
51 +| `date_posted` — Date de parution | ISO 8601 | 100 % |
52 +| `date_deadline` — Date limite | date limite pour postuler | 100 % |
53 +| `category` — Catégorie | taxonomie interne (TI, Santé, …) | 80 % |
54 +| `language` — Langue | fr / en / bilingue (source ou heuristique) | 100 % |
55 +| `company_logo` — Logo employeur | URL du logo si exposé par la source | 0 % |
56 +| `apply_url` — Candidature | lien de candidature directe | 0 % |
57 +| `gps` — GPS | lat/lng (géocodage sans invention) | 100 % |
58 +
59 +Exemple réel : *Acheteuse ou acheteur* — Sorel-Tracy · : 26,18 $/heure Max · parue le 2026-08-18.
60 +
61 +## Fréquence & budgets
62 +
63 +- **Cadence** : resynchronisation **horaire** (PM2 `job-ka-sync` = `run.py watch 60`), suivie du géocodage en lot puis de la déduplication inter-sources.
64 +- **Throttle** : 1.0 s minimum entre deux requêtes vers la source (`request_delay`).
65 +- 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.
66 +
67 +## Volumétrie & complétude live
68 +
69 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
70 +
71 +- **Offres en base** : 1238 (dont **1238 actives**, 13 masquées comme doublons `dup_of`)
72 +- **Salaire** : 441/1238 actives (36 %)
73 +- **GPS** : 1238/1238 actives (100 %)
74 +- **Mode** : 1014/1238 actives (82 %)
75 +- **Parution** : 1238/1238 actives (100 %)
76 +- **Dernier sync** : 2026-08-19 04:45 — trouvées 1238, +1238, ~0, -0
77 +- **Syncs enregistrés** (`sync_log`) : 1
78 +
79 +## Erreurs & dépannage
80 +
81 +Aucune erreur dans `sync_log` pour cette source.
82 +
83 +- Rejouer un sync isolé : `.venv/bin/python run.py sync atlas_workland` puis inspecter `sync_log` : `sqlite3 data/jobka.db "SELECT * FROM sync_log WHERE source='atlas_workland' ORDER BY ts DESC LIMIT 5;"`
84 +- 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`.
85 +
86 +## Licence / conformité
87 +
88 +**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 Réseau Atlas Workland (~80 employeurs QC : CSS, cégeps, Santé Québec, STQ, UQTR…) » 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.
89 +
90 +## Historique
91 +
92 +**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 :
93 +- `fd4bfc8` qualité lieux : rejet des villes hors Québec, bâtiments McGill → Montréal ;
94 +- `5a66f48` +59 employeurs (sondage massif d'ATS + détection de pages carrières) ;
95 +- `4917d57` 8 nouveaux ATS (Taleo, Njoyn, UltiPro, iCIMS, SuccessFactors, ADP WFN, Digital Recruiters, Workland) + 23 employeurs publics/parapublics ;
96 +- `f6e7571` portails Guichet-Emplois, Jobillico, Espresso-Jobs — l'offre directe gagne toujours la canonique (dédup) ;
97 +- `744cbfc` badge « Offre directe », stats directes/portails, dépôt direct employeurs ;
98 +- `1604ff9` reprise sur coupure WAF Guichet-Emplois (retry + acquis partiel).
99 +
100 +Commits touchant `jobka/connectors/atlas_workland.py` :
101 +
102 +- `86b0d0b` 2026-08-19 Famille Workland réécrite sur l'API JSON publique du frontal Atlas (jobs-prod published-external + default-profiles) : descriptions complètes fr/en, lieux géocodés, dates, mode de travail — 2 requêtes par cycle pour TOUT le réseau. Nouveau connecteur réseau atlas_workland (~80 employeurs QC : CSS scolaires, cégeps, CIUSSS Ouest-de-l'Île, Santé Québec Côte-Nord, ICM, STQ, UQTR, INRS… ; 1 238 offres QC). Connecteur cssdm retiré (couvert par le réseau), fixture remplacée par atlas_workland (sous-ensemble rejouable). Corrige la limite « workland description 0 % ».
modified docs/connecteurs/ats-adp.md +8 −6
@@ -4,15 +4,15 @@ Job·Ka — Groupe KA
4 4 Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/ats-adp.md
7 −Rôle : Fiche plateforme ATS adp — mécanique partagée + tableau des 3 tenants
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
7 +Rôle : Fiche plateforme ATS adp — mécanique partagée + tableau des 5 tenants
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
12 12
13 13 # Plateforme ATS `adp`
14 14
15 −**3 employeurs connectés** via cette plateforme — **12 offres actives**. Module partagé : `jobka/connectors/adp.py` ; un employeur = une sous-classe d'environ 10 lignes.
15 +**5 employeurs connectés** via cette plateforme — **28 offres actives**. Module partagé : `jobka/connectors/adp.py` ; un employeur = une sous-classe d'environ 10 lignes.
16 16
17 17 ## Description & mécanique
18 18
@@ -40,9 +40,11 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
40 40
41 41 | Employeur | Actives | Salaire | GPS | Mode | Dernier sync | OK |
42 42 |---|---|---|---|---|---|---|
43 −| [Mitsubishi HC Capital Canada](mitsubishi_hc_capital.md) | 6 | 50 % | 100 % | 0 % | 2026-08-19 02:10 | ✅ |
44 −| [MSI Gestion immobilière](msi_gestion.md) | 6 | 100 % | 100 % | 0 % | 2026-08-19 02:10 | ✅ |
45 −| [Industries Lassonde](lassonde.md) | 0 | — | — | — | 2026-08-19 02:02 | ✅ |
43 +| [Bento Sushi](bento_sushi.md) | 9 | 89 % | 0 % | 0 % | 2026-08-19 04:49 | ✅ |
44 +| [Cultures Gen V](cultures_genv.md) | 6 | 33 % | 0 % | 0 % | 2026-08-19 04:49 | ✅ |
45 +| [Mitsubishi HC Capital Canada](mitsubishi_hc_capital.md) | 6 | 50 % | 100 % | 0 % | 2026-08-19 04:15 | ✅ |
46 +| [MSI Gestion immobilière](msi_gestion.md) | 6 | 100 % | 100 % | 0 % | 2026-08-19 04:15 | ✅ |
47 +| [Osgoode Properties](osgoode_properties.md) | 1 | 100 % | 0 % | 0 % | 2026-08-19 04:49 | ✅ |
46 48
47 49 ## Licence / conformité
48 50
modified docs/connecteurs/ats-ashby.md +12 −12
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/ats-ashby.md
7 7 Rôle : Fiche plateforme ATS ashby — mécanique partagée + tableau des 11 tenants
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -40,17 +40,17 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
40 40
41 41 | Employeur | Actives | Salaire | GPS | Mode | Dernier sync | OK |
42 42 |---|---|---|---|---|---|---|
43 −| [MaintainX](maintainx.md) | 78 | 6 % | 83 % | 100 % | 2026-08-19 02:02 | ✅ |
44 −| [Lightspeed Commerce](lightspeedhq.md) | 56 | 7 % | 98 % | 100 % | 2026-08-19 02:02 | ✅ |
45 −| [Cohere](cohere.md) | 46 | 17 % | 37 % | 100 % | 2026-08-19 01:42 | ✅ |
46 −| [Tetrix](tetrix.md) | 9 | 100 % | 11 % | 100 % | 2026-08-19 02:20 | ✅ |
47 −| [Hopper](hopper.md) | 6 | 0 % | 67 % | 100 % | 2026-08-19 01:54 | ✅ |
48 −| [Mistral AI](mistral_ai.md) | 5 | 0 % | 100 % | 0 % | 2026-08-19 02:10 | ✅ |
49 −| [Nomic Bio](nomic.md) | 4 | 0 % | 75 % | 100 % | 2026-08-19 02:10 | ✅ |
50 −| [Fuse Energy](fuse.md) | 3 | 0 % | 100 % | 0 % | 2026-08-19 01:47 | ✅ |
51 −| [No Saint](no_saint.md) | 3 | 0 % | 100 % | 100 % | 2026-08-19 02:10 | ✅ |
52 −| [Vasco](vasco.md) | 2 | 0 % | 100 % | 100 % | 2026-08-19 02:20 | ✅ |
53 −| [Industrious](industrious.md) | 1 | 0 % | 100 % | 0 % | 2026-08-19 01:55 | ✅ |
43 +| [MaintainX](maintainx.md) | 78 | 6 % | 83 % | 100 % | 2026-08-19 04:10 | ✅ |
44 +| [Lightspeed Commerce](lightspeedhq.md) | 56 | 7 % | 98 % | 100 % | 2026-08-19 04:10 | ✅ |
45 +| [Cohere](cohere.md) | 46 | 17 % | 37 % | 100 % | 2026-08-19 03:52 | ✅ |
46 +| [Tetrix](tetrix.md) | 9 | 100 % | 11 % | 100 % | 2026-08-19 04:24 | ✅ |
47 +| [Hopper](hopper.md) | 6 | 0 % | 67 % | 100 % | 2026-08-19 04:02 | ✅ |
48 +| [Mistral AI](mistral_ai.md) | 5 | 0 % | 100 % | 0 % | 2026-08-19 04:15 | ✅ |
49 +| [Nomic Bio](nomic.md) | 4 | 0 % | 75 % | 100 % | 2026-08-19 04:15 | ✅ |
50 +| [Fuse Energy](fuse.md) | 3 | 0 % | 100 % | 0 % | 2026-08-19 03:56 | ✅ |
51 +| [No Saint](no_saint.md) | 3 | 0 % | 100 % | 100 % | 2026-08-19 04:15 | ✅ |
52 +| [Vasco](vasco.md) | 2 | 0 % | 100 % | 100 % | 2026-08-19 04:25 | ✅ |
53 +| [Industrious](industrious.md) | 1 | 0 % | 100 % | 0 % | 2026-08-19 04:03 | ✅ |
54 54
55 55 ## Licence / conformité
56 56
modified docs/connecteurs/ats-bamboohr.md +30 −30
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/ats-bamboohr.md
7 7 Rôle : Fiche plateforme ATS bamboohr — mécanique partagée + tableau des 31 tenants
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -43,37 +43,37 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
43 43
44 44 | Employeur | Actives | Salaire | GPS | Mode | Dernier sync | OK |
45 45 |---|---|---|---|---|---|---|
46 −| [Broccolini](broccolini.md) | 23 | 0 % | 100 % | 100 % | 2026-08-19 01:31 | ✅ |
47 −| [dcbel](dcbel.md) | 20 | 0 % | 100 % | 100 % | 2026-08-19 01:42 | ✅ |
48 −| [Explorance](explorance.md) | 18 | 0 % | 100 % | 100 % | 2026-08-19 01:47 | ✅ |
49 −| [Produits Labelink](labelink.md) | 17 | 0 % | 100 % | 100 % | 2026-08-19 02:02 | ✅ |
50 −| [Victoria Park Medispa](vicpark.md) | 13 | 0 % | 100 % | 100 % | 2026-08-19 02:20 | ✅ |
51 −| [OPAL-RT Technologies](opalrt.md) | 13 | 0 % | 100 % | 100 % | 2026-08-19 02:10 | ✅ |
52 −| [Logisco](logisco.md) | 12 | 42 % | 100 % | 100 % | 2026-08-19 02:02 | ✅ |
53 −| [KPI Digital](kpidigital.md) | 11 | 0 % | 100 % | 100 % | 2026-08-19 02:02 | ✅ |
46 +| [Broccolini](broccolini.md) | 23 | 0 % | 100 % | 100 % | 2026-08-19 03:41 | ✅ |
47 +| [dcbel](dcbel.md) | 20 | 0 % | 100 % | 100 % | 2026-08-19 03:52 | ✅ |
48 +| [Explorance](explorance.md) | 18 | 0 % | 100 % | 100 % | 2026-08-19 03:56 | ✅ |
49 +| [Produits Labelink](labelink.md) | 17 | 0 % | 100 % | 100 % | 2026-08-19 04:10 | ✅ |
50 +| [OPAL-RT Technologies](opalrt.md) | 13 | 0 % | 100 % | 100 % | 2026-08-19 04:15 | ✅ |
51 +| [Victoria Park Medispa](vicpark.md) | 13 | 0 % | 100 % | 100 % | 2026-08-19 04:25 | ✅ |
52 +| [Logisco](logisco.md) | 12 | 42 % | 100 % | 100 % | 2026-08-19 04:10 | ✅ |
53 +| [KPI Digital](kpidigital.md) | 11 | 0 % | 100 % | 100 % | 2026-08-19 04:10 | ✅ |
54 54 | [Big Bang](bigbang.md) | 8 | 25 % | 100 % | 100 % | 2026-08-19 03:39 | ✅ |
55 −| [Devimco Appartements](devimco.md) | 8 | 12 % | 100 % | 100 % | 2026-08-19 01:46 | ✅ |
56 −| [Robotiq](robotiq.md) | 7 | 0 % | 100 % | 100 % | 2026-08-19 02:12 | ✅ |
57 −| [Triotech](triotech.md) | 6 | 17 % | 100 % | 100 % | 2026-08-19 02:20 | ✅ |
58 −| [North West Rubber](northwestrubber.md) | 6 | 0 % | 100 % | 100 % | 2026-08-19 02:10 | ✅ |
59 −| [Nexapp](nexapp.md) | 6 | 0 % | 100 % | 100 % | 2026-08-19 02:10 | ✅ |
60 −| [Portage CyberTech](portagecybertech.md) | 6 | 17 % | 100 % | 100 % | 2026-08-19 02:10 | ✅ |
61 −| [Toon Boom Animation](toonboom.md) | 6 | 0 % | 100 % | 100 % | 2026-08-19 02:20 | ✅ |
62 −| [MXO](mxo.md) | 6 | 83 % | 100 % | 100 % | 2026-08-19 02:10 | ✅ |
63 −| [Propriétés Scalia](scalia.md) | 5 | 20 % | 100 % | 100 % | 2026-08-19 02:13 | ✅ |
64 −| [Surmesur](surmesur.md) | 5 | 80 % | 100 % | 100 % | 2026-08-19 02:15 | ✅ |
65 −| [EOS Aircraft](eosaircraftinc.md) | 4 | 0 % | 100 % | 100 % | 2026-08-19 01:46 | ✅ |
66 −| [Mitacs](mitacs.md) | 4 | 100 % | 100 % | 100 % | 2026-08-19 02:10 | ✅ |
67 −| [Korem](korem.md) | 4 | 0 % | 100 % | 100 % | 2026-08-19 02:02 | ✅ |
68 −| [Rethink](rethinkcanada.md) | 3 | 0 % | 100 % | 100 % | 2026-08-19 02:11 | ✅ |
69 −| [EVLO (Hydro-Québec)](evlo.md) | 3 | 0 % | 100 % | 100 % | 2026-08-19 01:46 | ✅ |
55 +| [Devimco Appartements](devimco.md) | 8 | 12 % | 100 % | 100 % | 2026-08-19 03:55 | ✅ |
56 +| [Robotiq](robotiq.md) | 7 | 0 % | 100 % | 100 % | 2026-08-19 04:17 | ✅ |
57 +| [MXO](mxo.md) | 6 | 83 % | 100 % | 100 % | 2026-08-19 04:15 | ✅ |
58 +| [Nexapp](nexapp.md) | 6 | 0 % | 100 % | 100 % | 2026-08-19 04:15 | ✅ |
59 +| [North West Rubber](northwestrubber.md) | 6 | 0 % | 100 % | 100 % | 2026-08-19 04:15 | ✅ |
60 +| [Portage CyberTech](portagecybertech.md) | 6 | 17 % | 100 % | 100 % | 2026-08-19 04:16 | ✅ |
61 +| [Toon Boom Animation](toonboom.md) | 6 | 0 % | 100 % | 100 % | 2026-08-19 04:24 | ✅ |
62 +| [Triotech](triotech.md) | 6 | 17 % | 100 % | 100 % | 2026-08-19 04:24 | ✅ |
63 +| [Propriétés Scalia](scalia.md) | 5 | 20 % | 100 % | 100 % | 2026-08-19 04:18 | ✅ |
64 +| [Surmesur](surmesur.md) | 5 | 80 % | 100 % | 100 % | 2026-08-19 04:19 | ✅ |
65 +| [EOS Aircraft](eosaircraftinc.md) | 4 | 0 % | 100 % | 100 % | 2026-08-19 03:55 | ✅ |
66 +| [Korem](korem.md) | 4 | 0 % | 100 % | 100 % | 2026-08-19 04:10 | ✅ |
67 +| [Mitacs](mitacs.md) | 4 | 100 % | 100 % | 100 % | 2026-08-19 04:15 | ✅ |
68 +| [EVLO (Hydro-Québec)](evlo.md) | 3 | 0 % | 100 % | 100 % | 2026-08-19 03:55 | ✅ |
69 +| [Rethink](rethinkcanada.md) | 3 | 0 % | 100 % | 100 % | 2026-08-19 04:16 | ✅ |
70 70 | [Groupe BC2](bc2.md) | 2 | 0 % | 100 % | 100 % | 2026-08-19 03:38 | ✅ |
71 −| [OTT Financial](ott.md) | 2 | 0 % | 100 % | 100 % | 2026-08-19 02:10 | ✅ |
72 −| [Aliments Ouimet-Cordon Bleu inc.](cordonbleu.md) | 2 | 50 % | 100 % | 100 % | 2026-08-19 01:42 | ✅ |
73 −| [Fenêtres Concept](fenetresconcept.md) | 2 | 100 % | 100 % | 100 % | 2026-08-19 01:47 | ✅ |
74 −| [Flare (cybersécurité)](flare.md) | 2 | 50 % | 100 % | 100 % | 2026-08-19 01:47 | ✅ |
75 −| [Ziptrek Tremblant](ziptrekeco.md) | 2 | 100 % | 100 % | 100 % | 2026-08-19 02:30 | ✅ |
76 −| [Poulet Rouge](pouletrouge.md) | 1 | 0 % | 100 % | 100 % | 2026-08-19 02:10 | ✅ |
71 +| [Aliments Ouimet-Cordon Bleu inc.](cordonbleu.md) | 2 | 50 % | 100 % | 100 % | 2026-08-19 03:52 | ✅ |
72 +| [Fenêtres Concept](fenetresconcept.md) | 2 | 100 % | 100 % | 100 % | 2026-08-19 03:56 | ✅ |
73 +| [Flare (cybersécurité)](flare.md) | 2 | 50 % | 100 % | 100 % | 2026-08-19 03:56 | ✅ |
74 +| [OTT Financial](ott.md) | 2 | 0 % | 100 % | 100 % | 2026-08-19 04:15 | ✅ |
75 +| [Ziptrek Tremblant](ziptrekeco.md) | 2 | 100 % | 100 % | 100 % | 2026-08-19 04:35 | ✅ |
76 +| [Poulet Rouge](pouletrouge.md) | 1 | 0 % | 100 % | 100 % | 2026-08-19 04:16 | ✅ |
77 77
78 78 ## Licence / conformité
79 79
modified docs/connecteurs/ats-breezy.md +13 −13
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/ats-breezy.md
7 7 Rôle : Fiche plateforme ATS breezy — mécanique partagée + tableau des 14 tenants
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -37,20 +37,20 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
37 37
38 38 | Employeur | Actives | Salaire | GPS | Mode | Dernier sync | OK |
39 39 |---|---|---|---|---|---|---|
40 −| [Brand Momentum](brandmomentum.md) | 30 | 70 % | 100 % | 0 % | 2026-08-19 01:31 | ✅ |
41 −| [NOVIPRO](novipro.md) | 17 | 0 % | 100 % | 24 % | 2026-08-19 02:10 | ✅ |
42 −| [Réseau Mieux-Être](reseau_mieux_etre.md) | 15 | 0 % | 100 % | 13 % | 2026-08-19 02:11 | ✅ |
43 −| [MicroHabitat](microhabitat.md) | 13 | 100 % | 100 % | 38 % | 2026-08-19 02:10 | ✅ |
44 −| [3 Brasseurs Canada](trois_brasseurs.md) | 11 | 73 % | 100 % | 100 % | 2026-08-19 02:20 | ✅ |
45 −| [EQ3](eq3_ltd.md) | 10 | 60 % | 100 % | 0 % | 2026-08-19 01:46 | ✅ |
46 −| [Nora Pharma](nora_pharma.md) | 9 | 100 % | 89 % | 0 % | 2026-08-19 02:10 | ✅ |
40 +| [Brand Momentum](brandmomentum.md) | 30 | 70 % | 100 % | 0 % | 2026-08-19 03:41 | ✅ |
41 +| [NOVIPRO](novipro.md) | 17 | 0 % | 100 % | 24 % | 2026-08-19 04:15 | ✅ |
42 +| [Réseau Mieux-Être](reseau_mieux_etre.md) | 15 | 0 % | 100 % | 13 % | 2026-08-19 04:16 | ✅ |
43 +| [MicroHabitat](microhabitat.md) | 13 | 100 % | 100 % | 38 % | 2026-08-19 04:15 | ✅ |
44 +| [3 Brasseurs Canada](trois_brasseurs.md) | 11 | 73 % | 100 % | 100 % | 2026-08-19 04:24 | ✅ |
45 +| [EQ3](eq3_ltd.md) | 10 | 60 % | 100 % | 0 % | 2026-08-19 03:55 | ✅ |
47 46 | [ADI - Albert Davidson Industries](adi_albert_davidson_industries.md) | 9 | 100 % | 100 % | 11 % | 2026-08-19 03:31 | ✅ |
48 −| [Luqia (INO)](ino_ca.md) | 7 | 0 % | 100 % | 0 % | 2026-08-19 01:55 | ✅ |
47 +| [Nora Pharma](nora_pharma.md) | 9 | 100 % | 89 % | 0 % | 2026-08-19 04:15 | ✅ |
48 +| [Luqia (INO)](ino_ca.md) | 7 | 0 % | 100 % | 0 % | 2026-08-19 04:03 | ✅ |
49 49 | [Alphanumeric Systems](alphanumeric_systems.md) | 5 | 100 % | 100 % | 40 % | 2026-08-19 03:36 | ✅ |
50 −| [VOXDATA](voxdata.md) | 5 | 100 % | 100 % | 100 % | 2026-08-19 02:20 | ✅ |
51 −| [Vaporus](vaporus_inc.md) | 2 | 100 % | 50 % | 0 % | 2026-08-19 02:20 | ✅ |
52 −| [YouSet](youset.md) | 1 | 0 % | 100 % | 100 % | 2026-08-19 02:30 | ✅ |
53 −| [Canada Global Recruitment](canada_global.md) | 1 | 0 % | 0 % | 0 % | 2026-08-19 01:31 | ✅ |
50 +| [VOXDATA](voxdata.md) | 5 | 100 % | 100 % | 100 % | 2026-08-19 04:25 | ✅ |
51 +| [Vaporus](vaporus_inc.md) | 2 | 100 % | 50 % | 0 % | 2026-08-19 04:25 | ✅ |
52 +| [Canada Global Recruitment](canada_global.md) | 1 | 0 % | 0 % | 0 % | 2026-08-19 03:42 | ✅ |
53 +| [YouSet](youset.md) | 1 | 0 % | 100 % | 100 % | 2026-08-19 04:35 | ✅ |
54 54
55 55 ## Licence / conformité
56 56
added docs/connecteurs/ats-custom.md +45 −0
@@ -0,0 +1,45 @@
1 +<!--
2 +=============================================================================
3 +Job·Ka — Groupe KA
4 +Auteur : Simon-Pierre Boucher
5 +Contact : contact@spboucher.ai
6 +Fichier : docs/connecteurs/ats-custom.md
7 +Rôle : Fiche plateforme ATS custom — mécanique partagée + tableau des 1 tenants
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 + relancer le script pour régénérer.
10 +=============================================================================
11 +-->
12 +
13 +# Plateforme ATS `custom`
14 +
15 +**1 employeurs connectés** via cette plateforme — **31 offres actives**. Module partagé : `jobka/connectors/custom.py` ; un employeur = une sous-classe d'environ 10 lignes.
16 +
17 +## Description & mécanique
18 +
19 +*(module sans docstring)*
20 +
21 +## Accès
22 +
23 +- **Pagination** : flux unique (une requête liste)
24 +- **Backend** : GET/POST direct `requests` (throttlé, User-Agent `JobKaBot/1.0` identifié)
25 +- **Auth** : aucune — API/pages publiques du site carrières.
26 +
27 +## Tenants connectés
28 +
29 +| Employeur | Actives | Salaire | GPS | Mode | Dernier sync | OK |
30 +|---|---|---|---|---|---|---|
31 +| [Industries Lassonde](lassonde.md) | 31 | 0 % | 0 % | 0 % | 2026-08-19 04:49 | ✅ |
32 +
33 +## Licence / conformité
34 +
35 +**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 l'employeur » 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.
36 +
37 +## Historique
38 +
39 +**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 :
40 +- `fd4bfc8` qualité lieux : rejet des villes hors Québec, bâtiments McGill → Montréal ;
41 +- `5a66f48` +59 employeurs (sondage massif d'ATS + détection de pages carrières) ;
42 +- `4917d57` 8 nouveaux ATS (Taleo, Njoyn, UltiPro, iCIMS, SuccessFactors, ADP WFN, Digital Recruiters, Workland) + 23 employeurs publics/parapublics ;
43 +- `f6e7571` portails Guichet-Emplois, Jobillico, Espresso-Jobs — l'offre directe gagne toujours la canonique (dédup) ;
44 +- `744cbfc` badge « Offre directe », stats directes/portails, dépôt direct employeurs ;
45 +- `1604ff9` reprise sur coupure WAF Guichet-Emplois (retry + acquis partiel).
modified docs/connecteurs/ats-digitalrecruiters.md +5 −4
@@ -4,15 +4,15 @@ Job·Ka — Groupe KA
4 4 Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/ats-digitalrecruiters.md
7 −Rôle : Fiche plateforme ATS digitalrecruiters — mécanique partagée + tableau des 1 tenants
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
7 +Rôle : Fiche plateforme ATS digitalrecruiters — mécanique partagée + tableau des 2 tenants
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
12 12
13 13 # Plateforme ATS `digitalrecruiters`
14 14
15 −**1 employeurs connectés** via cette plateforme — **41 offres actives**. Module partagé : `jobka/connectors/digitalrecruiters.py` ; un employeur = une sous-classe d'environ 10 lignes.
15 +**2 employeurs connectés** via cette plateforme — **68 offres actives**. Module partagé : `jobka/connectors/digitalrecruiters.py` ; un employeur = une sous-classe d'environ 10 lignes.
16 16
17 17 ## Description & mécanique
18 18
@@ -36,7 +36,8 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
36 36
37 37 | Employeur | Actives | Salaire | GPS | Mode | Dernier sync | OK |
38 38 |---|---|---|---|---|---|---|
39 −| [Santé Québec](sante_quebec.md) | 41 | 98 % | 68 % | 0 % | 2026-08-19 02:13 | ✅ |
39 +| [Santé Québec](sante_quebec.md) | 41 | 98 % | 68 % | 0 % | 2026-08-19 04:17 | ✅ |
40 +| [CSS des Découvreurs](cssdd.md) | 27 | 78 % | 0 % | 0 % | 2026-08-19 05:09 | ✅ |
40 41
41 42 ## Licence / conformité
42 43
modified docs/connecteurs/ats-greenhouse.md +20 −21
@@ -4,15 +4,15 @@ Job·Ka — Groupe KA
4 4 Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/ats-greenhouse.md
7 −Rôle : Fiche plateforme ATS greenhouse — mécanique partagée + tableau des 20 tenants
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
7 +Rôle : Fiche plateforme ATS greenhouse — mécanique partagée + tableau des 19 tenants
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
12 12
13 13 # Plateforme ATS `greenhouse`
14 14
15 −**20 employeurs connectés** via cette plateforme — **192 offres actives**. Module partagé : `jobka/connectors/greenhouse.py` ; un employeur = une sous-classe d'environ 10 lignes.
15 +**19 employeurs connectés** via cette plateforme — **192 offres actives**. Module partagé : `jobka/connectors/greenhouse.py` ; un employeur = une sous-classe d'environ 10 lignes.
16 16
17 17 ## Description & mécanique
18 18
@@ -37,26 +37,25 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
37 37
38 38 | Employeur | Actives | Salaire | GPS | Mode | Dernier sync | OK |
39 39 |---|---|---|---|---|---|---|
40 −| [Levio](levio.md) | 42 | 0 % | 100 % | 0 % | 2026-08-19 02:02 | ✅ |
40 +| [Levio](levio.md) | 42 | 0 % | 100 % | 0 % | 2026-08-19 04:10 | ✅ |
41 41 | [AppDirect](appdirect.md) | 24 | 25 % | 100 % | 0 % | 2026-08-19 03:36 | ✅ |
42 −| [mthree](mthreerecruitingportal.md) | 22 | 0 % | 100 % | 23 % | 2026-08-19 02:10 | ✅ |
43 −| [Vooban](vooban.md) | 18 | 0 % | 100 % | 0 % | 2026-08-19 02:20 | ✅ |
44 −| [Valtech](valtech.md) | 15 | 13 % | 100 % | 0 % | 2026-08-19 02:20 | ✅ |
45 −| [Sid Lee](sidlee.md) | 13 | 0 % | 100 % | 0 % | 2026-08-19 02:14 | ✅ |
46 −| [SIA Innovations](siainnovationsinc.md) | 9 | 44 % | 100 % | 78 % | 2026-08-19 02:14 | ✅ |
42 +| [mthree](mthreerecruitingportal.md) | 22 | 0 % | 100 % | 23 % | 2026-08-19 04:15 | ✅ |
43 +| [Vooban](vooban.md) | 18 | 0 % | 100 % | 0 % | 2026-08-19 04:25 | ✅ |
44 +| [Valtech](valtech.md) | 15 | 13 % | 100 % | 0 % | 2026-08-19 04:25 | ✅ |
45 +| [Sid Lee](sidlee.md) | 13 | 0 % | 100 % | 0 % | 2026-08-19 04:18 | ✅ |
47 46 | [AlayaCare](alayacare.md) | 9 | 0 % | 100 % | 0 % | 2026-08-19 03:36 | ✅ |
48 −| [GURUS Solutions](gurussolutions.md) | 8 | 0 % | 100 % | 0 % | 2026-08-19 01:54 | ✅ |
49 −| [Poka](poka.md) | 5 | 0 % | 100 % | 0 % | 2026-08-19 02:10 | ✅ |
50 −| [TandemLaunch](tandemlaunch.md) | 5 | 0 % | 100 % | 0 % | 2026-08-19 02:15 | ✅ |
51 −| [Lush Cosmétiques](lush.md) | 5 | 100 % | 100 % | 0 % | 2026-08-19 02:02 | ✅ |
52 −| [Broadsign](broadsign.md) | 4 | 0 % | 100 % | 100 % | 2026-08-19 01:31 | ✅ |
53 −| [Vaco](vaco.md) | 4 | 75 % | 100 % | 0 % | 2026-08-19 02:20 | ✅ |
54 −| [Gearbox Studio Québec](gearboxquebec.md) | 3 | 0 % | 100 % | 0 % | 2026-08-19 01:47 | ✅ |
55 −| [On Running](onrunning.md) | 2 | 0 % | 100 % | 0 % | 2026-08-19 02:10 | ✅ |
56 −| [VML Canada](vmlcanadaen.md) | 2 | 50 % | 100 % | 0 % | 2026-08-19 02:20 | ✅ |
57 −| [NATIONAL](national.md) | 1 | 0 % | 100 % | 0 % | 2026-08-19 02:10 | ✅ |
58 −| [Samsara](samsara.md) | 1 | 100 % | 100 % | 100 % | 2026-08-19 02:13 | ✅ |
59 −| [TTC Global](ttcglobal.md) | 0 | — | — | — | 2026-08-19 02:20 | ✅ |
47 +| [SIA Innovations](siainnovationsinc.md) | 9 | 44 % | 100 % | 78 % | 2026-08-19 04:18 | ✅ |
48 +| [GURUS Solutions](gurussolutions.md) | 8 | 0 % | 100 % | 0 % | 2026-08-19 04:02 | ✅ |
49 +| [Lush Cosmétiques](lush.md) | 5 | 100 % | 100 % | 0 % | 2026-08-19 04:10 | ✅ |
50 +| [Poka](poka.md) | 5 | 0 % | 100 % | 0 % | 2026-08-19 04:16 | ✅ |
51 +| [TandemLaunch](tandemlaunch.md) | 5 | 0 % | 100 % | 0 % | 2026-08-19 04:19 | ✅ |
52 +| [Broadsign](broadsign.md) | 4 | 0 % | 100 % | 100 % | 2026-08-19 03:41 | ✅ |
53 +| [Vaco](vaco.md) | 4 | 75 % | 100 % | 0 % | 2026-08-19 04:24 | ✅ |
54 +| [Gearbox Studio Québec](gearboxquebec.md) | 3 | 0 % | 100 % | 0 % | 2026-08-19 03:56 | ✅ |
55 +| [On Running](onrunning.md) | 2 | 0 % | 100 % | 0 % | 2026-08-19 04:15 | ✅ |
56 +| [VML Canada](vmlcanadaen.md) | 2 | 50 % | 100 % | 0 % | 2026-08-19 04:25 | ✅ |
57 +| [NATIONAL](national.md) | 1 | 0 % | 100 % | 0 % | 2026-08-19 04:15 | ✅ |
58 +| [Samsara](samsara.md) | 1 | 100 % | 100 % | 100 % | 2026-08-19 04:17 | ✅ |
60 59
61 60 ## Licence / conformité
62 61
modified docs/connecteurs/ats-icims.md +9 −8
@@ -4,15 +4,15 @@ Job·Ka — Groupe KA
4 4 Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/ats-icims.md
7 −Rôle : Fiche plateforme ATS icims — mécanique partagée + tableau des 5 tenants
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
7 +Rôle : Fiche plateforme ATS icims — mécanique partagée + tableau des 6 tenants
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
12 12
13 13 # Plateforme ATS `icims`
14 14
15 −**5 employeurs connectés** via cette plateforme — **57 offres actives**. Module partagé : `jobka/connectors/icims.py` ; un employeur = une sous-classe d'environ 10 lignes.
15 +**6 employeurs connectés** via cette plateforme — **60 offres actives**. Module partagé : `jobka/connectors/icims.py` ; un employeur = une sous-classe d'environ 10 lignes.
16 16
17 17 ## Description & mécanique
18 18
@@ -39,11 +39,12 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
39 39
40 40 | Employeur | Actives | Salaire | GPS | Mode | Dernier sync | OK |
41 41 |---|---|---|---|---|---|---|
42 −| [McCarthy Tétrault](mccarthy_tetrault.md) | 22 | 0 % | 100 % | 9 % | 2026-08-19 02:05 | ✅ |
43 −| [CAPREIT](capreit.md) | 10 | 0 % | 100 % | 0 % | 2026-08-19 01:31 | ✅ |
44 −| [EDF Renouvelables Canada](edf_renouvelables.md) | 9 | 78 % | 67 % | 67 % | 2026-08-19 01:46 | ✅ |
45 −| [Omni Hôtel Mont-Royal](omni_hotels_horaire.md) | 8 | 88 % | 100 % | 0 % | 2026-08-19 02:10 | ✅ |
46 −| [Omni Hôtel Mont-Royal](omni_hotels_gestion.md) | 8 | 88 % | 100 % | 0 % | 2026-08-19 02:10 | ✅ |
42 +| [McCarthy Tétrault](mccarthy_tetrault.md) | 22 | 0 % | 100 % | 9 % | 2026-08-19 04:11 | ✅ |
43 +| [CAPREIT](capreit.md) | 10 | 0 % | 100 % | 0 % | 2026-08-19 03:42 | ✅ |
44 +| [EDF Renouvelables Canada](edf_renouvelables.md) | 9 | 78 % | 67 % | 67 % | 2026-08-19 03:55 | ✅ |
45 +| [Omni Hôtel Mont-Royal](omni_hotels_gestion.md) | 8 | 88 % | 100 % | 0 % | 2026-08-19 04:15 | ✅ |
46 +| [Omni Hôtel Mont-Royal](omni_hotels_horaire.md) | 8 | 88 % | 100 % | 0 % | 2026-08-19 04:15 | ✅ |
47 +| [Placements Mackenzie (Power/IGM)](mackenzie.md) | 3 | 100 % | 0 % | 0 % | 2026-08-19 04:49 | ✅ |
47 48
48 49 ## Licence / conformité
49 50
modified docs/connecteurs/ats-lever.md +17 −17
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/ats-lever.md
7 7 Rôle : Fiche plateforme ATS lever — mécanique partagée + tableau des 19 tenants
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -37,25 +37,25 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
37 37
38 38 | Employeur | Actives | Salaire | GPS | Mode | Dernier sync | OK |
39 39 |---|---|---|---|---|---|---|
40 −| [Go RH](gorh.md) | 266 | 18 % | 98 % | 98 % | 2026-08-19 01:48 | ✅ |
40 +| [Go RH](gorh.md) | 266 | 18 % | 98 % | 98 % | 2026-08-19 03:56 | ✅ |
41 41 | [Behaviour Interactif](bhvr.md) | 39 | 0 % | 100 % | 100 % | 2026-08-19 03:39 | ✅ |
42 −| [Cirque du Soleil](cirquedusoleil.md) | 22 | 0 % | 86 % | 100 % | 2026-08-19 01:41 | ✅ |
43 −| [Xsolla](xsolla.md) | 21 | 95 % | 95 % | 100 % | 2026-08-19 02:30 | ✅ |
44 −| [OSEDEA](osedea.md) | 18 | 0 % | 100 % | 100 % | 2026-08-19 02:10 | ✅ |
45 −| [VO2 Group](vo2_group.md) | 17 | 6 % | 100 % | 100 % | 2026-08-19 02:20 | ✅ |
46 −| [Spiria](spiria.md) | 12 | 58 % | 100 % | 100 % | 2026-08-19 02:14 | ✅ |
47 −| [TSMG](tsmg.md) | 11 | 0 % | 100 % | 100 % | 2026-08-19 02:20 | ✅ |
48 −| [Mirego](mirego.md) | 11 | 0 % | 100 % | 100 % | 2026-08-19 02:10 | ✅ |
49 −| [EQ Bank](eqbank.md) | 6 | 50 % | 50 % | 100 % | 2026-08-19 01:46 | ✅ |
50 −| [US Mobile](usmobile.md) | 6 | 100 % | 100 % | 100 % | 2026-08-19 02:20 | ✅ |
51 −| [Distro](distro.md) | 5 | 100 % | 100 % | 100 % | 2026-08-19 01:46 | ✅ |
42 +| [Cirque du Soleil](cirquedusoleil.md) | 22 | 0 % | 86 % | 100 % | 2026-08-19 03:51 | ✅ |
43 +| [Xsolla](xsolla.md) | 21 | 95 % | 95 % | 100 % | 2026-08-19 04:35 | ✅ |
44 +| [OSEDEA](osedea.md) | 18 | 0 % | 100 % | 100 % | 2026-08-19 04:15 | ✅ |
45 +| [VO2 Group](vo2_group.md) | 17 | 6 % | 100 % | 100 % | 2026-08-19 04:25 | ✅ |
46 +| [Spiria](spiria.md) | 12 | 58 % | 100 % | 100 % | 2026-08-19 04:18 | ✅ |
47 +| [Mirego](mirego.md) | 11 | 0 % | 100 % | 100 % | 2026-08-19 04:15 | ✅ |
48 +| [TSMG](tsmg.md) | 11 | 0 % | 100 % | 100 % | 2026-08-19 04:24 | ✅ |
49 +| [EQ Bank](eqbank.md) | 6 | 50 % | 50 % | 100 % | 2026-08-19 03:55 | ✅ |
50 +| [US Mobile](usmobile.md) | 6 | 100 % | 100 % | 100 % | 2026-08-19 04:24 | ✅ |
52 51 | [Aviya Aerospace Systems](aviyatech.md) | 5 | 0 % | 100 % | 100 % | 2026-08-19 03:37 | ✅ |
53 −| [Mistplay](mistplay.md) | 3 | 33 % | 100 % | 100 % | 2026-08-19 02:10 | ✅ |
54 −| [DiliTrust](dilitrust.md) | 3 | 0 % | 100 % | 100 % | 2026-08-19 01:46 | ✅ |
55 −| [Dulcedo Management](dulcedo.md) | 3 | 33 % | 67 % | 100 % | 2026-08-19 01:46 | ✅ |
56 −| [Potloc](potloc.md) | 2 | 0 % | 100 % | 100 % | 2026-08-19 02:10 | ✅ |
57 −| [Spreedly](spreedly.md) | 2 | 0 % | 100 % | 100 % | 2026-08-19 02:14 | ✅ |
52 +| [Distro](distro.md) | 5 | 100 % | 100 % | 100 % | 2026-08-19 03:55 | ✅ |
53 +| [DiliTrust](dilitrust.md) | 3 | 0 % | 100 % | 100 % | 2026-08-19 03:55 | ✅ |
54 +| [Dulcedo Management](dulcedo.md) | 3 | 33 % | 67 % | 100 % | 2026-08-19 03:55 | ✅ |
55 +| [Mistplay](mistplay.md) | 3 | 33 % | 100 % | 100 % | 2026-08-19 04:15 | ✅ |
58 56 | [Alimentiv](alimentiv_2.md) | 2 | 100 % | 50 % | 100 % | 2026-08-19 03:36 | ✅ |
57 +| [Potloc](potloc.md) | 2 | 0 % | 100 % | 100 % | 2026-08-19 04:16 | ✅ |
58 +| [Spreedly](spreedly.md) | 2 | 0 % | 100 % | 100 % | 2026-08-19 04:18 | ✅ |
59 59
60 60 ## Licence / conformité
61 61
modified docs/connecteurs/ats-njoyn.md +10 −8
@@ -4,15 +4,15 @@ Job·Ka — Groupe KA
4 4 Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/ats-njoyn.md
7 −Rôle : Fiche plateforme ATS njoyn — mécanique partagée + tableau des 5 tenants
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
7 +Rôle : Fiche plateforme ATS njoyn — mécanique partagée + tableau des 6 tenants
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
12 12
13 13 # Plateforme ATS `njoyn`
14 14
15 −**5 employeurs connectés** via cette plateforme — **117 offres actives**. Module partagé : `jobka/connectors/njoyn.py` ; un employeur = une sous-classe d'environ 10 lignes.
15 +**6 employeurs connectés** via cette plateforme — **956 offres actives**. Module partagé : `jobka/connectors/njoyn.py` ; un employeur = une sous-classe d'environ 10 lignes.
16 16
17 17 ## Description & mécanique
18 18
@@ -42,11 +42,12 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
42 42
43 43 | Employeur | Actives | Salaire | GPS | Mode | Dernier sync | OK |
44 44 |---|---|---|---|---|---|---|
45 −| [Santé Québec — Montréal](sante_montreal.md) | 50 | 100 % | 100 % | 2 % | 2026-08-19 02:13 | ✅ |
46 −| [Réseau de transport de la Capitale](rtc_quebec.md) | 18 | 0 % | 0 % | 0 % | 2026-08-19 02:13 | ✅ |
47 −| [Ville de Gatineau](ville_gatineau.md) | 17 | 94 % | 0 % | 0 % | 2026-08-19 02:20 | ✅ |
48 −| [Ville de Terrebonne](ville_terrebonne.md) | 16 | 94 % | 0 % | 0 % | 2026-08-19 02:20 | ✅ |
49 −| [Société de transport de Laval](stl_laval.md) | 16 | 31 % | 0 % | 0 % | 2026-08-19 02:14 | ✅ |
45 +| [Santé Québec — Montréal](sante_montreal.md) | 762 | 97 % | 8 % | 1 % | 2026-08-19 05:30 | ✅ |
46 +| [CGI](cgi.md) | 127 | 0 % | 0 % | 0 % | 2026-08-19 05:11 | ✅ |
47 +| [Réseau de transport de la Capitale](rtc_quebec.md) | 18 | 0 % | 0 % | 0 % | 2026-08-19 04:17 | ✅ |
48 +| [Ville de Gatineau](ville_gatineau.md) | 17 | 94 % | 0 % | 0 % | 2026-08-19 04:25 | ✅ |
49 +| [Société de transport de Laval](stl_laval.md) | 16 | 31 % | 0 % | 0 % | 2026-08-19 04:18 | ✅ |
50 +| [Ville de Terrebonne](ville_terrebonne.md) | 16 | 94 % | 0 % | 0 % | 2026-08-19 04:25 | ✅ |
50 51
51 52 ## Licence / conformité
52 53
@@ -66,5 +67,6 @@ Certains domaines de cette plateforme sont servis derrière un gestionnaire anti
66 67
67 68 Commits touchant `jobka/connectors/njoyn.py` :
68 69
70 +- `86b0d0b` 2026-08-19 Famille Workland réécrite sur l'API JSON publique du frontal Atlas (jobs-prod published-external + default-profiles) : descriptions complètes fr/en, lieux géocodés, dates, mode de travail — 2 requêtes par cycle pour TOUT le réseau. Nouveau connecteur réseau atlas_workland (~80 employeurs QC : CSS scolaires, cégeps, CIUSSS Ouest-de-l'Île, Santé Québec Côte-Nord, ICM, STQ, UQTR, INRS… ; 1 238 offres QC). Connecteur cssdm retiré (couvert par le réseau), fixture remplacée par atlas_workland (sous-ensemble rejouable). Corrige la limite « workland description 0 % ».
69 71 - `49067dd` 2026-08-19 Connecteurs phase 2 — correctifs et enrichissement champ par champ. Correctifs : villes SuccessFactors à trait d'union (préfixe municipal MAMH sur le slug, bogue « St »/« Pointe »), colonne date Taleo = date LIMITE chez agnico_eagle (+ garde-fou date future). Enrichissement : SmartRecruiters experienceLevel/function/industry/language/refNumber (lignes de liste, zéro requête), BambooHR locationType→work_mode, Breezy is_remote/logo_url/streetAddress, JSON-LD logo/industry/educationRequirements/skills (portails+icims+DR), Ashby applyUrl + composantes Bonus/Equity/Commission, Lever applyUrl + blocs opening/additional + allLocations, Workable application_url + function/industry, Recruitee careers_apply_url + description FR (translations) + expérience/scolarité + heures/sem, Greenhouse language + requisition_id, Workday externalUrl→apply_url + work_mode via facette Remote Type + clé cache v2, Guichet-Emplois avantages structurés + langue de travail, njoyn apply_url en colonne ; secours cache périmé quand le budget détail est épuisé (plus de fiches vidées)
70 72 - `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
modified docs/connecteurs/ats-recruitee.md +7 −7
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/ats-recruitee.md
7 7 Rôle : Fiche plateforme ATS recruitee — mécanique partagée + tableau des 11 tenants
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -39,14 +39,14 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
39 39 | Employeur | Actives | Salaire | GPS | Mode | Dernier sync | OK |
40 40 |---|---|---|---|---|---|---|
41 41 | [ANCIA Personnel](anciapersonnelinc.md) | 59 | 10 % | 100 % | 100 % | 2026-08-19 03:36 | ✅ |
42 −| [Huawei Canada](huaweicanada.md) | 18 | 0 % | 100 % | 100 % | 2026-08-19 01:54 | ✅ |
43 −| [LG2](lg2.md) | 14 | 7 % | 100 % | 100 % | 2026-08-19 02:02 | ✅ |
44 −| [Framestore](framestore.md) | 9 | 0 % | 100 % | 100 % | 2026-08-19 01:47 | ✅ |
45 −| [Petal](petalmd.md) | 7 | 14 % | 100 % | 100 % | 2026-08-19 02:10 | ✅ |
42 +| [Huawei Canada](huaweicanada.md) | 18 | 0 % | 100 % | 100 % | 2026-08-19 04:02 | ✅ |
43 +| [LG2](lg2.md) | 14 | 7 % | 100 % | 100 % | 2026-08-19 04:10 | ✅ |
44 +| [Framestore](framestore.md) | 9 | 0 % | 100 % | 100 % | 2026-08-19 03:56 | ✅ |
46 45 | [AJ Walter Aviation](ajwalter.md) | 7 | 0 % | 100 % | 100 % | 2026-08-19 03:36 | ✅ |
46 +| [Petal](petalmd.md) | 7 | 14 % | 100 % | 100 % | 2026-08-19 04:16 | ✅ |
47 47 | [Adèle Express](adeleexpressfr.md) | 5 | 60 % | 100 % | 100 % | 2026-08-19 03:31 | ✅ |
48 −| [Médialo](medialo.md) | 5 | 0 % | 80 % | 100 % | 2026-08-19 02:10 | ✅ |
49 −| [Squeeze Studio Animation](squeezestudio.md) | 3 | 0 % | 67 % | 100 % | 2026-08-19 02:14 | ✅ |
48 +| [Médialo](medialo.md) | 5 | 0 % | 80 % | 100 % | 2026-08-19 04:15 | ✅ |
49 +| [Squeeze Studio Animation](squeezestudio.md) | 3 | 0 % | 67 % | 100 % | 2026-08-19 04:18 | ✅ |
50 50 | [BIXI Montréal](biximontreal.md) | 2 | 50 % | 100 % | 100 % | 2026-08-19 03:39 | ✅ |
51 51 | [Amilia](amilia.md) | 1 | 0 % | 0 % | 100 % | 2026-08-19 03:36 | ✅ |
52 52
modified docs/connecteurs/ats-smartrecruiters.md +28 −28
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/ats-smartrecruiters.md
7 7 Rôle : Fiche plateforme ATS smartrecruiters — mécanique partagée + tableau des 28 tenants
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -41,34 +41,34 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
41 41
42 42 | Employeur | Actives | Salaire | GPS | Mode | Dernier sync | OK |
43 43 |---|---|---|---|---|---|---|
44 −| [CIMA+](cima2.md) | 221 | 0 % | 100 % | 84 % | 2026-08-19 01:33 | ✅ |
45 −| [Reitmans](reitmanscanadalteltd.md) | 138 | 22 % | 100 % | 29 % | 2026-08-19 02:11 | ✅ |
46 −| [Ubisoft](ubisoft.md) | 123 | 0 % | 100 % | 2 % | 2026-08-19 02:20 | ✅ |
47 −| [Vidéotron](videotron.md) | 80 | 14 % | 100 % | 40 % | 2026-08-19 02:20 | ✅ |
48 −| [EMCO](emcocorporation.md) | 67 | 48 % | 100 % | 22 % | 2026-08-19 01:46 | ✅ |
49 −| [Groupe Canam](groupecanam.md) | 65 | 66 % | 98 % | 26 % | 2026-08-19 01:48 | ✅ |
50 −| [Techo-Bloc](techo_bloc.md) | 40 | 50 % | 100 % | 20 % | 2026-08-19 02:20 | ✅ |
51 −| [QSL](qsl.md) | 37 | 38 % | 100 % | 0 % | 2026-08-19 02:11 | ✅ |
52 −| [Transat A.T.](transatat1.md) | 36 | 6 % | 100 % | 56 % | 2026-08-19 02:20 | ✅ |
53 −| [MEDFAR Solutions Cliniques](medfar.md) | 23 | 0 % | 100 % | 96 % | 2026-08-19 02:10 | ✅ |
54 −| [Rodeo FX](rodeofx.md) | 20 | 0 % | 100 % | 10 % | 2026-08-19 02:12 | ✅ |
55 −| [Vosker](vosker.md) | 19 | 0 % | 100 % | 89 % | 2026-08-19 02:20 | ✅ |
56 −| [Gameloft](gameloft.md) | 14 | 0 % | 100 % | 71 % | 2026-08-19 01:47 | ✅ |
57 −| [Talan](talan.md) | 13 | 0 % | 100 % | 85 % | 2026-08-19 02:15 | ✅ |
58 −| [People Can Fly](peoplecanfly.md) | 10 | 0 % | 100 % | 100 % | 2026-08-19 02:10 | ✅ |
59 −| [J'Excelle](jexcelleinc.md) | 9 | 0 % | 100 % | 11 % | 2026-08-19 01:56 | ✅ |
60 −| [CF Montréal](cfmontreal.md) | 8 | 0 % | 100 % | 0 % | 2026-08-19 01:32 | ✅ |
61 −| [Mattel (Mega Bloks)](mattelinc.md) | 6 | 0 % | 100 % | 17 % | 2026-08-19 02:04 | ✅ |
44 +| [CIMA+](cima2.md) | 221 | 0 % | 100 % | 84 % | 2026-08-19 03:44 | ✅ |
45 +| [Reitmans](reitmanscanadalteltd.md) | 138 | 22 % | 100 % | 29 % | 2026-08-19 04:16 | ✅ |
46 +| [Ubisoft](ubisoft.md) | 123 | 0 % | 100 % | 2 % | 2026-08-19 04:24 | ✅ |
47 +| [Vidéotron](videotron.md) | 80 | 14 % | 100 % | 40 % | 2026-08-19 04:25 | ✅ |
48 +| [EMCO](emcocorporation.md) | 67 | 48 % | 100 % | 22 % | 2026-08-19 03:55 | ✅ |
49 +| [Groupe Canam](groupecanam.md) | 65 | 66 % | 98 % | 26 % | 2026-08-19 03:56 | ✅ |
50 +| [Techo-Bloc](techo_bloc.md) | 40 | 50 % | 100 % | 20 % | 2026-08-19 04:24 | ✅ |
51 +| [QSL](qsl.md) | 37 | 38 % | 100 % | 0 % | 2026-08-19 04:16 | ✅ |
52 +| [Transat A.T.](transatat1.md) | 36 | 6 % | 100 % | 56 % | 2026-08-19 04:24 | ✅ |
53 +| [MEDFAR Solutions Cliniques](medfar.md) | 23 | 0 % | 100 % | 96 % | 2026-08-19 04:15 | ✅ |
54 +| [Rodeo FX](rodeofx.md) | 20 | 0 % | 100 % | 10 % | 2026-08-19 04:17 | ✅ |
55 +| [Vosker](vosker.md) | 19 | 0 % | 100 % | 89 % | 2026-08-19 04:25 | ✅ |
56 +| [Gameloft](gameloft.md) | 14 | 0 % | 100 % | 71 % | 2026-08-19 03:56 | ✅ |
57 +| [Talan](talan.md) | 13 | 0 % | 100 % | 85 % | 2026-08-19 04:19 | ✅ |
58 +| [People Can Fly](peoplecanfly.md) | 10 | 0 % | 100 % | 100 % | 2026-08-19 04:16 | ✅ |
59 +| [J'Excelle](jexcelleinc.md) | 9 | 0 % | 100 % | 11 % | 2026-08-19 04:04 | ✅ |
60 +| [CF Montréal](cfmontreal.md) | 8 | 0 % | 100 % | 0 % | 2026-08-19 03:42 | ✅ |
61 +| [Mattel (Mega Bloks)](mattelinc.md) | 6 | 0 % | 100 % | 17 % | 2026-08-19 04:11 | ✅ |
62 62 | [Astucemedia](astucemedia.md) | 5 | 0 % | 100 % | 40 % | 2026-08-19 03:36 | ✅ |
63 −| [HoYoverse](hoyoverse.md) | 4 | 0 % | 100 % | 100 % | 2026-08-19 01:54 | ✅ |
64 −| [ServiceNow](servicenow.md) | 2 | 0 % | 100 % | 100 % | 2026-08-19 02:14 | ✅ |
65 −| [Venture Media](venturemedia.md) | 2 | 100 % | 100 % | 50 % | 2026-08-19 02:20 | ✅ |
66 −| [Playmind](playmind.md) | 2 | 0 % | 100 % | 0 % | 2026-08-19 02:10 | ✅ |
67 −| [Sparkgrid](sparkgrid.md) | 1 | 0 % | 100 % | 0 % | 2026-08-19 02:14 | ✅ |
68 −| [Xplornet](xplornet.md) | 1 | 0 % | 100 % | 0 % | 2026-08-19 02:30 | ✅ |
69 −| [GoLogic](gologic.md) | 1 | 0 % | 100 % | 0 % | 2026-08-19 01:48 | ✅ |
70 −| [Stelpro](stelpro.md) | 1 | 0 % | 100 % | 0 % | 2026-08-19 02:14 | ✅ |
71 −| [Talsom](talsom.md) | 1 | 0 % | 100 % | 0 % | 2026-08-19 02:15 | ✅ |
63 +| [HoYoverse](hoyoverse.md) | 4 | 0 % | 100 % | 100 % | 2026-08-19 04:02 | ✅ |
64 +| [Playmind](playmind.md) | 2 | 0 % | 100 % | 0 % | 2026-08-19 04:16 | ✅ |
65 +| [ServiceNow](servicenow.md) | 2 | 0 % | 100 % | 100 % | 2026-08-19 04:18 | ✅ |
66 +| [Venture Media](venturemedia.md) | 2 | 100 % | 100 % | 50 % | 2026-08-19 04:25 | ✅ |
67 +| [GoLogic](gologic.md) | 1 | 0 % | 100 % | 0 % | 2026-08-19 03:56 | ✅ |
68 +| [Sparkgrid](sparkgrid.md) | 1 | 0 % | 100 % | 0 % | 2026-08-19 04:18 | ✅ |
69 +| [Stelpro](stelpro.md) | 1 | 0 % | 100 % | 0 % | 2026-08-19 04:18 | ✅ |
70 +| [Talsom](talsom.md) | 1 | 0 % | 100 % | 0 % | 2026-08-19 04:19 | ✅ |
71 +| [Xplornet](xplornet.md) | 1 | 0 % | 100 % | 0 % | 2026-08-19 04:35 | ✅ |
72 72
73 73 ## Licence / conformité
74 74
modified docs/connecteurs/ats-successfactors.md +8 −6
@@ -4,15 +4,15 @@ Job·Ka — Groupe KA
4 4 Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/ats-successfactors.md
7 −Rôle : Fiche plateforme ATS successfactors — mécanique partagée + tableau des 3 tenants
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
7 +Rôle : Fiche plateforme ATS successfactors — mécanique partagée + tableau des 5 tenants
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
12 12
13 13 # Plateforme ATS `successfactors`
14 14
15 −**3 employeurs connectés** via cette plateforme — **1053 offres actives**. Module partagé : `jobka/connectors/successfactors.py` ; un employeur = une sous-classe d'environ 10 lignes.
15 +**5 employeurs connectés** via cette plateforme — **1224 offres actives**. Module partagé : `jobka/connectors/successfactors.py` ; un employeur = une sous-classe d'environ 10 lignes.
16 16
17 17 ## Description & mécanique
18 18
@@ -38,9 +38,11 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
38 38
39 39 | Employeur | Actives | Salaire | GPS | Mode | Dernier sync | OK |
40 40 |---|---|---|---|---|---|---|
41 −| [Bombardier](bombardier.md) | 847 | 0 % | 100 % | 88 % | 2026-08-19 01:31 | ✅ |
42 −| [Domtar](domtar.md) | 106 | 0 % | 99 % | 0 % | 2026-08-19 01:46 | ✅ |
43 −| [Cascades](cascades.md) | 100 | 77 % | 100 % | 12 % | 2026-08-19 01:31 | ✅ |
41 +| [Bombardier](bombardier.md) | 847 | 0 % | 100 % | 88 % | 2026-08-19 03:41 | ✅ |
42 +| [Domtar](domtar.md) | 106 | 0 % | 99 % | 0 % | 2026-08-19 03:55 | ✅ |
43 +| [Deloitte Canada](deloitte.md) | 105 | 96 % | 0 % | 98 % | 2026-08-19 04:48 | ✅ |
44 +| [Cascades](cascades.md) | 100 | 77 % | 100 % | 12 % | 2026-08-19 03:42 | ✅ |
45 +| [Hydro-Québec](hydroquebec.md) | 66 | 61 % | 0 % | 0 % | 2026-08-19 04:48 | ✅ |
44 46
45 47 ## Licence / conformité
46 48
modified docs/connecteurs/ats-taleo.md +2 −2
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/ats-taleo.md
7 7 Rôle : Fiche plateforme ATS taleo — mécanique partagée + tableau des 4 tenants
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -45,7 +45,7 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
45 45
46 46 | Employeur | Actives | Salaire | GPS | Mode | Dernier sync | OK |
47 47 |---|---|---|---|---|---|---|
48 −| [CIUSSS de l'Est-de-l'Île-de-Montréal](ciusss_est_montreal.md) | 23 | 0 % | 100 % | 0 % | 2026-08-19 01:41 | ✅ |
48 +| [CIUSSS de l'Est-de-l'Île-de-Montréal](ciusss_est_montreal.md) | 23 | 0 % | 100 % | 0 % | 2026-08-19 03:51 | ✅ |
49 49 | [Agnico Eagle Mines](agnico_eagle.md) | 20 | 0 % | 100 % | 0 % | 2026-08-19 03:31 | ✅ |
50 50 | [Bell Textron Canada](bell_textron.md) | 15 | 0 % | 100 % | 0 % | 2026-08-19 03:38 | ✅ |
51 51 | [Bayshore HealthCare](bayshore.md) | 13 | 0 % | 100 % | 0 % | 2026-08-19 03:38 | ✅ |
added docs/connecteurs/ats-taleo_tbe.md +72 −0
@@ -0,0 +1,72 @@
1 +<!--
2 +=============================================================================
3 +Job·Ka — Groupe KA
4 +Auteur : Simon-Pierre Boucher
5 +Contact : contact@spboucher.ai
6 +Fichier : docs/connecteurs/ats-taleo_tbe.md
7 +Rôle : Fiche plateforme ATS taleo_tbe — mécanique partagée + tableau des 6 tenants
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 + relancer le script pour régénérer.
10 +=============================================================================
11 +-->
12 +
13 +# Plateforme ATS `taleo_tbe`
14 +
15 +**6 employeurs connectés** via cette plateforme — **143 offres actives**. Module partagé : `jobka/connectors/taleo_tbe.py` ; un employeur = une sous-classe d'environ 10 lignes.
16 +
17 +## Description & mécanique
18 +
19 +> Plateforme Oracle Taleo Business Edition (tbe.taleo.net).
20 +>
21 +> À ne pas confondre avec Taleo Enterprise (careersection, jobka.connectors.taleo) :
22 +> TBE est l'édition PME/parapublic (Sépaq, exo, HEC, Kruger…).
23 +>
24 +> - liste : GET https://<HOST>.tbe.taleo.net/<INST>/ats/servlet/Rss
25 +> ?org=<ORG>&cws=<CWS>
26 +> -> RSS 2.0 : <item> title / link (requisition.jsp?…&rid=NNN) /
27 +> description (texte résumé, sans lieu ni date)
28 +> - détail : GET .../ats/careers/requisition.jsp?org=&cws=&rid=
29 +> -> JSON-LD schema.org/JobPosting complet (description HTML, lieu,
30 +> datePosted, validThrough, employmentType) — cache BD + budget.
31 +>
32 +> Le lieu n'apparaissant que dans le détail, le filtre Québec est appliqué
33 +> après lecture du JSON-LD ; tant que le détail d'une offre n'a pas été visité
34 +> (budget épuisé), l'offre d'un connecteur `quebec_only` est différée au cycle
35 +> suivant plutôt que publiée sans lieu vérifié.
36 +
37 +## Accès
38 +
39 +- **Pagination** : flux unique (une requête liste)
40 +- **Backend** : GET/POST direct `requests` (throttlé, User-Agent `JobKaBot/1.0` identifié)
41 +- **Auth** : aucune — API/pages publiques du site carrières.
42 +- **Throttle** : 1.0 s entre requêtes.
43 +- **Budgets (env)** : `JOBKA_TBE_DETAIL_LIMIT` (défaut `60`)
44 +
45 +## Tenants connectés
46 +
47 +| Employeur | Actives | Salaire | GPS | Mode | Dernier sync | OK |
48 +|---|---|---|---|---|---|---|
49 +| [Sépaq](sepaq.md) | 99 | 55 % | 0 % | 4 % | 2026-08-19 04:46 | ✅ |
50 +| [exo (transport métropolitain)](exo.md) | 25 | 0 % | 0 % | 100 % | 2026-08-19 04:48 | ✅ |
51 +| [HEC Montréal](hec_montreal.md) | 9 | 0 % | 0 % | 0 % | 2026-08-19 04:48 | ✅ |
52 +| [HEC Montréal — corps professoral](hec_montreal_profs.md) | 9 | 0 % | 0 % | 0 % | 2026-08-19 04:48 | ✅ |
53 +| [Produits Kruger](produits_kruger.md) | 1 | 0 % | 0 % | 0 % | 2026-08-19 04:48 | ✅ |
54 +| [Kruger](kruger.md) | 0 | — | — | — | 2026-08-19 04:47 | ✅ |
55 +
56 +## Licence / conformité
57 +
58 +**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 l'employeur » 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.
59 +
60 +## Historique
61 +
62 +**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 :
63 +- `fd4bfc8` qualité lieux : rejet des villes hors Québec, bâtiments McGill → Montréal ;
64 +- `5a66f48` +59 employeurs (sondage massif d'ATS + détection de pages carrières) ;
65 +- `4917d57` 8 nouveaux ATS (Taleo, Njoyn, UltiPro, iCIMS, SuccessFactors, ADP WFN, Digital Recruiters, Workland) + 23 employeurs publics/parapublics ;
66 +- `f6e7571` portails Guichet-Emplois, Jobillico, Espresso-Jobs — l'offre directe gagne toujours la canonique (dédup) ;
67 +- `744cbfc` badge « Offre directe », stats directes/portails, dépôt direct employeurs ;
68 +- `1604ff9` reprise sur coupure WAF Guichet-Emplois (retry + acquis partiel).
69 +
70 +Commits touchant `jobka/connectors/taleo_tbe.py` :
71 +
72 +- `89f9713` 2026-08-19 Nouvelle famille ATS Taleo Business Edition (taleo_tbe) : flux RSS public + JSON-LD des pages requisition (lieu, dates, description complète), filtre Québec différé tant que le détail n'est pas visité. Connecteurs : Sépaq (99), Kruger (corporatif, filtre QC), Produits Kruger, exo (25), HEC Montréal personnel (9) + corps professoral (9). Fixture sepaq (121 requêtes rejouables). TÉLUQ écarté (tenant TBE fermé).
modified docs/connecteurs/ats-ultipro.md +7 −4
@@ -4,15 +4,15 @@ Job·Ka — Groupe KA
4 4 Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/ats-ultipro.md
7 −Rôle : Fiche plateforme ATS ultipro — mécanique partagée + tableau des 1 tenants
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
7 +Rôle : Fiche plateforme ATS ultipro — mécanique partagée + tableau des 3 tenants
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
12 12
13 13 # Plateforme ATS `ultipro`
14 14
15 −**1 employeurs connectés** via cette plateforme — **22 offres actives**. Module partagé : `jobka/connectors/ultipro.py` ; un employeur = une sous-classe d'environ 10 lignes.
15 +**3 employeurs connectés** via cette plateforme — **58 offres actives**. Module partagé : `jobka/connectors/ultipro.py` ; un employeur = une sous-classe d'environ 10 lignes.
16 16
17 17 ## Description & mécanique
18 18
@@ -40,7 +40,9 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
40 40
41 41 | Employeur | Actives | Salaire | GPS | Mode | Dernier sync | OK |
42 42 |---|---|---|---|---|---|---|
43 −| [Messer Canada](messer_canada.md) | 22 | 91 % | 100 % | 0 % | 2026-08-19 02:10 | ✅ |
43 +| [Nortera](nortera.md) | 24 | 62 % | 0 % | 4 % | 2026-08-19 04:49 | ✅ |
44 +| [Messer Canada](messer_canada.md) | 22 | 91 % | 100 % | 0 % | 2026-08-19 04:15 | ✅ |
45 +| [Fruit d'Or](fruitdor.md) | 12 | 0 % | 0 % | 0 % | 2026-08-19 04:48 | ✅ |
44 46
45 47 ## Licence / conformité
46 48
@@ -58,4 +60,5 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
58 60
59 61 Commits touchant `jobka/connectors/ultipro.py` :
60 62
63 +- `86b0d0b` 2026-08-19 Famille Workland réécrite sur l'API JSON publique du frontal Atlas (jobs-prod published-external + default-profiles) : descriptions complètes fr/en, lieux géocodés, dates, mode de travail — 2 requêtes par cycle pour TOUT le réseau. Nouveau connecteur réseau atlas_workland (~80 employeurs QC : CSS scolaires, cégeps, CIUSSS Ouest-de-l'Île, Santé Québec Côte-Nord, ICM, STQ, UQTR, INRS… ; 1 238 offres QC). Connecteur cssdm retiré (couvert par le réseau), fixture remplacée par atlas_workland (sous-ensemble rejouable). Corrige la limite « workland description 0 % ».
61 64 - `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
modified docs/connecteurs/ats-workable.md +18 −18
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/ats-workable.md
7 7 Rôle : Fiche plateforme ATS workable — mécanique partagée + tableau des 19 tenants
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -39,25 +39,25 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
39 39
40 40 | Employeur | Actives | Salaire | GPS | Mode | Dernier sync | OK |
41 41 |---|---|---|---|---|---|---|
42 −| [TEHORA](tehora.md) | 346 | 0 % | 100 % | 32 % | 2026-08-19 02:20 | ✅ |
43 −| [Genetec](genetec_inc.md) | 80 | 0 % | 100 % | 18 % | 2026-08-19 01:47 | ✅ |
44 −| [SOGECLAIR](sogeclair.md) | 43 | 2 % | 100 % | 2 % | 2026-08-19 02:14 | ✅ |
45 −| [Valsoft](valsoft_corp.md) | 37 | 11 % | 100 % | 16 % | 2026-08-19 02:20 | ✅ |
46 −| [Side (PTW)](sideinc.md) | 33 | 0 % | 100 % | 21 % | 2026-08-19 02:14 | ✅ |
47 −| [Tecsys](tecsys.md) | 27 | 0 % | 100 % | 93 % | 2026-08-19 02:20 | ✅ |
48 −| [Evolving Web](evolving_web.md) | 14 | 0 % | 100 % | 14 % | 2026-08-19 01:46 | ✅ |
49 −| [Lamour](lamour.md) | 11 | 0 % | 100 % | 0 % | 2026-08-19 02:02 | ✅ |
50 −| [Eminent Valet](eminent_valet.md) | 9 | 100 % | 100 % | 0 % | 2026-08-19 01:46 | ✅ |
51 −| [Botpress](botpress.md) | 8 | 0 % | 100 % | 0 % | 2026-08-19 01:31 | ✅ |
52 −| [LIDD Consultants](lidd.md) | 8 | 0 % | 100 % | 0 % | 2026-08-19 02:02 | ✅ |
53 −| [Nuovo Photography](nuovophotography.md) | 8 | 25 % | 100 % | 0 % | 2026-08-19 02:10 | ✅ |
54 −| [Mila — Institut québécois d'IA](mila_2.md) | 8 | 0 % | 100 % | 0 % | 2026-08-19 02:10 | ✅ |
55 −| [Sweat Pants Agency](sweat_pants_agency.md) | 6 | 50 % | 100 % | 100 % | 2026-08-19 02:15 | ✅ |
56 −| [Flinks](flinks.md) | 3 | 100 % | 100 % | 100 % | 2026-08-19 01:47 | ✅ |
57 −| [Unit8](unit8.md) | 3 | 0 % | 100 % | 67 % | 2026-08-19 02:20 | ✅ |
42 +| [TEHORA](tehora.md) | 346 | 0 % | 100 % | 32 % | 2026-08-19 04:24 | ✅ |
43 +| [Genetec](genetec_inc.md) | 80 | 0 % | 100 % | 18 % | 2026-08-19 03:56 | ✅ |
44 +| [SOGECLAIR](sogeclair.md) | 43 | 2 % | 100 % | 2 % | 2026-08-19 04:18 | ✅ |
45 +| [Valsoft](valsoft_corp.md) | 37 | 11 % | 100 % | 16 % | 2026-08-19 04:25 | ✅ |
46 +| [Side (PTW)](sideinc.md) | 33 | 0 % | 100 % | 21 % | 2026-08-19 04:18 | ✅ |
47 +| [Tecsys](tecsys.md) | 27 | 0 % | 100 % | 93 % | 2026-08-19 04:24 | ✅ |
48 +| [Evolving Web](evolving_web.md) | 14 | 0 % | 100 % | 14 % | 2026-08-19 03:55 | ✅ |
49 +| [Lamour](lamour.md) | 11 | 0 % | 100 % | 0 % | 2026-08-19 04:10 | ✅ |
50 +| [Eminent Valet](eminent_valet.md) | 9 | 100 % | 100 % | 0 % | 2026-08-19 03:55 | ✅ |
51 +| [Botpress](botpress.md) | 8 | 0 % | 100 % | 0 % | 2026-08-19 03:41 | ✅ |
52 +| [LIDD Consultants](lidd.md) | 8 | 0 % | 100 % | 0 % | 2026-08-19 04:10 | ✅ |
53 +| [Mila — Institut québécois d'IA](mila_2.md) | 8 | 0 % | 100 % | 0 % | 2026-08-19 04:15 | ✅ |
54 +| [Nuovo Photography](nuovophotography.md) | 8 | 25 % | 100 % | 0 % | 2026-08-19 04:15 | ✅ |
55 +| [Sweat Pants Agency](sweat_pants_agency.md) | 6 | 50 % | 100 % | 100 % | 2026-08-19 04:19 | ✅ |
58 56 | [Bardel Entertainment](bardel_entertainment.md) | 3 | 100 % | 100 % | 0 % | 2026-08-19 03:37 | ✅ |
57 +| [Flinks](flinks.md) | 3 | 100 % | 100 % | 100 % | 2026-08-19 03:56 | ✅ |
58 +| [Unit8](unit8.md) | 3 | 0 % | 100 % | 67 % | 2026-08-19 04:24 | ✅ |
59 59 | [Atecna](atecna_montreal.md) | 1 | 0 % | 100 % | 0 % | 2026-08-19 03:36 | ✅ |
60 −| [Charger Logistics](charger_logistics_inc.md) | 1 | 0 % | 100 % | 0 % | 2026-08-19 01:32 | ✅ |
60 +| [Charger Logistics](charger_logistics_inc.md) | 1 | 0 % | 100 % | 0 % | 2026-08-19 03:42 | ✅ |
61 61
62 62 ## Licence / conformité
63 63
modified docs/connecteurs/ats-workday.md +36 −36
@@ -5,14 +5,14 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/ats-workday.md
7 7 Rôle : Fiche plateforme ATS workday — mécanique partagée + tableau des 41 tenants
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
12 12
13 13 # Plateforme ATS `workday`
14 14
15 −**41 employeurs connectés** via cette plateforme — **3571 offres actives**. Module partagé : `jobka/connectors/workday.py` ; un employeur = une sous-classe d'environ 10 lignes.
15 +**41 employeurs connectés** via cette plateforme — **3570 offres actives**. Module partagé : `jobka/connectors/workday.py` ; un employeur = une sous-classe d'environ 10 lignes.
16 16
17 17 ## Description & mécanique
18 18
@@ -44,47 +44,47 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
44 44
45 45 | Employeur | Actives | Salaire | GPS | Mode | Dernier sync | OK |
46 46 |---|---|---|---|---|---|---|
47 −| [Couche-Tard / Circle K](circlek.md) | 1012 | 61 % | 63 % | 0 % | 2026-08-19 01:40 | ✅ |
48 −| [Walmart Canada](walmart.md) | 980 | 93 % | 91 % | 0 % | 2026-08-19 02:30 | ✅ |
49 −| [Mouvement Desjardins](desjardins.md) | 241 | 2 % | 94 % | 21 % | 2026-08-19 01:46 | ✅ |
50 −| [Université McGill](mcgill.md) | 193 | 70 % | 100 % | 0 % | 2026-08-19 02:09 | ✅ |
51 −| [BMO Groupe financier](bmo.md) | 106 | 88 % | 79 % | 17 % | 2026-08-19 01:30 | ✅ |
47 +| [Couche-Tard / Circle K](circlek.md) | 1012 | 61 % | 63 % | 0 % | 2026-08-19 03:51 | ✅ |
48 +| [Walmart Canada](walmart.md) | 979 | 93 % | 91 % | 0 % | 2026-08-19 04:35 | ✅ |
49 +| [Mouvement Desjardins](desjardins.md) | 241 | 2 % | 94 % | 21 % | 2026-08-19 03:55 | ✅ |
50 +| [Université McGill](mcgill.md) | 193 | 70 % | 100 % | 0 % | 2026-08-19 04:14 | ✅ |
51 +| [BMO Groupe financier](bmo.md) | 106 | 88 % | 79 % | 17 % | 2026-08-19 03:41 | ✅ |
52 52 | [Agropur](agropur.md) | 75 | 93 % | 99 % | 0 % | 2026-08-19 03:32 | ✅ |
53 53 | [Airbus Canada](airbus.md) | 75 | 1 % | 100 % | 0 % | 2026-08-19 03:36 | ✅ |
54 −| [Groupe Banque TD](td.md) | 69 | 99 % | 100 % | 99 % | 2026-08-19 02:20 | ✅ |
55 −| [Banque CIBC](cibc.md) | 65 | 0 % | 100 % | 3 % | 2026-08-19 01:33 | ✅ |
54 +| [Groupe Banque TD](td.md) | 69 | 99 % | 100 % | 99 % | 2026-08-19 04:24 | ✅ |
56 55 | [Autodesk](autodesk.md) | 65 | 91 % | 48 % | 20 % | 2026-08-19 03:37 | ✅ |
57 −| [CAE](cae.md) | 55 | 7 % | 93 % | 0 % | 2026-08-19 01:31 | ✅ |
58 −| [Manuvie](manulife.md) | 51 | 90 % | 75 % | 29 % | 2026-08-19 02:04 | ✅ |
59 −| [Cogeco](cogeco.md) | 50 | 18 % | 56 % | 4 % | 2026-08-19 01:42 | ✅ |
56 +| [Banque CIBC](cibc.md) | 65 | 0 % | 100 % | 3 % | 2026-08-19 03:44 | ✅ |
57 +| [CAE](cae.md) | 55 | 7 % | 93 % | 0 % | 2026-08-19 03:42 | ✅ |
58 +| [Manuvie](manulife.md) | 51 | 90 % | 75 % | 29 % | 2026-08-19 04:11 | ✅ |
59 +| [Cogeco](cogeco.md) | 50 | 18 % | 56 % | 4 % | 2026-08-19 03:52 | ✅ |
60 60 | [Beneva](beneva.md) | 48 | 2 % | 100 % | 2 % | 2026-08-19 03:39 | ✅ |
61 −| [McKesson Canada](mckesson.md) | 43 | 84 % | 86 % | 93 % | 2026-08-19 02:10 | ✅ |
62 −| [Investissements PSP](investpsp.md) | 43 | 5 % | 100 % | 0 % | 2026-08-19 01:56 | ✅ |
63 −| [Promutuel Assurance](promutuel.md) | 37 | 0 % | 100 % | 16 % | 2026-08-19 02:11 | ✅ |
64 −| [Service alimentaire Gordon](gfs.md) | 30 | 73 % | 100 % | 0 % | 2026-08-19 01:48 | ✅ |
61 +| [Investissements PSP](investpsp.md) | 43 | 5 % | 100 % | 0 % | 2026-08-19 04:04 | ✅ |
62 +| [McKesson Canada](mckesson.md) | 43 | 84 % | 86 % | 93 % | 2026-08-19 04:15 | ✅ |
63 +| [Promutuel Assurance](promutuel.md) | 37 | 0 % | 100 % | 16 % | 2026-08-19 04:16 | ✅ |
64 +| [Service alimentaire Gordon](gfs.md) | 30 | 73 % | 100 % | 0 % | 2026-08-19 03:56 | ✅ |
65 65 | [Altasciences](altasciences.md) | 29 | 0 % | 100 % | 97 % | 2026-08-19 03:36 | ✅ |
66 −| [CDPQ — Caisse de dépôt et placement du Québec](cdpq.md) | 28 | 0 % | 100 % | 0 % | 2026-08-19 01:32 | ✅ |
67 −| [EXFO](exfo.md) | 27 | 0 % | 100 % | 56 % | 2026-08-19 01:47 | ✅ |
68 −| [Scotts Canada (Fafard)](scottsmiraclegro.md) | 27 | 4 % | 100 % | 0 % | 2026-08-19 02:14 | ✅ |
69 −| [Saputo](saputo.md) | 24 | 79 % | 100 % | 0 % | 2026-08-19 02:13 | ❌ |
70 −| [Intact Corporation financière](intactfc.md) | 23 | 0 % | 100 % | 0 % | 2026-08-19 01:55 | ✅ |
71 −| [Rio Tinto](riotinto.md) | 23 | 0 % | 100 % | 4 % | 2026-08-19 02:12 | ✅ |
72 −| [CAA-Québec](caaquebec.md) | 19 | 21 % | 100 % | 0 % | 2026-08-19 01:31 | ✅ |
73 −| [iA Groupe financier](ia_groupe.md) | 17 | 100 % | 100 % | 6 % | 2026-08-19 01:55 | ✅ |
66 +| [CDPQ — Caisse de dépôt et placement du Québec](cdpq.md) | 28 | 0 % | 100 % | 0 % | 2026-08-19 03:42 | ✅ |
67 +| [EXFO](exfo.md) | 27 | 0 % | 100 % | 56 % | 2026-08-19 03:56 | ✅ |
68 +| [Scotts Canada (Fafard)](scottsmiraclegro.md) | 27 | 4 % | 100 % | 0 % | 2026-08-19 04:18 | ✅ |
69 +| [Saputo](saputo.md) | 24 | 75 % | 100 % | 100 % | 2026-08-19 04:18 | ✅ |
70 +| [Intact Corporation financière](intactfc.md) | 23 | 0 % | 100 % | 0 % | 2026-08-19 04:03 | ✅ |
71 +| [Rio Tinto](riotinto.md) | 23 | 0 % | 100 % | 4 % | 2026-08-19 04:17 | ✅ |
72 +| [CAA-Québec](caaquebec.md) | 19 | 21 % | 100 % | 0 % | 2026-08-19 03:41 | ✅ |
73 +| [iA Groupe financier](ia_groupe.md) | 17 | 100 % | 100 % | 6 % | 2026-08-19 04:03 | ✅ |
74 74 | [BDC](bdc.md) | 16 | 0 % | 100 % | 0 % | 2026-08-19 03:38 | ✅ |
75 75 | [Alcoa Canada](alcoa.md) | 15 | 13 % | 40 % | 0 % | 2026-08-19 03:36 | ✅ |
76 −| [GSK](gsk.md) | 12 | 0 % | 83 % | 0 % | 2026-08-19 01:48 | ✅ |
77 −| [Investissement Québec](investquebec.md) | 12 | 8 % | 100 % | 0 % | 2026-08-19 01:56 | ✅ |
78 −| [Fonds de solidarité FTQ](fondsftq.md) | 10 | 0 % | 100 % | 100 % | 2026-08-19 01:47 | ✅ |
79 −| [Canadian Tire](canadiantirecorporation.md) | 9 | 56 % | 100 % | 0 % | 2026-08-19 01:31 | ✅ |
80 −| [JG Rive-Sud (GFS)](jgrivesud.md) | 9 | 67 % | 100 % | 0 % | 2026-08-19 01:57 | ✅ |
81 −| [Sun Life](sunlife.md) | 8 | 0 % | 100 % | 0 % | 2026-08-19 02:15 | ✅ |
82 −| [Church & Dwight Canada](churchdwight.md) | 6 | 0 % | 100 % | 0 % | 2026-08-19 01:32 | ✅ |
83 −| [Raymond Chabot Grant Thornton](rcgt.md) | 5 | 0 % | 100 % | 20 % | 2026-08-19 02:11 | ✅ |
84 −| [Pfizer Canada](pfizer.md) | 4 | 100 % | 0 % | 0 % | 2026-08-19 02:10 | ✅ |
85 −| [Plusgrade](plusgrade.md) | 4 | 0 % | 100 % | 0 % | 2026-08-19 02:10 | ✅ |
86 −| [Suncor Énergie](suncor.md) | 3 | 0 % | 100 % | 0 % | 2026-08-19 02:14 | ✅ |
87 −| [Brasseries Sleeman (Unibroue)](sleeman.md) | 3 | 33 % | 100 % | 0 % | 2026-08-19 02:14 | ✅ |
76 +| [GSK](gsk.md) | 12 | 0 % | 83 % | 0 % | 2026-08-19 03:56 | ✅ |
77 +| [Investissement Québec](investquebec.md) | 12 | 8 % | 100 % | 0 % | 2026-08-19 04:04 | ✅ |
78 +| [Fonds de solidarité FTQ](fondsftq.md) | 10 | 0 % | 100 % | 100 % | 2026-08-19 03:56 | ✅ |
79 +| [Canadian Tire](canadiantirecorporation.md) | 9 | 56 % | 100 % | 0 % | 2026-08-19 03:42 | ✅ |
80 +| [JG Rive-Sud (GFS)](jgrivesud.md) | 9 | 67 % | 100 % | 0 % | 2026-08-19 04:04 | ✅ |
81 +| [Sun Life](sunlife.md) | 8 | 0 % | 100 % | 0 % | 2026-08-19 04:19 | ✅ |
82 +| [Church & Dwight Canada](churchdwight.md) | 6 | 0 % | 100 % | 0 % | 2026-08-19 03:42 | ✅ |
83 +| [Raymond Chabot Grant Thornton](rcgt.md) | 5 | 0 % | 100 % | 20 % | 2026-08-19 04:16 | ✅ |
84 +| [Pfizer Canada](pfizer.md) | 4 | 100 % | 0 % | 0 % | 2026-08-19 04:16 | ✅ |
85 +| [Plusgrade](plusgrade.md) | 4 | 0 % | 100 % | 0 % | 2026-08-19 04:16 | ✅ |
86 +| [Brasseries Sleeman (Unibroue)](sleeman.md) | 3 | 33 % | 100 % | 0 % | 2026-08-19 04:18 | ✅ |
87 +| [Suncor Énergie](suncor.md) | 3 | 0 % | 100 % | 0 % | 2026-08-19 04:19 | ✅ |
88 88
89 89 ## Licence / conformité
90 90
modified docs/connecteurs/ats-workland.md +25 −9
@@ -5,28 +5,43 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/ats-workland.md
7 7 Rôle : Fiche plateforme ATS workland — mécanique partagée + tableau des 1 tenants
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
12 12
13 13 # Plateforme ATS `workland`
14 14
15 −**1 employeurs connectés** via cette plateforme — **23 offres actives**. Module partagé : `jobka/connectors/workland.py` ; un employeur = une sous-classe d'environ 10 lignes.
15 +**1 employeurs connectés** via cette plateforme — **1238 offres actives**. Module partagé : `jobka/connectors/workland.py` ; un employeur = une sous-classe d'environ 10 lignes.
16 16
17 17 ## Description & mécanique
18 18
19 19 > Plateforme Workland (atlas.workland.com).
20 20 >
21 −> Les pages atlas.workland.com sont une SPA Angular sans données côté serveur
22 −> (le bloc JSON-LD reste vide même après rendu) : on s'appuie donc sur la page
23 −> carrières de l'employeur (LIST_URL), rendue côté serveur, qui liste les liens
24 −> https://atlas.workland.com/work/<id>/<slug> — typiquement dans un tableau
25 −> « titre | date limite | lien » (ex. CSSDM). Le titre et la date limite
26 −> proviennent de la ligne du tableau ; à défaut, du slug.
21 +> Réécriture 2026-08-19 : l'ancienne version grattait les pages carrières des
22 +> employeurs (liens atlas rendus serveur) et n'avait AUCUNE description (la SPA
23 +> Atlas n'expose rien côté serveur). L'API publique du frontal fait tout en
24 +> deux requêtes :
25 +>
26 +> - offres : POST https://jobs-prod.workland.com/api/v1/job/published-external
27 +> body {"load_with": ["locations"], "account_ids": [...]?}
28 +> -> liste complète (traductions fr/en avec description HTML
29 +> entière, lieux géocodés avec ville/région/lat-lng, dates de
30 +> publication et d'expiration, mode de travail) ;
31 +> - noms : POST https://user-accounts-prod.workland.com/api/v1/accounts/
32 +> default-profiles body {"account_ids": [...]}
33 +> -> nom et slug d'employeur par compte.
34 +>
35 +> Sans filtre `account_ids`, l'API renvoie tout le réseau Atlas (~1 600 offres,
36 +> dont ~1 240 au Québec : CSS scolaires, cégeps, CIUSSS/CISSS, STQ, UQTR…) —
37 +> c'est ce que fait le connecteur réseau `atlas_workland`. Une sous-classe
38 +> peut cibler un employeur précis via ACCOUNT_IDS ou SLUG.
27 39
28 40 ## Accès
29 41
42 +- **Endpoint** (`_JOBS_API`) : `https://jobs-prod.workland.com/api/v1/job/published-external`
43 +- **Endpoint** (`_PROFILES_API`) : `https://user-accounts-prod.workland.com/api/v1/accounts/default-profiles`
44 +- **Endpoint** (`_BY_SLUG_API`) : `https://user-accounts-prod.workland.com/api/v1/accounts/profiles/by-slug/{slug}`
30 45 - **Pagination** : flux unique (une requête liste)
31 46 - **Backend** : GET/POST direct `requests` (throttlé, User-Agent `JobKaBot/1.0` identifié)
32 47 - **Auth** : aucune — API/pages publiques du site carrières.
@@ -36,7 +51,7 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
36 51
37 52 | Employeur | Actives | Salaire | GPS | Mode | Dernier sync | OK |
38 53 |---|---|---|---|---|---|---|
39 −| [Centre de services scolaire de Montréal](cssdm.md) | 23 | 0 % | 100 % | 0 % | 2026-08-19 01:42 | ✅ |
54 +| [Réseau Atlas Workland (~80 employeurs QC : CSS, cégeps, Santé Québec, STQ, UQTR…)](atlas_workland.md) | 1238 | 36 % | 100 % | 82 % | 2026-08-19 04:45 | ✅ |
40 55
41 56 ## Licence / conformité
42 57
@@ -54,4 +69,5 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
54 69
55 70 Commits touchant `jobka/connectors/workland.py` :
56 71
72 +- `86b0d0b` 2026-08-19 Famille Workland réécrite sur l'API JSON publique du frontal Atlas (jobs-prod published-external + default-profiles) : descriptions complètes fr/en, lieux géocodés, dates, mode de travail — 2 requêtes par cycle pour TOUT le réseau. Nouveau connecteur réseau atlas_workland (~80 employeurs QC : CSS scolaires, cégeps, CIUSSS Ouest-de-l'Île, Santé Québec Côte-Nord, ICM, STQ, UQTR, INRS… ; 1 238 offres QC). Connecteur cssdm retiré (couvert par le réseau), fixture remplacée par atlas_workland (sous-ensemble rejouable). Corrige la limite « workland description 0 % ».
57 73 - `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/ats-wpjobmanager.md +66 −0
@@ -0,0 +1,66 @@
1 +<!--
2 +=============================================================================
3 +Job·Ka — Groupe KA
4 +Auteur : Simon-Pierre Boucher
5 +Contact : contact@spboucher.ai
6 +Fichier : docs/connecteurs/ats-wpjobmanager.md
7 +Rôle : Fiche plateforme ATS wpjobmanager — mécanique partagée + tableau des 8 tenants
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 + relancer le script pour régénérer.
10 +=============================================================================
11 +-->
12 +
13 +# Plateforme ATS `wpjobmanager`
14 +
15 +**8 employeurs connectés** via cette plateforme — **842 offres actives**. Module partagé : `jobka/connectors/wpjobmanager.py` ; un employeur = une sous-classe d'environ 10 lignes.
16 +
17 +## Description & mécanique
18 +
19 +> Plateforme WordPress / WP Job Manager.
20 +>
21 +> - liste : GET <BASE>/?feed=job_feed&posts_per_page=500
22 +> -> RSS : <item> title / link (/poste/<slug>/) / pubDate /
23 +> guid (?post_type=job_listing&p=<id>) / content:encoded (HTML
24 +> complet de l'offre) — tout en une requête.
25 +> - détail : la page /poste/<slug>/ embarque un JSON-LD schema.org/JobPosting
26 +> (validThrough, jobLocation, employmentType) — cache BD + budget,
27 +> uniquement pour compléter lieu et date limite.
28 +
29 +## Accès
30 +
31 +- **Pagination** : flux unique (une requête liste)
32 +- **Backend** : GET/POST direct `requests` (throttlé, User-Agent `JobKaBot/1.0` identifié)
33 +- **Auth** : aucune — API/pages publiques du site carrières.
34 +- **Throttle** : 1.0 s entre requêtes.
35 +- **Budgets (env)** : `JOBKA_WPJM_DETAIL_LIMIT` (défaut `60`)
36 +
37 +## Tenants connectés
38 +
39 +| Employeur | Actives | Salaire | GPS | Mode | Dernier sync | OK |
40 +|---|---|---|---|---|---|---|
41 +| [CISSS de Laval](cisss_laval.md) | 149 | 1 % | 0 % | 0 % | 2026-08-19 05:05 | ✅ |
42 +| [CISSS de l'Abitibi-Témiscamingue](cisss_abitibi.md) | 141 | 0 % | 0 % | 0 % | 2026-08-19 04:55 | ✅ |
43 +| [CISSS des Laurentides](cisss_laurentides.md) | 130 | 12 % | 0 % | 1 % | 2026-08-19 05:39 | ✅ |
44 +| [CISSS de Lanaudière](cisss_lanaudiere.md) | 124 | 4 % | 0 % | 0 % | 2026-08-19 05:35 | ✅ |
45 +| [CISSS de Chaudière-Appalaches](cisss_chaudiere_appalaches.md) | 112 | 8 % | 0 % | 0 % | 2026-08-19 04:59 | ✅ |
46 +| [CISSS de l'Outaouais](cisss_outaouais.md) | 101 | 31 % | 0 % | 0 % | 2026-08-19 05:09 | ✅ |
47 +| [CHU de Québec — Université Laval](chu_quebec.md) | 60 | 10 % | 0 % | 0 % | 2026-08-19 04:51 | ✅ |
48 +| [CHUM](chum.md) | 25 | 0 % | 0 % | 0 % | 2026-08-19 04:52 | ✅ |
49 +
50 +## Licence / conformité
51 +
52 +**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 l'employeur » 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.
53 +
54 +## Historique
55 +
56 +**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 :
57 +- `fd4bfc8` qualité lieux : rejet des villes hors Québec, bâtiments McGill → Montréal ;
58 +- `5a66f48` +59 employeurs (sondage massif d'ATS + détection de pages carrières) ;
59 +- `4917d57` 8 nouveaux ATS (Taleo, Njoyn, UltiPro, iCIMS, SuccessFactors, ADP WFN, Digital Recruiters, Workland) + 23 employeurs publics/parapublics ;
60 +- `f6e7571` portails Guichet-Emplois, Jobillico, Espresso-Jobs — l'offre directe gagne toujours la canonique (dédup) ;
61 +- `744cbfc` badge « Offre directe », stats directes/portails, dépôt direct employeurs ;
62 +- `1604ff9` reprise sur coupure WAF Guichet-Emplois (retry + acquis partiel).
63 +
64 +Commits touchant `jobka/connectors/wpjobmanager.py` :
65 +
66 +- `5f13718` 2026-08-19 Nouvelle famille wpjobmanager (WordPress + WP Job Manager) : flux job_feed (contenu complet en une requête) + JSON-LD des pages poste (date limite, lieu). Ouvre la plateforme carrieresante.gouv.qc.ca de Santé Québec (un site par établissement, en déploiement) : CHU de Québec (60), CHUM (25), CISSS Abitibi-Témiscamingue (141), Chaudière-Appalaches (112), Laval (149), Lanaudière (124), Laurentides (130) + CISSS de l'Outaouais via viensvivretespassions.ca (101). Fixture chum. + connecteur cssdd (CSS des Découvreurs, famille DigitalRecruiters existante).
modified docs/connecteurs/autodesk.md +3 −3
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/autodesk.md
7 7 Rôle : Fiche connecteur — Autodesk (employeur direct, ATS workday)
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -38,7 +38,7 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
38 38
39 39 ## Champs → schéma
40 40
41 −Complétude mesurée sur les **65 offres actives** de la source (base live, 2026-08-19 03:39 EDT).
41 +Complétude mesurée sur les **65 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
42 42
43 43 | Champ (`jobs.*`) | Rôle | Complétude |
44 44 |---|---|---|
@@ -79,7 +79,7 @@ Exemple réel : *AI Builder, Principal Product Manager* — ∅ · For Canada ba
79 79
80 80 ## Volumétrie & complétude live
81 81
82 −*(mesuré le 2026-08-19 03:39 EDT dans `data/jobka.db`)*
82 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
83 83
84 84 - **Offres en base** : 68 (dont **65 actives**, 0 masquées comme doublons `dup_of`)
85 85 - **Salaire** : 59/65 actives (91 %)
modified docs/connecteurs/aviyatech.md +3 −3
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/aviyatech.md
7 7 Rôle : Fiche connecteur — Aviya Aerospace Systems (employeur direct, ATS lever)
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -36,7 +36,7 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
36 36
37 37 ## Champs → schéma
38 38
39 −Complétude mesurée sur les **5 offres actives** de la source (base live, 2026-08-19 03:39 EDT).
39 +Complétude mesurée sur les **5 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
40 40
41 41 | Champ (`jobs.*`) | Rôle | Complétude |
42 42 |---|---|---|
@@ -72,7 +72,7 @@ Exemple réel : *Computer Engineer-Talent Pool Longueuil* — Québec · ∅ ·
72 72
73 73 ## Volumétrie & complétude live
74 74
75 −*(mesuré le 2026-08-19 03:39 EDT dans `data/jobka.db`)*
75 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
76 76
77 77 - **Offres en base** : 5 (dont **5 actives**, 0 masquées comme doublons `dup_of`)
78 78 - **Salaire** : 0/5 actives (0 %)
modified docs/connecteurs/bardel_entertainment.md +3 −3
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/bardel_entertainment.md
7 7 Rôle : Fiche connecteur — Bardel Entertainment (employeur direct, ATS workable)
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -36,7 +36,7 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
36 36
37 37 ## Champs → schéma
38 38
39 −Complétude mesurée sur les **3 offres actives** de la source (base live, 2026-08-19 03:39 EDT).
39 +Complétude mesurée sur les **3 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
40 40
41 41 | Champ (`jobs.*`) | Rôle | Complétude |
42 42 |---|---|---|
@@ -72,7 +72,7 @@ Exemple réel : *Artiste d’éclairage/ Lighting Artist (Featurette)* — Montr
72 72
73 73 ## Volumétrie & complétude live
74 74
75 −*(mesuré le 2026-08-19 03:39 EDT dans `data/jobka.db`)*
75 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
76 76
77 77 - **Offres en base** : 3 (dont **3 actives**, 0 masquées comme doublons `dup_of`)
78 78 - **Salaire** : 3/3 actives (100 %)
modified docs/connecteurs/bayshore.md +3 −3
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/bayshore.md
7 7 Rôle : Fiche connecteur — Bayshore HealthCare (employeur direct, ATS taleo)
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -39,7 +39,7 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
39 39
40 40 ## Champs → schéma
41 41
42 −Complétude mesurée sur les **13 offres actives** de la source (base live, 2026-08-19 03:39 EDT).
42 +Complétude mesurée sur les **13 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
43 43
44 44 | Champ (`jobs.*`) | Rôle | Complétude |
45 45 |---|---|---|
@@ -80,7 +80,7 @@ Exemple réel : *Gestionnaire de programme - Program Manager* — Montréal ·
80 80
81 81 ## Volumétrie & complétude live
82 82
83 −*(mesuré le 2026-08-19 03:39 EDT dans `data/jobka.db`)*
83 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
84 84
85 85 - **Offres en base** : 13 (dont **13 actives**, 0 masquées comme doublons `dup_of`)
86 86 - **Salaire** : 0/13 actives (0 %)
modified docs/connecteurs/bc2.md +3 −3
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/bc2.md
7 7 Rôle : Fiche connecteur — Groupe BC2 (employeur direct, ATS bamboohr)
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -36,7 +36,7 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
36 36
37 37 ## Champs → schéma
38 38
39 −Complétude mesurée sur les **2 offres actives** de la source (base live, 2026-08-19 03:39 EDT).
39 +Complétude mesurée sur les **2 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
40 40
41 41 | Champ (`jobs.*`) | Rôle | Complétude |
42 42 |---|---|---|
@@ -77,7 +77,7 @@ Exemple réel : *DIRECTEUR(TRICE) DE PROJET \| URBANISME, DÉVELOPPEMENT IMMOBIL
77 77
78 78 ## Volumétrie & complétude live
79 79
80 −*(mesuré le 2026-08-19 03:39 EDT dans `data/jobka.db`)*
80 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
81 81
82 82 - **Offres en base** : 2 (dont **2 actives**, 0 masquées comme doublons `dup_of`)
83 83 - **Salaire** : 0/2 actives (0 %)
modified docs/connecteurs/bdc.md +3 −3
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/bdc.md
7 7 Rôle : Fiche connecteur — BDC (employeur direct, ATS workday)
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -38,7 +38,7 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
38 38
39 39 ## Champs → schéma
40 40
41 −Complétude mesurée sur les **16 offres actives** de la source (base live, 2026-08-19 03:39 EDT).
41 +Complétude mesurée sur les **16 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
42 42
43 43 | Champ (`jobs.*`) | Rôle | Complétude |
44 44 |---|---|---|
@@ -79,7 +79,7 @@ Exemple réel : *SPECIALIST, FINANCIAL REPORTING* — Montréal · ∅ · parue
79 79
80 80 ## Volumétrie & complétude live
81 81
82 −*(mesuré le 2026-08-19 03:39 EDT dans `data/jobka.db`)*
82 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
83 83
84 84 - **Offres en base** : 18 (dont **16 actives**, 0 masquées comme doublons `dup_of`)
85 85 - **Salaire** : 0/16 actives (0 %)
modified docs/connecteurs/bell_textron.md +3 −3
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/bell_textron.md
7 7 Rôle : Fiche connecteur — Bell Textron Canada (employeur direct, ATS taleo)
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -39,7 +39,7 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
39 39
40 40 ## Champs → schéma
41 41
42 −Complétude mesurée sur les **15 offres actives** de la source (base live, 2026-08-19 03:39 EDT).
42 +Complétude mesurée sur les **15 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
43 43
44 44 | Champ (`jobs.*`) | Rôle | Complétude |
45 45 |---|---|---|
@@ -80,7 +80,7 @@ Exemple réel : *Analyste en conformité commerce internationale /Trade Complian
80 80
81 81 ## Volumétrie & complétude live
82 82
83 −*(mesuré le 2026-08-19 03:39 EDT dans `data/jobka.db`)*
83 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
84 84
85 85 - **Offres en base** : 15 (dont **15 actives**, 0 masquées comme doublons `dup_of`)
86 86 - **Salaire** : 0/15 actives (0 %)
modified docs/connecteurs/beneva.md +3 −3
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/beneva.md
7 7 Rôle : Fiche connecteur — Beneva (employeur direct, ATS workday)
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -38,7 +38,7 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
38 38
39 39 ## Champs → schéma
40 40
41 −Complétude mesurée sur les **48 offres actives** de la source (base live, 2026-08-19 03:39 EDT).
41 +Complétude mesurée sur les **48 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
42 42
43 43 | Champ (`jobs.*`) | Rôle | Complétude |
44 44 |---|---|---|
@@ -79,7 +79,7 @@ Exemple réel : *Agent service à la clientèle* — Québec · Salaire débutan
79 79
80 80 ## Volumétrie & complétude live
81 81
82 −*(mesuré le 2026-08-19 03:39 EDT dans `data/jobka.db`)*
82 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
83 83
84 84 - **Offres en base** : 49 (dont **48 actives**, 0 masquées comme doublons `dup_of`)
85 85 - **Salaire** : 1/48 actives (2 %)
added docs/connecteurs/bento_sushi.md +115 −0
@@ -0,0 +1,115 @@
1 +<!--
2 +=============================================================================
3 +Job·Ka — Groupe KA
4 +Auteur : Simon-Pierre Boucher
5 +Contact : contact@spboucher.ai
6 +Fichier : docs/connecteurs/bento_sushi.md
7 +Rôle : Fiche connecteur — Bento Sushi (employeur direct, ATS adp)
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 + relancer le script pour régénérer.
10 +=============================================================================
11 +-->
12 +
13 +# Bento Sushi (`bento_sushi`)
14 +
15 +**Employeur direct** · Plateforme ATS : [`adp`](ats-adp.md) · Statut registre : actif · Connecteur : `jobka/connectors/bento_sushi.py`
16 +
17 +## Description
18 +
19 +- **Site** : [Bento Sushi](https://www.bentosushi.com)
20 +- **Page carrières** : https://workforcenow.adp.com/mascsr/default/mdf/recruitment/recruitment.html?cid=d0dfb14c-f365-4599-b39b-0fdccb3d1160&ccId=19000101_000001&lang=fr_CA
21 +- **Secteurs** : Restauration
22 +- **Région** : Québec (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-adp.md`](ats-adp.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 +| `CCID` | `19000101_000001` |
33 +| `CID` | `d0dfb14c-f365-4599-b39b-0fdccb3d1160` |
34 +| `EMPLOYER` | `Bento Sushi` |
35 +| `LANG` | `fr_CA` |
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 **9 offres actives** de la source (base live, 2026-08-19 05:40 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é | 100 % |
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 | 89 % |
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 | 100 % |
60 +| `date_deadline` — Date limite | date limite pour postuler | 0 % |
61 +| `category` — Catégorie | taxonomie interne (TI, Santé, …) | 11 % |
62 +| `language` — Langue | fr / en / bilingue (source ou heuristique) | 100 % |
63 +| `company_logo` — Logo employeur | URL du logo si exposé par la source | 0 % |
64 +| `apply_url` — Candidature | lien de candidature directe | 0 % |
65 +| `gps` — GPS | lat/lng (géocodage sans invention) | 0 % |
66 +
67 +Exemple réel : *Membres de l'équipe de service alimentaire* — Québec · ∅ · parue le 2026-08-14.
68 +
69 +## Fréquence & budgets
70 +
71 +- **Cadence** : resynchronisation **horaire** (PM2 `job-ka-sync` = `run.py watch 60`), suivie du géocodage en lot puis de la déduplication inter-sources.
72 +- **Throttle** : 1.0 s minimum entre deux requêtes vers la source (`request_delay`).
73 +- **Budgets / plafonds (variables d'environnement)** :
74 +
75 +| Variable | Défaut |
76 +|---|---|
77 +| `JOBKA_ADP_DETAIL_LIMIT` | `80` |
78 +- 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.
79 +
80 +## Volumétrie & complétude live
81 +
82 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
83 +
84 +- **Offres en base** : 9 (dont **9 actives**, 0 masquées comme doublons `dup_of`)
85 +- **Salaire** : 8/9 actives (89 %)
86 +- **GPS** : 0/9 actives (0 %)
87 +- **Mode** : 0/9 actives (0 %)
88 +- **Parution** : 9/9 actives (100 %)
89 +- **Dernier sync** : 2026-08-19 04:49 — trouvées 9, +9, ~0, -0
90 +- **Syncs enregistrés** (`sync_log`) : 1
91 +
92 +## Erreurs & dépannage
93 +
94 +Aucune erreur dans `sync_log` pour cette source.
95 +
96 +- Rejouer un sync isolé : `.venv/bin/python run.py sync bento_sushi` puis inspecter `sync_log` : `sqlite3 data/jobka.db "SELECT * FROM sync_log WHERE source='bento_sushi' ORDER BY ts DESC LIMIT 5;"`
97 +- 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`.
98 +
99 +## Licence / conformité
100 +
101 +**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 Bento Sushi » 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.
102 +
103 +## Historique
104 +
105 +**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 :
106 +- `fd4bfc8` qualité lieux : rejet des villes hors Québec, bâtiments McGill → Montréal ;
107 +- `5a66f48` +59 employeurs (sondage massif d'ATS + détection de pages carrières) ;
108 +- `4917d57` 8 nouveaux ATS (Taleo, Njoyn, UltiPro, iCIMS, SuccessFactors, ADP WFN, Digital Recruiters, Workland) + 23 employeurs publics/parapublics ;
109 +- `f6e7571` portails Guichet-Emplois, Jobillico, Espresso-Jobs — l'offre directe gagne toujours la canonique (dédup) ;
110 +- `744cbfc` badge « Offre directe », stats directes/portails, dépôt direct employeurs ;
111 +- `1604ff9` reprise sur coupure WAF Guichet-Emplois (retry + acquis partiel).
112 +
113 +Commits touchant `jobka/connectors/bento_sushi.py` :
114 +
115 +- `0298197` 2026-08-19 Vague A (detected-other-ats) — nouveaux employeurs sur familles existantes : Hydro-Québec (SuccessFactors CSB emploi.hydroquebec.com, 66 offres) ; Deloitte Canada (CSB careers.deloitte.ca, 105 offres QC — remplace la détection Taleo périmée) ; CGI (Njoyn corporatif via Scrapfly, babillard mondial de ~2 900 postes filtré Québec, budgets frugaux) ; Fruit d'Or (12) et Nortera (24 QC) sur UKG Pro recruiting.ultipro.ca ; Placements Mackenzie/groupe Power (iCIMS FR, 3 QC) ; Cultures Gen V (6), Bento Sushi (9 QC), Osgoode Properties (1) sur ADP WFN. Retrait ttcglobal (plus d'offre QC : 2 offres Dallas/Londres). Écartés avec raisons (docs/CONFORMITE.md) : Canada Vie, Groupe Dynamite, Jack Astor's/SIR, Méchant Bœuf, Valero (0 offre), Résolu (fusion Domtar), Power Corp directe.
modified docs/connecteurs/bhvr.md +3 −3
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/bhvr.md
7 7 Rôle : Fiche connecteur — Behaviour Interactif (employeur direct, ATS lever)
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -36,7 +36,7 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
36 36
37 37 ## Champs → schéma
38 38
39 −Complétude mesurée sur les **39 offres actives** de la source (base live, 2026-08-19 03:39 EDT).
39 +Complétude mesurée sur les **39 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
40 40
41 41 | Champ (`jobs.*`) | Rôle | Complétude |
42 42 |---|---|---|
@@ -72,7 +72,7 @@ Exemple réel : *Release Manager - Dead By Daylight \| Responsable du Déploieme
72 72
73 73 ## Volumétrie & complétude live
74 74
75 −*(mesuré le 2026-08-19 03:39 EDT dans `data/jobka.db`)*
75 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
76 76
77 77 - **Offres en base** : 39 (dont **39 actives**, 0 masquées comme doublons `dup_of`)
78 78 - **Salaire** : 0/39 actives (0 %)
modified docs/connecteurs/bigbang.md +3 −3
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/bigbang.md
7 7 Rôle : Fiche connecteur — Big Bang (employeur direct, ATS bamboohr)
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -36,7 +36,7 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
36 36
37 37 ## Champs → schéma
38 38
39 −Complétude mesurée sur les **8 offres actives** de la source (base live, 2026-08-19 03:39 EDT).
39 +Complétude mesurée sur les **8 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
40 40
41 41 | Champ (`jobs.*`) | Rôle | Complétude |
42 42 |---|---|---|
@@ -77,7 +77,7 @@ Exemple réel : *Client Solutions Manager* — Montréal · CAD 38.46 per hour
77 77
78 78 ## Volumétrie & complétude live
79 79
80 −*(mesuré le 2026-08-19 03:39 EDT dans `data/jobka.db`)*
80 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
81 81
82 82 - **Offres en base** : 8 (dont **8 actives**, 0 masquées comme doublons `dup_of`)
83 83 - **Salaire** : 2/8 actives (25 %)
modified docs/connecteurs/biximontreal.md +3 −3
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/biximontreal.md
7 7 Rôle : Fiche connecteur — BIXI Montréal (employeur direct, ATS recruitee)
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -36,7 +36,7 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
36 36
37 37 ## Champs → schéma
38 38
39 −Complétude mesurée sur les **2 offres actives** de la source (base live, 2026-08-19 03:39 EDT).
39 +Complétude mesurée sur les **2 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
40 40
41 41 | Champ (`jobs.*`) | Rôle | Complétude |
42 42 |---|---|---|
@@ -72,7 +72,7 @@ Exemple réel : *Technicien(ne) – Service réseau* — Montréal · • Un sal
72 72
73 73 ## Volumétrie & complétude live
74 74
75 −*(mesuré le 2026-08-19 03:39 EDT dans `data/jobka.db`)*
75 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
76 76
77 77 - **Offres en base** : 2 (dont **2 actives**, 0 masquées comme doublons `dup_of`)
78 78 - **Salaire** : 1/2 actives (50 %)
modified docs/connecteurs/bmo.md +6 −6
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/bmo.md
7 7 Rôle : Fiche connecteur — BMO Groupe financier (employeur direct, ATS workday)
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -38,7 +38,7 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
38 38
39 39 ## Champs → schéma
40 40
41 −Complétude mesurée sur les **106 offres actives** de la source (base live, 2026-08-19 03:39 EDT).
41 +Complétude mesurée sur les **106 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
42 42
43 43 | Champ (`jobs.*`) | Rôle | Complétude |
44 44 |---|---|---|
@@ -64,7 +64,7 @@ Complétude mesurée sur les **106 offres actives** de la source (base live, 202
64 64 | `apply_url` — Candidature | lien de candidature directe | 100 % |
65 65 | `gps` — GPS | lat/lng (géocodage sans invention) | 79 % |
66 66
67 −Exemple réel : *Director, Equipment Finance* — Montréal · $69,000.00 - $129,000.00 · parue le 2026-08-19.
67 +Exemple réel : *Director, Equipment Finance* — Montréal · $69,000.00 - $129,000.00 · parue le 2026-08-18.
68 68
69 69 ## Fréquence & budgets
70 70
@@ -79,15 +79,15 @@ Exemple réel : *Director, Equipment Finance* — Montréal · $69,000.00 - $129
79 79
80 80 ## Volumétrie & complétude live
81 81
82 −*(mesuré le 2026-08-19 03:39 EDT dans `data/jobka.db`)*
82 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
83 83
84 84 - **Offres en base** : 108 (dont **106 actives**, 0 masquées comme doublons `dup_of`)
85 85 - **Salaire** : 93/106 actives (88 %)
86 86 - **GPS** : 84/106 actives (79 %)
87 87 - **Mode** : 18/106 actives (17 %)
88 88 - **Parution** : 106/106 actives (100 %)
89 −- **Dernier sync** : 2026-08-19 01:30 — trouvées 106, +0, ~0, -0
90 −- **Syncs enregistrés** (`sync_log`) : 26
89 +- **Dernier sync** : 2026-08-19 03:41 — trouvées 106, +0, ~96, -0
90 +- **Syncs enregistrés** (`sync_log`) : 27
91 91
92 92 ## Erreurs & dépannage
93 93
modified docs/connecteurs/bombardier.md +5 −5
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/bombardier.md
7 7 Rôle : Fiche connecteur — Bombardier (employeur direct, ATS successfactors)
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -36,7 +36,7 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
36 36
37 37 ## Champs → schéma
38 38
39 −Complétude mesurée sur les **847 offres actives** de la source (base live, 2026-08-19 03:39 EDT).
39 +Complétude mesurée sur les **847 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
40 40
41 41 | Champ (`jobs.*`) | Rôle | Complétude |
42 42 |---|---|---|
@@ -77,15 +77,15 @@ Exemple réel : *Analyst Sr, Quality Assurance Product Safety Management* — Do
77 77
78 78 ## Volumétrie & complétude live
79 79
80 −*(mesuré le 2026-08-19 03:39 EDT dans `data/jobka.db`)*
80 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
81 81
82 82 - **Offres en base** : 853 (dont **847 actives**, 0 masquées comme doublons `dup_of`)
83 83 - **Salaire** : 0/847 actives (0 %)
84 84 - **GPS** : 847/847 actives (100 %)
85 85 - **Mode** : 742/847 actives (88 %)
86 86 - **Parution** : 847/847 actives (100 %)
87 −- **Dernier sync** : 2026-08-19 01:31 — trouvées 847, +0, ~172, -0
88 −- **Syncs enregistrés** (`sync_log`) : 14
87 +- **Dernier sync** : 2026-08-19 03:41 — trouvées 847, +0, ~0, -0
88 +- **Syncs enregistrés** (`sync_log`) : 15
89 89
90 90 ## Erreurs & dépannage
91 91
modified docs/connecteurs/botpress.md +5 −5
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/botpress.md
7 7 Rôle : Fiche connecteur — Botpress (employeur direct, ATS workable)
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -36,7 +36,7 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
36 36
37 37 ## Champs → schéma
38 38
39 −Complétude mesurée sur les **8 offres actives** de la source (base live, 2026-08-19 03:39 EDT).
39 +Complétude mesurée sur les **8 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
40 40
41 41 | Champ (`jobs.*`) | Rôle | Complétude |
42 42 |---|---|---|
@@ -72,15 +72,15 @@ Exemple réel : *Développeur(euse) croissance - GTM* — Québec · ∅ · paru
72 72
73 73 ## Volumétrie & complétude live
74 74
75 −*(mesuré le 2026-08-19 03:39 EDT dans `data/jobka.db`)*
75 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
76 76
77 77 - **Offres en base** : 8 (dont **8 actives**, 0 masquées comme doublons `dup_of`)
78 78 - **Salaire** : 0/8 actives (0 %)
79 79 - **GPS** : 8/8 actives (100 %)
80 80 - **Mode** : 0/8 actives (0 %)
81 81 - **Parution** : 8/8 actives (100 %)
82 −- **Dernier sync** : 2026-08-19 01:31 — trouvées 10, +0, ~4, -0
83 −- **Syncs enregistrés** (`sync_log`) : 26
82 +- **Dernier sync** : 2026-08-19 03:41 — trouvées 10, +0, ~4, -0
83 +- **Syncs enregistrés** (`sync_log`) : 27
84 84
85 85 ## Erreurs & dépannage
86 86
modified docs/connecteurs/brandmomentum.md +5 −5
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/brandmomentum.md
7 7 Rôle : Fiche connecteur — Brand Momentum (employeur direct, ATS breezy)
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -36,7 +36,7 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
36 36
37 37 ## Champs → schéma
38 38
39 −Complétude mesurée sur les **30 offres actives** de la source (base live, 2026-08-19 03:39 EDT).
39 +Complétude mesurée sur les **30 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
40 40
41 41 | Champ (`jobs.*`) | Rôle | Complétude |
42 42 |---|---|---|
@@ -72,15 +72,15 @@ Exemple réel : *Représentant(e) des ventes – Roadshow* — Laval · $22+ / h
72 72
73 73 ## Volumétrie & complétude live
74 74
75 −*(mesuré le 2026-08-19 03:39 EDT dans `data/jobka.db`)*
75 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
76 76
77 77 - **Offres en base** : 30 (dont **30 actives**, 0 masquées comme doublons `dup_of`)
78 78 - **Salaire** : 21/30 actives (70 %)
79 79 - **GPS** : 30/30 actives (100 %)
80 80 - **Mode** : 0/30 actives (0 %)
81 81 - **Parution** : 30/30 actives (100 %)
82 −- **Dernier sync** : 2026-08-19 01:31 — trouvées 30, +0, ~0, -0
83 −- **Syncs enregistrés** (`sync_log`) : 27
82 +- **Dernier sync** : 2026-08-19 03:41 — trouvées 30, +0, ~0, -0
83 +- **Syncs enregistrés** (`sync_log`) : 28
84 84
85 85 ## Erreurs & dépannage
86 86
modified docs/connecteurs/broadsign.md +5 −5
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/broadsign.md
7 7 Rôle : Fiche connecteur — Broadsign (employeur direct, ATS greenhouse)
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -36,7 +36,7 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
36 36
37 37 ## Champs → schéma
38 38
39 −Complétude mesurée sur les **4 offres actives** de la source (base live, 2026-08-19 03:39 EDT).
39 +Complétude mesurée sur les **4 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
40 40
41 41 | Champ (`jobs.*`) | Rôle | Complétude |
42 42 |---|---|---|
@@ -72,15 +72,15 @@ Exemple réel : *Sales Director, Platform Sales - North America* — Montréal
72 72
73 73 ## Volumétrie & complétude live
74 74
75 −*(mesuré le 2026-08-19 03:39 EDT dans `data/jobka.db`)*
75 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
76 76
77 77 - **Offres en base** : 4 (dont **4 actives**, 0 masquées comme doublons `dup_of`)
78 78 - **Salaire** : 0/4 actives (0 %)
79 79 - **GPS** : 4/4 actives (100 %)
80 80 - **Mode** : 4/4 actives (100 %)
81 81 - **Parution** : 4/4 actives (100 %)
82 −- **Dernier sync** : 2026-08-19 01:31 — trouvées 4, +0, ~0, -0
83 −- **Syncs enregistrés** (`sync_log`) : 26
82 +- **Dernier sync** : 2026-08-19 03:41 — trouvées 4, +0, ~0, -0
83 +- **Syncs enregistrés** (`sync_log`) : 27
84 84
85 85 ## Erreurs & dépannage
86 86
modified docs/connecteurs/broccolini.md +5 −5
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/broccolini.md
7 7 Rôle : Fiche connecteur — Broccolini (employeur direct, ATS bamboohr)
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -36,7 +36,7 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
36 36
37 37 ## Champs → schéma
38 38
39 −Complétude mesurée sur les **23 offres actives** de la source (base live, 2026-08-19 03:39 EDT).
39 +Complétude mesurée sur les **23 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
40 40
41 41 | Champ (`jobs.*`) | Rôle | Complétude |
42 42 |---|---|---|
@@ -77,15 +77,15 @@ Exemple réel : *Concepteur(trice) en architecture \| Architectural Designer*
77 77
78 78 ## Volumétrie & complétude live
79 79
80 −*(mesuré le 2026-08-19 03:39 EDT dans `data/jobka.db`)*
80 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
81 81
82 82 - **Offres en base** : 23 (dont **23 actives**, 0 masquées comme doublons `dup_of`)
83 83 - **Salaire** : 0/23 actives (0 %)
84 84 - **GPS** : 23/23 actives (100 %)
85 85 - **Mode** : 23/23 actives (100 %)
86 86 - **Parution** : 23/23 actives (100 %)
87 −- **Dernier sync** : 2026-08-19 01:31 — trouvées 23, +0, ~0, -0
88 −- **Syncs enregistrés** (`sync_log`) : 14
87 +- **Dernier sync** : 2026-08-19 03:41 — trouvées 23, +0, ~0, -0
88 +- **Syncs enregistrés** (`sync_log`) : 15
89 89
90 90 ## Erreurs & dépannage
91 91
modified docs/connecteurs/caaquebec.md +6 −6
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/caaquebec.md
7 7 Rôle : Fiche connecteur — CAA-Québec (employeur direct, ATS workday)
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -38,7 +38,7 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
38 38
39 39 ## Champs → schéma
40 40
41 −Complétude mesurée sur les **19 offres actives** de la source (base live, 2026-08-19 03:39 EDT).
41 +Complétude mesurée sur les **19 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
42 42
43 43 | Champ (`jobs.*`) | Rôle | Complétude |
44 44 |---|---|---|
@@ -64,7 +64,7 @@ Complétude mesurée sur les **19 offres actives** de la source (base live, 2026
64 64 | `apply_url` — Candidature | lien de candidature directe | 100 % |
65 65 | `gps` — GPS | lat/lng (géocodage sans invention) | 100 % |
66 66
67 −Exemple réel : *Représentant(e) en assurance voyage (Certifié(e) AMF)* — Montréal · Salaire à partir de 24.96$/heure · parue le 2026-08-14.
67 +Exemple réel : *Représentant(e) en assurance voyage (Certifié(e) AMF)* — Montréal · Salaire à partir de 24.96$/heure · parue le 2026-08-13.
68 68
69 69 ## Fréquence & budgets
70 70
@@ -79,15 +79,15 @@ Exemple réel : *Représentant(e) en assurance voyage (Certifié(e) AMF)* — Mo
79 79
80 80 ## Volumétrie & complétude live
81 81
82 −*(mesuré le 2026-08-19 03:39 EDT dans `data/jobka.db`)*
82 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
83 83
84 84 - **Offres en base** : 19 (dont **19 actives**, 0 masquées comme doublons `dup_of`)
85 85 - **Salaire** : 4/19 actives (21 %)
86 86 - **GPS** : 19/19 actives (100 %)
87 87 - **Mode** : 0/19 actives (0 %)
88 88 - **Parution** : 19/19 actives (100 %)
89 −- **Dernier sync** : 2026-08-19 01:31 — trouvées 19, +0, ~0, -0
90 −- **Syncs enregistrés** (`sync_log`) : 14
89 +- **Dernier sync** : 2026-08-19 03:41 — trouvées 19, +0, ~8, -0
90 +- **Syncs enregistrés** (`sync_log`) : 15
91 91
92 92 ## Erreurs & dépannage
93 93
modified docs/connecteurs/cae.md +6 −6
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/cae.md
7 7 Rôle : Fiche connecteur — CAE (employeur direct, ATS workday)
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -38,7 +38,7 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
38 38
39 39 ## Champs → schéma
40 40
41 −Complétude mesurée sur les **55 offres actives** de la source (base live, 2026-08-19 03:39 EDT).
41 +Complétude mesurée sur les **55 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
42 42
43 43 | Champ (`jobs.*`) | Rôle | Complétude |
44 44 |---|---|---|
@@ -64,7 +64,7 @@ Complétude mesurée sur les **55 offres actives** de la source (base live, 2026
64 64 | `apply_url` — Candidature | lien de candidature directe | 100 % |
65 65 | `gps` — GPS | lat/lng (géocodage sans invention) | 93 % |
66 66
67 −Exemple réel : *Director, Business Development, D&S Canada* — ∅ · $184,600 - $234,600 · parue le 2026-08-14.
67 +Exemple réel : *Director, Business Development, D&S Canada* — ∅ · $184,600 - $234,600 · parue le 2026-08-13.
68 68
69 69 ## Fréquence & budgets
70 70
@@ -79,15 +79,15 @@ Exemple réel : *Director, Business Development, D&S Canada* — ∅ · $184,600
79 79
80 80 ## Volumétrie & complétude live
81 81
82 −*(mesuré le 2026-08-19 03:39 EDT dans `data/jobka.db`)*
82 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
83 83
84 84 - **Offres en base** : 56 (dont **55 actives**, 0 masquées comme doublons `dup_of`)
85 85 - **Salaire** : 4/55 actives (7 %)
86 86 - **GPS** : 51/55 actives (93 %)
87 87 - **Mode** : 0/55 actives (0 %)
88 88 - **Parution** : 55/55 actives (100 %)
89 −- **Dernier sync** : 2026-08-19 01:31 — trouvées 55, +0, ~0, -0
90 −- **Syncs enregistrés** (`sync_log`) : 29
89 +- **Dernier sync** : 2026-08-19 03:42 — trouvées 55, +0, ~27, -0
90 +- **Syncs enregistrés** (`sync_log`) : 30
91 91
92 92 ## Erreurs & dépannage
93 93
modified docs/connecteurs/canada_global.md +5 −5
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/canada_global.md
7 7 Rôle : Fiche connecteur — Canada Global Recruitment (employeur direct, ATS breezy)
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -36,7 +36,7 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
36 36
37 37 ## Champs → schéma
38 38
39 −Complétude mesurée sur les **1 offres actives** de la source (base live, 2026-08-19 03:39 EDT).
39 +Complétude mesurée sur les **1 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
40 40
41 41 | Champ (`jobs.*`) | Rôle | Complétude |
42 42 |---|---|---|
@@ -72,15 +72,15 @@ Exemple réel : *General labor* — Montreal - QC · ∅ · parue le 2026-06-27.
72 72
73 73 ## Volumétrie & complétude live
74 74
75 −*(mesuré le 2026-08-19 03:39 EDT dans `data/jobka.db`)*
75 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
76 76
77 77 - **Offres en base** : 1 (dont **1 actives**, 0 masquées comme doublons `dup_of`)
78 78 - **Salaire** : 0/1 actives (0 %)
79 79 - **GPS** : 0/1 actives (0 %)
80 80 - **Mode** : 0/1 actives (0 %)
81 81 - **Parution** : 1/1 actives (100 %)
82 −- **Dernier sync** : 2026-08-19 01:31 — trouvées 1, +0, ~0, -0
83 −- **Syncs enregistrés** (`sync_log`) : 26
82 +- **Dernier sync** : 2026-08-19 03:42 — trouvées 1, +0, ~0, -0
83 +- **Syncs enregistrés** (`sync_log`) : 27
84 84
85 85 ## Erreurs & dépannage
86 86
modified docs/connecteurs/canadiantirecorporation.md +6 −6
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/canadiantirecorporation.md
7 7 Rôle : Fiche connecteur — Canadian Tire (employeur direct, ATS workday)
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -38,7 +38,7 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
38 38
39 39 ## Champs → schéma
40 40
41 −Complétude mesurée sur les **9 offres actives** de la source (base live, 2026-08-19 03:39 EDT).
41 +Complétude mesurée sur les **9 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
42 42
43 43 | Champ (`jobs.*`) | Rôle | Complétude |
44 44 |---|---|---|
@@ -64,7 +64,7 @@ Complétude mesurée sur les **9 offres actives** de la source (base live, 2026-
64 64 | `apply_url` — Candidature | lien de candidature directe | 100 % |
65 65 | `gps` — GPS | lat/lng (géocodage sans invention) | 100 % |
66 66
67 −Exemple réel : *Assistant Manager* — Lévis · Our typical hiring range is between $34,800 and $43,500. Salary decisions are also depende… · parue le 2026-07-28.
67 +Exemple réel : *Assistant Manager* — Lévis · Our typical hiring range is between $34,800 and $43,500. Salary decisions are also depende… · parue le 2026-07-27.
68 68
69 69 ## Fréquence & budgets
70 70
@@ -79,15 +79,15 @@ Exemple réel : *Assistant Manager* — Lévis · Our typical hiring range is be
79 79
80 80 ## Volumétrie & complétude live
81 81
82 −*(mesuré le 2026-08-19 03:39 EDT dans `data/jobka.db`)*
82 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
83 83
84 84 - **Offres en base** : 9 (dont **9 actives**, 0 masquées comme doublons `dup_of`)
85 85 - **Salaire** : 5/9 actives (56 %)
86 86 - **GPS** : 9/9 actives (100 %)
87 87 - **Mode** : 0/9 actives (0 %)
88 88 - **Parution** : 9/9 actives (100 %)
89 −- **Dernier sync** : 2026-08-19 01:31 — trouvées 9, +0, ~0, -0
90 −- **Syncs enregistrés** (`sync_log`) : 14
89 +- **Dernier sync** : 2026-08-19 03:42 — trouvées 9, +0, ~3, -0
90 +- **Syncs enregistrés** (`sync_log`) : 15
91 91
92 92 ## Erreurs & dépannage
93 93
modified docs/connecteurs/capreit.md +5 −5
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/capreit.md
7 7 Rôle : Fiche connecteur — CAPREIT (employeur direct, ATS icims)
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -36,7 +36,7 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
36 36
37 37 ## Champs → schéma
38 38
39 −Complétude mesurée sur les **10 offres actives** de la source (base live, 2026-08-19 03:39 EDT).
39 +Complétude mesurée sur les **10 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
40 40
41 41 | Champ (`jobs.*`) | Rôle | Complétude |
42 42 |---|---|---|
@@ -77,15 +77,15 @@ Exemple réel : *Operations Manager 1* — Montréal · ∅ · parue le 2026-07-
77 77
78 78 ## Volumétrie & complétude live
79 79
80 −*(mesuré le 2026-08-19 03:39 EDT dans `data/jobka.db`)*
80 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
81 81
82 82 - **Offres en base** : 10 (dont **10 actives**, 0 masquées comme doublons `dup_of`)
83 83 - **Salaire** : 0/10 actives (0 %)
84 84 - **GPS** : 10/10 actives (100 %)
85 85 - **Mode** : 0/10 actives (0 %)
86 86 - **Parution** : 10/10 actives (100 %)
87 −- **Dernier sync** : 2026-08-19 01:31 — trouvées 10, +0, ~10, -0
88 −- **Syncs enregistrés** (`sync_log`) : 13
87 +- **Dernier sync** : 2026-08-19 03:42 — trouvées 10, +0, ~0, -0
88 +- **Syncs enregistrés** (`sync_log`) : 14
89 89
90 90 ## Erreurs & dépannage
91 91
modified docs/connecteurs/cascades.md +5 −5
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/cascades.md
7 7 Rôle : Fiche connecteur — Cascades (employeur direct, ATS successfactors)
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -36,7 +36,7 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
36 36
37 37 ## Champs → schéma
38 38
39 −Complétude mesurée sur les **100 offres actives** de la source (base live, 2026-08-19 03:39 EDT).
39 +Complétude mesurée sur les **100 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
40 40
41 41 | Champ (`jobs.*`) | Rôle | Complétude |
42 42 |---|---|---|
@@ -77,15 +77,15 @@ Exemple réel : *Électrotechnicien de nuit* — Granby · Salaire horaire de 43
77 77
78 78 ## Volumétrie & complétude live
79 79
80 −*(mesuré le 2026-08-19 03:39 EDT dans `data/jobka.db`)*
80 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
81 81
82 82 - **Offres en base** : 101 (dont **100 actives**, 0 masquées comme doublons `dup_of`)
83 83 - **Salaire** : 77/100 actives (77 %)
84 84 - **GPS** : 100/100 actives (100 %)
85 85 - **Mode** : 12/100 actives (12 %)
86 86 - **Parution** : 0/100 actives (0 %)
87 −- **Dernier sync** : 2026-08-19 01:31 — trouvées 100, +0, ~100, -0
88 −- **Syncs enregistrés** (`sync_log`) : 14
87 +- **Dernier sync** : 2026-08-19 03:42 — trouvées 100, +0, ~0, -0
88 +- **Syncs enregistrés** (`sync_log`) : 15
89 89
90 90 ## Erreurs & dépannage
91 91
modified docs/connecteurs/cdpq.md +6 −6
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/cdpq.md
7 7 Rôle : Fiche connecteur — CDPQ — Caisse de dépôt et placement du Québec (employeur direct, ATS workday)
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -38,7 +38,7 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
38 38
39 39 ## Champs → schéma
40 40
41 −Complétude mesurée sur les **28 offres actives** de la source (base live, 2026-08-19 03:39 EDT).
41 +Complétude mesurée sur les **28 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
42 42
43 43 | Champ (`jobs.*`) | Rôle | Complétude |
44 44 |---|---|---|
@@ -64,7 +64,7 @@ Complétude mesurée sur les **28 offres actives** de la source (base live, 2026
64 64 | `apply_url` — Candidature | lien de candidature directe | 100 % |
65 65 | `gps` — GPS | lat/lng (géocodage sans invention) | 100 % |
66 66
67 −Exemple réel : *Analyste, Divulgation financière – Comptabilité** — Montréal · ∅ · parue le 2026-08-19.
67 +Exemple réel : *Analyste, Divulgation financière – Comptabilité** — Montréal · ∅ · parue le 2026-08-18.
68 68
69 69 ## Fréquence & budgets
70 70
@@ -79,15 +79,15 @@ Exemple réel : *Analyste, Divulgation financière – Comptabilité** — Montr
79 79
80 80 ## Volumétrie & complétude live
81 81
82 −*(mesuré le 2026-08-19 03:39 EDT dans `data/jobka.db`)*
82 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
83 83
84 84 - **Offres en base** : 28 (dont **28 actives**, 0 masquées comme doublons `dup_of`)
85 85 - **Salaire** : 0/28 actives (0 %)
86 86 - **GPS** : 28/28 actives (100 %)
87 87 - **Mode** : 0/28 actives (0 %)
88 88 - **Parution** : 28/28 actives (100 %)
89 −- **Dernier sync** : 2026-08-19 01:32 — trouvées 28, +0, ~28, -0
90 −- **Syncs enregistrés** (`sync_log`) : 13
89 +- **Dernier sync** : 2026-08-19 03:42 — trouvées 28, +0, ~20, -0
90 +- **Syncs enregistrés** (`sync_log`) : 14
91 91
92 92 ## Erreurs & dépannage
93 93
modified docs/connecteurs/cfmontreal.md +5 −5
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/cfmontreal.md
7 7 Rôle : Fiche connecteur — CF Montréal (employeur direct, ATS smartrecruiters)
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -36,7 +36,7 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
36 36
37 37 ## Champs → schéma
38 38
39 −Complétude mesurée sur les **8 offres actives** de la source (base live, 2026-08-19 03:39 EDT).
39 +Complétude mesurée sur les **8 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
40 40
41 41 | Champ (`jobs.*`) | Rôle | Complétude |
42 42 |---|---|---|
@@ -77,15 +77,15 @@ Exemple réel : *Chef(e) de projets et production marketing - TEMPORAIRE / Marke
77 77
78 78 ## Volumétrie & complétude live
79 79
80 −*(mesuré le 2026-08-19 03:39 EDT dans `data/jobka.db`)*
80 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
81 81
82 82 - **Offres en base** : 8 (dont **8 actives**, 0 masquées comme doublons `dup_of`)
83 83 - **Salaire** : 0/8 actives (0 %)
84 84 - **GPS** : 8/8 actives (100 %)
85 85 - **Mode** : 0/8 actives (0 %)
86 86 - **Parution** : 8/8 actives (100 %)
87 −- **Dernier sync** : 2026-08-19 01:32 — trouvées 8, +0, ~8, -0
88 −- **Syncs enregistrés** (`sync_log`) : 25
87 +- **Dernier sync** : 2026-08-19 03:42 — trouvées 8, +0, ~0, -0
88 +- **Syncs enregistrés** (`sync_log`) : 26
89 89
90 90 ## Erreurs & dépannage
91 91
added docs/connecteurs/cgi.md +119 −0
@@ -0,0 +1,119 @@
1 +<!--
2 +=============================================================================
3 +Job·Ka — Groupe KA
4 +Auteur : Simon-Pierre Boucher
5 +Contact : contact@spboucher.ai
6 +Fichier : docs/connecteurs/cgi.md
7 +Rôle : Fiche connecteur — CGI (employeur direct, ATS njoyn)
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 + relancer le script pour régénérer.
10 +=============================================================================
11 +-->
12 +
13 +# CGI (`cgi`)
14 +
15 +**Employeur direct** · Plateforme ATS : [`njoyn`](ats-njoyn.md) · Statut registre : actif · Connecteur : `jobka/connectors/cgi.py`
16 +
17 +## Description
18 +
19 +- **Site** : [CGI](https://www.cgi.com)
20 +- **Page carrières** : https://cgi.njoyn.com/CORP/xweb/xweb.asp?clid=21001&page=joblisting&lang=2
21 +- **Secteurs** : TI, Services-conseils
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-njoyn.md`](ats-njoyn.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 +| `BASE` | `https://cgi.njoyn.com` |
33 +| `CL` | `CORP` |
34 +| `CLID` | `21001` |
35 +| `EMPLOYER` | `CGI` |
36 +| `LANG` | `2` |
37 +| `USE_SCRAPFLY` | `True` |
38 +- **Throttle** : 1.2 s entre requêtes.
39 +- **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).
40 +
41 +## Champs → schéma
42 +
43 +Complétude mesurée sur les **127 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
44 +
45 +| Champ (`jobs.*`) | Rôle | Complétude |
46 +|---|---|---|
47 +| `title` — Titre | titre du poste | 100 % |
48 +| `employer` — Employeur | nom de l'entreprise | 100 % |
49 +| `url` — URL | lien direct vers l'offre originale | 100 % |
50 +| `description` — Description | texte complet (HTML nettoyé) | 9 % |
51 +| `city` — Ville | municipalité normalisée | 100 % |
52 +| `region` — Région | région administrative | 100 % |
53 +| `address` — Adresse | adresse du lieu de travail | 0 % |
54 +| `postal_code` — Code postal | code postal si publié | 0 % |
55 +| `work_mode` — Mode | presentiel / hybride / teletravail | 0 % |
56 +| `employment_type` — Type | temps_plein / temps_partiel / … | 8 % |
57 +| `salary` — Salaire ($) | bornes numériques normalisées $/h et $/an | 0 % |
58 +| `salary_label` — Libellé salaire | texte salarial original | 0 % |
59 +| `benefits` — Avantages | avantages sociaux publiés (JSON) | 0 % |
60 +| `requirements` — Exigences | scolarité, expérience, langues (JSON) | 0 % |
61 +| `date_posted` — Date de parution | ISO 8601 | 0 % |
62 +| `date_deadline` — Date limite | date limite pour postuler | 0 % |
63 +| `category` — Catégorie | taxonomie interne (TI, Santé, …) | 66 % |
64 +| `language` — Langue | fr / en / bilingue (source ou heuristique) | 0 % |
65 +| `company_logo` — Logo employeur | URL du logo si exposé par la source | 0 % |
66 +| `apply_url` — Candidature | lien de candidature directe | 0 % |
67 +| `gps` — GPS | lat/lng (géocodage sans invention) | 0 % |
68 +
69 +Exemple réel : *Conseiller en architecture de solution Infrastructure Cloud AWS* — Québec · ∅ · parue le ∅.
70 +
71 +## Fréquence & budgets
72 +
73 +- **Cadence** : resynchronisation **horaire** (PM2 `job-ka-sync` = `run.py watch 60`), suivie du géocodage en lot puis de la déduplication inter-sources.
74 +- **Throttle** : 1.2 s minimum entre deux requêtes vers la source (`request_delay`).
75 +- **Budgets / plafonds (variables d'environnement)** :
76 +
77 +| Variable | Défaut |
78 +|---|---|
79 +| `JOBKA_NJOYN_DETAIL_LIMIT` | `40` |
80 +- 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.
81 +
82 +## Volumétrie & complétude live
83 +
84 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
85 +
86 +- **Offres en base** : 127 (dont **127 actives**, 0 masquées comme doublons `dup_of`)
87 +- **Salaire** : 0/127 actives (0 %)
88 +- **GPS** : 0/127 actives (0 %)
89 +- **Mode** : 0/127 actives (0 %)
90 +- **Parution** : 0/127 actives (0 %)
91 +- **Dernier sync** : 2026-08-19 05:11 — trouvées 127, +127, ~0, -0
92 +- **Syncs enregistrés** (`sync_log`) : 1
93 +
94 +## Erreurs & dépannage
95 +
96 +Aucune erreur dans `sync_log` pour cette source.
97 +
98 +- Rejouer un sync isolé : `.venv/bin/python run.py sync cgi` puis inspecter `sync_log` : `sqlite3 data/jobka.db "SELECT * FROM sync_log WHERE source='cgi' ORDER BY ts DESC LIMIT 5;"`
99 +- 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`.
100 +
101 +## Licence / conformité
102 +
103 +**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 CGI » 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.
104 +
105 +Certains domaines de cette plateforme sont servis derrière un gestionnaire anti-bot : la lecture passe alors par Scrapfly, toujours sur des pages strictement publiques, au même rythme throttlé.
106 +
107 +## Historique
108 +
109 +**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 :
110 +- `fd4bfc8` qualité lieux : rejet des villes hors Québec, bâtiments McGill → Montréal ;
111 +- `5a66f48` +59 employeurs (sondage massif d'ATS + détection de pages carrières) ;
112 +- `4917d57` 8 nouveaux ATS (Taleo, Njoyn, UltiPro, iCIMS, SuccessFactors, ADP WFN, Digital Recruiters, Workland) + 23 employeurs publics/parapublics ;
113 +- `f6e7571` portails Guichet-Emplois, Jobillico, Espresso-Jobs — l'offre directe gagne toujours la canonique (dédup) ;
114 +- `744cbfc` badge « Offre directe », stats directes/portails, dépôt direct employeurs ;
115 +- `1604ff9` reprise sur coupure WAF Guichet-Emplois (retry + acquis partiel).
116 +
117 +Commits touchant `jobka/connectors/cgi.py` :
118 +
119 +- `0298197` 2026-08-19 Vague A (detected-other-ats) — nouveaux employeurs sur familles existantes : Hydro-Québec (SuccessFactors CSB emploi.hydroquebec.com, 66 offres) ; Deloitte Canada (CSB careers.deloitte.ca, 105 offres QC — remplace la détection Taleo périmée) ; CGI (Njoyn corporatif via Scrapfly, babillard mondial de ~2 900 postes filtré Québec, budgets frugaux) ; Fruit d'Or (12) et Nortera (24 QC) sur UKG Pro recruiting.ultipro.ca ; Placements Mackenzie/groupe Power (iCIMS FR, 3 QC) ; Cultures Gen V (6), Bento Sushi (9 QC), Osgoode Properties (1) sur ADP WFN. Retrait ttcglobal (plus d'offre QC : 2 offres Dallas/Londres). Écartés avec raisons (docs/CONFORMITE.md) : Canada Vie, Groupe Dynamite, Jack Astor's/SIR, Méchant Bœuf, Valero (0 offre), Résolu (fusion Domtar), Power Corp directe.
modified docs/connecteurs/charger_logistics_inc.md +5 −5
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/charger_logistics_inc.md
7 7 Rôle : Fiche connecteur — Charger Logistics (employeur direct, ATS workable)
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -36,7 +36,7 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
36 36
37 37 ## Champs → schéma
38 38
39 −Complétude mesurée sur les **1 offres actives** de la source (base live, 2026-08-19 03:39 EDT).
39 +Complétude mesurée sur les **1 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
40 40
41 41 | Champ (`jobs.*`) | Rôle | Complétude |
42 42 |---|---|---|
@@ -72,15 +72,15 @@ Exemple réel : *Security Guard (Trucking Yard)* — Québec · ∅ · parue le
72 72
73 73 ## Volumétrie & complétude live
74 74
75 −*(mesuré le 2026-08-19 03:39 EDT dans `data/jobka.db`)*
75 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
76 76
77 77 - **Offres en base** : 1 (dont **1 actives**, 0 masquées comme doublons `dup_of`)
78 78 - **Salaire** : 0/1 actives (0 %)
79 79 - **GPS** : 1/1 actives (100 %)
80 80 - **Mode** : 0/1 actives (0 %)
81 81 - **Parution** : 1/1 actives (100 %)
82 −- **Dernier sync** : 2026-08-19 01:32 — trouvées 1, +0, ~1, -0
83 −- **Syncs enregistrés** (`sync_log`) : 25
82 +- **Dernier sync** : 2026-08-19 03:42 — trouvées 1, +0, ~0, -0
83 +- **Syncs enregistrés** (`sync_log`) : 26
84 84
85 85 ## Erreurs & dépannage
86 86
added docs/connecteurs/chu_quebec.md +115 −0
@@ -0,0 +1,115 @@
1 +<!--
2 +=============================================================================
3 +Job·Ka — Groupe KA
4 +Auteur : Simon-Pierre Boucher
5 +Contact : contact@spboucher.ai
6 +Fichier : docs/connecteurs/chu_quebec.md
7 +Rôle : Fiche connecteur — CHU de Québec — Université Laval (employeur direct, ATS wpjobmanager)
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 + relancer le script pour régénérer.
10 +=============================================================================
11 +-->
12 +
13 +# CHU de Québec — Université Laval (`chu_quebec`)
14 +
15 +**Employeur direct** · Plateforme ATS : [`wpjobmanager`](ats-wpjobmanager.md) · Statut registre : actif · Connecteur : `jobka/connectors/chu_quebec.py`
16 +
17 +## Description
18 +
19 +- **Site** : [CHU de Québec — Université Laval](https://www.chudequebec.ca)
20 +- **Page carrières** : https://chudequebec.carrieresante.gouv.qc.ca
21 +- **Secteurs** : Santé, Secteur public
22 +- **Région** : 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-wpjobmanager.md`](ats-wpjobmanager.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 +| `BASE` | `https://chudequebec.carrieresante.gouv.qc.ca` |
33 +| `DEFAULT_CITY` | `Québec` |
34 +| `EMPLOYER` | `CHU de Québec — Université Laval` |
35 +| `PER_PAGE` | `500` |
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 **60 offres actives** de la source (base live, 2026-08-19 05:40 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 / … | 57 % |
55 +| `salary` — Salaire ($) | bornes numériques normalisées $/h et $/an | 10 % |
56 +| `salary_label` — Libellé salaire | texte salarial original | 10 % |
57 +| `benefits` — Avantages | avantages sociaux publiés (JSON) | 2 % |
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 | 100 % |
61 +| `category` — Catégorie | taxonomie interne (TI, Santé, …) | 85 % |
62 +| `language` — Langue | fr / en / bilingue (source ou heuristique) | 100 % |
63 +| `company_logo` — Logo employeur | URL du logo si exposé par la source | 0 % |
64 +| `apply_url` — Candidature | lien de candidature directe | 0 % |
65 +| `gps` — GPS | lat/lng (géocodage sans invention) | 0 % |
66 +
67 +Exemple réel : *Conseiller.ère cadre – Partenaire d’affaires – Concours 2026-49* — Québec · Selon les normes applicables au personnel d’encadrement du réseau de la santé et des servi… · parue le 2026-08-19.
68 +
69 +## Fréquence & budgets
70 +
71 +- **Cadence** : resynchronisation **horaire** (PM2 `job-ka-sync` = `run.py watch 60`), suivie du géocodage en lot puis de la déduplication inter-sources.
72 +- **Throttle** : 1.0 s minimum entre deux requêtes vers la source (`request_delay`).
73 +- **Budgets / plafonds (variables d'environnement)** :
74 +
75 +| Variable | Défaut |
76 +|---|---|
77 +| `JOBKA_WPJM_DETAIL_LIMIT` | `60` |
78 +- 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.
79 +
80 +## Volumétrie & complétude live
81 +
82 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
83 +
84 +- **Offres en base** : 60 (dont **60 actives**, 0 masquées comme doublons `dup_of`)
85 +- **Salaire** : 6/60 actives (10 %)
86 +- **GPS** : 0/60 actives (0 %)
87 +- **Mode** : 0/60 actives (0 %)
88 +- **Parution** : 60/60 actives (100 %)
89 +- **Dernier sync** : 2026-08-19 04:51 — trouvées 60, +60, ~0, -0
90 +- **Syncs enregistrés** (`sync_log`) : 1
91 +
92 +## Erreurs & dépannage
93 +
94 +Aucune erreur dans `sync_log` pour cette source.
95 +
96 +- Rejouer un sync isolé : `.venv/bin/python run.py sync chu_quebec` puis inspecter `sync_log` : `sqlite3 data/jobka.db "SELECT * FROM sync_log WHERE source='chu_quebec' ORDER BY ts DESC LIMIT 5;"`
97 +- 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`.
98 +
99 +## Licence / conformité
100 +
101 +**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 CHU de Québec — Université Laval » 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.
102 +
103 +## Historique
104 +
105 +**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 :
106 +- `fd4bfc8` qualité lieux : rejet des villes hors Québec, bâtiments McGill → Montréal ;
107 +- `5a66f48` +59 employeurs (sondage massif d'ATS + détection de pages carrières) ;
108 +- `4917d57` 8 nouveaux ATS (Taleo, Njoyn, UltiPro, iCIMS, SuccessFactors, ADP WFN, Digital Recruiters, Workland) + 23 employeurs publics/parapublics ;
109 +- `f6e7571` portails Guichet-Emplois, Jobillico, Espresso-Jobs — l'offre directe gagne toujours la canonique (dédup) ;
110 +- `744cbfc` badge « Offre directe », stats directes/portails, dépôt direct employeurs ;
111 +- `1604ff9` reprise sur coupure WAF Guichet-Emplois (retry + acquis partiel).
112 +
113 +Commits touchant `jobka/connectors/chu_quebec.py` :
114 +
115 +- `5f13718` 2026-08-19 Nouvelle famille wpjobmanager (WordPress + WP Job Manager) : flux job_feed (contenu complet en une requête) + JSON-LD des pages poste (date limite, lieu). Ouvre la plateforme carrieresante.gouv.qc.ca de Santé Québec (un site par établissement, en déploiement) : CHU de Québec (60), CHUM (25), CISSS Abitibi-Témiscamingue (141), Chaudière-Appalaches (112), Laval (149), Lanaudière (124), Laurentides (130) + CISSS de l'Outaouais via viensvivretespassions.ca (101). Fixture chum. + connecteur cssdd (CSS des Découvreurs, famille DigitalRecruiters existante).
added docs/connecteurs/chum.md +115 −0
@@ -0,0 +1,115 @@
1 +<!--
2 +=============================================================================
3 +Job·Ka — Groupe KA
4 +Auteur : Simon-Pierre Boucher
5 +Contact : contact@spboucher.ai
6 +Fichier : docs/connecteurs/chum.md
7 +Rôle : Fiche connecteur — CHUM (employeur direct, ATS wpjobmanager)
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 + relancer le script pour régénérer.
10 +=============================================================================
11 +-->
12 +
13 +# CHUM (`chum`)
14 +
15 +**Employeur direct** · Plateforme ATS : [`wpjobmanager`](ats-wpjobmanager.md) · Statut registre : actif · Connecteur : `jobka/connectors/chum.py`
16 +
17 +## Description
18 +
19 +- **Site** : [CHUM](https://www.chumontreal.qc.ca)
20 +- **Page carrières** : https://chum.carrieresante.gouv.qc.ca
21 +- **Secteurs** : Santé, Secteur public
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-wpjobmanager.md`](ats-wpjobmanager.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 +| `BASE` | `https://chum.carrieresante.gouv.qc.ca` |
33 +| `DEFAULT_CITY` | `Montréal` |
34 +| `EMPLOYER` | `CHUM` |
35 +| `PER_PAGE` | `500` |
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 **25 offres actives** de la source (base live, 2026-08-19 05:40 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 / … | 12 % |
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) | 4 % |
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 | 100 % |
61 +| `category` — Catégorie | taxonomie interne (TI, Santé, …) | 96 % |
62 +| `language` — Langue | fr / en / bilingue (source ou heuristique) | 100 % |
63 +| `company_logo` — Logo employeur | URL du logo si exposé par la source | 0 % |
64 +| `apply_url` — Candidature | lien de candidature directe | 0 % |
65 +| `gps` — GPS | lat/lng (géocodage sans invention) | 0 % |
66 +
67 +Exemple réel : *Chef de service – Chef de service Systèmes d’information et gestion de projets* — Montréal · ∅ · parue le 2026-08-17.
68 +
69 +## Fréquence & budgets
70 +
71 +- **Cadence** : resynchronisation **horaire** (PM2 `job-ka-sync` = `run.py watch 60`), suivie du géocodage en lot puis de la déduplication inter-sources.
72 +- **Throttle** : 1.0 s minimum entre deux requêtes vers la source (`request_delay`).
73 +- **Budgets / plafonds (variables d'environnement)** :
74 +
75 +| Variable | Défaut |
76 +|---|---|
77 +| `JOBKA_WPJM_DETAIL_LIMIT` | `60` |
78 +- 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.
79 +
80 +## Volumétrie & complétude live
81 +
82 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
83 +
84 +- **Offres en base** : 25 (dont **25 actives**, 24 masquées comme doublons `dup_of`)
85 +- **Salaire** : 0/25 actives (0 %)
86 +- **GPS** : 0/25 actives (0 %)
87 +- **Mode** : 0/25 actives (0 %)
88 +- **Parution** : 25/25 actives (100 %)
89 +- **Dernier sync** : 2026-08-19 04:52 — trouvées 25, +25, ~0, -0
90 +- **Syncs enregistrés** (`sync_log`) : 1
91 +
92 +## Erreurs & dépannage
93 +
94 +Aucune erreur dans `sync_log` pour cette source.
95 +
96 +- Rejouer un sync isolé : `.venv/bin/python run.py sync chum` puis inspecter `sync_log` : `sqlite3 data/jobka.db "SELECT * FROM sync_log WHERE source='chum' ORDER BY ts DESC LIMIT 5;"`
97 +- 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`.
98 +
99 +## Licence / conformité
100 +
101 +**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 CHUM » 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.
102 +
103 +## Historique
104 +
105 +**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 :
106 +- `fd4bfc8` qualité lieux : rejet des villes hors Québec, bâtiments McGill → Montréal ;
107 +- `5a66f48` +59 employeurs (sondage massif d'ATS + détection de pages carrières) ;
108 +- `4917d57` 8 nouveaux ATS (Taleo, Njoyn, UltiPro, iCIMS, SuccessFactors, ADP WFN, Digital Recruiters, Workland) + 23 employeurs publics/parapublics ;
109 +- `f6e7571` portails Guichet-Emplois, Jobillico, Espresso-Jobs — l'offre directe gagne toujours la canonique (dédup) ;
110 +- `744cbfc` badge « Offre directe », stats directes/portails, dépôt direct employeurs ;
111 +- `1604ff9` reprise sur coupure WAF Guichet-Emplois (retry + acquis partiel).
112 +
113 +Commits touchant `jobka/connectors/chum.py` :
114 +
115 +- `5f13718` 2026-08-19 Nouvelle famille wpjobmanager (WordPress + WP Job Manager) : flux job_feed (contenu complet en une requête) + JSON-LD des pages poste (date limite, lieu). Ouvre la plateforme carrieresante.gouv.qc.ca de Santé Québec (un site par établissement, en déploiement) : CHU de Québec (60), CHUM (25), CISSS Abitibi-Témiscamingue (141), Chaudière-Appalaches (112), Laval (149), Lanaudière (124), Laurentides (130) + CISSS de l'Outaouais via viensvivretespassions.ca (101). Fixture chum. + connecteur cssdd (CSS des Découvreurs, famille DigitalRecruiters existante).
modified docs/connecteurs/churchdwight.md +6 −6
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/churchdwight.md
7 7 Rôle : Fiche connecteur — Church & Dwight Canada (employeur direct, ATS workday)
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -38,7 +38,7 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
38 38
39 39 ## Champs → schéma
40 40
41 −Complétude mesurée sur les **6 offres actives** de la source (base live, 2026-08-19 03:39 EDT).
41 +Complétude mesurée sur les **6 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
42 42
43 43 | Champ (`jobs.*`) | Rôle | Complétude |
44 44 |---|---|---|
@@ -64,7 +64,7 @@ Complétude mesurée sur les **6 offres actives** de la source (base live, 2026-
64 64 | `apply_url` — Candidature | lien de candidature directe | 100 % |
65 65 | `gps` — GPS | lat/lng (géocodage sans invention) | 100 % |
66 66
67 −Exemple réel : *Electromécanicien(ne)* — Montréal · ∅ · parue le 2026-08-13.
67 +Exemple réel : *Electromécanicien(ne)* — Montréal · ∅ · parue le 2026-08-12.
68 68
69 69 ## Fréquence & budgets
70 70
@@ -79,15 +79,15 @@ Exemple réel : *Electromécanicien(ne)* — Montréal · ∅ · parue le 2026-0
79 79
80 80 ## Volumétrie & complétude live
81 81
82 −*(mesuré le 2026-08-19 03:39 EDT dans `data/jobka.db`)*
82 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
83 83
84 84 - **Offres en base** : 6 (dont **6 actives**, 0 masquées comme doublons `dup_of`)
85 85 - **Salaire** : 0/6 actives (0 %)
86 86 - **GPS** : 6/6 actives (100 %)
87 87 - **Mode** : 0/6 actives (0 %)
88 88 - **Parution** : 6/6 actives (100 %)
89 −- **Dernier sync** : 2026-08-19 01:32 — trouvées 6, +0, ~6, -0
90 −- **Syncs enregistrés** (`sync_log`) : 13
89 +- **Dernier sync** : 2026-08-19 03:42 — trouvées 6, +0, ~2, -0
90 +- **Syncs enregistrés** (`sync_log`) : 14
91 91
92 92 ## Erreurs & dépannage
93 93
modified docs/connecteurs/cibc.md +6 −6
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/cibc.md
7 7 Rôle : Fiche connecteur — Banque CIBC (employeur direct, ATS workday)
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -38,7 +38,7 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
38 38
39 39 ## Champs → schéma
40 40
41 −Complétude mesurée sur les **65 offres actives** de la source (base live, 2026-08-19 03:39 EDT).
41 +Complétude mesurée sur les **65 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
42 42
43 43 | Champ (`jobs.*`) | Rôle | Complétude |
44 44 |---|---|---|
@@ -64,7 +64,7 @@ Complétude mesurée sur les **65 offres actives** de la source (base live, 2026
64 64 | `apply_url` — Candidature | lien de candidature directe | 100 % |
65 65 | `gps` — GPS | lat/lng (géocodage sans invention) | 100 % |
66 66
67 −Exemple réel : *Relationship Manager, Commercial Banking-Bilingual* — Rouyn-Noranda · ∅ · parue le 2026-08-19.
67 +Exemple réel : *Relationship Manager, Commercial Banking-Bilingual* — Rouyn-Noranda · ∅ · parue le 2026-08-18.
68 68
69 69 ## Fréquence & budgets
70 70
@@ -79,15 +79,15 @@ Exemple réel : *Relationship Manager, Commercial Banking-Bilingual* — Rouyn-N
79 79
80 80 ## Volumétrie & complétude live
81 81
82 −*(mesuré le 2026-08-19 03:39 EDT dans `data/jobka.db`)*
82 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
83 83
84 84 - **Offres en base** : 69 (dont **65 actives**, 0 masquées comme doublons `dup_of`)
85 85 - **Salaire** : 0/65 actives (0 %)
86 86 - **GPS** : 65/65 actives (100 %)
87 87 - **Mode** : 2/65 actives (3 %)
88 88 - **Parution** : 65/65 actives (100 %)
89 −- **Dernier sync** : 2026-08-19 01:33 — trouvées 65, +0, ~65, -2
90 −- **Syncs enregistrés** (`sync_log`) : 25
89 +- **Dernier sync** : 2026-08-19 03:44 — trouvées 65, +0, ~61, -0
90 +- **Syncs enregistrés** (`sync_log`) : 26
91 91
92 92 ## Erreurs & dépannage
93 93
modified docs/connecteurs/cima2.md +5 −5
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/cima2.md
7 7 Rôle : Fiche connecteur — CIMA+ (employeur direct, ATS smartrecruiters)
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -36,7 +36,7 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
36 36
37 37 ## Champs → schéma
38 38
39 −Complétude mesurée sur les **221 offres actives** de la source (base live, 2026-08-19 03:39 EDT).
39 +Complétude mesurée sur les **221 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
40 40
41 41 | Champ (`jobs.*`) | Rôle | Complétude |
42 42 |---|---|---|
@@ -77,15 +77,15 @@ Exemple réel : *Technicienne ou technicien, inspection de structures de téléc
77 77
78 78 ## Volumétrie & complétude live
79 79
80 −*(mesuré le 2026-08-19 03:39 EDT dans `data/jobka.db`)*
80 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
81 81
82 82 - **Offres en base** : 231 (dont **221 actives**, 0 masquées comme doublons `dup_of`)
83 83 - **Salaire** : 0/221 actives (0 %)
84 84 - **GPS** : 221/221 actives (100 %)
85 85 - **Mode** : 185/221 actives (84 %)
86 86 - **Parution** : 221/221 actives (100 %)
87 −- **Dernier sync** : 2026-08-19 01:33 — trouvées 221, +0, ~221, -0
88 −- **Syncs enregistrés** (`sync_log`) : 25
87 +- **Dernier sync** : 2026-08-19 03:44 — trouvées 221, +0, ~0, -0
88 +- **Syncs enregistrés** (`sync_log`) : 26
89 89
90 90 ## Erreurs & dépannage
91 91
modified docs/connecteurs/circlek.md +6 −6
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/circlek.md
7 7 Rôle : Fiche connecteur — Couche-Tard / Circle K (employeur direct, ATS workday)
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -38,7 +38,7 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
38 38
39 39 ## Champs → schéma
40 40
41 −Complétude mesurée sur les **1012 offres actives** de la source (base live, 2026-08-19 03:39 EDT).
41 +Complétude mesurée sur les **1012 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
42 42
43 43 | Champ (`jobs.*`) | Rôle | Complétude |
44 44 |---|---|---|
@@ -64,7 +64,7 @@ Complétude mesurée sur les **1012 offres actives** de la source (base live, 20
64 64 | `apply_url` — Candidature | lien de candidature directe | 30 % |
65 65 | `gps` — GPS | lat/lng (géocodage sans invention) | 63 % |
66 66
67 −Exemple réel : *Préposé(e) au service à la clientèle de nuit -ACT* — Québec · Salaire (nuit) : 20,10$ /h (Incluant prime*) · parue le 2026-08-19.
67 +Exemple réel : *Assistant-Gérant* — Sherbrooke · Salaire de jour : $17.75 (prime incluse**) · parue le 2026-08-19.
68 68
69 69 ## Fréquence & budgets
70 70
@@ -79,15 +79,15 @@ Exemple réel : *Préposé(e) au service à la clientèle de nuit -ACT* — Qué
79 79
80 80 ## Volumétrie & complétude live
81 81
82 −*(mesuré le 2026-08-19 03:39 EDT dans `data/jobka.db`)*
82 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
83 83
84 84 - **Offres en base** : 1039 (dont **1012 actives**, 0 masquées comme doublons `dup_of`)
85 85 - **Salaire** : 616/1012 actives (61 %)
86 86 - **GPS** : 642/1012 actives (63 %)
87 87 - **Mode** : 2/1012 actives (0 %)
88 88 - **Parution** : 1012/1012 actives (100 %)
89 −- **Dernier sync** : 2026-08-19 01:40 — trouvées 1012, +1, ~1011, -2
90 −- **Syncs enregistrés** (`sync_log`) : 25
89 +- **Dernier sync** : 2026-08-19 03:51 — trouvées 1012, +0, ~432, -0
90 +- **Syncs enregistrés** (`sync_log`) : 26
91 91
92 92 ## Erreurs & dépannage
93 93
modified docs/connecteurs/cirquedusoleil.md +5 −5
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/cirquedusoleil.md
7 7 Rôle : Fiche connecteur — Cirque du Soleil (employeur direct, ATS lever)
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -36,7 +36,7 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
36 36
37 37 ## Champs → schéma
38 38
39 −Complétude mesurée sur les **22 offres actives** de la source (base live, 2026-08-19 03:39 EDT).
39 +Complétude mesurée sur les **22 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
40 40
41 41 | Champ (`jobs.*`) | Rôle | Complétude |
42 42 |---|---|---|
@@ -72,15 +72,15 @@ Exemple réel : *Vice-président(e), Marketing – Spectacles internationaux et
72 72
73 73 ## Volumétrie & complétude live
74 74
75 −*(mesuré le 2026-08-19 03:39 EDT dans `data/jobka.db`)*
75 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
76 76
77 77 - **Offres en base** : 22 (dont **22 actives**, 0 masquées comme doublons `dup_of`)
78 78 - **Salaire** : 0/22 actives (0 %)
79 79 - **GPS** : 19/22 actives (86 %)
80 80 - **Mode** : 22/22 actives (100 %)
81 81 - **Parution** : 22/22 actives (100 %)
82 −- **Dernier sync** : 2026-08-19 01:41 — trouvées 22, +0, ~22, -0
83 −- **Syncs enregistrés** (`sync_log`) : 13
82 +- **Dernier sync** : 2026-08-19 03:51 — trouvées 22, +0, ~0, -0
83 +- **Syncs enregistrés** (`sync_log`) : 14
84 84
85 85 ## Erreurs & dépannage
86 86
added docs/connecteurs/cisss_abitibi.md +115 −0
@@ -0,0 +1,115 @@
1 +<!--
2 +=============================================================================
3 +Job·Ka — Groupe KA
4 +Auteur : Simon-Pierre Boucher
5 +Contact : contact@spboucher.ai
6 +Fichier : docs/connecteurs/cisss_abitibi.md
7 +Rôle : Fiche connecteur — CISSS de l'Abitibi-Témiscamingue (employeur direct, ATS wpjobmanager)
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 + relancer le script pour régénérer.
10 +=============================================================================
11 +-->
12 +
13 +# CISSS de l'Abitibi-Témiscamingue (`cisss_abitibi`)
14 +
15 +**Employeur direct** · Plateforme ATS : [`wpjobmanager`](ats-wpjobmanager.md) · Statut registre : actif · Connecteur : `jobka/connectors/cisss_abitibi.py`
16 +
17 +## Description
18 +
19 +- **Site** : [CISSS de l'Abitibi-Témiscamingue](https://www.cisss-at.gouv.qc.ca)
20 +- **Page carrières** : https://cisssat.carrieresante.gouv.qc.ca
21 +- **Secteurs** : Santé, Secteur public
22 +- **Région** : Abitibi-Témiscamingue
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-wpjobmanager.md`](ats-wpjobmanager.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 +| `BASE` | `https://cisssat.carrieresante.gouv.qc.ca` |
33 +| `DEFAULT_CITY` | `Rouyn-Noranda` |
34 +| `EMPLOYER` | `CISSS de l'Abitibi-Témiscamingue` |
35 +| `PER_PAGE` | `500` |
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 **141 offres actives** de la source (base live, 2026-08-19 05:40 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 / … | 23 % |
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 | 100 % |
60 +| `date_deadline` — Date limite | date limite pour postuler | 100 % |
61 +| `category` — Catégorie | taxonomie interne (TI, Santé, …) | 92 % |
62 +| `language` — Langue | fr / en / bilingue (source ou heuristique) | 100 % |
63 +| `company_logo` — Logo employeur | URL du logo si exposé par la source | 0 % |
64 +| `apply_url` — Candidature | lien de candidature directe | 0 % |
65 +| `gps` — GPS | lat/lng (géocodage sans invention) | 0 % |
66 +
67 +Exemple réel : *Chef de service de l’unité multiclientèle et continuum mère-enfant MRC Témiscamingue* — Rouyn-Noranda · ∅ · parue le 2026-08-18.
68 +
69 +## Fréquence & budgets
70 +
71 +- **Cadence** : resynchronisation **horaire** (PM2 `job-ka-sync` = `run.py watch 60`), suivie du géocodage en lot puis de la déduplication inter-sources.
72 +- **Throttle** : 1.0 s minimum entre deux requêtes vers la source (`request_delay`).
73 +- **Budgets / plafonds (variables d'environnement)** :
74 +
75 +| Variable | Défaut |
76 +|---|---|
77 +| `JOBKA_WPJM_DETAIL_LIMIT` | `60` |
78 +- 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.
79 +
80 +## Volumétrie & complétude live
81 +
82 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
83 +
84 +- **Offres en base** : 141 (dont **141 actives**, 0 masquées comme doublons `dup_of`)
85 +- **Salaire** : 0/141 actives (0 %)
86 +- **GPS** : 0/141 actives (0 %)
87 +- **Mode** : 0/141 actives (0 %)
88 +- **Parution** : 141/141 actives (100 %)
89 +- **Dernier sync** : 2026-08-19 04:55 — trouvées 141, +141, ~0, -0
90 +- **Syncs enregistrés** (`sync_log`) : 1
91 +
92 +## Erreurs & dépannage
93 +
94 +Aucune erreur dans `sync_log` pour cette source.
95 +
96 +- Rejouer un sync isolé : `.venv/bin/python run.py sync cisss_abitibi` puis inspecter `sync_log` : `sqlite3 data/jobka.db "SELECT * FROM sync_log WHERE source='cisss_abitibi' ORDER BY ts DESC LIMIT 5;"`
97 +- 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`.
98 +
99 +## Licence / conformité
100 +
101 +**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 CISSS de l'Abitibi-Témiscamingue » 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.
102 +
103 +## Historique
104 +
105 +**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 :
106 +- `fd4bfc8` qualité lieux : rejet des villes hors Québec, bâtiments McGill → Montréal ;
107 +- `5a66f48` +59 employeurs (sondage massif d'ATS + détection de pages carrières) ;
108 +- `4917d57` 8 nouveaux ATS (Taleo, Njoyn, UltiPro, iCIMS, SuccessFactors, ADP WFN, Digital Recruiters, Workland) + 23 employeurs publics/parapublics ;
109 +- `f6e7571` portails Guichet-Emplois, Jobillico, Espresso-Jobs — l'offre directe gagne toujours la canonique (dédup) ;
110 +- `744cbfc` badge « Offre directe », stats directes/portails, dépôt direct employeurs ;
111 +- `1604ff9` reprise sur coupure WAF Guichet-Emplois (retry + acquis partiel).
112 +
113 +Commits touchant `jobka/connectors/cisss_abitibi.py` :
114 +
115 +- `5f13718` 2026-08-19 Nouvelle famille wpjobmanager (WordPress + WP Job Manager) : flux job_feed (contenu complet en une requête) + JSON-LD des pages poste (date limite, lieu). Ouvre la plateforme carrieresante.gouv.qc.ca de Santé Québec (un site par établissement, en déploiement) : CHU de Québec (60), CHUM (25), CISSS Abitibi-Témiscamingue (141), Chaudière-Appalaches (112), Laval (149), Lanaudière (124), Laurentides (130) + CISSS de l'Outaouais via viensvivretespassions.ca (101). Fixture chum. + connecteur cssdd (CSS des Découvreurs, famille DigitalRecruiters existante).
added docs/connecteurs/cisss_chaudiere_appalaches.md +115 −0
@@ -0,0 +1,115 @@
1 +<!--
2 +=============================================================================
3 +Job·Ka — Groupe KA
4 +Auteur : Simon-Pierre Boucher
5 +Contact : contact@spboucher.ai
6 +Fichier : docs/connecteurs/cisss_chaudiere_appalaches.md
7 +Rôle : Fiche connecteur — CISSS de Chaudière-Appalaches (employeur direct, ATS wpjobmanager)
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 + relancer le script pour régénérer.
10 +=============================================================================
11 +-->
12 +
13 +# CISSS de Chaudière-Appalaches (`cisss_chaudiere_appalaches`)
14 +
15 +**Employeur direct** · Plateforme ATS : [`wpjobmanager`](ats-wpjobmanager.md) · Statut registre : actif · Connecteur : `jobka/connectors/cisss_chaudiere_appalaches.py`
16 +
17 +## Description
18 +
19 +- **Site** : [CISSS de Chaudière-Appalaches](https://www.cisssca.com)
20 +- **Page carrières** : https://cisssca.carrieresante.gouv.qc.ca
21 +- **Secteurs** : Santé, Secteur public
22 +- **Région** : Chaudière-Appalaches
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-wpjobmanager.md`](ats-wpjobmanager.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 +| `BASE` | `https://cisssca.carrieresante.gouv.qc.ca` |
33 +| `DEFAULT_CITY` | `Lévis` |
34 +| `EMPLOYER` | `CISSS de Chaudière-Appalaches` |
35 +| `PER_PAGE` | `500` |
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 **112 offres actives** de la source (base live, 2026-08-19 05:40 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 / … | 38 % |
55 +| `salary` — Salaire ($) | bornes numériques normalisées $/h et $/an | 8 % |
56 +| `salary_label` — Libellé salaire | texte salarial original | 8 % |
57 +| `benefits` — Avantages | avantages sociaux publiés (JSON) | 2 % |
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 | 100 % |
61 +| `category` — Catégorie | taxonomie interne (TI, Santé, …) | 75 % |
62 +| `language` — Langue | fr / en / bilingue (source ou heuristique) | 100 % |
63 +| `company_logo` — Logo employeur | URL du logo si exposé par la source | 0 % |
64 +| `apply_url` — Candidature | lien de candidature directe | 0 % |
65 +| `gps` — GPS | lat/lng (géocodage sans invention) | 0 % |
66 +
67 +Exemple réel : *Directeur médical Optilab et Chef du département clinique de médecine de laboratoire* — Lévis · Classe G (275 102$ annuel) · parue le 2026-08-12.
68 +
69 +## Fréquence & budgets
70 +
71 +- **Cadence** : resynchronisation **horaire** (PM2 `job-ka-sync` = `run.py watch 60`), suivie du géocodage en lot puis de la déduplication inter-sources.
72 +- **Throttle** : 1.0 s minimum entre deux requêtes vers la source (`request_delay`).
73 +- **Budgets / plafonds (variables d'environnement)** :
74 +
75 +| Variable | Défaut |
76 +|---|---|
77 +| `JOBKA_WPJM_DETAIL_LIMIT` | `60` |
78 +- 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.
79 +
80 +## Volumétrie & complétude live
81 +
82 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
83 +
84 +- **Offres en base** : 112 (dont **112 actives**, 0 masquées comme doublons `dup_of`)
85 +- **Salaire** : 9/112 actives (8 %)
86 +- **GPS** : 0/112 actives (0 %)
87 +- **Mode** : 0/112 actives (0 %)
88 +- **Parution** : 112/112 actives (100 %)
89 +- **Dernier sync** : 2026-08-19 04:59 — trouvées 112, +112, ~0, -0
90 +- **Syncs enregistrés** (`sync_log`) : 1
91 +
92 +## Erreurs & dépannage
93 +
94 +Aucune erreur dans `sync_log` pour cette source.
95 +
96 +- Rejouer un sync isolé : `.venv/bin/python run.py sync cisss_chaudiere_appalaches` puis inspecter `sync_log` : `sqlite3 data/jobka.db "SELECT * FROM sync_log WHERE source='cisss_chaudiere_appalaches' ORDER BY ts DESC LIMIT 5;"`
97 +- 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`.
98 +
99 +## Licence / conformité
100 +
101 +**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 CISSS de Chaudière-Appalaches » 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.
102 +
103 +## Historique
104 +
105 +**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 :
106 +- `fd4bfc8` qualité lieux : rejet des villes hors Québec, bâtiments McGill → Montréal ;
107 +- `5a66f48` +59 employeurs (sondage massif d'ATS + détection de pages carrières) ;
108 +- `4917d57` 8 nouveaux ATS (Taleo, Njoyn, UltiPro, iCIMS, SuccessFactors, ADP WFN, Digital Recruiters, Workland) + 23 employeurs publics/parapublics ;
109 +- `f6e7571` portails Guichet-Emplois, Jobillico, Espresso-Jobs — l'offre directe gagne toujours la canonique (dédup) ;
110 +- `744cbfc` badge « Offre directe », stats directes/portails, dépôt direct employeurs ;
111 +- `1604ff9` reprise sur coupure WAF Guichet-Emplois (retry + acquis partiel).
112 +
113 +Commits touchant `jobka/connectors/cisss_chaudiere_appalaches.py` :
114 +
115 +- `5f13718` 2026-08-19 Nouvelle famille wpjobmanager (WordPress + WP Job Manager) : flux job_feed (contenu complet en une requête) + JSON-LD des pages poste (date limite, lieu). Ouvre la plateforme carrieresante.gouv.qc.ca de Santé Québec (un site par établissement, en déploiement) : CHU de Québec (60), CHUM (25), CISSS Abitibi-Témiscamingue (141), Chaudière-Appalaches (112), Laval (149), Lanaudière (124), Laurentides (130) + CISSS de l'Outaouais via viensvivretespassions.ca (101). Fixture chum. + connecteur cssdd (CSS des Découvreurs, famille DigitalRecruiters existante).
added docs/connecteurs/cisss_lanaudiere.md +115 −0
@@ -0,0 +1,115 @@
1 +<!--
2 +=============================================================================
3 +Job·Ka — Groupe KA
4 +Auteur : Simon-Pierre Boucher
5 +Contact : contact@spboucher.ai
6 +Fichier : docs/connecteurs/cisss_lanaudiere.md
7 +Rôle : Fiche connecteur — CISSS de Lanaudière (employeur direct, ATS wpjobmanager)
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 + relancer le script pour régénérer.
10 +=============================================================================
11 +-->
12 +
13 +# CISSS de Lanaudière (`cisss_lanaudiere`)
14 +
15 +**Employeur direct** · Plateforme ATS : [`wpjobmanager`](ats-wpjobmanager.md) · Statut registre : actif · Connecteur : `jobka/connectors/cisss_lanaudiere.py`
16 +
17 +## Description
18 +
19 +- **Site** : [CISSS de Lanaudière](https://www.cisss-lanaudiere.gouv.qc.ca)
20 +- **Page carrières** : https://lanaudiere.carrieresante.gouv.qc.ca
21 +- **Secteurs** : Santé, Secteur public
22 +- **Région** : Lanaudière
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-wpjobmanager.md`](ats-wpjobmanager.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 +| `BASE` | `https://lanaudiere.carrieresante.gouv.qc.ca` |
33 +| `DEFAULT_CITY` | `Joliette` |
34 +| `EMPLOYER` | `CISSS de Lanaudière` |
35 +| `PER_PAGE` | `500` |
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 **124 offres actives** de la source (base live, 2026-08-19 05:40 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 / … | 55 % |
55 +| `salary` — Salaire ($) | bornes numériques normalisées $/h et $/an | 4 % |
56 +| `salary_label` — Libellé salaire | texte salarial original | 4 % |
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 | 100 % |
61 +| `category` — Catégorie | taxonomie interne (TI, Santé, …) | 73 % |
62 +| `language` — Langue | fr / en / bilingue (source ou heuristique) | 100 % |
63 +| `company_logo` — Logo employeur | URL du logo si exposé par la source | 0 % |
64 +| `apply_url` — Candidature | lien de candidature directe | 0 % |
65 +| `gps` — GPS | lat/lng (géocodage sans invention) | 0 % |
66 +
67 +Exemple réel : *CHEF DE L’ADMINISTRATION DES PROGRAMMES MILIEUX FAVORABLES À LA SANTÉ ET DÉVELOPPEMENT DES…* — Joliette · Minimum de la classe : 96 770 $ annuel · parue le 2026-08-17.
68 +
69 +## Fréquence & budgets
70 +
71 +- **Cadence** : resynchronisation **horaire** (PM2 `job-ka-sync` = `run.py watch 60`), suivie du géocodage en lot puis de la déduplication inter-sources.
72 +- **Throttle** : 1.0 s minimum entre deux requêtes vers la source (`request_delay`).
73 +- **Budgets / plafonds (variables d'environnement)** :
74 +
75 +| Variable | Défaut |
76 +|---|---|
77 +| `JOBKA_WPJM_DETAIL_LIMIT` | `60` |
78 +- 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.
79 +
80 +## Volumétrie & complétude live
81 +
82 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
83 +
84 +- **Offres en base** : 124 (dont **124 actives**, 0 masquées comme doublons `dup_of`)
85 +- **Salaire** : 5/124 actives (4 %)
86 +- **GPS** : 0/124 actives (0 %)
87 +- **Mode** : 0/124 actives (0 %)
88 +- **Parution** : 124/124 actives (100 %)
89 +- **Dernier sync** : 2026-08-19 05:35 — trouvées 124, +124, ~0, -0
90 +- **Syncs enregistrés** (`sync_log`) : 1
91 +
92 +## Erreurs & dépannage
93 +
94 +Aucune erreur dans `sync_log` pour cette source.
95 +
96 +- Rejouer un sync isolé : `.venv/bin/python run.py sync cisss_lanaudiere` puis inspecter `sync_log` : `sqlite3 data/jobka.db "SELECT * FROM sync_log WHERE source='cisss_lanaudiere' ORDER BY ts DESC LIMIT 5;"`
97 +- 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`.
98 +
99 +## Licence / conformité
100 +
101 +**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 CISSS de Lanaudière » 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.
102 +
103 +## Historique
104 +
105 +**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 :
106 +- `fd4bfc8` qualité lieux : rejet des villes hors Québec, bâtiments McGill → Montréal ;
107 +- `5a66f48` +59 employeurs (sondage massif d'ATS + détection de pages carrières) ;
108 +- `4917d57` 8 nouveaux ATS (Taleo, Njoyn, UltiPro, iCIMS, SuccessFactors, ADP WFN, Digital Recruiters, Workland) + 23 employeurs publics/parapublics ;
109 +- `f6e7571` portails Guichet-Emplois, Jobillico, Espresso-Jobs — l'offre directe gagne toujours la canonique (dédup) ;
110 +- `744cbfc` badge « Offre directe », stats directes/portails, dépôt direct employeurs ;
111 +- `1604ff9` reprise sur coupure WAF Guichet-Emplois (retry + acquis partiel).
112 +
113 +Commits touchant `jobka/connectors/cisss_lanaudiere.py` :
114 +
115 +- `5f13718` 2026-08-19 Nouvelle famille wpjobmanager (WordPress + WP Job Manager) : flux job_feed (contenu complet en une requête) + JSON-LD des pages poste (date limite, lieu). Ouvre la plateforme carrieresante.gouv.qc.ca de Santé Québec (un site par établissement, en déploiement) : CHU de Québec (60), CHUM (25), CISSS Abitibi-Témiscamingue (141), Chaudière-Appalaches (112), Laval (149), Lanaudière (124), Laurentides (130) + CISSS de l'Outaouais via viensvivretespassions.ca (101). Fixture chum. + connecteur cssdd (CSS des Découvreurs, famille DigitalRecruiters existante).
added docs/connecteurs/cisss_laurentides.md +115 −0
@@ -0,0 +1,115 @@
1 +<!--
2 +=============================================================================
3 +Job·Ka — Groupe KA
4 +Auteur : Simon-Pierre Boucher
5 +Contact : contact@spboucher.ai
6 +Fichier : docs/connecteurs/cisss_laurentides.md
7 +Rôle : Fiche connecteur — CISSS des Laurentides (employeur direct, ATS wpjobmanager)
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 + relancer le script pour régénérer.
10 +=============================================================================
11 +-->
12 +
13 +# CISSS des Laurentides (`cisss_laurentides`)
14 +
15 +**Employeur direct** · Plateforme ATS : [`wpjobmanager`](ats-wpjobmanager.md) · Statut registre : actif · Connecteur : `jobka/connectors/cisss_laurentides.py`
16 +
17 +## Description
18 +
19 +- **Site** : [CISSS des Laurentides](https://www.santelaurentides.gouv.qc.ca)
20 +- **Page carrières** : https://laurentides.carrieresante.gouv.qc.ca
21 +- **Secteurs** : Santé, Secteur public
22 +- **Région** : Laurentides
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-wpjobmanager.md`](ats-wpjobmanager.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 +| `BASE` | `https://laurentides.carrieresante.gouv.qc.ca` |
33 +| `DEFAULT_CITY` | `Saint-Jérôme` |
34 +| `EMPLOYER` | `CISSS des Laurentides` |
35 +| `PER_PAGE` | `500` |
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 **130 offres actives** de la source (base live, 2026-08-19 05:40 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 | 1 % |
54 +| `employment_type` — Type | temps_plein / temps_partiel / … | 23 % |
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 | 100 % |
61 +| `category` — Catégorie | taxonomie interne (TI, Santé, …) | 70 % |
62 +| `language` — Langue | fr / en / bilingue (source ou heuristique) | 100 % |
63 +| `company_logo` — Logo employeur | URL du logo si exposé par la source | 0 % |
64 +| `apply_url` — Candidature | lien de candidature directe | 0 % |
65 +| `gps` — GPS | lat/lng (géocodage sans invention) | 0 % |
66 +
67 +Exemple réel : *Bourse psychothérapie volet professionnel* — Saint-Jérôme · 30 000$ (formation prescrite de 900 heures et moins · parue le 2026-08-18.
68 +
69 +## Fréquence & budgets
70 +
71 +- **Cadence** : resynchronisation **horaire** (PM2 `job-ka-sync` = `run.py watch 60`), suivie du géocodage en lot puis de la déduplication inter-sources.
72 +- **Throttle** : 1.0 s minimum entre deux requêtes vers la source (`request_delay`).
73 +- **Budgets / plafonds (variables d'environnement)** :
74 +
75 +| Variable | Défaut |
76 +|---|---|
77 +| `JOBKA_WPJM_DETAIL_LIMIT` | `60` |
78 +- 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.
79 +
80 +## Volumétrie & complétude live
81 +
82 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
83 +
84 +- **Offres en base** : 130 (dont **130 actives**, 0 masquées comme doublons `dup_of`)
85 +- **Salaire** : 15/130 actives (12 %)
86 +- **GPS** : 0/130 actives (0 %)
87 +- **Mode** : 1/130 actives (1 %)
88 +- **Parution** : 130/130 actives (100 %)
89 +- **Dernier sync** : 2026-08-19 05:39 — trouvées 130, +130, ~0, -0
90 +- **Syncs enregistrés** (`sync_log`) : 1
91 +
92 +## Erreurs & dépannage
93 +
94 +Aucune erreur dans `sync_log` pour cette source.
95 +
96 +- Rejouer un sync isolé : `.venv/bin/python run.py sync cisss_laurentides` puis inspecter `sync_log` : `sqlite3 data/jobka.db "SELECT * FROM sync_log WHERE source='cisss_laurentides' ORDER BY ts DESC LIMIT 5;"`
97 +- 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`.
98 +
99 +## Licence / conformité
100 +
101 +**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 CISSS des Laurentides » 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.
102 +
103 +## Historique
104 +
105 +**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 :
106 +- `fd4bfc8` qualité lieux : rejet des villes hors Québec, bâtiments McGill → Montréal ;
107 +- `5a66f48` +59 employeurs (sondage massif d'ATS + détection de pages carrières) ;
108 +- `4917d57` 8 nouveaux ATS (Taleo, Njoyn, UltiPro, iCIMS, SuccessFactors, ADP WFN, Digital Recruiters, Workland) + 23 employeurs publics/parapublics ;
109 +- `f6e7571` portails Guichet-Emplois, Jobillico, Espresso-Jobs — l'offre directe gagne toujours la canonique (dédup) ;
110 +- `744cbfc` badge « Offre directe », stats directes/portails, dépôt direct employeurs ;
111 +- `1604ff9` reprise sur coupure WAF Guichet-Emplois (retry + acquis partiel).
112 +
113 +Commits touchant `jobka/connectors/cisss_laurentides.py` :
114 +
115 +- `5f13718` 2026-08-19 Nouvelle famille wpjobmanager (WordPress + WP Job Manager) : flux job_feed (contenu complet en une requête) + JSON-LD des pages poste (date limite, lieu). Ouvre la plateforme carrieresante.gouv.qc.ca de Santé Québec (un site par établissement, en déploiement) : CHU de Québec (60), CHUM (25), CISSS Abitibi-Témiscamingue (141), Chaudière-Appalaches (112), Laval (149), Lanaudière (124), Laurentides (130) + CISSS de l'Outaouais via viensvivretespassions.ca (101). Fixture chum. + connecteur cssdd (CSS des Découvreurs, famille DigitalRecruiters existante).
added docs/connecteurs/cisss_laval.md +115 −0
@@ -0,0 +1,115 @@
1 +<!--
2 +=============================================================================
3 +Job·Ka — Groupe KA
4 +Auteur : Simon-Pierre Boucher
5 +Contact : contact@spboucher.ai
6 +Fichier : docs/connecteurs/cisss_laval.md
7 +Rôle : Fiche connecteur — CISSS de Laval (employeur direct, ATS wpjobmanager)
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 + relancer le script pour régénérer.
10 +=============================================================================
11 +-->
12 +
13 +# CISSS de Laval (`cisss_laval`)
14 +
15 +**Employeur direct** · Plateforme ATS : [`wpjobmanager`](ats-wpjobmanager.md) · Statut registre : actif · Connecteur : `jobka/connectors/cisss_laval.py`
16 +
17 +## Description
18 +
19 +- **Site** : [CISSS de Laval](https://www.lavalensante.com)
20 +- **Page carrières** : https://cissslaval.carrieresante.gouv.qc.ca
21 +- **Secteurs** : Santé, Secteur public
22 +- **Région** : Laval
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-wpjobmanager.md`](ats-wpjobmanager.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 +| `BASE` | `https://cissslaval.carrieresante.gouv.qc.ca` |
33 +| `DEFAULT_CITY` | `Laval` |
34 +| `EMPLOYER` | `CISSS de Laval` |
35 +| `PER_PAGE` | `500` |
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 **149 offres actives** de la source (base live, 2026-08-19 05:40 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 / … | 10 % |
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) | 46 % |
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 | 100 % |
61 +| `category` — Catégorie | taxonomie interne (TI, Santé, …) | 89 % |
62 +| `language` — Langue | fr / en / bilingue (source ou heuristique) | 100 % |
63 +| `company_logo` — Logo employeur | URL du logo si exposé par la source | 0 % |
64 +| `apply_url` — Candidature | lien de candidature directe | 0 % |
65 +| `gps` — GPS | lat/lng (géocodage sans invention) | 0 % |
66 +
67 +Exemple réel : *CHEF DE SERVICE DE LA PERMANENCE \| DPDI-TSA-DP \| REQ26-5489* — Laval · 91 837$ à 119 388$ · parue le 2026-08-14.
68 +
69 +## Fréquence & budgets
70 +
71 +- **Cadence** : resynchronisation **horaire** (PM2 `job-ka-sync` = `run.py watch 60`), suivie du géocodage en lot puis de la déduplication inter-sources.
72 +- **Throttle** : 1.0 s minimum entre deux requêtes vers la source (`request_delay`).
73 +- **Budgets / plafonds (variables d'environnement)** :
74 +
75 +| Variable | Défaut |
76 +|---|---|
77 +| `JOBKA_WPJM_DETAIL_LIMIT` | `60` |
78 +- 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.
79 +
80 +## Volumétrie & complétude live
81 +
82 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
83 +
84 +- **Offres en base** : 149 (dont **149 actives**, 0 masquées comme doublons `dup_of`)
85 +- **Salaire** : 1/149 actives (1 %)
86 +- **GPS** : 0/149 actives (0 %)
87 +- **Mode** : 0/149 actives (0 %)
88 +- **Parution** : 149/149 actives (100 %)
89 +- **Dernier sync** : 2026-08-19 05:05 — trouvées 149, +149, ~0, -0
90 +- **Syncs enregistrés** (`sync_log`) : 1
91 +
92 +## Erreurs & dépannage
93 +
94 +Aucune erreur dans `sync_log` pour cette source.
95 +
96 +- Rejouer un sync isolé : `.venv/bin/python run.py sync cisss_laval` puis inspecter `sync_log` : `sqlite3 data/jobka.db "SELECT * FROM sync_log WHERE source='cisss_laval' ORDER BY ts DESC LIMIT 5;"`
97 +- 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`.
98 +
99 +## Licence / conformité
100 +
101 +**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 CISSS de Laval » 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.
102 +
103 +## Historique
104 +
105 +**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 :
106 +- `fd4bfc8` qualité lieux : rejet des villes hors Québec, bâtiments McGill → Montréal ;
107 +- `5a66f48` +59 employeurs (sondage massif d'ATS + détection de pages carrières) ;
108 +- `4917d57` 8 nouveaux ATS (Taleo, Njoyn, UltiPro, iCIMS, SuccessFactors, ADP WFN, Digital Recruiters, Workland) + 23 employeurs publics/parapublics ;
109 +- `f6e7571` portails Guichet-Emplois, Jobillico, Espresso-Jobs — l'offre directe gagne toujours la canonique (dédup) ;
110 +- `744cbfc` badge « Offre directe », stats directes/portails, dépôt direct employeurs ;
111 +- `1604ff9` reprise sur coupure WAF Guichet-Emplois (retry + acquis partiel).
112 +
113 +Commits touchant `jobka/connectors/cisss_laval.py` :
114 +
115 +- `5f13718` 2026-08-19 Nouvelle famille wpjobmanager (WordPress + WP Job Manager) : flux job_feed (contenu complet en une requête) + JSON-LD des pages poste (date limite, lieu). Ouvre la plateforme carrieresante.gouv.qc.ca de Santé Québec (un site par établissement, en déploiement) : CHU de Québec (60), CHUM (25), CISSS Abitibi-Témiscamingue (141), Chaudière-Appalaches (112), Laval (149), Lanaudière (124), Laurentides (130) + CISSS de l'Outaouais via viensvivretespassions.ca (101). Fixture chum. + connecteur cssdd (CSS des Découvreurs, famille DigitalRecruiters existante).
added docs/connecteurs/cisss_outaouais.md +115 −0
@@ -0,0 +1,115 @@
1 +<!--
2 +=============================================================================
3 +Job·Ka — Groupe KA
4 +Auteur : Simon-Pierre Boucher
5 +Contact : contact@spboucher.ai
6 +Fichier : docs/connecteurs/cisss_outaouais.md
7 +Rôle : Fiche connecteur — CISSS de l'Outaouais (employeur direct, ATS wpjobmanager)
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 + relancer le script pour régénérer.
10 +=============================================================================
11 +-->
12 +
13 +# CISSS de l'Outaouais (`cisss_outaouais`)
14 +
15 +**Employeur direct** · Plateforme ATS : [`wpjobmanager`](ats-wpjobmanager.md) · Statut registre : actif · Connecteur : `jobka/connectors/cisss_outaouais.py`
16 +
17 +## Description
18 +
19 +- **Site** : [CISSS de l'Outaouais](https://cisss-outaouais.gouv.qc.ca)
20 +- **Page carrières** : https://viensvivretespassions.ca
21 +- **Secteurs** : Santé, Secteur public
22 +- **Région** : Outaouais
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-wpjobmanager.md`](ats-wpjobmanager.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 +| `BASE` | `https://viensvivretespassions.ca` |
33 +| `DEFAULT_CITY` | `Gatineau` |
34 +| `EMPLOYER` | `CISSS de l'Outaouais` |
35 +| `PER_PAGE` | `500` |
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 **101 offres actives** de la source (base live, 2026-08-19 05:40 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 / … | 8 % |
55 +| `salary` — Salaire ($) | bornes numériques normalisées $/h et $/an | 31 % |
56 +| `salary_label` — Libellé salaire | texte salarial original | 31 % |
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 | 100 % |
61 +| `category` — Catégorie | taxonomie interne (TI, Santé, …) | 84 % |
62 +| `language` — Langue | fr / en / bilingue (source ou heuristique) | 100 % |
63 +| `company_logo` — Logo employeur | URL du logo si exposé par la source | 0 % |
64 +| `apply_url` — Candidature | lien de candidature directe | 0 % |
65 +| `gps` — GPS | lat/lng (géocodage sans invention) | 0 % |
66 +
67 +Exemple réel : *INTÉRIM – Chef de service du bénévolat et de la satisfaction à la clientèle (DTPQ)* — Gatineau · Minimum : 91 837 $ · parue le 2026-08-12.
68 +
69 +## Fréquence & budgets
70 +
71 +- **Cadence** : resynchronisation **horaire** (PM2 `job-ka-sync` = `run.py watch 60`), suivie du géocodage en lot puis de la déduplication inter-sources.
72 +- **Throttle** : 1.0 s minimum entre deux requêtes vers la source (`request_delay`).
73 +- **Budgets / plafonds (variables d'environnement)** :
74 +
75 +| Variable | Défaut |
76 +|---|---|
77 +| `JOBKA_WPJM_DETAIL_LIMIT` | `60` |
78 +- 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.
79 +
80 +## Volumétrie & complétude live
81 +
82 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
83 +
84 +- **Offres en base** : 101 (dont **101 actives**, 0 masquées comme doublons `dup_of`)
85 +- **Salaire** : 31/101 actives (31 %)
86 +- **GPS** : 0/101 actives (0 %)
87 +- **Mode** : 0/101 actives (0 %)
88 +- **Parution** : 101/101 actives (100 %)
89 +- **Dernier sync** : 2026-08-19 05:09 — trouvées 101, +101, ~0, -0
90 +- **Syncs enregistrés** (`sync_log`) : 1
91 +
92 +## Erreurs & dépannage
93 +
94 +Aucune erreur dans `sync_log` pour cette source.
95 +
96 +- Rejouer un sync isolé : `.venv/bin/python run.py sync cisss_outaouais` puis inspecter `sync_log` : `sqlite3 data/jobka.db "SELECT * FROM sync_log WHERE source='cisss_outaouais' ORDER BY ts DESC LIMIT 5;"`
97 +- 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`.
98 +
99 +## Licence / conformité
100 +
101 +**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 CISSS de l'Outaouais » 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.
102 +
103 +## Historique
104 +
105 +**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 :
106 +- `fd4bfc8` qualité lieux : rejet des villes hors Québec, bâtiments McGill → Montréal ;
107 +- `5a66f48` +59 employeurs (sondage massif d'ATS + détection de pages carrières) ;
108 +- `4917d57` 8 nouveaux ATS (Taleo, Njoyn, UltiPro, iCIMS, SuccessFactors, ADP WFN, Digital Recruiters, Workland) + 23 employeurs publics/parapublics ;
109 +- `f6e7571` portails Guichet-Emplois, Jobillico, Espresso-Jobs — l'offre directe gagne toujours la canonique (dédup) ;
110 +- `744cbfc` badge « Offre directe », stats directes/portails, dépôt direct employeurs ;
111 +- `1604ff9` reprise sur coupure WAF Guichet-Emplois (retry + acquis partiel).
112 +
113 +Commits touchant `jobka/connectors/cisss_outaouais.py` :
114 +
115 +- `5f13718` 2026-08-19 Nouvelle famille wpjobmanager (WordPress + WP Job Manager) : flux job_feed (contenu complet en une requête) + JSON-LD des pages poste (date limite, lieu). Ouvre la plateforme carrieresante.gouv.qc.ca de Santé Québec (un site par établissement, en déploiement) : CHU de Québec (60), CHUM (25), CISSS Abitibi-Témiscamingue (141), Chaudière-Appalaches (112), Laval (149), Lanaudière (124), Laurentides (130) + CISSS de l'Outaouais via viensvivretespassions.ca (101). Fixture chum. + connecteur cssdd (CSS des Découvreurs, famille DigitalRecruiters existante).
modified docs/connecteurs/ciusss_est_montreal.md +6 −6
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/ciusss_est_montreal.md
7 7 Rôle : Fiche connecteur — CIUSSS de l'Est-de-l'Île-de-Montréal (employeur direct, ATS taleo)
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -39,7 +39,7 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
39 39
40 40 ## Champs → schéma
41 41
42 −Complétude mesurée sur les **23 offres actives** de la source (base live, 2026-08-19 03:39 EDT).
42 +Complétude mesurée sur les **23 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
43 43
44 44 | Champ (`jobs.*`) | Rôle | Complétude |
45 45 |---|---|---|
@@ -80,15 +80,15 @@ Exemple réel : *Chef de service - aide à domicile - secteur Pointe-Aux-Tremble
80 80
81 81 ## Volumétrie & complétude live
82 82
83 −*(mesuré le 2026-08-19 03:39 EDT dans `data/jobka.db`)*
83 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
84 84
85 −- **Offres en base** : 23 (dont **23 actives**, 1 masquées comme doublons `dup_of`)
85 +- **Offres en base** : 23 (dont **23 actives**, 14 masquées comme doublons `dup_of`)
86 86 - **Salaire** : 0/23 actives (0 %)
87 87 - **GPS** : 23/23 actives (100 %)
88 88 - **Mode** : 0/23 actives (0 %)
89 89 - **Parution** : 23/23 actives (100 %)
90 −- **Dernier sync** : 2026-08-19 01:41 — trouvées 23, +0, ~23, -0
91 −- **Syncs enregistrés** (`sync_log`) : 13
90 +- **Dernier sync** : 2026-08-19 03:51 — trouvées 23, +0, ~0, -0
91 +- **Syncs enregistrés** (`sync_log`) : 14
92 92
93 93 ## Erreurs & dépannage
94 94
modified docs/connecteurs/cogeco.md +6 −6
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/cogeco.md
7 7 Rôle : Fiche connecteur — Cogeco (employeur direct, ATS workday)
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -38,7 +38,7 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
38 38
39 39 ## Champs → schéma
40 40
41 −Complétude mesurée sur les **50 offres actives** de la source (base live, 2026-08-19 03:39 EDT).
41 +Complétude mesurée sur les **50 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
42 42
43 43 | Champ (`jobs.*`) | Rôle | Complétude |
44 44 |---|---|---|
@@ -64,7 +64,7 @@ Complétude mesurée sur les **50 offres actives** de la source (base live, 2026
64 64 | `apply_url` — Candidature | lien de candidature directe | 100 % |
65 65 | `gps` — GPS | lat/lng (géocodage sans invention) | 56 % |
66 66
67 −Exemple réel : *Technician, Customer and Network Facing* — Grasonville · For candidates whose primary place of work will be in Maryland, the expected salary range … · parue le 2026-08-13.
67 +Exemple réel : *Technician, Customer and Network Facing* — Grasonville · For candidates whose primary place of work will be in Maryland, the expected salary range … · parue le 2026-08-12.
68 68
69 69 ## Fréquence & budgets
70 70
@@ -79,15 +79,15 @@ Exemple réel : *Technician, Customer and Network Facing* — Grasonville · For
79 79
80 80 ## Volumétrie & complétude live
81 81
82 −*(mesuré le 2026-08-19 03:39 EDT dans `data/jobka.db`)*
82 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
83 83
84 84 - **Offres en base** : 50 (dont **50 actives**, 0 masquées comme doublons `dup_of`)
85 85 - **Salaire** : 9/50 actives (18 %)
86 86 - **GPS** : 28/50 actives (56 %)
87 87 - **Mode** : 2/50 actives (4 %)
88 88 - **Parution** : 50/50 actives (100 %)
89 −- **Dernier sync** : 2026-08-19 01:42 — trouvées 50, +0, ~50, -0
90 −- **Syncs enregistrés** (`sync_log`) : 25
89 +- **Dernier sync** : 2026-08-19 03:52 — trouvées 50, +0, ~25, -0
90 +- **Syncs enregistrés** (`sync_log`) : 26
91 91
92 92 ## Erreurs & dépannage
93 93
modified docs/connecteurs/cohere.md +5 −5
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/cohere.md
7 7 Rôle : Fiche connecteur — Cohere (employeur direct, ATS ashby)
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -36,7 +36,7 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
36 36
37 37 ## Champs → schéma
38 38
39 −Complétude mesurée sur les **46 offres actives** de la source (base live, 2026-08-19 03:39 EDT).
39 +Complétude mesurée sur les **46 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
40 40
41 41 | Champ (`jobs.*`) | Rôle | Complétude |
42 42 |---|---|---|
@@ -72,15 +72,15 @@ Exemple réel : *Member of Technical Staff, Multilingual* — ∅ · - For candi
72 72
73 73 ## Volumétrie & complétude live
74 74
75 −*(mesuré le 2026-08-19 03:39 EDT dans `data/jobka.db`)*
75 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
76 76
77 77 - **Offres en base** : 46 (dont **46 actives**, 0 masquées comme doublons `dup_of`)
78 78 - **Salaire** : 8/46 actives (17 %)
79 79 - **GPS** : 17/46 actives (37 %)
80 80 - **Mode** : 46/46 actives (100 %)
81 81 - **Parution** : 46/46 actives (100 %)
82 −- **Dernier sync** : 2026-08-19 01:42 — trouvées 46, +0, ~0, -0
83 −- **Syncs enregistrés** (`sync_log`) : 26
82 +- **Dernier sync** : 2026-08-19 03:52 — trouvées 46, +0, ~0, -0
83 +- **Syncs enregistrés** (`sync_log`) : 27
84 84
85 85 ## Erreurs & dépannage
86 86
modified docs/connecteurs/cordonbleu.md +5 −5
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/cordonbleu.md
7 7 Rôle : Fiche connecteur — Aliments Ouimet-Cordon Bleu inc. (employeur direct, ATS bamboohr)
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -36,7 +36,7 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
36 36
37 37 ## Champs → schéma
38 38
39 −Complétude mesurée sur les **2 offres actives** de la source (base live, 2026-08-19 03:39 EDT).
39 +Complétude mesurée sur les **2 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
40 40
41 41 | Champ (`jobs.*`) | Rôle | Complétude |
42 42 |---|---|---|
@@ -77,15 +77,15 @@ Exemple réel : *Électromécanicien Licence C - Jusqu'à 45$/hr* — Montréal
77 77
78 78 ## Volumétrie & complétude live
79 79
80 −*(mesuré le 2026-08-19 03:39 EDT dans `data/jobka.db`)*
80 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
81 81
82 82 - **Offres en base** : 2 (dont **2 actives**, 0 masquées comme doublons `dup_of`)
83 83 - **Salaire** : 1/2 actives (50 %)
84 84 - **GPS** : 2/2 actives (100 %)
85 85 - **Mode** : 2/2 actives (100 %)
86 86 - **Parution** : 2/2 actives (100 %)
87 −- **Dernier sync** : 2026-08-19 01:42 — trouvées 2, +0, ~2, -0
88 −- **Syncs enregistrés** (`sync_log`) : 13
87 +- **Dernier sync** : 2026-08-19 03:52 — trouvées 2, +0, ~0, -0
88 +- **Syncs enregistrés** (`sync_log`) : 14
89 89
90 90 ## Erreurs & dépannage
91 91
added docs/connecteurs/cssdd.md +114 −0
@@ -0,0 +1,114 @@
1 +<!--
2 +=============================================================================
3 +Job·Ka — Groupe KA
4 +Auteur : Simon-Pierre Boucher
5 +Contact : contact@spboucher.ai
6 +Fichier : docs/connecteurs/cssdd.md
7 +Rôle : Fiche connecteur — CSS des Découvreurs (employeur direct, ATS digitalrecruiters)
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 + relancer le script pour régénérer.
10 +=============================================================================
11 +-->
12 +
13 +# CSS des Découvreurs (`cssdd`)
14 +
15 +**Employeur direct** · Plateforme ATS : [`digitalrecruiters`](ats-digitalrecruiters.md) · Statut registre : actif · Connecteur : `jobka/connectors/cssdd.py`
16 +
17 +## Description
18 +
19 +- **Site** : [CSS des Découvreurs](https://www.cssdd.gouv.qc.ca)
20 +- **Page carrières** : https://emplois.cssdd.gouv.qc.ca
21 +- **Secteurs** : Éducation, Secteur public
22 +- **Région** : 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-digitalrecruiters.md`](ats-digitalrecruiters.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 +| `BASE` | `https://emplois.cssdd.gouv.qc.ca` |
33 +| `EMPLOYER` | `Centre de services scolaire des Découvreurs` |
34 +| `LOCALE` | `fr_CA` |
35 +- **Throttle** : 0.8 s entre requêtes.
36 +- **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).
37 +
38 +## Champs → schéma
39 +
40 +Complétude mesurée sur les **27 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
41 +
42 +| Champ (`jobs.*`) | Rôle | Complétude |
43 +|---|---|---|
44 +| `title` — Titre | titre du poste | 100 % |
45 +| `employer` — Employeur | nom de l'entreprise | 100 % |
46 +| `url` — URL | lien direct vers l'offre originale | 100 % |
47 +| `description` — Description | texte complet (HTML nettoyé) | 100 % |
48 +| `city` — Ville | municipalité normalisée | 100 % |
49 +| `region` — Région | région administrative | 100 % |
50 +| `address` — Adresse | adresse du lieu de travail | 100 % |
51 +| `postal_code` — Code postal | code postal si publié | 100 % |
52 +| `work_mode` — Mode | presentiel / hybride / teletravail | 0 % |
53 +| `employment_type` — Type | temps_plein / temps_partiel / … | 78 % |
54 +| `salary` — Salaire ($) | bornes numériques normalisées $/h et $/an | 78 % |
55 +| `salary_label` — Libellé salaire | texte salarial original | 7 % |
56 +| `benefits` — Avantages | avantages sociaux publiés (JSON) | 15 % |
57 +| `requirements` — Exigences | scolarité, expérience, langues (JSON) | 0 % |
58 +| `date_posted` — Date de parution | ISO 8601 | 100 % |
59 +| `date_deadline` — Date limite | date limite pour postuler | 0 % |
60 +| `category` — Catégorie | taxonomie interne (TI, Santé, …) | 89 % |
61 +| `language` — Langue | fr / en / bilingue (source ou heuristique) | 100 % |
62 +| `company_logo` — Logo employeur | URL du logo si exposé par la source | 100 % |
63 +| `apply_url` — Candidature | lien de candidature directe | 0 % |
64 +| `gps` — GPS | lat/lng (géocodage sans invention) | 0 % |
65 +
66 +Exemple réel : *Technicien(ne) en bâtiment - Mécanique du bâtiment spécialisé en contrôles* — Québec · Salaire de 27,91 $ à 38,91 $ de l’heure · parue le 2026-06-11.
67 +
68 +## Fréquence & budgets
69 +
70 +- **Cadence** : resynchronisation **horaire** (PM2 `job-ka-sync` = `run.py watch 60`), suivie du géocodage en lot puis de la déduplication inter-sources.
71 +- **Throttle** : 0.8 s minimum entre deux requêtes vers la source (`request_delay`).
72 +- **Budgets / plafonds (variables d'environnement)** :
73 +
74 +| Variable | Défaut |
75 +|---|---|
76 +| `JOBKA_DR_DETAIL_LIMIT` | `120` |
77 +- 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.
78 +
79 +## Volumétrie & complétude live
80 +
81 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
82 +
83 +- **Offres en base** : 27 (dont **27 actives**, 0 masquées comme doublons `dup_of`)
84 +- **Salaire** : 21/27 actives (78 %)
85 +- **GPS** : 0/27 actives (0 %)
86 +- **Mode** : 0/27 actives (0 %)
87 +- **Parution** : 27/27 actives (100 %)
88 +- **Dernier sync** : 2026-08-19 05:09 — trouvées 27, +27, ~0, -0
89 +- **Syncs enregistrés** (`sync_log`) : 1
90 +
91 +## Erreurs & dépannage
92 +
93 +Aucune erreur dans `sync_log` pour cette source.
94 +
95 +- Rejouer un sync isolé : `.venv/bin/python run.py sync cssdd` puis inspecter `sync_log` : `sqlite3 data/jobka.db "SELECT * FROM sync_log WHERE source='cssdd' ORDER BY ts DESC LIMIT 5;"`
96 +- 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`.
97 +
98 +## Licence / conformité
99 +
100 +**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 CSS des Découvreurs » 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.
101 +
102 +## Historique
103 +
104 +**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 :
105 +- `fd4bfc8` qualité lieux : rejet des villes hors Québec, bâtiments McGill → Montréal ;
106 +- `5a66f48` +59 employeurs (sondage massif d'ATS + détection de pages carrières) ;
107 +- `4917d57` 8 nouveaux ATS (Taleo, Njoyn, UltiPro, iCIMS, SuccessFactors, ADP WFN, Digital Recruiters, Workland) + 23 employeurs publics/parapublics ;
108 +- `f6e7571` portails Guichet-Emplois, Jobillico, Espresso-Jobs — l'offre directe gagne toujours la canonique (dédup) ;
109 +- `744cbfc` badge « Offre directe », stats directes/portails, dépôt direct employeurs ;
110 +- `1604ff9` reprise sur coupure WAF Guichet-Emplois (retry + acquis partiel).
111 +
112 +Commits touchant `jobka/connectors/cssdd.py` :
113 +
114 +- `5f13718` 2026-08-19 Nouvelle famille wpjobmanager (WordPress + WP Job Manager) : flux job_feed (contenu complet en une requête) + JSON-LD des pages poste (date limite, lieu). Ouvre la plateforme carrieresante.gouv.qc.ca de Santé Québec (un site par établissement, en déploiement) : CHU de Québec (60), CHUM (25), CISSS Abitibi-Témiscamingue (141), Chaudière-Appalaches (112), Laval (149), Lanaudière (124), Laurentides (130) + CISSS de l'Outaouais via viensvivretespassions.ca (101). Fixture chum. + connecteur cssdd (CSS des Découvreurs, famille DigitalRecruiters existante).
added docs/connecteurs/cultures_genv.md +115 −0
@@ -0,0 +1,115 @@
1 +<!--
2 +=============================================================================
3 +Job·Ka — Groupe KA
4 +Auteur : Simon-Pierre Boucher
5 +Contact : contact@spboucher.ai
6 +Fichier : docs/connecteurs/cultures_genv.md
7 +Rôle : Fiche connecteur — Cultures Gen V (employeur direct, ATS adp)
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 + relancer le script pour régénérer.
10 +=============================================================================
11 +-->
12 +
13 +# Cultures Gen V (`cultures_genv`)
14 +
15 +**Employeur direct** · Plateforme ATS : [`adp`](ats-adp.md) · Statut registre : actif · Connecteur : `jobka/connectors/cultures_genv.py`
16 +
17 +## Description
18 +
19 +- **Site** : [Cultures Gen V](https://gen-v.com)
20 +- **Page carrières** : https://workforcenow.adp.com/mascsr/default/mdf/recruitment/recruitment.html?cid=8b346731-d189-4cf2-a14c-9e48d38befde&ccId=36427051_2&lang=fr_CA
21 +- **Secteurs** : Agroalimentaire, Serriculture
22 +- **Région** : Montérégie
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-adp.md`](ats-adp.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 +| `CCID` | `36427051_2` |
33 +| `CID` | `8b346731-d189-4cf2-a14c-9e48d38befde` |
34 +| `EMPLOYER` | `Cultures Gen V` |
35 +| `LANG` | `fr_CA` |
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 **6 offres actives** de la source (base live, 2026-08-19 05:40 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é | 100 % |
53 +| `work_mode` — Mode | presentiel / hybride / teletravail | 0 % |
54 +| `employment_type` — Type | temps_plein / temps_partiel / … | 33 % |
55 +| `salary` — Salaire ($) | bornes numériques normalisées $/h et $/an | 33 % |
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 | 100 % |
60 +| `date_deadline` — Date limite | date limite pour postuler | 0 % |
61 +| `category` — Catégorie | taxonomie interne (TI, Santé, …) | 67 % |
62 +| `language` — Langue | fr / en / bilingue (source ou heuristique) | 100 % |
63 +| `company_logo` — Logo employeur | URL du logo si exposé par la source | 0 % |
64 +| `apply_url` — Candidature | lien de candidature directe | 0 % |
65 +| `gps` — GPS | lat/lng (géocodage sans invention) | 0 % |
66 +
67 +Exemple réel : *Acheteur* — Mirabel · ∅ · parue le 2026-08-18.
68 +
69 +## Fréquence & budgets
70 +
71 +- **Cadence** : resynchronisation **horaire** (PM2 `job-ka-sync` = `run.py watch 60`), suivie du géocodage en lot puis de la déduplication inter-sources.
72 +- **Throttle** : 1.0 s minimum entre deux requêtes vers la source (`request_delay`).
73 +- **Budgets / plafonds (variables d'environnement)** :
74 +
75 +| Variable | Défaut |
76 +|---|---|
77 +| `JOBKA_ADP_DETAIL_LIMIT` | `80` |
78 +- 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.
79 +
80 +## Volumétrie & complétude live
81 +
82 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
83 +
84 +- **Offres en base** : 6 (dont **6 actives**, 0 masquées comme doublons `dup_of`)
85 +- **Salaire** : 2/6 actives (33 %)
86 +- **GPS** : 0/6 actives (0 %)
87 +- **Mode** : 0/6 actives (0 %)
88 +- **Parution** : 6/6 actives (100 %)
89 +- **Dernier sync** : 2026-08-19 04:49 — trouvées 6, +6, ~0, -0
90 +- **Syncs enregistrés** (`sync_log`) : 1
91 +
92 +## Erreurs & dépannage
93 +
94 +Aucune erreur dans `sync_log` pour cette source.
95 +
96 +- Rejouer un sync isolé : `.venv/bin/python run.py sync cultures_genv` puis inspecter `sync_log` : `sqlite3 data/jobka.db "SELECT * FROM sync_log WHERE source='cultures_genv' ORDER BY ts DESC LIMIT 5;"`
97 +- 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`.
98 +
99 +## Licence / conformité
100 +
101 +**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 Cultures Gen V » 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.
102 +
103 +## Historique
104 +
105 +**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 :
106 +- `fd4bfc8` qualité lieux : rejet des villes hors Québec, bâtiments McGill → Montréal ;
107 +- `5a66f48` +59 employeurs (sondage massif d'ATS + détection de pages carrières) ;
108 +- `4917d57` 8 nouveaux ATS (Taleo, Njoyn, UltiPro, iCIMS, SuccessFactors, ADP WFN, Digital Recruiters, Workland) + 23 employeurs publics/parapublics ;
109 +- `f6e7571` portails Guichet-Emplois, Jobillico, Espresso-Jobs — l'offre directe gagne toujours la canonique (dédup) ;
110 +- `744cbfc` badge « Offre directe », stats directes/portails, dépôt direct employeurs ;
111 +- `1604ff9` reprise sur coupure WAF Guichet-Emplois (retry + acquis partiel).
112 +
113 +Commits touchant `jobka/connectors/cultures_genv.py` :
114 +
115 +- `0298197` 2026-08-19 Vague A (detected-other-ats) — nouveaux employeurs sur familles existantes : Hydro-Québec (SuccessFactors CSB emploi.hydroquebec.com, 66 offres) ; Deloitte Canada (CSB careers.deloitte.ca, 105 offres QC — remplace la détection Taleo périmée) ; CGI (Njoyn corporatif via Scrapfly, babillard mondial de ~2 900 postes filtré Québec, budgets frugaux) ; Fruit d'Or (12) et Nortera (24 QC) sur UKG Pro recruiting.ultipro.ca ; Placements Mackenzie/groupe Power (iCIMS FR, 3 QC) ; Cultures Gen V (6), Bento Sushi (9 QC), Osgoode Properties (1) sur ADP WFN. Retrait ttcglobal (plus d'offre QC : 2 offres Dallas/Londres). Écartés avec raisons (docs/CONFORMITE.md) : Canada Vie, Groupe Dynamite, Jack Astor's/SIR, Méchant Bœuf, Valero (0 offre), Résolu (fusion Domtar), Power Corp directe.
modified docs/connecteurs/dcbel.md +5 −5
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/dcbel.md
7 7 Rôle : Fiche connecteur — dcbel (employeur direct, ATS bamboohr)
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -36,7 +36,7 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
36 36
37 37 ## Champs → schéma
38 38
39 −Complétude mesurée sur les **20 offres actives** de la source (base live, 2026-08-19 03:39 EDT).
39 +Complétude mesurée sur les **20 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
40 40
41 41 | Champ (`jobs.*`) | Rôle | Complétude |
42 42 |---|---|---|
@@ -77,15 +77,15 @@ Exemple réel : *Production supervisor* — Montréal · ∅ · parue le 2026-08
77 77
78 78 ## Volumétrie & complétude live
79 79
80 −*(mesuré le 2026-08-19 03:39 EDT dans `data/jobka.db`)*
80 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
81 81
82 82 - **Offres en base** : 20 (dont **20 actives**, 0 masquées comme doublons `dup_of`)
83 83 - **Salaire** : 0/20 actives (0 %)
84 84 - **GPS** : 20/20 actives (100 %)
85 85 - **Mode** : 20/20 actives (100 %)
86 86 - **Parution** : 20/20 actives (100 %)
87 −- **Dernier sync** : 2026-08-19 01:42 — trouvées 20, +0, ~20, -0
88 −- **Syncs enregistrés** (`sync_log`) : 25
87 +- **Dernier sync** : 2026-08-19 03:52 — trouvées 20, +0, ~0, -0
88 +- **Syncs enregistrés** (`sync_log`) : 26
89 89
90 90 ## Erreurs & dépannage
91 91
added docs/connecteurs/deloitte.md +113 −0
@@ -0,0 +1,113 @@
1 +<!--
2 +=============================================================================
3 +Job·Ka — Groupe KA
4 +Auteur : Simon-Pierre Boucher
5 +Contact : contact@spboucher.ai
6 +Fichier : docs/connecteurs/deloitte.md
7 +Rôle : Fiche connecteur — Deloitte Canada (employeur direct, ATS successfactors)
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 + relancer le script pour régénérer.
10 +=============================================================================
11 +-->
12 +
13 +# Deloitte Canada (`deloitte`)
14 +
15 +**Employeur direct** · Plateforme ATS : [`successfactors`](ats-successfactors.md) · Statut registre : actif · Connecteur : `jobka/connectors/deloitte.py`
16 +
17 +## Description
18 +
19 +- **Site** : [Deloitte Canada](https://www.deloitte.com/ca)
20 +- **Page carrières** : https://careers.deloitte.ca
21 +- **Secteurs** : Services-conseils, Comptabilité, TI
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-successfactors.md`](ats-successfactors.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 +| `BASE` | `https://careers.deloitte.ca` |
33 +| `EMPLOYER` | `Deloitte Canada` |
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 **105 offres actives** de la source (base live, 2026-08-19 05:40 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 | 98 % |
52 +| `employment_type` — Type | temps_plein / temps_partiel / … | 96 % |
53 +| `salary` — Salaire ($) | bornes numériques normalisées $/h et $/an | 96 % |
54 +| `salary_label` — Libellé salaire | texte salarial original | 96 % |
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 | 0 % |
58 +| `date_deadline` — Date limite | date limite pour postuler | 0 % |
59 +| `category` — Catégorie | taxonomie interne (TI, Santé, …) | 93 % |
60 +| `language` — Langue | fr / en / bilingue (source ou heuristique) | 100 % |
61 +| `company_logo` — Logo employeur | URL du logo si exposé par la source | 0 % |
62 +| `apply_url` — Candidature | lien de candidature directe | 0 % |
63 +| `gps` — GPS | lat/lng (géocodage sans invention) | 0 % |
64 +
65 +Exemple réel : *Consultant(e) sénior, Gestion de contenu OpenText* — Montréal · L’échelle salariale pour ce poste est de 80,000 $ à 138,000 $ · parue le ∅.
66 +
67 +## Fréquence & budgets
68 +
69 +- **Cadence** : resynchronisation **horaire** (PM2 `job-ka-sync` = `run.py watch 60`), suivie du géocodage en lot puis de la déduplication inter-sources.
70 +- **Throttle** : 1.0 s minimum entre deux requêtes vers la source (`request_delay`).
71 +- **Budgets / plafonds (variables d'environnement)** :
72 +
73 +| Variable | Défaut |
74 +|---|---|
75 +| `JOBKA_SF_DETAIL_LIMIT` | `150` |
76 +- 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.
77 +
78 +## Volumétrie & complétude live
79 +
80 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
81 +
82 +- **Offres en base** : 105 (dont **105 actives**, 0 masquées comme doublons `dup_of`)
83 +- **Salaire** : 101/105 actives (96 %)
84 +- **GPS** : 0/105 actives (0 %)
85 +- **Mode** : 103/105 actives (98 %)
86 +- **Parution** : 0/105 actives (0 %)
87 +- **Dernier sync** : 2026-08-19 04:48 — trouvées 105, +105, ~0, -0
88 +- **Syncs enregistrés** (`sync_log`) : 1
89 +
90 +## Erreurs & dépannage
91 +
92 +Aucune erreur dans `sync_log` pour cette source.
93 +
94 +- Rejouer un sync isolé : `.venv/bin/python run.py sync deloitte` puis inspecter `sync_log` : `sqlite3 data/jobka.db "SELECT * FROM sync_log WHERE source='deloitte' ORDER BY ts DESC LIMIT 5;"`
95 +- 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`.
96 +
97 +## Licence / conformité
98 +
99 +**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 Deloitte 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.
100 +
101 +## Historique
102 +
103 +**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 :
104 +- `fd4bfc8` qualité lieux : rejet des villes hors Québec, bâtiments McGill → Montréal ;
105 +- `5a66f48` +59 employeurs (sondage massif d'ATS + détection de pages carrières) ;
106 +- `4917d57` 8 nouveaux ATS (Taleo, Njoyn, UltiPro, iCIMS, SuccessFactors, ADP WFN, Digital Recruiters, Workland) + 23 employeurs publics/parapublics ;
107 +- `f6e7571` portails Guichet-Emplois, Jobillico, Espresso-Jobs — l'offre directe gagne toujours la canonique (dédup) ;
108 +- `744cbfc` badge « Offre directe », stats directes/portails, dépôt direct employeurs ;
109 +- `1604ff9` reprise sur coupure WAF Guichet-Emplois (retry + acquis partiel).
110 +
111 +Commits touchant `jobka/connectors/deloitte.py` :
112 +
113 +- `0298197` 2026-08-19 Vague A (detected-other-ats) — nouveaux employeurs sur familles existantes : Hydro-Québec (SuccessFactors CSB emploi.hydroquebec.com, 66 offres) ; Deloitte Canada (CSB careers.deloitte.ca, 105 offres QC — remplace la détection Taleo périmée) ; CGI (Njoyn corporatif via Scrapfly, babillard mondial de ~2 900 postes filtré Québec, budgets frugaux) ; Fruit d'Or (12) et Nortera (24 QC) sur UKG Pro recruiting.ultipro.ca ; Placements Mackenzie/groupe Power (iCIMS FR, 3 QC) ; Cultures Gen V (6), Bento Sushi (9 QC), Osgoode Properties (1) sur ADP WFN. Retrait ttcglobal (plus d'offre QC : 2 offres Dallas/Londres). Écartés avec raisons (docs/CONFORMITE.md) : Canada Vie, Groupe Dynamite, Jack Astor's/SIR, Méchant Bœuf, Valero (0 offre), Résolu (fusion Domtar), Power Corp directe.
modified docs/connecteurs/depot-direct.md +2 −2
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/depot-direct.md
7 7 Rôle : Fiche du canal de dépôt direct employeurs
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -36,7 +36,7 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
36 36
37 37 ## Volumétrie & complétude live
38 38
39 −*(mesuré le 2026-08-19 03:39 EDT dans `data/jobka.db`)*
39 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
40 40
41 41 - **Offres en base** : 0 (dont **0 actives**, 0 masquées comme doublons `dup_of`)
42 42 - **Salaire** : 0/0 actives (—)
modified docs/connecteurs/desjardins.md +6 −6
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/desjardins.md
7 7 Rôle : Fiche connecteur — Mouvement Desjardins (employeur direct, ATS workday)
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -38,7 +38,7 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
38 38
39 39 ## Champs → schéma
40 40
41 −Complétude mesurée sur les **241 offres actives** de la source (base live, 2026-08-19 03:39 EDT).
41 +Complétude mesurée sur les **241 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
42 42
43 43 | Champ (`jobs.*`) | Rôle | Complétude |
44 44 |---|---|---|
@@ -64,7 +64,7 @@ Complétude mesurée sur les **241 offres actives** de la source (base live, 202
64 64 | `apply_url` — Candidature | lien de candidature directe | 100 % |
65 65 | `gps` — GPS | lat/lng (géocodage sans invention) | 94 % |
66 66
67 −Exemple réel : *Advisor, Banking and Credit Services, Customer Relations Center* — Montréal · A competitive wage starting at $26,41/hour, adjusted based on relevant experience · parue le 2026-08-05.
67 +Exemple réel : *Advisor, Banking and Credit Services, Customer Relations Center* — Montréal · A competitive wage starting at $26,41/hour, adjusted based on relevant experience · parue le 2026-08-04.
68 68
69 69 ## Fréquence & budgets
70 70
@@ -79,15 +79,15 @@ Exemple réel : *Advisor, Banking and Credit Services, Customer Relations Center
79 79
80 80 ## Volumétrie & complétude live
81 81
82 −*(mesuré le 2026-08-19 03:39 EDT dans `data/jobka.db`)*
82 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
83 83
84 84 - **Offres en base** : 260 (dont **241 actives**, 0 masquées comme doublons `dup_of`)
85 85 - **Salaire** : 4/241 actives (2 %)
86 86 - **GPS** : 226/241 actives (94 %)
87 87 - **Mode** : 50/241 actives (21 %)
88 88 - **Parution** : 241/241 actives (100 %)
89 −- **Dernier sync** : 2026-08-19 01:46 — trouvées 241, +0, ~241, -7
90 −- **Syncs enregistrés** (`sync_log`) : 29
89 +- **Dernier sync** : 2026-08-19 03:55 — trouvées 241, +0, ~172, -0
90 +- **Syncs enregistrés** (`sync_log`) : 30
91 91
92 92 ## Erreurs & dépannage
93 93
modified docs/connecteurs/devimco.md +5 −5
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/devimco.md
7 7 Rôle : Fiche connecteur — Devimco Appartements (employeur direct, ATS bamboohr)
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -36,7 +36,7 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
36 36
37 37 ## Champs → schéma
38 38
39 −Complétude mesurée sur les **8 offres actives** de la source (base live, 2026-08-19 03:39 EDT).
39 +Complétude mesurée sur les **8 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
40 40
41 41 | Champ (`jobs.*`) | Rôle | Complétude |
42 42 |---|---|---|
@@ -77,15 +77,15 @@ Exemple réel : *Superviseur(e) à la maintenance* — Québec · Salaire: 75 00
77 77
78 78 ## Volumétrie & complétude live
79 79
80 −*(mesuré le 2026-08-19 03:39 EDT dans `data/jobka.db`)*
80 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
81 81
82 82 - **Offres en base** : 8 (dont **8 actives**, 0 masquées comme doublons `dup_of`)
83 83 - **Salaire** : 1/8 actives (12 %)
84 84 - **GPS** : 8/8 actives (100 %)
85 85 - **Mode** : 8/8 actives (100 %)
86 86 - **Parution** : 8/8 actives (100 %)
87 −- **Dernier sync** : 2026-08-19 01:46 — trouvées 8, +0, ~8, -0
88 −- **Syncs enregistrés** (`sync_log`) : 13
87 +- **Dernier sync** : 2026-08-19 03:55 — trouvées 8, +0, ~0, -0
88 +- **Syncs enregistrés** (`sync_log`) : 14
89 89
90 90 ## Erreurs & dépannage
91 91
modified docs/connecteurs/dilitrust.md +5 −5
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/dilitrust.md
7 7 Rôle : Fiche connecteur — DiliTrust (employeur direct, ATS lever)
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -36,7 +36,7 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
36 36
37 37 ## Champs → schéma
38 38
39 −Complétude mesurée sur les **3 offres actives** de la source (base live, 2026-08-19 03:39 EDT).
39 +Complétude mesurée sur les **3 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
40 40
41 41 | Champ (`jobs.*`) | Rôle | Complétude |
42 42 |---|---|---|
@@ -72,15 +72,15 @@ Exemple réel : *Account Manager* — Montréal · ∅ · parue le 2026-06-04.
72 72
73 73 ## Volumétrie & complétude live
74 74
75 −*(mesuré le 2026-08-19 03:39 EDT dans `data/jobka.db`)*
75 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
76 76
77 77 - **Offres en base** : 3 (dont **3 actives**, 0 masquées comme doublons `dup_of`)
78 78 - **Salaire** : 0/3 actives (0 %)
79 79 - **GPS** : 3/3 actives (100 %)
80 80 - **Mode** : 3/3 actives (100 %)
81 81 - **Parution** : 3/3 actives (100 %)
82 −- **Dernier sync** : 2026-08-19 01:46 — trouvées 3, +0, ~3, -0
83 −- **Syncs enregistrés** (`sync_log`) : 25
82 +- **Dernier sync** : 2026-08-19 03:55 — trouvées 3, +0, ~0, -0
83 +- **Syncs enregistrés** (`sync_log`) : 26
84 84
85 85 ## Erreurs & dépannage
86 86
modified docs/connecteurs/distro.md +5 −5
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/distro.md
7 7 Rôle : Fiche connecteur — Distro (employeur direct, ATS lever)
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -36,7 +36,7 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
36 36
37 37 ## Champs → schéma
38 38
39 −Complétude mesurée sur les **5 offres actives** de la source (base live, 2026-08-19 03:39 EDT).
39 +Complétude mesurée sur les **5 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
40 40
41 41 | Champ (`jobs.*`) | Rôle | Complétude |
42 42 |---|---|---|
@@ -72,15 +72,15 @@ Exemple réel : *Conversion Consultant* — Québec · ∅ · parue le 2026-06-0
72 72
73 73 ## Volumétrie & complétude live
74 74
75 −*(mesuré le 2026-08-19 03:39 EDT dans `data/jobka.db`)*
75 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
76 76
77 77 - **Offres en base** : 5 (dont **5 actives**, 0 masquées comme doublons `dup_of`)
78 78 - **Salaire** : 5/5 actives (100 %)
79 79 - **GPS** : 5/5 actives (100 %)
80 80 - **Mode** : 5/5 actives (100 %)
81 81 - **Parution** : 5/5 actives (100 %)
82 −- **Dernier sync** : 2026-08-19 01:46 — trouvées 5, +0, ~5, -0
83 −- **Syncs enregistrés** (`sync_log`) : 25
82 +- **Dernier sync** : 2026-08-19 03:55 — trouvées 5, +0, ~0, -0
83 +- **Syncs enregistrés** (`sync_log`) : 26
84 84
85 85 ## Erreurs & dépannage
86 86
modified docs/connecteurs/domtar.md +5 −5
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/domtar.md
7 7 Rôle : Fiche connecteur — Domtar (employeur direct, ATS successfactors)
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -36,7 +36,7 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
36 36
37 37 ## Champs → schéma
38 38
39 −Complétude mesurée sur les **106 offres actives** de la source (base live, 2026-08-19 03:39 EDT).
39 +Complétude mesurée sur les **106 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
40 40
41 41 | Champ (`jobs.*`) | Rôle | Complétude |
42 42 |---|---|---|
@@ -77,15 +77,15 @@ Exemple réel : *Sales Manager, Quebec Region* — Lachine · ∅ · parue le
77 77
78 78 ## Volumétrie & complétude live
79 79
80 −*(mesuré le 2026-08-19 03:39 EDT dans `data/jobka.db`)*
80 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
81 81
82 82 - **Offres en base** : 107 (dont **106 actives**, 0 masquées comme doublons `dup_of`)
83 83 - **Salaire** : 0/106 actives (0 %)
84 84 - **GPS** : 105/106 actives (99 %)
85 85 - **Mode** : 0/106 actives (0 %)
86 86 - **Parution** : 0/106 actives (0 %)
87 −- **Dernier sync** : 2026-08-19 01:46 — trouvées 106, +0, ~106, -0
88 −- **Syncs enregistrés** (`sync_log`) : 13
87 +- **Dernier sync** : 2026-08-19 03:55 — trouvées 106, +0, ~0, -0
88 +- **Syncs enregistrés** (`sync_log`) : 14
89 89
90 90 ## Erreurs & dépannage
91 91
modified docs/connecteurs/dulcedo.md +5 −5
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/dulcedo.md
7 7 Rôle : Fiche connecteur — Dulcedo Management (employeur direct, ATS lever)
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -36,7 +36,7 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
36 36
37 37 ## Champs → schéma
38 38
39 −Complétude mesurée sur les **3 offres actives** de la source (base live, 2026-08-19 03:39 EDT).
39 +Complétude mesurée sur les **3 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
40 40
41 41 | Champ (`jobs.*`) | Rôle | Complétude |
42 42 |---|---|---|
@@ -72,15 +72,15 @@ Exemple réel : *Senior Manager, Strategic Partnerships & New Business* — Mont
72 72
73 73 ## Volumétrie & complétude live
74 74
75 −*(mesuré le 2026-08-19 03:39 EDT dans `data/jobka.db`)*
75 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
76 76
77 77 - **Offres en base** : 4 (dont **3 actives**, 0 masquées comme doublons `dup_of`)
78 78 - **Salaire** : 1/3 actives (33 %)
79 79 - **GPS** : 2/3 actives (67 %)
80 80 - **Mode** : 3/3 actives (100 %)
81 81 - **Parution** : 3/3 actives (100 %)
82 −- **Dernier sync** : 2026-08-19 01:46 — trouvées 3, +0, ~3, -0
83 −- **Syncs enregistrés** (`sync_log`) : 25
82 +- **Dernier sync** : 2026-08-19 03:55 — trouvées 3, +0, ~0, -0
83 +- **Syncs enregistrés** (`sync_log`) : 26
84 84
85 85 ## Erreurs & dépannage
86 86
modified docs/connecteurs/edf_renouvelables.md +5 −5
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/edf_renouvelables.md
7 7 Rôle : Fiche connecteur — EDF Renouvelables Canada (employeur direct, ATS icims)
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -36,7 +36,7 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
36 36
37 37 ## Champs → schéma
38 38
39 −Complétude mesurée sur les **9 offres actives** de la source (base live, 2026-08-19 03:39 EDT).
39 +Complétude mesurée sur les **9 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
40 40
41 41 | Champ (`jobs.*`) | Rôle | Complétude |
42 42 |---|---|---|
@@ -77,15 +77,15 @@ Exemple réel : *Ingénieur.e électrique sénior [Hybride]* — Montréal · É
77 77
78 78 ## Volumétrie & complétude live
79 79
80 −*(mesuré le 2026-08-19 03:39 EDT dans `data/jobka.db`)*
80 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
81 81
82 82 - **Offres en base** : 9 (dont **9 actives**, 0 masquées comme doublons `dup_of`)
83 83 - **Salaire** : 7/9 actives (78 %)
84 84 - **GPS** : 6/9 actives (67 %)
85 85 - **Mode** : 6/9 actives (67 %)
86 86 - **Parution** : 9/9 actives (100 %)
87 −- **Dernier sync** : 2026-08-19 01:46 — trouvées 9, +0, ~9, -0
88 −- **Syncs enregistrés** (`sync_log`) : 13
87 +- **Dernier sync** : 2026-08-19 03:55 — trouvées 9, +0, ~0, -0
88 +- **Syncs enregistrés** (`sync_log`) : 14
89 89
90 90 ## Erreurs & dépannage
91 91
modified docs/connecteurs/emcocorporation.md +5 −5
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/emcocorporation.md
7 7 Rôle : Fiche connecteur — EMCO (employeur direct, ATS smartrecruiters)
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -36,7 +36,7 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
36 36
37 37 ## Champs → schéma
38 38
39 −Complétude mesurée sur les **67 offres actives** de la source (base live, 2026-08-19 03:39 EDT).
39 +Complétude mesurée sur les **67 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
40 40
41 41 | Champ (`jobs.*`) | Rôle | Complétude |
42 42 |---|---|---|
@@ -77,15 +77,15 @@ Exemple réel : *Gestionnaire Junior en Distribution / Strategic Development Tra
77 77
78 78 ## Volumétrie & complétude live
79 79
80 −*(mesuré le 2026-08-19 03:39 EDT dans `data/jobka.db`)*
80 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
81 81
82 82 - **Offres en base** : 67 (dont **67 actives**, 0 masquées comme doublons `dup_of`)
83 83 - **Salaire** : 32/67 actives (48 %)
84 84 - **GPS** : 67/67 actives (100 %)
85 85 - **Mode** : 15/67 actives (22 %)
86 86 - **Parution** : 67/67 actives (100 %)
87 −- **Dernier sync** : 2026-08-19 01:46 — trouvées 67, +0, ~67, -0
88 −- **Syncs enregistrés** (`sync_log`) : 25
87 +- **Dernier sync** : 2026-08-19 03:55 — trouvées 67, +0, ~0, -0
88 +- **Syncs enregistrés** (`sync_log`) : 26
89 89
90 90 ## Erreurs & dépannage
91 91
modified docs/connecteurs/eminent_valet.md +5 −5
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/eminent_valet.md
7 7 Rôle : Fiche connecteur — Eminent Valet (employeur direct, ATS workable)
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -36,7 +36,7 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
36 36
37 37 ## Champs → schéma
38 38
39 −Complétude mesurée sur les **9 offres actives** de la source (base live, 2026-08-19 03:39 EDT).
39 +Complétude mesurée sur les **9 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
40 40
41 41 | Champ (`jobs.*`) | Rôle | Complétude |
42 42 |---|---|---|
@@ -72,15 +72,15 @@ Exemple réel : *Valet & Butler \| Voiturier et Majordome (On-call, Sur appel)*
72 72
73 73 ## Volumétrie & complétude live
74 74
75 −*(mesuré le 2026-08-19 03:39 EDT dans `data/jobka.db`)*
75 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
76 76
77 77 - **Offres en base** : 9 (dont **9 actives**, 0 masquées comme doublons `dup_of`)
78 78 - **Salaire** : 9/9 actives (100 %)
79 79 - **GPS** : 9/9 actives (100 %)
80 80 - **Mode** : 0/9 actives (0 %)
81 81 - **Parution** : 9/9 actives (100 %)
82 −- **Dernier sync** : 2026-08-19 01:46 — trouvées 9, +0, ~9, -0
83 −- **Syncs enregistrés** (`sync_log`) : 25
82 +- **Dernier sync** : 2026-08-19 03:55 — trouvées 9, +0, ~0, -0
83 +- **Syncs enregistrés** (`sync_log`) : 26
84 84
85 85 ## Erreurs & dépannage
86 86
modified docs/connecteurs/eosaircraftinc.md +5 −5
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/eosaircraftinc.md
7 7 Rôle : Fiche connecteur — EOS Aircraft (employeur direct, ATS bamboohr)
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -36,7 +36,7 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
36 36
37 37 ## Champs → schéma
38 38
39 −Complétude mesurée sur les **4 offres actives** de la source (base live, 2026-08-19 03:39 EDT).
39 +Complétude mesurée sur les **4 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
40 40
41 41 | Champ (`jobs.*`) | Rôle | Complétude |
42 42 |---|---|---|
@@ -77,15 +77,15 @@ Exemple réel : *Ingénieur principal – Systèmes de gestion de batterie (BMS)
77 77
78 78 ## Volumétrie & complétude live
79 79
80 −*(mesuré le 2026-08-19 03:39 EDT dans `data/jobka.db`)*
80 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
81 81
82 82 - **Offres en base** : 4 (dont **4 actives**, 0 masquées comme doublons `dup_of`)
83 83 - **Salaire** : 0/4 actives (0 %)
84 84 - **GPS** : 4/4 actives (100 %)
85 85 - **Mode** : 4/4 actives (100 %)
86 86 - **Parution** : 4/4 actives (100 %)
87 −- **Dernier sync** : 2026-08-19 01:46 — trouvées 4, +0, ~4, -0
88 −- **Syncs enregistrés** (`sync_log`) : 25
87 +- **Dernier sync** : 2026-08-19 03:55 — trouvées 4, +0, ~0, -0
88 +- **Syncs enregistrés** (`sync_log`) : 26
89 89
90 90 ## Erreurs & dépannage
91 91
modified docs/connecteurs/eq3_ltd.md +5 −5
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/eq3_ltd.md
7 7 Rôle : Fiche connecteur — EQ3 (employeur direct, ATS breezy)
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -36,7 +36,7 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
36 36
37 37 ## Champs → schéma
38 38
39 −Complétude mesurée sur les **10 offres actives** de la source (base live, 2026-08-19 03:39 EDT).
39 +Complétude mesurée sur les **10 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
40 40
41 41 | Champ (`jobs.*`) | Rôle | Complétude |
42 42 |---|---|---|
@@ -72,15 +72,15 @@ Exemple réel : *Consultant(e) en design - À temps plein* — Brossard · Nos c
72 72
73 73 ## Volumétrie & complétude live
74 74
75 −*(mesuré le 2026-08-19 03:39 EDT dans `data/jobka.db`)*
75 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
76 76
77 77 - **Offres en base** : 10 (dont **10 actives**, 0 masquées comme doublons `dup_of`)
78 78 - **Salaire** : 6/10 actives (60 %)
79 79 - **GPS** : 10/10 actives (100 %)
80 80 - **Mode** : 0/10 actives (0 %)
81 81 - **Parution** : 10/10 actives (100 %)
82 −- **Dernier sync** : 2026-08-19 01:46 — trouvées 10, +0, ~10, -0
83 −- **Syncs enregistrés** (`sync_log`) : 25
82 +- **Dernier sync** : 2026-08-19 03:55 — trouvées 10, +0, ~0, -0
83 +- **Syncs enregistrés** (`sync_log`) : 26
84 84
85 85 ## Erreurs & dépannage
86 86
modified docs/connecteurs/eqbank.md +5 −5
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/eqbank.md
7 7 Rôle : Fiche connecteur — EQ Bank (employeur direct, ATS lever)
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -36,7 +36,7 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
36 36
37 37 ## Champs → schéma
38 38
39 −Complétude mesurée sur les **6 offres actives** de la source (base live, 2026-08-19 03:39 EDT).
39 +Complétude mesurée sur les **6 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
40 40
41 41 | Champ (`jobs.*`) | Rôle | Complétude |
42 42 |---|---|---|
@@ -72,15 +72,15 @@ Exemple réel : *Directeur régional adjoint, Origination commerciale (CFG)/Asso
72 72
73 73 ## Volumétrie & complétude live
74 74
75 −*(mesuré le 2026-08-19 03:39 EDT dans `data/jobka.db`)*
75 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
76 76
77 77 - **Offres en base** : 6 (dont **6 actives**, 0 masquées comme doublons `dup_of`)
78 78 - **Salaire** : 3/6 actives (50 %)
79 79 - **GPS** : 3/6 actives (50 %)
80 80 - **Mode** : 6/6 actives (100 %)
81 81 - **Parution** : 6/6 actives (100 %)
82 −- **Dernier sync** : 2026-08-19 01:46 — trouvées 6, +0, ~6, -0
83 −- **Syncs enregistrés** (`sync_log`) : 25
82 +- **Dernier sync** : 2026-08-19 03:55 — trouvées 6, +0, ~0, -0
83 +- **Syncs enregistrés** (`sync_log`) : 26
84 84
85 85 ## Erreurs & dépannage
86 86
modified docs/connecteurs/espresso_jobs.md +6 −6
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/espresso_jobs.md
7 7 Rôle : Fiche connecteur — portail agrégateur Espresso-Jobs
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -35,7 +35,7 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
35 35
36 36 ## Champs → schéma
37 37
38 −Complétude mesurée sur les **309 offres actives** de la source (base live, 2026-08-19 03:39 EDT).
38 +Complétude mesurée sur les **309 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
39 39
40 40 | Champ (`jobs.*`) | Rôle | Complétude |
41 41 |---|---|---|
@@ -77,15 +77,15 @@ Exemple réel : *Bilingual Customer Service Representative* — Montréal · Thi
77 77
78 78 ## Volumétrie & complétude live
79 79
80 −*(mesuré le 2026-08-19 03:39 EDT dans `data/jobka.db`)*
80 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
81 81
82 −- **Offres en base** : 309 (dont **309 actives**, 10 masquées comme doublons `dup_of`)
82 +- **Offres en base** : 309 (dont **309 actives**, 13 masquées comme doublons `dup_of`)
83 83 - **Salaire** : 70/309 actives (23 %)
84 84 - **GPS** : 292/309 actives (94 %)
85 85 - **Mode** : 39/309 actives (13 %)
86 86 - **Parution** : 309/309 actives (100 %)
87 −- **Dernier sync** : 2026-08-19 01:46 — trouvées 309, +0, ~309, -0
88 −- **Syncs enregistrés** (`sync_log`) : 13
87 +- **Dernier sync** : 2026-08-19 03:55 — trouvées 309, +0, ~0, -0
88 +- **Syncs enregistrés** (`sync_log`) : 14
89 89
90 90 ## Erreurs & dépannage
91 91
modified docs/connecteurs/evlo.md +5 −5
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/evlo.md
7 7 Rôle : Fiche connecteur — EVLO (Hydro-Québec) (employeur direct, ATS bamboohr)
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -36,7 +36,7 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
36 36
37 37 ## Champs → schéma
38 38
39 −Complétude mesurée sur les **3 offres actives** de la source (base live, 2026-08-19 03:39 EDT).
39 +Complétude mesurée sur les **3 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
40 40
41 41 | Champ (`jobs.*`) | Rôle | Complétude |
42 42 |---|---|---|
@@ -77,15 +77,15 @@ Exemple réel : *Ingénieur en automatisation* — Québec · ∅ · parue le 20
77 77
78 78 ## Volumétrie & complétude live
79 79
80 −*(mesuré le 2026-08-19 03:39 EDT dans `data/jobka.db`)*
80 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
81 81
82 82 - **Offres en base** : 3 (dont **3 actives**, 0 masquées comme doublons `dup_of`)
83 83 - **Salaire** : 0/3 actives (0 %)
84 84 - **GPS** : 3/3 actives (100 %)
85 85 - **Mode** : 3/3 actives (100 %)
86 86 - **Parution** : 3/3 actives (100 %)
87 −- **Dernier sync** : 2026-08-19 01:46 — trouvées 3, +0, ~3, -0
88 −- **Syncs enregistrés** (`sync_log`) : 13
87 +- **Dernier sync** : 2026-08-19 03:55 — trouvées 3, +0, ~0, -0
88 +- **Syncs enregistrés** (`sync_log`) : 14
89 89
90 90 ## Erreurs & dépannage
91 91
modified docs/connecteurs/evolving_web.md +5 −5
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/evolving_web.md
7 7 Rôle : Fiche connecteur — Evolving Web (employeur direct, ATS workable)
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -36,7 +36,7 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
36 36
37 37 ## Champs → schéma
38 38
39 −Complétude mesurée sur les **14 offres actives** de la source (base live, 2026-08-19 03:39 EDT).
39 +Complétude mesurée sur les **14 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
40 40
41 41 | Champ (`jobs.*`) | Rôle | Complétude |
42 42 |---|---|---|
@@ -72,15 +72,15 @@ Exemple réel : *Technical Content and Proposal Writer* — Montréal · ∅ ·
72 72
73 73 ## Volumétrie & complétude live
74 74
75 −*(mesuré le 2026-08-19 03:39 EDT dans `data/jobka.db`)*
75 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
76 76
77 77 - **Offres en base** : 14 (dont **14 actives**, 0 masquées comme doublons `dup_of`)
78 78 - **Salaire** : 0/14 actives (0 %)
79 79 - **GPS** : 14/14 actives (100 %)
80 80 - **Mode** : 2/14 actives (14 %)
81 81 - **Parution** : 14/14 actives (100 %)
82 −- **Dernier sync** : 2026-08-19 01:46 — trouvées 14, +0, ~14, -0
83 −- **Syncs enregistrés** (`sync_log`) : 25
82 +- **Dernier sync** : 2026-08-19 03:55 — trouvées 14, +0, ~0, -0
83 +- **Syncs enregistrés** (`sync_log`) : 26
84 84
85 85 ## Erreurs & dépannage
86 86
modified docs/connecteurs/exfo.md +6 −6
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/exfo.md
7 7 Rôle : Fiche connecteur — EXFO (employeur direct, ATS workday)
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -38,7 +38,7 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
38 38
39 39 ## Champs → schéma
40 40
41 −Complétude mesurée sur les **27 offres actives** de la source (base live, 2026-08-19 03:39 EDT).
41 +Complétude mesurée sur les **27 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
42 42
43 43 | Champ (`jobs.*`) | Rôle | Complétude |
44 44 |---|---|---|
@@ -64,7 +64,7 @@ Complétude mesurée sur les **27 offres actives** de la source (base live, 2026
64 64 | `apply_url` — Candidature | lien de candidature directe | 100 % |
65 65 | `gps` — GPS | lat/lng (géocodage sans invention) | 100 % |
66 66
67 −Exemple réel : *Specialiste controle des offres* — Québec · ∅ · parue le 2026-08-17.
67 +Exemple réel : *Specialiste controle des offres* — Québec · ∅ · parue le 2026-08-16.
68 68
69 69 ## Fréquence & budgets
70 70
@@ -79,15 +79,15 @@ Exemple réel : *Specialiste controle des offres* — Québec · ∅ · parue le
79 79
80 80 ## Volumétrie & complétude live
81 81
82 −*(mesuré le 2026-08-19 03:39 EDT dans `data/jobka.db`)*
82 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
83 83
84 84 - **Offres en base** : 27 (dont **27 actives**, 0 masquées comme doublons `dup_of`)
85 85 - **Salaire** : 0/27 actives (0 %)
86 86 - **GPS** : 27/27 actives (100 %)
87 87 - **Mode** : 15/27 actives (56 %)
88 88 - **Parution** : 27/27 actives (100 %)
89 −- **Dernier sync** : 2026-08-19 01:47 — trouvées 27, +0, ~27, -0
90 −- **Syncs enregistrés** (`sync_log`) : 13
89 +- **Dernier sync** : 2026-08-19 03:56 — trouvées 27, +0, ~17, -0
90 +- **Syncs enregistrés** (`sync_log`) : 14
91 91
92 92 ## Erreurs & dépannage
93 93
added docs/connecteurs/exo.md +116 −0
@@ -0,0 +1,116 @@
1 +<!--
2 +=============================================================================
3 +Job·Ka — Groupe KA
4 +Auteur : Simon-Pierre Boucher
5 +Contact : contact@spboucher.ai
6 +Fichier : docs/connecteurs/exo.md
7 +Rôle : Fiche connecteur — exo (transport métropolitain) (employeur direct, ATS taleo_tbe)
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 + relancer le script pour régénérer.
10 +=============================================================================
11 +-->
12 +
13 +# exo (transport métropolitain) (`exo`)
14 +
15 +**Employeur direct** · Plateforme ATS : [`taleo_tbe`](ats-taleo_tbe.md) · Statut registre : actif · Connecteur : `jobka/connectors/exo_transport.py`
16 +
17 +## Description
18 +
19 +- **Site** : [exo (transport métropolitain)](https://exo.quebec)
20 +- **Page carrières** : https://phh.tbe.taleo.net/phh04/ats/careers/v2/jobSearch?org=AMT&cws=39
21 +- **Secteurs** : Transport, Secteur public
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-taleo_tbe.md`](ats-taleo_tbe.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 +| `CWS` | `39` |
33 +| `EMPLOYER` | `exo` |
34 +| `HOST` | `phh` |
35 +| `INST` | `phh04` |
36 +| `ORG` | `AMT` |
37 +- **Throttle** : 1.0 s entre requêtes.
38 +- **Filtre Québec** : seuls les postes localisés au Québec sont conservés (facette serveur quand l'ATS en offre une, sinon `is_quebec_location` côté client).
39 +
40 +## Champs → schéma
41 +
42 +Complétude mesurée sur les **25 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
43 +
44 +| Champ (`jobs.*`) | Rôle | Complétude |
45 +|---|---|---|
46 +| `title` — Titre | titre du poste | 100 % |
47 +| `employer` — Employeur | nom de l'entreprise | 100 % |
48 +| `url` — URL | lien direct vers l'offre originale | 100 % |
49 +| `description` — Description | texte complet (HTML nettoyé) | 100 % |
50 +| `city` — Ville | municipalité normalisée | 100 % |
51 +| `region` — Région | région administrative | 100 % |
52 +| `address` — Adresse | adresse du lieu de travail | 96 % |
53 +| `postal_code` — Code postal | code postal si publié | 96 % |
54 +| `work_mode` — Mode | presentiel / hybride / teletravail | 100 % |
55 +| `employment_type` — Type | temps_plein / temps_partiel / … | 96 % |
56 +| `salary` — Salaire ($) | bornes numériques normalisées $/h et $/an | 0 % |
57 +| `salary_label` — Libellé salaire | texte salarial original | 0 % |
58 +| `benefits` — Avantages | avantages sociaux publiés (JSON) | 0 % |
59 +| `requirements` — Exigences | scolarité, expérience, langues (JSON) | 0 % |
60 +| `date_posted` — Date de parution | ISO 8601 | 100 % |
61 +| `date_deadline` — Date limite | date limite pour postuler | 0 % |
62 +| `category` — Catégorie | taxonomie interne (TI, Santé, …) | 100 % |
63 +| `language` — Langue | fr / en / bilingue (source ou heuristique) | 100 % |
64 +| `company_logo` — Logo employeur | URL du logo si exposé par la source | 0 % |
65 +| `apply_url` — Candidature | lien de candidature directe | 0 % |
66 +| `gps` — GPS | lat/lng (géocodage sans invention) | 0 % |
67 +
68 +Exemple réel : *Chargé(e) de projets* — Montréal - Siège social · ∅ · parue le 2026-08-13.
69 +
70 +## Fréquence & budgets
71 +
72 +- **Cadence** : resynchronisation **horaire** (PM2 `job-ka-sync` = `run.py watch 60`), suivie du géocodage en lot puis de la déduplication inter-sources.
73 +- **Throttle** : 1.0 s minimum entre deux requêtes vers la source (`request_delay`).
74 +- **Budgets / plafonds (variables d'environnement)** :
75 +
76 +| Variable | Défaut |
77 +|---|---|
78 +| `JOBKA_TBE_DETAIL_LIMIT` | `60` |
79 +- 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.
80 +
81 +## Volumétrie & complétude live
82 +
83 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
84 +
85 +- **Offres en base** : 25 (dont **25 actives**, 0 masquées comme doublons `dup_of`)
86 +- **Salaire** : 0/25 actives (0 %)
87 +- **GPS** : 0/25 actives (0 %)
88 +- **Mode** : 25/25 actives (100 %)
89 +- **Parution** : 25/25 actives (100 %)
90 +- **Dernier sync** : 2026-08-19 04:48 — trouvées 25, +25, ~0, -0
91 +- **Syncs enregistrés** (`sync_log`) : 1
92 +
93 +## Erreurs & dépannage
94 +
95 +Aucune erreur dans `sync_log` pour cette source.
96 +
97 +- Rejouer un sync isolé : `.venv/bin/python run.py sync exo` puis inspecter `sync_log` : `sqlite3 data/jobka.db "SELECT * FROM sync_log WHERE source='exo' ORDER BY ts DESC LIMIT 5;"`
98 +- 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`.
99 +
100 +## Licence / conformité
101 +
102 +**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 exo (transport métropolitain) » 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.
103 +
104 +## Historique
105 +
106 +**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 :
107 +- `fd4bfc8` qualité lieux : rejet des villes hors Québec, bâtiments McGill → Montréal ;
108 +- `5a66f48` +59 employeurs (sondage massif d'ATS + détection de pages carrières) ;
109 +- `4917d57` 8 nouveaux ATS (Taleo, Njoyn, UltiPro, iCIMS, SuccessFactors, ADP WFN, Digital Recruiters, Workland) + 23 employeurs publics/parapublics ;
110 +- `f6e7571` portails Guichet-Emplois, Jobillico, Espresso-Jobs — l'offre directe gagne toujours la canonique (dédup) ;
111 +- `744cbfc` badge « Offre directe », stats directes/portails, dépôt direct employeurs ;
112 +- `1604ff9` reprise sur coupure WAF Guichet-Emplois (retry + acquis partiel).
113 +
114 +Commits touchant `jobka/connectors/exo_transport.py` :
115 +
116 +- `89f9713` 2026-08-19 Nouvelle famille ATS Taleo Business Edition (taleo_tbe) : flux RSS public + JSON-LD des pages requisition (lieu, dates, description complète), filtre Québec différé tant que le détail n'est pas visité. Connecteurs : Sépaq (99), Kruger (corporatif, filtre QC), Produits Kruger, exo (25), HEC Montréal personnel (9) + corps professoral (9). Fixture sepaq (121 requêtes rejouables). TÉLUQ écarté (tenant TBE fermé).
modified docs/connecteurs/explorance.md +5 −5
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/explorance.md
7 7 Rôle : Fiche connecteur — Explorance (employeur direct, ATS bamboohr)
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -36,7 +36,7 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
36 36
37 37 ## Champs → schéma
38 38
39 −Complétude mesurée sur les **18 offres actives** de la source (base live, 2026-08-19 03:39 EDT).
39 +Complétude mesurée sur les **18 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
40 40
41 41 | Champ (`jobs.*`) | Rôle | Complétude |
42 42 |---|---|---|
@@ -77,15 +77,15 @@ Exemple réel : *Coordonnateur(trice) des services de bureau et de la réception
77 77
78 78 ## Volumétrie & complétude live
79 79
80 −*(mesuré le 2026-08-19 03:39 EDT dans `data/jobka.db`)*
80 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
81 81
82 82 - **Offres en base** : 18 (dont **18 actives**, 0 masquées comme doublons `dup_of`)
83 83 - **Salaire** : 0/18 actives (0 %)
84 84 - **GPS** : 18/18 actives (100 %)
85 85 - **Mode** : 18/18 actives (100 %)
86 86 - **Parution** : 18/18 actives (100 %)
87 −- **Dernier sync** : 2026-08-19 01:47 — trouvées 18, +0, ~18, -0
88 −- **Syncs enregistrés** (`sync_log`) : 25
87 +- **Dernier sync** : 2026-08-19 03:56 — trouvées 18, +0, ~0, -0
88 +- **Syncs enregistrés** (`sync_log`) : 26
89 89
90 90 ## Erreurs & dépannage
91 91
modified docs/connecteurs/fenetresconcept.md +5 −5
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/fenetresconcept.md
7 7 Rôle : Fiche connecteur — Fenêtres Concept (employeur direct, ATS bamboohr)
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -36,7 +36,7 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
36 36
37 37 ## Champs → schéma
38 38
39 −Complétude mesurée sur les **2 offres actives** de la source (base live, 2026-08-19 03:39 EDT).
39 +Complétude mesurée sur les **2 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
40 40
41 41 | Champ (`jobs.*`) | Rôle | Complétude |
42 42 |---|---|---|
@@ -77,15 +77,15 @@ Exemple réel : *Commis à la réception de marchandise* — Québec · à parti
77 77
78 78 ## Volumétrie & complétude live
79 79
80 −*(mesuré le 2026-08-19 03:39 EDT dans `data/jobka.db`)*
80 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
81 81
82 82 - **Offres en base** : 2 (dont **2 actives**, 0 masquées comme doublons `dup_of`)
83 83 - **Salaire** : 2/2 actives (100 %)
84 84 - **GPS** : 2/2 actives (100 %)
85 85 - **Mode** : 2/2 actives (100 %)
86 86 - **Parution** : 2/2 actives (100 %)
87 −- **Dernier sync** : 2026-08-19 01:47 — trouvées 2, +0, ~2, -0
88 −- **Syncs enregistrés** (`sync_log`) : 13
87 +- **Dernier sync** : 2026-08-19 03:56 — trouvées 2, +0, ~0, -0
88 +- **Syncs enregistrés** (`sync_log`) : 14
89 89
90 90 ## Erreurs & dépannage
91 91
modified docs/connecteurs/flare.md +5 −5
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/flare.md
7 7 Rôle : Fiche connecteur — Flare (cybersécurité) (employeur direct, ATS bamboohr)
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -36,7 +36,7 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
36 36
37 37 ## Champs → schéma
38 38
39 −Complétude mesurée sur les **2 offres actives** de la source (base live, 2026-08-19 03:39 EDT).
39 +Complétude mesurée sur les **2 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
40 40
41 41 | Champ (`jobs.*`) | Rôle | Complétude |
42 42 |---|---|---|
@@ -77,15 +77,15 @@ Exemple réel : *Chef·effe d'équipe en développement logiciel, Plateforme Age
77 77
78 78 ## Volumétrie & complétude live
79 79
80 −*(mesuré le 2026-08-19 03:39 EDT dans `data/jobka.db`)*
80 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
81 81
82 82 - **Offres en base** : 2 (dont **2 actives**, 0 masquées comme doublons `dup_of`)
83 83 - **Salaire** : 1/2 actives (50 %)
84 84 - **GPS** : 2/2 actives (100 %)
85 85 - **Mode** : 2/2 actives (100 %)
86 86 - **Parution** : 2/2 actives (100 %)
87 −- **Dernier sync** : 2026-08-19 01:47 — trouvées 2, +0, ~2, -0
88 −- **Syncs enregistrés** (`sync_log`) : 13
87 +- **Dernier sync** : 2026-08-19 03:56 — trouvées 2, +0, ~0, -0
88 +- **Syncs enregistrés** (`sync_log`) : 14
89 89
90 90 ## Erreurs & dépannage
91 91
modified docs/connecteurs/flinks.md +5 −5
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/flinks.md
7 7 Rôle : Fiche connecteur — Flinks (employeur direct, ATS workable)
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -36,7 +36,7 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
36 36
37 37 ## Champs → schéma
38 38
39 −Complétude mesurée sur les **3 offres actives** de la source (base live, 2026-08-19 03:39 EDT).
39 +Complétude mesurée sur les **3 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
40 40
41 41 | Champ (`jobs.*`) | Rôle | Complétude |
42 42 |---|---|---|
@@ -72,15 +72,15 @@ Exemple réel : *Senior Full-Stack Developer* — Montréal · For experienced a
72 72
73 73 ## Volumétrie & complétude live
74 74
75 −*(mesuré le 2026-08-19 03:39 EDT dans `data/jobka.db`)*
75 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
76 76
77 77 - **Offres en base** : 3 (dont **3 actives**, 0 masquées comme doublons `dup_of`)
78 78 - **Salaire** : 3/3 actives (100 %)
79 79 - **GPS** : 3/3 actives (100 %)
80 80 - **Mode** : 3/3 actives (100 %)
81 81 - **Parution** : 3/3 actives (100 %)
82 −- **Dernier sync** : 2026-08-19 01:47 — trouvées 3, +0, ~3, -0
83 −- **Syncs enregistrés** (`sync_log`) : 25
82 +- **Dernier sync** : 2026-08-19 03:56 — trouvées 3, +0, ~0, -0
83 +- **Syncs enregistrés** (`sync_log`) : 26
84 84
85 85 ## Erreurs & dépannage
86 86
modified docs/connecteurs/fondsftq.md +6 −6
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/fondsftq.md
7 7 Rôle : Fiche connecteur — Fonds de solidarité FTQ (employeur direct, ATS workday)
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -38,7 +38,7 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
38 38
39 39 ## Champs → schéma
40 40
41 −Complétude mesurée sur les **10 offres actives** de la source (base live, 2026-08-19 03:39 EDT).
41 +Complétude mesurée sur les **10 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
42 42
43 43 | Champ (`jobs.*`) | Rôle | Complétude |
44 44 |---|---|---|
@@ -64,7 +64,7 @@ Complétude mesurée sur les **10 offres actives** de la source (base live, 2026
64 64 | `apply_url` — Candidature | lien de candidature directe | 100 % |
65 65 | `gps` — GPS | lat/lng (géocodage sans invention) | 100 % |
66 66
67 −Exemple réel : *Expert(e) sénior(e) en gestion des identités et des accès (GIA/IAM)* — Montréal · ∅ · parue le 2026-08-15.
67 +Exemple réel : *Expert(e) sénior(e) en gestion des identités et des accès (GIA/IAM)* — Montréal · ∅ · parue le 2026-08-14.
68 68
69 69 ## Fréquence & budgets
70 70
@@ -79,15 +79,15 @@ Exemple réel : *Expert(e) sénior(e) en gestion des identités et des accès (G
79 79
80 80 ## Volumétrie & complétude live
81 81
82 −*(mesuré le 2026-08-19 03:39 EDT dans `data/jobka.db`)*
82 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
83 83
84 84 - **Offres en base** : 10 (dont **10 actives**, 0 masquées comme doublons `dup_of`)
85 85 - **Salaire** : 0/10 actives (0 %)
86 86 - **GPS** : 10/10 actives (100 %)
87 87 - **Mode** : 10/10 actives (100 %)
88 88 - **Parution** : 10/10 actives (100 %)
89 −- **Dernier sync** : 2026-08-19 01:47 — trouvées 10, +0, ~10, -0
90 −- **Syncs enregistrés** (`sync_log`) : 13
89 +- **Dernier sync** : 2026-08-19 03:56 — trouvées 10, +0, ~7, -0
90 +- **Syncs enregistrés** (`sync_log`) : 14
91 91
92 92 ## Erreurs & dépannage
93 93
modified docs/connecteurs/framestore.md +5 −5
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/framestore.md
7 7 Rôle : Fiche connecteur — Framestore (employeur direct, ATS recruitee)
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -36,7 +36,7 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
36 36
37 37 ## Champs → schéma
38 38
39 −Complétude mesurée sur les **9 offres actives** de la source (base live, 2026-08-19 03:39 EDT).
39 +Complétude mesurée sur les **9 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
40 40
41 41 | Champ (`jobs.*`) | Rôle | Complétude |
42 42 |---|---|---|
@@ -72,15 +72,15 @@ Exemple réel : *Directeur·trice technique des éclairages \| Lighting TD* —
72 72
73 73 ## Volumétrie & complétude live
74 74
75 −*(mesuré le 2026-08-19 03:39 EDT dans `data/jobka.db`)*
75 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
76 76
77 77 - **Offres en base** : 9 (dont **9 actives**, 0 masquées comme doublons `dup_of`)
78 78 - **Salaire** : 0/9 actives (0 %)
79 79 - **GPS** : 9/9 actives (100 %)
80 80 - **Mode** : 9/9 actives (100 %)
81 81 - **Parution** : 9/9 actives (100 %)
82 −- **Dernier sync** : 2026-08-19 01:47 — trouvées 9, +0, ~9, -0
83 −- **Syncs enregistrés** (`sync_log`) : 25
82 +- **Dernier sync** : 2026-08-19 03:56 — trouvées 9, +0, ~0, -0
83 +- **Syncs enregistrés** (`sync_log`) : 26
84 84
85 85 ## Erreurs & dépannage
86 86
added docs/connecteurs/fruitdor.md +115 −0
@@ -0,0 +1,115 @@
1 +<!--
2 +=============================================================================
3 +Job·Ka — Groupe KA
4 +Auteur : Simon-Pierre Boucher
5 +Contact : contact@spboucher.ai
6 +Fichier : docs/connecteurs/fruitdor.md
7 +Rôle : Fiche connecteur — Fruit d'Or (employeur direct, ATS ultipro)
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 + relancer le script pour régénérer.
10 +=============================================================================
11 +-->
12 +
13 +# Fruit d'Or (`fruitdor`)
14 +
15 +**Employeur direct** · Plateforme ATS : [`ultipro`](ats-ultipro.md) · Statut registre : actif · Connecteur : `jobka/connectors/fruitdor.py`
16 +
17 +## Description
18 +
19 +- **Site** : [Fruit d'Or](https://fruitdor.ca)
20 +- **Page carrières** : https://recruiting.ultipro.ca/FRU5100FRUIT/JobBoard/91103632-8052-480e-a5b0-a6028d640577/
21 +- **Secteurs** : Agroalimentaire, Manufacturier
22 +- **Région** : Centre-du-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-ultipro.md`](ats-ultipro.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` | `91103632-8052-480e-a5b0-a6028d640577` |
33 +| `EMPLOYER` | `Fruit d'Or` |
34 +| `HOST` | `recruiting.ultipro.ca` |
35 +| `ORG` | `FRU5100FRUIT` |
36 +- **Throttle** : 0.8 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 **12 offres actives** de la source (base live, 2026-08-19 05:40 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é | 100 % |
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 | 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 | 100 % |
60 +| `date_deadline` — Date limite | date limite pour postuler | 0 % |
61 +| `category` — Catégorie | taxonomie interne (TI, Santé, …) | 67 % |
62 +| `language` — Langue | fr / en / bilingue (source ou heuristique) | 100 % |
63 +| `company_logo` — Logo employeur | URL du logo si exposé par la source | 0 % |
64 +| `apply_url` — Candidature | lien de candidature directe | 0 % |
65 +| `gps` — GPS | lat/lng (géocodage sans invention) | 0 % |
66 +
67 +Exemple réel : *Conseiller(ère) Ressources humaines* — Plessisville · ∅ · parue le 2026-08-17.
68 +
69 +## Fréquence & budgets
70 +
71 +- **Cadence** : resynchronisation **horaire** (PM2 `job-ka-sync` = `run.py watch 60`), suivie du géocodage en lot puis de la déduplication inter-sources.
72 +- **Throttle** : 0.8 s minimum entre deux requêtes vers la source (`request_delay`).
73 +- **Budgets / plafonds (variables d'environnement)** :
74 +
75 +| Variable | Défaut |
76 +|---|---|
77 +| `JOBKA_ULTIPRO_DETAIL_LIMIT` | `80` |
78 +- 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.
79 +
80 +## Volumétrie & complétude live
81 +
82 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
83 +
84 +- **Offres en base** : 12 (dont **12 actives**, 0 masquées comme doublons `dup_of`)
85 +- **Salaire** : 0/12 actives (0 %)
86 +- **GPS** : 0/12 actives (0 %)
87 +- **Mode** : 0/12 actives (0 %)
88 +- **Parution** : 12/12 actives (100 %)
89 +- **Dernier sync** : 2026-08-19 04:48 — trouvées 12, +12, ~0, -0
90 +- **Syncs enregistrés** (`sync_log`) : 1
91 +
92 +## Erreurs & dépannage
93 +
94 +Aucune erreur dans `sync_log` pour cette source.
95 +
96 +- Rejouer un sync isolé : `.venv/bin/python run.py sync fruitdor` puis inspecter `sync_log` : `sqlite3 data/jobka.db "SELECT * FROM sync_log WHERE source='fruitdor' ORDER BY ts DESC LIMIT 5;"`
97 +- 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`.
98 +
99 +## Licence / conformité
100 +
101 +**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 Fruit d'Or » 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.
102 +
103 +## Historique
104 +
105 +**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 :
106 +- `fd4bfc8` qualité lieux : rejet des villes hors Québec, bâtiments McGill → Montréal ;
107 +- `5a66f48` +59 employeurs (sondage massif d'ATS + détection de pages carrières) ;
108 +- `4917d57` 8 nouveaux ATS (Taleo, Njoyn, UltiPro, iCIMS, SuccessFactors, ADP WFN, Digital Recruiters, Workland) + 23 employeurs publics/parapublics ;
109 +- `f6e7571` portails Guichet-Emplois, Jobillico, Espresso-Jobs — l'offre directe gagne toujours la canonique (dédup) ;
110 +- `744cbfc` badge « Offre directe », stats directes/portails, dépôt direct employeurs ;
111 +- `1604ff9` reprise sur coupure WAF Guichet-Emplois (retry + acquis partiel).
112 +
113 +Commits touchant `jobka/connectors/fruitdor.py` :
114 +
115 +- `0298197` 2026-08-19 Vague A (detected-other-ats) — nouveaux employeurs sur familles existantes : Hydro-Québec (SuccessFactors CSB emploi.hydroquebec.com, 66 offres) ; Deloitte Canada (CSB careers.deloitte.ca, 105 offres QC — remplace la détection Taleo périmée) ; CGI (Njoyn corporatif via Scrapfly, babillard mondial de ~2 900 postes filtré Québec, budgets frugaux) ; Fruit d'Or (12) et Nortera (24 QC) sur UKG Pro recruiting.ultipro.ca ; Placements Mackenzie/groupe Power (iCIMS FR, 3 QC) ; Cultures Gen V (6), Bento Sushi (9 QC), Osgoode Properties (1) sur ADP WFN. Retrait ttcglobal (plus d'offre QC : 2 offres Dallas/Londres). Écartés avec raisons (docs/CONFORMITE.md) : Canada Vie, Groupe Dynamite, Jack Astor's/SIR, Méchant Bœuf, Valero (0 offre), Résolu (fusion Domtar), Power Corp directe.
modified docs/connecteurs/fuse.md +6 −6
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/fuse.md
7 7 Rôle : Fiche connecteur — Fuse Energy (employeur direct, ATS ashby)
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -36,7 +36,7 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
36 36
37 37 ## Champs → schéma
38 38
39 −Complétude mesurée sur les **3 offres actives** de la source (base live, 2026-08-19 03:39 EDT).
39 +Complétude mesurée sur les **3 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
40 40
41 41 | Champ (`jobs.*`) | Rôle | Complétude |
42 42 |---|---|---|
@@ -62,7 +62,7 @@ Complétude mesurée sur les **3 offres actives** de la source (base live, 2026-
62 62 | `apply_url` — Candidature | lien de candidature directe | 100 % |
63 63 | `gps` — GPS | lat/lng (géocodage sans invention) | 100 % |
64 64
65 −Exemple réel : *Internship - Montreal* — Montréal · ∅ · parue le 2025-05-26.
65 +Exemple réel : *Internship* — Montréal · ∅ · parue le 2025-05-26.
66 66
67 67 ## Fréquence & budgets
68 68
@@ -72,15 +72,15 @@ Exemple réel : *Internship - Montreal* — Montréal · ∅ · parue le 2025-05
72 72
73 73 ## Volumétrie & complétude live
74 74
75 −*(mesuré le 2026-08-19 03:39 EDT dans `data/jobka.db`)*
75 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
76 76
77 77 - **Offres en base** : 3 (dont **3 actives**, 0 masquées comme doublons `dup_of`)
78 78 - **Salaire** : 0/3 actives (0 %)
79 79 - **GPS** : 3/3 actives (100 %)
80 80 - **Mode** : 0/3 actives (0 %)
81 81 - **Parution** : 3/3 actives (100 %)
82 −- **Dernier sync** : 2026-08-19 01:47 — trouvées 3, +0, ~3, -0
83 −- **Syncs enregistrés** (`sync_log`) : 25
82 +- **Dernier sync** : 2026-08-19 03:56 — trouvées 3, +0, ~3, -0
83 +- **Syncs enregistrés** (`sync_log`) : 26
84 84
85 85 ## Erreurs & dépannage
86 86
modified docs/connecteurs/gameloft.md +5 −5
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/gameloft.md
7 7 Rôle : Fiche connecteur — Gameloft (employeur direct, ATS smartrecruiters)
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -36,7 +36,7 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
36 36
37 37 ## Champs → schéma
38 38
39 −Complétude mesurée sur les **14 offres actives** de la source (base live, 2026-08-19 03:39 EDT).
39 +Complétude mesurée sur les **14 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
40 40
41 41 | Champ (`jobs.*`) | Rôle | Complétude |
42 42 |---|---|---|
@@ -77,15 +77,15 @@ Exemple réel : *[Dungeons & Dragons PC-Console] Concepteur Narratif Senior - Se
77 77
78 78 ## Volumétrie & complétude live
79 79
80 −*(mesuré le 2026-08-19 03:39 EDT dans `data/jobka.db`)*
80 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
81 81
82 82 - **Offres en base** : 15 (dont **14 actives**, 0 masquées comme doublons `dup_of`)
83 83 - **Salaire** : 0/14 actives (0 %)
84 84 - **GPS** : 14/14 actives (100 %)
85 85 - **Mode** : 10/14 actives (71 %)
86 86 - **Parution** : 14/14 actives (100 %)
87 −- **Dernier sync** : 2026-08-19 01:47 — trouvées 14, +0, ~14, -0
88 −- **Syncs enregistrés** (`sync_log`) : 13
87 +- **Dernier sync** : 2026-08-19 03:56 — trouvées 14, +0, ~0, -0
88 +- **Syncs enregistrés** (`sync_log`) : 14
89 89
90 90 ## Erreurs & dépannage
91 91
modified docs/connecteurs/gearboxquebec.md +5 −5
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/gearboxquebec.md
7 7 Rôle : Fiche connecteur — Gearbox Studio Québec (employeur direct, ATS greenhouse)
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -36,7 +36,7 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
36 36
37 37 ## Champs → schéma
38 38
39 −Complétude mesurée sur les **3 offres actives** de la source (base live, 2026-08-19 03:39 EDT).
39 +Complétude mesurée sur les **3 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
40 40
41 41 | Champ (`jobs.*`) | Rôle | Complétude |
42 42 |---|---|---|
@@ -72,15 +72,15 @@ Exemple réel : *Directeur·rice du design / Design Director* — Montréal ·
72 72
73 73 ## Volumétrie & complétude live
74 74
75 −*(mesuré le 2026-08-19 03:39 EDT dans `data/jobka.db`)*
75 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
76 76
77 77 - **Offres en base** : 3 (dont **3 actives**, 0 masquées comme doublons `dup_of`)
78 78 - **Salaire** : 0/3 actives (0 %)
79 79 - **GPS** : 3/3 actives (100 %)
80 80 - **Mode** : 0/3 actives (0 %)
81 81 - **Parution** : 3/3 actives (100 %)
82 −- **Dernier sync** : 2026-08-19 01:47 — trouvées 3, +0, ~3, -0
83 −- **Syncs enregistrés** (`sync_log`) : 25
82 +- **Dernier sync** : 2026-08-19 03:56 — trouvées 3, +0, ~0, -0
83 +- **Syncs enregistrés** (`sync_log`) : 26
84 84
85 85 ## Erreurs & dépannage
86 86
modified docs/connecteurs/genetec_inc.md +5 −5
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/genetec_inc.md
7 7 Rôle : Fiche connecteur — Genetec (employeur direct, ATS workable)
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -36,7 +36,7 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
36 36
37 37 ## Champs → schéma
38 38
39 −Complétude mesurée sur les **80 offres actives** de la source (base live, 2026-08-19 03:39 EDT).
39 +Complétude mesurée sur les **80 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
40 40
41 41 | Champ (`jobs.*`) | Rôle | Complétude |
42 42 |---|---|---|
@@ -72,15 +72,15 @@ Exemple réel : *(STAGE) Coordonnateur(trice) ressources humaines / Human Resour
72 72
73 73 ## Volumétrie & complétude live
74 74
75 −*(mesuré le 2026-08-19 03:39 EDT dans `data/jobka.db`)*
75 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
76 76
77 77 - **Offres en base** : 80 (dont **80 actives**, 0 masquées comme doublons `dup_of`)
78 78 - **Salaire** : 0/80 actives (0 %)
79 79 - **GPS** : 80/80 actives (100 %)
80 80 - **Mode** : 14/80 actives (18 %)
81 81 - **Parution** : 80/80 actives (100 %)
82 −- **Dernier sync** : 2026-08-19 01:47 — trouvées 82, +0, ~82, -0
83 −- **Syncs enregistrés** (`sync_log`) : 13
82 +- **Dernier sync** : 2026-08-19 03:56 — trouvées 82, +0, ~4, -0
83 +- **Syncs enregistrés** (`sync_log`) : 14
84 84
85 85 ## Erreurs & dépannage
86 86
modified docs/connecteurs/gfs.md +6 −6
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/gfs.md
7 7 Rôle : Fiche connecteur — Service alimentaire Gordon (employeur direct, ATS workday)
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -38,7 +38,7 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
38 38
39 39 ## Champs → schéma
40 40
41 −Complétude mesurée sur les **30 offres actives** de la source (base live, 2026-08-19 03:39 EDT).
41 +Complétude mesurée sur les **30 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
42 42
43 43 | Champ (`jobs.*`) | Rôle | Complétude |
44 44 |---|---|---|
@@ -64,7 +64,7 @@ Complétude mesurée sur les **30 offres actives** de la source (base live, 2026
64 64 | `apply_url` — Candidature | lien de candidature directe | 100 % |
65 65 | `gps` — GPS | lat/lng (géocodage sans invention) | 100 % |
66 66
67 −Exemple réel : *Aide Livreur - Soir* — Québec · Taux horaire de 23,16$/h · parue le 2026-08-19.
67 +Exemple réel : *Aide Livreur - Soir* — Québec · Taux horaire de 23,16$/h · parue le 2026-08-18.
68 68
69 69 ## Fréquence & budgets
70 70
@@ -79,15 +79,15 @@ Exemple réel : *Aide Livreur - Soir* — Québec · Taux horaire de 23,16$/h ·
79 79
80 80 ## Volumétrie & complétude live
81 81
82 −*(mesuré le 2026-08-19 03:39 EDT dans `data/jobka.db`)*
82 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
83 83
84 84 - **Offres en base** : 31 (dont **30 actives**, 0 masquées comme doublons `dup_of`)
85 85 - **Salaire** : 22/30 actives (73 %)
86 86 - **GPS** : 30/30 actives (100 %)
87 87 - **Mode** : 0/30 actives (0 %)
88 88 - **Parution** : 30/30 actives (100 %)
89 −- **Dernier sync** : 2026-08-19 01:48 — trouvées 30, +0, ~30, -0
90 −- **Syncs enregistrés** (`sync_log`) : 13
89 +- **Dernier sync** : 2026-08-19 03:56 — trouvées 30, +0, ~29, -0
90 +- **Syncs enregistrés** (`sync_log`) : 14
91 91
92 92 ## Erreurs & dépannage
93 93
modified docs/connecteurs/gologic.md +5 −5
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/gologic.md
7 7 Rôle : Fiche connecteur — GoLogic (employeur direct, ATS smartrecruiters)
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -36,7 +36,7 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
36 36
37 37 ## Champs → schéma
38 38
39 −Complétude mesurée sur les **1 offres actives** de la source (base live, 2026-08-19 03:39 EDT).
39 +Complétude mesurée sur les **1 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
40 40
41 41 | Champ (`jobs.*`) | Rôle | Complétude |
42 42 |---|---|---|
@@ -77,15 +77,15 @@ Exemple réel : *Poste Java* — Montréal · ∅ · parue le 2021-11-16.
77 77
78 78 ## Volumétrie & complétude live
79 79
80 −*(mesuré le 2026-08-19 03:39 EDT dans `data/jobka.db`)*
80 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
81 81
82 82 - **Offres en base** : 1 (dont **1 actives**, 0 masquées comme doublons `dup_of`)
83 83 - **Salaire** : 0/1 actives (0 %)
84 84 - **GPS** : 1/1 actives (100 %)
85 85 - **Mode** : 0/1 actives (0 %)
86 86 - **Parution** : 1/1 actives (100 %)
87 −- **Dernier sync** : 2026-08-19 01:48 — trouvées 1, +0, ~1, -0
88 −- **Syncs enregistrés** (`sync_log`) : 13
87 +- **Dernier sync** : 2026-08-19 03:56 — trouvées 1, +0, ~0, -0
88 +- **Syncs enregistrés** (`sync_log`) : 14
89 89
90 90 ## Erreurs & dépannage
91 91
modified docs/connecteurs/gorh.md +5 −5
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/gorh.md
7 7 Rôle : Fiche connecteur — Go RH (employeur direct, ATS lever)
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -36,7 +36,7 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
36 36
37 37 ## Champs → schéma
38 38
39 −Complétude mesurée sur les **266 offres actives** de la source (base live, 2026-08-19 03:39 EDT).
39 +Complétude mesurée sur les **266 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
40 40
41 41 | Champ (`jobs.*`) | Rôle | Complétude |
42 42 |---|---|---|
@@ -72,15 +72,15 @@ Exemple réel : *Chef d'équipe de production avec volet contrôle qualité* —
72 72
73 73 ## Volumétrie & complétude live
74 74
75 −*(mesuré le 2026-08-19 03:39 EDT dans `data/jobka.db`)*
75 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
76 76
77 77 - **Offres en base** : 266 (dont **266 actives**, 0 masquées comme doublons `dup_of`)
78 78 - **Salaire** : 49/266 actives (18 %)
79 79 - **GPS** : 260/266 actives (98 %)
80 80 - **Mode** : 262/266 actives (98 %)
81 81 - **Parution** : 266/266 actives (100 %)
82 −- **Dernier sync** : 2026-08-19 01:48 — trouvées 266, +0, ~266, -0
83 −- **Syncs enregistrés** (`sync_log`) : 25
82 +- **Dernier sync** : 2026-08-19 03:56 — trouvées 266, +0, ~0, -0
83 +- **Syncs enregistrés** (`sync_log`) : 26
84 84
85 85 ## Erreurs & dépannage
86 86
modified docs/connecteurs/groupecanam.md +5 −5
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/groupecanam.md
7 7 Rôle : Fiche connecteur — Groupe Canam (employeur direct, ATS smartrecruiters)
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -36,7 +36,7 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
36 36
37 37 ## Champs → schéma
38 38
39 −Complétude mesurée sur les **65 offres actives** de la source (base live, 2026-08-19 03:39 EDT).
39 +Complétude mesurée sur les **65 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
40 40
41 41 | Champ (`jobs.*`) | Rôle | Complétude |
42 42 |---|---|---|
@@ -77,15 +77,15 @@ Exemple réel : *Soudeur(euse)* — Saint-Gédéon-de-Beauce · On t’offre un
77 77
78 78 ## Volumétrie & complétude live
79 79
80 −*(mesuré le 2026-08-19 03:39 EDT dans `data/jobka.db`)*
80 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
81 81
82 82 - **Offres en base** : 67 (dont **65 actives**, 0 masquées comme doublons `dup_of`)
83 83 - **Salaire** : 43/65 actives (66 %)
84 84 - **GPS** : 64/65 actives (98 %)
85 85 - **Mode** : 17/65 actives (26 %)
86 86 - **Parution** : 65/65 actives (100 %)
87 −- **Dernier sync** : 2026-08-19 01:48 — trouvées 65, +0, ~65, -0
88 −- **Syncs enregistrés** (`sync_log`) : 13
87 +- **Dernier sync** : 2026-08-19 03:56 — trouvées 65, +0, ~0, -0
88 +- **Syncs enregistrés** (`sync_log`) : 14
89 89
90 90 ## Erreurs & dépannage
91 91
modified docs/connecteurs/gsk.md +6 −6
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/gsk.md
7 7 Rôle : Fiche connecteur — GSK (employeur direct, ATS workday)
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -38,7 +38,7 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
38 38
39 39 ## Champs → schéma
40 40
41 −Complétude mesurée sur les **12 offres actives** de la source (base live, 2026-08-19 03:39 EDT).
41 +Complétude mesurée sur les **12 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
42 42
43 43 | Champ (`jobs.*`) | Rôle | Complétude |
44 44 |---|---|---|
@@ -64,7 +64,7 @@ Complétude mesurée sur les **12 offres actives** de la source (base live, 2026
64 64 | `apply_url` — Candidature | lien de candidature directe | 100 % |
65 65 | `gps` — GPS | lat/lng (géocodage sans invention) | 83 % |
66 66
67 −Exemple réel : *Chef de territoire en Estrie/Sherbrooke (12mois)* — Québec · ∅ · parue le 2026-08-19.
67 +Exemple réel : *Chef de territoire en Estrie/Sherbrooke (12mois)* — Québec · ∅ · parue le 2026-08-18.
68 68
69 69 ## Fréquence & budgets
70 70
@@ -79,15 +79,15 @@ Exemple réel : *Chef de territoire en Estrie/Sherbrooke (12mois)* — Québec
79 79
80 80 ## Volumétrie & complétude live
81 81
82 −*(mesuré le 2026-08-19 03:39 EDT dans `data/jobka.db`)*
82 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
83 83
84 84 - **Offres en base** : 12 (dont **12 actives**, 0 masquées comme doublons `dup_of`)
85 85 - **Salaire** : 0/12 actives (0 %)
86 86 - **GPS** : 10/12 actives (83 %)
87 87 - **Mode** : 0/12 actives (0 %)
88 88 - **Parution** : 12/12 actives (100 %)
89 −- **Dernier sync** : 2026-08-19 01:48 — trouvées 12, +0, ~12, -0
90 −- **Syncs enregistrés** (`sync_log`) : 24
89 +- **Dernier sync** : 2026-08-19 03:56 — trouvées 12, +0, ~3, -0
90 +- **Syncs enregistrés** (`sync_log`) : 25
91 91
92 92 ## Erreurs & dépannage
93 93
modified docs/connecteurs/guichet_emplois.md +14 −14
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/guichet_emplois.md
7 7 Rôle : Fiche connecteur — portail agrégateur Guichet-Emplois (Canada)
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -39,14 +39,14 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
39 39
40 40 ## Champs → schéma
41 41
42 −Complétude mesurée sur les **566 offres actives** de la source (base live, 2026-08-19 03:39 EDT).
42 +Complétude mesurée sur les **502 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
43 43
44 44 | Champ (`jobs.*`) | Rôle | Complétude |
45 45 |---|---|---|
46 46 | `title` — Titre | titre du poste | 100 % |
47 47 | `employer` — Employeur | nom de l'entreprise | 100 % |
48 48 | `url` — URL | lien direct vers l'offre originale | 100 % |
49 −| `description` — Description | texte complet (HTML nettoyé) | 70 % |
49 +| `description` — Description | texte complet (HTML nettoyé) | 88 % |
50 50 | `city` — Ville | municipalité normalisée | 100 % |
51 51 | `region` — Région | région administrative | 100 % |
52 52 | `address` — Adresse | adresse du lieu de travail | 0 % |
@@ -55,12 +55,12 @@ Complétude mesurée sur les **566 offres actives** de la source (base live, 202
55 55 | `employment_type` — Type | temps_plein / temps_partiel / … | 1 % |
56 56 | `salary` — Salaire ($) | bornes numériques normalisées $/h et $/an | 99 % |
57 57 | `salary_label` — Libellé salaire | texte salarial original | 100 % |
58 −| `benefits` — Avantages | avantages sociaux publiés (JSON) | 3 % |
58 +| `benefits` — Avantages | avantages sociaux publiés (JSON) | 4 % |
59 59 | `requirements` — Exigences | scolarité, expérience, langues (JSON) | 0 % |
60 60 | `date_posted` — Date de parution | ISO 8601 | 100 % |
61 61 | `date_deadline` — Date limite | date limite pour postuler | 0 % |
62 −| `category` — Catégorie | taxonomie interne (TI, Santé, …) | 69 % |
63 −| `language` — Langue | fr / en / bilingue (source ou heuristique) | 70 % |
62 +| `category` — Catégorie | taxonomie interne (TI, Santé, …) | 72 % |
63 +| `language` — Langue | fr / en / bilingue (source ou heuristique) | 88 % |
64 64 | `company_logo` — Logo employeur | URL du logo si exposé par la source | 0 % |
65 65 | `apply_url` — Candidature | lien de candidature directe | 0 % |
66 66 | `gps` — GPS | lat/lng (géocodage sans invention) | 99 % |
@@ -82,15 +82,15 @@ Exemple réel : *commis à l'accueil* — Montréal · 50 000,00 $ par année ·
82 82
83 83 ## Volumétrie & complétude live
84 84
85 −*(mesuré le 2026-08-19 03:39 EDT dans `data/jobka.db`)*
85 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
86 86
87 −- **Offres en base** : 719 (dont **566 actives**, 0 masquées comme doublons `dup_of`)
88 −- **Salaire** : 562/566 actives (99 %)
89 −- **GPS** : 561/566 actives (99 %)
90 −- **Mode** : 0/566 actives (0 %)
91 −- **Parution** : 566/566 actives (100 %)
92 −- **Dernier sync** : 2026-08-19 01:54 — trouvées 487, +90, ~397, -26
93 −- **Syncs enregistrés** (`sync_log`) : 16
87 +- **Offres en base** : 721 (dont **502 actives**, 0 masquées comme doublons `dup_of`)
88 +- **Salaire** : 498/502 actives (99 %)
89 +- **GPS** : 497/502 actives (99 %)
90 +- **Mode** : 0/502 actives (0 %)
91 +- **Parution** : 502/502 actives (100 %)
92 +- **Dernier sync** : 2026-08-19 04:02 — trouvées 483, +2, ~55, -66
93 +- **Syncs enregistrés** (`sync_log`) : 17
94 94
95 95 ## Erreurs & dépannage
96 96
modified docs/connecteurs/gurussolutions.md +5 −5
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/gurussolutions.md
7 7 Rôle : Fiche connecteur — GURUS Solutions (employeur direct, ATS greenhouse)
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -36,7 +36,7 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
36 36
37 37 ## Champs → schéma
38 38
39 −Complétude mesurée sur les **8 offres actives** de la source (base live, 2026-08-19 03:39 EDT).
39 +Complétude mesurée sur les **8 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
40 40
41 41 | Champ (`jobs.*`) | Rôle | Complétude |
42 42 |---|---|---|
@@ -72,15 +72,15 @@ Exemple réel : *Cloud Developer - Product DevOps* — Montréal · ∅ · parue
72 72
73 73 ## Volumétrie & complétude live
74 74
75 −*(mesuré le 2026-08-19 03:39 EDT dans `data/jobka.db`)*
75 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
76 76
77 77 - **Offres en base** : 8 (dont **8 actives**, 0 masquées comme doublons `dup_of`)
78 78 - **Salaire** : 0/8 actives (0 %)
79 79 - **GPS** : 8/8 actives (100 %)
80 80 - **Mode** : 0/8 actives (0 %)
81 81 - **Parution** : 8/8 actives (100 %)
82 −- **Dernier sync** : 2026-08-19 01:54 — trouvées 8, +0, ~8, -0
83 −- **Syncs enregistrés** (`sync_log`) : 13
82 +- **Dernier sync** : 2026-08-19 04:02 — trouvées 8, +0, ~0, -0
83 +- **Syncs enregistrés** (`sync_log`) : 14
84 84
85 85 ## Erreurs & dépannage
86 86
added docs/connecteurs/hec_montreal.md +117 −0
@@ -0,0 +1,117 @@
1 +<!--
2 +=============================================================================
3 +Job·Ka — Groupe KA
4 +Auteur : Simon-Pierre Boucher
5 +Contact : contact@spboucher.ai
6 +Fichier : docs/connecteurs/hec_montreal.md
7 +Rôle : Fiche connecteur — HEC Montréal (employeur direct, ATS taleo_tbe)
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 + relancer le script pour régénérer.
10 +=============================================================================
11 +-->
12 +
13 +# HEC Montréal (`hec_montreal`)
14 +
15 +**Employeur direct** · Plateforme ATS : [`taleo_tbe`](ats-taleo_tbe.md) · Statut registre : actif · Connecteur : `jobka/connectors/hec_montreal.py`
16 +
17 +## Description
18 +
19 +- **Site** : [HEC Montréal](https://www.hec.ca)
20 +- **Page carrières** : https://tre.tbe.taleo.net/tre01/ats/careers/v2/jobSearch?org=NYQEDG&cws=40
21 +- **Secteurs** : Éducation, Administration
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-taleo_tbe.md`](ats-taleo_tbe.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 +| `CWS` | `40` |
33 +| `EMPLOYER` | `HEC Montréal` |
34 +| `FORCE_CITY` | `Montréal` |
35 +| `HOST` | `tre` |
36 +| `INST` | `tre01` |
37 +| `ORG` | `NYQEDG` |
38 +- **Throttle** : 1.0 s entre requêtes.
39 +- **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).
40 +
41 +## Champs → schéma
42 +
43 +Complétude mesurée sur les **9 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
44 +
45 +| Champ (`jobs.*`) | Rôle | Complétude |
46 +|---|---|---|
47 +| `title` — Titre | titre du poste | 100 % |
48 +| `employer` — Employeur | nom de l'entreprise | 100 % |
49 +| `url` — URL | lien direct vers l'offre originale | 100 % |
50 +| `description` — Description | texte complet (HTML nettoyé) | 100 % |
51 +| `city` — Ville | municipalité normalisée | 100 % |
52 +| `region` — Région | région administrative | 100 % |
53 +| `address` — Adresse | adresse du lieu de travail | 0 % |
54 +| `postal_code` — Code postal | code postal si publié | 0 % |
55 +| `work_mode` — Mode | presentiel / hybride / teletravail | 0 % |
56 +| `employment_type` — Type | temps_plein / temps_partiel / … | 100 % |
57 +| `salary` — Salaire ($) | bornes numériques normalisées $/h et $/an | 0 % |
58 +| `salary_label` — Libellé salaire | texte salarial original | 0 % |
59 +| `benefits` — Avantages | avantages sociaux publiés (JSON) | 0 % |
60 +| `requirements` — Exigences | scolarité, expérience, langues (JSON) | 0 % |
61 +| `date_posted` — Date de parution | ISO 8601 | 100 % |
62 +| `date_deadline` — Date limite | date limite pour postuler | 0 % |
63 +| `category` — Catégorie | taxonomie interne (TI, Santé, …) | 67 % |
64 +| `language` — Langue | fr / en / bilingue (source ou heuristique) | 100 % |
65 +| `company_logo` — Logo employeur | URL du logo si exposé par la source | 0 % |
66 +| `apply_url` — Candidature | lien de candidature directe | 0 % |
67 +| `gps` — GPS | lat/lng (géocodage sans invention) | 0 % |
68 +
69 +Exemple réel : *Chargée de projets ou chargé de projets - Campagne Vision 2036* — Montréal · ∅ · parue le 2026-08-11.
70 +
71 +## Fréquence & budgets
72 +
73 +- **Cadence** : resynchronisation **horaire** (PM2 `job-ka-sync` = `run.py watch 60`), suivie du géocodage en lot puis de la déduplication inter-sources.
74 +- **Throttle** : 1.0 s minimum entre deux requêtes vers la source (`request_delay`).
75 +- **Budgets / plafonds (variables d'environnement)** :
76 +
77 +| Variable | Défaut |
78 +|---|---|
79 +| `JOBKA_TBE_DETAIL_LIMIT` | `60` |
80 +- 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.
81 +
82 +## Volumétrie & complétude live
83 +
84 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
85 +
86 +- **Offres en base** : 9 (dont **9 actives**, 0 masquées comme doublons `dup_of`)
87 +- **Salaire** : 0/9 actives (0 %)
88 +- **GPS** : 0/9 actives (0 %)
89 +- **Mode** : 0/9 actives (0 %)
90 +- **Parution** : 9/9 actives (100 %)
91 +- **Dernier sync** : 2026-08-19 04:48 — trouvées 9, +9, ~0, -0
92 +- **Syncs enregistrés** (`sync_log`) : 1
93 +
94 +## Erreurs & dépannage
95 +
96 +Aucune erreur dans `sync_log` pour cette source.
97 +
98 +- Rejouer un sync isolé : `.venv/bin/python run.py sync hec_montreal` puis inspecter `sync_log` : `sqlite3 data/jobka.db "SELECT * FROM sync_log WHERE source='hec_montreal' ORDER BY ts DESC LIMIT 5;"`
99 +- 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`.
100 +
101 +## Licence / conformité
102 +
103 +**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 HEC Montréal » 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.
104 +
105 +## Historique
106 +
107 +**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 :
108 +- `fd4bfc8` qualité lieux : rejet des villes hors Québec, bâtiments McGill → Montréal ;
109 +- `5a66f48` +59 employeurs (sondage massif d'ATS + détection de pages carrières) ;
110 +- `4917d57` 8 nouveaux ATS (Taleo, Njoyn, UltiPro, iCIMS, SuccessFactors, ADP WFN, Digital Recruiters, Workland) + 23 employeurs publics/parapublics ;
111 +- `f6e7571` portails Guichet-Emplois, Jobillico, Espresso-Jobs — l'offre directe gagne toujours la canonique (dédup) ;
112 +- `744cbfc` badge « Offre directe », stats directes/portails, dépôt direct employeurs ;
113 +- `1604ff9` reprise sur coupure WAF Guichet-Emplois (retry + acquis partiel).
114 +
115 +Commits touchant `jobka/connectors/hec_montreal.py` :
116 +
117 +- `89f9713` 2026-08-19 Nouvelle famille ATS Taleo Business Edition (taleo_tbe) : flux RSS public + JSON-LD des pages requisition (lieu, dates, description complète), filtre Québec différé tant que le détail n'est pas visité. Connecteurs : Sépaq (99), Kruger (corporatif, filtre QC), Produits Kruger, exo (25), HEC Montréal personnel (9) + corps professoral (9). Fixture sepaq (121 requêtes rejouables). TÉLUQ écarté (tenant TBE fermé).
renamed docs/connecteurs/cssdm.md → docs/connecteurs/hec_montreal_profs.md +39 −31
@@ -3,48 +3,51 @@
3 3 Job·Ka — Groupe KA
4 4 Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 −Fichier : docs/connecteurs/cssdm.md
7 −Rôle : Fiche connecteur — Centre de services scolaire de Montréal (employeur direct, ATS workland)
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
6 +Fichier : docs/connecteurs/hec_montreal_profs.md
7 +Rôle : Fiche connecteur — HEC Montréal — corps professoral (employeur direct, ATS taleo_tbe)
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
12 12
13 −# Centre de services scolaire de Montréal (`cssdm`)
13 +# HEC Montréal — corps professoral (`hec_montreal_profs`)
14 14
15 −**Employeur direct** · Plateforme ATS : [`workland`](ats-workland.md) · Statut registre : actif · Connecteur : `jobka/connectors/cssdm.py`
15 +**Employeur direct** · Plateforme ATS : [`taleo_tbe`](ats-taleo_tbe.md) · Statut registre : actif · Connecteur : `jobka/connectors/hec_montreal_profs.py`
16 16
17 17 ## Description
18 18
19 −- **Site** : [Centre de services scolaire de Montréal](https://www.cssdm.gouv.qc.ca)
20 −- **Page carrières** : https://www.cssdm.gouv.qc.ca/travailler-cssdm/offres-emploi/
21 −- **Secteurs** : Éducation, Secteur public
19 +- **Site** : [HEC Montréal — corps professoral](https://www.hec.ca)
20 +- **Page carrières** : https://tre.tbe.taleo.net/tre01/ats/careers/v2/jobSearch?org=NYQEDG&cws=41
21 +- **Secteurs** : Éducation, Recherche
22 22 - **Région** : Montréal
23 23 - Offres marquées **« Offre directe »** dans l'app (badge) : la candidature se fait chez l'employeur, jamais via un intermédiaire.
24 24
25 25 ## Accès
26 26
27 −- **Mécanique** : voir la fiche plateforme [`ats-workland.md`](ats-workland.md) — API JSON publique du site carrières, backend `requests` direct (Scrapfly seulement si indiqué sur la fiche plateforme).
27 +- **Mécanique** : voir la fiche plateforme [`ats-taleo_tbe.md`](ats-taleo_tbe.md) — API JSON publique du site carrières, backend `requests` direct (Scrapfly seulement si indiqué sur la fiche plateforme).
28 28 - **Identifiants du tenant** (attributs du connecteur) :
29 29
30 30 | Attribut | Valeur |
31 31 |---|---|
32 −| `DEFAULT_CITY` | `Montréal` |
33 −| `EMPLOYER` | `Centre de services scolaire de Montréal` |
34 −| `LIST_URL` | `https://www.cssdm.gouv.qc.ca/travailler-cssdm/offres-emploi/` |
32 +| `CWS` | `41` |
33 +| `EMPLOYER` | `HEC Montréal` |
34 +| `FORCE_CITY` | `Montréal` |
35 +| `HOST` | `tre` |
36 +| `INST` | `tre01` |
37 +| `ORG` | `NYQEDG` |
35 38 - **Throttle** : 1.0 s entre requêtes.
36 39 - **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).
37 40
38 41 ## Champs → schéma
39 42
40 −Complétude mesurée sur les **23 offres actives** de la source (base live, 2026-08-19 03:39 EDT).
43 +Complétude mesurée sur les **9 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
41 44
42 45 | Champ (`jobs.*`) | Rôle | Complétude |
43 46 |---|---|---|
44 47 | `title` — Titre | titre du poste | 100 % |
45 48 | `employer` — Employeur | nom de l'entreprise | 100 % |
46 49 | `url` — URL | lien direct vers l'offre originale | 100 % |
47 −| `description` — Description | texte complet (HTML nettoyé) | 0 % |
50 +| `description` — Description | texte complet (HTML nettoyé) | 100 % |
48 51 | `city` — Ville | municipalité normalisée | 100 % |
49 52 | `region` — Région | région administrative | 100 % |
50 53 | `address` — Adresse | adresse du lieu de travail | 0 % |
@@ -56,43 +59,48 @@ Complétude mesurée sur les **23 offres actives** de la source (base live, 2026
56 59 | `benefits` — Avantages | avantages sociaux publiés (JSON) | 0 % |
57 60 | `requirements` — Exigences | scolarité, expérience, langues (JSON) | 0 % |
58 61 | `date_posted` — Date de parution | ISO 8601 | 0 % |
59 −| `date_deadline` — Date limite | date limite pour postuler | 100 % |
60 −| `category` — Catégorie | taxonomie interne (TI, Santé, …) | 74 % |
61 −| `language` — Langue | fr / en / bilingue (source ou heuristique) | 0 % |
62 +| `date_deadline` — Date limite | date limite pour postuler | 0 % |
63 +| `category` — Catégorie | taxonomie interne (TI, Santé, …) | 67 % |
64 +| `language` — Langue | fr / en / bilingue (source ou heuristique) | 100 % |
62 65 | `company_logo` — Logo employeur | URL du logo si exposé par la source | 0 % |
63 66 | `apply_url` — Candidature | lien de candidature directe | 0 % |
64 −| `gps` — GPS | lat/lng (géocodage sans invention) | 100 % |
67 +| `gps` — GPS | lat/lng (géocodage sans invention) | 0 % |
65 68
66 −Exemple réel : *Enseignantes et enseignants au préscolaire et primaire* — Montréal · ∅ · parue le ∅.
69 +Exemple réel : *Agente ou Agent – sollicitation donateurs* — Montréal · ∅ · parue le ∅.
67 70
68 71 ## Fréquence & budgets
69 72
70 73 - **Cadence** : resynchronisation **horaire** (PM2 `job-ka-sync` = `run.py watch 60`), suivie du géocodage en lot puis de la déduplication inter-sources.
71 74 - **Throttle** : 1.0 s minimum entre deux requêtes vers la source (`request_delay`).
75 +- **Budgets / plafonds (variables d'environnement)** :
76 +
77 +| Variable | Défaut |
78 +|---|---|
79 +| `JOBKA_TBE_DETAIL_LIMIT` | `60` |
72 80 - 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.
73 81
74 82 ## Volumétrie & complétude live
75 83
76 −*(mesuré le 2026-08-19 03:39 EDT dans `data/jobka.db`)*
84 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
77 85
78 −- **Offres en base** : 23 (dont **23 actives**, 0 masquées comme doublons `dup_of`)
79 −- **Salaire** : 0/23 actives (0 %)
80 −- **GPS** : 23/23 actives (100 %)
81 −- **Mode** : 0/23 actives (0 %)
82 −- **Parution** : 0/23 actives (0 %)
83 −- **Dernier sync** : 2026-08-19 01:42 — trouvées 23, +0, ~23, -0
84 −- **Syncs enregistrés** (`sync_log`) : 16
86 +- **Offres en base** : 9 (dont **9 actives**, 0 masquées comme doublons `dup_of`)
87 +- **Salaire** : 0/9 actives (0 %)
88 +- **GPS** : 0/9 actives (0 %)
89 +- **Mode** : 0/9 actives (0 %)
90 +- **Parution** : 0/9 actives (0 %)
91 +- **Dernier sync** : 2026-08-19 04:48 — trouvées 9, +9, ~0, -0
92 +- **Syncs enregistrés** (`sync_log`) : 1
85 93
86 94 ## Erreurs & dépannage
87 95
88 96 Aucune erreur dans `sync_log` pour cette source.
89 97
90 −- Rejouer un sync isolé : `.venv/bin/python run.py sync cssdm` puis inspecter `sync_log` : `sqlite3 data/jobka.db "SELECT * FROM sync_log WHERE source='cssdm' ORDER BY ts DESC LIMIT 5;"`
98 +- Rejouer un sync isolé : `.venv/bin/python run.py sync hec_montreal_profs` puis inspecter `sync_log` : `sqlite3 data/jobka.db "SELECT * FROM sync_log WHERE source='hec_montreal_profs' ORDER BY ts DESC LIMIT 5;"`
91 99 - 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`.
92 100
93 101 ## Licence / conformité
94 102
95 −**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 Centre de services scolaire de Montréal » 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.
103 +**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 HEC Montréal — corps professoral » 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.
96 104
97 105 ## Historique
98 106
@@ -104,6 +112,6 @@ Aucune erreur dans `sync_log` pour cette source.
104 112 - `744cbfc` badge « Offre directe », stats directes/portails, dépôt direct employeurs ;
105 113 - `1604ff9` reprise sur coupure WAF Guichet-Emplois (retry + acquis partiel).
106 114
107 −Commits touchant `jobka/connectors/cssdm.py` :
115 +Commits touchant `jobka/connectors/hec_montreal_profs.py` :
108 116
109 −- `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
117 +- `89f9713` 2026-08-19 Nouvelle famille ATS Taleo Business Edition (taleo_tbe) : flux RSS public + JSON-LD des pages requisition (lieu, dates, description complète), filtre Québec différé tant que le détail n'est pas visité. Connecteurs : Sépaq (99), Kruger (corporatif, filtre QC), Produits Kruger, exo (25), HEC Montréal personnel (9) + corps professoral (9). Fixture sepaq (121 requêtes rejouables). TÉLUQ écarté (tenant TBE fermé).
modified docs/connecteurs/hopper.md +5 −5
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/hopper.md
7 7 Rôle : Fiche connecteur — Hopper (employeur direct, ATS ashby)
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -36,7 +36,7 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
36 36
37 37 ## Champs → schéma
38 38
39 −Complétude mesurée sur les **6 offres actives** de la source (base live, 2026-08-19 03:39 EDT).
39 +Complétude mesurée sur les **6 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
40 40
41 41 | Champ (`jobs.*`) | Rôle | Complétude |
42 42 |---|---|---|
@@ -72,15 +72,15 @@ Exemple réel : *Directeur ou directrice principal(e) de produit, IA conversatio
72 72
73 73 ## Volumétrie & complétude live
74 74
75 −*(mesuré le 2026-08-19 03:39 EDT dans `data/jobka.db`)*
75 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
76 76
77 77 - **Offres en base** : 6 (dont **6 actives**, 0 masquées comme doublons `dup_of`)
78 78 - **Salaire** : 0/6 actives (0 %)
79 79 - **GPS** : 4/6 actives (67 %)
80 80 - **Mode** : 6/6 actives (100 %)
81 81 - **Parution** : 6/6 actives (100 %)
82 −- **Dernier sync** : 2026-08-19 01:54 — trouvées 6, +0, ~6, -0
83 −- **Syncs enregistrés** (`sync_log`) : 25
82 +- **Dernier sync** : 2026-08-19 04:02 — trouvées 6, +0, ~0, -0
83 +- **Syncs enregistrés** (`sync_log`) : 26
84 84
85 85 ## Erreurs & dépannage
86 86
modified docs/connecteurs/hoyoverse.md +5 −5
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/hoyoverse.md
7 7 Rôle : Fiche connecteur — HoYoverse (employeur direct, ATS smartrecruiters)
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -36,7 +36,7 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
36 36
37 37 ## Champs → schéma
38 38
39 −Complétude mesurée sur les **4 offres actives** de la source (base live, 2026-08-19 03:39 EDT).
39 +Complétude mesurée sur les **4 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
40 40
41 41 | Champ (`jobs.*`) | Rôle | Complétude |
42 42 |---|---|---|
@@ -77,15 +77,15 @@ Exemple réel : *Senior Combat Designer [CA]* — Montréal · ∅ · parue le 2
77 77
78 78 ## Volumétrie & complétude live
79 79
80 −*(mesuré le 2026-08-19 03:39 EDT dans `data/jobka.db`)*
80 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
81 81
82 82 - **Offres en base** : 4 (dont **4 actives**, 0 masquées comme doublons `dup_of`)
83 83 - **Salaire** : 0/4 actives (0 %)
84 84 - **GPS** : 4/4 actives (100 %)
85 85 - **Mode** : 4/4 actives (100 %)
86 86 - **Parution** : 4/4 actives (100 %)
87 −- **Dernier sync** : 2026-08-19 01:54 — trouvées 4, +0, ~4, -0
88 −- **Syncs enregistrés** (`sync_log`) : 25
87 +- **Dernier sync** : 2026-08-19 04:02 — trouvées 4, +0, ~0, -0
88 +- **Syncs enregistrés** (`sync_log`) : 26
89 89
90 90 ## Erreurs & dépannage
91 91
modified docs/connecteurs/huaweicanada.md +5 −5
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/huaweicanada.md
7 7 Rôle : Fiche connecteur — Huawei Canada (employeur direct, ATS recruitee)
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -36,7 +36,7 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
36 36
37 37 ## Champs → schéma
38 38
39 −Complétude mesurée sur les **18 offres actives** de la source (base live, 2026-08-19 03:39 EDT).
39 +Complétude mesurée sur les **18 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
40 40
41 41 | Champ (`jobs.*`) | Rôle | Complétude |
42 42 |---|---|---|
@@ -72,15 +72,15 @@ Exemple réel : *Department Assistant* — Montréal · ∅ · parue le 2026-07-
72 72
73 73 ## Volumétrie & complétude live
74 74
75 −*(mesuré le 2026-08-19 03:39 EDT dans `data/jobka.db`)*
75 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
76 76
77 77 - **Offres en base** : 18 (dont **18 actives**, 0 masquées comme doublons `dup_of`)
78 78 - **Salaire** : 0/18 actives (0 %)
79 79 - **GPS** : 18/18 actives (100 %)
80 80 - **Mode** : 18/18 actives (100 %)
81 81 - **Parution** : 18/18 actives (100 %)
82 −- **Dernier sync** : 2026-08-19 01:54 — trouvées 18, +0, ~18, -0
83 −- **Syncs enregistrés** (`sync_log`) : 25
82 +- **Dernier sync** : 2026-08-19 04:02 — trouvées 18, +0, ~0, -0
83 +- **Syncs enregistrés** (`sync_log`) : 26
84 84
85 85 ## Erreurs & dépannage
86 86
added docs/connecteurs/hydroquebec.md +113 −0
@@ -0,0 +1,113 @@
1 +<!--
2 +=============================================================================
3 +Job·Ka — Groupe KA
4 +Auteur : Simon-Pierre Boucher
5 +Contact : contact@spboucher.ai
6 +Fichier : docs/connecteurs/hydroquebec.md
7 +Rôle : Fiche connecteur — Hydro-Québec (employeur direct, ATS successfactors)
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 + relancer le script pour régénérer.
10 +=============================================================================
11 +-->
12 +
13 +# Hydro-Québec (`hydroquebec`)
14 +
15 +**Employeur direct** · Plateforme ATS : [`successfactors`](ats-successfactors.md) · Statut registre : actif · Connecteur : `jobka/connectors/hydroquebec.py`
16 +
17 +## Description
18 +
19 +- **Site** : [Hydro-Québec](https://www.hydroquebec.com)
20 +- **Page carrières** : https://emploi.hydroquebec.com
21 +- **Secteurs** : Énergie, Génie, TI, Secteur public
22 +- **Région** : Montréal, Québec (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-successfactors.md`](ats-successfactors.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 +| `BASE` | `https://emploi.hydroquebec.com` |
33 +| `EMPLOYER` | `Hydro-Québec` |
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 **66 offres actives** de la source (base live, 2026-08-19 05:40 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 | 77 % |
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 / … | 100 % |
53 +| `salary` — Salaire ($) | bornes numériques normalisées $/h et $/an | 61 % |
54 +| `salary_label` — Libellé salaire | texte salarial original | 61 % |
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 | 0 % |
58 +| `date_deadline` — Date limite | date limite pour postuler | 0 % |
59 +| `category` — Catégorie | taxonomie interne (TI, Santé, …) | 45 % |
60 +| `language` — Langue | fr / en / bilingue (source ou heuristique) | 100 % |
61 +| `company_logo` — Logo employeur | URL du logo si exposé par la source | 0 % |
62 +| `apply_url` — Candidature | lien de candidature directe | 0 % |
63 +| `gps` — GPS | lat/lng (géocodage sans invention) | 0 % |
64 +
65 +Exemple réel : *Développeur II - Analytique et IA* — Montréal · 81 112,20 $ à 135 187,00 $ · parue le ∅.
66 +
67 +## Fréquence & budgets
68 +
69 +- **Cadence** : resynchronisation **horaire** (PM2 `job-ka-sync` = `run.py watch 60`), suivie du géocodage en lot puis de la déduplication inter-sources.
70 +- **Throttle** : 1.0 s minimum entre deux requêtes vers la source (`request_delay`).
71 +- **Budgets / plafonds (variables d'environnement)** :
72 +
73 +| Variable | Défaut |
74 +|---|---|
75 +| `JOBKA_SF_DETAIL_LIMIT` | `150` |
76 +- 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.
77 +
78 +## Volumétrie & complétude live
79 +
80 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
81 +
82 +- **Offres en base** : 66 (dont **66 actives**, 0 masquées comme doublons `dup_of`)
83 +- **Salaire** : 40/66 actives (61 %)
84 +- **GPS** : 0/66 actives (0 %)
85 +- **Mode** : 0/66 actives (0 %)
86 +- **Parution** : 0/66 actives (0 %)
87 +- **Dernier sync** : 2026-08-19 04:48 — trouvées 66, +66, ~0, -0
88 +- **Syncs enregistrés** (`sync_log`) : 1
89 +
90 +## Erreurs & dépannage
91 +
92 +Aucune erreur dans `sync_log` pour cette source.
93 +
94 +- Rejouer un sync isolé : `.venv/bin/python run.py sync hydroquebec` puis inspecter `sync_log` : `sqlite3 data/jobka.db "SELECT * FROM sync_log WHERE source='hydroquebec' ORDER BY ts DESC LIMIT 5;"`
95 +- 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`.
96 +
97 +## Licence / conformité
98 +
99 +**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 Hydro-Québec » 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.
100 +
101 +## Historique
102 +
103 +**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 :
104 +- `fd4bfc8` qualité lieux : rejet des villes hors Québec, bâtiments McGill → Montréal ;
105 +- `5a66f48` +59 employeurs (sondage massif d'ATS + détection de pages carrières) ;
106 +- `4917d57` 8 nouveaux ATS (Taleo, Njoyn, UltiPro, iCIMS, SuccessFactors, ADP WFN, Digital Recruiters, Workland) + 23 employeurs publics/parapublics ;
107 +- `f6e7571` portails Guichet-Emplois, Jobillico, Espresso-Jobs — l'offre directe gagne toujours la canonique (dédup) ;
108 +- `744cbfc` badge « Offre directe », stats directes/portails, dépôt direct employeurs ;
109 +- `1604ff9` reprise sur coupure WAF Guichet-Emplois (retry + acquis partiel).
110 +
111 +Commits touchant `jobka/connectors/hydroquebec.py` :
112 +
113 +- `0298197` 2026-08-19 Vague A (detected-other-ats) — nouveaux employeurs sur familles existantes : Hydro-Québec (SuccessFactors CSB emploi.hydroquebec.com, 66 offres) ; Deloitte Canada (CSB careers.deloitte.ca, 105 offres QC — remplace la détection Taleo périmée) ; CGI (Njoyn corporatif via Scrapfly, babillard mondial de ~2 900 postes filtré Québec, budgets frugaux) ; Fruit d'Or (12) et Nortera (24 QC) sur UKG Pro recruiting.ultipro.ca ; Placements Mackenzie/groupe Power (iCIMS FR, 3 QC) ; Cultures Gen V (6), Bento Sushi (9 QC), Osgoode Properties (1) sur ADP WFN. Retrait ttcglobal (plus d'offre QC : 2 offres Dallas/Londres). Écartés avec raisons (docs/CONFORMITE.md) : Canada Vie, Groupe Dynamite, Jack Astor's/SIR, Méchant Bœuf, Valero (0 offre), Résolu (fusion Domtar), Power Corp directe.
modified docs/connecteurs/ia_groupe.md +6 −6
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/ia_groupe.md
7 7 Rôle : Fiche connecteur — iA Groupe financier (employeur direct, ATS workday)
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -38,7 +38,7 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
38 38
39 39 ## Champs → schéma
40 40
41 −Complétude mesurée sur les **17 offres actives** de la source (base live, 2026-08-19 03:39 EDT).
41 +Complétude mesurée sur les **17 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
42 42
43 43 | Champ (`jobs.*`) | Rôle | Complétude |
44 44 |---|---|---|
@@ -64,7 +64,7 @@ Complétude mesurée sur les **17 offres actives** de la source (base live, 2026
64 64 | `apply_url` — Candidature | lien de candidature directe | 100 % |
65 65 | `gps` — GPS | lat/lng (géocodage sans invention) | 100 % |
66 66
67 −Exemple réel : *Agency Support Agent (Saint-Laurent, Montréal)* — Québec · With over $200 billion in assets and half a billion invested in technological innovation, … · parue le 2026-08-19.
67 +Exemple réel : *Agency Support Agent (Saint-Laurent, Montréal)* — Québec · With over $200 billion in assets and half a billion invested in technological innovation, … · parue le 2026-08-18.
68 68
69 69 ## Fréquence & budgets
70 70
@@ -79,15 +79,15 @@ Exemple réel : *Agency Support Agent (Saint-Laurent, Montréal)* — Québec ·
79 79
80 80 ## Volumétrie & complétude live
81 81
82 −*(mesuré le 2026-08-19 03:39 EDT dans `data/jobka.db`)*
82 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
83 83
84 84 - **Offres en base** : 17 (dont **17 actives**, 0 masquées comme doublons `dup_of`)
85 85 - **Salaire** : 17/17 actives (100 %)
86 86 - **GPS** : 17/17 actives (100 %)
87 87 - **Mode** : 1/17 actives (6 %)
88 88 - **Parution** : 17/17 actives (100 %)
89 −- **Dernier sync** : 2026-08-19 01:55 — trouvées 17, +0, ~17, -0
90 −- **Syncs enregistrés** (`sync_log`) : 27
89 +- **Dernier sync** : 2026-08-19 04:03 — trouvées 17, +0, ~17, -0
90 +- **Syncs enregistrés** (`sync_log`) : 28
91 91
92 92 ## Erreurs & dépannage
93 93
modified docs/connecteurs/industrious.md +5 −5
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/industrious.md
7 7 Rôle : Fiche connecteur — Industrious (employeur direct, ATS ashby)
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -36,7 +36,7 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
36 36
37 37 ## Champs → schéma
38 38
39 −Complétude mesurée sur les **1 offres actives** de la source (base live, 2026-08-19 03:39 EDT).
39 +Complétude mesurée sur les **1 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
40 40
41 41 | Champ (`jobs.*`) | Rôle | Complétude |
42 42 |---|---|---|
@@ -72,15 +72,15 @@ Exemple réel : *Tech Lead, DevOps Engineer* — Montréal · ∅ · parue le 20
72 72
73 73 ## Volumétrie & complétude live
74 74
75 −*(mesuré le 2026-08-19 03:39 EDT dans `data/jobka.db`)*
75 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
76 76
77 77 - **Offres en base** : 1 (dont **1 actives**, 0 masquées comme doublons `dup_of`)
78 78 - **Salaire** : 0/1 actives (0 %)
79 79 - **GPS** : 1/1 actives (100 %)
80 80 - **Mode** : 0/1 actives (0 %)
81 81 - **Parution** : 1/1 actives (100 %)
82 −- **Dernier sync** : 2026-08-19 01:55 — trouvées 1, +0, ~1, -0
83 −- **Syncs enregistrés** (`sync_log`) : 25
82 +- **Dernier sync** : 2026-08-19 04:03 — trouvées 1, +0, ~0, -0
83 +- **Syncs enregistrés** (`sync_log`) : 26
84 84
85 85 ## Erreurs & dépannage
86 86
modified docs/connecteurs/ino_ca.md +5 −5
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/ino_ca.md
7 7 Rôle : Fiche connecteur — Luqia (INO) (employeur direct, ATS breezy)
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -36,7 +36,7 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
36 36
37 37 ## Champs → schéma
38 38
39 −Complétude mesurée sur les **7 offres actives** de la source (base live, 2026-08-19 03:39 EDT).
39 +Complétude mesurée sur les **7 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
40 40
41 41 | Champ (`jobs.*`) | Rôle | Complétude |
42 42 |---|---|---|
@@ -72,15 +72,15 @@ Exemple réel : *Technicien.ne fabrication– systèmes optiques* — Québec ·
72 72
73 73 ## Volumétrie & complétude live
74 74
75 −*(mesuré le 2026-08-19 03:39 EDT dans `data/jobka.db`)*
75 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
76 76
77 77 - **Offres en base** : 7 (dont **7 actives**, 0 masquées comme doublons `dup_of`)
78 78 - **Salaire** : 0/7 actives (0 %)
79 79 - **GPS** : 7/7 actives (100 %)
80 80 - **Mode** : 0/7 actives (0 %)
81 81 - **Parution** : 7/7 actives (100 %)
82 −- **Dernier sync** : 2026-08-19 01:55 — trouvées 7, +0, ~7, -0
83 −- **Syncs enregistrés** (`sync_log`) : 25
82 +- **Dernier sync** : 2026-08-19 04:03 — trouvées 7, +0, ~0, -0
83 +- **Syncs enregistrés** (`sync_log`) : 26
84 84
85 85 ## Erreurs & dépannage
86 86
modified docs/connecteurs/intactfc.md +6 −6
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/intactfc.md
7 7 Rôle : Fiche connecteur — Intact Corporation financière (employeur direct, ATS workday)
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -38,7 +38,7 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
38 38
39 39 ## Champs → schéma
40 40
41 −Complétude mesurée sur les **23 offres actives** de la source (base live, 2026-08-19 03:39 EDT).
41 +Complétude mesurée sur les **23 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
42 42
43 43 | Champ (`jobs.*`) | Rôle | Complétude |
44 44 |---|---|---|
@@ -64,7 +64,7 @@ Complétude mesurée sur les **23 offres actives** de la source (base live, 2026
64 64 | `apply_url` — Candidature | lien de candidature directe | 100 % |
65 65 | `gps` — GPS | lat/lng (géocodage sans invention) | 100 % |
66 66
67 −Exemple réel : *Préposé aux véhicules (valet) - Centre de service de Dorval* — Québec · ∅ · parue le 2026-08-19.
67 +Exemple réel : *Préposé aux véhicules (valet) - Centre de service de Dorval* — Québec · ∅ · parue le 2026-08-18.
68 68
69 69 ## Fréquence & budgets
70 70
@@ -79,15 +79,15 @@ Exemple réel : *Préposé aux véhicules (valet) - Centre de service de Dorval*
79 79
80 80 ## Volumétrie & complétude live
81 81
82 −*(mesuré le 2026-08-19 03:39 EDT dans `data/jobka.db`)*
82 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
83 83
84 84 - **Offres en base** : 24 (dont **23 actives**, 0 masquées comme doublons `dup_of`)
85 85 - **Salaire** : 0/23 actives (0 %)
86 86 - **GPS** : 23/23 actives (100 %)
87 87 - **Mode** : 0/23 actives (0 %)
88 88 - **Parution** : 23/23 actives (100 %)
89 −- **Dernier sync** : 2026-08-19 01:55 — trouvées 23, +0, ~23, -0
90 −- **Syncs enregistrés** (`sync_log`) : 13
89 +- **Dernier sync** : 2026-08-19 04:03 — trouvées 23, +0, ~20, -0
90 +- **Syncs enregistrés** (`sync_log`) : 14
91 91
92 92 ## Erreurs & dépannage
93 93
modified docs/connecteurs/investpsp.md +6 −6
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/investpsp.md
7 7 Rôle : Fiche connecteur — Investissements PSP (employeur direct, ATS workday)
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -38,7 +38,7 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
38 38
39 39 ## Champs → schéma
40 40
41 −Complétude mesurée sur les **43 offres actives** de la source (base live, 2026-08-19 03:39 EDT).
41 +Complétude mesurée sur les **43 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
42 42
43 43 | Champ (`jobs.*`) | Rôle | Complétude |
44 44 |---|---|---|
@@ -64,7 +64,7 @@ Complétude mesurée sur les **43 offres actives** de la source (base live, 2026
64 64 | `apply_url` — Candidature | lien de candidature directe | 100 % |
65 65 | `gps` — GPS | lat/lng (géocodage sans invention) | 100 % |
66 66
67 −Exemple réel : *Analyst, Alternative Investments* — Montréal · Global Alpha - Alpha Alternatives is a CAD$19B AUM business with a mandate to deliver unco… · parue le 2026-08-18.
67 +Exemple réel : *Analyst, Alternative Investments* — Montréal · Global Alpha - Alpha Alternatives is a CAD$19B AUM business with a mandate to deliver unco… · parue le 2026-08-17.
68 68
69 69 ## Fréquence & budgets
70 70
@@ -79,15 +79,15 @@ Exemple réel : *Analyst, Alternative Investments* — Montréal · Global Alpha
79 79
80 80 ## Volumétrie & complétude live
81 81
82 −*(mesuré le 2026-08-19 03:39 EDT dans `data/jobka.db`)*
82 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
83 83
84 84 - **Offres en base** : 44 (dont **43 actives**, 0 masquées comme doublons `dup_of`)
85 85 - **Salaire** : 2/43 actives (5 %)
86 86 - **GPS** : 43/43 actives (100 %)
87 87 - **Mode** : 0/43 actives (0 %)
88 88 - **Parution** : 43/43 actives (100 %)
89 −- **Dernier sync** : 2026-08-19 01:56 — trouvées 43, +0, ~43, -0
90 −- **Syncs enregistrés** (`sync_log`) : 13
89 +- **Dernier sync** : 2026-08-19 04:04 — trouvées 43, +0, ~16, -0
90 +- **Syncs enregistrés** (`sync_log`) : 14
91 91
92 92 ## Erreurs & dépannage
93 93
modified docs/connecteurs/investquebec.md +6 −6
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/investquebec.md
7 7 Rôle : Fiche connecteur — Investissement Québec (employeur direct, ATS workday)
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -38,7 +38,7 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
38 38
39 39 ## Champs → schéma
40 40
41 −Complétude mesurée sur les **12 offres actives** de la source (base live, 2026-08-19 03:39 EDT).
41 +Complétude mesurée sur les **12 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
42 42
43 43 | Champ (`jobs.*`) | Rôle | Complétude |
44 44 |---|---|---|
@@ -64,7 +64,7 @@ Complétude mesurée sur les **12 offres actives** de la source (base live, 2026
64 64 | `apply_url` — Candidature | lien de candidature directe | 100 % |
65 65 | `gps` — GPS | lat/lng (géocodage sans invention) | 100 % |
66 66
67 −Exemple réel : *Stagiaire, Directeur de comptes, Réseau régional (Québec, Ste-Marie ou St-Georges)* — Québec · Salaire : 20,87 $ à 30,93 $ de l’heure selon le niveau de scolarité · parue le 2026-07-29.
67 +Exemple réel : *Stagiaire, Directeur de comptes, Réseau régional (Québec, Ste-Marie ou St-Georges)* — Québec · Salaire : 20,87 $ à 30,93 $ de l’heure selon le niveau de scolarité · parue le 2026-07-28.
68 68
69 69 ## Fréquence & budgets
70 70
@@ -79,15 +79,15 @@ Exemple réel : *Stagiaire, Directeur de comptes, Réseau régional (Québec, St
79 79
80 80 ## Volumétrie & complétude live
81 81
82 −*(mesuré le 2026-08-19 03:39 EDT dans `data/jobka.db`)*
82 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
83 83
84 84 - **Offres en base** : 13 (dont **12 actives**, 0 masquées comme doublons `dup_of`)
85 85 - **Salaire** : 1/12 actives (8 %)
86 86 - **GPS** : 12/12 actives (100 %)
87 87 - **Mode** : 0/12 actives (0 %)
88 88 - **Parution** : 12/12 actives (100 %)
89 −- **Dernier sync** : 2026-08-19 01:56 — trouvées 12, +0, ~12, -1
90 −- **Syncs enregistrés** (`sync_log`) : 13
89 +- **Dernier sync** : 2026-08-19 04:04 — trouvées 12, +0, ~10, -0
90 +- **Syncs enregistrés** (`sync_log`) : 14
91 91
92 92 ## Erreurs & dépannage
93 93
modified docs/connecteurs/jexcelleinc.md +5 −5
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/jexcelleinc.md
7 7 Rôle : Fiche connecteur — J'Excelle (employeur direct, ATS smartrecruiters)
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -36,7 +36,7 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
36 36
37 37 ## Champs → schéma
38 38
39 −Complétude mesurée sur les **9 offres actives** de la source (base live, 2026-08-19 03:39 EDT).
39 +Complétude mesurée sur les **9 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
40 40
41 41 | Champ (`jobs.*`) | Rôle | Complétude |
42 42 |---|---|---|
@@ -77,15 +77,15 @@ Exemple réel : *Orthopédagogue ou Enseignant à Trois-Rivières* — Trois-Riv
77 77
78 78 ## Volumétrie & complétude live
79 79
80 −*(mesuré le 2026-08-19 03:39 EDT dans `data/jobka.db`)*
80 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
81 81
82 82 - **Offres en base** : 9 (dont **9 actives**, 0 masquées comme doublons `dup_of`)
83 83 - **Salaire** : 0/9 actives (0 %)
84 84 - **GPS** : 9/9 actives (100 %)
85 85 - **Mode** : 1/9 actives (11 %)
86 86 - **Parution** : 9/9 actives (100 %)
87 −- **Dernier sync** : 2026-08-19 01:56 — trouvées 9, +0, ~9, -0
88 −- **Syncs enregistrés** (`sync_log`) : 25
87 +- **Dernier sync** : 2026-08-19 04:04 — trouvées 9, +0, ~0, -0
88 +- **Syncs enregistrés** (`sync_log`) : 26
89 89
90 90 ## Erreurs & dépannage
91 91
modified docs/connecteurs/jgrivesud.md +6 −6
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/jgrivesud.md
7 7 Rôle : Fiche connecteur — JG Rive-Sud (GFS) (employeur direct, ATS workday)
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -38,7 +38,7 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
38 38
39 39 ## Champs → schéma
40 40
41 −Complétude mesurée sur les **9 offres actives** de la source (base live, 2026-08-19 03:39 EDT).
41 +Complétude mesurée sur les **9 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
42 42
43 43 | Champ (`jobs.*`) | Rôle | Complétude |
44 44 |---|---|---|
@@ -64,7 +64,7 @@ Complétude mesurée sur les **9 offres actives** de la source (base live, 2026-
64 64 | `apply_url` — Candidature | lien de candidature directe | 100 % |
65 65 | `gps` — GPS | lat/lng (géocodage sans invention) | 100 % |
66 66
67 −Exemple réel : *Commis entrepôt au mixte -Soir* — Québec · Commis Mixte (Préparation / Tri) - Nuit, Permanent - Chambly : 17,77 $/h + Prime · parue le 2026-08-19.
67 +Exemple réel : *Commis entrepôt au mixte -Soir* — Québec · Commis Mixte (Préparation / Tri) - Nuit, Permanent - Chambly : 17,77 $/h + Prime · parue le 2026-08-18.
68 68
69 69 ## Fréquence & budgets
70 70
@@ -79,15 +79,15 @@ Exemple réel : *Commis entrepôt au mixte -Soir* — Québec · Commis Mixte (P
79 79
80 80 ## Volumétrie & complétude live
81 81
82 −*(mesuré le 2026-08-19 03:39 EDT dans `data/jobka.db`)*
82 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
83 83
84 84 - **Offres en base** : 10 (dont **9 actives**, 0 masquées comme doublons `dup_of`)
85 85 - **Salaire** : 6/9 actives (67 %)
86 86 - **GPS** : 9/9 actives (100 %)
87 87 - **Mode** : 0/9 actives (0 %)
88 88 - **Parution** : 9/9 actives (100 %)
89 −- **Dernier sync** : 2026-08-19 01:57 — trouvées 9, +0, ~9, -0
90 −- **Syncs enregistrés** (`sync_log`) : 13
89 +- **Dernier sync** : 2026-08-19 04:04 — trouvées 9, +0, ~7, -0
90 +- **Syncs enregistrés** (`sync_log`) : 14
91 91
92 92 ## Erreurs & dépannage
93 93
modified docs/connecteurs/jobillico.md +16 −16
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/jobillico.md
7 7 Rôle : Fiche connecteur — portail agrégateur Jobillico
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -39,7 +39,7 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
39 39
40 40 ## Champs → schéma
41 41
42 −Complétude mesurée sur les **1937 offres actives** de la source (base live, 2026-08-19 03:39 EDT).
42 +Complétude mesurée sur les **2053 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
43 43
44 44 | Champ (`jobs.*`) | Rôle | Complétude |
45 45 |---|---|---|
@@ -49,19 +49,19 @@ Complétude mesurée sur les **1937 offres actives** de la source (base live, 20
49 49 | `description` — Description | texte complet (HTML nettoyé) | 100 % |
50 50 | `city` — Ville | municipalité normalisée | 100 % |
51 51 | `region` — Région | région administrative | 99 % |
52 −| `address` — Adresse | adresse du lieu de travail | 60 % |
52 +| `address` — Adresse | adresse du lieu de travail | 61 % |
53 53 | `postal_code` — Code postal | code postal si publié | 60 % |
54 54 | `work_mode` — Mode | presentiel / hybride / teletravail | 2 % |
55 −| `employment_type` — Type | temps_plein / temps_partiel / … | 26 % |
56 −| `salary` — Salaire ($) | bornes numériques normalisées $/h et $/an | 38 % |
55 +| `employment_type` — Type | temps_plein / temps_partiel / … | 27 % |
56 +| `salary` — Salaire ($) | bornes numériques normalisées $/h et $/an | 37 % |
57 57 | `salary_label` — Libellé salaire | texte salarial original | 4 % |
58 −| `benefits` — Avantages | avantages sociaux publiés (JSON) | 5 % |
59 −| `requirements` — Exigences | scolarité, expérience, langues (JSON) | 6 % |
58 +| `benefits` — Avantages | avantages sociaux publiés (JSON) | 4 % |
59 +| `requirements` — Exigences | scolarité, expérience, langues (JSON) | 9 % |
60 60 | `date_posted` — Date de parution | ISO 8601 | 100 % |
61 61 | `date_deadline` — Date limite | date limite pour postuler | 100 % |
62 62 | `category` — Catégorie | taxonomie interne (TI, Santé, …) | 83 % |
63 63 | `language` — Langue | fr / en / bilingue (source ou heuristique) | 100 % |
64 −| `company_logo` — Logo employeur | URL du logo si exposé par la source | 10 % |
64 +| `company_logo` — Logo employeur | URL du logo si exposé par la source | 16 % |
65 65 | `apply_url` — Candidature | lien de candidature directe | 0 % |
66 66 | `gps` — GPS | lat/lng (géocodage sans invention) | 100 % |
67 67
@@ -81,15 +81,15 @@ Exemple réel : *Porteur(euse)s aux funérailles* — Montréal · Rémunératio
81 81
82 82 ## Volumétrie & complétude live
83 83
84 −*(mesuré le 2026-08-19 03:39 EDT dans `data/jobka.db`)*
84 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
85 85
86 −- **Offres en base** : 2214 (dont **1937 actives**, 0 masquées comme doublons `dup_of`)
87 −- **Salaire** : 733/1937 actives (38 %)
88 −- **GPS** : 1937/1937 actives (100 %)
89 −- **Mode** : 40/1937 actives (2 %)
90 −- **Parution** : 1937/1937 actives (100 %)
91 −- **Dernier sync** : 2026-08-19 02:02 — trouvées 212, +139, ~73, -0
92 −- **Syncs enregistrés** (`sync_log`) : 13
86 +- **Offres en base** : 2280 (dont **2053 actives**, 13 masquées comme doublons `dup_of`)
87 +- **Salaire** : 769/2053 actives (37 %)
88 +- **GPS** : 2053/2053 actives (100 %)
89 +- **Mode** : 42/2053 actives (2 %)
90 +- **Parution** : 2053/2053 actives (100 %)
91 +- **Dernier sync** : 2026-08-19 04:10 — trouvées 396, +66, ~118, -1
92 +- **Syncs enregistrés** (`sync_log`) : 14
93 93
94 94 ## Erreurs & dépannage
95 95
modified docs/connecteurs/korem.md +5 −5
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/korem.md
7 7 Rôle : Fiche connecteur — Korem (employeur direct, ATS bamboohr)
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -36,7 +36,7 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
36 36
37 37 ## Champs → schéma
38 38
39 −Complétude mesurée sur les **4 offres actives** de la source (base live, 2026-08-19 03:39 EDT).
39 +Complétude mesurée sur les **4 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
40 40
41 41 | Champ (`jobs.*`) | Rôle | Complétude |
42 42 |---|---|---|
@@ -77,15 +77,15 @@ Exemple réel : *Contrôleur·euse de projet (PCO)* — Québec · ∅ · parue
77 77
78 78 ## Volumétrie & complétude live
79 79
80 −*(mesuré le 2026-08-19 03:39 EDT dans `data/jobka.db`)*
80 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
81 81
82 82 - **Offres en base** : 4 (dont **4 actives**, 0 masquées comme doublons `dup_of`)
83 83 - **Salaire** : 0/4 actives (0 %)
84 84 - **GPS** : 4/4 actives (100 %)
85 85 - **Mode** : 4/4 actives (100 %)
86 86 - **Parution** : 4/4 actives (100 %)
87 −- **Dernier sync** : 2026-08-19 02:02 — trouvées 4, +0, ~4, -0
88 −- **Syncs enregistrés** (`sync_log`) : 13
87 +- **Dernier sync** : 2026-08-19 04:10 — trouvées 4, +0, ~0, -0
88 +- **Syncs enregistrés** (`sync_log`) : 14
89 89
90 90 ## Erreurs & dépannage
91 91
modified docs/connecteurs/kpidigital.md +5 −5
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/kpidigital.md
7 7 Rôle : Fiche connecteur — KPI Digital (employeur direct, ATS bamboohr)
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -36,7 +36,7 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
36 36
37 37 ## Champs → schéma
38 38
39 −Complétude mesurée sur les **11 offres actives** de la source (base live, 2026-08-19 03:39 EDT).
39 +Complétude mesurée sur les **11 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
40 40
41 41 | Champ (`jobs.*`) | Rôle | Complétude |
42 42 |---|---|---|
@@ -77,15 +77,15 @@ Exemple réel : *Senior Manager-Consulting/ Gestionnaire senior – consultant(e
77 77
78 78 ## Volumétrie & complétude live
79 79
80 −*(mesuré le 2026-08-19 03:39 EDT dans `data/jobka.db`)*
80 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
81 81
82 82 - **Offres en base** : 11 (dont **11 actives**, 0 masquées comme doublons `dup_of`)
83 83 - **Salaire** : 0/11 actives (0 %)
84 84 - **GPS** : 11/11 actives (100 %)
85 85 - **Mode** : 11/11 actives (100 %)
86 86 - **Parution** : 11/11 actives (100 %)
87 −- **Dernier sync** : 2026-08-19 02:02 — trouvées 11, +0, ~11, -0
88 −- **Syncs enregistrés** (`sync_log`) : 25
87 +- **Dernier sync** : 2026-08-19 04:10 — trouvées 11, +0, ~0, -0
88 +- **Syncs enregistrés** (`sync_log`) : 26
89 89
90 90 ## Erreurs & dépannage
91 91
renamed docs/connecteurs/ttcglobal.md → docs/connecteurs/kruger.md +28 −20
@@ -3,34 +3,37 @@
3 3 Job·Ka — Groupe KA
4 4 Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 −Fichier : docs/connecteurs/ttcglobal.md
7 −Rôle : Fiche connecteur — TTC Global (employeur direct, ATS greenhouse)
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
6 +Fichier : docs/connecteurs/kruger.md
7 +Rôle : Fiche connecteur — Kruger (employeur direct, ATS taleo_tbe)
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
12 12
13 −# TTC Global (`ttcglobal`)
13 +# Kruger (`kruger`)
14 14
15 −**Employeur direct** · Plateforme ATS : [`greenhouse`](ats-greenhouse.md) · Statut registre : actif · Connecteur : `jobka/connectors/ttcglobal.py`
15 +**Employeur direct** · Plateforme ATS : [`taleo_tbe`](ats-taleo_tbe.md) · Statut registre : actif · Connecteur : `jobka/connectors/kruger.py`
16 16
17 17 ## Description
18 18
19 −- **Site** : [TTC Global]()
20 −- **Page carrières** : https://job-boards.greenhouse.io/ttcglobal
21 −- **Secteurs** : TI, Conseil
22 −- **Région** : Montréal
19 +- **Site** : [Kruger](https://www.kruger.com)
20 +- **Page carrières** : https://tre.tbe.taleo.net/tre01/ats/careers/v2/jobSearch?org=KRUGER2&cws=76
21 +- **Secteurs** : Pâtes et papiers, Manufacturier
22 +- **Région** : Montréal, Trois-Rivières
23 23 - Offres marquées **« Offre directe »** dans l'app (badge) : la candidature se fait chez l'employeur, jamais via un intermédiaire.
24 24
25 25 ## Accès
26 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).
27 +- **Mécanique** : voir la fiche plateforme [`ats-taleo_tbe.md`](ats-taleo_tbe.md) — API JSON publique du site carrières, backend `requests` direct (Scrapfly seulement si indiqué sur la fiche plateforme).
28 28 - **Identifiants du tenant** (attributs du connecteur) :
29 29
30 30 | Attribut | Valeur |
31 31 |---|---|
32 −| `BOARD` | `ttcglobal` |
33 −| `EMPLOYER` | `TTC Global` |
32 +| `CWS` | `76` |
33 +| `EMPLOYER` | `Kruger` |
34 +| `HOST` | `tre` |
35 +| `INST` | `tre01` |
36 +| `ORG` | `KRUGER2` |
34 37 - **Throttle** : 1.0 s entre requêtes.
35 38 - **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 39
@@ -42,30 +45,35 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
42 45
43 46 - **Cadence** : resynchronisation **horaire** (PM2 `job-ka-sync` = `run.py watch 60`), suivie du géocodage en lot puis de la déduplication inter-sources.
44 47 - **Throttle** : 1.0 s minimum entre deux requêtes vers la source (`request_delay`).
48 +- **Budgets / plafonds (variables d'environnement)** :
49 +
50 +| Variable | Défaut |
51 +|---|---|
52 +| `JOBKA_TBE_DETAIL_LIMIT` | `60` |
45 53 - 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.
46 54
47 55 ## Volumétrie & complétude live
48 56
49 −*(mesuré le 2026-08-19 03:39 EDT dans `data/jobka.db`)*
57 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
50 58
51 −- **Offres en base** : 3 (dont **0 actives**, 0 masquées comme doublons `dup_of`)
59 +- **Offres en base** : 0 (dont **0 actives**, 0 masquées comme doublons `dup_of`)
52 60 - **Salaire** : 0/0 actives (—)
53 61 - **GPS** : 0/0 actives (—)
54 62 - **Mode** : 0/0 actives (—)
55 63 - **Parution** : 0/0 actives (—)
56 −- **Dernier sync** : 2026-08-19 02:20 — trouvées 0, +0, ~0, -0
57 −- **Syncs enregistrés** (`sync_log`) : 24
64 +- **Dernier sync** : 2026-08-19 04:47 — trouvées 0, +0, ~0, -0
65 +- **Syncs enregistrés** (`sync_log`) : 1
58 66
59 67 ## Erreurs & dépannage
60 68
61 69 Aucune erreur dans `sync_log` pour cette source.
62 70
63 −- Rejouer un sync isolé : `.venv/bin/python run.py sync ttcglobal` puis inspecter `sync_log` : `sqlite3 data/jobka.db "SELECT * FROM sync_log WHERE source='ttcglobal' ORDER BY ts DESC LIMIT 5;"`
71 +- Rejouer un sync isolé : `.venv/bin/python run.py sync kruger` puis inspecter `sync_log` : `sqlite3 data/jobka.db "SELECT * FROM sync_log WHERE source='kruger' ORDER BY ts DESC LIMIT 5;"`
64 72 - 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`.
65 73
66 74 ## Licence / conformité
67 75
68 −**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 TTC Global » 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.
76 +**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 Kruger » 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.
69 77
70 78 ## Historique
71 79
@@ -77,6 +85,6 @@ Aucune erreur dans `sync_log` pour cette source.
77 85 - `744cbfc` badge « Offre directe », stats directes/portails, dépôt direct employeurs ;
78 86 - `1604ff9` reprise sur coupure WAF Guichet-Emplois (retry + acquis partiel).
79 87
80 −Commits touchant `jobka/connectors/ttcglobal.py` :
88 +Commits touchant `jobka/connectors/kruger.py` :
81 89
82 −- `4657429` 2026-08-17 Création massive : 135 connecteurs employeurs québécois sur 9 plateformes ATS
90 +- `89f9713` 2026-08-19 Nouvelle famille ATS Taleo Business Edition (taleo_tbe) : flux RSS public + JSON-LD des pages requisition (lieu, dates, description complète), filtre Québec différé tant que le détail n'est pas visité. Connecteurs : Sépaq (99), Kruger (corporatif, filtre QC), Produits Kruger, exo (25), HEC Montréal personnel (9) + corps professoral (9). Fixture sepaq (121 requêtes rejouables). TÉLUQ écarté (tenant TBE fermé).
modified docs/connecteurs/labelink.md +5 −5
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/labelink.md
7 7 Rôle : Fiche connecteur — Produits Labelink (employeur direct, ATS bamboohr)
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -36,7 +36,7 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
36 36
37 37 ## Champs → schéma
38 38
39 −Complétude mesurée sur les **17 offres actives** de la source (base live, 2026-08-19 03:39 EDT).
39 +Complétude mesurée sur les **17 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
40 40
41 41 | Champ (`jobs.*`) | Rôle | Complétude |
42 42 |---|---|---|
@@ -77,15 +77,15 @@ Exemple réel : *Opérateur/trice de Presse - Imprimerie Soir* — Montréal ·
77 77
78 78 ## Volumétrie & complétude live
79 79
80 −*(mesuré le 2026-08-19 03:39 EDT dans `data/jobka.db`)*
80 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
81 81
82 82 - **Offres en base** : 17 (dont **17 actives**, 0 masquées comme doublons `dup_of`)
83 83 - **Salaire** : 0/17 actives (0 %)
84 84 - **GPS** : 17/17 actives (100 %)
85 85 - **Mode** : 17/17 actives (100 %)
86 86 - **Parution** : 17/17 actives (100 %)
87 −- **Dernier sync** : 2026-08-19 02:02 — trouvées 17, +0, ~17, -0
88 −- **Syncs enregistrés** (`sync_log`) : 25
87 +- **Dernier sync** : 2026-08-19 04:10 — trouvées 17, +0, ~0, -0
88 +- **Syncs enregistrés** (`sync_log`) : 26
89 89
90 90 ## Erreurs & dépannage
91 91
modified docs/connecteurs/lamour.md +5 −5
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/lamour.md
7 7 Rôle : Fiche connecteur — Lamour (employeur direct, ATS workable)
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -36,7 +36,7 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
36 36
37 37 ## Champs → schéma
38 38
39 −Complétude mesurée sur les **11 offres actives** de la source (base live, 2026-08-19 03:39 EDT).
39 +Complétude mesurée sur les **11 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
40 40
41 41 | Champ (`jobs.*`) | Rôle | Complétude |
42 42 |---|---|---|
@@ -72,15 +72,15 @@ Exemple réel : *Comptable principal(e) / Senior Accountant* — Montréal ·
72 72
73 73 ## Volumétrie & complétude live
74 74
75 −*(mesuré le 2026-08-19 03:39 EDT dans `data/jobka.db`)*
75 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
76 76
77 77 - **Offres en base** : 11 (dont **11 actives**, 0 masquées comme doublons `dup_of`)
78 78 - **Salaire** : 0/11 actives (0 %)
79 79 - **GPS** : 11/11 actives (100 %)
80 80 - **Mode** : 0/11 actives (0 %)
81 81 - **Parution** : 11/11 actives (100 %)
82 −- **Dernier sync** : 2026-08-19 02:02 — trouvées 11, +0, ~11, -0
83 −- **Syncs enregistrés** (`sync_log`) : 25
82 +- **Dernier sync** : 2026-08-19 04:10 — trouvées 11, +0, ~0, -0
83 +- **Syncs enregistrés** (`sync_log`) : 26
84 84
85 85 ## Erreurs & dépannage
86 86
modified docs/connecteurs/lassonde.md +42 −22
@@ -4,64 +4,83 @@ Job·Ka — Groupe KA
4 4 Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/lassonde.md
7 −Rôle : Fiche connecteur — Industries Lassonde (employeur direct, ATS adp)
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
7 +Rôle : Fiche connecteur — Industries Lassonde (employeur direct, ATS custom)
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
12 12
13 13 # Industries Lassonde (`lassonde`)
14 14
15 −**Employeur direct** · Plateforme ATS : [`adp`](ats-adp.md) · Statut registre : actif · Connecteur : `jobka/connectors/lassonde.py`
15 +**Employeur direct** · Plateforme ATS : [`custom`](ats-custom.md) · Statut registre : actif · Connecteur : `jobka/connectors/lassonde.py`
16 16
17 17 ## Description
18 18
19 19 - **Site** : [Industries Lassonde](https://www.lassonde.com)
20 −- **Page carrières** : https://workforcenow.adp.com/mascsr/default/mdf/recruitment/recruitment.html?cid=f96ce972-7721-4c7b-99ea-9a970ddc824a&ccId=19000101_000001&lang=fr_CA
20 +- **Page carrières** : https://www.lassonde.com/fr/emplois/
21 21 - **Secteurs** : Agroalimentaire, Fabrication
22 22 - **Région** : Rougemont, Montréal
23 23 - Offres marquées **« Offre directe »** dans l'app (badge) : la candidature se fait chez l'employeur, jamais via un intermédiaire.
24 24
25 25 ## Accès
26 26
27 −- **Mécanique** : voir la fiche plateforme [`ats-adp.md`](ats-adp.md) — API JSON publique du site carrières, backend `requests` direct (Scrapfly seulement si indiqué sur la fiche plateforme).
27 +- **Mécanique** : voir la fiche plateforme [`ats-custom.md`](ats-custom.md) — API JSON publique du site carrières, backend `requests` direct (Scrapfly seulement si indiqué sur la fiche plateforme).
28 28 - **Identifiants du tenant** (attributs du connecteur) :
29 29
30 30 | Attribut | Valeur |
31 31 |---|---|
32 −| `CCID` | `9200604444876_2` |
33 −| `CID` | `f96ce972-7721-4c7b-99ea-9a970ddc824a` |
34 32 | `EMPLOYER` | `Industries Lassonde` |
35 −| `LANG` | `fr_CA` |
33 +| `LIST_URL` | `https://www.lassonde.com/fr/emplois/` |
36 34 - **Throttle** : 1.0 s entre requêtes.
37 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).
38 36
39 37 ## Champs → schéma
40 38
41 −*Aucune offre active en base pour cette source.*
39 +Complétude mesurée sur les **31 offres actives** de la source (base live, 2026-08-19 05:40 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é) | 0 % |
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 / … | 0 % |
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é, …) | 52 % |
60 +| `language` — Langue | fr / en / bilingue (source ou heuristique) | 0 % |
61 +| `company_logo` — Logo employeur | URL du logo si exposé par la source | 0 % |
62 +| `apply_url` — Candidature | lien de candidature directe | 0 % |
63 +| `gps` — GPS | lat/lng (géocodage sans invention) | 0 % |
64 +
65 +Exemple réel : *Analyste en prix de revient* — Rougemont · ∅ · parue le 2026-08-17.
42 66
43 67 ## Fréquence & budgets
44 68
45 69 - **Cadence** : resynchronisation **horaire** (PM2 `job-ka-sync` = `run.py watch 60`), suivie du géocodage en lot puis de la déduplication inter-sources.
46 70 - **Throttle** : 1.0 s minimum entre deux requêtes vers la source (`request_delay`).
47 −- **Budgets / plafonds (variables d'environnement)** :
48 −
49 −| Variable | Défaut |
50 −|---|---|
51 −| `JOBKA_ADP_DETAIL_LIMIT` | `80` |
52 71 - 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.
53 72
54 73 ## Volumétrie & complétude live
55 74
56 −*(mesuré le 2026-08-19 03:39 EDT dans `data/jobka.db`)*
75 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
57 76
58 −- **Offres en base** : 0 (dont **0 actives**, 0 masquées comme doublons `dup_of`)
59 −- **Salaire** : 0/0 actives (—)
60 −- **GPS** : 0/0 actives (—)
61 −- **Mode** : 0/0 actives (—)
62 −- **Parution** : 0/0 actives (—)
63 −- **Dernier sync** : 2026-08-19 02:02 — trouvées 0, +0, ~0, -0
64 −- **Syncs enregistrés** (`sync_log`) : 15
77 +- **Offres en base** : 31 (dont **31 actives**, 0 masquées comme doublons `dup_of`)
78 +- **Salaire** : 0/31 actives (0 %)
79 +- **GPS** : 0/31 actives (0 %)
80 +- **Mode** : 0/31 actives (0 %)
81 +- **Parution** : 31/31 actives (100 %)
82 +- **Dernier sync** : 2026-08-19 04:49 — trouvées 31, +31, ~0, -0
83 +- **Syncs enregistrés** (`sync_log`) : 17
65 84
66 85 ## Erreurs & dépannage
67 86
@@ -86,4 +105,5 @@ Aucune erreur dans `sync_log` pour cette source.
86 105
87 106 Commits touchant `jobka/connectors/lassonde.py` :
88 107
108 +- `86b0d0b` 2026-08-19 Famille Workland réécrite sur l'API JSON publique du frontal Atlas (jobs-prod published-external + default-profiles) : descriptions complètes fr/en, lieux géocodés, dates, mode de travail — 2 requêtes par cycle pour TOUT le réseau. Nouveau connecteur réseau atlas_workland (~80 employeurs QC : CSS scolaires, cégeps, CIUSSS Ouest-de-l'Île, Santé Québec Côte-Nord, ICM, STQ, UQTR, INRS… ; 1 238 offres QC). Connecteur cssdm retiré (couvert par le réseau), fixture remplacée par atlas_workland (sous-ensemble rejouable). Corrige la limite « workland description 0 % ».
89 109 - `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
modified docs/connecteurs/levio.md +5 −5
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/levio.md
7 7 Rôle : Fiche connecteur — Levio (employeur direct, ATS greenhouse)
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -36,7 +36,7 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
36 36
37 37 ## Champs → schéma
38 38
39 −Complétude mesurée sur les **42 offres actives** de la source (base live, 2026-08-19 03:39 EDT).
39 +Complétude mesurée sur les **42 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
40 40
41 41 | Champ (`jobs.*`) | Rôle | Complétude |
42 42 |---|---|---|
@@ -72,15 +72,15 @@ Exemple réel : *Conseiller.ère en analyse fonctionnelle IA* — Montréal ·
72 72
73 73 ## Volumétrie & complétude live
74 74
75 −*(mesuré le 2026-08-19 03:39 EDT dans `data/jobka.db`)*
75 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
76 76
77 77 - **Offres en base** : 42 (dont **42 actives**, 0 masquées comme doublons `dup_of`)
78 78 - **Salaire** : 0/42 actives (0 %)
79 79 - **GPS** : 42/42 actives (100 %)
80 80 - **Mode** : 0/42 actives (0 %)
81 81 - **Parution** : 42/42 actives (100 %)
82 −- **Dernier sync** : 2026-08-19 02:02 — trouvées 42, +0, ~42, -0
83 −- **Syncs enregistrés** (`sync_log`) : 13
82 +- **Dernier sync** : 2026-08-19 04:10 — trouvées 42, +0, ~0, -0
83 +- **Syncs enregistrés** (`sync_log`) : 14
84 84
85 85 ## Erreurs & dépannage
86 86
modified docs/connecteurs/lg2.md +5 −5
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/lg2.md
7 7 Rôle : Fiche connecteur — LG2 (employeur direct, ATS recruitee)
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -36,7 +36,7 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
36 36
37 37 ## Champs → schéma
38 38
39 −Complétude mesurée sur les **14 offres actives** de la source (base live, 2026-08-19 03:39 EDT).
39 +Complétude mesurée sur les **14 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
40 40
41 41 | Champ (`jobs.*`) | Rôle | Complétude |
42 42 |---|---|---|
@@ -72,15 +72,15 @@ Exemple réel : *Directeur·trice principal·e, Culture et talents* — Montréa
72 72
73 73 ## Volumétrie & complétude live
74 74
75 −*(mesuré le 2026-08-19 03:39 EDT dans `data/jobka.db`)*
75 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
76 76
77 77 - **Offres en base** : 14 (dont **14 actives**, 0 masquées comme doublons `dup_of`)
78 78 - **Salaire** : 1/14 actives (7 %)
79 79 - **GPS** : 14/14 actives (100 %)
80 80 - **Mode** : 14/14 actives (100 %)
81 81 - **Parution** : 14/14 actives (100 %)
82 −- **Dernier sync** : 2026-08-19 02:02 — trouvées 14, +0, ~14, -0
83 −- **Syncs enregistrés** (`sync_log`) : 25
82 +- **Dernier sync** : 2026-08-19 04:10 — trouvées 14, +0, ~0, -0
83 +- **Syncs enregistrés** (`sync_log`) : 26
84 84
85 85 ## Erreurs & dépannage
86 86
modified docs/connecteurs/lidd.md +5 −5
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/lidd.md
7 7 Rôle : Fiche connecteur — LIDD Consultants (employeur direct, ATS workable)
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -36,7 +36,7 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
36 36
37 37 ## Champs → schéma
38 38
39 −Complétude mesurée sur les **8 offres actives** de la source (base live, 2026-08-19 03:39 EDT).
39 +Complétude mesurée sur les **8 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
40 40
41 41 | Champ (`jobs.*`) | Rôle | Complétude |
42 42 |---|---|---|
@@ -72,15 +72,15 @@ Exemple réel : *Consultant WMS / WMS Consultant* — Montréal · ∅ · parue
72 72
73 73 ## Volumétrie & complétude live
74 74
75 −*(mesuré le 2026-08-19 03:39 EDT dans `data/jobka.db`)*
75 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
76 76
77 77 - **Offres en base** : 8 (dont **8 actives**, 0 masquées comme doublons `dup_of`)
78 78 - **Salaire** : 0/8 actives (0 %)
79 79 - **GPS** : 8/8 actives (100 %)
80 80 - **Mode** : 0/8 actives (0 %)
81 81 - **Parution** : 8/8 actives (100 %)
82 −- **Dernier sync** : 2026-08-19 02:02 — trouvées 8, +0, ~8, -0
83 −- **Syncs enregistrés** (`sync_log`) : 25
82 +- **Dernier sync** : 2026-08-19 04:10 — trouvées 8, +0, ~0, -0
83 +- **Syncs enregistrés** (`sync_log`) : 26
84 84
85 85 ## Erreurs & dépannage
86 86
modified docs/connecteurs/lightspeedhq.md +5 −5
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/lightspeedhq.md
7 7 Rôle : Fiche connecteur — Lightspeed Commerce (employeur direct, ATS ashby)
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -36,7 +36,7 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
36 36
37 37 ## Champs → schéma
38 38
39 −Complétude mesurée sur les **56 offres actives** de la source (base live, 2026-08-19 03:39 EDT).
39 +Complétude mesurée sur les **56 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
40 40
41 41 | Champ (`jobs.*`) | Rôle | Complétude |
42 42 |---|---|---|
@@ -72,15 +72,15 @@ Exemple réel : *Principal Product Designer, Retail* — Montréal · $200K - $2
72 72
73 73 ## Volumétrie & complétude live
74 74
75 −*(mesuré le 2026-08-19 03:39 EDT dans `data/jobka.db`)*
75 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
76 76
77 77 - **Offres en base** : 58 (dont **56 actives**, 0 masquées comme doublons `dup_of`)
78 78 - **Salaire** : 4/56 actives (7 %)
79 79 - **GPS** : 55/56 actives (98 %)
80 80 - **Mode** : 56/56 actives (100 %)
81 81 - **Parution** : 56/56 actives (100 %)
82 −- **Dernier sync** : 2026-08-19 02:02 — trouvées 56, +0, ~56, -0
83 −- **Syncs enregistrés** (`sync_log`) : 13
82 +- **Dernier sync** : 2026-08-19 04:10 — trouvées 56, +0, ~0, -0
83 +- **Syncs enregistrés** (`sync_log`) : 14
84 84
85 85 ## Erreurs & dépannage
86 86
modified docs/connecteurs/logisco.md +5 −5
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/logisco.md
7 7 Rôle : Fiche connecteur — Logisco (employeur direct, ATS bamboohr)
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -36,7 +36,7 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
36 36
37 37 ## Champs → schéma
38 38
39 −Complétude mesurée sur les **12 offres actives** de la source (base live, 2026-08-19 03:39 EDT).
39 +Complétude mesurée sur les **12 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
40 40
41 41 | Champ (`jobs.*`) | Rôle | Complétude |
42 42 |---|---|---|
@@ -77,15 +77,15 @@ Exemple réel : *Réceptionniste d'hôtel - temps partiel* — Québec · Salair
77 77
78 78 ## Volumétrie & complétude live
79 79
80 −*(mesuré le 2026-08-19 03:39 EDT dans `data/jobka.db`)*
80 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
81 81
82 82 - **Offres en base** : 13 (dont **12 actives**, 0 masquées comme doublons `dup_of`)
83 83 - **Salaire** : 5/12 actives (42 %)
84 84 - **GPS** : 12/12 actives (100 %)
85 85 - **Mode** : 12/12 actives (100 %)
86 86 - **Parution** : 12/12 actives (100 %)
87 −- **Dernier sync** : 2026-08-19 02:02 — trouvées 12, +0, ~12, -0
88 −- **Syncs enregistrés** (`sync_log`) : 13
87 +- **Dernier sync** : 2026-08-19 04:10 — trouvées 12, +0, ~0, -0
88 +- **Syncs enregistrés** (`sync_log`) : 14
89 89
90 90 ## Erreurs & dépannage
91 91
modified docs/connecteurs/lush.md +5 −5
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/lush.md
7 7 Rôle : Fiche connecteur — Lush Cosmétiques (employeur direct, ATS greenhouse)
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -36,7 +36,7 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
36 36
37 37 ## Champs → schéma
38 38
39 −Complétude mesurée sur les **5 offres actives** de la source (base live, 2026-08-19 03:39 EDT).
39 +Complétude mesurée sur les **5 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
40 40
41 41 | Champ (`jobs.*`) | Rôle | Complétude |
42 42 |---|---|---|
@@ -72,15 +72,15 @@ Exemple réel : *Assistant Gerant - Galeries d'Anjou* — Montréal · Salaire:
72 72
73 73 ## Volumétrie & complétude live
74 74
75 −*(mesuré le 2026-08-19 03:39 EDT dans `data/jobka.db`)*
75 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
76 76
77 77 - **Offres en base** : 5 (dont **5 actives**, 0 masquées comme doublons `dup_of`)
78 78 - **Salaire** : 5/5 actives (100 %)
79 79 - **GPS** : 5/5 actives (100 %)
80 80 - **Mode** : 0/5 actives (0 %)
81 81 - **Parution** : 5/5 actives (100 %)
82 −- **Dernier sync** : 2026-08-19 02:02 — trouvées 5, +0, ~5, -0
83 −- **Syncs enregistrés** (`sync_log`) : 25
82 +- **Dernier sync** : 2026-08-19 04:10 — trouvées 5, +0, ~0, -0
83 +- **Syncs enregistrés** (`sync_log`) : 26
84 84
85 85 ## Erreurs & dépannage
86 86
added docs/connecteurs/mackenzie.md +113 −0
@@ -0,0 +1,113 @@
1 +<!--
2 +=============================================================================
3 +Job·Ka — Groupe KA
4 +Auteur : Simon-Pierre Boucher
5 +Contact : contact@spboucher.ai
6 +Fichier : docs/connecteurs/mackenzie.md
7 +Rôle : Fiche connecteur — Placements Mackenzie (Power/IGM) (employeur direct, ATS icims)
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 + relancer le script pour régénérer.
10 +=============================================================================
11 +-->
12 +
13 +# Placements Mackenzie (Power/IGM) (`mackenzie`)
14 +
15 +**Employeur direct** · Plateforme ATS : [`icims`](ats-icims.md) · Statut registre : actif · Connecteur : `jobka/connectors/mackenzie.py`
16 +
17 +## Description
18 +
19 +- **Site** : [Placements Mackenzie (Power/IGM)](https://www.placementsmackenzie.com)
20 +- **Page carrières** : https://careersfr-mackenzieinvestments.icims.com/jobs/search?ss=1
21 +- **Secteurs** : Finance
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-icims.md`](ats-icims.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` | `Placements Mackenzie` |
33 +| `SUB` | `careersfr-mackenzieinvestments` |
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 **3 offres actives** de la source (base live, 2026-08-19 05:40 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 | 100 % |
50 +| `postal_code` — Code postal | code postal si publié | 100 % |
51 +| `work_mode` — Mode | presentiel / hybride / teletravail | 0 % |
52 +| `employment_type` — Type | temps_plein / temps_partiel / … | 33 % |
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 | 100 % |
59 +| `category` — Catégorie | taxonomie interne (TI, Santé, …) | 100 % |
60 +| `language` — Langue | fr / en / bilingue (source ou heuristique) | 100 % |
61 +| `company_logo` — Logo employeur | URL du logo si exposé par la source | 0 % |
62 +| `apply_url` — Candidature | lien de candidature directe | 0 % |
63 +| `gps` — GPS | lat/lng (géocodage sans invention) | 0 % |
64 +
65 +Exemple réel : *UNAVAILABLE* — Montréal · La fourchette de salaire de base annuelle prévue (au prorata pour la durée du poste) pour … · parue le 2026-08-17.
66 +
67 +## Fréquence & budgets
68 +
69 +- **Cadence** : resynchronisation **horaire** (PM2 `job-ka-sync` = `run.py watch 60`), suivie du géocodage en lot puis de la déduplication inter-sources.
70 +- **Throttle** : 1.0 s minimum entre deux requêtes vers la source (`request_delay`).
71 +- **Budgets / plafonds (variables d'environnement)** :
72 +
73 +| Variable | Défaut |
74 +|---|---|
75 +| `JOBKA_ICIMS_DETAIL_LIMIT` | `150` |
76 +- 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.
77 +
78 +## Volumétrie & complétude live
79 +
80 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
81 +
82 +- **Offres en base** : 3 (dont **3 actives**, 0 masquées comme doublons `dup_of`)
83 +- **Salaire** : 3/3 actives (100 %)
84 +- **GPS** : 0/3 actives (0 %)
85 +- **Mode** : 0/3 actives (0 %)
86 +- **Parution** : 3/3 actives (100 %)
87 +- **Dernier sync** : 2026-08-19 04:49 — trouvées 3, +3, ~0, -0
88 +- **Syncs enregistrés** (`sync_log`) : 1
89 +
90 +## Erreurs & dépannage
91 +
92 +Aucune erreur dans `sync_log` pour cette source.
93 +
94 +- Rejouer un sync isolé : `.venv/bin/python run.py sync mackenzie` puis inspecter `sync_log` : `sqlite3 data/jobka.db "SELECT * FROM sync_log WHERE source='mackenzie' ORDER BY ts DESC LIMIT 5;"`
95 +- 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`.
96 +
97 +## Licence / conformité
98 +
99 +**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 Placements Mackenzie (Power/IGM) » 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.
100 +
101 +## Historique
102 +
103 +**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 :
104 +- `fd4bfc8` qualité lieux : rejet des villes hors Québec, bâtiments McGill → Montréal ;
105 +- `5a66f48` +59 employeurs (sondage massif d'ATS + détection de pages carrières) ;
106 +- `4917d57` 8 nouveaux ATS (Taleo, Njoyn, UltiPro, iCIMS, SuccessFactors, ADP WFN, Digital Recruiters, Workland) + 23 employeurs publics/parapublics ;
107 +- `f6e7571` portails Guichet-Emplois, Jobillico, Espresso-Jobs — l'offre directe gagne toujours la canonique (dédup) ;
108 +- `744cbfc` badge « Offre directe », stats directes/portails, dépôt direct employeurs ;
109 +- `1604ff9` reprise sur coupure WAF Guichet-Emplois (retry + acquis partiel).
110 +
111 +Commits touchant `jobka/connectors/mackenzie.py` :
112 +
113 +- `0298197` 2026-08-19 Vague A (detected-other-ats) — nouveaux employeurs sur familles existantes : Hydro-Québec (SuccessFactors CSB emploi.hydroquebec.com, 66 offres) ; Deloitte Canada (CSB careers.deloitte.ca, 105 offres QC — remplace la détection Taleo périmée) ; CGI (Njoyn corporatif via Scrapfly, babillard mondial de ~2 900 postes filtré Québec, budgets frugaux) ; Fruit d'Or (12) et Nortera (24 QC) sur UKG Pro recruiting.ultipro.ca ; Placements Mackenzie/groupe Power (iCIMS FR, 3 QC) ; Cultures Gen V (6), Bento Sushi (9 QC), Osgoode Properties (1) sur ADP WFN. Retrait ttcglobal (plus d'offre QC : 2 offres Dallas/Londres). Écartés avec raisons (docs/CONFORMITE.md) : Canada Vie, Groupe Dynamite, Jack Astor's/SIR, Méchant Bœuf, Valero (0 offre), Résolu (fusion Domtar), Power Corp directe.
modified docs/connecteurs/maintainx.md +5 −5
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/maintainx.md
7 7 Rôle : Fiche connecteur — MaintainX (employeur direct, ATS ashby)
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -36,7 +36,7 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
36 36
37 37 ## Champs → schéma
38 38
39 −Complétude mesurée sur les **78 offres actives** de la source (base live, 2026-08-19 03:39 EDT).
39 +Complétude mesurée sur les **78 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
40 40
41 41 | Champ (`jobs.*`) | Rôle | Complétude |
42 42 |---|---|---|
@@ -72,15 +72,15 @@ Exemple réel : *Product Design Manager* — Montréal · We raised $150M in Ser
72 72
73 73 ## Volumétrie & complétude live
74 74
75 −*(mesuré le 2026-08-19 03:39 EDT dans `data/jobka.db`)*
75 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
76 76
77 77 - **Offres en base** : 79 (dont **78 actives**, 0 masquées comme doublons `dup_of`)
78 78 - **Salaire** : 5/78 actives (6 %)
79 79 - **GPS** : 65/78 actives (83 %)
80 80 - **Mode** : 78/78 actives (100 %)
81 81 - **Parution** : 78/78 actives (100 %)
82 −- **Dernier sync** : 2026-08-19 02:02 — trouvées 78, +0, ~78, -0
83 −- **Syncs enregistrés** (`sync_log`) : 25
82 +- **Dernier sync** : 2026-08-19 04:10 — trouvées 78, +0, ~0, -0
83 +- **Syncs enregistrés** (`sync_log`) : 26
84 84
85 85 ## Erreurs & dépannage
86 86
modified docs/connecteurs/manulife.md +6 −6
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/manulife.md
7 7 Rôle : Fiche connecteur — Manuvie (employeur direct, ATS workday)
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -38,7 +38,7 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
38 38
39 39 ## Champs → schéma
40 40
41 −Complétude mesurée sur les **51 offres actives** de la source (base live, 2026-08-19 03:39 EDT).
41 +Complétude mesurée sur les **51 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
42 42
43 43 | Champ (`jobs.*`) | Rôle | Complétude |
44 44 |---|---|---|
@@ -64,7 +64,7 @@ Complétude mesurée sur les **51 offres actives** de la source (base live, 2026
64 64 | `apply_url` — Candidature | lien de candidature directe | 100 % |
65 65 | `gps` — GPS | lat/lng (géocodage sans invention) | 75 % |
66 66
67 −Exemple réel : *Bilingual Client Service Specialist – AdminAdvantage* — Montréal · $56,175.00 CAD - $93,625.00 CAD · parue le 2026-08-19.
67 +Exemple réel : *Bilingual Client Service Specialist – AdminAdvantage* — Montréal · $56,175.00 CAD - $93,625.00 CAD · parue le 2026-08-18.
68 68
69 69 ## Fréquence & budgets
70 70
@@ -79,15 +79,15 @@ Exemple réel : *Bilingual Client Service Specialist – AdminAdvantage* — Mon
79 79
80 80 ## Volumétrie & complétude live
81 81
82 −*(mesuré le 2026-08-19 03:39 EDT dans `data/jobka.db`)*
82 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
83 83
84 84 - **Offres en base** : 57 (dont **51 actives**, 0 masquées comme doublons `dup_of`)
85 85 - **Salaire** : 46/51 actives (90 %)
86 86 - **GPS** : 38/51 actives (75 %)
87 87 - **Mode** : 15/51 actives (29 %)
88 88 - **Parution** : 51/51 actives (100 %)
89 −- **Dernier sync** : 2026-08-19 02:04 — trouvées 51, +0, ~51, -2
90 −- **Syncs enregistrés** (`sync_log`) : 25
89 +- **Dernier sync** : 2026-08-19 04:11 — trouvées 51, +0, ~48, -0
90 +- **Syncs enregistrés** (`sync_log`) : 26
91 91
92 92 ## Erreurs & dépannage
93 93
modified docs/connecteurs/mattelinc.md +5 −5
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/mattelinc.md
7 7 Rôle : Fiche connecteur — Mattel (Mega Bloks) (employeur direct, ATS smartrecruiters)
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -36,7 +36,7 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
36 36
37 37 ## Champs → schéma
38 38
39 −Complétude mesurée sur les **6 offres actives** de la source (base live, 2026-08-19 03:39 EDT).
39 +Complétude mesurée sur les **6 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
40 40
41 41 | Champ (`jobs.*`) | Rôle | Complétude |
42 42 |---|---|---|
@@ -77,15 +77,15 @@ Exemple réel : *Gestionnaire, ingénierie de la qualité - Mattel Brick Shop*
77 77
78 78 ## Volumétrie & complétude live
79 79
80 −*(mesuré le 2026-08-19 03:39 EDT dans `data/jobka.db`)*
80 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
81 81
82 82 - **Offres en base** : 6 (dont **6 actives**, 0 masquées comme doublons `dup_of`)
83 83 - **Salaire** : 0/6 actives (0 %)
84 84 - **GPS** : 6/6 actives (100 %)
85 85 - **Mode** : 1/6 actives (17 %)
86 86 - **Parution** : 6/6 actives (100 %)
87 −- **Dernier sync** : 2026-08-19 02:04 — trouvées 6, +0, ~6, -0
88 −- **Syncs enregistrés** (`sync_log`) : 25
87 +- **Dernier sync** : 2026-08-19 04:11 — trouvées 6, +0, ~0, -0
88 +- **Syncs enregistrés** (`sync_log`) : 26
89 89
90 90 ## Erreurs & dépannage
91 91
modified docs/connecteurs/mccarthy_tetrault.md +5 −5
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/mccarthy_tetrault.md
7 7 Rôle : Fiche connecteur — McCarthy Tétrault (employeur direct, ATS icims)
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -36,7 +36,7 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
36 36
37 37 ## Champs → schéma
38 38
39 −Complétude mesurée sur les **22 offres actives** de la source (base live, 2026-08-19 03:39 EDT).
39 +Complétude mesurée sur les **22 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
40 40
41 41 | Champ (`jobs.*`) | Rôle | Complétude |
42 42 |---|---|---|
@@ -77,15 +77,15 @@ Exemple réel : *Senior Paralegal, Business Law* — Québec · ∅ · parue le
77 77
78 78 ## Volumétrie & complétude live
79 79
80 −*(mesuré le 2026-08-19 03:39 EDT dans `data/jobka.db`)*
80 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
81 81
82 82 - **Offres en base** : 22 (dont **22 actives**, 0 masquées comme doublons `dup_of`)
83 83 - **Salaire** : 0/22 actives (0 %)
84 84 - **GPS** : 22/22 actives (100 %)
85 85 - **Mode** : 2/22 actives (9 %)
86 86 - **Parution** : 22/22 actives (100 %)
87 −- **Dernier sync** : 2026-08-19 02:05 — trouvées 22, +0, ~22, -0
88 −- **Syncs enregistrés** (`sync_log`) : 13
87 +- **Dernier sync** : 2026-08-19 04:11 — trouvées 22, +0, ~0, -0
88 +- **Syncs enregistrés** (`sync_log`) : 14
89 89
90 90 ## Erreurs & dépannage
91 91
modified docs/connecteurs/mcgill.md +6 −6
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/mcgill.md
7 7 Rôle : Fiche connecteur — Université McGill (employeur direct, ATS workday)
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -38,7 +38,7 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
38 38
39 39 ## Champs → schéma
40 40
41 −Complétude mesurée sur les **193 offres actives** de la source (base live, 2026-08-19 03:39 EDT).
41 +Complétude mesurée sur les **193 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
42 42
43 43 | Champ (`jobs.*`) | Rôle | Complétude |
44 44 |---|---|---|
@@ -64,7 +64,7 @@ Complétude mesurée sur les **193 offres actives** de la source (base live, 202
64 64 | `apply_url` — Candidature | lien de candidature directe | 100 % |
65 65 | `gps` — GPS | lat/lng (géocodage sans invention) | 100 % |
66 66
67 −Exemple réel : *Technical Specialist - Assistant Coach Rowing* — Montréal · (AMUSE C) $17.17 · parue le 2026-08-19.
67 +Exemple réel : *Technical Specialist - Assistant Coach Rowing* — Montréal · (AMUSE C) $17.17 · parue le 2026-08-18.
68 68
69 69 ## Fréquence & budgets
70 70
@@ -79,15 +79,15 @@ Exemple réel : *Technical Specialist - Assistant Coach Rowing* — Montréal ·
79 79
80 80 ## Volumétrie & complétude live
81 81
82 −*(mesuré le 2026-08-19 03:39 EDT dans `data/jobka.db`)*
82 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
83 83
84 84 - **Offres en base** : 211 (dont **193 actives**, 0 masquées comme doublons `dup_of`)
85 85 - **Salaire** : 136/193 actives (70 %)
86 86 - **GPS** : 193/193 actives (100 %)
87 87 - **Mode** : 0/193 actives (0 %)
88 88 - **Parution** : 193/193 actives (100 %)
89 −- **Dernier sync** : 2026-08-19 02:09 — trouvées 193, +0, ~193, -9
90 −- **Syncs enregistrés** (`sync_log`) : 25
89 +- **Dernier sync** : 2026-08-19 04:14 — trouvées 193, +0, ~165, -0
90 +- **Syncs enregistrés** (`sync_log`) : 26
91 91
92 92 ## Erreurs & dépannage
93 93
modified docs/connecteurs/mckesson.md +6 −6
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/mckesson.md
7 7 Rôle : Fiche connecteur — McKesson Canada (employeur direct, ATS workday)
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -38,7 +38,7 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
38 38
39 39 ## Champs → schéma
40 40
41 −Complétude mesurée sur les **43 offres actives** de la source (base live, 2026-08-19 03:39 EDT).
41 +Complétude mesurée sur les **43 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
42 42
43 43 | Champ (`jobs.*`) | Rôle | Complétude |
44 44 |---|---|---|
@@ -64,7 +64,7 @@ Complétude mesurée sur les **43 offres actives** de la source (base live, 2026
64 64 | `apply_url` — Candidature | lien de candidature directe | 100 % |
65 65 | `gps` — GPS | lat/lng (géocodage sans invention) | 86 % |
66 66
67 −Exemple réel : *Employee Care Knowledge & Content Specialist* — Montréal · $77,600 - $129,300 · parue le 2026-08-18.
67 +Exemple réel : *Employee Care Knowledge & Content Specialist* — Montréal · $77,600 - $129,300 · parue le 2026-08-17.
68 68
69 69 ## Fréquence & budgets
70 70
@@ -79,15 +79,15 @@ Exemple réel : *Employee Care Knowledge & Content Specialist* — Montréal ·
79 79
80 80 ## Volumétrie & complétude live
81 81
82 −*(mesuré le 2026-08-19 03:39 EDT dans `data/jobka.db`)*
82 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
83 83
84 84 - **Offres en base** : 43 (dont **43 actives**, 0 masquées comme doublons `dup_of`)
85 85 - **Salaire** : 36/43 actives (84 %)
86 86 - **GPS** : 37/43 actives (86 %)
87 87 - **Mode** : 40/43 actives (93 %)
88 88 - **Parution** : 43/43 actives (100 %)
89 −- **Dernier sync** : 2026-08-19 02:10 — trouvées 43, +0, ~43, -0
90 −- **Syncs enregistrés** (`sync_log`) : 24
89 +- **Dernier sync** : 2026-08-19 04:15 — trouvées 43, +0, ~31, -0
90 +- **Syncs enregistrés** (`sync_log`) : 25
91 91
92 92 ## Erreurs & dépannage
93 93
modified docs/connecteurs/medfar.md +5 −5
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/medfar.md
7 7 Rôle : Fiche connecteur — MEDFAR Solutions Cliniques (employeur direct, ATS smartrecruiters)
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -36,7 +36,7 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
36 36
37 37 ## Champs → schéma
38 38
39 −Complétude mesurée sur les **23 offres actives** de la source (base live, 2026-08-19 03:39 EDT).
39 +Complétude mesurée sur les **23 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
40 40
41 41 | Champ (`jobs.*`) | Rôle | Complétude |
42 42 |---|---|---|
@@ -77,15 +77,15 @@ Exemple réel : *Spécialiste soutien à la facturation* — Montréal · ∅ ·
77 77
78 78 ## Volumétrie & complétude live
79 79
80 −*(mesuré le 2026-08-19 03:39 EDT dans `data/jobka.db`)*
80 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
81 81
82 82 - **Offres en base** : 23 (dont **23 actives**, 0 masquées comme doublons `dup_of`)
83 83 - **Salaire** : 0/23 actives (0 %)
84 84 - **GPS** : 23/23 actives (100 %)
85 85 - **Mode** : 22/23 actives (96 %)
86 86 - **Parution** : 23/23 actives (100 %)
87 −- **Dernier sync** : 2026-08-19 02:10 — trouvées 23, +0, ~23, -0
88 −- **Syncs enregistrés** (`sync_log`) : 25
87 +- **Dernier sync** : 2026-08-19 04:15 — trouvées 23, +0, ~0, -0
88 +- **Syncs enregistrés** (`sync_log`) : 26
89 89
90 90 ## Erreurs & dépannage
91 91
modified docs/connecteurs/medialo.md +5 −5
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/medialo.md
7 7 Rôle : Fiche connecteur — Médialo (employeur direct, ATS recruitee)
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -36,7 +36,7 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
36 36
37 37 ## Champs → schéma
38 38
39 −Complétude mesurée sur les **5 offres actives** de la source (base live, 2026-08-19 03:39 EDT).
39 +Complétude mesurée sur les **5 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
40 40
41 41 | Champ (`jobs.*`) | Rôle | Complétude |
42 42 |---|---|---|
@@ -72,15 +72,15 @@ Exemple réel : *Contrôleur-Contrôleuse* — Saint-Sauveur-des-Monts · ∅ ·
72 72
73 73 ## Volumétrie & complétude live
74 74
75 −*(mesuré le 2026-08-19 03:39 EDT dans `data/jobka.db`)*
75 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
76 76
77 77 - **Offres en base** : 5 (dont **5 actives**, 0 masquées comme doublons `dup_of`)
78 78 - **Salaire** : 0/5 actives (0 %)
79 79 - **GPS** : 4/5 actives (80 %)
80 80 - **Mode** : 5/5 actives (100 %)
81 81 - **Parution** : 5/5 actives (100 %)
82 −- **Dernier sync** : 2026-08-19 02:10 — trouvées 5, +0, ~5, -0
83 −- **Syncs enregistrés** (`sync_log`) : 25
82 +- **Dernier sync** : 2026-08-19 04:15 — trouvées 5, +0, ~0, -0
83 +- **Syncs enregistrés** (`sync_log`) : 26
84 84
85 85 ## Erreurs & dépannage
86 86
modified docs/connecteurs/messer_canada.md +6 −5
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/messer_canada.md
7 7 Rôle : Fiche connecteur — Messer Canada (employeur direct, ATS ultipro)
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -31,13 +31,14 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
31 31 |---|---|
32 32 | `BOARD` | `dbd63926-d756-486f-a254-b2a6ede1d26e` |
33 33 | `EMPLOYER` | `Messer Canada` |
34 +| `HOST` | `recruiting.ultipro.com` |
34 35 | `ORG` | `MES1005MESR` |
35 36 - **Throttle** : 0.8 s entre requêtes.
36 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).
37 38
38 39 ## Champs → schéma
39 40
40 −Complétude mesurée sur les **22 offres actives** de la source (base live, 2026-08-19 03:39 EDT).
41 +Complétude mesurée sur les **22 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
41 42
42 43 | Champ (`jobs.*`) | Rôle | Complétude |
43 44 |---|---|---|
@@ -78,15 +79,15 @@ Exemple réel : *Chauffeur-Livreur (Prime À La Signature De $3000)* — Montré
78 79
79 80 ## Volumétrie & complétude live
80 81
81 −*(mesuré le 2026-08-19 03:39 EDT dans `data/jobka.db`)*
82 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
82 83
83 84 - **Offres en base** : 22 (dont **22 actives**, 0 masquées comme doublons `dup_of`)
84 85 - **Salaire** : 20/22 actives (91 %)
85 86 - **GPS** : 22/22 actives (100 %)
86 87 - **Mode** : 0/22 actives (0 %)
87 88 - **Parution** : 22/22 actives (100 %)
88 −- **Dernier sync** : 2026-08-19 02:10 — trouvées 22, +0, ~22, -0
89 −- **Syncs enregistrés** (`sync_log`) : 14
89 +- **Dernier sync** : 2026-08-19 04:15 — trouvées 22, +0, ~0, -0
90 +- **Syncs enregistrés** (`sync_log`) : 15
90 91
91 92 ## Erreurs & dépannage
92 93
modified docs/connecteurs/microhabitat.md +5 −5
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/microhabitat.md
7 7 Rôle : Fiche connecteur — MicroHabitat (employeur direct, ATS breezy)
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -36,7 +36,7 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
36 36
37 37 ## Champs → schéma
38 38
39 −Complétude mesurée sur les **13 offres actives** de la source (base live, 2026-08-19 03:39 EDT).
39 +Complétude mesurée sur les **13 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
40 40
41 41 | Champ (`jobs.*`) | Rôle | Complétude |
42 42 |---|---|---|
@@ -72,15 +72,15 @@ Exemple réel : *Coordonnateur·trice en agriculture urbaine - Urban Farming Coo
72 72
73 73 ## Volumétrie & complétude live
74 74
75 −*(mesuré le 2026-08-19 03:39 EDT dans `data/jobka.db`)*
75 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
76 76
77 77 - **Offres en base** : 13 (dont **13 actives**, 0 masquées comme doublons `dup_of`)
78 78 - **Salaire** : 13/13 actives (100 %)
79 79 - **GPS** : 13/13 actives (100 %)
80 80 - **Mode** : 5/13 actives (38 %)
81 81 - **Parution** : 13/13 actives (100 %)
82 −- **Dernier sync** : 2026-08-19 02:10 — trouvées 13, +0, ~13, -0
83 −- **Syncs enregistrés** (`sync_log`) : 25
82 +- **Dernier sync** : 2026-08-19 04:15 — trouvées 13, +0, ~0, -0
83 +- **Syncs enregistrés** (`sync_log`) : 26
84 84
85 85 ## Erreurs & dépannage
86 86
modified docs/connecteurs/mila_2.md +5 −5
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/mila_2.md
7 7 Rôle : Fiche connecteur — Mila — Institut québécois d'IA (employeur direct, ATS workable)
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -36,7 +36,7 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
36 36
37 37 ## Champs → schéma
38 38
39 −Complétude mesurée sur les **8 offres actives** de la source (base live, 2026-08-19 03:39 EDT).
39 +Complétude mesurée sur les **8 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
40 40
41 41 | Champ (`jobs.*`) | Rôle | Complétude |
42 42 |---|---|---|
@@ -72,15 +72,15 @@ Exemple réel : *Coordonnateur.trice, Gouvernance de l’IA / Coordinator, AI Go
72 72
73 73 ## Volumétrie & complétude live
74 74
75 −*(mesuré le 2026-08-19 03:39 EDT dans `data/jobka.db`)*
75 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
76 76
77 77 - **Offres en base** : 8 (dont **8 actives**, 0 masquées comme doublons `dup_of`)
78 78 - **Salaire** : 0/8 actives (0 %)
79 79 - **GPS** : 8/8 actives (100 %)
80 80 - **Mode** : 0/8 actives (0 %)
81 81 - **Parution** : 8/8 actives (100 %)
82 −- **Dernier sync** : 2026-08-19 02:10 — trouvées 8, +0, ~8, -0
83 −- **Syncs enregistrés** (`sync_log`) : 13
82 +- **Dernier sync** : 2026-08-19 04:15 — trouvées 8, +0, ~0, -0
83 +- **Syncs enregistrés** (`sync_log`) : 14
84 84
85 85 ## Erreurs & dépannage
86 86
modified docs/connecteurs/mirego.md +5 −5
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/mirego.md
7 7 Rôle : Fiche connecteur — Mirego (employeur direct, ATS lever)
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -36,7 +36,7 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
36 36
37 37 ## Champs → schéma
38 38
39 −Complétude mesurée sur les **11 offres actives** de la source (base live, 2026-08-19 03:39 EDT).
39 +Complétude mesurée sur les **11 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
40 40
41 41 | Champ (`jobs.*`) | Rôle | Complétude |
42 42 |---|---|---|
@@ -72,15 +72,15 @@ Exemple réel : *Chargé(e) de projets agiles* — Québec · ∅ · parue le 20
72 72
73 73 ## Volumétrie & complétude live
74 74
75 −*(mesuré le 2026-08-19 03:39 EDT dans `data/jobka.db`)*
75 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
76 76
77 77 - **Offres en base** : 11 (dont **11 actives**, 0 masquées comme doublons `dup_of`)
78 78 - **Salaire** : 0/11 actives (0 %)
79 79 - **GPS** : 11/11 actives (100 %)
80 80 - **Mode** : 11/11 actives (100 %)
81 81 - **Parution** : 11/11 actives (100 %)
82 −- **Dernier sync** : 2026-08-19 02:10 — trouvées 11, +0, ~11, -0
83 −- **Syncs enregistrés** (`sync_log`) : 13
82 +- **Dernier sync** : 2026-08-19 04:15 — trouvées 11, +0, ~0, -0
83 +- **Syncs enregistrés** (`sync_log`) : 14
84 84
85 85 ## Erreurs & dépannage
86 86
modified docs/connecteurs/mistplay.md +5 −5
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/mistplay.md
7 7 Rôle : Fiche connecteur — Mistplay (employeur direct, ATS lever)
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -36,7 +36,7 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
36 36
37 37 ## Champs → schéma
38 38
39 −Complétude mesurée sur les **3 offres actives** de la source (base live, 2026-08-19 03:39 EDT).
39 +Complétude mesurée sur les **3 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
40 40
41 41 | Champ (`jobs.*`) | Rôle | Complétude |
42 42 |---|---|---|
@@ -72,15 +72,15 @@ Exemple réel : *Senior Motion Designer II* — Montréal · ∅ · parue le 202
72 72
73 73 ## Volumétrie & complétude live
74 74
75 −*(mesuré le 2026-08-19 03:39 EDT dans `data/jobka.db`)*
75 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
76 76
77 77 - **Offres en base** : 3 (dont **3 actives**, 0 masquées comme doublons `dup_of`)
78 78 - **Salaire** : 1/3 actives (33 %)
79 79 - **GPS** : 3/3 actives (100 %)
80 80 - **Mode** : 3/3 actives (100 %)
81 81 - **Parution** : 3/3 actives (100 %)
82 −- **Dernier sync** : 2026-08-19 02:10 — trouvées 3, +0, ~3, -0
83 −- **Syncs enregistrés** (`sync_log`) : 25
82 +- **Dernier sync** : 2026-08-19 04:15 — trouvées 3, +0, ~0, -0
83 +- **Syncs enregistrés** (`sync_log`) : 26
84 84
85 85 ## Erreurs & dépannage
86 86
modified docs/connecteurs/mistral_ai.md +5 −5
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/mistral_ai.md
7 7 Rôle : Fiche connecteur — Mistral AI (employeur direct, ATS ashby)
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -36,7 +36,7 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
36 36
37 37 ## Champs → schéma
38 38
39 −Complétude mesurée sur les **5 offres actives** de la source (base live, 2026-08-19 03:39 EDT).
39 +Complétude mesurée sur les **5 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
40 40
41 41 | Champ (`jobs.*`) | Rôle | Complétude |
42 42 |---|---|---|
@@ -72,15 +72,15 @@ Exemple réel : *Applied AI Engineer, CyberSecurity - Montreal* — Montréal ·
72 72
73 73 ## Volumétrie & complétude live
74 74
75 −*(mesuré le 2026-08-19 03:39 EDT dans `data/jobka.db`)*
75 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
76 76
77 77 - **Offres en base** : 5 (dont **5 actives**, 0 masquées comme doublons `dup_of`)
78 78 - **Salaire** : 0/5 actives (0 %)
79 79 - **GPS** : 5/5 actives (100 %)
80 80 - **Mode** : 0/5 actives (0 %)
81 81 - **Parution** : 5/5 actives (100 %)
82 −- **Dernier sync** : 2026-08-19 02:10 — trouvées 5, +0, ~5, -0
83 −- **Syncs enregistrés** (`sync_log`) : 25
82 +- **Dernier sync** : 2026-08-19 04:15 — trouvées 5, +0, ~0, -0
83 +- **Syncs enregistrés** (`sync_log`) : 26
84 84
85 85 ## Erreurs & dépannage
86 86
modified docs/connecteurs/mitacs.md +5 −5
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/mitacs.md
7 7 Rôle : Fiche connecteur — Mitacs (employeur direct, ATS bamboohr)
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -36,7 +36,7 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
36 36
37 37 ## Champs → schéma
38 38
39 −Complétude mesurée sur les **4 offres actives** de la source (base live, 2026-08-19 03:39 EDT).
39 +Complétude mesurée sur les **4 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
40 40
41 41 | Champ (`jobs.*`) | Rôle | Complétude |
42 42 |---|---|---|
@@ -77,15 +77,15 @@ Exemple réel : *Coordinateur ou coordinatrice bilingue des RH / Bilingual HR Co
77 77
78 78 ## Volumétrie & complétude live
79 79
80 −*(mesuré le 2026-08-19 03:39 EDT dans `data/jobka.db`)*
80 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
81 81
82 82 - **Offres en base** : 4 (dont **4 actives**, 0 masquées comme doublons `dup_of`)
83 83 - **Salaire** : 4/4 actives (100 %)
84 84 - **GPS** : 4/4 actives (100 %)
85 85 - **Mode** : 4/4 actives (100 %)
86 86 - **Parution** : 4/4 actives (100 %)
87 −- **Dernier sync** : 2026-08-19 02:10 — trouvées 4, +0, ~4, -0
88 −- **Syncs enregistrés** (`sync_log`) : 25
87 +- **Dernier sync** : 2026-08-19 04:15 — trouvées 4, +0, ~0, -0
88 +- **Syncs enregistrés** (`sync_log`) : 26
89 89
90 90 ## Erreurs & dépannage
91 91
modified docs/connecteurs/mitsubishi_hc_capital.md +5 −5
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/mitsubishi_hc_capital.md
7 7 Rôle : Fiche connecteur — Mitsubishi HC Capital Canada (employeur direct, ATS adp)
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -38,7 +38,7 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
38 38
39 39 ## Champs → schéma
40 40
41 −Complétude mesurée sur les **6 offres actives** de la source (base live, 2026-08-19 03:39 EDT).
41 +Complétude mesurée sur les **6 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
42 42
43 43 | Champ (`jobs.*`) | Rôle | Complétude |
44 44 |---|---|---|
@@ -79,15 +79,15 @@ Exemple réel : *Analyste de crédit* — Trois-Rivières · ∅ · parue le 202
79 79
80 80 ## Volumétrie & complétude live
81 81
82 −*(mesuré le 2026-08-19 03:39 EDT dans `data/jobka.db`)*
82 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
83 83
84 84 - **Offres en base** : 6 (dont **6 actives**, 0 masquées comme doublons `dup_of`)
85 85 - **Salaire** : 3/6 actives (50 %)
86 86 - **GPS** : 6/6 actives (100 %)
87 87 - **Mode** : 0/6 actives (0 %)
88 88 - **Parution** : 6/6 actives (100 %)
89 −- **Dernier sync** : 2026-08-19 02:10 — trouvées 6, +0, ~6, -0
90 −- **Syncs enregistrés** (`sync_log`) : 13
89 +- **Dernier sync** : 2026-08-19 04:15 — trouvées 6, +0, ~0, -0
90 +- **Syncs enregistrés** (`sync_log`) : 14
91 91
92 92 ## Erreurs & dépannage
93 93
modified docs/connecteurs/msi_gestion.md +5 −5
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/msi_gestion.md
7 7 Rôle : Fiche connecteur — MSI Gestion immobilière (employeur direct, ATS adp)
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -38,7 +38,7 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
38 38
39 39 ## Champs → schéma
40 40
41 −Complétude mesurée sur les **6 offres actives** de la source (base live, 2026-08-19 03:39 EDT).
41 +Complétude mesurée sur les **6 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
42 42
43 43 | Champ (`jobs.*`) | Rôle | Complétude |
44 44 |---|---|---|
@@ -79,15 +79,15 @@ Exemple réel : *400-Technicien(ne) comptable* — Québec · Salaire : Selon la
79 79
80 80 ## Volumétrie & complétude live
81 81
82 −*(mesuré le 2026-08-19 03:39 EDT dans `data/jobka.db`)*
82 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
83 83
84 84 - **Offres en base** : 6 (dont **6 actives**, 0 masquées comme doublons `dup_of`)
85 85 - **Salaire** : 6/6 actives (100 %)
86 86 - **GPS** : 6/6 actives (100 %)
87 87 - **Mode** : 0/6 actives (0 %)
88 88 - **Parution** : 6/6 actives (100 %)
89 −- **Dernier sync** : 2026-08-19 02:10 — trouvées 6, +0, ~6, -0
90 −- **Syncs enregistrés** (`sync_log`) : 13
89 +- **Dernier sync** : 2026-08-19 04:15 — trouvées 6, +0, ~0, -0
90 +- **Syncs enregistrés** (`sync_log`) : 14
91 91
92 92 ## Erreurs & dépannage
93 93
modified docs/connecteurs/mthreerecruitingportal.md +5 −5
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/mthreerecruitingportal.md
7 7 Rôle : Fiche connecteur — mthree (employeur direct, ATS greenhouse)
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -36,7 +36,7 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
36 36
37 37 ## Champs → schéma
38 38
39 −Complétude mesurée sur les **22 offres actives** de la source (base live, 2026-08-19 03:39 EDT).
39 +Complétude mesurée sur les **22 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
40 40
41 41 | Champ (`jobs.*`) | Rôle | Complétude |
42 42 |---|---|---|
@@ -72,15 +72,15 @@ Exemple réel : *KYC Analyst* — Montréal · ∅ · parue le 2026-08-18.
72 72
73 73 ## Volumétrie & complétude live
74 74
75 −*(mesuré le 2026-08-19 03:39 EDT dans `data/jobka.db`)*
75 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
76 76
77 77 - **Offres en base** : 22 (dont **22 actives**, 0 masquées comme doublons `dup_of`)
78 78 - **Salaire** : 0/22 actives (0 %)
79 79 - **GPS** : 22/22 actives (100 %)
80 80 - **Mode** : 5/22 actives (23 %)
81 81 - **Parution** : 22/22 actives (100 %)
82 −- **Dernier sync** : 2026-08-19 02:10 — trouvées 22, +0, ~22, -0
83 −- **Syncs enregistrés** (`sync_log`) : 25
82 +- **Dernier sync** : 2026-08-19 04:15 — trouvées 22, +0, ~0, -0
83 +- **Syncs enregistrés** (`sync_log`) : 26
84 84
85 85 ## Erreurs & dépannage
86 86
modified docs/connecteurs/mxo.md +5 −5
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/mxo.md
7 7 Rôle : Fiche connecteur — MXO (employeur direct, ATS bamboohr)
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -36,7 +36,7 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
36 36
37 37 ## Champs → schéma
38 38
39 −Complétude mesurée sur les **6 offres actives** de la source (base live, 2026-08-19 03:39 EDT).
39 +Complétude mesurée sur les **6 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
40 40
41 41 | Champ (`jobs.*`) | Rôle | Complétude |
42 42 |---|---|---|
@@ -77,15 +77,15 @@ Exemple réel : *Développeur·e Full Stack* — Québec · 70 080 $ - 105 120$
77 77
78 78 ## Volumétrie & complétude live
79 79
80 −*(mesuré le 2026-08-19 03:39 EDT dans `data/jobka.db`)*
80 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
81 81
82 82 - **Offres en base** : 7 (dont **6 actives**, 0 masquées comme doublons `dup_of`)
83 83 - **Salaire** : 5/6 actives (83 %)
84 84 - **GPS** : 6/6 actives (100 %)
85 85 - **Mode** : 6/6 actives (100 %)
86 86 - **Parution** : 6/6 actives (100 %)
87 −- **Dernier sync** : 2026-08-19 02:10 — trouvées 6, +0, ~6, -0
88 −- **Syncs enregistrés** (`sync_log`) : 13
87 +- **Dernier sync** : 2026-08-19 04:15 — trouvées 6, +0, ~0, -0
88 +- **Syncs enregistrés** (`sync_log`) : 14
89 89
90 90 ## Erreurs & dépannage
91 91
modified docs/connecteurs/national.md +5 −5
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/national.md
7 7 Rôle : Fiche connecteur — NATIONAL (employeur direct, ATS greenhouse)
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -36,7 +36,7 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
36 36
37 37 ## Champs → schéma
38 38
39 −Complétude mesurée sur les **1 offres actives** de la source (base live, 2026-08-19 03:39 EDT).
39 +Complétude mesurée sur les **1 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
40 40
41 41 | Champ (`jobs.*`) | Rôle | Complétude |
42 42 |---|---|---|
@@ -72,15 +72,15 @@ Exemple réel : *Conseiller(ère), Relations médias, positionnement corporatif
72 72
73 73 ## Volumétrie & complétude live
74 74
75 −*(mesuré le 2026-08-19 03:39 EDT dans `data/jobka.db`)*
75 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
76 76
77 77 - **Offres en base** : 1 (dont **1 actives**, 0 masquées comme doublons `dup_of`)
78 78 - **Salaire** : 0/1 actives (0 %)
79 79 - **GPS** : 1/1 actives (100 %)
80 80 - **Mode** : 0/1 actives (0 %)
81 81 - **Parution** : 1/1 actives (100 %)
82 −- **Dernier sync** : 2026-08-19 02:10 — trouvées 1, +0, ~1, -0
83 −- **Syncs enregistrés** (`sync_log`) : 25
82 +- **Dernier sync** : 2026-08-19 04:15 — trouvées 1, +0, ~0, -0
83 +- **Syncs enregistrés** (`sync_log`) : 26
84 84
85 85 ## Erreurs & dépannage
86 86
modified docs/connecteurs/nexapp.md +5 −5
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/nexapp.md
7 7 Rôle : Fiche connecteur — Nexapp (employeur direct, ATS bamboohr)
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -36,7 +36,7 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
36 36
37 37 ## Champs → schéma
38 38
39 −Complétude mesurée sur les **6 offres actives** de la source (base live, 2026-08-19 03:39 EDT).
39 +Complétude mesurée sur les **6 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
40 40
41 41 | Champ (`jobs.*`) | Rôle | Complétude |
42 42 |---|---|---|
@@ -77,15 +77,15 @@ Exemple réel : *Designer de produit senior.e* — Québec · ∅ · parue le 20
77 77
78 78 ## Volumétrie & complétude live
79 79
80 −*(mesuré le 2026-08-19 03:39 EDT dans `data/jobka.db`)*
80 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
81 81
82 82 - **Offres en base** : 6 (dont **6 actives**, 0 masquées comme doublons `dup_of`)
83 83 - **Salaire** : 0/6 actives (0 %)
84 84 - **GPS** : 6/6 actives (100 %)
85 85 - **Mode** : 6/6 actives (100 %)
86 86 - **Parution** : 6/6 actives (100 %)
87 −- **Dernier sync** : 2026-08-19 02:10 — trouvées 6, +0, ~6, -0
88 −- **Syncs enregistrés** (`sync_log`) : 25
87 +- **Dernier sync** : 2026-08-19 04:15 — trouvées 6, +0, ~0, -0
88 +- **Syncs enregistrés** (`sync_log`) : 26
89 89
90 90 ## Erreurs & dépannage
91 91
modified docs/connecteurs/no_saint.md +5 −5
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/no_saint.md
7 7 Rôle : Fiche connecteur — No Saint (employeur direct, ATS ashby)
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -36,7 +36,7 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
36 36
37 37 ## Champs → schéma
38 38
39 −Complétude mesurée sur les **3 offres actives** de la source (base live, 2026-08-19 03:39 EDT).
39 +Complétude mesurée sur les **3 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
40 40
41 41 | Champ (`jobs.*`) | Rôle | Complétude |
42 42 |---|---|---|
@@ -72,15 +72,15 @@ Exemple réel : *Office Manager* — Montréal · ∅ · parue le 2026-07-23.
72 72
73 73 ## Volumétrie & complétude live
74 74
75 −*(mesuré le 2026-08-19 03:39 EDT dans `data/jobka.db`)*
75 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
76 76
77 77 - **Offres en base** : 3 (dont **3 actives**, 0 masquées comme doublons `dup_of`)
78 78 - **Salaire** : 0/3 actives (0 %)
79 79 - **GPS** : 3/3 actives (100 %)
80 80 - **Mode** : 3/3 actives (100 %)
81 81 - **Parution** : 3/3 actives (100 %)
82 −- **Dernier sync** : 2026-08-19 02:10 — trouvées 3, +0, ~3, -0
83 −- **Syncs enregistrés** (`sync_log`) : 25
82 +- **Dernier sync** : 2026-08-19 04:15 — trouvées 3, +0, ~0, -0
83 +- **Syncs enregistrés** (`sync_log`) : 26
84 84
85 85 ## Erreurs & dépannage
86 86
modified docs/connecteurs/nomic.md +5 −5
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/nomic.md
7 7 Rôle : Fiche connecteur — Nomic Bio (employeur direct, ATS ashby)
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -36,7 +36,7 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
36 36
37 37 ## Champs → schéma
38 38
39 −Complétude mesurée sur les **4 offres actives** de la source (base live, 2026-08-19 03:39 EDT).
39 +Complétude mesurée sur les **4 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
40 40
41 41 | Champ (`jobs.*`) | Rôle | Complétude |
42 42 |---|---|---|
@@ -72,15 +72,15 @@ Exemple réel : *Profiling Lab Operations Associate* — Montréal · ∅ · par
72 72
73 73 ## Volumétrie & complétude live
74 74
75 −*(mesuré le 2026-08-19 03:39 EDT dans `data/jobka.db`)*
75 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
76 76
77 77 - **Offres en base** : 4 (dont **4 actives**, 0 masquées comme doublons `dup_of`)
78 78 - **Salaire** : 0/4 actives (0 %)
79 79 - **GPS** : 3/4 actives (75 %)
80 80 - **Mode** : 4/4 actives (100 %)
81 81 - **Parution** : 4/4 actives (100 %)
82 −- **Dernier sync** : 2026-08-19 02:10 — trouvées 4, +0, ~4, -0
83 −- **Syncs enregistrés** (`sync_log`) : 25
82 +- **Dernier sync** : 2026-08-19 04:15 — trouvées 4, +0, ~0, -0
83 +- **Syncs enregistrés** (`sync_log`) : 26
84 84
85 85 ## Erreurs & dépannage
86 86
modified docs/connecteurs/nora_pharma.md +5 −5
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/nora_pharma.md
7 7 Rôle : Fiche connecteur — Nora Pharma (employeur direct, ATS breezy)
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -36,7 +36,7 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
36 36
37 37 ## Champs → schéma
38 38
39 −Complétude mesurée sur les **9 offres actives** de la source (base live, 2026-08-19 03:39 EDT).
39 +Complétude mesurée sur les **9 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
40 40
41 41 | Champ (`jobs.*`) | Rôle | Complétude |
42 42 |---|---|---|
@@ -72,15 +72,15 @@ Exemple réel : *Technicien(ne) en pharmacie* — Granby · $35 – $40 / hour
72 72
73 73 ## Volumétrie & complétude live
74 74
75 −*(mesuré le 2026-08-19 03:39 EDT dans `data/jobka.db`)*
75 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
76 76
77 77 - **Offres en base** : 9 (dont **9 actives**, 0 masquées comme doublons `dup_of`)
78 78 - **Salaire** : 9/9 actives (100 %)
79 79 - **GPS** : 8/9 actives (89 %)
80 80 - **Mode** : 0/9 actives (0 %)
81 81 - **Parution** : 9/9 actives (100 %)
82 −- **Dernier sync** : 2026-08-19 02:10 — trouvées 9, +0, ~9, -0
83 −- **Syncs enregistrés** (`sync_log`) : 25
82 +- **Dernier sync** : 2026-08-19 04:15 — trouvées 9, +0, ~0, -0
83 +- **Syncs enregistrés** (`sync_log`) : 26
84 84
85 85 ## Erreurs & dépannage
86 86
added docs/connecteurs/nortera.md +115 −0
@@ -0,0 +1,115 @@
1 +<!--
2 +=============================================================================
3 +Job·Ka — Groupe KA
4 +Auteur : Simon-Pierre Boucher
5 +Contact : contact@spboucher.ai
6 +Fichier : docs/connecteurs/nortera.md
7 +Rôle : Fiche connecteur — Nortera (employeur direct, ATS ultipro)
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 + relancer le script pour régénérer.
10 +=============================================================================
11 +-->
12 +
13 +# Nortera (`nortera`)
14 +
15 +**Employeur direct** · Plateforme ATS : [`ultipro`](ats-ultipro.md) · Statut registre : actif · Connecteur : `jobka/connectors/nortera.py`
16 +
17 +## Description
18 +
19 +- **Site** : [Nortera](https://norterafoods.com)
20 +- **Page carrières** : https://recruiting.ultipro.ca/NOR5100NOFD/JobBoard/e3ce2e8a-b8fc-42c9-97cf-ea17f4d5dd1d/
21 +- **Secteurs** : Agroalimentaire, Manufacturier
22 +- **Région** : Montérégie, Brossard
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-ultipro.md`](ats-ultipro.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` | `e3ce2e8a-b8fc-42c9-97cf-ea17f4d5dd1d` |
33 +| `EMPLOYER` | `Nortera` |
34 +| `HOST` | `recruiting.ultipro.ca` |
35 +| `ORG` | `NOR5100NOFD` |
36 +- **Throttle** : 0.8 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 **24 offres actives** de la source (base live, 2026-08-19 05:40 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é | 100 % |
53 +| `work_mode` — Mode | presentiel / hybride / teletravail | 4 % |
54 +| `employment_type` — Type | temps_plein / temps_partiel / … | 100 % |
55 +| `salary` — Salaire ($) | bornes numériques normalisées $/h et $/an | 62 % |
56 +| `salary_label` — Libellé salaire | texte salarial original | 62 % |
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é, …) | 92 % |
62 +| `language` — Langue | fr / en / bilingue (source ou heuristique) | 100 % |
63 +| `company_logo` — Logo employeur | URL du logo si exposé par la source | 0 % |
64 +| `apply_url` — Candidature | lien de candidature directe | 0 % |
65 +| `gps` — GPS | lat/lng (géocodage sans invention) | 0 % |
66 +
67 +Exemple réel : *Préposé au département de l’emballage de soir* — Bedford · Salaire de 21.21$ + 1,25$ prime de soir = 22,46$ · parue le 2026-08-14.
68 +
69 +## Fréquence & budgets
70 +
71 +- **Cadence** : resynchronisation **horaire** (PM2 `job-ka-sync` = `run.py watch 60`), suivie du géocodage en lot puis de la déduplication inter-sources.
72 +- **Throttle** : 0.8 s minimum entre deux requêtes vers la source (`request_delay`).
73 +- **Budgets / plafonds (variables d'environnement)** :
74 +
75 +| Variable | Défaut |
76 +|---|---|
77 +| `JOBKA_ULTIPRO_DETAIL_LIMIT` | `80` |
78 +- 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.
79 +
80 +## Volumétrie & complétude live
81 +
82 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
83 +
84 +- **Offres en base** : 24 (dont **24 actives**, 0 masquées comme doublons `dup_of`)
85 +- **Salaire** : 15/24 actives (62 %)
86 +- **GPS** : 0/24 actives (0 %)
87 +- **Mode** : 1/24 actives (4 %)
88 +- **Parution** : 24/24 actives (100 %)
89 +- **Dernier sync** : 2026-08-19 04:49 — trouvées 24, +24, ~0, -0
90 +- **Syncs enregistrés** (`sync_log`) : 1
91 +
92 +## Erreurs & dépannage
93 +
94 +Aucune erreur dans `sync_log` pour cette source.
95 +
96 +- Rejouer un sync isolé : `.venv/bin/python run.py sync nortera` puis inspecter `sync_log` : `sqlite3 data/jobka.db "SELECT * FROM sync_log WHERE source='nortera' ORDER BY ts DESC LIMIT 5;"`
97 +- 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`.
98 +
99 +## Licence / conformité
100 +
101 +**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 Nortera » 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.
102 +
103 +## Historique
104 +
105 +**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 :
106 +- `fd4bfc8` qualité lieux : rejet des villes hors Québec, bâtiments McGill → Montréal ;
107 +- `5a66f48` +59 employeurs (sondage massif d'ATS + détection de pages carrières) ;
108 +- `4917d57` 8 nouveaux ATS (Taleo, Njoyn, UltiPro, iCIMS, SuccessFactors, ADP WFN, Digital Recruiters, Workland) + 23 employeurs publics/parapublics ;
109 +- `f6e7571` portails Guichet-Emplois, Jobillico, Espresso-Jobs — l'offre directe gagne toujours la canonique (dédup) ;
110 +- `744cbfc` badge « Offre directe », stats directes/portails, dépôt direct employeurs ;
111 +- `1604ff9` reprise sur coupure WAF Guichet-Emplois (retry + acquis partiel).
112 +
113 +Commits touchant `jobka/connectors/nortera.py` :
114 +
115 +- `0298197` 2026-08-19 Vague A (detected-other-ats) — nouveaux employeurs sur familles existantes : Hydro-Québec (SuccessFactors CSB emploi.hydroquebec.com, 66 offres) ; Deloitte Canada (CSB careers.deloitte.ca, 105 offres QC — remplace la détection Taleo périmée) ; CGI (Njoyn corporatif via Scrapfly, babillard mondial de ~2 900 postes filtré Québec, budgets frugaux) ; Fruit d'Or (12) et Nortera (24 QC) sur UKG Pro recruiting.ultipro.ca ; Placements Mackenzie/groupe Power (iCIMS FR, 3 QC) ; Cultures Gen V (6), Bento Sushi (9 QC), Osgoode Properties (1) sur ADP WFN. Retrait ttcglobal (plus d'offre QC : 2 offres Dallas/Londres). Écartés avec raisons (docs/CONFORMITE.md) : Canada Vie, Groupe Dynamite, Jack Astor's/SIR, Méchant Bœuf, Valero (0 offre), Résolu (fusion Domtar), Power Corp directe.
modified docs/connecteurs/northwestrubber.md +5 −5
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/northwestrubber.md
7 7 Rôle : Fiche connecteur — North West Rubber (employeur direct, ATS bamboohr)
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -36,7 +36,7 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
36 36
37 37 ## Champs → schéma
38 38
39 −Complétude mesurée sur les **6 offres actives** de la source (base live, 2026-08-19 03:39 EDT).
39 +Complétude mesurée sur les **6 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
40 40
41 41 | Champ (`jobs.*`) | Rôle | Complétude |
42 42 |---|---|---|
@@ -77,15 +77,15 @@ Exemple réel : *Superviseur de production - Quart de soir* — Québec · À di
77 77
78 78 ## Volumétrie & complétude live
79 79
80 −*(mesuré le 2026-08-19 03:39 EDT dans `data/jobka.db`)*
80 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
81 81
82 82 - **Offres en base** : 6 (dont **6 actives**, 0 masquées comme doublons `dup_of`)
83 83 - **Salaire** : 0/6 actives (0 %)
84 84 - **GPS** : 6/6 actives (100 %)
85 85 - **Mode** : 6/6 actives (100 %)
86 86 - **Parution** : 6/6 actives (100 %)
87 −- **Dernier sync** : 2026-08-19 02:10 — trouvées 6, +0, ~6, -0
88 −- **Syncs enregistrés** (`sync_log`) : 25
87 +- **Dernier sync** : 2026-08-19 04:15 — trouvées 6, +0, ~0, -0
88 +- **Syncs enregistrés** (`sync_log`) : 26
89 89
90 90 ## Erreurs & dépannage
91 91
modified docs/connecteurs/novipro.md +5 −5
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/novipro.md
7 7 Rôle : Fiche connecteur — NOVIPRO (employeur direct, ATS breezy)
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -36,7 +36,7 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
36 36
37 37 ## Champs → schéma
38 38
39 −Complétude mesurée sur les **17 offres actives** de la source (base live, 2026-08-19 03:39 EDT).
39 +Complétude mesurée sur les **17 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
40 40
41 41 | Champ (`jobs.*`) | Rôle | Complétude |
42 42 |---|---|---|
@@ -72,15 +72,15 @@ Exemple réel : *Architecte d'entreprise* — Québec · ∅ · parue le 2026-08
72 72
73 73 ## Volumétrie & complétude live
74 74
75 −*(mesuré le 2026-08-19 03:39 EDT dans `data/jobka.db`)*
75 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
76 76
77 77 - **Offres en base** : 17 (dont **17 actives**, 0 masquées comme doublons `dup_of`)
78 78 - **Salaire** : 0/17 actives (0 %)
79 79 - **GPS** : 17/17 actives (100 %)
80 80 - **Mode** : 4/17 actives (24 %)
81 81 - **Parution** : 17/17 actives (100 %)
82 −- **Dernier sync** : 2026-08-19 02:10 — trouvées 17, +0, ~17, -0
83 −- **Syncs enregistrés** (`sync_log`) : 25
82 +- **Dernier sync** : 2026-08-19 04:15 — trouvées 17, +0, ~0, -0
83 +- **Syncs enregistrés** (`sync_log`) : 26
84 84
85 85 ## Erreurs & dépannage
86 86
modified docs/connecteurs/nuovophotography.md +5 −5
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/nuovophotography.md
7 7 Rôle : Fiche connecteur — Nuovo Photography (employeur direct, ATS workable)
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -36,7 +36,7 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
36 36
37 37 ## Champs → schéma
38 38
39 −Complétude mesurée sur les **8 offres actives** de la source (base live, 2026-08-19 03:39 EDT).
39 +Complétude mesurée sur les **8 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
40 40
41 41 | Champ (`jobs.*`) | Rôle | Complétude |
42 42 |---|---|---|
@@ -72,15 +72,15 @@ Exemple réel : *Trade Show Brand Ambassador Montreal - CONTRACT* — Montréal
72 72
73 73 ## Volumétrie & complétude live
74 74
75 −*(mesuré le 2026-08-19 03:39 EDT dans `data/jobka.db`)*
75 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
76 76
77 77 - **Offres en base** : 8 (dont **8 actives**, 0 masquées comme doublons `dup_of`)
78 78 - **Salaire** : 2/8 actives (25 %)
79 79 - **GPS** : 8/8 actives (100 %)
80 80 - **Mode** : 0/8 actives (0 %)
81 81 - **Parution** : 8/8 actives (100 %)
82 −- **Dernier sync** : 2026-08-19 02:10 — trouvées 8, +0, ~8, -0
83 −- **Syncs enregistrés** (`sync_log`) : 25
82 +- **Dernier sync** : 2026-08-19 04:15 — trouvées 8, +0, ~0, -0
83 +- **Syncs enregistrés** (`sync_log`) : 26
84 84
85 85 ## Erreurs & dépannage
86 86
modified docs/connecteurs/omni_hotels_gestion.md +5 −5
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/omni_hotels_gestion.md
7 7 Rôle : Fiche connecteur — Omni Hôtel Mont-Royal (employeur direct, ATS icims)
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -36,7 +36,7 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
36 36
37 37 ## Champs → schéma
38 38
39 −Complétude mesurée sur les **8 offres actives** de la source (base live, 2026-08-19 03:39 EDT).
39 +Complétude mesurée sur les **8 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
40 40
41 41 | Champ (`jobs.*`) | Rôle | Complétude |
42 42 |---|---|---|
@@ -77,15 +77,15 @@ Exemple réel : *Chef tournant* — Montréal · Le salaire est de 35.59 $/heure
77 77
78 78 ## Volumétrie & complétude live
79 79
80 −*(mesuré le 2026-08-19 03:39 EDT dans `data/jobka.db`)*
80 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
81 81
82 82 - **Offres en base** : 8 (dont **8 actives**, 0 masquées comme doublons `dup_of`)
83 83 - **Salaire** : 7/8 actives (88 %)
84 84 - **GPS** : 8/8 actives (100 %)
85 85 - **Mode** : 0/8 actives (0 %)
86 86 - **Parution** : 8/8 actives (100 %)
87 −- **Dernier sync** : 2026-08-19 02:10 — trouvées 8, +0, ~8, -0
88 −- **Syncs enregistrés** (`sync_log`) : 13
87 +- **Dernier sync** : 2026-08-19 04:15 — trouvées 8, +0, ~0, -0
88 +- **Syncs enregistrés** (`sync_log`) : 14
89 89
90 90 ## Erreurs & dépannage
91 91
modified docs/connecteurs/omni_hotels_horaire.md +5 −5
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/omni_hotels_horaire.md
7 7 Rôle : Fiche connecteur — Omni Hôtel Mont-Royal (employeur direct, ATS icims)
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -36,7 +36,7 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
36 36
37 37 ## Champs → schéma
38 38
39 −Complétude mesurée sur les **8 offres actives** de la source (base live, 2026-08-19 03:39 EDT).
39 +Complétude mesurée sur les **8 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
40 40
41 41 | Champ (`jobs.*`) | Rôle | Complétude |
42 42 |---|---|---|
@@ -77,15 +77,15 @@ Exemple réel : *Chef tournant* — Montréal · Le salaire est de 35.59 $/heure
77 77
78 78 ## Volumétrie & complétude live
79 79
80 −*(mesuré le 2026-08-19 03:39 EDT dans `data/jobka.db`)*
80 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
81 81
82 82 - **Offres en base** : 8 (dont **8 actives**, 8 masquées comme doublons `dup_of`)
83 83 - **Salaire** : 7/8 actives (88 %)
84 84 - **GPS** : 8/8 actives (100 %)
85 85 - **Mode** : 0/8 actives (0 %)
86 86 - **Parution** : 8/8 actives (100 %)
87 −- **Dernier sync** : 2026-08-19 02:10 — trouvées 8, +0, ~8, -0
88 −- **Syncs enregistrés** (`sync_log`) : 13
87 +- **Dernier sync** : 2026-08-19 04:15 — trouvées 8, +0, ~0, -0
88 +- **Syncs enregistrés** (`sync_log`) : 14
89 89
90 90 ## Erreurs & dépannage
91 91
modified docs/connecteurs/onrunning.md +5 −5
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/onrunning.md
7 7 Rôle : Fiche connecteur — On Running (employeur direct, ATS greenhouse)
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -36,7 +36,7 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
36 36
37 37 ## Champs → schéma
38 38
39 −Complétude mesurée sur les **2 offres actives** de la source (base live, 2026-08-19 03:39 EDT).
39 +Complétude mesurée sur les **2 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
40 40
41 41 | Champ (`jobs.*`) | Rôle | Complétude |
42 42 |---|---|---|
@@ -72,15 +72,15 @@ Exemple réel : *Spécialiste – Représentant(e) Technique, Québec* — Montr
72 72
73 73 ## Volumétrie & complétude live
74 74
75 −*(mesuré le 2026-08-19 03:39 EDT dans `data/jobka.db`)*
75 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
76 76
77 77 - **Offres en base** : 2 (dont **2 actives**, 0 masquées comme doublons `dup_of`)
78 78 - **Salaire** : 0/2 actives (0 %)
79 79 - **GPS** : 2/2 actives (100 %)
80 80 - **Mode** : 0/2 actives (0 %)
81 81 - **Parution** : 2/2 actives (100 %)
82 −- **Dernier sync** : 2026-08-19 02:10 — trouvées 2, +0, ~2, -0
83 −- **Syncs enregistrés** (`sync_log`) : 25
82 +- **Dernier sync** : 2026-08-19 04:15 — trouvées 2, +0, ~0, -0
83 +- **Syncs enregistrés** (`sync_log`) : 26
84 84
85 85 ## Erreurs & dépannage
86 86
modified docs/connecteurs/opalrt.md +5 −5
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/opalrt.md
7 7 Rôle : Fiche connecteur — OPAL-RT Technologies (employeur direct, ATS bamboohr)
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -36,7 +36,7 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
36 36
37 37 ## Champs → schéma
38 38
39 −Complétude mesurée sur les **13 offres actives** de la source (base live, 2026-08-19 03:39 EDT).
39 +Complétude mesurée sur les **13 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
40 40
41 41 | Champ (`jobs.*`) | Rôle | Complétude |
42 42 |---|---|---|
@@ -77,15 +77,15 @@ Exemple réel : *Analyste en Modélisation et Simulation Électrique / Electrica
77 77
78 78 ## Volumétrie & complétude live
79 79
80 −*(mesuré le 2026-08-19 03:39 EDT dans `data/jobka.db`)*
80 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
81 81
82 82 - **Offres en base** : 14 (dont **13 actives**, 0 masquées comme doublons `dup_of`)
83 83 - **Salaire** : 0/13 actives (0 %)
84 84 - **GPS** : 13/13 actives (100 %)
85 85 - **Mode** : 13/13 actives (100 %)
86 86 - **Parution** : 13/13 actives (100 %)
87 −- **Dernier sync** : 2026-08-19 02:10 — trouvées 13, +0, ~13, -0
88 −- **Syncs enregistrés** (`sync_log`) : 25
87 +- **Dernier sync** : 2026-08-19 04:15 — trouvées 13, +0, ~0, -0
88 +- **Syncs enregistrés** (`sync_log`) : 26
89 89
90 90 ## Erreurs & dépannage
91 91
modified docs/connecteurs/osedea.md +5 −5
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/osedea.md
7 7 Rôle : Fiche connecteur — OSEDEA (employeur direct, ATS lever)
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -36,7 +36,7 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
36 36
37 37 ## Champs → schéma
38 38
39 −Complétude mesurée sur les **18 offres actives** de la source (base live, 2026-08-19 03:39 EDT).
39 +Complétude mesurée sur les **18 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
40 40
41 41 | Champ (`jobs.*`) | Rôle | Complétude |
42 42 |---|---|---|
@@ -72,15 +72,15 @@ Exemple réel : *Designer de produits senior* — Montréal · ∅ · parue le 2
72 72
73 73 ## Volumétrie & complétude live
74 74
75 −*(mesuré le 2026-08-19 03:39 EDT dans `data/jobka.db`)*
75 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
76 76
77 77 - **Offres en base** : 18 (dont **18 actives**, 0 masquées comme doublons `dup_of`)
78 78 - **Salaire** : 0/18 actives (0 %)
79 79 - **GPS** : 18/18 actives (100 %)
80 80 - **Mode** : 18/18 actives (100 %)
81 81 - **Parution** : 18/18 actives (100 %)
82 −- **Dernier sync** : 2026-08-19 02:10 — trouvées 18, +0, ~18, -0
83 −- **Syncs enregistrés** (`sync_log`) : 25
82 +- **Dernier sync** : 2026-08-19 04:15 — trouvées 18, +0, ~0, -0
83 +- **Syncs enregistrés** (`sync_log`) : 26
84 84
85 85 ## Erreurs & dépannage
86 86
added docs/connecteurs/osgoode_properties.md +115 −0
@@ -0,0 +1,115 @@
1 +<!--
2 +=============================================================================
3 +Job·Ka — Groupe KA
4 +Auteur : Simon-Pierre Boucher
5 +Contact : contact@spboucher.ai
6 +Fichier : docs/connecteurs/osgoode_properties.md
7 +Rôle : Fiche connecteur — Osgoode Properties (employeur direct, ATS adp)
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 + relancer le script pour régénérer.
10 +=============================================================================
11 +-->
12 +
13 +# Osgoode Properties (`osgoode_properties`)
14 +
15 +**Employeur direct** · Plateforme ATS : [`adp`](ats-adp.md) · Statut registre : actif · Connecteur : `jobka/connectors/osgoode_properties.py`
16 +
17 +## Description
18 +
19 +- **Site** : [Osgoode Properties](https://www.osgoodeproperties.com)
20 +- **Page carrières** : https://workforcenow.adp.com/mascsr/default/mdf/recruitment/recruitment.html?cid=c6a2e782-c971-4a6d-9a63-1365f5ce7d21&ccId=19000101_000001&lang=fr_CA
21 +- **Secteurs** : Immobilier
22 +- **Région** : Gatineau
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-adp.md`](ats-adp.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 +| `CCID` | `19000101_000001` |
33 +| `CID` | `c6a2e782-c971-4a6d-9a63-1365f5ce7d21` |
34 +| `EMPLOYER` | `Osgoode Properties` |
35 +| `LANG` | `fr_CA` |
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 **1 offres actives** de la source (base live, 2026-08-19 05:40 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é | 100 % |
53 +| `work_mode` — Mode | presentiel / hybride / teletravail | 0 % |
54 +| `employment_type` — Type | temps_plein / temps_partiel / … | 0 % |
55 +| `salary` — Salaire ($) | bornes numériques normalisées $/h et $/an | 100 % |
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 | 100 % |
60 +| `date_deadline` — Date limite | date limite pour postuler | 0 % |
61 +| `category` — Catégorie | taxonomie interne (TI, Santé, …) | 0 % |
62 +| `language` — Langue | fr / en / bilingue (source ou heuristique) | 100 % |
63 +| `company_logo` — Logo employeur | URL du logo si exposé par la source | 0 % |
64 +| `apply_url` — Candidature | lien de candidature directe | 0 % |
65 +| `gps` — GPS | lat/lng (géocodage sans invention) | 0 % |
66 +
67 +Exemple réel : *Site Administrator* — Gatineau · ∅ · parue le 2026-07-30.
68 +
69 +## Fréquence & budgets
70 +
71 +- **Cadence** : resynchronisation **horaire** (PM2 `job-ka-sync` = `run.py watch 60`), suivie du géocodage en lot puis de la déduplication inter-sources.
72 +- **Throttle** : 1.0 s minimum entre deux requêtes vers la source (`request_delay`).
73 +- **Budgets / plafonds (variables d'environnement)** :
74 +
75 +| Variable | Défaut |
76 +|---|---|
77 +| `JOBKA_ADP_DETAIL_LIMIT` | `80` |
78 +- 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.
79 +
80 +## Volumétrie & complétude live
81 +
82 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
83 +
84 +- **Offres en base** : 1 (dont **1 actives**, 0 masquées comme doublons `dup_of`)
85 +- **Salaire** : 1/1 actives (100 %)
86 +- **GPS** : 0/1 actives (0 %)
87 +- **Mode** : 0/1 actives (0 %)
88 +- **Parution** : 1/1 actives (100 %)
89 +- **Dernier sync** : 2026-08-19 04:49 — trouvées 1, +1, ~0, -0
90 +- **Syncs enregistrés** (`sync_log`) : 1
91 +
92 +## Erreurs & dépannage
93 +
94 +Aucune erreur dans `sync_log` pour cette source.
95 +
96 +- Rejouer un sync isolé : `.venv/bin/python run.py sync osgoode_properties` puis inspecter `sync_log` : `sqlite3 data/jobka.db "SELECT * FROM sync_log WHERE source='osgoode_properties' ORDER BY ts DESC LIMIT 5;"`
97 +- 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`.
98 +
99 +## Licence / conformité
100 +
101 +**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 Osgoode Properties » 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.
102 +
103 +## Historique
104 +
105 +**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 :
106 +- `fd4bfc8` qualité lieux : rejet des villes hors Québec, bâtiments McGill → Montréal ;
107 +- `5a66f48` +59 employeurs (sondage massif d'ATS + détection de pages carrières) ;
108 +- `4917d57` 8 nouveaux ATS (Taleo, Njoyn, UltiPro, iCIMS, SuccessFactors, ADP WFN, Digital Recruiters, Workland) + 23 employeurs publics/parapublics ;
109 +- `f6e7571` portails Guichet-Emplois, Jobillico, Espresso-Jobs — l'offre directe gagne toujours la canonique (dédup) ;
110 +- `744cbfc` badge « Offre directe », stats directes/portails, dépôt direct employeurs ;
111 +- `1604ff9` reprise sur coupure WAF Guichet-Emplois (retry + acquis partiel).
112 +
113 +Commits touchant `jobka/connectors/osgoode_properties.py` :
114 +
115 +- `0298197` 2026-08-19 Vague A (detected-other-ats) — nouveaux employeurs sur familles existantes : Hydro-Québec (SuccessFactors CSB emploi.hydroquebec.com, 66 offres) ; Deloitte Canada (CSB careers.deloitte.ca, 105 offres QC — remplace la détection Taleo périmée) ; CGI (Njoyn corporatif via Scrapfly, babillard mondial de ~2 900 postes filtré Québec, budgets frugaux) ; Fruit d'Or (12) et Nortera (24 QC) sur UKG Pro recruiting.ultipro.ca ; Placements Mackenzie/groupe Power (iCIMS FR, 3 QC) ; Cultures Gen V (6), Bento Sushi (9 QC), Osgoode Properties (1) sur ADP WFN. Retrait ttcglobal (plus d'offre QC : 2 offres Dallas/Londres). Écartés avec raisons (docs/CONFORMITE.md) : Canada Vie, Groupe Dynamite, Jack Astor's/SIR, Méchant Bœuf, Valero (0 offre), Résolu (fusion Domtar), Power Corp directe.
modified docs/connecteurs/ott.md +5 −5
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/ott.md
7 7 Rôle : Fiche connecteur — OTT Financial (employeur direct, ATS bamboohr)
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -36,7 +36,7 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
36 36
37 37 ## Champs → schéma
38 38
39 −Complétude mesurée sur les **2 offres actives** de la source (base live, 2026-08-19 03:39 EDT).
39 +Complétude mesurée sur les **2 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
40 40
41 41 | Champ (`jobs.*`) | Rôle | Complétude |
42 42 |---|---|---|
@@ -77,15 +77,15 @@ Exemple réel : *Account Manager (Mandarin) - Montreal* — Montréal · ∅ ·
77 77
78 78 ## Volumétrie & complétude live
79 79
80 −*(mesuré le 2026-08-19 03:39 EDT dans `data/jobka.db`)*
80 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
81 81
82 82 - **Offres en base** : 2 (dont **2 actives**, 0 masquées comme doublons `dup_of`)
83 83 - **Salaire** : 0/2 actives (0 %)
84 84 - **GPS** : 2/2 actives (100 %)
85 85 - **Mode** : 2/2 actives (100 %)
86 86 - **Parution** : 2/2 actives (100 %)
87 −- **Dernier sync** : 2026-08-19 02:10 — trouvées 2, +0, ~2, -0
88 −- **Syncs enregistrés** (`sync_log`) : 25
87 +- **Dernier sync** : 2026-08-19 04:15 — trouvées 2, +0, ~0, -0
88 +- **Syncs enregistrés** (`sync_log`) : 26
89 89
90 90 ## Erreurs & dépannage
91 91
modified docs/connecteurs/peoplecanfly.md +5 −5
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/peoplecanfly.md
7 7 Rôle : Fiche connecteur — People Can Fly (employeur direct, ATS smartrecruiters)
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -36,7 +36,7 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
36 36
37 37 ## Champs → schéma
38 38
39 −Complétude mesurée sur les **10 offres actives** de la source (base live, 2026-08-19 03:39 EDT).
39 +Complétude mesurée sur les **10 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
40 40
41 41 | Champ (`jobs.*`) | Rôle | Complétude |
42 42 |---|---|---|
@@ -77,15 +77,15 @@ Exemple réel : *Artiste de niveau senior/Senior Level Artist - Remote, Canada*
77 77
78 78 ## Volumétrie & complétude live
79 79
80 −*(mesuré le 2026-08-19 03:39 EDT dans `data/jobka.db`)*
80 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
81 81
82 82 - **Offres en base** : 12 (dont **10 actives**, 0 masquées comme doublons `dup_of`)
83 83 - **Salaire** : 0/10 actives (0 %)
84 84 - **GPS** : 10/10 actives (100 %)
85 85 - **Mode** : 10/10 actives (100 %)
86 86 - **Parution** : 10/10 actives (100 %)
87 −- **Dernier sync** : 2026-08-19 02:10 — trouvées 10, +0, ~10, -0
88 −- **Syncs enregistrés** (`sync_log`) : 25
87 +- **Dernier sync** : 2026-08-19 04:16 — trouvées 10, +0, ~0, -0
88 +- **Syncs enregistrés** (`sync_log`) : 26
89 89
90 90 ## Erreurs & dépannage
91 91
modified docs/connecteurs/petalmd.md +5 −5
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/petalmd.md
7 7 Rôle : Fiche connecteur — Petal (employeur direct, ATS recruitee)
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -36,7 +36,7 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
36 36
37 37 ## Champs → schéma
38 38
39 −Complétude mesurée sur les **7 offres actives** de la source (base live, 2026-08-19 03:39 EDT).
39 +Complétude mesurée sur les **7 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
40 40
41 41 | Champ (`jobs.*`) | Rôle | Complétude |
42 42 |---|---|---|
@@ -72,15 +72,15 @@ Exemple réel : *Directeur -trice, Systèmes et Architecture Go-to-Market (GTM)*
72 72
73 73 ## Volumétrie & complétude live
74 74
75 −*(mesuré le 2026-08-19 03:39 EDT dans `data/jobka.db`)*
75 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
76 76
77 77 - **Offres en base** : 7 (dont **7 actives**, 0 masquées comme doublons `dup_of`)
78 78 - **Salaire** : 1/7 actives (14 %)
79 79 - **GPS** : 7/7 actives (100 %)
80 80 - **Mode** : 7/7 actives (100 %)
81 81 - **Parution** : 7/7 actives (100 %)
82 −- **Dernier sync** : 2026-08-19 02:10 — trouvées 7, +0, ~7, -0
83 −- **Syncs enregistrés** (`sync_log`) : 25
82 +- **Dernier sync** : 2026-08-19 04:16 — trouvées 7, +0, ~0, -0
83 +- **Syncs enregistrés** (`sync_log`) : 26
84 84
85 85 ## Erreurs & dépannage
86 86
modified docs/connecteurs/pfizer.md +6 −6
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/pfizer.md
7 7 Rôle : Fiche connecteur — Pfizer Canada (employeur direct, ATS workday)
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -38,7 +38,7 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
38 38
39 39 ## Champs → schéma
40 40
41 −Complétude mesurée sur les **4 offres actives** de la source (base live, 2026-08-19 03:39 EDT).
41 +Complétude mesurée sur les **4 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
42 42
43 43 | Champ (`jobs.*`) | Rôle | Complétude |
44 44 |---|---|---|
@@ -64,7 +64,7 @@ Complétude mesurée sur les **4 offres actives** de la source (base live, 2026-
64 64 | `apply_url` — Candidature | lien de candidature directe | 100 % |
65 65 | `gps` — GPS | lat/lng (géocodage sans invention) | 0 % |
66 66
67 −Exemple réel : *Global Development Lead, Internal Medicine (MD, Sr. Director)* — ∅ · The annual base salary for this position ranges from $274,500.00 to $457,500.00.* In addit… · parue le 2026-08-14.
67 +Exemple réel : *Global Development Lead, Internal Medicine (MD, Sr. Director)* — ∅ · The annual base salary for this position ranges from $274,500.00 to $457,500.00.* In addit… · parue le 2026-08-13.
68 68
69 69 ## Fréquence & budgets
70 70
@@ -79,15 +79,15 @@ Exemple réel : *Global Development Lead, Internal Medicine (MD, Sr. Director)*
79 79
80 80 ## Volumétrie & complétude live
81 81
82 −*(mesuré le 2026-08-19 03:39 EDT dans `data/jobka.db`)*
82 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
83 83
84 84 - **Offres en base** : 5 (dont **4 actives**, 0 masquées comme doublons `dup_of`)
85 85 - **Salaire** : 4/4 actives (100 %)
86 86 - **GPS** : 0/4 actives (0 %)
87 87 - **Mode** : 0/4 actives (0 %)
88 88 - **Parution** : 4/4 actives (100 %)
89 −- **Dernier sync** : 2026-08-19 02:10 — trouvées 4, +0, ~0, -0
90 −- **Syncs enregistrés** (`sync_log`) : 25
89 +- **Dernier sync** : 2026-08-19 04:16 — trouvées 4, +0, ~4, -0
90 +- **Syncs enregistrés** (`sync_log`) : 26
91 91
92 92 ## Erreurs & dépannage
93 93
modified docs/connecteurs/playmind.md +5 −5
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/playmind.md
7 7 Rôle : Fiche connecteur — Playmind (employeur direct, ATS smartrecruiters)
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -36,7 +36,7 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
36 36
37 37 ## Champs → schéma
38 38
39 −Complétude mesurée sur les **2 offres actives** de la source (base live, 2026-08-19 03:39 EDT).
39 +Complétude mesurée sur les **2 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
40 40
41 41 | Champ (`jobs.*`) | Rôle | Complétude |
42 42 |---|---|---|
@@ -77,15 +77,15 @@ Exemple réel : *Developer C++ Unreal (Inter or Senior)* — Montréal · ∅ ·
77 77
78 78 ## Volumétrie & complétude live
79 79
80 −*(mesuré le 2026-08-19 03:39 EDT dans `data/jobka.db`)*
80 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
81 81
82 82 - **Offres en base** : 2 (dont **2 actives**, 0 masquées comme doublons `dup_of`)
83 83 - **Salaire** : 0/2 actives (0 %)
84 84 - **GPS** : 2/2 actives (100 %)
85 85 - **Mode** : 0/2 actives (0 %)
86 86 - **Parution** : 2/2 actives (100 %)
87 −- **Dernier sync** : 2026-08-19 02:10 — trouvées 2, +0, ~2, -0
88 −- **Syncs enregistrés** (`sync_log`) : 13
87 +- **Dernier sync** : 2026-08-19 04:16 — trouvées 2, +0, ~0, -0
88 +- **Syncs enregistrés** (`sync_log`) : 14
89 89
90 90 ## Erreurs & dépannage
91 91
modified docs/connecteurs/plusgrade.md +6 −6
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/plusgrade.md
7 7 Rôle : Fiche connecteur — Plusgrade (employeur direct, ATS workday)
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -38,7 +38,7 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
38 38
39 39 ## Champs → schéma
40 40
41 −Complétude mesurée sur les **4 offres actives** de la source (base live, 2026-08-19 03:39 EDT).
41 +Complétude mesurée sur les **4 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
42 42
43 43 | Champ (`jobs.*`) | Rôle | Complétude |
44 44 |---|---|---|
@@ -64,7 +64,7 @@ Complétude mesurée sur les **4 offres actives** de la source (base live, 2026-
64 64 | `apply_url` — Candidature | lien de candidature directe | 100 % |
65 65 | `gps` — GPS | lat/lng (géocodage sans invention) | 100 % |
66 66
67 −Exemple réel : *Software Developer* — Montréal · ∅ · parue le 2026-08-01.
67 +Exemple réel : *Software Developer* — Montréal · ∅ · parue le 2026-07-31.
68 68
69 69 ## Fréquence & budgets
70 70
@@ -79,15 +79,15 @@ Exemple réel : *Software Developer* — Montréal · ∅ · parue le 2026-08-01
79 79
80 80 ## Volumétrie & complétude live
81 81
82 −*(mesuré le 2026-08-19 03:39 EDT dans `data/jobka.db`)*
82 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
83 83
84 84 - **Offres en base** : 4 (dont **4 actives**, 0 masquées comme doublons `dup_of`)
85 85 - **Salaire** : 0/4 actives (0 %)
86 86 - **GPS** : 4/4 actives (100 %)
87 87 - **Mode** : 0/4 actives (0 %)
88 88 - **Parution** : 4/4 actives (100 %)
89 −- **Dernier sync** : 2026-08-19 02:10 — trouvées 4, +0, ~0, -0
90 −- **Syncs enregistrés** (`sync_log`) : 14
89 +- **Dernier sync** : 2026-08-19 04:16 — trouvées 4, +0, ~4, -0
90 +- **Syncs enregistrés** (`sync_log`) : 15
91 91
92 92 ## Erreurs & dépannage
93 93
modified docs/connecteurs/poka.md +5 −5
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/poka.md
7 7 Rôle : Fiche connecteur — Poka (employeur direct, ATS greenhouse)
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -36,7 +36,7 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
36 36
37 37 ## Champs → schéma
38 38
39 −Complétude mesurée sur les **5 offres actives** de la source (base live, 2026-08-19 03:39 EDT).
39 +Complétude mesurée sur les **5 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
40 40
41 41 | Champ (`jobs.*`) | Rôle | Complétude |
42 42 |---|---|---|
@@ -72,15 +72,15 @@ Exemple réel : *Frontend Developer* — Montréal · ∅ · parue le 2026-08-05
72 72
73 73 ## Volumétrie & complétude live
74 74
75 −*(mesuré le 2026-08-19 03:39 EDT dans `data/jobka.db`)*
75 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
76 76
77 77 - **Offres en base** : 5 (dont **5 actives**, 0 masquées comme doublons `dup_of`)
78 78 - **Salaire** : 0/5 actives (0 %)
79 79 - **GPS** : 5/5 actives (100 %)
80 80 - **Mode** : 0/5 actives (0 %)
81 81 - **Parution** : 5/5 actives (100 %)
82 −- **Dernier sync** : 2026-08-19 02:10 — trouvées 5, +0, ~5, -0
83 −- **Syncs enregistrés** (`sync_log`) : 25
82 +- **Dernier sync** : 2026-08-19 04:16 — trouvées 5, +0, ~0, -0
83 +- **Syncs enregistrés** (`sync_log`) : 26
84 84
85 85 ## Erreurs & dépannage
86 86
modified docs/connecteurs/portagecybertech.md +5 −5
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/portagecybertech.md
7 7 Rôle : Fiche connecteur — Portage CyberTech (employeur direct, ATS bamboohr)
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -36,7 +36,7 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
36 36
37 37 ## Champs → schéma
38 38
39 −Complétude mesurée sur les **6 offres actives** de la source (base live, 2026-08-19 03:39 EDT).
39 +Complétude mesurée sur les **6 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
40 40
41 41 | Champ (`jobs.*`) | Rôle | Complétude |
42 42 |---|---|---|
@@ -77,15 +77,15 @@ Exemple réel : *Spécialiste DevOps / DevOps Specialist* — Québec · $75,000
77 77
78 78 ## Volumétrie & complétude live
79 79
80 −*(mesuré le 2026-08-19 03:39 EDT dans `data/jobka.db`)*
80 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
81 81
82 82 - **Offres en base** : 6 (dont **6 actives**, 0 masquées comme doublons `dup_of`)
83 83 - **Salaire** : 1/6 actives (17 %)
84 84 - **GPS** : 6/6 actives (100 %)
85 85 - **Mode** : 6/6 actives (100 %)
86 86 - **Parution** : 6/6 actives (100 %)
87 −- **Dernier sync** : 2026-08-19 02:10 — trouvées 6, +0, ~6, -0
88 −- **Syncs enregistrés** (`sync_log`) : 25
87 +- **Dernier sync** : 2026-08-19 04:16 — trouvées 6, +0, ~0, -0
88 +- **Syncs enregistrés** (`sync_log`) : 26
89 89
90 90 ## Erreurs & dépannage
91 91
modified docs/connecteurs/potloc.md +5 −5
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/potloc.md
7 7 Rôle : Fiche connecteur — Potloc (employeur direct, ATS lever)
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -36,7 +36,7 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
36 36
37 37 ## Champs → schéma
38 38
39 −Complétude mesurée sur les **2 offres actives** de la source (base live, 2026-08-19 03:39 EDT).
39 +Complétude mesurée sur les **2 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
40 40
41 41 | Champ (`jobs.*`) | Rôle | Complétude |
42 42 |---|---|---|
@@ -72,15 +72,15 @@ Exemple réel : *Développeur Full Stack Senior / Senior Full Stack Developer
72 72
73 73 ## Volumétrie & complétude live
74 74
75 −*(mesuré le 2026-08-19 03:39 EDT dans `data/jobka.db`)*
75 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
76 76
77 77 - **Offres en base** : 2 (dont **2 actives**, 0 masquées comme doublons `dup_of`)
78 78 - **Salaire** : 0/2 actives (0 %)
79 79 - **GPS** : 2/2 actives (100 %)
80 80 - **Mode** : 2/2 actives (100 %)
81 81 - **Parution** : 2/2 actives (100 %)
82 −- **Dernier sync** : 2026-08-19 02:10 — trouvées 2, +0, ~2, -0
83 −- **Syncs enregistrés** (`sync_log`) : 26
82 +- **Dernier sync** : 2026-08-19 04:16 — trouvées 2, +0, ~0, -0
83 +- **Syncs enregistrés** (`sync_log`) : 27
84 84
85 85 ## Erreurs & dépannage
86 86
modified docs/connecteurs/pouletrouge.md +5 −5
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/pouletrouge.md
7 7 Rôle : Fiche connecteur — Poulet Rouge (employeur direct, ATS bamboohr)
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -36,7 +36,7 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
36 36
37 37 ## Champs → schéma
38 38
39 −Complétude mesurée sur les **1 offres actives** de la source (base live, 2026-08-19 03:39 EDT).
39 +Complétude mesurée sur les **1 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
40 40
41 41 | Champ (`jobs.*`) | Rôle | Complétude |
42 42 |---|---|---|
@@ -77,15 +77,15 @@ Exemple réel : *Adjoint·e au Vice-président, Développement des franchises*
77 77
78 78 ## Volumétrie & complétude live
79 79
80 −*(mesuré le 2026-08-19 03:39 EDT dans `data/jobka.db`)*
80 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
81 81
82 82 - **Offres en base** : 1 (dont **1 actives**, 0 masquées comme doublons `dup_of`)
83 83 - **Salaire** : 0/1 actives (0 %)
84 84 - **GPS** : 1/1 actives (100 %)
85 85 - **Mode** : 1/1 actives (100 %)
86 86 - **Parution** : 1/1 actives (100 %)
87 −- **Dernier sync** : 2026-08-19 02:10 — trouvées 1, +0, ~1, -0
88 −- **Syncs enregistrés** (`sync_log`) : 13
87 +- **Dernier sync** : 2026-08-19 04:16 — trouvées 1, +0, ~0, -0
88 +- **Syncs enregistrés** (`sync_log`) : 14
89 89
90 90 ## Erreurs & dépannage
91 91
added docs/connecteurs/produits_kruger.md +116 −0
@@ -0,0 +1,116 @@
1 +<!--
2 +=============================================================================
3 +Job·Ka — Groupe KA
4 +Auteur : Simon-Pierre Boucher
5 +Contact : contact@spboucher.ai
6 +Fichier : docs/connecteurs/produits_kruger.md
7 +Rôle : Fiche connecteur — Produits Kruger (employeur direct, ATS taleo_tbe)
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 + relancer le script pour régénérer.
10 +=============================================================================
11 +-->
12 +
13 +# Produits Kruger (`produits_kruger`)
14 +
15 +**Employeur direct** · Plateforme ATS : [`taleo_tbe`](ats-taleo_tbe.md) · Statut registre : actif · Connecteur : `jobka/connectors/produits_kruger.py`
16 +
17 +## Description
18 +
19 +- **Site** : [Produits Kruger](https://www.produitskruger.ca)
20 +- **Page carrières** : https://tre.tbe.taleo.net/tre01/ats/careers/v2/jobSearch?org=KRUGER2&cws=78
21 +- **Secteurs** : Manufacturier, Biens de consommation
22 +- **Région** : Gatineau, Crabtree
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_tbe.md`](ats-taleo_tbe.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 +| `CWS` | `78` |
33 +| `EMPLOYER` | `Produits Kruger` |
34 +| `HOST` | `tre` |
35 +| `INST` | `tre01` |
36 +| `ORG` | `KRUGER2` |
37 +- **Throttle** : 1.0 s entre requêtes.
38 +- **Filtre Québec** : seuls les postes localisés au Québec sont conservés (facette serveur quand l'ATS en offre une, sinon `is_quebec_location` côté client).
39 +
40 +## Champs → schéma
41 +
42 +Complétude mesurée sur les **1 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
43 +
44 +| Champ (`jobs.*`) | Rôle | Complétude |
45 +|---|---|---|
46 +| `title` — Titre | titre du poste | 100 % |
47 +| `employer` — Employeur | nom de l'entreprise | 100 % |
48 +| `url` — URL | lien direct vers l'offre originale | 100 % |
49 +| `description` — Description | texte complet (HTML nettoyé) | 100 % |
50 +| `city` — Ville | municipalité normalisée | 100 % |
51 +| `region` — Région | région administrative | 100 % |
52 +| `address` — Adresse | adresse du lieu de travail | 100 % |
53 +| `postal_code` — Code postal | code postal si publié | 0 % |
54 +| `work_mode` — Mode | presentiel / hybride / teletravail | 0 % |
55 +| `employment_type` — Type | temps_plein / temps_partiel / … | 100 % |
56 +| `salary` — Salaire ($) | bornes numériques normalisées $/h et $/an | 0 % |
57 +| `salary_label` — Libellé salaire | texte salarial original | 0 % |
58 +| `benefits` — Avantages | avantages sociaux publiés (JSON) | 0 % |
59 +| `requirements` — Exigences | scolarité, expérience, langues (JSON) | 0 % |
60 +| `date_posted` — Date de parution | ISO 8601 | 100 % |
61 +| `date_deadline` — Date limite | date limite pour postuler | 0 % |
62 +| `category` — Catégorie | taxonomie interne (TI, Santé, …) | 100 % |
63 +| `language` — Langue | fr / en / bilingue (source ou heuristique) | 100 % |
64 +| `company_logo` — Logo employeur | URL du logo si exposé par la source | 0 % |
65 +| `apply_url` — Candidature | lien de candidature directe | 0 % |
66 +| `gps` — GPS | lat/lng (géocodage sans invention) | 0 % |
67 +
68 +Exemple réel : *Transportation Coordinator (18-month contract)* — Gatineau (QC) · ∅ · parue le 2026-08-04.
69 +
70 +## Fréquence & budgets
71 +
72 +- **Cadence** : resynchronisation **horaire** (PM2 `job-ka-sync` = `run.py watch 60`), suivie du géocodage en lot puis de la déduplication inter-sources.
73 +- **Throttle** : 1.0 s minimum entre deux requêtes vers la source (`request_delay`).
74 +- **Budgets / plafonds (variables d'environnement)** :
75 +
76 +| Variable | Défaut |
77 +|---|---|
78 +| `JOBKA_TBE_DETAIL_LIMIT` | `60` |
79 +- 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.
80 +
81 +## Volumétrie & complétude live
82 +
83 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
84 +
85 +- **Offres en base** : 1 (dont **1 actives**, 0 masquées comme doublons `dup_of`)
86 +- **Salaire** : 0/1 actives (0 %)
87 +- **GPS** : 0/1 actives (0 %)
88 +- **Mode** : 0/1 actives (0 %)
89 +- **Parution** : 1/1 actives (100 %)
90 +- **Dernier sync** : 2026-08-19 04:48 — trouvées 1, +1, ~0, -0
91 +- **Syncs enregistrés** (`sync_log`) : 1
92 +
93 +## Erreurs & dépannage
94 +
95 +Aucune erreur dans `sync_log` pour cette source.
96 +
97 +- Rejouer un sync isolé : `.venv/bin/python run.py sync produits_kruger` puis inspecter `sync_log` : `sqlite3 data/jobka.db "SELECT * FROM sync_log WHERE source='produits_kruger' ORDER BY ts DESC LIMIT 5;"`
98 +- 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`.
99 +
100 +## Licence / conformité
101 +
102 +**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 Produits Kruger » 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.
103 +
104 +## Historique
105 +
106 +**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 :
107 +- `fd4bfc8` qualité lieux : rejet des villes hors Québec, bâtiments McGill → Montréal ;
108 +- `5a66f48` +59 employeurs (sondage massif d'ATS + détection de pages carrières) ;
109 +- `4917d57` 8 nouveaux ATS (Taleo, Njoyn, UltiPro, iCIMS, SuccessFactors, ADP WFN, Digital Recruiters, Workland) + 23 employeurs publics/parapublics ;
110 +- `f6e7571` portails Guichet-Emplois, Jobillico, Espresso-Jobs — l'offre directe gagne toujours la canonique (dédup) ;
111 +- `744cbfc` badge « Offre directe », stats directes/portails, dépôt direct employeurs ;
112 +- `1604ff9` reprise sur coupure WAF Guichet-Emplois (retry + acquis partiel).
113 +
114 +Commits touchant `jobka/connectors/produits_kruger.py` :
115 +
116 +- `89f9713` 2026-08-19 Nouvelle famille ATS Taleo Business Edition (taleo_tbe) : flux RSS public + JSON-LD des pages requisition (lieu, dates, description complète), filtre Québec différé tant que le détail n'est pas visité. Connecteurs : Sépaq (99), Kruger (corporatif, filtre QC), Produits Kruger, exo (25), HEC Montréal personnel (9) + corps professoral (9). Fixture sepaq (121 requêtes rejouables). TÉLUQ écarté (tenant TBE fermé).
modified docs/connecteurs/promutuel.md +6 −6
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/promutuel.md
7 7 Rôle : Fiche connecteur — Promutuel Assurance (employeur direct, ATS workday)
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -38,7 +38,7 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
38 38
39 39 ## Champs → schéma
40 40
41 −Complétude mesurée sur les **37 offres actives** de la source (base live, 2026-08-19 03:39 EDT).
41 +Complétude mesurée sur les **37 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
42 42
43 43 | Champ (`jobs.*`) | Rôle | Complétude |
44 44 |---|---|---|
@@ -64,7 +64,7 @@ Complétude mesurée sur les **37 offres actives** de la source (base live, 2026
64 64 | `apply_url` — Candidature | lien de candidature directe | 100 % |
65 65 | `gps` — GPS | lat/lng (géocodage sans invention) | 100 % |
66 66
67 −Exemple réel : *Analyste de risque en assurance des particuliers* — Joliette · ∅ · parue le 2026-08-18.
67 +Exemple réel : *Analyste de risque en assurance des particuliers* — Joliette · ∅ · parue le 2026-08-17.
68 68
69 69 ## Fréquence & budgets
70 70
@@ -79,15 +79,15 @@ Exemple réel : *Analyste de risque en assurance des particuliers* — Joliette
79 79
80 80 ## Volumétrie & complétude live
81 81
82 −*(mesuré le 2026-08-19 03:39 EDT dans `data/jobka.db`)*
82 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
83 83
84 84 - **Offres en base** : 38 (dont **37 actives**, 0 masquées comme doublons `dup_of`)
85 85 - **Salaire** : 0/37 actives (0 %)
86 86 - **GPS** : 37/37 actives (100 %)
87 87 - **Mode** : 6/37 actives (16 %)
88 88 - **Parution** : 37/37 actives (100 %)
89 −- **Dernier sync** : 2026-08-19 02:11 — trouvées 37, +0, ~37, -0
90 −- **Syncs enregistrés** (`sync_log`) : 13
89 +- **Dernier sync** : 2026-08-19 04:16 — trouvées 37, +0, ~20, -0
90 +- **Syncs enregistrés** (`sync_log`) : 14
91 91
92 92 ## Erreurs & dépannage
93 93
modified docs/connecteurs/qsl.md +5 −5
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/qsl.md
7 7 Rôle : Fiche connecteur — QSL (employeur direct, ATS smartrecruiters)
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -36,7 +36,7 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
36 36
37 37 ## Champs → schéma
38 38
39 −Complétude mesurée sur les **37 offres actives** de la source (base live, 2026-08-19 03:39 EDT).
39 +Complétude mesurée sur les **37 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
40 40
41 41 | Champ (`jobs.*`) | Rôle | Complétude |
42 42 |---|---|---|
@@ -77,15 +77,15 @@ Exemple réel : *Contremaître portuaire* — Québec · Salaire de base compét
77 77
78 78 ## Volumétrie & complétude live
79 79
80 −*(mesuré le 2026-08-19 03:39 EDT dans `data/jobka.db`)*
80 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
81 81
82 82 - **Offres en base** : 37 (dont **37 actives**, 0 masquées comme doublons `dup_of`)
83 83 - **Salaire** : 14/37 actives (38 %)
84 84 - **GPS** : 37/37 actives (100 %)
85 85 - **Mode** : 0/37 actives (0 %)
86 86 - **Parution** : 37/37 actives (100 %)
87 −- **Dernier sync** : 2026-08-19 02:11 — trouvées 37, +0, ~37, -0
88 −- **Syncs enregistrés** (`sync_log`) : 13
87 +- **Dernier sync** : 2026-08-19 04:16 — trouvées 37, +0, ~0, -0
88 +- **Syncs enregistrés** (`sync_log`) : 14
89 89
90 90 ## Erreurs & dépannage
91 91
modified docs/connecteurs/rcgt.md +6 −6
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/rcgt.md
7 7 Rôle : Fiche connecteur — Raymond Chabot Grant Thornton (employeur direct, ATS workday)
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -38,7 +38,7 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
38 38
39 39 ## Champs → schéma
40 40
41 −Complétude mesurée sur les **5 offres actives** de la source (base live, 2026-08-19 03:39 EDT).
41 +Complétude mesurée sur les **5 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
42 42
43 43 | Champ (`jobs.*`) | Rôle | Complétude |
44 44 |---|---|---|
@@ -64,7 +64,7 @@ Complétude mesurée sur les **5 offres actives** de la source (base live, 2026-
64 64 | `apply_url` — Candidature | lien de candidature directe | 100 % |
65 65 | `gps` — GPS | lat/lng (géocodage sans invention) | 100 % |
66 66
67 −Exemple réel : *Chargée ou chargé de dossiers* — Québec · ∅ · parue le 2026-08-14.
67 +Exemple réel : *Chargée ou chargé de dossiers* — Québec · ∅ · parue le 2026-08-13.
68 68
69 69 ## Fréquence & budgets
70 70
@@ -79,15 +79,15 @@ Exemple réel : *Chargée ou chargé de dossiers* — Québec · ∅ · parue le
79 79
80 80 ## Volumétrie & complétude live
81 81
82 −*(mesuré le 2026-08-19 03:39 EDT dans `data/jobka.db`)*
82 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
83 83
84 84 - **Offres en base** : 5 (dont **5 actives**, 0 masquées comme doublons `dup_of`)
85 85 - **Salaire** : 0/5 actives (0 %)
86 86 - **GPS** : 5/5 actives (100 %)
87 87 - **Mode** : 1/5 actives (20 %)
88 88 - **Parution** : 5/5 actives (100 %)
89 −- **Dernier sync** : 2026-08-19 02:11 — trouvées 5, +0, ~5, -0
90 −- **Syncs enregistrés** (`sync_log`) : 13
89 +- **Dernier sync** : 2026-08-19 04:16 — trouvées 5, +0, ~3, -0
90 +- **Syncs enregistrés** (`sync_log`) : 14
91 91
92 92 ## Erreurs & dépannage
93 93
modified docs/connecteurs/reitmanscanadalteltd.md +5 −5
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/reitmanscanadalteltd.md
7 7 Rôle : Fiche connecteur — Reitmans (employeur direct, ATS smartrecruiters)
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -36,7 +36,7 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
36 36
37 37 ## Champs → schéma
38 38
39 −Complétude mesurée sur les **138 offres actives** de la source (base live, 2026-08-19 03:39 EDT).
39 +Complétude mesurée sur les **138 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
40 40
41 41 | Champ (`jobs.*`) | Rôle | Complétude |
42 42 |---|---|---|
@@ -77,15 +77,15 @@ Exemple réel : *Gérant.e adjoint.e - Mega Centre Sainte Foy* — Québec · Sa
77 77
78 78 ## Volumétrie & complétude live
79 79
80 −*(mesuré le 2026-08-19 03:39 EDT dans `data/jobka.db`)*
80 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
81 81
82 82 - **Offres en base** : 145 (dont **138 actives**, 0 masquées comme doublons `dup_of`)
83 83 - **Salaire** : 31/138 actives (22 %)
84 84 - **GPS** : 138/138 actives (100 %)
85 85 - **Mode** : 40/138 actives (29 %)
86 86 - **Parution** : 138/138 actives (100 %)
87 −- **Dernier sync** : 2026-08-19 02:11 — trouvées 138, +0, ~138, -0
88 −- **Syncs enregistrés** (`sync_log`) : 25
87 +- **Dernier sync** : 2026-08-19 04:16 — trouvées 138, +0, ~0, -0
88 +- **Syncs enregistrés** (`sync_log`) : 26
89 89
90 90 ## Erreurs & dépannage
91 91
modified docs/connecteurs/reseau_mieux_etre.md +5 −5
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/reseau_mieux_etre.md
7 7 Rôle : Fiche connecteur — Réseau Mieux-Être (employeur direct, ATS breezy)
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -36,7 +36,7 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
36 36
37 37 ## Champs → schéma
38 38
39 −Complétude mesurée sur les **15 offres actives** de la source (base live, 2026-08-19 03:39 EDT).
39 +Complétude mesurée sur les **15 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
40 40
41 41 | Champ (`jobs.*`) | Rôle | Complétude |
42 42 |---|---|---|
@@ -72,15 +72,15 @@ Exemple réel : *Infirmier(ère) auxiliaire– Clinique St-Laurent* — Montréa
72 72
73 73 ## Volumétrie & complétude live
74 74
75 −*(mesuré le 2026-08-19 03:39 EDT dans `data/jobka.db`)*
75 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
76 76
77 77 - **Offres en base** : 15 (dont **15 actives**, 0 masquées comme doublons `dup_of`)
78 78 - **Salaire** : 0/15 actives (0 %)
79 79 - **GPS** : 15/15 actives (100 %)
80 80 - **Mode** : 2/15 actives (13 %)
81 81 - **Parution** : 15/15 actives (100 %)
82 −- **Dernier sync** : 2026-08-19 02:11 — trouvées 15, +0, ~15, -0
83 −- **Syncs enregistrés** (`sync_log`) : 25
82 +- **Dernier sync** : 2026-08-19 04:16 — trouvées 15, +0, ~0, -0
83 +- **Syncs enregistrés** (`sync_log`) : 26
84 84
85 85 ## Erreurs & dépannage
86 86
modified docs/connecteurs/rethinkcanada.md +5 −5
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/rethinkcanada.md
7 7 Rôle : Fiche connecteur — Rethink (employeur direct, ATS bamboohr)
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -36,7 +36,7 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
36 36
37 37 ## Champs → schéma
38 38
39 −Complétude mesurée sur les **3 offres actives** de la source (base live, 2026-08-19 03:39 EDT).
39 +Complétude mesurée sur les **3 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
40 40
41 41 | Champ (`jobs.*`) | Rôle | Complétude |
42 42 |---|---|---|
@@ -77,15 +77,15 @@ Exemple réel : *Directeur.trice-conseil* — Montréal · ∅ · parue le 2026-
77 77
78 78 ## Volumétrie & complétude live
79 79
80 −*(mesuré le 2026-08-19 03:39 EDT dans `data/jobka.db`)*
80 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
81 81
82 82 - **Offres en base** : 3 (dont **3 actives**, 0 masquées comme doublons `dup_of`)
83 83 - **Salaire** : 0/3 actives (0 %)
84 84 - **GPS** : 3/3 actives (100 %)
85 85 - **Mode** : 3/3 actives (100 %)
86 86 - **Parution** : 3/3 actives (100 %)
87 −- **Dernier sync** : 2026-08-19 02:11 — trouvées 3, +0, ~3, -0
88 −- **Syncs enregistrés** (`sync_log`) : 25
87 +- **Dernier sync** : 2026-08-19 04:16 — trouvées 3, +0, ~0, -0
88 +- **Syncs enregistrés** (`sync_log`) : 26
89 89
90 90 ## Erreurs & dépannage
91 91
modified docs/connecteurs/riotinto.md +6 −6
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/riotinto.md
7 7 Rôle : Fiche connecteur — Rio Tinto (employeur direct, ATS workday)
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -38,7 +38,7 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
38 38
39 39 ## Champs → schéma
40 40
41 −Complétude mesurée sur les **23 offres actives** de la source (base live, 2026-08-19 03:39 EDT).
41 +Complétude mesurée sur les **23 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
42 42
43 43 | Champ (`jobs.*`) | Rôle | Complétude |
44 44 |---|---|---|
@@ -64,7 +64,7 @@ Complétude mesurée sur les **23 offres actives** de la source (base live, 2026
64 64 | `apply_url` — Candidature | lien de candidature directe | 100 % |
65 65 | `gps` — GPS | lat/lng (géocodage sans invention) | 100 % |
66 66
67 −Exemple réel : *Ingénieur(e) de maintenance* — Sorel-Tracy · ∅ · parue le 2026-08-18.
67 +Exemple réel : *Ingénieur(e) de maintenance* — Sorel-Tracy · ∅ · parue le 2026-08-17.
68 68
69 69 ## Fréquence & budgets
70 70
@@ -79,15 +79,15 @@ Exemple réel : *Ingénieur(e) de maintenance* — Sorel-Tracy · ∅ · parue l
79 79
80 80 ## Volumétrie & complétude live
81 81
82 −*(mesuré le 2026-08-19 03:39 EDT dans `data/jobka.db`)*
82 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
83 83
84 84 - **Offres en base** : 23 (dont **23 actives**, 0 masquées comme doublons `dup_of`)
85 85 - **Salaire** : 0/23 actives (0 %)
86 86 - **GPS** : 23/23 actives (100 %)
87 87 - **Mode** : 1/23 actives (4 %)
88 88 - **Parution** : 23/23 actives (100 %)
89 −- **Dernier sync** : 2026-08-19 02:12 — trouvées 23, +0, ~23, -0
90 −- **Syncs enregistrés** (`sync_log`) : 13
89 +- **Dernier sync** : 2026-08-19 04:17 — trouvées 23, +0, ~16, -0
90 +- **Syncs enregistrés** (`sync_log`) : 14
91 91
92 92 ## Erreurs & dépannage
93 93
modified docs/connecteurs/robotiq.md +5 −5
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/robotiq.md
7 7 Rôle : Fiche connecteur — Robotiq (employeur direct, ATS bamboohr)
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -36,7 +36,7 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
36 36
37 37 ## Champs → schéma
38 38
39 −Complétude mesurée sur les **7 offres actives** de la source (base live, 2026-08-19 03:39 EDT).
39 +Complétude mesurée sur les **7 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
40 40
41 41 | Champ (`jobs.*`) | Rôle | Complétude |
42 42 |---|---|---|
@@ -77,15 +77,15 @@ Exemple réel : *Développeur.se Web Fullstack (Angular)* — Québec · ∅ ·
77 77
78 78 ## Volumétrie & complétude live
79 79
80 −*(mesuré le 2026-08-19 03:39 EDT dans `data/jobka.db`)*
80 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
81 81
82 82 - **Offres en base** : 7 (dont **7 actives**, 0 masquées comme doublons `dup_of`)
83 83 - **Salaire** : 0/7 actives (0 %)
84 84 - **GPS** : 7/7 actives (100 %)
85 85 - **Mode** : 7/7 actives (100 %)
86 86 - **Parution** : 7/7 actives (100 %)
87 −- **Dernier sync** : 2026-08-19 02:12 — trouvées 7, +0, ~7, -0
88 −- **Syncs enregistrés** (`sync_log`) : 25
87 +- **Dernier sync** : 2026-08-19 04:17 — trouvées 7, +0, ~0, -0
88 +- **Syncs enregistrés** (`sync_log`) : 26
89 89
90 90 ## Erreurs & dépannage
91 91
modified docs/connecteurs/rodeofx.md +5 −5
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/rodeofx.md
7 7 Rôle : Fiche connecteur — Rodeo FX (employeur direct, ATS smartrecruiters)
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -36,7 +36,7 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
36 36
37 37 ## Champs → schéma
38 38
39 −Complétude mesurée sur les **20 offres actives** de la source (base live, 2026-08-19 03:39 EDT).
39 +Complétude mesurée sur les **20 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
40 40
41 41 | Champ (`jobs.*`) | Rôle | Complétude |
42 42 |---|---|---|
@@ -77,15 +77,15 @@ Exemple réel : *FX Artist - Mid and Senior - Multiple Positions* — Montréal
77 77
78 78 ## Volumétrie & complétude live
79 79
80 −*(mesuré le 2026-08-19 03:39 EDT dans `data/jobka.db`)*
80 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
81 81
82 82 - **Offres en base** : 20 (dont **20 actives**, 0 masquées comme doublons `dup_of`)
83 83 - **Salaire** : 0/20 actives (0 %)
84 84 - **GPS** : 20/20 actives (100 %)
85 85 - **Mode** : 2/20 actives (10 %)
86 86 - **Parution** : 20/20 actives (100 %)
87 −- **Dernier sync** : 2026-08-19 02:12 — trouvées 20, +0, ~20, -0
88 −- **Syncs enregistrés** (`sync_log`) : 25
87 +- **Dernier sync** : 2026-08-19 04:17 — trouvées 20, +0, ~0, -0
88 +- **Syncs enregistrés** (`sync_log`) : 26
89 89
90 90 ## Erreurs & dépannage
91 91
modified docs/connecteurs/rtc_quebec.md +5 −5
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/rtc_quebec.md
7 7 Rôle : Fiche connecteur — Réseau de transport de la Capitale (employeur direct, ATS njoyn)
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -40,7 +40,7 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
40 40
41 41 ## Champs → schéma
42 42
43 −Complétude mesurée sur les **18 offres actives** de la source (base live, 2026-08-19 03:39 EDT).
43 +Complétude mesurée sur les **18 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
44 44
45 45 | Champ (`jobs.*`) | Rôle | Complétude |
46 46 |---|---|---|
@@ -81,15 +81,15 @@ Exemple réel : *Coordonnateur – évolutions technologiques* — ∅ · ∅ ·
81 81
82 82 ## Volumétrie & complétude live
83 83
84 −*(mesuré le 2026-08-19 03:39 EDT dans `data/jobka.db`)*
84 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
85 85
86 86 - **Offres en base** : 21 (dont **18 actives**, 0 masquées comme doublons `dup_of`)
87 87 - **Salaire** : 0/18 actives (0 %)
88 88 - **GPS** : 0/18 actives (0 %)
89 89 - **Mode** : 0/18 actives (0 %)
90 90 - **Parution** : 0/18 actives (0 %)
91 −- **Dernier sync** : 2026-08-19 02:13 — trouvées 18, +0, ~18, -0
92 −- **Syncs enregistrés** (`sync_log`) : 13
91 +- **Dernier sync** : 2026-08-19 04:17 — trouvées 18, +0, ~0, -0
92 +- **Syncs enregistrés** (`sync_log`) : 14
93 93
94 94 ## Erreurs & dépannage
95 95
modified docs/connecteurs/samsara.md +5 −5
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/samsara.md
7 7 Rôle : Fiche connecteur — Samsara (employeur direct, ATS greenhouse)
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -36,7 +36,7 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
36 36
37 37 ## Champs → schéma
38 38
39 −Complétude mesurée sur les **1 offres actives** de la source (base live, 2026-08-19 03:39 EDT).
39 +Complétude mesurée sur les **1 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
40 40
41 41 | Champ (`jobs.*`) | Rôle | Complétude |
42 42 |---|---|---|
@@ -72,15 +72,15 @@ Exemple réel : *Mid-Market Account Executive - French Fluent* — Montréal ·
72 72
73 73 ## Volumétrie & complétude live
74 74
75 −*(mesuré le 2026-08-19 03:39 EDT dans `data/jobka.db`)*
75 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
76 76
77 77 - **Offres en base** : 1 (dont **1 actives**, 0 masquées comme doublons `dup_of`)
78 78 - **Salaire** : 1/1 actives (100 %)
79 79 - **GPS** : 1/1 actives (100 %)
80 80 - **Mode** : 1/1 actives (100 %)
81 81 - **Parution** : 1/1 actives (100 %)
82 −- **Dernier sync** : 2026-08-19 02:13 — trouvées 1, +0, ~1, -0
83 −- **Syncs enregistrés** (`sync_log`) : 25
82 +- **Dernier sync** : 2026-08-19 04:17 — trouvées 1, +0, ~0, -0
83 +- **Syncs enregistrés** (`sync_log`) : 26
84 84
85 85 ## Erreurs & dépannage
86 86
modified docs/connecteurs/sante_montreal.md +21 −21
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/sante_montreal.md
7 7 Rôle : Fiche connecteur — Santé Québec — Montréal (employeur direct, ATS njoyn)
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -40,31 +40,31 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
40 40
41 41 ## Champs → schéma
42 42
43 −Complétude mesurée sur les **50 offres actives** de la source (base live, 2026-08-19 03:39 EDT).
43 +Complétude mesurée sur les **762 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
44 44
45 45 | Champ (`jobs.*`) | Rôle | Complétude |
46 46 |---|---|---|
47 47 | `title` — Titre | titre du poste | 100 % |
48 48 | `employer` — Employeur | nom de l'entreprise | 100 % |
49 49 | `url` — URL | lien direct vers l'offre originale | 100 % |
50 −| `description` — Description | texte complet (HTML nettoyé) | 100 % |
51 −| `city` — Ville | municipalité normalisée | 100 % |
52 −| `region` — Région | région administrative | 100 % |
50 +| `description` — Description | texte complet (HTML nettoyé) | 98 % |
51 +| `city` — Ville | municipalité normalisée | 98 % |
52 +| `region` — Région | région administrative | 96 % |
53 53 | `address` — Adresse | adresse du lieu de travail | 0 % |
54 54 | `postal_code` — Code postal | code postal si publié | 0 % |
55 −| `work_mode` — Mode | presentiel / hybride / teletravail | 2 % |
56 −| `employment_type` — Type | temps_plein / temps_partiel / … | 54 % |
57 −| `salary` — Salaire ($) | bornes numériques normalisées $/h et $/an | 100 % |
58 −| `salary_label` — Libellé salaire | texte salarial original | 100 % |
59 −| `benefits` — Avantages | avantages sociaux publiés (JSON) | 0 % |
55 +| `work_mode` — Mode | presentiel / hybride / teletravail | 1 % |
56 +| `employment_type` — Type | temps_plein / temps_partiel / … | 64 % |
57 +| `salary` — Salaire ($) | bornes numériques normalisées $/h et $/an | 97 % |
58 +| `salary_label` — Libellé salaire | texte salarial original | 99 % |
59 +| `benefits` — Avantages | avantages sociaux publiés (JSON) | 2 % |
60 60 | `requirements` — Exigences | scolarité, expérience, langues (JSON) | 100 % |
61 61 | `date_posted` — Date de parution | ISO 8601 | 100 % |
62 62 | `date_deadline` — Date limite | date limite pour postuler | 0 % |
63 −| `category` — Catégorie | taxonomie interne (TI, Santé, …) | 92 % |
64 −| `language` — Langue | fr / en / bilingue (source ou heuristique) | 100 % |
63 +| `category` — Catégorie | taxonomie interne (TI, Santé, …) | 94 % |
64 +| `language` — Langue | fr / en / bilingue (source ou heuristique) | 98 % |
65 65 | `company_logo` — Logo employeur | URL du logo si exposé par la source | 0 % |
66 66 | `apply_url` — Candidature | lien de candidature directe | 0 % |
67 −| `gps` — GPS | lat/lng (géocodage sans invention) | 100 % |
67 +| `gps` — GPS | lat/lng (géocodage sans invention) | 8 % |
68 68
69 69 Exemple réel : *Chef de service - aide à domicile - secteur Pointe-Aux-Trembles (Intérim)* — Montréal · 96770 $ - 125799 $ Annuelle · parue le 2026-08-18.
70 70
@@ -81,15 +81,15 @@ Exemple réel : *Chef de service - aide à domicile - secteur Pointe-Aux-Tremble
81 81
82 82 ## Volumétrie & complétude live
83 83
84 −*(mesuré le 2026-08-19 03:39 EDT dans `data/jobka.db`)*
84 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
85 85
86 −- **Offres en base** : 60 (dont **50 actives**, 0 masquées comme doublons `dup_of`)
87 −- **Salaire** : 50/50 actives (100 %)
88 −- **GPS** : 50/50 actives (100 %)
89 −- **Mode** : 1/50 actives (2 %)
90 −- **Parution** : 50/50 actives (100 %)
91 −- **Dernier sync** : 2026-08-19 02:13 — trouvées 50, +0, ~50, -5
92 −- **Syncs enregistrés** (`sync_log`) : 14
86 +- **Offres en base** : 763 (dont **762 actives**, 0 masquées comme doublons `dup_of`)
87 +- **Salaire** : 738/762 actives (97 %)
88 +- **GPS** : 59/762 actives (8 %)
89 +- **Mode** : 5/762 actives (1 %)
90 +- **Parution** : 762/762 actives (100 %)
91 +- **Dernier sync** : 2026-08-19 05:30 — trouvées 762, +703, ~9, -0
92 +- **Syncs enregistrés** (`sync_log`) : 16
93 93
94 94 ## Erreurs & dépannage
95 95
modified docs/connecteurs/sante_quebec.md +6 −6
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/sante_quebec.md
7 7 Rôle : Fiche connecteur — Santé Québec (employeur direct, ATS digitalrecruiters)
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -37,7 +37,7 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
37 37
38 38 ## Champs → schéma
39 39
40 −Complétude mesurée sur les **41 offres actives** de la source (base live, 2026-08-19 03:39 EDT).
40 +Complétude mesurée sur les **41 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
41 41
42 42 | Champ (`jobs.*`) | Rôle | Complétude |
43 43 |---|---|---|
@@ -78,15 +78,15 @@ Exemple réel : *Spécialiste en procédés administratifs à la Direction de l
78 78
79 79 ## Volumétrie & complétude live
80 80
81 −*(mesuré le 2026-08-19 03:39 EDT dans `data/jobka.db`)*
81 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
82 82
83 −- **Offres en base** : 51 (dont **41 actives**, 0 masquées comme doublons `dup_of`)
83 +- **Offres en base** : 51 (dont **41 actives**, 6 masquées comme doublons `dup_of`)
84 84 - **Salaire** : 40/41 actives (98 %)
85 85 - **GPS** : 28/41 actives (68 %)
86 86 - **Mode** : 0/41 actives (0 %)
87 87 - **Parution** : 41/41 actives (100 %)
88 −- **Dernier sync** : 2026-08-19 02:13 — trouvées 41, +0, ~41, -0
89 −- **Syncs enregistrés** (`sync_log`) : 14
88 +- **Dernier sync** : 2026-08-19 04:17 — trouvées 41, +0, ~0, -0
89 +- **Syncs enregistrés** (`sync_log`) : 15
90 90
91 91 ## Erreurs & dépannage
92 92
modified docs/connecteurs/saputo.md +12 −12
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/saputo.md
7 7 Rôle : Fiche connecteur — Saputo (employeur direct, ATS workday)
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -38,7 +38,7 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
38 38
39 39 ## Champs → schéma
40 40
41 −Complétude mesurée sur les **24 offres actives** de la source (base live, 2026-08-19 03:39 EDT).
41 +Complétude mesurée sur les **24 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
42 42
43 43 | Champ (`jobs.*`) | Rôle | Complétude |
44 44 |---|---|---|
@@ -50,10 +50,10 @@ Complétude mesurée sur les **24 offres actives** de la source (base live, 2026
50 50 | `region` — Région | région administrative | 100 % |
51 51 | `address` — Adresse | adresse du lieu de travail | 0 % |
52 52 | `postal_code` — Code postal | code postal si publié | 0 % |
53 −| `work_mode` — Mode | presentiel / hybride / teletravail | 0 % |
53 +| `work_mode` — Mode | presentiel / hybride / teletravail | 100 % |
54 54 | `employment_type` — Type | temps_plein / temps_partiel / … | 100 % |
55 −| `salary` — Salaire ($) | bornes numériques normalisées $/h et $/an | 79 % |
56 −| `salary_label` — Libellé salaire | texte salarial original | 79 % |
55 +| `salary` — Salaire ($) | bornes numériques normalisées $/h et $/an | 75 % |
56 +| `salary_label` — Libellé salaire | texte salarial original | 75 % |
57 57 | `benefits` — Avantages | avantages sociaux publiés (JSON) | 0 % |
58 58 | `requirements` — Exigences | scolarité, expérience, langues (JSON) | 0 % |
59 59 | `date_posted` — Date de parution | ISO 8601 | 100 % |
@@ -61,10 +61,10 @@ Complétude mesurée sur les **24 offres actives** de la source (base live, 2026
61 61 | `category` — Catégorie | taxonomie interne (TI, Santé, …) | 67 % |
62 62 | `language` — Langue | fr / en / bilingue (source ou heuristique) | 100 % |
63 63 | `company_logo` — Logo employeur | URL du logo si exposé par la source | 0 % |
64 −| `apply_url` — Candidature | lien de candidature directe | 0 % |
64 +| `apply_url` — Candidature | lien de candidature directe | 100 % |
65 65 | `gps` — GPS | lat/lng (géocodage sans invention) | 100 % |
66 66
67 −Exemple réel : *Internal Auditor* — Montréal · Salary Range: From 68,630$ to 90,080$ (+ business allowance) · parue le 2026-08-15.
67 +Exemple réel : *Senior Director, People Strategy & Business Initiatives* — Montréal · Salary: $173,685 - $227,960 · parue le 2026-08-13.
68 68
69 69 ## Fréquence & budgets
70 70
@@ -79,15 +79,15 @@ Exemple réel : *Internal Auditor* — Montréal · Salary Range: From 68,630$ t
79 79
80 80 ## Volumétrie & complétude live
81 81
82 −*(mesuré le 2026-08-19 03:39 EDT dans `data/jobka.db`)*
82 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
83 83
84 84 - **Offres en base** : 25 (dont **24 actives**, 0 masquées comme doublons `dup_of`)
85 −- **Salaire** : 19/24 actives (79 %)
85 +- **Salaire** : 18/24 actives (75 %)
86 86 - **GPS** : 24/24 actives (100 %)
87 −- **Mode** : 0/24 actives (0 %)
87 +- **Mode** : 24/24 actives (100 %)
88 88 - **Parution** : 24/24 actives (100 %)
89 −- **Dernier sync** : 2026-08-19 02:13 — trouvées 0, +0, ~0, -0, **ÉCHEC : 520 Server Error: <none> for url: https://saputo.wd5.myworkdayjobs.com/wday/cxs/saputo/Sap…**
90 −- **Syncs enregistrés** (`sync_log`) : 26
89 +- **Dernier sync** : 2026-08-19 04:18 — trouvées 24, +0, ~24, -0
90 +- **Syncs enregistrés** (`sync_log`) : 27
91 91
92 92 ## Erreurs & dépannage
93 93
modified docs/connecteurs/scalia.md +5 −5
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/scalia.md
7 7 Rôle : Fiche connecteur — Propriétés Scalia (employeur direct, ATS bamboohr)
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -36,7 +36,7 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
36 36
37 37 ## Champs → schéma
38 38
39 −Complétude mesurée sur les **5 offres actives** de la source (base live, 2026-08-19 03:39 EDT).
39 +Complétude mesurée sur les **5 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
40 40
41 41 | Champ (`jobs.*`) | Rôle | Complétude |
42 42 |---|---|---|
@@ -77,15 +77,15 @@ Exemple réel : *Technicien comptable - Accounting technician* — Montréal ·
77 77
78 78 ## Volumétrie & complétude live
79 79
80 −*(mesuré le 2026-08-19 03:39 EDT dans `data/jobka.db`)*
80 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
81 81
82 82 - **Offres en base** : 5 (dont **5 actives**, 0 masquées comme doublons `dup_of`)
83 83 - **Salaire** : 1/5 actives (20 %)
84 84 - **GPS** : 5/5 actives (100 %)
85 85 - **Mode** : 5/5 actives (100 %)
86 86 - **Parution** : 5/5 actives (100 %)
87 −- **Dernier sync** : 2026-08-19 02:13 — trouvées 5, +0, ~5, -0
88 −- **Syncs enregistrés** (`sync_log`) : 25
87 +- **Dernier sync** : 2026-08-19 04:18 — trouvées 5, +0, ~0, -0
88 +- **Syncs enregistrés** (`sync_log`) : 26
89 89
90 90 ## Erreurs & dépannage
91 91
modified docs/connecteurs/scottsmiraclegro.md +5 −5
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/scottsmiraclegro.md
7 7 Rôle : Fiche connecteur — Scotts Canada (Fafard) (employeur direct, ATS workday)
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -38,7 +38,7 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
38 38
39 39 ## Champs → schéma
40 40
41 −Complétude mesurée sur les **27 offres actives** de la source (base live, 2026-08-19 03:39 EDT).
41 +Complétude mesurée sur les **27 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
42 42
43 43 | Champ (`jobs.*`) | Rôle | Complétude |
44 44 |---|---|---|
@@ -79,15 +79,15 @@ Exemple réel : *Technicien en électromécanique / Electromechanical Technician
79 79
80 80 ## Volumétrie & complétude live
81 81
82 −*(mesuré le 2026-08-19 03:39 EDT dans `data/jobka.db`)*
82 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
83 83
84 84 - **Offres en base** : 27 (dont **27 actives**, 0 masquées comme doublons `dup_of`)
85 85 - **Salaire** : 1/27 actives (4 %)
86 86 - **GPS** : 27/27 actives (100 %)
87 87 - **Mode** : 0/27 actives (0 %)
88 88 - **Parution** : 27/27 actives (100 %)
89 −- **Dernier sync** : 2026-08-19 02:14 — trouvées 27, +0, ~27, -0
90 −- **Syncs enregistrés** (`sync_log`) : 13
89 +- **Dernier sync** : 2026-08-19 04:18 — trouvées 27, +0, ~3, -0
90 +- **Syncs enregistrés** (`sync_log`) : 14
91 91
92 92 ## Erreurs & dépannage
93 93
added docs/connecteurs/sepaq.md +116 −0
@@ -0,0 +1,116 @@
1 +<!--
2 +=============================================================================
3 +Job·Ka — Groupe KA
4 +Auteur : Simon-Pierre Boucher
5 +Contact : contact@spboucher.ai
6 +Fichier : docs/connecteurs/sepaq.md
7 +Rôle : Fiche connecteur — Sépaq (employeur direct, ATS taleo_tbe)
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 + relancer le script pour régénérer.
10 +=============================================================================
11 +-->
12 +
13 +# Sépaq (`sepaq`)
14 +
15 +**Employeur direct** · Plateforme ATS : [`taleo_tbe`](ats-taleo_tbe.md) · Statut registre : actif · Connecteur : `jobka/connectors/sepaq.py`
16 +
17 +## Description
18 +
19 +- **Site** : [Sépaq](https://www.sepaq.com)
20 +- **Page carrières** : https://tre.tbe.taleo.net/tre01/ats/careers/v2/jobSearch?org=SEPAQ&cws=37
21 +- **Secteurs** : Tourisme, Plein air, Secteur public
22 +- **Région** : Québec (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-taleo_tbe.md`](ats-taleo_tbe.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 +| `CWS` | `37` |
33 +| `EMPLOYER` | `Sépaq` |
34 +| `HOST` | `tre` |
35 +| `INST` | `tre01` |
36 +| `ORG` | `SEPAQ` |
37 +- **Throttle** : 1.0 s entre requêtes.
38 +- **Filtre Québec** : seuls les postes localisés au Québec sont conservés (facette serveur quand l'ATS en offre une, sinon `is_quebec_location` côté client).
39 +
40 +## Champs → schéma
41 +
42 +Complétude mesurée sur les **99 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
43 +
44 +| Champ (`jobs.*`) | Rôle | Complétude |
45 +|---|---|---|
46 +| `title` — Titre | titre du poste | 100 % |
47 +| `employer` — Employeur | nom de l'entreprise | 100 % |
48 +| `url` — URL | lien direct vers l'offre originale | 100 % |
49 +| `description` — Description | texte complet (HTML nettoyé) | 100 % |
50 +| `city` — Ville | municipalité normalisée | 100 % |
51 +| `region` — Région | région administrative | 34 % |
52 +| `address` — Adresse | adresse du lieu de travail | 100 % |
53 +| `postal_code` — Code postal | code postal si publié | 100 % |
54 +| `work_mode` — Mode | presentiel / hybride / teletravail | 4 % |
55 +| `employment_type` — Type | temps_plein / temps_partiel / … | 35 % |
56 +| `salary` — Salaire ($) | bornes numériques normalisées $/h et $/an | 55 % |
57 +| `salary_label` — Libellé salaire | texte salarial original | 55 % |
58 +| `benefits` — Avantages | avantages sociaux publiés (JSON) | 0 % |
59 +| `requirements` — Exigences | scolarité, expérience, langues (JSON) | 0 % |
60 +| `date_posted` — Date de parution | ISO 8601 | 100 % |
61 +| `date_deadline` — Date limite | date limite pour postuler | 15 % |
62 +| `category` — Catégorie | taxonomie interne (TI, Santé, …) | 44 % |
63 +| `language` — Langue | fr / en / bilingue (source ou heuristique) | 100 % |
64 +| `company_logo` — Logo employeur | URL du logo si exposé par la source | 0 % |
65 +| `apply_url` — Candidature | lien de candidature directe | 0 % |
66 +| `gps` — GPS | lat/lng (géocodage sans invention) | 0 % |
67 +
68 +Exemple réel : *Cuisinier ou cuisinière classe 1* — Sépaq Anticosti, Port-Menier · 20,81 $ à 28,30 $ de l’heure selon l’expérience · parue le 2026-08-18.
69 +
70 +## Fréquence & budgets
71 +
72 +- **Cadence** : resynchronisation **horaire** (PM2 `job-ka-sync` = `run.py watch 60`), suivie du géocodage en lot puis de la déduplication inter-sources.
73 +- **Throttle** : 1.0 s minimum entre deux requêtes vers la source (`request_delay`).
74 +- **Budgets / plafonds (variables d'environnement)** :
75 +
76 +| Variable | Défaut |
77 +|---|---|
78 +| `JOBKA_TBE_DETAIL_LIMIT` | `60` |
79 +- 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.
80 +
81 +## Volumétrie & complétude live
82 +
83 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
84 +
85 +- **Offres en base** : 99 (dont **99 actives**, 0 masquées comme doublons `dup_of`)
86 +- **Salaire** : 54/99 actives (55 %)
87 +- **GPS** : 0/99 actives (0 %)
88 +- **Mode** : 4/99 actives (4 %)
89 +- **Parution** : 99/99 actives (100 %)
90 +- **Dernier sync** : 2026-08-19 04:46 — trouvées 99, +99, ~0, -0
91 +- **Syncs enregistrés** (`sync_log`) : 1
92 +
93 +## Erreurs & dépannage
94 +
95 +Aucune erreur dans `sync_log` pour cette source.
96 +
97 +- Rejouer un sync isolé : `.venv/bin/python run.py sync sepaq` puis inspecter `sync_log` : `sqlite3 data/jobka.db "SELECT * FROM sync_log WHERE source='sepaq' ORDER BY ts DESC LIMIT 5;"`
98 +- 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`.
99 +
100 +## Licence / conformité
101 +
102 +**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 Sépaq » 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.
103 +
104 +## Historique
105 +
106 +**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 :
107 +- `fd4bfc8` qualité lieux : rejet des villes hors Québec, bâtiments McGill → Montréal ;
108 +- `5a66f48` +59 employeurs (sondage massif d'ATS + détection de pages carrières) ;
109 +- `4917d57` 8 nouveaux ATS (Taleo, Njoyn, UltiPro, iCIMS, SuccessFactors, ADP WFN, Digital Recruiters, Workland) + 23 employeurs publics/parapublics ;
110 +- `f6e7571` portails Guichet-Emplois, Jobillico, Espresso-Jobs — l'offre directe gagne toujours la canonique (dédup) ;
111 +- `744cbfc` badge « Offre directe », stats directes/portails, dépôt direct employeurs ;
112 +- `1604ff9` reprise sur coupure WAF Guichet-Emplois (retry + acquis partiel).
113 +
114 +Commits touchant `jobka/connectors/sepaq.py` :
115 +
116 +- `89f9713` 2026-08-19 Nouvelle famille ATS Taleo Business Edition (taleo_tbe) : flux RSS public + JSON-LD des pages requisition (lieu, dates, description complète), filtre Québec différé tant que le détail n'est pas visité. Connecteurs : Sépaq (99), Kruger (corporatif, filtre QC), Produits Kruger, exo (25), HEC Montréal personnel (9) + corps professoral (9). Fixture sepaq (121 requêtes rejouables). TÉLUQ écarté (tenant TBE fermé).
modified docs/connecteurs/servicenow.md +5 −5
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/servicenow.md
7 7 Rôle : Fiche connecteur — ServiceNow (employeur direct, ATS smartrecruiters)
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -36,7 +36,7 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
36 36
37 37 ## Champs → schéma
38 38
39 −Complétude mesurée sur les **2 offres actives** de la source (base live, 2026-08-19 03:39 EDT).
39 +Complétude mesurée sur les **2 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
40 40
41 41 | Champ (`jobs.*`) | Rôle | Complétude |
42 42 |---|---|---|
@@ -77,15 +77,15 @@ Exemple réel : *Sr Enterprise Account Exec* — Montréal · ∅ · parue le 20
77 77
78 78 ## Volumétrie & complétude live
79 79
80 −*(mesuré le 2026-08-19 03:39 EDT dans `data/jobka.db`)*
80 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
81 81
82 82 - **Offres en base** : 2 (dont **2 actives**, 0 masquées comme doublons `dup_of`)
83 83 - **Salaire** : 0/2 actives (0 %)
84 84 - **GPS** : 2/2 actives (100 %)
85 85 - **Mode** : 2/2 actives (100 %)
86 86 - **Parution** : 2/2 actives (100 %)
87 −- **Dernier sync** : 2026-08-19 02:14 — trouvées 2, +0, ~2, -0
88 −- **Syncs enregistrés** (`sync_log`) : 25
87 +- **Dernier sync** : 2026-08-19 04:18 — trouvées 2, +0, ~0, -0
88 +- **Syncs enregistrés** (`sync_log`) : 26
89 89
90 90 ## Erreurs & dépannage
91 91
modified docs/connecteurs/siainnovationsinc.md +5 −5
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/siainnovationsinc.md
7 7 Rôle : Fiche connecteur — SIA Innovations (employeur direct, ATS greenhouse)
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -36,7 +36,7 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
36 36
37 37 ## Champs → schéma
38 38
39 −Complétude mesurée sur les **9 offres actives** de la source (base live, 2026-08-19 03:39 EDT).
39 +Complétude mesurée sur les **9 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
40 40
41 41 | Champ (`jobs.*`) | Rôle | Complétude |
42 42 |---|---|---|
@@ -72,15 +72,15 @@ Exemple réel : *Contrôleur(-euse) administratif et financier* — Montréal ·
72 72
73 73 ## Volumétrie & complétude live
74 74
75 −*(mesuré le 2026-08-19 03:39 EDT dans `data/jobka.db`)*
75 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
76 76
77 77 - **Offres en base** : 9 (dont **9 actives**, 0 masquées comme doublons `dup_of`)
78 78 - **Salaire** : 4/9 actives (44 %)
79 79 - **GPS** : 9/9 actives (100 %)
80 80 - **Mode** : 7/9 actives (78 %)
81 81 - **Parution** : 9/9 actives (100 %)
82 −- **Dernier sync** : 2026-08-19 02:14 — trouvées 9, +0, ~9, -0
83 −- **Syncs enregistrés** (`sync_log`) : 25
82 +- **Dernier sync** : 2026-08-19 04:18 — trouvées 9, +0, ~0, -0
83 +- **Syncs enregistrés** (`sync_log`) : 26
84 84
85 85 ## Erreurs & dépannage
86 86
modified docs/connecteurs/sideinc.md +5 −5
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/sideinc.md
7 7 Rôle : Fiche connecteur — Side (PTW) (employeur direct, ATS workable)
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -36,7 +36,7 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
36 36
37 37 ## Champs → schéma
38 38
39 −Complétude mesurée sur les **33 offres actives** de la source (base live, 2026-08-19 03:39 EDT).
39 +Complétude mesurée sur les **33 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
40 40
41 41 | Champ (`jobs.*`) | Rôle | Complétude |
42 42 |---|---|---|
@@ -72,15 +72,15 @@ Exemple réel : *3D Environment Artist - Talent Pool (N Americas)* — Québec
72 72
73 73 ## Volumétrie & complétude live
74 74
75 −*(mesuré le 2026-08-19 03:39 EDT dans `data/jobka.db`)*
75 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
76 76
77 77 - **Offres en base** : 33 (dont **33 actives**, 0 masquées comme doublons `dup_of`)
78 78 - **Salaire** : 0/33 actives (0 %)
79 79 - **GPS** : 33/33 actives (100 %)
80 80 - **Mode** : 7/33 actives (21 %)
81 81 - **Parution** : 33/33 actives (100 %)
82 −- **Dernier sync** : 2026-08-19 02:14 — trouvées 37, +0, ~37, -0
83 −- **Syncs enregistrés** (`sync_log`) : 25
82 +- **Dernier sync** : 2026-08-19 04:18 — trouvées 37, +0, ~8, -0
83 +- **Syncs enregistrés** (`sync_log`) : 26
84 84
85 85 ## Erreurs & dépannage
86 86
modified docs/connecteurs/sidlee.md +5 −5
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/sidlee.md
7 7 Rôle : Fiche connecteur — Sid Lee (employeur direct, ATS greenhouse)
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -36,7 +36,7 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
36 36
37 37 ## Champs → schéma
38 38
39 −Complétude mesurée sur les **13 offres actives** de la source (base live, 2026-08-19 03:39 EDT).
39 +Complétude mesurée sur les **13 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
40 40
41 41 | Champ (`jobs.*`) | Rôle | Complétude |
42 42 |---|---|---|
@@ -72,15 +72,15 @@ Exemple réel : *Conseiller·ère, Talent et acquisition de talents* — Montré
72 72
73 73 ## Volumétrie & complétude live
74 74
75 −*(mesuré le 2026-08-19 03:39 EDT dans `data/jobka.db`)*
75 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
76 76
77 77 - **Offres en base** : 15 (dont **13 actives**, 0 masquées comme doublons `dup_of`)
78 78 - **Salaire** : 0/13 actives (0 %)
79 79 - **GPS** : 13/13 actives (100 %)
80 80 - **Mode** : 0/13 actives (0 %)
81 81 - **Parution** : 13/13 actives (100 %)
82 −- **Dernier sync** : 2026-08-19 02:14 — trouvées 13, +0, ~13, -0
83 −- **Syncs enregistrés** (`sync_log`) : 13
82 +- **Dernier sync** : 2026-08-19 04:18 — trouvées 13, +0, ~0, -0
83 +- **Syncs enregistrés** (`sync_log`) : 14
84 84
85 85 ## Erreurs & dépannage
86 86
modified docs/connecteurs/sleeman.md +6 −6
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/sleeman.md
7 7 Rôle : Fiche connecteur — Brasseries Sleeman (Unibroue) (employeur direct, ATS workday)
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -38,7 +38,7 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
38 38
39 39 ## Champs → schéma
40 40
41 −Complétude mesurée sur les **3 offres actives** de la source (base live, 2026-08-19 03:39 EDT).
41 +Complétude mesurée sur les **3 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
42 42
43 43 | Champ (`jobs.*`) | Rôle | Complétude |
44 44 |---|---|---|
@@ -64,7 +64,7 @@ Complétude mesurée sur les **3 offres actives** de la source (base live, 2026-
64 64 | `apply_url` — Candidature | lien de candidature directe | 100 % |
65 65 | `gps` — GPS | lat/lng (géocodage sans invention) | 100 % |
66 66
67 −Exemple réel : *Préposé(e) à l’assainissement* — Québec · Salaire : 25,86 $/h (augmentations garanties atteignant 29.46$ après 15 mois) · parue le 2026-07-29.
67 +Exemple réel : *Préposé(e) à l’assainissement* — Québec · Salaire : 25,86 $/h (augmentations garanties atteignant 29.46$ après 15 mois) · parue le 2026-07-28.
68 68
69 69 ## Fréquence & budgets
70 70
@@ -79,15 +79,15 @@ Exemple réel : *Préposé(e) à l’assainissement* — Québec · Salaire : 25
79 79
80 80 ## Volumétrie & complétude live
81 81
82 −*(mesuré le 2026-08-19 03:39 EDT dans `data/jobka.db`)*
82 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
83 83
84 84 - **Offres en base** : 3 (dont **3 actives**, 0 masquées comme doublons `dup_of`)
85 85 - **Salaire** : 1/3 actives (33 %)
86 86 - **GPS** : 3/3 actives (100 %)
87 87 - **Mode** : 0/3 actives (0 %)
88 88 - **Parution** : 3/3 actives (100 %)
89 −- **Dernier sync** : 2026-08-19 02:14 — trouvées 3, +0, ~3, -0
90 −- **Syncs enregistrés** (`sync_log`) : 13
89 +- **Dernier sync** : 2026-08-19 04:18 — trouvées 3, +0, ~1, -0
90 +- **Syncs enregistrés** (`sync_log`) : 14
91 91
92 92 ## Erreurs & dépannage
93 93
modified docs/connecteurs/sogeclair.md +5 −5
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/sogeclair.md
7 7 Rôle : Fiche connecteur — SOGECLAIR (employeur direct, ATS workable)
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -36,7 +36,7 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
36 36
37 37 ## Champs → schéma
38 38
39 −Complétude mesurée sur les **43 offres actives** de la source (base live, 2026-08-19 03:39 EDT).
39 +Complétude mesurée sur les **43 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
40 40
41 41 | Champ (`jobs.*`) | Rôle | Complétude |
42 42 |---|---|---|
@@ -72,15 +72,15 @@ Exemple réel : *Intégrateur Mécanique* — Montréal · 96 470 $ / année ·
72 72
73 73 ## Volumétrie & complétude live
74 74
75 −*(mesuré le 2026-08-19 03:39 EDT dans `data/jobka.db`)*
75 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
76 76
77 77 - **Offres en base** : 43 (dont **43 actives**, 0 masquées comme doublons `dup_of`)
78 78 - **Salaire** : 1/43 actives (2 %)
79 79 - **GPS** : 43/43 actives (100 %)
80 80 - **Mode** : 1/43 actives (2 %)
81 81 - **Parution** : 43/43 actives (100 %)
82 −- **Dernier sync** : 2026-08-19 02:14 — trouvées 43, +0, ~43, -0
83 −- **Syncs enregistrés** (`sync_log`) : 25
82 +- **Dernier sync** : 2026-08-19 04:18 — trouvées 43, +0, ~0, -0
83 +- **Syncs enregistrés** (`sync_log`) : 26
84 84
85 85 ## Erreurs & dépannage
86 86
modified docs/connecteurs/sparkgrid.md +5 −5
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/sparkgrid.md
7 7 Rôle : Fiche connecteur — Sparkgrid (employeur direct, ATS smartrecruiters)
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -36,7 +36,7 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
36 36
37 37 ## Champs → schéma
38 38
39 −Complétude mesurée sur les **1 offres actives** de la source (base live, 2026-08-19 03:39 EDT).
39 +Complétude mesurée sur les **1 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
40 40
41 41 | Champ (`jobs.*`) | Rôle | Complétude |
42 42 |---|---|---|
@@ -77,15 +77,15 @@ Exemple réel : *Backend developer Golang* — Montréal · ∅ · parue le 2017
77 77
78 78 ## Volumétrie & complétude live
79 79
80 −*(mesuré le 2026-08-19 03:39 EDT dans `data/jobka.db`)*
80 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
81 81
82 82 - **Offres en base** : 1 (dont **1 actives**, 0 masquées comme doublons `dup_of`)
83 83 - **Salaire** : 0/1 actives (0 %)
84 84 - **GPS** : 1/1 actives (100 %)
85 85 - **Mode** : 0/1 actives (0 %)
86 86 - **Parution** : 1/1 actives (100 %)
87 −- **Dernier sync** : 2026-08-19 02:14 — trouvées 1, +0, ~1, -0
88 −- **Syncs enregistrés** (`sync_log`) : 25
87 +- **Dernier sync** : 2026-08-19 04:18 — trouvées 1, +0, ~0, -0
88 +- **Syncs enregistrés** (`sync_log`) : 26
89 89
90 90 ## Erreurs & dépannage
91 91
modified docs/connecteurs/spiria.md +5 −5
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/spiria.md
7 7 Rôle : Fiche connecteur — Spiria (employeur direct, ATS lever)
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -36,7 +36,7 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
36 36
37 37 ## Champs → schéma
38 38
39 −Complétude mesurée sur les **12 offres actives** de la source (base live, 2026-08-19 03:39 EDT).
39 +Complétude mesurée sur les **12 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
40 40
41 41 | Champ (`jobs.*`) | Rôle | Complétude |
42 42 |---|---|---|
@@ -72,15 +72,15 @@ Exemple réel : *Contracts & Compliance Manager* — Montréal · Salary range:
72 72
73 73 ## Volumétrie & complétude live
74 74
75 −*(mesuré le 2026-08-19 03:39 EDT dans `data/jobka.db`)*
75 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
76 76
77 77 - **Offres en base** : 16 (dont **12 actives**, 0 masquées comme doublons `dup_of`)
78 78 - **Salaire** : 7/12 actives (58 %)
79 79 - **GPS** : 12/12 actives (100 %)
80 80 - **Mode** : 12/12 actives (100 %)
81 81 - **Parution** : 12/12 actives (100 %)
82 −- **Dernier sync** : 2026-08-19 02:14 — trouvées 12, +0, ~12, -0
83 −- **Syncs enregistrés** (`sync_log`) : 13
82 +- **Dernier sync** : 2026-08-19 04:18 — trouvées 12, +0, ~0, -0
83 +- **Syncs enregistrés** (`sync_log`) : 14
84 84
85 85 ## Erreurs & dépannage
86 86
modified docs/connecteurs/spreedly.md +5 −5
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/spreedly.md
7 7 Rôle : Fiche connecteur — Spreedly (employeur direct, ATS lever)
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -36,7 +36,7 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
36 36
37 37 ## Champs → schéma
38 38
39 −Complétude mesurée sur les **2 offres actives** de la source (base live, 2026-08-19 03:39 EDT).
39 +Complétude mesurée sur les **2 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
40 40
41 41 | Champ (`jobs.*`) | Rôle | Complétude |
42 42 |---|---|---|
@@ -72,15 +72,15 @@ Exemple réel : *Partner Growth Manager* — Montréal · ∅ · parue le 2026-0
72 72
73 73 ## Volumétrie & complétude live
74 74
75 −*(mesuré le 2026-08-19 03:39 EDT dans `data/jobka.db`)*
75 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
76 76
77 77 - **Offres en base** : 2 (dont **2 actives**, 0 masquées comme doublons `dup_of`)
78 78 - **Salaire** : 0/2 actives (0 %)
79 79 - **GPS** : 2/2 actives (100 %)
80 80 - **Mode** : 2/2 actives (100 %)
81 81 - **Parution** : 2/2 actives (100 %)
82 −- **Dernier sync** : 2026-08-19 02:14 — trouvées 2, +0, ~2, -0
83 −- **Syncs enregistrés** (`sync_log`) : 25
82 +- **Dernier sync** : 2026-08-19 04:18 — trouvées 2, +0, ~0, -0
83 +- **Syncs enregistrés** (`sync_log`) : 26
84 84
85 85 ## Erreurs & dépannage
86 86
modified docs/connecteurs/squeezestudio.md +5 −5
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/squeezestudio.md
7 7 Rôle : Fiche connecteur — Squeeze Studio Animation (employeur direct, ATS recruitee)
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -36,7 +36,7 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
36 36
37 37 ## Champs → schéma
38 38
39 −Complétude mesurée sur les **3 offres actives** de la source (base live, 2026-08-19 03:39 EDT).
39 +Complétude mesurée sur les **3 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
40 40
41 41 | Champ (`jobs.*`) | Rôle | Complétude |
42 42 |---|---|---|
@@ -72,15 +72,15 @@ Exemple réel : *Animateur 3D senior* — Montréal / Québec · ∅ · parue le
72 72
73 73 ## Volumétrie & complétude live
74 74
75 −*(mesuré le 2026-08-19 03:39 EDT dans `data/jobka.db`)*
75 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
76 76
77 77 - **Offres en base** : 3 (dont **3 actives**, 0 masquées comme doublons `dup_of`)
78 78 - **Salaire** : 0/3 actives (0 %)
79 79 - **GPS** : 2/3 actives (67 %)
80 80 - **Mode** : 3/3 actives (100 %)
81 81 - **Parution** : 3/3 actives (100 %)
82 −- **Dernier sync** : 2026-08-19 02:14 — trouvées 3, +0, ~3, -0
83 −- **Syncs enregistrés** (`sync_log`) : 25
82 +- **Dernier sync** : 2026-08-19 04:18 — trouvées 3, +0, ~0, -0
83 +- **Syncs enregistrés** (`sync_log`) : 26
84 84
85 85 ## Erreurs & dépannage
86 86
modified docs/connecteurs/stelpro.md +5 −5
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/stelpro.md
7 7 Rôle : Fiche connecteur — Stelpro (employeur direct, ATS smartrecruiters)
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -36,7 +36,7 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
36 36
37 37 ## Champs → schéma
38 38
39 −Complétude mesurée sur les **1 offres actives** de la source (base live, 2026-08-19 03:39 EDT).
39 +Complétude mesurée sur les **1 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
40 40
41 41 | Champ (`jobs.*`) | Rôle | Complétude |
42 42 |---|---|---|
@@ -77,15 +77,15 @@ Exemple réel : *Agent au service à la clientèle* — Saint-Bruno-de-Montarvil
77 77
78 78 ## Volumétrie & complétude live
79 79
80 −*(mesuré le 2026-08-19 03:39 EDT dans `data/jobka.db`)*
80 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
81 81
82 82 - **Offres en base** : 1 (dont **1 actives**, 0 masquées comme doublons `dup_of`)
83 83 - **Salaire** : 0/1 actives (0 %)
84 84 - **GPS** : 1/1 actives (100 %)
85 85 - **Mode** : 0/1 actives (0 %)
86 86 - **Parution** : 1/1 actives (100 %)
87 −- **Dernier sync** : 2026-08-19 02:14 — trouvées 1, +0, ~1, -0
88 −- **Syncs enregistrés** (`sync_log`) : 13
87 +- **Dernier sync** : 2026-08-19 04:18 — trouvées 1, +0, ~0, -0
88 +- **Syncs enregistrés** (`sync_log`) : 14
89 89
90 90 ## Erreurs & dépannage
91 91
modified docs/connecteurs/stl_laval.md +5 −5
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/stl_laval.md
7 7 Rôle : Fiche connecteur — Société de transport de Laval (employeur direct, ATS njoyn)
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -40,7 +40,7 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
40 40
41 41 ## Champs → schéma
42 42
43 −Complétude mesurée sur les **16 offres actives** de la source (base live, 2026-08-19 03:39 EDT).
43 +Complétude mesurée sur les **16 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
44 44
45 45 | Champ (`jobs.*`) | Rôle | Complétude |
46 46 |---|---|---|
@@ -81,15 +81,15 @@ Exemple réel : *Agent·e service à la clientèle (Sur appel)* — ∅ · Salai
81 81
82 82 ## Volumétrie & complétude live
83 83
84 −*(mesuré le 2026-08-19 03:39 EDT dans `data/jobka.db`)*
84 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
85 85
86 86 - **Offres en base** : 16 (dont **16 actives**, 0 masquées comme doublons `dup_of`)
87 87 - **Salaire** : 5/16 actives (31 %)
88 88 - **GPS** : 0/16 actives (0 %)
89 89 - **Mode** : 0/16 actives (0 %)
90 90 - **Parution** : 0/16 actives (0 %)
91 −- **Dernier sync** : 2026-08-19 02:14 — trouvées 16, +0, ~16, -0
92 −- **Syncs enregistrés** (`sync_log`) : 12
91 +- **Dernier sync** : 2026-08-19 04:18 — trouvées 16, +0, ~0, -0
92 +- **Syncs enregistrés** (`sync_log`) : 13
93 93
94 94 ## Erreurs & dépannage
95 95
modified docs/connecteurs/suncor.md +6 −6
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/suncor.md
7 7 Rôle : Fiche connecteur — Suncor Énergie (employeur direct, ATS workday)
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -38,7 +38,7 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
38 38
39 39 ## Champs → schéma
40 40
41 −Complétude mesurée sur les **3 offres actives** de la source (base live, 2026-08-19 03:39 EDT).
41 +Complétude mesurée sur les **3 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
42 42
43 43 | Champ (`jobs.*`) | Rôle | Complétude |
44 44 |---|---|---|
@@ -64,7 +64,7 @@ Complétude mesurée sur les **3 offres actives** de la source (base live, 2026-
64 64 | `apply_url` — Candidature | lien de candidature directe | 100 % |
65 65 | `gps` — GPS | lat/lng (géocodage sans invention) | 100 % |
66 66
67 −Exemple réel : *Bilingual Occupational Health Nurse* — Montréal · ∅ · parue le 2026-08-19.
67 +Exemple réel : *Bilingual Occupational Health Nurse* — Montréal · ∅ · parue le 2026-08-18.
68 68
69 69 ## Fréquence & budgets
70 70
@@ -79,15 +79,15 @@ Exemple réel : *Bilingual Occupational Health Nurse* — Montréal · ∅ · pa
79 79
80 80 ## Volumétrie & complétude live
81 81
82 −*(mesuré le 2026-08-19 03:39 EDT dans `data/jobka.db`)*
82 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
83 83
84 84 - **Offres en base** : 3 (dont **3 actives**, 0 masquées comme doublons `dup_of`)
85 85 - **Salaire** : 0/3 actives (0 %)
86 86 - **GPS** : 3/3 actives (100 %)
87 87 - **Mode** : 0/3 actives (0 %)
88 88 - **Parution** : 3/3 actives (100 %)
89 −- **Dernier sync** : 2026-08-19 02:14 — trouvées 3, +0, ~3, -0
90 −- **Syncs enregistrés** (`sync_log`) : 12
89 +- **Dernier sync** : 2026-08-19 04:19 — trouvées 3, +0, ~3, -0
90 +- **Syncs enregistrés** (`sync_log`) : 13
91 91
92 92 ## Erreurs & dépannage
93 93
modified docs/connecteurs/sunlife.md +6 −6
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/sunlife.md
7 7 Rôle : Fiche connecteur — Sun Life (employeur direct, ATS workday)
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -38,7 +38,7 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
38 38
39 39 ## Champs → schéma
40 40
41 −Complétude mesurée sur les **8 offres actives** de la source (base live, 2026-08-19 03:39 EDT).
41 +Complétude mesurée sur les **8 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
42 42
43 43 | Champ (`jobs.*`) | Rôle | Complétude |
44 44 |---|---|---|
@@ -64,7 +64,7 @@ Complétude mesurée sur les **8 offres actives** de la source (base live, 2026-
64 64 | `apply_url` — Candidature | lien de candidature directe | 100 % |
65 65 | `gps` — GPS | lat/lng (géocodage sans invention) | 100 % |
66 66
67 −Exemple réel : *Disability Payment Administrator* — Montréal · ∅ · parue le 2026-08-15.
67 +Exemple réel : *Disability Payment Administrator* — Montréal · ∅ · parue le 2026-08-14.
68 68
69 69 ## Fréquence & budgets
70 70
@@ -79,15 +79,15 @@ Exemple réel : *Disability Payment Administrator* — Montréal · ∅ · parue
79 79
80 80 ## Volumétrie & complétude live
81 81
82 −*(mesuré le 2026-08-19 03:39 EDT dans `data/jobka.db`)*
82 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
83 83
84 84 - **Offres en base** : 10 (dont **8 actives**, 0 masquées comme doublons `dup_of`)
85 85 - **Salaire** : 0/8 actives (0 %)
86 86 - **GPS** : 8/8 actives (100 %)
87 87 - **Mode** : 0/8 actives (0 %)
88 88 - **Parution** : 8/8 actives (100 %)
89 −- **Dernier sync** : 2026-08-19 02:15 — trouvées 8, +0, ~8, -1
90 −- **Syncs enregistrés** (`sync_log`) : 23
89 +- **Dernier sync** : 2026-08-19 04:19 — trouvées 8, +0, ~7, -0
90 +- **Syncs enregistrés** (`sync_log`) : 24
91 91
92 92 ## Erreurs & dépannage
93 93
modified docs/connecteurs/surmesur.md +5 −5
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/surmesur.md
7 7 Rôle : Fiche connecteur — Surmesur (employeur direct, ATS bamboohr)
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -36,7 +36,7 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
36 36
37 37 ## Champs → schéma
38 38
39 −Complétude mesurée sur les **5 offres actives** de la source (base live, 2026-08-19 03:39 EDT).
39 +Complétude mesurée sur les **5 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
40 40
41 41 | Champ (`jobs.*`) | Rôle | Complétude |
42 42 |---|---|---|
@@ -77,15 +77,15 @@ Exemple réel : *Gestionnaire des médias sociaux* — Québec · $58,000 - $68,
77 77
78 78 ## Volumétrie & complétude live
79 79
80 −*(mesuré le 2026-08-19 03:39 EDT dans `data/jobka.db`)*
80 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
81 81
82 82 - **Offres en base** : 5 (dont **5 actives**, 0 masquées comme doublons `dup_of`)
83 83 - **Salaire** : 4/5 actives (80 %)
84 84 - **GPS** : 5/5 actives (100 %)
85 85 - **Mode** : 5/5 actives (100 %)
86 86 - **Parution** : 5/5 actives (100 %)
87 −- **Dernier sync** : 2026-08-19 02:15 — trouvées 5, +0, ~5, -0
88 −- **Syncs enregistrés** (`sync_log`) : 24
87 +- **Dernier sync** : 2026-08-19 04:19 — trouvées 5, +0, ~0, -0
88 +- **Syncs enregistrés** (`sync_log`) : 25
89 89
90 90 ## Erreurs & dépannage
91 91
modified docs/connecteurs/sweat_pants_agency.md +5 −5
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/sweat_pants_agency.md
7 7 Rôle : Fiche connecteur — Sweat Pants Agency (employeur direct, ATS workable)
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -36,7 +36,7 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
36 36
37 37 ## Champs → schéma
38 38
39 −Complétude mesurée sur les **6 offres actives** de la source (base live, 2026-08-19 03:39 EDT).
39 +Complétude mesurée sur les **6 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
40 40
41 41 | Champ (`jobs.*`) | Rôle | Complétude |
42 42 |---|---|---|
@@ -72,15 +72,15 @@ Exemple réel : *Marketing Project Manager, Paid Media* — Montréal · Sweat P
72 72
73 73 ## Volumétrie & complétude live
74 74
75 −*(mesuré le 2026-08-19 03:39 EDT dans `data/jobka.db`)*
75 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
76 76
77 77 - **Offres en base** : 6 (dont **6 actives**, 0 masquées comme doublons `dup_of`)
78 78 - **Salaire** : 3/6 actives (50 %)
79 79 - **GPS** : 6/6 actives (100 %)
80 80 - **Mode** : 6/6 actives (100 %)
81 81 - **Parution** : 6/6 actives (100 %)
82 −- **Dernier sync** : 2026-08-19 02:15 — trouvées 6, +0, ~6, -0
83 −- **Syncs enregistrés** (`sync_log`) : 24
82 +- **Dernier sync** : 2026-08-19 04:19 — trouvées 6, +0, ~0, -0
83 +- **Syncs enregistrés** (`sync_log`) : 25
84 84
85 85 ## Erreurs & dépannage
86 86
modified docs/connecteurs/talan.md +5 −5
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/talan.md
7 7 Rôle : Fiche connecteur — Talan (employeur direct, ATS smartrecruiters)
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -36,7 +36,7 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
36 36
37 37 ## Champs → schéma
38 38
39 −Complétude mesurée sur les **13 offres actives** de la source (base live, 2026-08-19 03:39 EDT).
39 +Complétude mesurée sur les **13 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
40 40
41 41 | Champ (`jobs.*`) | Rôle | Complétude |
42 42 |---|---|---|
@@ -77,15 +77,15 @@ Exemple réel : *Conseiller(ère) fonctionnel(le) finance, Business Central/NAV
77 77
78 78 ## Volumétrie & complétude live
79 79
80 −*(mesuré le 2026-08-19 03:39 EDT dans `data/jobka.db`)*
80 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
81 81
82 82 - **Offres en base** : 13 (dont **13 actives**, 0 masquées comme doublons `dup_of`)
83 83 - **Salaire** : 0/13 actives (0 %)
84 84 - **GPS** : 13/13 actives (100 %)
85 85 - **Mode** : 11/13 actives (85 %)
86 86 - **Parution** : 13/13 actives (100 %)
87 −- **Dernier sync** : 2026-08-19 02:15 — trouvées 13, +0, ~13, -0
88 −- **Syncs enregistrés** (`sync_log`) : 24
87 +- **Dernier sync** : 2026-08-19 04:19 — trouvées 13, +0, ~0, -0
88 +- **Syncs enregistrés** (`sync_log`) : 25
89 89
90 90 ## Erreurs & dépannage
91 91
modified docs/connecteurs/talsom.md +5 −5
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/talsom.md
7 7 Rôle : Fiche connecteur — Talsom (employeur direct, ATS smartrecruiters)
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -36,7 +36,7 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
36 36
37 37 ## Champs → schéma
38 38
39 −Complétude mesurée sur les **1 offres actives** de la source (base live, 2026-08-19 03:39 EDT).
39 +Complétude mesurée sur les **1 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
40 40
41 41 | Champ (`jobs.*`) | Rôle | Complétude |
42 42 |---|---|---|
@@ -77,15 +77,15 @@ Exemple réel : *Test* — Montréal · ∅ · parue le 2019-08-20.
77 77
78 78 ## Volumétrie & complétude live
79 79
80 −*(mesuré le 2026-08-19 03:39 EDT dans `data/jobka.db`)*
80 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
81 81
82 82 - **Offres en base** : 1 (dont **1 actives**, 0 masquées comme doublons `dup_of`)
83 83 - **Salaire** : 0/1 actives (0 %)
84 84 - **GPS** : 1/1 actives (100 %)
85 85 - **Mode** : 0/1 actives (0 %)
86 86 - **Parution** : 1/1 actives (100 %)
87 −- **Dernier sync** : 2026-08-19 02:15 — trouvées 1, +0, ~1, -0
88 −- **Syncs enregistrés** (`sync_log`) : 12
87 +- **Dernier sync** : 2026-08-19 04:19 — trouvées 1, +0, ~0, -0
88 +- **Syncs enregistrés** (`sync_log`) : 13
89 89
90 90 ## Erreurs & dépannage
91 91
modified docs/connecteurs/tandemlaunch.md +5 −5
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/tandemlaunch.md
7 7 Rôle : Fiche connecteur — TandemLaunch (employeur direct, ATS greenhouse)
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -36,7 +36,7 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
36 36
37 37 ## Champs → schéma
38 38
39 −Complétude mesurée sur les **5 offres actives** de la source (base live, 2026-08-19 03:39 EDT).
39 +Complétude mesurée sur les **5 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
40 40
41 41 | Champ (`jobs.*`) | Rôle | Complétude |
42 42 |---|---|---|
@@ -72,15 +72,15 @@ Exemple réel : *Scientifique en innovation / Innovation Scientist- Startup Incu
72 72
73 73 ## Volumétrie & complétude live
74 74
75 −*(mesuré le 2026-08-19 03:39 EDT dans `data/jobka.db`)*
75 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
76 76
77 77 - **Offres en base** : 5 (dont **5 actives**, 0 masquées comme doublons `dup_of`)
78 78 - **Salaire** : 0/5 actives (0 %)
79 79 - **GPS** : 5/5 actives (100 %)
80 80 - **Mode** : 0/5 actives (0 %)
81 81 - **Parution** : 5/5 actives (100 %)
82 −- **Dernier sync** : 2026-08-19 02:15 — trouvées 5, +0, ~5, -0
83 −- **Syncs enregistrés** (`sync_log`) : 25
82 +- **Dernier sync** : 2026-08-19 04:19 — trouvées 5, +0, ~0, -0
83 +- **Syncs enregistrés** (`sync_log`) : 26
84 84
85 85 ## Erreurs & dépannage
86 86
modified docs/connecteurs/td.md +6 −6
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/td.md
7 7 Rôle : Fiche connecteur — Groupe Banque TD (employeur direct, ATS workday)
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -38,7 +38,7 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
38 38
39 39 ## Champs → schéma
40 40
41 −Complétude mesurée sur les **69 offres actives** de la source (base live, 2026-08-19 03:39 EDT).
41 +Complétude mesurée sur les **69 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
42 42
43 43 | Champ (`jobs.*`) | Rôle | Complétude |
44 44 |---|---|---|
@@ -64,7 +64,7 @@ Complétude mesurée sur les **69 offres actives** de la source (base live, 2026
64 64 | `apply_url` — Candidature | lien de candidature directe | 100 % |
65 65 | `gps` — GPS | lat/lng (géocodage sans invention) | 100 % |
66 66
67 −Exemple réel : *Manager, Personal Financial Services- Val D'Or* — Québec · 50 600$/$50,600 - 71 400$/$71,400 CAD · parue le 2026-08-19.
67 +Exemple réel : *Manager, Personal Financial Services- Val D'Or* — Québec · 50 600$/$50,600 - 71 400$/$71,400 CAD · parue le 2026-08-18.
68 68
69 69 ## Fréquence & budgets
70 70
@@ -79,15 +79,15 @@ Exemple réel : *Manager, Personal Financial Services- Val D'Or* — Québec ·
79 79
80 80 ## Volumétrie & complétude live
81 81
82 −*(mesuré le 2026-08-19 03:39 EDT dans `data/jobka.db`)*
82 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
83 83
84 84 - **Offres en base** : 79 (dont **69 actives**, 0 masquées comme doublons `dup_of`)
85 85 - **Salaire** : 68/69 actives (99 %)
86 86 - **GPS** : 69/69 actives (100 %)
87 87 - **Mode** : 68/69 actives (99 %)
88 88 - **Parution** : 69/69 actives (100 %)
89 −- **Dernier sync** : 2026-08-19 02:20 — trouvées 69, +0, ~69, -1
90 −- **Syncs enregistrés** (`sync_log`) : 24
89 +- **Dernier sync** : 2026-08-19 04:24 — trouvées 69, +0, ~66, -0
90 +- **Syncs enregistrés** (`sync_log`) : 25
91 91
92 92 ## Erreurs & dépannage
93 93
modified docs/connecteurs/techo_bloc.md +5 −5
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/techo_bloc.md
7 7 Rôle : Fiche connecteur — Techo-Bloc (employeur direct, ATS smartrecruiters)
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -36,7 +36,7 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
36 36
37 37 ## Champs → schéma
38 38
39 −Complétude mesurée sur les **40 offres actives** de la source (base live, 2026-08-19 03:39 EDT).
39 +Complétude mesurée sur les **40 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
40 40
41 41 | Champ (`jobs.*`) | Rôle | Complétude |
42 42 |---|---|---|
@@ -77,15 +77,15 @@ Exemple réel : *Agent(e) de sécurité* — Saint-Hubert · Taux horaire de bas
77 77
78 78 ## Volumétrie & complétude live
79 79
80 −*(mesuré le 2026-08-19 03:39 EDT dans `data/jobka.db`)*
80 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
81 81
82 82 - **Offres en base** : 42 (dont **40 actives**, 0 masquées comme doublons `dup_of`)
83 83 - **Salaire** : 20/40 actives (50 %)
84 84 - **GPS** : 40/40 actives (100 %)
85 85 - **Mode** : 8/40 actives (20 %)
86 86 - **Parution** : 40/40 actives (100 %)
87 −- **Dernier sync** : 2026-08-19 02:20 — trouvées 40, +0, ~40, -0
88 −- **Syncs enregistrés** (`sync_log`) : 24
87 +- **Dernier sync** : 2026-08-19 04:24 — trouvées 40, +0, ~0, -0
88 +- **Syncs enregistrés** (`sync_log`) : 25
89 89
90 90 ## Erreurs & dépannage
91 91
modified docs/connecteurs/tecsys.md +5 −5
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/tecsys.md
7 7 Rôle : Fiche connecteur — Tecsys (employeur direct, ATS workable)
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -36,7 +36,7 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
36 36
37 37 ## Champs → schéma
38 38
39 −Complétude mesurée sur les **27 offres actives** de la source (base live, 2026-08-19 03:39 EDT).
39 +Complétude mesurée sur les **27 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
40 40
41 41 | Champ (`jobs.*`) | Rôle | Complétude |
42 42 |---|---|---|
@@ -72,15 +72,15 @@ Exemple réel : *Data Engineer (DevOps)* — Montréal · ∅ · parue le 2026-0
72 72
73 73 ## Volumétrie & complétude live
74 74
75 −*(mesuré le 2026-08-19 03:39 EDT dans `data/jobka.db`)*
75 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
76 76
77 77 - **Offres en base** : 27 (dont **27 actives**, 0 masquées comme doublons `dup_of`)
78 78 - **Salaire** : 0/27 actives (0 %)
79 79 - **GPS** : 27/27 actives (100 %)
80 80 - **Mode** : 25/27 actives (93 %)
81 81 - **Parution** : 27/27 actives (100 %)
82 −- **Dernier sync** : 2026-08-19 02:20 — trouvées 27, +0, ~27, -0
83 −- **Syncs enregistrés** (`sync_log`) : 24
82 +- **Dernier sync** : 2026-08-19 04:24 — trouvées 27, +0, ~0, -0
83 +- **Syncs enregistrés** (`sync_log`) : 25
84 84
85 85 ## Erreurs & dépannage
86 86
modified docs/connecteurs/tehora.md +5 −5
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/tehora.md
7 7 Rôle : Fiche connecteur — TEHORA (employeur direct, ATS workable)
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -36,7 +36,7 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
36 36
37 37 ## Champs → schéma
38 38
39 −Complétude mesurée sur les **346 offres actives** de la source (base live, 2026-08-19 03:39 EDT).
39 +Complétude mesurée sur les **346 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
40 40
41 41 | Champ (`jobs.*`) | Rôle | Complétude |
42 42 |---|---|---|
@@ -72,15 +72,15 @@ Exemple réel : *Administrateur de plateforme documentaire* — Québec · ∅
72 72
73 73 ## Volumétrie & complétude live
74 74
75 −*(mesuré le 2026-08-19 03:39 EDT dans `data/jobka.db`)*
75 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
76 76
77 77 - **Offres en base** : 389 (dont **346 actives**, 0 masquées comme doublons `dup_of`)
78 78 - **Salaire** : 0/346 actives (0 %)
79 79 - **GPS** : 346/346 actives (100 %)
80 80 - **Mode** : 109/346 actives (32 %)
81 81 - **Parution** : 346/346 actives (100 %)
82 −- **Dernier sync** : 2026-08-19 02:20 — trouvées 825, +0, ~825, -43
83 −- **Syncs enregistrés** (`sync_log`) : 24
82 +- **Dernier sync** : 2026-08-19 04:24 — trouvées 825, +0, ~752, -0
83 +- **Syncs enregistrés** (`sync_log`) : 25
84 84
85 85 ## Erreurs & dépannage
86 86
modified docs/connecteurs/tetrix.md +5 −5
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/tetrix.md
7 7 Rôle : Fiche connecteur — Tetrix (employeur direct, ATS ashby)
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -36,7 +36,7 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
36 36
37 37 ## Champs → schéma
38 38
39 −Complétude mesurée sur les **9 offres actives** de la source (base live, 2026-08-19 03:39 EDT).
39 +Complétude mesurée sur les **9 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
40 40
41 41 | Champ (`jobs.*`) | Rôle | Complétude |
42 42 |---|---|---|
@@ -72,15 +72,15 @@ Exemple réel : *Executive Assistant* — Montréal · CA$80K - CA$100K · parue
72 72
73 73 ## Volumétrie & complétude live
74 74
75 −*(mesuré le 2026-08-19 03:39 EDT dans `data/jobka.db`)*
75 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
76 76
77 77 - **Offres en base** : 9 (dont **9 actives**, 0 masquées comme doublons `dup_of`)
78 78 - **Salaire** : 9/9 actives (100 %)
79 79 - **GPS** : 1/9 actives (11 %)
80 80 - **Mode** : 9/9 actives (100 %)
81 81 - **Parution** : 9/9 actives (100 %)
82 −- **Dernier sync** : 2026-08-19 02:20 — trouvées 9, +0, ~9, -0
83 −- **Syncs enregistrés** (`sync_log`) : 24
82 +- **Dernier sync** : 2026-08-19 04:24 — trouvées 9, +0, ~0, -0
83 +- **Syncs enregistrés** (`sync_log`) : 25
84 84
85 85 ## Erreurs & dépannage
86 86
modified docs/connecteurs/toonboom.md +5 −5
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/toonboom.md
7 7 Rôle : Fiche connecteur — Toon Boom Animation (employeur direct, ATS bamboohr)
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -36,7 +36,7 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
36 36
37 37 ## Champs → schéma
38 38
39 −Complétude mesurée sur les **6 offres actives** de la source (base live, 2026-08-19 03:39 EDT).
39 +Complétude mesurée sur les **6 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
40 40
41 41 | Champ (`jobs.*`) | Rôle | Complétude |
42 42 |---|---|---|
@@ -77,15 +77,15 @@ Exemple réel : *Gestionnaire des opérations commerciales / Sales Operations Ma
77 77
78 78 ## Volumétrie & complétude live
79 79
80 −*(mesuré le 2026-08-19 03:39 EDT dans `data/jobka.db`)*
80 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
81 81
82 82 - **Offres en base** : 6 (dont **6 actives**, 0 masquées comme doublons `dup_of`)
83 83 - **Salaire** : 0/6 actives (0 %)
84 84 - **GPS** : 6/6 actives (100 %)
85 85 - **Mode** : 6/6 actives (100 %)
86 86 - **Parution** : 6/6 actives (100 %)
87 −- **Dernier sync** : 2026-08-19 02:20 — trouvées 6, +0, ~6, -0
88 −- **Syncs enregistrés** (`sync_log`) : 24
87 +- **Dernier sync** : 2026-08-19 04:24 — trouvées 6, +0, ~0, -0
88 +- **Syncs enregistrés** (`sync_log`) : 25
89 89
90 90 ## Erreurs & dépannage
91 91
modified docs/connecteurs/transatat1.md +5 −5
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/transatat1.md
7 7 Rôle : Fiche connecteur — Transat A.T. (employeur direct, ATS smartrecruiters)
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -36,7 +36,7 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
36 36
37 37 ## Champs → schéma
38 38
39 −Complétude mesurée sur les **36 offres actives** de la source (base live, 2026-08-19 03:39 EDT).
39 +Complétude mesurée sur les **36 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
40 40
41 41 | Champ (`jobs.*`) | Rôle | Complétude |
42 42 |---|---|---|
@@ -77,15 +77,15 @@ Exemple réel : *Agent.e, centre d'appel* — Montréal · Un salaire de base de
77 77
78 78 ## Volumétrie & complétude live
79 79
80 −*(mesuré le 2026-08-19 03:39 EDT dans `data/jobka.db`)*
80 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
81 81
82 82 - **Offres en base** : 41 (dont **36 actives**, 0 masquées comme doublons `dup_of`)
83 83 - **Salaire** : 2/36 actives (6 %)
84 84 - **GPS** : 36/36 actives (100 %)
85 85 - **Mode** : 20/36 actives (56 %)
86 86 - **Parution** : 36/36 actives (100 %)
87 −- **Dernier sync** : 2026-08-19 02:20 — trouvées 36, +0, ~36, -0
88 −- **Syncs enregistrés** (`sync_log`) : 24
87 +- **Dernier sync** : 2026-08-19 04:24 — trouvées 36, +0, ~0, -0
88 +- **Syncs enregistrés** (`sync_log`) : 25
89 89
90 90 ## Erreurs & dépannage
91 91
modified docs/connecteurs/triotech.md +5 −5
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/triotech.md
7 7 Rôle : Fiche connecteur — Triotech (employeur direct, ATS bamboohr)
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -36,7 +36,7 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
36 36
37 37 ## Champs → schéma
38 38
39 −Complétude mesurée sur les **6 offres actives** de la source (base live, 2026-08-19 03:39 EDT).
39 +Complétude mesurée sur les **6 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
40 40
41 41 | Champ (`jobs.*`) | Rôle | Complétude |
42 42 |---|---|---|
@@ -77,15 +77,15 @@ Exemple réel : *Responsable maintenance et SST* — Québec · Salaire horaire
77 77
78 78 ## Volumétrie & complétude live
79 79
80 −*(mesuré le 2026-08-19 03:39 EDT dans `data/jobka.db`)*
80 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
81 81
82 82 - **Offres en base** : 8 (dont **6 actives**, 0 masquées comme doublons `dup_of`)
83 83 - **Salaire** : 1/6 actives (17 %)
84 84 - **GPS** : 6/6 actives (100 %)
85 85 - **Mode** : 6/6 actives (100 %)
86 86 - **Parution** : 6/6 actives (100 %)
87 −- **Dernier sync** : 2026-08-19 02:20 — trouvées 6, +0, ~6, -0
88 −- **Syncs enregistrés** (`sync_log`) : 24
87 +- **Dernier sync** : 2026-08-19 04:24 — trouvées 6, +0, ~0, -0
88 +- **Syncs enregistrés** (`sync_log`) : 25
89 89
90 90 ## Erreurs & dépannage
91 91
modified docs/connecteurs/trois_brasseurs.md +5 −5
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/trois_brasseurs.md
7 7 Rôle : Fiche connecteur — 3 Brasseurs Canada (employeur direct, ATS breezy)
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -36,7 +36,7 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
36 36
37 37 ## Champs → schéma
38 38
39 −Complétude mesurée sur les **11 offres actives** de la source (base live, 2026-08-19 03:39 EDT).
39 +Complétude mesurée sur les **11 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
40 40
41 41 | Champ (`jobs.*`) | Rôle | Complétude |
42 42 |---|---|---|
@@ -72,15 +72,15 @@ Exemple réel : *Gérant(e) de restaurant \| Restaurant manager* — Brossard ·
72 72
73 73 ## Volumétrie & complétude live
74 74
75 −*(mesuré le 2026-08-19 03:39 EDT dans `data/jobka.db`)*
75 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
76 76
77 77 - **Offres en base** : 11 (dont **11 actives**, 0 masquées comme doublons `dup_of`)
78 78 - **Salaire** : 8/11 actives (73 %)
79 79 - **GPS** : 11/11 actives (100 %)
80 80 - **Mode** : 11/11 actives (100 %)
81 81 - **Parution** : 11/11 actives (100 %)
82 −- **Dernier sync** : 2026-08-19 02:20 — trouvées 11, +0, ~11, -0
83 −- **Syncs enregistrés** (`sync_log`) : 25
82 +- **Dernier sync** : 2026-08-19 04:24 — trouvées 11, +0, ~0, -0
83 +- **Syncs enregistrés** (`sync_log`) : 26
84 84
85 85 ## Erreurs & dépannage
86 86
modified docs/connecteurs/tsmg.md +5 −5
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/tsmg.md
7 7 Rôle : Fiche connecteur — TSMG (employeur direct, ATS lever)
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -36,7 +36,7 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
36 36
37 37 ## Champs → schéma
38 38
39 −Complétude mesurée sur les **11 offres actives** de la source (base live, 2026-08-19 03:39 EDT).
39 +Complétude mesurée sur les **11 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
40 40
41 41 | Champ (`jobs.*`) | Rôle | Complétude |
42 42 |---|---|---|
@@ -72,15 +72,15 @@ Exemple réel : *Driver - Company Car Provided* — Montmagny · ∅ · parue le
72 72
73 73 ## Volumétrie & complétude live
74 74
75 −*(mesuré le 2026-08-19 03:39 EDT dans `data/jobka.db`)*
75 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
76 76
77 77 - **Offres en base** : 11 (dont **11 actives**, 0 masquées comme doublons `dup_of`)
78 78 - **Salaire** : 0/11 actives (0 %)
79 79 - **GPS** : 11/11 actives (100 %)
80 80 - **Mode** : 11/11 actives (100 %)
81 81 - **Parution** : 11/11 actives (100 %)
82 −- **Dernier sync** : 2026-08-19 02:20 — trouvées 11, +0, ~11, -0
83 −- **Syncs enregistrés** (`sync_log`) : 24
82 +- **Dernier sync** : 2026-08-19 04:24 — trouvées 11, +0, ~0, -0
83 +- **Syncs enregistrés** (`sync_log`) : 25
84 84
85 85 ## Erreurs & dépannage
86 86
modified docs/connecteurs/ubisoft.md +5 −5
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/ubisoft.md
7 7 Rôle : Fiche connecteur — Ubisoft (employeur direct, ATS smartrecruiters)
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -36,7 +36,7 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
36 36
37 37 ## Champs → schéma
38 38
39 −Complétude mesurée sur les **123 offres actives** de la source (base live, 2026-08-19 03:39 EDT).
39 +Complétude mesurée sur les **123 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
40 40
41 41 | Champ (`jobs.*`) | Rôle | Complétude |
42 42 |---|---|---|
@@ -77,15 +77,15 @@ Exemple réel : *Communication Analyst – Security Awareness* — Montréal ·
77 77
78 78 ## Volumétrie & complétude live
79 79
80 −*(mesuré le 2026-08-19 03:39 EDT dans `data/jobka.db`)*
80 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
81 81
82 82 - **Offres en base** : 131 (dont **123 actives**, 0 masquées comme doublons `dup_of`)
83 83 - **Salaire** : 0/123 actives (0 %)
84 84 - **GPS** : 123/123 actives (100 %)
85 85 - **Mode** : 2/123 actives (2 %)
86 86 - **Parution** : 123/123 actives (100 %)
87 −- **Dernier sync** : 2026-08-19 02:20 — trouvées 123, +0, ~123, -0
88 −- **Syncs enregistrés** (`sync_log`) : 25
87 +- **Dernier sync** : 2026-08-19 04:24 — trouvées 123, +0, ~0, -0
88 +- **Syncs enregistrés** (`sync_log`) : 26
89 89
90 90 ## Erreurs & dépannage
91 91
modified docs/connecteurs/unit8.md +5 −5
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/unit8.md
7 7 Rôle : Fiche connecteur — Unit8 (employeur direct, ATS workable)
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -36,7 +36,7 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
36 36
37 37 ## Champs → schéma
38 38
39 −Complétude mesurée sur les **3 offres actives** de la source (base live, 2026-08-19 03:39 EDT).
39 +Complétude mesurée sur les **3 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
40 40
41 41 | Champ (`jobs.*`) | Rôle | Complétude |
42 42 |---|---|---|
@@ -72,15 +72,15 @@ Exemple réel : *Senior Data Engineer - Palantir Foundry (Hybrid, Canada)* — M
72 72
73 73 ## Volumétrie & complétude live
74 74
75 −*(mesuré le 2026-08-19 03:39 EDT dans `data/jobka.db`)*
75 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
76 76
77 77 - **Offres en base** : 3 (dont **3 actives**, 0 masquées comme doublons `dup_of`)
78 78 - **Salaire** : 0/3 actives (0 %)
79 79 - **GPS** : 3/3 actives (100 %)
80 80 - **Mode** : 2/3 actives (67 %)
81 81 - **Parution** : 3/3 actives (100 %)
82 −- **Dernier sync** : 2026-08-19 02:20 — trouvées 3, +0, ~3, -0
83 −- **Syncs enregistrés** (`sync_log`) : 24
82 +- **Dernier sync** : 2026-08-19 04:24 — trouvées 3, +0, ~0, -0
83 +- **Syncs enregistrés** (`sync_log`) : 25
84 84
85 85 ## Erreurs & dépannage
86 86
modified docs/connecteurs/usmobile.md +5 −5
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/usmobile.md
7 7 Rôle : Fiche connecteur — US Mobile (employeur direct, ATS lever)
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -36,7 +36,7 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
36 36
37 37 ## Champs → schéma
38 38
39 −Complétude mesurée sur les **6 offres actives** de la source (base live, 2026-08-19 03:39 EDT).
39 +Complétude mesurée sur les **6 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
40 40
41 41 | Champ (`jobs.*`) | Rôle | Complétude |
42 42 |---|---|---|
@@ -72,15 +72,15 @@ Exemple réel : *Staff Frontend Engineer* — Montréal · ∅ · parue le 2026-
72 72
73 73 ## Volumétrie & complétude live
74 74
75 −*(mesuré le 2026-08-19 03:39 EDT dans `data/jobka.db`)*
75 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
76 76
77 77 - **Offres en base** : 6 (dont **6 actives**, 0 masquées comme doublons `dup_of`)
78 78 - **Salaire** : 6/6 actives (100 %)
79 79 - **GPS** : 6/6 actives (100 %)
80 80 - **Mode** : 6/6 actives (100 %)
81 81 - **Parution** : 6/6 actives (100 %)
82 −- **Dernier sync** : 2026-08-19 02:20 — trouvées 6, +0, ~6, -0
83 −- **Syncs enregistrés** (`sync_log`) : 24
82 +- **Dernier sync** : 2026-08-19 04:24 — trouvées 6, +0, ~0, -0
83 +- **Syncs enregistrés** (`sync_log`) : 25
84 84
85 85 ## Erreurs & dépannage
86 86
modified docs/connecteurs/vaco.md +5 −5
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/vaco.md
7 7 Rôle : Fiche connecteur — Vaco (employeur direct, ATS greenhouse)
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -36,7 +36,7 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
36 36
37 37 ## Champs → schéma
38 38
39 −Complétude mesurée sur les **4 offres actives** de la source (base live, 2026-08-19 03:39 EDT).
39 +Complétude mesurée sur les **4 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
40 40
41 41 | Champ (`jobs.*`) | Rôle | Complétude |
42 42 |---|---|---|
@@ -72,15 +72,15 @@ Exemple réel : *Executive Finance and Accounting Recruiter (Full Desk)* — Mon
72 72
73 73 ## Volumétrie & complétude live
74 74
75 −*(mesuré le 2026-08-19 03:39 EDT dans `data/jobka.db`)*
75 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
76 76
77 77 - **Offres en base** : 4 (dont **4 actives**, 0 masquées comme doublons `dup_of`)
78 78 - **Salaire** : 3/4 actives (75 %)
79 79 - **GPS** : 4/4 actives (100 %)
80 80 - **Mode** : 0/4 actives (0 %)
81 81 - **Parution** : 4/4 actives (100 %)
82 −- **Dernier sync** : 2026-08-19 02:20 — trouvées 4, +0, ~4, -0
83 −- **Syncs enregistrés** (`sync_log`) : 24
82 +- **Dernier sync** : 2026-08-19 04:24 — trouvées 4, +0, ~0, -0
83 +- **Syncs enregistrés** (`sync_log`) : 25
84 84
85 85 ## Erreurs & dépannage
86 86
modified docs/connecteurs/valsoft_corp.md +5 −5
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/valsoft_corp.md
7 7 Rôle : Fiche connecteur — Valsoft (employeur direct, ATS workable)
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -36,7 +36,7 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
36 36
37 37 ## Champs → schéma
38 38
39 −Complétude mesurée sur les **37 offres actives** de la source (base live, 2026-08-19 03:39 EDT).
39 +Complétude mesurée sur les **37 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
40 40
41 41 | Champ (`jobs.*`) | Rôle | Complétude |
42 42 |---|---|---|
@@ -72,15 +72,15 @@ Exemple réel : *Finance Manager* — Québec · The salary range for this role
72 72
73 73 ## Volumétrie & complétude live
74 74
75 −*(mesuré le 2026-08-19 03:39 EDT dans `data/jobka.db`)*
75 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
76 76
77 77 - **Offres en base** : 37 (dont **37 actives**, 0 masquées comme doublons `dup_of`)
78 78 - **Salaire** : 4/37 actives (11 %)
79 79 - **GPS** : 37/37 actives (100 %)
80 80 - **Mode** : 6/37 actives (16 %)
81 81 - **Parution** : 37/37 actives (100 %)
82 −- **Dernier sync** : 2026-08-19 02:20 — trouvées 39, +0, ~39, -0
83 −- **Syncs enregistrés** (`sync_log`) : 24
82 +- **Dernier sync** : 2026-08-19 04:25 — trouvées 39, +0, ~4, -0
83 +- **Syncs enregistrés** (`sync_log`) : 25
84 84
85 85 ## Erreurs & dépannage
86 86
modified docs/connecteurs/valtech.md +5 −5
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/valtech.md
7 7 Rôle : Fiche connecteur — Valtech (employeur direct, ATS greenhouse)
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -36,7 +36,7 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
36 36
37 37 ## Champs → schéma
38 38
39 −Complétude mesurée sur les **15 offres actives** de la source (base live, 2026-08-19 03:39 EDT).
39 +Complétude mesurée sur les **15 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
40 40
41 41 | Champ (`jobs.*`) | Rôle | Complétude |
42 42 |---|---|---|
@@ -72,15 +72,15 @@ Exemple réel : *Senior Commerce & Digital Consultant* — Montréal · Le salai
72 72
73 73 ## Volumétrie & complétude live
74 74
75 −*(mesuré le 2026-08-19 03:39 EDT dans `data/jobka.db`)*
75 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
76 76
77 77 - **Offres en base** : 16 (dont **15 actives**, 0 masquées comme doublons `dup_of`)
78 78 - **Salaire** : 2/15 actives (13 %)
79 79 - **GPS** : 15/15 actives (100 %)
80 80 - **Mode** : 0/15 actives (0 %)
81 81 - **Parution** : 15/15 actives (100 %)
82 −- **Dernier sync** : 2026-08-19 02:20 — trouvées 15, +0, ~15, -0
83 −- **Syncs enregistrés** (`sync_log`) : 12
82 +- **Dernier sync** : 2026-08-19 04:25 — trouvées 15, +0, ~0, -0
83 +- **Syncs enregistrés** (`sync_log`) : 13
84 84
85 85 ## Erreurs & dépannage
86 86
modified docs/connecteurs/vaporus_inc.md +5 −5
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/vaporus_inc.md
7 7 Rôle : Fiche connecteur — Vaporus (employeur direct, ATS breezy)
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -36,7 +36,7 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
36 36
37 37 ## Champs → schéma
38 38
39 −Complétude mesurée sur les **2 offres actives** de la source (base live, 2026-08-19 03:39 EDT).
39 +Complétude mesurée sur les **2 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
40 40
41 41 | Champ (`jobs.*`) | Rôle | Complétude |
42 42 |---|---|---|
@@ -72,15 +72,15 @@ Exemple réel : *Représentant aux Ventes Commerciales / Wholesale Sales Represe
72 72
73 73 ## Volumétrie & complétude live
74 74
75 −*(mesuré le 2026-08-19 03:39 EDT dans `data/jobka.db`)*
75 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
76 76
77 77 - **Offres en base** : 2 (dont **2 actives**, 0 masquées comme doublons `dup_of`)
78 78 - **Salaire** : 2/2 actives (100 %)
79 79 - **GPS** : 1/2 actives (50 %)
80 80 - **Mode** : 0/2 actives (0 %)
81 81 - **Parution** : 2/2 actives (100 %)
82 −- **Dernier sync** : 2026-08-19 02:20 — trouvées 2, +0, ~2, -0
83 −- **Syncs enregistrés** (`sync_log`) : 24
82 +- **Dernier sync** : 2026-08-19 04:25 — trouvées 2, +0, ~0, -0
83 +- **Syncs enregistrés** (`sync_log`) : 25
84 84
85 85 ## Erreurs & dépannage
86 86
modified docs/connecteurs/vasco.md +5 −5
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/vasco.md
7 7 Rôle : Fiche connecteur — Vasco (employeur direct, ATS ashby)
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -36,7 +36,7 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
36 36
37 37 ## Champs → schéma
38 38
39 −Complétude mesurée sur les **2 offres actives** de la source (base live, 2026-08-19 03:39 EDT).
39 +Complétude mesurée sur les **2 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
40 40
41 41 | Champ (`jobs.*`) | Rôle | Complétude |
42 42 |---|---|---|
@@ -72,15 +72,15 @@ Exemple réel : *GTM Engineer* — Montréal · ∅ · parue le 2026-06-08.
72 72
73 73 ## Volumétrie & complétude live
74 74
75 −*(mesuré le 2026-08-19 03:39 EDT dans `data/jobka.db`)*
75 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
76 76
77 77 - **Offres en base** : 2 (dont **2 actives**, 0 masquées comme doublons `dup_of`)
78 78 - **Salaire** : 0/2 actives (0 %)
79 79 - **GPS** : 2/2 actives (100 %)
80 80 - **Mode** : 2/2 actives (100 %)
81 81 - **Parution** : 2/2 actives (100 %)
82 −- **Dernier sync** : 2026-08-19 02:20 — trouvées 2, +0, ~2, -0
83 −- **Syncs enregistrés** (`sync_log`) : 24
82 +- **Dernier sync** : 2026-08-19 04:25 — trouvées 2, +0, ~0, -0
83 +- **Syncs enregistrés** (`sync_log`) : 25
84 84
85 85 ## Erreurs & dépannage
86 86
modified docs/connecteurs/venturemedia.md +5 −5
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/venturemedia.md
7 7 Rôle : Fiche connecteur — Venture Media (employeur direct, ATS smartrecruiters)
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -36,7 +36,7 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
36 36
37 37 ## Champs → schéma
38 38
39 −Complétude mesurée sur les **2 offres actives** de la source (base live, 2026-08-19 03:39 EDT).
39 +Complétude mesurée sur les **2 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
40 40
41 41 | Champ (`jobs.*`) | Rôle | Complétude |
42 42 |---|---|---|
@@ -77,15 +77,15 @@ Exemple réel : *Operations Manager (Branch, Warehouse and Logistics) - Permanen
77 77
78 78 ## Volumétrie & complétude live
79 79
80 −*(mesuré le 2026-08-19 03:39 EDT dans `data/jobka.db`)*
80 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
81 81
82 82 - **Offres en base** : 2 (dont **2 actives**, 0 masquées comme doublons `dup_of`)
83 83 - **Salaire** : 2/2 actives (100 %)
84 84 - **GPS** : 2/2 actives (100 %)
85 85 - **Mode** : 1/2 actives (50 %)
86 86 - **Parution** : 2/2 actives (100 %)
87 −- **Dernier sync** : 2026-08-19 02:20 — trouvées 2, +0, ~2, -0
88 −- **Syncs enregistrés** (`sync_log`) : 24
87 +- **Dernier sync** : 2026-08-19 04:25 — trouvées 2, +0, ~0, -0
88 +- **Syncs enregistrés** (`sync_log`) : 25
89 89
90 90 ## Erreurs & dépannage
91 91
modified docs/connecteurs/vicpark.md +5 −5
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/vicpark.md
7 7 Rôle : Fiche connecteur — Victoria Park Medispa (employeur direct, ATS bamboohr)
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -36,7 +36,7 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
36 36
37 37 ## Champs → schéma
38 38
39 −Complétude mesurée sur les **13 offres actives** de la source (base live, 2026-08-19 03:39 EDT).
39 +Complétude mesurée sur les **13 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
40 40
41 41 | Champ (`jobs.*`) | Rôle | Complétude |
42 42 |---|---|---|
@@ -77,15 +77,15 @@ Exemple réel : *Coordinateur(trice) de la réception* — Québec · ∅ · par
77 77
78 78 ## Volumétrie & complétude live
79 79
80 −*(mesuré le 2026-08-19 03:39 EDT dans `data/jobka.db`)*
80 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
81 81
82 82 - **Offres en base** : 13 (dont **13 actives**, 0 masquées comme doublons `dup_of`)
83 83 - **Salaire** : 0/13 actives (0 %)
84 84 - **GPS** : 13/13 actives (100 %)
85 85 - **Mode** : 13/13 actives (100 %)
86 86 - **Parution** : 13/13 actives (100 %)
87 −- **Dernier sync** : 2026-08-19 02:20 — trouvées 13, +0, ~13, -0
88 −- **Syncs enregistrés** (`sync_log`) : 24
87 +- **Dernier sync** : 2026-08-19 04:25 — trouvées 13, +0, ~0, -0
88 +- **Syncs enregistrés** (`sync_log`) : 25
89 89
90 90 ## Erreurs & dépannage
91 91
modified docs/connecteurs/videotron.md +5 −5
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/videotron.md
7 7 Rôle : Fiche connecteur — Vidéotron (employeur direct, ATS smartrecruiters)
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -36,7 +36,7 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
36 36
37 37 ## Champs → schéma
38 38
39 −Complétude mesurée sur les **80 offres actives** de la source (base live, 2026-08-19 03:39 EDT).
39 +Complétude mesurée sur les **80 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
40 40
41 41 | Champ (`jobs.*`) | Rôle | Complétude |
42 42 |---|---|---|
@@ -77,15 +77,15 @@ Exemple réel : *Cuisinier·ère* — Québec · Un salaire de 22,14 $/heure ·
77 77
78 78 ## Volumétrie & complétude live
79 79
80 −*(mesuré le 2026-08-19 03:39 EDT dans `data/jobka.db`)*
80 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
81 81
82 82 - **Offres en base** : 85 (dont **80 actives**, 0 masquées comme doublons `dup_of`)
83 83 - **Salaire** : 11/80 actives (14 %)
84 84 - **GPS** : 80/80 actives (100 %)
85 85 - **Mode** : 32/80 actives (40 %)
86 86 - **Parution** : 80/80 actives (100 %)
87 −- **Dernier sync** : 2026-08-19 02:20 — trouvées 80, +0, ~80, -0
88 −- **Syncs enregistrés** (`sync_log`) : 12
87 +- **Dernier sync** : 2026-08-19 04:25 — trouvées 80, +0, ~0, -0
88 +- **Syncs enregistrés** (`sync_log`) : 13
89 89
90 90 ## Erreurs & dépannage
91 91
modified docs/connecteurs/ville_gatineau.md +5 −5
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/ville_gatineau.md
7 7 Rôle : Fiche connecteur — Ville de Gatineau (employeur direct, ATS njoyn)
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -40,7 +40,7 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
40 40
41 41 ## Champs → schéma
42 42
43 −Complétude mesurée sur les **17 offres actives** de la source (base live, 2026-08-19 03:39 EDT).
43 +Complétude mesurée sur les **17 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
44 44
45 45 | Champ (`jobs.*`) | Rôle | Complétude |
46 46 |---|---|---|
@@ -81,15 +81,15 @@ Exemple réel : *Coordonnateur(trice), revenus* — ∅ · Selon la classe 4 de
81 81
82 82 ## Volumétrie & complétude live
83 83
84 −*(mesuré le 2026-08-19 03:39 EDT dans `data/jobka.db`)*
84 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
85 85
86 86 - **Offres en base** : 18 (dont **17 actives**, 0 masquées comme doublons `dup_of`)
87 87 - **Salaire** : 16/17 actives (94 %)
88 88 - **GPS** : 0/17 actives (0 %)
89 89 - **Mode** : 0/17 actives (0 %)
90 90 - **Parution** : 0/17 actives (0 %)
91 −- **Dernier sync** : 2026-08-19 02:20 — trouvées 17, +0, ~17, -1
92 −- **Syncs enregistrés** (`sync_log`) : 13
91 +- **Dernier sync** : 2026-08-19 04:25 — trouvées 17, +0, ~0, -0
92 +- **Syncs enregistrés** (`sync_log`) : 14
93 93
94 94 ## Erreurs & dépannage
95 95
modified docs/connecteurs/ville_terrebonne.md +5 −5
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/ville_terrebonne.md
7 7 Rôle : Fiche connecteur — Ville de Terrebonne (employeur direct, ATS njoyn)
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -40,7 +40,7 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
40 40
41 41 ## Champs → schéma
42 42
43 −Complétude mesurée sur les **16 offres actives** de la source (base live, 2026-08-19 03:39 EDT).
43 +Complétude mesurée sur les **16 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
44 44
45 45 | Champ (`jobs.*`) | Rôle | Complétude |
46 46 |---|---|---|
@@ -81,15 +81,15 @@ Exemple réel : *Préventionniste* — ∅ · Le taux horaire de ce poste est de
81 81
82 82 ## Volumétrie & complétude live
83 83
84 −*(mesuré le 2026-08-19 03:39 EDT dans `data/jobka.db`)*
84 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
85 85
86 86 - **Offres en base** : 16 (dont **16 actives**, 0 masquées comme doublons `dup_of`)
87 87 - **Salaire** : 15/16 actives (94 %)
88 88 - **GPS** : 0/16 actives (0 %)
89 89 - **Mode** : 0/16 actives (0 %)
90 90 - **Parution** : 0/16 actives (0 %)
91 −- **Dernier sync** : 2026-08-19 02:20 — trouvées 16, +0, ~16, -0
92 −- **Syncs enregistrés** (`sync_log`) : 12
91 +- **Dernier sync** : 2026-08-19 04:25 — trouvées 16, +0, ~0, -0
92 +- **Syncs enregistrés** (`sync_log`) : 13
93 93
94 94 ## Erreurs & dépannage
95 95
modified docs/connecteurs/vmlcanadaen.md +5 −5
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/vmlcanadaen.md
7 7 Rôle : Fiche connecteur — VML Canada (employeur direct, ATS greenhouse)
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -36,7 +36,7 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
36 36
37 37 ## Champs → schéma
38 38
39 −Complétude mesurée sur les **2 offres actives** de la source (base live, 2026-08-19 03:39 EDT).
39 +Complétude mesurée sur les **2 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
40 40
41 41 | Champ (`jobs.*`) | Rôle | Complétude |
42 42 |---|---|---|
@@ -72,15 +72,15 @@ Exemple réel : *Senior Strategist (Passport Brand Design)* — Montréal · $65
72 72
73 73 ## Volumétrie & complétude live
74 74
75 −*(mesuré le 2026-08-19 03:39 EDT dans `data/jobka.db`)*
75 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
76 76
77 77 - **Offres en base** : 2 (dont **2 actives**, 0 masquées comme doublons `dup_of`)
78 78 - **Salaire** : 1/2 actives (50 %)
79 79 - **GPS** : 2/2 actives (100 %)
80 80 - **Mode** : 0/2 actives (0 %)
81 81 - **Parution** : 2/2 actives (100 %)
82 −- **Dernier sync** : 2026-08-19 02:20 — trouvées 2, +0, ~2, -0
83 −- **Syncs enregistrés** (`sync_log`) : 24
82 +- **Dernier sync** : 2026-08-19 04:25 — trouvées 2, +0, ~0, -0
83 +- **Syncs enregistrés** (`sync_log`) : 25
84 84
85 85 ## Erreurs & dépannage
86 86
modified docs/connecteurs/vo2_group.md +5 −5
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/vo2_group.md
7 7 Rôle : Fiche connecteur — VO2 Group (employeur direct, ATS lever)
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -36,7 +36,7 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
36 36
37 37 ## Champs → schéma
38 38
39 −Complétude mesurée sur les **17 offres actives** de la source (base live, 2026-08-19 03:39 EDT).
39 +Complétude mesurée sur les **17 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
40 40
41 41 | Champ (`jobs.*`) | Rôle | Complétude |
42 42 |---|---|---|
@@ -72,15 +72,15 @@ Exemple réel : *[VO2 Canada] - Analyste d'Affaires (BA) – Missions Ponctuelle
72 72
73 73 ## Volumétrie & complétude live
74 74
75 −*(mesuré le 2026-08-19 03:39 EDT dans `data/jobka.db`)*
75 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
76 76
77 77 - **Offres en base** : 17 (dont **17 actives**, 0 masquées comme doublons `dup_of`)
78 78 - **Salaire** : 1/17 actives (6 %)
79 79 - **GPS** : 17/17 actives (100 %)
80 80 - **Mode** : 17/17 actives (100 %)
81 81 - **Parution** : 17/17 actives (100 %)
82 −- **Dernier sync** : 2026-08-19 02:20 — trouvées 17, +0, ~17, -0
83 −- **Syncs enregistrés** (`sync_log`) : 24
82 +- **Dernier sync** : 2026-08-19 04:25 — trouvées 17, +0, ~0, -0
83 +- **Syncs enregistrés** (`sync_log`) : 25
84 84
85 85 ## Erreurs & dépannage
86 86
modified docs/connecteurs/vooban.md +5 −5
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/vooban.md
7 7 Rôle : Fiche connecteur — Vooban (employeur direct, ATS greenhouse)
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -36,7 +36,7 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
36 36
37 37 ## Champs → schéma
38 38
39 −Complétude mesurée sur les **18 offres actives** de la source (base live, 2026-08-19 03:39 EDT).
39 +Complétude mesurée sur les **18 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
40 40
41 41 | Champ (`jobs.*`) | Rôle | Complétude |
42 42 |---|---|---|
@@ -72,15 +72,15 @@ Exemple réel : *Développeur AI Front-End* — Montréal · ∅ · parue le 202
72 72
73 73 ## Volumétrie & complétude live
74 74
75 −*(mesuré le 2026-08-19 03:39 EDT dans `data/jobka.db`)*
75 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
76 76
77 77 - **Offres en base** : 18 (dont **18 actives**, 0 masquées comme doublons `dup_of`)
78 78 - **Salaire** : 0/18 actives (0 %)
79 79 - **GPS** : 18/18 actives (100 %)
80 80 - **Mode** : 0/18 actives (0 %)
81 81 - **Parution** : 18/18 actives (100 %)
82 −- **Dernier sync** : 2026-08-19 02:20 — trouvées 18, +0, ~18, -0
83 −- **Syncs enregistrés** (`sync_log`) : 12
82 +- **Dernier sync** : 2026-08-19 04:25 — trouvées 18, +0, ~0, -0
83 +- **Syncs enregistrés** (`sync_log`) : 13
84 84
85 85 ## Erreurs & dépannage
86 86
modified docs/connecteurs/vosker.md +5 −5
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/vosker.md
7 7 Rôle : Fiche connecteur — Vosker (employeur direct, ATS smartrecruiters)
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -36,7 +36,7 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
36 36
37 37 ## Champs → schéma
38 38
39 −Complétude mesurée sur les **19 offres actives** de la source (base live, 2026-08-19 03:39 EDT).
39 +Complétude mesurée sur les **19 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
40 40
41 41 | Champ (`jobs.*`) | Rôle | Complétude |
42 42 |---|---|---|
@@ -77,15 +77,15 @@ Exemple réel : *Chef.fe des revenus* — Montréal · ∅ · parue le 2026-08-1
77 77
78 78 ## Volumétrie & complétude live
79 79
80 −*(mesuré le 2026-08-19 03:39 EDT dans `data/jobka.db`)*
80 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
81 81
82 82 - **Offres en base** : 20 (dont **19 actives**, 0 masquées comme doublons `dup_of`)
83 83 - **Salaire** : 0/19 actives (0 %)
84 84 - **GPS** : 19/19 actives (100 %)
85 85 - **Mode** : 17/19 actives (89 %)
86 86 - **Parution** : 19/19 actives (100 %)
87 −- **Dernier sync** : 2026-08-19 02:20 — trouvées 19, +0, ~19, -0
88 −- **Syncs enregistrés** (`sync_log`) : 12
87 +- **Dernier sync** : 2026-08-19 04:25 — trouvées 19, +0, ~0, -0
88 +- **Syncs enregistrés** (`sync_log`) : 13
89 89
90 90 ## Erreurs & dépannage
91 91
modified docs/connecteurs/voxdata.md +5 −5
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/voxdata.md
7 7 Rôle : Fiche connecteur — VOXDATA (employeur direct, ATS breezy)
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -36,7 +36,7 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
36 36
37 37 ## Champs → schéma
38 38
39 −Complétude mesurée sur les **5 offres actives** de la source (base live, 2026-08-19 03:39 EDT).
39 +Complétude mesurée sur les **5 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
40 40
41 41 | Champ (`jobs.*`) | Rôle | Complétude |
42 42 |---|---|---|
@@ -72,15 +72,15 @@ Exemple réel : *Agent(e) bilingue, service à la clientèle \| Bilingual Custom
72 72
73 73 ## Volumétrie & complétude live
74 74
75 −*(mesuré le 2026-08-19 03:39 EDT dans `data/jobka.db`)*
75 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
76 76
77 77 - **Offres en base** : 5 (dont **5 actives**, 0 masquées comme doublons `dup_of`)
78 78 - **Salaire** : 5/5 actives (100 %)
79 79 - **GPS** : 5/5 actives (100 %)
80 80 - **Mode** : 5/5 actives (100 %)
81 81 - **Parution** : 5/5 actives (100 %)
82 −- **Dernier sync** : 2026-08-19 02:20 — trouvées 5, +0, ~5, -0
83 −- **Syncs enregistrés** (`sync_log`) : 24
82 +- **Dernier sync** : 2026-08-19 04:25 — trouvées 5, +0, ~0, -0
83 +- **Syncs enregistrés** (`sync_log`) : 25
84 84
85 85 ## Erreurs & dépannage
86 86
modified docs/connecteurs/walmart.md +12 −12
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/walmart.md
7 7 Rôle : Fiche connecteur — Walmart Canada (employeur direct, ATS workday)
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -38,7 +38,7 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
38 38
39 39 ## Champs → schéma
40 40
41 −Complétude mesurée sur les **980 offres actives** de la source (base live, 2026-08-19 03:39 EDT).
41 +Complétude mesurée sur les **979 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
42 42
43 43 | Champ (`jobs.*`) | Rôle | Complétude |
44 44 |---|---|---|
@@ -61,10 +61,10 @@ Complétude mesurée sur les **980 offres actives** de la source (base live, 202
61 61 | `category` — Catégorie | taxonomie interne (TI, Santé, …) | 91 % |
62 62 | `language` — Langue | fr / en / bilingue (source ou heuristique) | 100 % |
63 63 | `company_logo` — Logo employeur | URL du logo si exposé par la source | 0 % |
64 −| `apply_url` — Candidature | lien de candidature directe | 31 % |
64 +| `apply_url` — Candidature | lien de candidature directe | 33 % |
65 65 | `gps` — GPS | lat/lng (géocodage sans invention) | 91 % |
66 66
67 −Exemple réel : *(CAN) Caissier* — Saint-Leonard · The minimum rate of pay for this position starts from $18.75. · parue le 2026-08-19.
67 +Exemple réel : *(CAN) OMNI Customer Fulfillment Associate* — Laval · The minimum rate of pay for this position starts from $18.75. · parue le 2026-08-19.
68 68
69 69 ## Fréquence & budgets
70 70
@@ -79,15 +79,15 @@ Exemple réel : *(CAN) Caissier* — Saint-Leonard · The minimum rate of pay fo
79 79
80 80 ## Volumétrie & complétude live
81 81
82 −*(mesuré le 2026-08-19 03:39 EDT dans `data/jobka.db`)*
82 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
83 83
84 −- **Offres en base** : 1016 (dont **980 actives**, 0 masquées comme doublons `dup_of`)
85 −- **Salaire** : 915/980 actives (93 %)
86 −- **GPS** : 893/980 actives (91 %)
87 −- **Mode** : 1/980 actives (0 %)
88 −- **Parution** : 980/980 actives (100 %)
89 −- **Dernier sync** : 2026-08-19 02:30 — trouvées 979, +11, ~968, -2
90 −- **Syncs enregistrés** (`sync_log`) : 12
84 +- **Offres en base** : 1016 (dont **979 actives**, 0 masquées comme doublons `dup_of`)
85 +- **Salaire** : 915/979 actives (93 %)
86 +- **GPS** : 892/979 actives (91 %)
87 +- **Mode** : 1/979 actives (0 %)
88 +- **Parution** : 979/979 actives (100 %)
89 +- **Dernier sync** : 2026-08-19 04:35 — trouvées 977, +0, ~696, -1
90 +- **Syncs enregistrés** (`sync_log`) : 13
91 91
92 92 ## Erreurs & dépannage
93 93
modified docs/connecteurs/xplornet.md +5 −5
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/xplornet.md
7 7 Rôle : Fiche connecteur — Xplornet (employeur direct, ATS smartrecruiters)
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -36,7 +36,7 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
36 36
37 37 ## Champs → schéma
38 38
39 −Complétude mesurée sur les **1 offres actives** de la source (base live, 2026-08-19 03:39 EDT).
39 +Complétude mesurée sur les **1 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
40 40
41 41 | Champ (`jobs.*`) | Rôle | Complétude |
42 42 |---|---|---|
@@ -77,15 +77,15 @@ Exemple réel : *Call Center Representative* — Montréal · ∅ · parue le 20
77 77
78 78 ## Volumétrie & complétude live
79 79
80 −*(mesuré le 2026-08-19 03:39 EDT dans `data/jobka.db`)*
80 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
81 81
82 82 - **Offres en base** : 1 (dont **1 actives**, 0 masquées comme doublons `dup_of`)
83 83 - **Salaire** : 0/1 actives (0 %)
84 84 - **GPS** : 1/1 actives (100 %)
85 85 - **Mode** : 0/1 actives (0 %)
86 86 - **Parution** : 1/1 actives (100 %)
87 −- **Dernier sync** : 2026-08-19 02:30 — trouvées 1, +0, ~1, -0
88 −- **Syncs enregistrés** (`sync_log`) : 24
87 +- **Dernier sync** : 2026-08-19 04:35 — trouvées 1, +0, ~0, -0
88 +- **Syncs enregistrés** (`sync_log`) : 25
89 89
90 90 ## Erreurs & dépannage
91 91
modified docs/connecteurs/xsolla.md +5 −5
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/xsolla.md
7 7 Rôle : Fiche connecteur — Xsolla (employeur direct, ATS lever)
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -36,7 +36,7 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
36 36
37 37 ## Champs → schéma
38 38
39 −Complétude mesurée sur les **21 offres actives** de la source (base live, 2026-08-19 03:39 EDT).
39 +Complétude mesurée sur les **21 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
40 40
41 41 | Champ (`jobs.*`) | Rôle | Complétude |
42 42 |---|---|---|
@@ -72,15 +72,15 @@ Exemple réel : *Site Reliability Engineer (Monetization)* — Montréal · ∅
72 72
73 73 ## Volumétrie & complétude live
74 74
75 −*(mesuré le 2026-08-19 03:39 EDT dans `data/jobka.db`)*
75 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
76 76
77 77 - **Offres en base** : 21 (dont **21 actives**, 0 masquées comme doublons `dup_of`)
78 78 - **Salaire** : 20/21 actives (95 %)
79 79 - **GPS** : 20/21 actives (95 %)
80 80 - **Mode** : 21/21 actives (100 %)
81 81 - **Parution** : 21/21 actives (100 %)
82 −- **Dernier sync** : 2026-08-19 02:30 — trouvées 21, +0, ~21, -0
83 −- **Syncs enregistrés** (`sync_log`) : 24
82 +- **Dernier sync** : 2026-08-19 04:35 — trouvées 21, +0, ~0, -0
83 +- **Syncs enregistrés** (`sync_log`) : 25
84 84
85 85 ## Erreurs & dépannage
86 86
modified docs/connecteurs/youset.md +5 −5
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/youset.md
7 7 Rôle : Fiche connecteur — YouSet (employeur direct, ATS breezy)
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -36,7 +36,7 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
36 36
37 37 ## Champs → schéma
38 38
39 −Complétude mesurée sur les **1 offres actives** de la source (base live, 2026-08-19 03:39 EDT).
39 +Complétude mesurée sur les **1 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
40 40
41 41 | Champ (`jobs.*`) | Rôle | Complétude |
42 42 |---|---|---|
@@ -72,15 +72,15 @@ Exemple réel : *Courtier en assurance de dommages des particuliers* — Montré
72 72
73 73 ## Volumétrie & complétude live
74 74
75 −*(mesuré le 2026-08-19 03:39 EDT dans `data/jobka.db`)*
75 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
76 76
77 77 - **Offres en base** : 1 (dont **1 actives**, 0 masquées comme doublons `dup_of`)
78 78 - **Salaire** : 0/1 actives (0 %)
79 79 - **GPS** : 1/1 actives (100 %)
80 80 - **Mode** : 1/1 actives (100 %)
81 81 - **Parution** : 1/1 actives (100 %)
82 −- **Dernier sync** : 2026-08-19 02:30 — trouvées 1, +0, ~1, -0
83 −- **Syncs enregistrés** (`sync_log`) : 24
82 +- **Dernier sync** : 2026-08-19 04:35 — trouvées 1, +0, ~0, -0
83 +- **Syncs enregistrés** (`sync_log`) : 25
84 84
85 85 ## Erreurs & dépannage
86 86
modified docs/connecteurs/ziptrekeco.md +5 −5
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/ziptrekeco.md
7 7 Rôle : Fiche connecteur — Ziptrek Tremblant (employeur direct, ATS bamboohr)
8 −Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -36,7 +36,7 @@ Généré : 2026-08-19 03:39 EDT par scripts/gen_connector_docs.py — NE PAS
36 36
37 37 ## Champs → schéma
38 38
39 −Complétude mesurée sur les **2 offres actives** de la source (base live, 2026-08-19 03:39 EDT).
39 +Complétude mesurée sur les **2 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
40 40
41 41 | Champ (`jobs.*`) | Rôle | Complétude |
42 42 |---|---|---|
@@ -77,15 +77,15 @@ Exemple réel : *Guide de tyroliennes Mont-Tremblant TEMPS PLEIN- 2026* — Qué
77 77
78 78 ## Volumétrie & complétude live
79 79
80 −*(mesuré le 2026-08-19 03:39 EDT dans `data/jobka.db`)*
80 +*(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
81 81
82 82 - **Offres en base** : 2 (dont **2 actives**, 0 masquées comme doublons `dup_of`)
83 83 - **Salaire** : 2/2 actives (100 %)
84 84 - **GPS** : 2/2 actives (100 %)
85 85 - **Mode** : 2/2 actives (100 %)
86 86 - **Parution** : 2/2 actives (100 %)
87 −- **Dernier sync** : 2026-08-19 02:30 — trouvées 2, +0, ~2, -0
88 −- **Syncs enregistrés** (`sync_log`) : 12
87 +- **Dernier sync** : 2026-08-19 04:35 — trouvées 2, +0, ~0, -0
88 +- **Syncs enregistrés** (`sync_log`) : 13
89 89
90 90 ## Erreurs & dépannage
91 91
modified jobka/connectors/njoyn.py +8 −4
@@ -145,15 +145,19 @@ class NjoynConnector(BaseConnector):
145 145 return [it for it in items if it["title"]]
146 146
147 147 def _parse_table(self, page: str) -> list[dict]:
148 − """Habillage classique en tableau : N° | Titre | Catégorie | Ville |
149 − Pays (ex. CGI). Retourne aussi ville/pays pour le filtre Québec."""
148 + """Habillage tableau multi-colonnes : N° | Titre | Catégorie | Ville |
149 + Pays (ex. CGI). Signature stricte — le libellé du lien est le numéro
150 + de poste lui-même et la ligne a ≥ 4 colonnes — pour ne JAMAIS
151 + intercepter les habillages « titre dans le lien » (STL, RTC…)."""
150 152 items, seen = [], set()
151 153 for tr in _TR_RE.findall(page):
152 − m = _JOBID_RE.search(tr)
154 + m = _ROW_LINK_RE.search(tr)
153 155 if not m or m.group(1) in seen:
154 156 continue
157 + if _txt(m.group(2)) != m.group(1):
158 + continue # le lien porte un titre : autre habillage
155 159 tds = [_txt(td) for td in _TD_RE.findall(tr)]
156 − if len(tds) < 2:
160 + if len(tds) < 4:
157 161 continue
158 162 seen.add(m.group(1))
159 163 title = tds[1] if len(tds) > 1 else ""
160 164