Job Title-to-Medical Surveillance
Occupational health · UAE energy group · 204 roles
Turned an occupational-health team's spreadsheets into a one-search dashboard: any role, its required examinations, its hazards and their risk ratings.

Context
The occupational health risk assessment existed and was thorough — a surveillance sheet per role, a factor catalogue, and one exposure workbook per business unit. It was also unusable at the moment it mattered: a doctor, an HSE officer or HR asking what a specific role needs had to know which of a dozen sheets to open.
- Surveillance factors, examinations and exposures were split across separate workbooks with no shared key
- Whether a role counted as office or field staff was decided by whoever read the sheet
- A new job title had no profile until someone assessed it from scratch
- The same question — what does this role need? — was answered differently depending on who answered it
Outcome
204job titles, one search
- A role's surveillance requirements went from several sheets and a specialist to one search for anyone
- Office/field classification became a rule instead of a judgement
- PLACEHOLDER — add a measured figure here (e.g. lookups per week, or time per profile before vs after)
What we built
First the join. Every workbook is read in the browser as-is — no migration, no new database — and matched on job title and business unit, so the surveillance sheet, the factor definitions and the exposure rows become one record per role. Office-or-field is decided by rule from the title and the exposures, not by eye.
Then the lookup: a searchable list of every onsite title across the group's business units. Choosing one opens the role's summary, its HR mapping, its active surveillance factors as chips, the health-examination table (test, frequency, pre-employment versus routine, field-specific) and the activity-and-exposure table with a risk rating on every row and High/Medium/Low counts at the top.
Then a second organisation. The same reader takes a different pair of workbooks, so a government dataset was added with a toggle rather than a second build.
Then intake. For a title that has no profile, an admin page finds the closest existing roles by fuzzy match and asks a language model to draft the full surveillance profile — constrained to factors that exist in the catalogue, with the best local match as the fallback if the model fails. The draft is editable before it is saved.
What stuck
- The workbooks stayed the source of truth — the team keeps editing Excel, and the dashboard reads it
- One answer per role, whoever asks
- New roles start from a draft grounded in the existing rules rather than from a blank sheet
Snapshot
- Client profile
- Occupational health function of a UAE energy group; a second government dataset added
- Engagement
- Catalyst — scoped build
- Timeline
- About two weeks, April 2026
- Scale
- 204 job titles, 11 business units, ~2,800 activity-and-exposure rows, 19 surveillance factors
- Scope
- Workbook ingestion, role lookup, exposure and examination tables, AI-assisted intake for new roles