Repository Public
1<!--2=============================================================================3Job·Ka — Groupe KA4Auteur : Simon-Pierre Boucher5Contact : contact@spboucher.ai6Fichier : docs/connecteurs/ats-eightfold.md7Rôle : Fiche plateforme ATS eightfold — mécanique partagée + tableau des 1 tenants8Généré : 2026-10-14 18:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,9 relancer le script pour régénérer.10=============================================================================11-->1213# Plateforme ATS `eightfold`1415**1 employeurs connectés** via cette plateforme — **65 offres actives**. Module partagé : `jobka/connectors/eightfold.py` ; un employeur = une sous-classe d'environ 10 lignes.1617## Description & mécanique1819> Plateforme Eightfold AI (sites carrières « PCSX »).20>21> API JSON publique, non authentifiée (constatée sur jobs.autodesk.com,22> 2026-09-25 — migration d'Autodesk depuis Workday) :23>24> - liste : GET https://<base>/api/pcsx/search?domain=<domain>&query=25> &start=N&num=10&sort_by=timestamp26> -> {data:{count, positions:[{id, atsJobId, displayJobId, name,27> locations:[…], standardizedLocations:[…] (parallèles),28> creationTs(epoch), workLocationOption, positionUrl}]}}29> NB: la pagination est instable (le `count` fluctue d'un appel à30> l'autre et des lignes reviennent d'une page à l'autre) — on31> déduplique par `id` et on borne par max_pages.32> NB: `num` est plafonné à 10 par le serveur.33> - détail : GET https://<base>/careers/job/<id> — la page publique est rendue34> serveur avec un bloc JSON-LD schema.org/JobPosting COMPLET35> (description avec la section transparence salariale, datePosted,36> validThrough, employmentType, jobLocation structurés). L'API37> api/pcsx/position_details existe aussi mais sa `jobDescription`38> est TRONQUÉE (sans le paragraphe salaire, constaté 2026-09-25 sur39> autodesk : 9 830 car. vs 11 683 dans le JSON-LD) — elle ne sert40> que de repli si le JSON-LD disparaît.41>42> L'ancien endpoint Eightfold classique (/api/apply/v2/jobs) répond 40343> « Not authorized for PCSX » sur ces tenants — ne pas l'utiliser.44>45> Les boards listent le monde entier : filtrage client par `is_quebec_location`46> sur TOUTES les valeurs de `locations` + `standardizedLocations` (les postes47> télétravail pancanadiens listent le Québec parmi leurs lieux), puis page48> détail seulement pour les postes québécois (avec cache BD).4950## Accès5152- **Pagination** : flux unique (une requête liste)53- **Backend** : GET/POST direct `requests` (throttlé, User-Agent `JobKaBot/1.0` identifié)54- **Auth** : aucune — API/pages publiques du site carrières.55- **Throttle** : 0.7 s entre requêtes.5657## Tenants connectés5859| Employeur | Actives | Salaire | GPS | Mode | Dernier sync | OK |60|---|---|---|---|---|---|---|61| [Autodesk](autodesk.md) | 65 | 85 % | 95 % | 17 % | 2026-10-14 18:12 | ✅ |6263## Licence / conformité6465**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.6667## Historique6869**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 :70- `fd4bfc8` qualité lieux : rejet des villes hors Québec, bâtiments McGill → Montréal ;71- `5a66f48` +59 employeurs (sondage massif d'ATS + détection de pages carrières) ;72- `4917d57` 8 nouveaux ATS (Taleo, Njoyn, UltiPro, iCIMS, SuccessFactors, ADP WFN, Digital Recruiters, Workland) + 23 employeurs publics/parapublics ;73- `f6e7571` portails Guichet-Emplois, Jobillico, Espresso-Jobs — l'offre directe gagne toujours la canonique (dédup) ;74- `744cbfc` badge « Offre directe », stats directes/portails, dépôt direct employeurs ;75- `1604ff9` reprise sur coupure WAF Guichet-Emplois (retry + acquis partiel).7677Commits touchant `jobka/connectors/eightfold.py` :7879- `8373f654` 2026-09-25 [ka6] fix connecteur autodesk: migration Workday → Eightfold PCSX (nouvelle plateforme jobka/connectors/eightfold.py) — le statut stale vient du sync de 12:19 en 404 sur https://autodesk.wd1.myworkdayjobs.com/wday/cxs/autodesk/Ext/jobs, corps Workday « not found: Job_Posting_Site_ID=Ext » : le site de publication Ext du tenant est DÉCOMMISSIONNÉ (toutes les variantes de nom testées → 404 ; seul survit le portail stages « uni », 27 postes hors périmètre) et la page carrières officielle autodesk.com/careers (403 Akamai en direct, lue via Scrapfly render_js) pointe désormais vers jobs.autodesk.com/careers = Eightfold AI variante PCSX (l'endpoint Eightfold classique /api/apply/v2/jobs répond 403 « Not authorized for PCSX »). Première plateforme Eightfold du repo, écrite dans le style des voisines (workday.py/workable.py) : liste GET /api/pcsx/search?domain=…&start=N&num=10&sort_by=timestamp (num plafonné serveur à 10, pagination INSTABLE — count fluctuant et lignes répétées — dédup par id + garde-fou max_pages), filtre client is_quebec_location sur TOUTES les valeurs de locations[]+standardizedLocations[] (les remote pancanadiens listent le Québec parmi des dizaines de lieux ; la facette serveur location=QC,Canada matche à tort un poste remote 100 % US, vérifié — le filtre client fait foi), détail via la page publique /careers/job/<id> rendue serveur avec JSON-LD JobPosting COMPLET (réutilise _jsonld.py : description AVEC la section transparence salariale — l'API position_details la tronque : 9 830 car. vs 11 683, ce qui déclenchait l'alerte « 96 % des offres sans salaire » au premier essai —, employmentType normalisé FULL_TIME→FULL TIME, validThrough, re-sélection de l'adresse QC parmi les jobLocation multi-lieux pour ne pas étiqueter Toronto sur une offre QC), repli position_details si le balisage disparaît ; UA JobKaBot vérifié accepté partout. Continuité des IDs préservée : les req IDs Workday (26WDxxxxxx) survivent dans atsJobId → les 22 offres QC encore publiées se METTENT À JOUR (URLs migrées vers jobs.autodesk.com, vérifiées en base) au lieu d'être recréées ; les 28 dépubliées pendant la migration (sondage individuel par req ID → 0 hit) sont retirées proprement par le garde-fou 2-miss. Sync isolé rejoué ×3 : found=22 stable, ok=1, ~15-42 s — 22 est le volume QC réel du nouveau board (126 postes monde, re-mesuré ×2 en connecteur et en urllib nu ; la médiane 50 datait du board Workday d'avant la purge de migration), fiches complètes : 22/22 ville+type+date+description, 15/22 salaire (les stages n'en publient pas), work_mode 5/22 (≈ 20 % historique). sources.json : careers_url → jobs.autodesk.com/careers, connector → eightfold, url vide → autodesk.com (même artefact que les vagues précédentes). Fiches docs/connecteurs/ autodesk.md + ats-workday.md + ats-eightfold.md (nouvelle) + INDEX.md régénérées via scripts/gen_connector_docs.py (les 1129 autres fiches, dont seuls les instantanés horodatés changeaient, restaurées — hors périmètre). 106 tests pytest verts. pm2 restart job-ka-sync OK, site local 200, www.job-ka.com 200.80