skill_match_gauge_field
New in Odoo 19 Recruitment: the half doughnut scoring a candidate against a job is skill_match_gauge_field. It reads the job from the action context, prints the score inside the arc, and goes green when a candidate beats 100 percent.
| Technical name | skill_match_gauge_field |
|---|---|
| Field types | integer (core); no supportedTypes declared |
| Views | form (applicant Skills page) |
| Module | hr_recruitment_skills (Recruitment Skills) |
| Used in core | 1 occurrence: the applicant form in hr_recruitment_skills |
| Versions | Odoo 20.0, Odoo 19.0 |
| No-code setup | No. Ships preconfigured on the applicant form; reusable via view XML |
| Alternatives | gauge, percentpie, progressbar |
What the skill match gauge does
What this means for your team
Supported options in Odoo 19
| Option | Type | What it does |
|---|---|---|
max_field | field name (working, undeclared) | The name extractProps actually reads to take the maximum from a field on the record. Not in the declared options; the field must be loaded in the view. |
max_value | number | Static maximum for the arc. Core passes 100 on the applicant form; values above it trigger the green overshoot state.(default: 100) |
max_value_field | field name (declared, dead) | Declared in the base gauge's options panel but never read: extractProps looks for max_field instead, so setting this does nothing. |
title | string (inherited, no visible effect) | Reaches the component but this subclass disables the Chart.js title and hardcodes the Job Position Matching caption in its template, so the option changes nothing visible. |
The declared max option name does not work. The base gauge declares max_value_field in its options panel, but its extractProps reads options.max_field, so only max_field actually wires a field as the maximum. Core sidesteps the trap by passing the static max_value instead. Same family of quirk as float_time's casing mismatch, documented on that page.
Working examples
Green means overqualified: the color and the formula
Version compatibility
| Version | Status | Notes |
|---|---|---|
| Odoo 20.0 | In development | Not released. Deleted on the development branch; replaced by the gauge_chart view widget. See below. |
| Odoo 19.0 | Verified | Introduced with the recruitment matching flow; verified against the shipped source. |
| Odoo 18.0 | Not available | Module exists, but the widget and matching_score do not. |
| Odoo 17.0 | Not available | Widget does not exist. |
| Odoo 16.0 | Not available | Widget does not exist. |
Upgrade note. The hr_recruitment_skills module exists since Odoo 16, but the matching score, its compute and this widget only arrive in 19; there is nothing to migrate forward from 18. Migrating a 19 database to 20 will need view updates, since the widget name disappears entirely, see below.
What is changing in Odoo 20
Common problems and fixes
| Symptom | Cause and fix |
|---|---|
| No job name under the gauge | The view was opened without matching_job_id in the context; the widget only fetches a name when the key is present. Open candidates through the job's matching action; direct applicant access scores against the applicant's own position. |
| Score looks different for the same applicant | The compute depends on the context job: matching actions score against their job, plain views against the applicant's job_id. Expected behavior; check which door the user came through before doubting the number. |
| max_value_field option is ignored | The declared name is dead; extractProps reads max_field. Use options="{'max_field': 'your_field'}" and load that field in the view. |
| Gauge is full green above 100 percent | Overshoot by design: each skill counts up to double the required level, and value beyond max paints the success color. Nothing to fix; treat green as an overqualified flag. |
| Score is zero despite matching skills | The target job defines no skill requirements and no expected degree, so the job total is zero. Add job skills or an expected degree on the position; the compute needs a denominator. |
| Widget missing after upgrading to Odoo 20 | The registration is deleted on the development branch; the replacement is the gauge_chart view widget. Rewrite the view as <widget name="gauge_chart" score_fields="..."/> with the score fields loaded invisibly. |
Skill match gauge vs the alternatives
| Widget | Best for | Key difference |
|---|---|---|
skill_match_gauge_field | Scoring a candidate against a job's skill and degree requirements at a glance | Context-aware half doughnut: reads matching_job_id, prints the score inside the arc, green past the max |
gauge | A generic KPI half doughnut on any numeric field | The parent widget: hardcoded blue, value in a tooltip rather than inside the arc, no context behavior |
| percentpie | A compact filled-circle percentage | Pure CSS conic gradient, no Chart.js, no maximum logic |
| progressbar | Linear progress with editable values and thresholds | A bar, not an arc; color switches by threshold classes instead of theme variables |
Frequently asked questions
Where does the matching score come from?+
Why can the score exceed 100 percent?+
Why does the gauge turn green?+
Can I reuse skill_match_gauge_field on my own model?+
What happens to this widget in Odoo 20?+
Screening hundreds of applicants and still guessing on fit?
The matching gauge is the visible tip of a scoring pipeline you can extend: custom criteria, AI-ranked shortlists, automated screening steps. We build recruitment automation on Odoo that turns application floods into ranked, explainable shortlists.
Book a free consultation