Your career: a driving licence section, with the categories as codes, and never the licence number #691
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#691
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 career record has nowhere to say that its owner can drive, and for many roles (field work, delivery, a company car) a CV has to. The maintainer's list asks for it under Your career: "Add driving license." A licence is personal data and an identifier people are defrauded with, so this issue also draws the line on what is not kept.
What exists today
src/. The nearest thing is a Certification (src/postulo/resume/models.py:215-228: name, issuer, dates, a credential link), usable as a workaround: “Driving licence B”, issued by whoever.SECTIONS/OVERVIEW_ORDERinresume/registry.py:28-91, the CV picker indocuments/forms.py:386-432,documents/rendering.py:41-49and:336-385, a branch per kind in both base themes,core/export.py:343-415, the candidate file'sKINDSinresume/candidate.py:176-276); #687 lists every one. Career entries are on a CV only when the person adds them; #308's print choice (documents/printing.py) is for the profile's details and does not apply./CandidateProfile/Licenses/LicensewithLicenseTypeCode(a code list "based on Directive 2006/126/EC"; examplesAM,A1,A2,A),LicenseName,FirstIssuedDateandFreeFormPeriod; the older SkillsPassport format hasSkills/Drivingwith a code list of its own. Postulo's candidate reader reads neither (Licensesis in neitherREADnorQUIET,src/postulo/plugins/europass/candidate.py:136-151), so a file that has one gets “Some sections of the file have nowhere to go in Postulo yet: Licenses” (:622-645); the older reader never mentions driving; the wiki lists "driving licences" among what a Europass CV holds that Postulo cannot (Your-career-record.md:415-418).core/phones.pyCOUNTRIES(241 rows, English names;country_name:403,country_choices:417), used by the postal form (core/postal.py:103,355). No career API, search orcore/gdpr.pychange is needed (the processing record is drawn from plugins).What the law says (read on 2026-10-03 from the Official Journal texts on the Publications Office's server).
Checked against
mainatf09b6010b.Proposal
DrivingLicence, aResumeItem, slugdriving-licence), after Certifications on the career page and in the CV picker; a person may hold several (a Portuguese and a British licence are two entries). Fields:country(ISO 3166-1 alpha-2 fromcore/phones.py, optional),categories(the fifteen, stored as codes in the Directive's order),other_categories(free text for national letters or classes, up to 100 characters),first_issued_onandexpires_on(optional).resume/driving.py: the fifteen codes in order, each with a one-line summary in Postulo's own words (“B — cars and light vans”) as help text. The form is a fieldset of checkboxes with a legend; the archive importer and candidate reader refuse a code not in the table. No category implies another: a person who holds A ticks A, and the CV prints what is ticked.docs/THREAT-MODEL.mdsays why beside the home address.driving_licencesinRESUME_FIELDSandRESUME_MODELS; format one more than whatever it is when the commit lands; the importer's section map and the CV entry's kind namedrivinglicence), candidate file (KINDS; format one more; identity is country plus categories),translatable.py(translates nothing: a code is a code), seed data. No page outside the registry's.Licenses/License(code, first-issued date, free-form validity) is a follow-up commit; theRecordsurface would gain adriving_licenceslist (Writing-a-plugin.md,tests/test_wiki_surface.py).Decisions
FirstIssuedDateper licence. Recommended: one of each per entry; per-category only if asked.other_categoriesas text, no registry of other countries; a country's own list could become a plugin kind later (the shape of #305's service registry).Prior art
Standards, not code: Directive 2006/126/EC Article 4 and Annex I; Directive (EU) 2025/2205 Article 6 and Annex I; the Europass CV v3
Licenseand its code list; GDPR Article 9(1). No library was looked for: the data is fifteen codes and their summaries, with no behaviour to borrow. The two hand-written standards (applications/ical.py,documents/docx.py) are file formats; this is a list.Builds on
#687 (the section registry's checklist), #308 (what a CV prints), #131 (translations of entries), #181 (the candidate file), #306 (countries), #54 and #244 (the Europass import).
Needed by
Nothing. A later Europass commit reads
Licensesinto it.Done when
tests/test_driving_licences.py: the table holds the fifteen codes in order; several categories save and show in order; a code outside the table is refused by the form, the archive importer and the candidate reader;other_categoriesis bounded; two licences for one person are allowed; the model has no field for a number, photograph, signature, residence or restriction code (the field list is asserted).tests/test_career_sections.pypasses with the new anchor and count; the CV picker offers the entry;tests/test_documents.pyandtests/test_document_formats.pyshow the same line in both themes, the plain text, the Word file and the preview, the country only when filled and no date ever; a CV without the entry prints nothing about driving.tests/test_export.py: the archive carriesdriving_licencesat the new format, a restore brings them back and a CV holding one keeps it;tests/test_candidate_file.pyholds the new fingerprint and review rows for a good and a refused licence;tests/security/test_candidate_file.pya hostile or over-long value.tests/security/test_isolation_sweep.pycovers another account's licence;tests/test_account_deletion.pyremoves them with the account. New strings (the title, fifteen summaries, labels, the CV line) in the working catalogues (en-GB, fr-FR, pt-PT as drafts) and Weblate (#349); the wiki,docs/THREAT-MODEL.mdand CHANGELOG (ends(#N)) in the same commit.From the list of improvements of 2026-10-02.
Landed on main with a green Forgejo CI run. Its entry in the CHANGELOG's Unreleased section ends in (#691).