Import a career record from Europass's current JSON format #69

Closed
opened 2026-09-06 19:16:31 +00:00 by tiagoagueda · 0 comments
Owner

Observation

add open issue for 0.2.0 target the importion of the sucessor json europass format

Why this is separate from #54

#54 targets the XML — urn:europass:xml:…, what the 2004 CV editor produced and what
every old file on somebody's disk still is. It notes the JSON in passing as a trap. Pulled
out here because they are genuinely two pieces of work sharing one destination:

  • the XML is a legacy format nobody is producing any more, and importing it is about
    rescuing what people already have;
  • the JSON is what europass.europa.eu exports today, so it is the one a person will hit
    first, and the one that has to keep working as the platform changes.

Doing them as one issue would mean neither is finished until both are.

Shape

One mapping, two readers. The XML reader and the JSON reader both produce the same
intermediate shape, and everything after that — the review page, the writing, the refusal to
overwrite — is shared. If the JSON reader ends up with its own copy of the mapping, the
split was done wrong.

What the JSON carries, in the Europass Learner Information shape:

  • LearnerInfo.Identification → the profile: name, contact address, telephone, email,
    websites, and an ORCID if one is there (#46);
  • WorkExperience → Experience, with the period, the employer and its address, the
    position, and the activities as highlights;
  • Education → Education, including the level and the awarding body;
  • Skills.Linguistic → LanguageSkill. Europass records mother tongues separately from
    foreign languages, and each foreign one carries CEFR levels split five ways — listening,
    reading, spoken interaction, spoken production, writing. Postulo keeps one proficiency,
    so the mapping has to say which it takes and why rather than picking silently;
  • Skills.Computer, Skills.Organisational, Skills.Communication → skill groups;
  • Achievement → projects or links.

Read it defensively. It is JSON from somewhere else: a size cap, a depth cap, and no
assumption that any key is present or that any value has the type it should. A file that is
half right should import the half that is right and say what it skipped.

Never overwrite, exactly as #54: an import adds entries. Duplicates are the person's to
delete and are far better than something lost.

One file input, not two. A person has a Europass file; they should not have to know
which format it is. The upload sniffs it — a leading < is the XML, a leading { is the
JSON — and says which it found on the review page.

Classification

Enhancement. Not breaking.

Depends on

#54, for the mapping, the review page and the writing. This is a second front door onto the
same machinery, and building it first would mean building that machinery twice.

Open questions

  1. Which of the five CEFR levels becomes the single proficiency? Proposal: the lowest, since
    claiming the highest of five on a CV is the sort of thing that gets found out in an
    interview. Whatever is chosen, the review page shows all five so the person can correct it.
  2. Does Postulo track the format version? Proposal: no, but the reader is tested against a
    real export rather than against the schema, and the test file is committed.
## Observation > add open issue for 0.2.0 target the importion of the sucessor json europass format ## Why this is separate from #54 #54 targets the **XML** — `urn:europass:xml:…`, what the 2004 CV editor produced and what every old file on somebody's disk still is. It notes the JSON in passing as a trap. Pulled out here because they are genuinely two pieces of work sharing one destination: - the XML is a **legacy** format nobody is producing any more, and importing it is about rescuing what people already have; - the JSON is what **europass.europa.eu exports today**, so it is the one a person will hit first, and the one that has to keep working as the platform changes. Doing them as one issue would mean neither is finished until both are. ## Shape **One mapping, two readers.** The XML reader and the JSON reader both produce the same intermediate shape, and everything after that — the review page, the writing, the refusal to overwrite — is shared. If the JSON reader ends up with its own copy of the mapping, the split was done wrong. **What the JSON carries**, in the Europass Learner Information shape: - `LearnerInfo.Identification` → the profile: name, contact address, telephone, email, websites, and an ORCID if one is there (#46); - `WorkExperience` → `Experience`, with the period, the employer and its address, the position, and the activities as highlights; - `Education` → `Education`, including the level and the awarding body; - `Skills.Linguistic` → `LanguageSkill`. Europass records mother tongues separately from foreign languages, and each foreign one carries CEFR levels split five ways — listening, reading, spoken interaction, spoken production, writing. Postulo keeps one proficiency, so the mapping has to say which it takes and why rather than picking silently; - `Skills.Computer`, `Skills.Organisational`, `Skills.Communication` → skill groups; - `Achievement` → projects or links. **Read it defensively.** It is JSON from somewhere else: a size cap, a depth cap, and no assumption that any key is present or that any value has the type it should. A file that is half right should import the half that is right and say what it skipped. **Never overwrite**, exactly as #54: an import adds entries. Duplicates are the person's to delete and are far better than something lost. **One file input, not two.** A person has *a Europass file*; they should not have to know which format it is. The upload sniffs it — a leading `<` is the XML, a leading `{` is the JSON — and says which it found on the review page. ## Classification Enhancement. Not breaking. ## Depends on #54, for the mapping, the review page and the writing. This is a second front door onto the same machinery, and building it first would mean building that machinery twice. ## Open questions 1. Which of the five CEFR levels becomes the single proficiency? Proposal: the lowest, since claiming the highest of five on a CV is the sort of thing that gets found out in an interview. Whatever is chosen, the review page shows all five so the person can correct it. 2. Does Postulo track the format version? Proposal: no, but the reader is tested against a real export rather than against the schema, and the test file is committed.
tiagoagueda added this to the 0.2.0 milestone 2026-09-06 19:16:31 +00:00
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Reference
Postulo/postulo#69
No description provided.