SPB Git forge

spb/job-ka

Public
229commits 1branches 0releases
38.1 MBsize
maindefault branch
6 h agolast push
HTML 82.1% Python 14.6% TypeScript 1.9% CSS 1% JavaScript 0.5%
10.7 KB · 99 lines markdown
Rendered Raw Blame History
1<!--2=============================================================================3Job·Ka — Groupe KA4Auteur  : Simon-Pierre Boucher5Contact : contact@spboucher.ai6Fichier : docs/connecteurs/altusgroup.md7Rôle    : Fiche connecteur — Groupe Altus (employeur direct, ATS workday)8Généré  : 2026-09-21 18:06 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,9          relancer le script pour régénérer.10=============================================================================11-->1213# Groupe Altus (`altusgroup`)1415**Employeur direct** · Plateforme ATS : [`workday`](ats-workday.md) · Statut registre : actif · Connecteur : `jobka/connectors/altusgroup.py`1617## Description1819- **Site** : [Groupe Altus](https://www.altusgroup.com)20- **Page carrières** : https://altusgroup.wd3.myworkdayjobs.com/AltusGroup21- **Secteurs** : Immobilier22- **Région** : Montréal23- Offres marquées **« Offre directe »** dans l'app (badge) : la candidature se fait chez l'employeur, jamais via un intermédiaire.2425## Accès2627- **Mécanique** : voir la fiche plateforme [`ats-workday.md`](ats-workday.md) — API JSON publique du site carrières, backend `requests` direct (Scrapfly seulement si indiqué sur la fiche plateforme).28- **Identifiants du tenant** (attributs du connecteur) :2930| Attribut | Valeur |31|---|---|32| `EMPLOYER` | `Groupe Altus` |33| `HOST` | `wd3` |34| `SITE` | `AltusGroup` |35| `TENANT` | `altusgroup` |36- **Throttle** : 0.7 s entre requêtes.37- **Filtre Québec** : seuls les postes localisés au Québec sont conservés (facette serveur quand l'ATS en offre une, sinon `is_quebec_location` côté client).3839## Champs → schéma4041*Aucune offre active en base pour cette source.*4243## Fréquence & budgets4445- **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- **Throttle** : 0.7 s minimum entre deux requêtes vers la source (`request_delay`).47- **Budgets / plafonds (variables d'environnement)** :4849| Variable | Défaut |50|---|---|51| `JOBKA_WORKDAY_DETAIL_LIMIT` | `300` |52- 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.5354## Volumétrie & complétude live5556*(mesuré le 2026-09-21 18:06 EDT dans `data/jobka.db`)*5758- **Offres en base** : 1 (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-09-21 16:37 — trouvées 0, +0, ~0, -064- **Syncs enregistrés** (`sync_log`) : 2886566## Erreurs & dépannage6768Erreurs relevées dans `sync_log` :6970| Erreur | Occurrences | Dernière fois |71|---|---|---|72| Workday non-JSON après 3 essais (HTTP 200, text/html) : Expecting value: line 1 column 1 (… | 3 | 2026-09-19 02:43 |73| HTTPSConnectionPool(host='altusgroup.wd3.myworkdayjobs.com', port=443): Max retries exceed… | 1 | 2026-09-18 12:51 |74| Expecting value: line 1 column 1 (char 0) | 8 | 2026-08-29 03:16 |7576- Rejouer un sync isolé : `.venv/bin/python run.py sync altusgroup` puis inspecter `sync_log` : `sqlite3 data/jobka.db "SELECT * FROM sync_log WHERE source='altusgroup' ORDER BY ts DESC LIMIT 5;"`77- 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`.7879## Licence / conformité8081**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 Groupe Altus » 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.8283## Historique8485**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 :86- `fd4bfc8` qualité lieux : rejet des villes hors Québec, bâtiments McGill → Montréal ;87- `5a66f48` +59 employeurs (sondage massif d'ATS + détection de pages carrières) ;88- `4917d57` 8 nouveaux ATS (Taleo, Njoyn, UltiPro, iCIMS, SuccessFactors, ADP WFN, Digital Recruiters, Workland) + 23 employeurs publics/parapublics ;89- `f6e7571` portails Guichet-Emplois, Jobillico, Espresso-Jobs — l'offre directe gagne toujours la canonique (dédup) ;90- `744cbfc` badge « Offre directe », stats directes/portails, dépôt direct employeurs ;91- `1604ff9` reprise sur coupure WAF Guichet-Emplois (retry + acquis partiel).9293Commits touchant `jobka/connectors/altusgroup.py` :9495- `f092997` 2026-09-19 [ka6] fix connecteur altusgroup: faux positif de supervision récurrent (0 offre QC toujours légitime) + échec nocturne transitoire de maintenance Workday — aucun défaut du connecteur, ajout du secteur manquant dans sources.json — le statut stale vient de la définition de succès de la supervision : le tenant Workday altusgroup.wd3 n'a AUCUNE offre QC depuis la dépublication fin août de l'unique offre montréalaise « Cost Consultant/Conseiller(ère) en analyse de coûts » R0013818 (active=0 depuis le 2026-08-26), donc les syncs horaires rendent ok=1 found=0 (médiane 0.0) et sont comptés comme non-succès depuis 565 h — même profil que quadreal ef41976, cpab e498c30, drop_genie 8a53793, et déjà diagnostiqué sur CE connecteur les 2026-08-26, 2026-09-12 et 2026-09-18. Le seul échec réel (sync de 02:43 cette nuit : « Workday non-JSON après 3 essais, HTTP 200 text/html ») est la fenêtre de maintenance nocturne Workday ~03 h EDT documentée dans workday.py (retry+backoff déjà en place), non reproduite au matin. Le connecteur est INTACT et re-vérifié live sous un angle NOUVEAU (l'angle mort multi-lieux type quadreal) : 42 offres sur 3 pages, zéro occurrence de quebec/montréal/laval/gatineau/sherbrooke/rougemont dans le JSON complet des listes, recherche serveur searchText Quebec/Montréal → total 0, et les 8 offres « N Locations » (jusqu'à 21 lieux) vérifiées UNE À UNE au détail cxs : 41 localisations cumulées, toutes US/UK (Texas, New York, Illinois, London, Manchester…), aucune canadienne hors Ontario/Alberta déjà exclues. Correction au passage du dernier artefact vague D dans data/sources.json : sectors [] → [Immobilier] (Altus Group = intelligence en immobilier commercial ; secteur déjà au vocabulaire, 29 sources ; la fiche affichait « Secteurs : n/d »). Docstring du connecteur mise à jour (re-vérif 2026-09-19, multi-lieux couverts). Sync isolé rejoué : found=0 en 3,9 s, ok=1 — 0 reste le volume légitime tant qu'Altus ne republie pas au Québec ; les offres reviendront d'elles-mêmes si republiées (filtre client is_quebec_location + repli facette serveur opérationnels). 106 tests pytest verts. pm2 restart job-ka-sync OK, site local 200, www.job-ka.com 200.96- `2fc9e63` 2026-09-18 [ka6] fix connecteur altusgroup: faux positif de supervision (0 offre QC légitime — Altus n'a plus de poste au Québec) + échec DNS transitoire ponctuel — aucun défaut du connecteur, correction d'un artefact sources.json (url vide) — le statut stale vient de la définition de succès de la supervision : le tenant Workday altusgroup.wd3 (site AltusGroup) n'a AUCUNE offre QC depuis le retrait de l'unique offre montréalaise fin août (R0013818, déjà constaté le 2026-08-26), donc chaque sync horaire rend ok=1 found=0 (médiane 0.0) et est compté comme non-succès depuis le 2026-08-26 (551 h). Le connecteur est INTACT et re-vérifié live : l'API cxs répond 200 avec 42 offres (Toronto, Calgary, Ottawa, US, UK, Paris, Sydney, Singapour, Inde…) — recherche serveur « Quebec »/« Montréal » = 0 résultat, zéro occurrence de quebec/montréal/laval/gatineau/sherbrooke dans le JSON complet des 3 pages (l'aveuglement type stateindustrial est exclu ; le hook _external_id posé le 2026-09-12 reste correct). L'unique sync en échec (18/09 12:51) est une NameResolutionError DNS transitoire sur altusgroup.wd3.myworkdayjobs.com, non reproduite (API OK en live). Même profil que altom_transport ea13137, earthrated f7b1c35, canadasmotorcycle 175b215, jsheldllc bdc5d09, psacunion 4d8080b : tenant à volume QC nul/faible compté non-succès par la supervision. Correction au passage de l'artefact du générateur vague D : url vide dans data/sources.json → https://www.altusgroup.com (vérifié 200, titre « Altus Group - Data-Powered CRE Technology & Analytics » ; la fiche affichait « Site : [Groupe Altus]() »). Le nom d'employeur « Groupe Altus » est correct. Docstring du connecteur mise à jour (42 offres, re-vérif 2026-09-18). Sync isolé rejoué : found=0 en 4,0 s, ok=1 — 0 est le volume légitime tant qu'Altus ne republie pas au Québec ; les offres reviendront d'elles-mêmes si republiées. 106 tests pytest verts. pm2 restart job-ka-sync OK, site local 200, www.job-ka.com 200.97- `4e9be24` 2026-09-12 [ka6] fix connecteur altusgroup: external_id régional → ID de réquisition (hook _external_id dans la plateforme workday, défaut inchangé) — le tenant altusgroup.wd3 préfixe bulletFields par la région quand il y en a une (['Ontario','R0013639'] vs ['R0013942'] seul), si bien que bullets[0] devenait l'external_id : l'offre QC historique était en base sous external_id='Quebec', et le sync du 2026-08-26 trouvait 2 offres pour 1 seule stockée (collision d'ID entre postes d'une même région). L'extraction est désormais isolée dans un hook _external_id() de WorkdayConnector (comportement par défaut strictement identique pour les autres tenants) et surchargée dans altusgroup.py : premier bullet au format réquisition R+chiffres, sinon suffixe du chemin. Vérifié live : 36 postes scannés → 36 IDs uniques au format R00xxxxx, 0 poste non conforme. Volume 0 légitime AUJOURD'HUI : 7 postes Canada, tous Toronto — aucune offre QC depuis la dépublication de l'offre montréalaise le 2026-08-26 (médiane historique 0.0). Le statut stale vient de là (la supervision date le dernier succès au dernier sync found>0, 2026-08-26 14:19) ; l'unique échec récent (2026-09-12 03:04, « Workday non-JSON HTTP 200 text/html ») est la fenêtre de maintenance hebdomadaire Workday du vendredi/samedi nuit (28 occurrences multi-sources cette nuit, mêmes plages 02h30–03h15 les 2026-08-29 et 2026-09-05), transitoire et déjà retryée. Sync isolé rejoué : found=0 en 2,4 s, statut ok. 101 tests pytest verts. pm2 restart job-ka-sync OK, site 200.98- `856863d` 2026-08-25 Vague D implémentée — 75 nouveaux connecteurs (968 -> 1044 employeurs), ~768 offres QC99