Occupations and skills should be ESCO, for the reason industries are NACE #266
Labels
No labels
accessibility
authentication
breaking change
bug
documentation
enhancement
interface
internationalisation
observability
performance
security
tier
1
tier
2
tier
3
tier/4
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
Postulo/postulo#266
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
A job title is free text everywhere in Postulo. So is a skill. That is correct for what a
person types and wrong for what the application can then do with it: Software Engineer,
Ingénieur logiciel and Engenheiro de software are one job and three strings, and nothing
in the code can tell.
For an application whose whole argument is a job search conducted across European languages,
that is the gap worth closing.
This project has already made this decision once
jobs/industries.pyexplains why the list of areas of activity is NACE rather than a listassembled here:
Every word of that transfers. ESCO is to occupations and skills what NACE is to
industries: published by the European Commission, roughly 3,000 occupations and 14,000
skills, in every EU language, mapped to ISCO-08, and maintained by somebody else.
What it would buy
become comparable. Nothing else on the roadmap makes that possible.
currently invents per entry.
#140 already accepted, and which matters more with each language milestone (#70, #71,
#72).
a source plugin reading one of them (#241) has somewhere to put what it reads.
The judgement to make, and it is the same one as NACE
ESCO's full occupation list is far too deep for a picker, exactly as NACE's 615 classes were
—
industries.pychose divisions because they are "the level where the names still meansomething to the person reading them".
The analogue here is probably ISCO-08 unit groups: about 436 four-digit codes, which is
the same order of magnitude as the 87 NACE divisions relative to its classes, and the level
at which a name is still a job somebody recognises. Full ESCO occupations underneath as an
optional refinement, or not at all to begin with.
That choice should be made deliberately and written down in the module the way
industries.pywrote down the NACE one, because it is the decision everything else rests on.
Scope questions this issue has to answer
JobPosting, a skill on the résumé, or both — andwhether the free-text field stays beside the code, as a person's own wording usually
should.
jobs/data/besidenace-2.1.jsonwith its ownLICENCE.md, as NACE already does.what ships in the repository versus what is loaded on demand is a real decision rather than
a detail.
classification. The code is for what Postulo can do across languages; the text is what the
person meant.
Filed from the same conversation as #241's additions. Not a plugin: this is a core
vocabulary, in the same shape as #140.
Where this stands on 2026-09-29, checked against the code on
main.Occupations: done, in three commits on 2026-09-24 that did not name this issue, which is why it stayed open:
cbee1e16b: a posting keeps the ISCO-08 unit group its title matches. The title box offers the unit groups in the reader's language on the intake form, the listing form and the capture review, and the code travels in the API and the export (format 18).949f784e8: the classification is downloaded in place bymanage.py fetch_esco, not committed.85eabdf74: fetched from the ESCO web service's real endpoint.jobs/esco.pywrites down the decisions this issue asked to have written down: the unit group as the level a person picks, the free text kept beside the code, EUPL 1.2, and nothing fetched at run time.Skills: not done. The issue's second point, "a skills vocabulary for the CV that is not free text", and its scope question "a skill on the résumé, or both" have no code behind them:
resume.Skillis a name and a group, free text only.fetch_escoharvests unit groups and occupations and no skills; the downloadedesco-1.2.1.jsonholds 28 languages, 436 unit groups and 3,039 occupations, and nothing else.This stays open for the skills half.