55 lines
7.1 KiB
Markdown
55 lines
7.1 KiB
Markdown
# Product requirements — proposed, GJ-00
|
|
|
|
28 October 2026. Authority: [master prompt](../../planning/global-jobs-prompts/00_MASTER_ORCHESTRATOR.md). Implementation remains gated by [entry decisions](DEPENDENCIES_AND_GATES.md).
|
|
|
|
## Product scope and journeys
|
|
|
|
Discovery serves all occupations in Norway, Sweden and the United Kingdom initially. ISO country identifiers are `NO`, `SE`, `GB`; UI may display “UK”. Country availability and provider availability are separate. Unavailable sources cannot turn a country into a fabricated searchable inventory.
|
|
|
|
| Journey | Persisted choice and resulting behavior |
|
|
|---|---|
|
|
| New resident | Optional residence NO; English UI; Norwegian/English adverts; choose NO work scope. Do not request nationality to enable search. |
|
|
| Multi-country mover | Lives in NO, searches SE + GB; separate geographic branches OR together. Residence does not restrict results. |
|
|
| Returning jobseeker | Recover defaults across devices; load named search, override a query temporarily, explicitly update defaults only on request. |
|
|
| No formal occupation | Search free text such as “no experience”, “weekend work”, kitchen assistant or cleaner. No required taxonomy selection, skill inventory or CV upload. |
|
|
| Mixed jobs/shift work | Search retail and care roles, part-time/evenings, multiple towns; unknown schedule fields remain unknown. Missing filters are disclosed per provider. |
|
|
| Regulated occupation | Nurse/electrician matches show advertised credentials against explicit profile evidence; no claim of professional authorisation or eligibility. |
|
|
|
|
## Preference boundaries
|
|
|
|
`SearchPreference` holds optional residence, desired work countries (0..N), favourite location scopes, occupation interests, explicit skills references, work arrangements, advert languages and revision. Residence, nationality, home country and work countries are distinct; do not add compulsory demographic fields. UI locale stays in existing account preferences. CV and cover-letter languages remain document-specific.
|
|
|
|
Named `SavedSearch` profiles capture a versioned query, rather than a pointer to mutable defaults. Discovery initializes from defaults; filter edits change draft query state only. “Save search”, “Update this search” and “Update defaults” are explicit, different actions with revision checks. Empty preferences show a country-choice invitation and usable keyword search. Changing UI language never changes advert-language filters or document content.
|
|
|
|
## Language selection and qualification
|
|
|
|
Current code supports `en` and `nb` UI dictionaries; API accepts `en`, normalizes `nb`/`nb-NO`/`no` to `nb-NO`, and rejects other locales. This is source-verified support, not fresh linguistic acceptance. Proposed locale registry uses BCP 47, native + English labels, coverage/QA status, fallback and regional relevance. Maintain compatibility for existing stored values; do not silently rewrite document languages.
|
|
|
|
English and applicable local languages appear prominently, combining residence, selected region/work countries and explicit user preference, with stable ordering and no duplicate choices. Other **qualified** UI languages go under More Languages. Unsupported relevant languages appear separately as Coming Later, without an enabled switch. English fallback must be visible if a requested locale is unavailable. Do not infer language from nationality.
|
|
|
|
| Context | Prominent language candidates | Current qualification / next work |
|
|
|---|---|---|
|
|
| Norway | English; Norsk bokmål — Norwegian Bokmål; Norsk nynorsk — Norwegian Nynorsk; relevant Sámi language choices by region | EN/Bokmål implemented. Nynorsk and specific Sámi locales require translation and native review; `no` ESCO labels prove neither. |
|
|
| Sweden | English; Svenska — Swedish; regionally relevant minority-language choices | Swedish is a required target, currently unimplemented. Finnish, Meänkieli, Sámi, Romani and Yiddish need separate qualification, not generic “Swedish translation”. |
|
|
| GB / Wales | English; Cymraeg — Welsh for Wales | Welsh remains Coming Later until complete and reviewed. |
|
|
| GB / Scotland | English; Gàidhlig — Scottish Gaelic; Scots | Region-aware candidates, not currently supported switches. |
|
|
| GB / Northern Ireland | English; relevant Irish/Ulster Scots candidates | Confirm local language mapping/status and BCP 47 representation at GJ01-C; no inferred blanket UK official-language list. |
|
|
|
|
Language-policy evidence accessed 2026-10-28: [ISOF](https://www.isof.se/flersprakighet/lar-dig-mer-om-flersprakighet/spraken-i-sverige), [Welsh Government](https://www.gov.wales/planning-and-environment-decisions-wales/welsh-language-standards), [Scottish Government](https://www.gov.scot/news/growing-scotlands-languages/). These inform prominence; they do not certify translations or impose an assumed legal duty on Jobjakt. Norway/Sámi and Northern Ireland detailed regional mappings remain explicit GJ01-C qualification work.
|
|
|
|
New controls, validation, empty/error/help text, date/number/plural forms, accessible names and alert text require EN/Bokmål coverage. Swedish cannot be advertised as a supported UI until all shipped surfaces meet the approved coverage/native review gate; a “Swedish UI” acceptance journey stays blocked until then.
|
|
|
|
## Discovery experience
|
|
|
|
Retain React Router and MUI ownership: desktop filter rail, results list, in-app details; tablet adaptive panes; mobile full-screen detail with return focus/filter state. A stable in-app details URL supports full-page expansion. Preserve country/role/language/location filters on navigation and saved-query recovery.
|
|
|
|
Details show permitted original description with completeness badge (`full`, `truncated`, `metadata`, `link-only`), original title, employer, location precision, source, posted/updated/retrieved/expiry timestamps and source/apply links. Structured pay retains amount/range/currency/period plus advertised versus predicted status; unknown is not zero. Show requirements, responsibilities, qualifications, shifts/hours, arrangement and contract only when supplied. Translation is separately labelled and never replaces original text or expands licensed content.
|
|
|
|
Saved vacancy does not mean applied. Track Application enters existing reviewed application workflow; CV/letter links reuse current owners and never trigger AI or submission. Source withdrawal hides restricted content without deleting user-authored notes/status. Source alternatives remain separate and attributed after conservative dedupe.
|
|
|
|
Loading, empty, partial coverage, unavailable, stale and expired states must differ. Never label external search links as integrated search. Filters unsupported by a provider must either be applied exactly to authorised data or show the coverage exclusion; silently ignoring them is unacceptable.
|
|
|
|
## Requirement ownership
|
|
|
|
Preferences/language GJ-01; hierarchy/radius GJ-02; universal terms GJ-03; rights/source lifecycle/dedupe GJ-04; panels/details/actions GJ-05; alerts/skills/tracking GJ-06; admin/privacy/resilience GJ-07; combined proof GJ-08. Acceptance scenarios are in [the matrix](ACCEPTANCE_MATRIX.md); no part of this document authorizes implementation.
|