| REPOSITORY | |
|---|---|
| REPOSITORY | OCA/reporting-engine |
| GIT | |
| GIT | https://github.com/OCA/reporting-engine.git |
| GIT FOLDER | |
| GIT FOLDER | https://github.com/OCA/reporting-engine/tree/19.0/kpi |
| VERSION | |
| VERSION | 1.0.0 |
| CATEGORY | |
| CATEGORY | Report |
| LICENSE | |
| LICENSE | AGPL-3 |
| APPLICATION | |
| APPLICATION | No |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | Odoo Community Association (OCA), Savoir-faire Linux, Gray Matter Logic |
| MAINTAINERS | |
| MAINTAINERS | Odoo Community Association (OCA), Savoir-faire Linux, Gray Matter Logic |
| COMMITTERS | |
| COMMITTERS | Maxime Chambreuil, Weblate, OCA-git-bot, oca-ci |
| WEBSITE | |
| WEBSITE | https://github.com/OCA/reporting-engine |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-07-06 19:40:46 |
| ODOO DEPENDENCIES | |
| ODOO DEPENDENCIES |
OCA/server-backend: - base_external_dbsource odoo/odoo: - base - spreadsheet_dashboard - spreadsheet - bus - web - portal - html_editor - http_routing - base_setup - web_tour - auth_signup |
| PYTHON DEPENDENCIES | |
| PYTHON DEPENDENCIES | Not have |
| SYSTEM DEPENDENCIES | |
| SYSTEM DEPENDENCIES | Not have |
| DESCRIPTION | |
| DESCRIPTION | This module provides the basis for creating key performance indicators, including static and dynamic thresholds (SQL query or Python code), on local and remote data sources. The module also provides the mecanism to update KPIs automatically. A scheduler is executed every hour and updates the KPI values, based on the periodicity of each KPI. KPI computation can also be done manually. A threshold is a list of ranges and a range is: - a name (like Good, Warning, Bad) - a minimum value (fixed, sql query or python code) - a maximum value (fixed, sql query or python code) - color (RGB code like \#00FF00 for green, \#FFA500 for orange, \#FF0000 for red) |
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
view_kpi_category_form |
kpi.category.form | kpi.category | form | New |
view_kpi_category_tree |
kpi.category.tree | kpi.category | list | New |
view_kpi_filter |
kpi.filter | kpi | search | New |
view_kpi_form |
kpi.form | kpi | form | New |
view_kpi_history_form |
kpi.history.form | kpi.history | form | New |
view_kpi_history_tree |
kpi.history.tree | kpi.history | list | New |
view_kpi_kanban |
kpi.kanban | kpi | kanban | New |
view_kpi_threshold_form |
kpi.threshold.form | kpi.threshold | form | New |
view_kpi_threshold_range_form |
kpi.threshold.range.form | kpi.threshold.range | form | New |
view_kpi_threshold_range_tree |
kpi.threshold.range.tree | kpi.threshold.range | list | New |
view_kpi_threshold_tree |
kpi.threshold.tree | kpi.threshold | list | New |
view_kpi_tree |
kpi.tree | kpi | list | New |
active
Boolean
default=True
help='Only active KPIs will be updated by the scheduler based on the periodicity configuration.'
category_id
Many2one → kpi.category
required=True
args: 'kpi.category', 'Category'
color
Text
compute='_compute_display_last_kpi_value'
company_id
Many2one → res.company
default=<expr>
args: 'res.company', 'Company'
dbsource_id
Many2one → base.external.dbsource
description
Text
history_ids
One2many → kpi.history
kpi_code
Text
help="SQL code must return the result as 'value' (i.e. 'SELECT 5 AS value')."
args: 'KPI Code'
kpi_type
Selection
last_execution
Datetime
compute='_compute_display_last_kpi_value'
args: 'Last execution'
name
Char
required=True
next_execution_date
Datetime
periodicity
Integer
default=1
periodicity_uom
Selection
default='day'
required=True
args: [('minute', 'Minute'), ('hour', 'Hour'), ('day', 'Day'), ('week', 'Week'), ('month', 'Month')], 'Periodicity UoM'
threshold_id
Many2one → kpi.threshold
required=True
args: 'kpi.threshold', 'Threshold'
value
Float
compute='_compute_display_last_kpi_value'
compute_kpi_value(self)
update_kpi_value(self)
update_next_execution_date(self)
description
Text
name
Char
required=True
No public methods.
color
Text
default='#FFFFFF'
readonly=True
required=True
company_id
Many2one → res.company
default=<expr>
args: 'res.company', 'Company'
date
Datetime
default=<expr>
readonly=True
required=True
args: 'Execution Date'
kpi_id
Many2one → kpi
required=True
args: 'kpi', 'KPI'
name
Char
default=fields.Datetime.now()
required=True
size=150
value
Float
readonly=True
required=True
No public methods.
company_id
Many2one → res.company
default=<expr>
args: 'res.company', 'Company'
invalid_message
Char
compute='_compute_is_valid_threshold'
size=100
string='Message'
kpi_ids
One2many → kpi
name
Char
required=True
range_ids
Many2many → kpi.threshold.range
valid
Boolean
compute='_compute_is_valid_threshold'
default=True
required=True
create(self, vals_list)
get_color(self, kpi_value)
color
Char
help='Choose your color'
company_id
Many2one → res.company
default=<expr>
args: 'res.company', 'Company'
invalid_message
Char
compute='_compute_is_valid_range'
size=100
string='Message'
max_code
Text
max_dbsource_id
Many2one → base.external.dbsource
max_error
Char
compute='_compute_max_value'
args: 'Maximum Error'
max_fixed_value
Float
max_type
Selection
required=True
selection='_selection_value_type'
max_value
Float
compute='_compute_max_value'
string='Maximum Value'
min_code
Text
min_dbsource_id
Many2one → base.external.dbsource
min_error
Char
compute='_compute_min_value'
args: 'Minimum Error'
min_fixed_value
Float
min_type
Selection
required=True
selection='_selection_value_type'
min_value
Float
compute='_compute_min_value'
string='Minimum Value'
name
Char
required=True
threshold_ids
Many2many → kpi.threshold
valid
Boolean
compute='_compute_is_valid_range'
default=True
required=True
No public methods.
| REPOSITORY | |
|---|---|
| REPOSITORY | OCA/reporting-engine |
| GIT | |
| GIT | https://github.com/OCA/reporting-engine.git |
| GIT FOLDER | |
| GIT FOLDER | https://github.com/OCA/reporting-engine/tree/18.0/kpi |
| VERSION | |
| VERSION | 1.0.0 |
| CATEGORY | |
| CATEGORY | Report |
| LICENSE | |
| LICENSE | AGPL-3 |
| APPLICATION | |
| APPLICATION | No |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | Odoo Community Association (OCA), Open Source Integrators, Savoir-faire Linux |
| MAINTAINERS | |
| MAINTAINERS | Odoo Community Association (OCA), Open Source Integrators, Savoir-faire Linux |
| COMMITTERS | |
| COMMITTERS | Maxime Chambreuil, Weblate, OCA-git-bot, oca-ci |
| WEBSITE | |
| WEBSITE | https://github.com/OCA/reporting-engine |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-07-06 19:30:07 |
| ODOO DEPENDENCIES | |
| ODOO DEPENDENCIES |
OCA/server-backend: - base_external_dbsource odoo/odoo: - base - spreadsheet_dashboard - spreadsheet - bus - web - portal - web_editor - html_editor - http_routing - base_setup - web_tour - auth_signup |
| PYTHON DEPENDENCIES | |
| PYTHON DEPENDENCIES | Not have |
| SYSTEM DEPENDENCIES | |
| SYSTEM DEPENDENCIES | Not have |
| DESCRIPTION | |
| DESCRIPTION | This module provides the basis for creating key performance indicators, including static and dynamic thresholds (SQL query or Python code), on local and remote data sources. The module also provides the mecanism to update KPIs automatically. A scheduler is executed every hour and updates the KPI values, based on the periodicity of each KPI. KPI computation can also be done manually. A threshold is a list of ranges and a range is: - a name (like Good, Warning, Bad) - a minimum value (fixed, sql query or python code) - a maximum value (fixed, sql query or python code) - color (RGB code like \#00FF00 for green, \#FFA500 for orange, \#FF0000 for red) |
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
view_kpi_category_form |
kpi.category.form | kpi.category | form | New |
view_kpi_category_tree |
kpi.category.tree | kpi.category | list | New |
view_kpi_filter |
kpi.filter | kpi | search | New |
view_kpi_form |
kpi.form | kpi | form | New |
view_kpi_history_form |
kpi.history.form | kpi.history | form | New |
view_kpi_history_tree |
kpi.history.tree | kpi.history | list | New |
view_kpi_kanban |
kpi.kanban | kpi | kanban | New |
view_kpi_threshold_form |
kpi.threshold.form | kpi.threshold | form | New |
view_kpi_threshold_range_form |
kpi.threshold.range.form | kpi.threshold.range | form | New |
view_kpi_threshold_range_tree |
kpi.threshold.range.tree | kpi.threshold.range | list | New |
view_kpi_threshold_tree |
kpi.threshold.tree | kpi.threshold | list | New |
view_kpi_tree |
kpi.tree | kpi | list | New |
active
Boolean
default=True
help='Only active KPIs will be updated by the scheduler based on the periodicity configuration.'
category_id
Many2one → kpi.category
required=True
args: 'kpi.category', 'Category'
color
Text
compute='_compute_display_last_kpi_value'
company_id
Many2one → res.company
default=<expr>
args: 'res.company', 'Company'
dbsource_id
Many2one → base.external.dbsource
description
Text
history_ids
One2many → kpi.history
kpi_code
Text
help="SQL code must return the result as 'value' (i.e. 'SELECT 5 AS value')."
args: 'KPI Code'
kpi_type
Selection
last_execution
Datetime
compute='_compute_display_last_kpi_value'
args: 'Last execution'
name
Char
required=True
next_execution_date
Datetime
periodicity
Integer
default=1
periodicity_uom
Selection
default='day'
required=True
args: [('minute', 'Minute'), ('hour', 'Hour'), ('day', 'Day'), ('week', 'Week'), ('month', 'Month')], 'Periodicity UoM'
threshold_id
Many2one → kpi.threshold
required=True
args: 'kpi.threshold', 'Threshold'
value
Float
compute='_compute_display_last_kpi_value'
compute_kpi_value(self)
update_kpi_value(self)
update_next_execution_date(self)
description
Text
name
Char
required=True
No public methods.
color
Text
default='#FFFFFF'
readonly=True
required=True
company_id
Many2one → res.company
default=<expr>
args: 'res.company', 'Company'
date
Datetime
default=<expr>
readonly=True
required=True
args: 'Execution Date'
kpi_id
Many2one → kpi
required=True
args: 'kpi', 'KPI'
name
Char
default=fields.Datetime.now()
required=True
size=150
value
Float
readonly=True
required=True
No public methods.
company_id
Many2one → res.company
default=<expr>
args: 'res.company', 'Company'
invalid_message
Char
compute='_compute_is_valid_threshold'
size=100
string='Message'
kpi_ids
One2many → kpi
name
Char
required=True
range_ids
Many2many → kpi.threshold.range
valid
Boolean
compute='_compute_is_valid_threshold'
default=True
required=True
create(self, data)
get_color(self, kpi_value)
color
Char
help='Choose your color'
company_id
Many2one → res.company
default=<expr>
args: 'res.company', 'Company'
invalid_message
Char
compute='_compute_is_valid_range'
size=100
string='Message'
max_code
Text
max_dbsource_id
Many2one → base.external.dbsource
max_error
Char
compute='_compute_max_value'
args: 'Maximum Error'
max_fixed_value
Float
max_type
Selection
required=True
selection='_selection_value_type'
max_value
Float
compute='_compute_max_value'
string='Maximum Value'
min_code
Text
min_dbsource_id
Many2one → base.external.dbsource
min_error
Char
compute='_compute_min_value'
args: 'Minimum Error'
min_fixed_value
Float
min_type
Selection
required=True
selection='_selection_value_type'
min_value
Float
compute='_compute_min_value'
string='Minimum Value'
name
Char
required=True
threshold_ids
Many2many → kpi.threshold
valid
Boolean
compute='_compute_is_valid_range'
default=True
required=True
No public methods.
| REPOSITORY | |
|---|---|
| REPOSITORY | OCA/reporting-engine |
| GIT | |
| GIT | https://github.com/OCA/reporting-engine.git |
| GIT FOLDER | |
| GIT FOLDER | https://github.com/OCA/reporting-engine/tree/17.0/kpi |
| VERSION | |
| VERSION | 1.2.0 |
| CATEGORY | |
| CATEGORY | Report |
| LICENSE | |
| LICENSE | AGPL-3 |
| APPLICATION | |
| APPLICATION | No |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | Odoo Community Association (OCA), Savoir-faire Linux |
| MAINTAINERS | |
| MAINTAINERS | Odoo Community Association (OCA), Savoir-faire Linux |
| COMMITTERS | |
| COMMITTERS | Maxime Chambreuil, Weblate, OCA-git-bot, oca-ci, EdgarRetes, Miquel Rosell, Gustavo |
| WEBSITE | |
| WEBSITE | https://github.com/OCA/reporting-engine |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-07-06 19:20:00 |
| ODOO DEPENDENCIES | |
| ODOO DEPENDENCIES |
OCA/server-backend: - base_external_dbsource odoo/odoo: - base - spreadsheet_dashboard - spreadsheet - bus - web - portal - web_editor - http_routing - base_setup - web_tour - auth_signup |
| PYTHON DEPENDENCIES | |
| PYTHON DEPENDENCIES | Not have |
| SYSTEM DEPENDENCIES | |
| SYSTEM DEPENDENCIES | Not have |
| DESCRIPTION | |
| DESCRIPTION | This module provides the basis for creating key performance indicators, including static and dynamic thresholds (SQL query or Python code), on local and remote data sources. The module also provides the mecanism to update KPIs automatically. A scheduler is executed every hour and updates the KPI values, based on the periodicity of each KPI. KPI computation can also be done manually. A threshold is a list of ranges and a range is: - a name (like Good, Warning, Bad) - a minimum value (fixed, sql query or python code) - a maximum value (fixed, sql query or python code) - color (RGB code like \#00FF00 for green, \#FFA500 for orange, \#FF0000 for red) |
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
view_kpi_category_form |
kpi.category.form | kpi.category | form | New |
view_kpi_category_tree |
kpi.category.tree | kpi.category | tree | New |
view_kpi_filter |
kpi.filter | kpi | search | New |
view_kpi_form |
kpi.form | kpi | form | New |
view_kpi_history_form |
kpi.history.form | kpi.history | form | New |
view_kpi_history_tree |
kpi.history.tree | kpi.history | tree | New |
view_kpi_kanban |
kpi.kanban | kpi | kanban | New |
view_kpi_threshold_form |
kpi.threshold.form | kpi.threshold | form | New |
view_kpi_threshold_range_form |
kpi.threshold.range.form | kpi.threshold.range | form | New |
view_kpi_threshold_range_tree |
kpi.threshold.range.tree | kpi.threshold.range | tree | New |
view_kpi_threshold_tree |
kpi.threshold.tree | kpi.threshold | tree | New |
view_kpi_tree |
kpi.tree | kpi | tree | New |
active
Boolean
default=True
help='Only active KPIs will be updated by the scheduler based on the periodicity configuration.'
category_id
Many2one → kpi.category
required=True
args: 'kpi.category', 'Category'
color
Text
compute='_compute_display_last_kpi_value'
company_id
Many2one → res.company
default=<expr>
args: 'res.company', 'Company'
dbsource_id
Many2one → base.external.dbsource
description
Text
history_ids
One2many → kpi.history
kpi_code
Text
help="SQL code must return the result as 'value' (i.e. 'SELECT 5 AS value')."
args: 'KPI Code'
kpi_type
Selection
last_execution
Datetime
compute='_compute_display_last_kpi_value'
args: 'Last execution'
name
Char
required=True
next_execution_date
Datetime
periodicity
Integer
default=1
periodicity_uom
Selection
default='day'
required=True
args: [('minute', 'Minute'), ('hour', 'Hour'), ('day', 'Day'), ('week', 'Week'), ('month', 'Month')], 'Periodicity UoM'
threshold_id
Many2one → kpi.threshold
required=True
args: 'kpi.threshold', 'Threshold'
value
Float
compute='_compute_display_last_kpi_value'
compute_kpi_value(self)
update_kpi_value(self)
update_next_execution_date(self)
description
Text
name
Char
required=True
No public methods.
color
Text
default='#FFFFFF'
required=True
company_id
Many2one → res.company
default=<expr>
args: 'res.company', 'Company'
date
Datetime
default=<expr>
required=True
args: 'Execution Date'
kpi_id
Many2one → kpi
required=True
args: 'kpi', 'KPI'
name
Char
default=fields.Datetime.now()
required=True
size=150
value
Float
required=True
No public methods.
company_id
Many2one → res.company
default=<expr>
args: 'res.company', 'Company'
invalid_message
Char
compute='_compute_is_valid_threshold'
size=100
string='Message'
kpi_ids
One2many → kpi
name
Char
required=True
range_ids
Many2many → kpi.threshold.range
valid
Boolean
compute='_compute_is_valid_threshold'
default=True
required=True
create(self, data)
get_color(self, kpi_value)
color
Char
help='Choose your color'
company_id
Many2one → res.company
default=<expr>
args: 'res.company', 'Company'
invalid_message
Char
compute='_compute_is_valid_range'
size=100
string='Message'
max_code
Text
max_dbsource_id
Many2one → base.external.dbsource
max_error
Char
compute='_compute_max_value'
args: 'Maximum Error'
max_fixed_value
Float
max_type
Selection
required=True
selection='_selection_value_type'
max_value
Float
compute='_compute_max_value'
string='Maximum Value'
min_code
Text
min_dbsource_id
Many2one → base.external.dbsource
min_error
Char
compute='_compute_min_value'
args: 'Minimum Error'
min_fixed_value
Float
min_type
Selection
required=True
selection='_selection_value_type'
min_value
Float
compute='_compute_min_value'
string='Minimum Value'
name
Char
required=True
threshold_ids
Many2many → kpi.threshold
valid
Boolean
compute='_compute_is_valid_range'
default=True
required=True
No public methods.
| REPOSITORY | |
|---|---|
| REPOSITORY | OCA/reporting-engine |
| GIT | |
| GIT | https://github.com/OCA/reporting-engine.git |
| GIT FOLDER | |
| GIT FOLDER | https://github.com/OCA/reporting-engine/tree/13.0/kpi |
| VERSION | |
| VERSION | 1.0.1 |
| CATEGORY | |
| CATEGORY | Report |
| LICENSE | |
| LICENSE | AGPL-3 |
| APPLICATION | |
| APPLICATION | No |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | Odoo Community Association (OCA), Savoir-faire Linux |
| MAINTAINERS | |
| MAINTAINERS | Odoo Community Association (OCA), Savoir-faire Linux |
| COMMITTERS | |
| COMMITTERS | Stéphane Bidoul, oca-travis, Weblate, OCA-git-bot, flachica |
| WEBSITE | |
| WEBSITE | https://github.com/OCA/reporting-engine |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-07-06 00:34:19 |
| ODOO DEPENDENCIES | |
| ODOO DEPENDENCIES |
OCA/server-backend: - base_external_dbsource odoo/odoo: - base |
| PYTHON DEPENDENCIES | |
| PYTHON DEPENDENCIES | Not have |
| SYSTEM DEPENDENCIES | |
| SYSTEM DEPENDENCIES | Not have |
| DESCRIPTION | |
| DESCRIPTION | |
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
view_kpi_category_form |
kpi.category.form | kpi.category | form | New |
view_kpi_category_tree |
kpi.category.tree | kpi.category | tree | New |
view_kpi_filter |
kpi.filter | kpi | search | New |
view_kpi_form |
kpi.form | kpi | form | New |
view_kpi_history_form |
kpi.history.form | kpi.history | form | New |
view_kpi_history_tree |
kpi.history.tree | kpi.history | tree | New |
view_kpi_kanban |
kpi.kanban | kpi | kanban | New |
view_kpi_threshold_form |
kpi.threshold.form | kpi.threshold | form | New |
view_kpi_threshold_range_form |
kpi.threshold.range.form | kpi.threshold.range | form | New |
view_kpi_threshold_range_tree |
kpi.threshold.range.tree | kpi.threshold.range | tree | New |
view_kpi_threshold_tree |
kpi.threshold.tree | kpi.threshold | tree | New |
view_kpi_tree |
kpi.tree | kpi | tree | New |
active
Boolean
default=True
help='Only active KPIs will be updated by the scheduler based on the periodicity configuration.'
args: 'Active'
category_id
Many2one → kpi.category
required=True
args: 'kpi.category', 'Category'
color
Text
compute='_compute_display_last_kpi_value'
args: 'Color'
company_id
Many2one → res.company
default=<expr>
args: 'res.company', 'Company'
dbsource_id
Many2one → base.external.dbsource
description
Text
history_ids
One2many → kpi.history
kpi_code
Text
help="SQL code must return the result as 'value' (i.e. 'SELECT 5 AS value')."
args: 'KPI Code'
kpi_type
Selection
last_execution
Datetime
compute='_compute_display_last_kpi_value'
args: 'Last execution'
name
Char
required=True
args: 'Name'
next_execution_date
Datetime
readonly=True
args: 'Next execution date'
periodicity
Integer
default=1
args: 'Periodicity'
periodicity_uom
Selection
default='day'
required=True
args: [('minute', 'Minute'), ('hour', 'Hour'), ('day', 'Day'), ('week', 'Week'), ('month', 'Month')], 'Periodicity UoM'
threshold_id
Many2one → kpi.threshold
required=True
args: 'kpi.threshold', 'Threshold'
value
Float
compute='_compute_display_last_kpi_value'
string='Value'
compute_kpi_value(self)
update_kpi_value(self)
update_next_execution_date(self)
description
Text
name
Char
required=True
size=50
args: 'Name'
No public methods.
color
Text
default='#FFFFFF'
readonly=True
required=True
args: 'Color'
company_id
Many2one → res.company
default=<expr>
args: 'res.company', 'Company'
date
Datetime
default=<expr>
readonly=True
required=True
args: 'Execution Date'
kpi_id
Many2one → kpi
required=True
args: 'kpi', 'KPI'
name
Char
default=fields.Datetime.now()
required=True
size=150
args: 'Name'
value
Float
readonly=True
required=True
args: 'Value'
No public methods.
company_id
Many2one → res.company
default=<expr>
args: 'res.company', 'Company'
invalid_message
Char
compute='_compute_is_valid_threshold'
size=100
string='Message'
kpi_ids
One2many → kpi
name
Char
required=True
size=50
args: 'Name'
range_ids
Many2many → kpi.threshold.range
valid
Boolean
compute='_compute_is_valid_threshold'
default=True
required=True
string='Valid'
create(self, data)
get_color(self, kpi_value)
color
Char
help='Choose your color'
string='Color'
company_id
Many2one → res.company
default=<expr>
args: 'res.company', 'Company'
invalid_message
Char
compute='_compute_is_valid_range'
size=100
string='Message'
max_code
Text
max_dbsource_id
Many2one → base.external.dbsource
max_error
Char
compute='_compute_max_value'
args: 'Maximum Error'
max_fixed_value
Float
max_type
Selection
required=True
selection='_selection_value_type'
string='Max Type'
max_value
Float
compute='_compute_max_value'
string='Maximum Value'
min_code
Text
min_dbsource_id
Many2one → base.external.dbsource
min_error
Char
compute='_compute_min_value'
args: 'Minimum Error'
min_fixed_value
Float
min_type
Selection
required=True
selection='_selection_value_type'
string='Min Type'
min_value
Float
compute='_compute_min_value'
string='Minimum Value'
name
Char
required=True
size=50
args: 'Name'
threshold_ids
Many2many → kpi.threshold
valid
Boolean
compute='_compute_is_valid_range'
default=True
required=True
string='Valid'
No public methods.
| REPOSITORY | |
|---|---|
| REPOSITORY | OCA/reporting-engine |
| GIT | |
| GIT | https://github.com/OCA/reporting-engine.git |
| GIT FOLDER | |
| GIT FOLDER | https://github.com/OCA/reporting-engine/tree/12.0/kpi |
| VERSION | |
| VERSION | 1.0.1 |
| CATEGORY | |
| CATEGORY | Report |
| LICENSE | |
| LICENSE | AGPL-3 |
| APPLICATION | |
| APPLICATION | No |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | Odoo Community Association (OCA), Savoir-faire Linux |
| MAINTAINERS | |
| MAINTAINERS | Odoo Community Association (OCA), Savoir-faire Linux |
| COMMITTERS | |
| COMMITTERS | Enric Tobella, OCA Transbot, oca-travis, Weblate, OCA-git-bot, Adrià Gil Sorribes |
| WEBSITE | |
| WEBSITE | https://github.com/OCA/reporting-engine |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-07-06 00:29:24 |
| ODOO DEPENDENCIES | |
| ODOO DEPENDENCIES |
OCA/server-backend: - base_external_dbsource OCA/web: - web_widget_color odoo/odoo: - base - web |
| PYTHON DEPENDENCIES | |
| PYTHON DEPENDENCIES | Not have |
| SYSTEM DEPENDENCIES | |
| SYSTEM DEPENDENCIES | Not have |
| DESCRIPTION | |
| DESCRIPTION | |
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
view_kpi_category_form |
kpi.category.form | kpi.category | form | New |
view_kpi_category_tree |
kpi.category.tree | kpi.category | tree | New |
view_kpi_filter |
kpi.filter | kpi | search | New |
view_kpi_form |
kpi.form | kpi | form | New |
view_kpi_history_form |
kpi.history.form | kpi.history | form | New |
view_kpi_history_tree |
kpi.history.tree | kpi.history | tree | New |
view_kpi_kanban |
kpi.kanban | kpi | kanban | New |
view_kpi_threshold_form |
kpi.threshold.form | kpi.threshold | form | New |
view_kpi_threshold_range_form |
kpi.threshold.range.form | kpi.threshold.range | form | New |
view_kpi_threshold_range_tree |
kpi.threshold.range.tree | kpi.threshold.range | tree | New |
view_kpi_threshold_tree |
kpi.threshold.tree | kpi.threshold | tree | New |
view_kpi_tree |
kpi.tree | kpi | tree | New |
active
Boolean
default=True
help='Only active KPIs will be updated by the scheduler based on the periodicity configuration.'
args: 'Active'
category_id
Many2one → kpi.category
required=True
args: 'kpi.category', 'Category'
color
Text
compute='_compute_display_last_kpi_value'
args: 'Color'
company_id
Many2one → res.company
default=<expr>
args: 'res.company', 'Company'
dbsource_id
Many2one → base.external.dbsource
description
Text
history_ids
One2many → kpi.history
kpi_code
Text
help="SQL code must return the result as 'value' (i.e. 'SELECT 5 AS value')."
args: 'KPI Code'
kpi_type
Selection
last_execution
Datetime
compute='_compute_display_last_kpi_value'
args: 'Last execution'
name
Char
required=True
args: 'Name'
next_execution_date
Datetime
readonly=True
args: 'Next execution date'
periodicity
Integer
default=1
args: 'Periodicity'
periodicity_uom
Selection
default='day'
required=True
args: (('minute', 'Minute'), ('hour', 'Hour'), ('day', 'Day'), ('week', 'Week'), ('month', 'Month')), 'Periodicity UoM'
threshold_id
Many2one → kpi.threshold
required=True
args: 'kpi.threshold', 'Threshold'
value
Float
compute='_compute_display_last_kpi_value'
string='Value'
compute_kpi_value(self)
update_kpi_value(self)
update_next_execution_date(self)
description
Text
name
Char
required=True
size=50
args: 'Name'
No public methods.
color
Text
default='#FFFFFF'
readonly=True
required=True
args: 'Color'
company_id
Many2one → res.company
default=<expr>
args: 'res.company', 'Company'
date
Datetime
default=<expr>
readonly=True
required=True
args: 'Execution Date'
kpi_id
Many2one → kpi
required=True
args: 'kpi', 'KPI'
name
Char
default=fields.Datetime.now()
required=True
size=150
args: 'Name'
value
Float
readonly=True
required=True
args: 'Value'
No public methods.
company_id
Many2one → res.company
default=<expr>
args: 'res.company', 'Company'
invalid_message
Char
compute='_compute_is_valid_threshold'
size=100
string='Message'
kpi_ids
One2many → kpi
name
Char
required=True
size=50
args: 'Name'
range_ids
Many2many → kpi.threshold.range
valid
Boolean
compute='_compute_is_valid_threshold'
default=True
required=True
string='Valid'
create(self, data)
get_color(self, kpi_value)
color
Char
help='Choose your color'
string='Color'
company_id
Many2one → res.company
default=<expr>
args: 'res.company', 'Company'
invalid_message
Char
compute='_compute_is_valid_range'
size=100
string='Message'
max_code
Text
max_dbsource_id
Many2one → base.external.dbsource
max_error
Char
compute='_compute_max_value'
args: 'Maximum Error'
max_fixed_value
Float
max_type
Selection
required=True
args: (('static', 'Fixed value'), ('python', 'Python Code'), ('local', 'SQL - Local DB'), ('external', 'SQL - External DB')), 'Max Type'
max_value
Float
compute='_compute_max_value'
string='Maximum Value'
min_code
Text
min_dbsource_id
Many2one → base.external.dbsource
min_error
Char
compute='_compute_min_value'
args: 'Minimum Error'
min_fixed_value
Float
min_type
Selection
required=True
args: (('static', 'Fixed value'), ('python', 'Python Code'), ('local', 'SQL - Local DB'), ('external', 'SQL - Externa DB')), 'Min Type'
min_value
Float
compute='_compute_min_value'
string='Minimum Value'
name
Char
required=True
size=50
args: 'Name'
threshold_ids
Many2many → kpi.threshold
valid
Boolean
compute='_compute_is_valid_range'
default=True
required=True
string='Valid'
No public methods.
| REPOSITORY | |
|---|---|
| REPOSITORY | OCA/server-tools |
| GIT | |
| GIT | https://github.com/OCA/server-tools.git |
| GIT FOLDER | |
| GIT FOLDER | https://github.com/OCA/server-tools/tree/9.0/kpi |
| VERSION | |
| VERSION | 1.1.0 |
| CATEGORY | |
| CATEGORY | Report |
| LICENSE | |
| LICENSE | AGPL-3 |
| APPLICATION | |
| APPLICATION | No |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | Odoo Community Association (OCA), Savoir-faire Linux |
| MAINTAINERS | |
| MAINTAINERS | Odoo Community Association (OCA), Savoir-faire Linux |
| COMMITTERS | |
| COMMITTERS | GitHub, Daniel Reis, Stéphane Bidoul (ACSONE), OCA Transbot, darshan-serpent, oca-travis, Weblate, OCA-git-bot, Iván Todorovich |
| WEBSITE | |
| WEBSITE | http://www.savoirfairelinux.com |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-07-06 00:15:22 |
| ODOO DEPENDENCIES | |
| ODOO DEPENDENCIES |
OCA/server-tools: - base_external_dbsource odoo/odoo: - base |
| PYTHON DEPENDENCIES | |
| PYTHON DEPENDENCIES | Not have |
| SYSTEM DEPENDENCIES | |
| SYSTEM DEPENDENCIES | Not have |
| DESCRIPTION | |
| DESCRIPTION | |
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
view_kpi_category_form |
kpi.category.form | kpi.category | form | New |
view_kpi_category_tree |
kpi.category.tree | kpi.category | tree | New |
view_kpi_filter |
kpi.filter | kpi | search | New |
view_kpi_form |
kpi.form | kpi | form | New |
view_kpi_history_form |
kpi.history.form | kpi.history | form | New |
view_kpi_history_tree |
kpi.history.tree | kpi.history | tree | New |
view_kpi_threshold_form |
kpi.threshold.form | kpi.threshold | form | New |
view_kpi_threshold_range_form |
kpi.threshold.range.form | kpi.threshold.range | form | New |
view_kpi_threshold_range_tree |
kpi.threshold.range.tree | kpi.threshold.range | tree | New |
view_kpi_threshold_tree |
kpi.threshold.tree | kpi.threshold | tree | New |
view_kpi_tree |
kpi.tree | kpi | tree | New |
active
Boolean
default=True
help='Only active KPIs will be updated by the scheduler based on the periodicity configuration.'
args: 'Active'
category_id
Many2one → kpi.category
required=True
args: 'kpi.category', 'Category'
company_id
Many2one → res.company
default=<expr>
args: 'res.company', 'Company'
dbsource_id
Many2one → base.external.dbsource
description
Text
history_ids
One2many → kpi.history
kpi_code
Text
help="SQL code must return the result as 'value' (i.e. 'SELECT 5 AS value')."
args: 'KPI Code'
kpi_type
Selection
name
Char
required=True
args: 'Name'
next_execution_date
Datetime
readonly=True
args: 'Next execution date'
periodicity
Integer
default=1
args: 'Periodicity'
periodicity_uom
Selection
default='day'
required=True
args: (('hour', 'Hour'), ('day', 'Day'), ('week', 'Week'), ('month', 'Month')), 'Periodicity UoM'
threshold_id
Many2one → kpi.threshold
required=True
args: 'kpi.threshold', 'Threshold'
value
Float
compute='_compute_display_last_kpi_value'
string='Value'
compute_kpi_value(self)
update_kpi_value(self)
update_next_execution_date(self)
description
Text
name
Char
required=True
size=50
args: 'Name'
No public methods.
color
Text
default='#FFFFFF'
readonly=True
required=True
args: 'Color'
company_id
Many2one → res.company
default=<expr>
args: 'res.company', 'Company'
date
Datetime
default=fields.Datetime.now()
readonly=True
required=True
args: 'Execution Date'
kpi_id
Many2one → kpi
required=True
args: 'kpi', 'KPI'
name
Char
default=fields.Datetime.now()
required=True
size=150
args: 'Name'
value
Float
readonly=True
required=True
args: 'Value'
No public methods.
company_id
Many2one → res.company
default=<expr>
args: 'res.company', 'Company'
invalid_message
Char
compute='_compute_is_valid_threshold'
size=100
string='Message'
kpi_ids
One2many → kpi
name
Char
required=True
size=50
args: 'Name'
range_ids
Many2many → kpi.threshold.range
valid
Boolean
compute='_compute_is_valid_threshold'
default=True
required=True
string='Valid'
create(self, data)
get_color(self, kpi_value)
color
Char
help='Choose your color'
string='Color'
company_id
Many2one → res.company
default=<expr>
args: 'res.company', 'Company'
invalid_message
Char
compute='_compute_is_valid_range'
size=100
string='Message'
max_code
Text
max_dbsource_id
Many2one → base.external.dbsource
max_error
Char
compute='_compute_max_value'
args: 'Error'
max_fixed_value
Float
max_type
Selection
required=True
args: (('static', 'Fixed value'), ('python', 'Python Code'), ('local', 'SQL - Local DB'), ('external', 'SQL - External DB')), 'Max Type'
max_value
Float
compute='_compute_max_value'
string='Maximum'
min_code
Text
min_dbsource_id
Many2one → base.external.dbsource
min_error
Char
compute='_compute_min_value'
args: 'Error'
min_fixed_value
Float
min_type
Selection
required=True
args: (('static', 'Fixed value'), ('python', 'Python Code'), ('local', 'SQL - Local DB'), ('external', 'SQL - Externa DB')), 'Min Type'
min_value
Float
compute='_compute_min_value'
string='Minimum'
name
Char
required=True
size=50
args: 'Name'
threshold_ids
Many2many → kpi.threshold
valid
Boolean
compute='_compute_is_valid_range'
default=True
required=True
string='Valid'
No public methods.