Business Requirement

business_requirement
REPOSITORY
REPOSITORYOCA/business-requirement
GIT
GIThttps://github.com/OCA/business-requirement.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/business-requirement/tree/16.0/business_requirement
VERSION
VERSION 1.0.1
CATEGORY
CATEGORYBusiness Requirements Management
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONYes
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSTecnativa, Odoo Community Association (OCA), Elico Corp
MAINTAINERS
MAINTAINERSTecnativa, Odoo Community Association (OCA), Elico Corp
COMMITTERS
COMMITTERSDaniel Reis, Weblate, OCA-git-bot, oca-ci, Aromera
WEBSITE
WEBSITEhttps://github.com/OCA/business-requirement
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 19:12:09
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - product
    - base
    - mail
    - base_setup
    - web
    - bus
    - web_tour
    - uom
    - portal
    - web_editor
    - http_routing
    - auth_signup
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
A **Business requirement** (BR) is the expression of a business need by
a customer or internal project user.

A BR contains multiple different parts to explain the stakeholder need
and how to meet his/her requirements:

- **Customer Story**: this is the requirement as expressed by the
  customer
- **Scenario**: How/where the current solution can provide a suitable
  scenario to answer the customer story
- **Gap**: For the uncovered part of the scenario, elaborate the
  gap/need for specific developments/setup
- **Test case**: A set of conditions under which a tester will determine
  whether the application, software system or one of its features is
  working as it was originally established for it to do.
- **Deliverables** to be provided to the customer/user
- **Resources** necessary to achieve the deliverables
- **Additional** information (approval, cost control etc.)

This set of modules was originally designed for the service/IT industry
but the requirement management design has been kept as generic as
possible so that it can apply to many other cases/industries (customer
or internal projects):

- Construction
- Trading (New product development)
- Business Consultancy
- Web or IT development
- R&D projects
- etc.

More information about business requirements management:

- [Wikipedia](https://en.wikipedia.org/wiki/Business_requirements)
- [Six
  Sigma](https://www.isixsigma.com/implementation/project-selection-tracking/business-requirements-document-high-level-review/)

Code Analysis

Views touched (18)
XML IDNameModelTypeStatus
br_report br_report ir.ui.view qweb New
layout_br_report layout_br_report ir.ui.view qweb New
layout_br_report_body layout_br_report_body ir.ui.view qweb New
layout_br_report_header layout_br_report_header ir.ui.view qweb New
portal_br_error Business requirement error/warning display ir.ui.view qweb New
portal_br_page Business Requirement ir.ui.view qweb New
portal_br_success Business requirement success display ir.ui.view qweb New
portal_my_br My Business Requirements ir.ui.view qweb New
portal_my_home_br Portal My Home : business requirements entries ir.ui.view qweb Inherits portal.portal_my_home
portal_my_home_menu_br Portal layout : business requirement menu entries ir.ui.view qweb Inherits portal.portal_breadcrumbs
view_business_requirement_category_form business.requirement.category.form business.requirement.category form New
view_business_requirement_category_tree business.requirement.category.form business.requirement.category tree New
view_business_requirement_form business.requirement.form business.requirement form New
view_business_requirement_graph Business requirement business.requirement graph New
view_business_requirement_kanban_project business.requirement.kanban business.requirement kanban New
view_business_requirement_pivot Business requirement business.requirement pivot New
view_business_requirement_search business.requirement.search business.requirement search New
view_business_requirement_tree business.requirement.tree business.requirement tree New
Models touched (2)

New fields (27)
  • approval_date Datetime
    copy=False readonly=True
  • approved_id Many2one → res.users
    comodel_name='res.users' copy=False readonly=True string='Approved by'
  • business_requirement Html
    readonly=True states={'draft': [('readonly', False)]} string='Customer Story'
  • category_ids Many2many → business.requirement.category
    comodel_name='business.requirement.category' readonly=True relation='business_requirement_category_rel' states={'draft': [('readonly', False)]} string='Categories'
  • change_request Boolean
    readonly=True states={'draft': [('readonly', False)]} string='Change Request?'
  • company_id Many2one → res.company
    comodel_name='res.company' default=<expr> readonly=True required=True states={'draft': [('readonly', False)]} string='Company'
  • confirmation_date Datetime
    copy=False readonly=True
  • confirmed_user_id Many2one → res.users
    comodel_name='res.users' copy=False readonly=True string='Confirmed by'
  • date Date
    default=<expr> required=True
  • description Char
    readonly=True required=True states={'draft': [('readonly', False)]}
  • gap Html
    readonly=True states={'draft': [('readonly', False)], 'confirmed': [('readonly', False)]}
  • kanban_state Selection
    default='normal' selection=[('normal', 'In Progress'), ('on_hold', 'On Hold'), ('done', 'Ready for next stage')] tracking=True
  • name Char
    copy=False readonly=True states={'draft': [('readonly', False)]}
  • origin Char
    readonly=True states={'draft': [('readonly', False)], 'confirmed': [('readonly', True)]} string='Source'
  • partner_id Many2one → res.partner
    comodel_name='res.partner' copy=False readonly=True states={'draft': [('readonly', False)]} string='Stakeholder'
  • portal_published Boolean
    default=False args: 'In Portal'
  • priority Selection
    default='1' required=True selection=[('0', 'Low'), ('1', 'Normal'), ('2', 'High')]
  • requested_user_id Many2one → res.users
    comodel_name='res.users' default=<expr> readonly=True required=True states={'draft': [('readonly', False)], 'confirmed': [('readonly', False)]} string='Requested by'
  • responsible_user_id Many2one → res.users
    comodel_name='res.users' copy=False default=<expr> readonly=True states={'draft': [('readonly', False)], 'confirmed': [('readonly', False)]} string='Responsible'
  • reviewer_ids Many2many → res.users
    comodel_name='res.users' copy=False readonly=True states={'draft': [('readonly', False)], 'confirmed': [('readonly', False)]} string='Reviewers'
  • scenario Html
    readonly=True states={'draft': [('readonly', False)], 'confirmed': [('readonly', False)]}
  • sequence Char
    copy=False index=True readonly=True
  • state Selection
    copy=False default='draft' readonly=False selection=[('draft', 'Draft'), ('confirmed', 'Confirmed'), ('approved', 'Approved'), ('in_progress', 'In progress'), ('done', 'Done'), ('cancel', 'Cancel'), ('drop', 'Drop')] states={'draft': [('readonly', False)]} tracking=True
  • terms_and_conditions Html
    readonly=True states={'draft': [('readonly', False)], 'confirmed': [('readonly', False)]}
  • test_case Html
    readonly=True states={'draft': [('readonly', False)], 'confirmed': [('readonly', False)]}
  • to_be_reviewed Boolean
  • user_id Many2one → res.users
    comodel_name='res.users' default=<expr> required=True string='Owner' tracking=True
Public methods (8)
  • create(self, vals_list)
    @api.model_create_multi
  • get_portal_confirmation_action(self)
  • message_post(self, body='', subject=None, message_type='notification', email_from=None, author_id=None, parent_id=False, subtype_xmlid=None, subtype_id=None, partner_ids=None, channel_ids=None, attachments=None, attachment_ids=None, add_sign=True, record_name=False, **kwargs)
    @api.returns('mail.message', <expr>)
  • name_get(self)
    Display display [Name] Description
  • name_search(self, name, args=None, operator='ilike', limit=100)
    @api.model
    Search BR based on Name or Description
  • portal_publish_button(self)
  • read_group(self, domain, fields, groupby, offset=0, limit=None, orderby=False, lazy=True)
    @api.model
    Read group customization in order to display all the stages in the kanban view. if the stages values are there it will group by state.
  • write(self, vals)

New fields (2)
  • name Char
    required=True
  • parent_id Many2one → business.requirement.category
    comodel_name='business.requirement.category' ondelete='restrict' string='Parent Category'
Public methods (0)

No public methods.

REPOSITORY
REPOSITORYOCA/business-requirement
GIT
GIThttps://github.com/OCA/business-requirement.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/business-requirement/tree/15.0/business_requirement
VERSION
VERSION 1.0.3
CATEGORY
CATEGORYBusiness Requirements Management
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONYes
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSTecnativa, Odoo Community Association (OCA), Elico Corp
MAINTAINERS
MAINTAINERSTecnativa, Odoo Community Association (OCA), Elico Corp
COMMITTERS
COMMITTERSPedro M. Baeza, Víctor Martínez, Weblate, OCA-git-bot, oca-ci, oca-git-bot, Mosab Wadea
WEBSITE
WEBSITEhttps://github.com/OCA/business-requirement
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:46:44
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - product
    - base
    - mail
    - base_setup
    - web
    - bus
    - web_tour
    - uom
    - portal
    - web_editor
    - http_routing
    - auth_signup
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (18)
XML IDNameModelTypeStatus
br_report br_report ir.ui.view qweb New
layout_br_report layout_br_report ir.ui.view qweb New
layout_br_report_body layout_br_report_body ir.ui.view qweb New
layout_br_report_header layout_br_report_header ir.ui.view qweb New
portal_br_error Business requirement error/warning display ir.ui.view qweb New
portal_br_page Business Requirement ir.ui.view qweb New
portal_br_success Business requirement success display ir.ui.view qweb New
portal_my_br My Business Requirements ir.ui.view qweb New
portal_my_home_br Portal My Home : business requirements entries ir.ui.view qweb Inherits portal.portal_my_home
portal_my_home_menu_br Portal layout : business requirement menu entries ir.ui.view qweb Inherits portal.portal_breadcrumbs
view_business_requirement_category_form business.requirement.category.form business.requirement.category form New
view_business_requirement_category_tree business.requirement.category.form business.requirement.category tree New
view_business_requirement_form business.requirement.form business.requirement form New
view_business_requirement_graph Business requirement business.requirement graph New
view_business_requirement_kanban_project business.requirement.kanban business.requirement kanban New
view_business_requirement_pivot Business requirement business.requirement pivot New
view_business_requirement_search business.requirement.search business.requirement search New
view_business_requirement_tree business.requirement.tree business.requirement tree New
Models touched (2)

New fields (27)
  • approval_date Datetime
    copy=False readonly=True
  • approved_id Many2one → res.users
    comodel_name='res.users' copy=False readonly=True string='Approved by'
  • business_requirement Html
    readonly=True states={'draft': [('readonly', False)]} string='Customer Story'
  • category_ids Many2many → business.requirement.category
    comodel_name='business.requirement.category' readonly=True relation='business_requirement_category_rel' states={'draft': [('readonly', False)]} string='Categories'
  • change_request Boolean
    readonly=True states={'draft': [('readonly', False)]} string='Change Request?'
  • company_id Many2one → res.company
    comodel_name='res.company' default=<expr> readonly=True required=True states={'draft': [('readonly', False)]} string='Company'
  • confirmation_date Datetime
    copy=False readonly=True
  • confirmed_user_id Many2one → res.users
    comodel_name='res.users' copy=False readonly=True string='Confirmed by'
  • date Date
    default=<expr> required=True
  • description Char
    readonly=True required=True states={'draft': [('readonly', False)]}
  • gap Html
    readonly=True states={'draft': [('readonly', False)], 'confirmed': [('readonly', False)]}
  • kanban_state Selection
    default='normal' selection=[('normal', 'In Progress'), ('on_hold', 'On Hold'), ('done', 'Ready for next stage')] tracking=True
  • name Char
    copy=False readonly=True states={'draft': [('readonly', False)]}
  • origin Char
    readonly=True states={'draft': [('readonly', False)], 'confirmed': [('readonly', True)]} string='Source'
  • partner_id Many2one → res.partner
    comodel_name='res.partner' copy=False readonly=True states={'draft': [('readonly', False)]} string='Stakeholder'
  • portal_published Boolean
    default=False args: 'In Portal'
  • priority Selection
    default='1' required=True selection=[('0', 'Low'), ('1', 'Normal'), ('2', 'High')]
  • requested_user_id Many2one → res.users
    comodel_name='res.users' default=<expr> readonly=True required=True states={'draft': [('readonly', False)], 'confirmed': [('readonly', False)]} string='Requested by'
  • responsible_user_id Many2one → res.users
    comodel_name='res.users' copy=False default=<expr> readonly=True states={'draft': [('readonly', False)], 'confirmed': [('readonly', False)]} string='Responsible'
  • reviewer_ids Many2many → res.users
    comodel_name='res.users' copy=False readonly=True states={'draft': [('readonly', False)], 'confirmed': [('readonly', False)]} string='Reviewers'
  • scenario Html
    readonly=True states={'draft': [('readonly', False)], 'confirmed': [('readonly', False)]}
  • sequence Char
    copy=False index=True readonly=True
  • state Selection
    copy=False default='draft' readonly=False selection=[('draft', 'Draft'), ('confirmed', 'Confirmed'), ('approved', 'Approved'), ('in_progress', 'In progress'), ('done', 'Done'), ('cancel', 'Cancel'), ('drop', 'Drop')] states={'draft': [('readonly', False)]} tracking=True
  • terms_and_conditions Html
    readonly=True states={'draft': [('readonly', False)], 'confirmed': [('readonly', False)]}
  • test_case Html
    readonly=True states={'draft': [('readonly', False)], 'confirmed': [('readonly', False)]}
  • to_be_reviewed Boolean
  • user_id Many2one → res.users
    comodel_name='res.users' default=<expr> required=True string='Owner' tracking=True
Public methods (8)
  • create(self, vals_list)
    @api.model_create_multi
  • get_portal_confirmation_action(self)
  • message_post(self, body='', subject=None, message_type='notification', email_from=None, author_id=None, parent_id=False, subtype_xmlid=None, subtype_id=None, partner_ids=None, channel_ids=None, attachments=None, attachment_ids=None, add_sign=True, record_name=False, **kwargs)
    @api.returns('mail.message', <expr>)
  • name_get(self)
    Display display [Name] Description
  • name_search(self, name, args=None, operator='ilike', limit=100)
    @api.model
    Search BR based on Name or Description
  • portal_publish_button(self)
  • read_group(self, domain, fields, groupby, offset=0, limit=None, orderby=False, lazy=True)
    @api.model
    Read group customization in order to display all the stages in the kanban view. if the stages values are there it will group by state.
  • write(self, vals)

New fields (2)
  • name Char
    required=True
  • parent_id Many2one → business.requirement.category
    comodel_name='business.requirement.category' ondelete='restrict' string='Parent Category'
Public methods (0)

No public methods.

REPOSITORY
REPOSITORYOCA/business-requirement
GIT
GIThttps://github.com/OCA/business-requirement.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/business-requirement/tree/14.0/business_requirement
VERSION
VERSION 1.2.1
CATEGORY
CATEGORYBusiness Requirements Management
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONYes
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSTecnativa, Odoo Community Association (OCA), Elico Corp
MAINTAINERS
MAINTAINERSTecnativa, Odoo Community Association (OCA), Elico Corp
COMMITTERS
COMMITTERSPedro M. Baeza, Yann Papouin, OCA Transbot, Víctor Martínez, oca-travis, Weblate, OCA-git-bot, oca-ci, oca-git-bot
WEBSITE
WEBSITEhttps://github.com/OCA/business-requirement
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:41:13
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - product
    - base
    - mail
    - base_setup
    - web
    - bus
    - web_tour
    - uom
    - portal
    - web_editor
    - http_routing
    - auth_signup
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (19)
XML IDNameModelTypeStatus
assets_tests assets_tests ir.ui.view qweb Inherits web.assets_tests
br_report br_report ir.ui.view qweb New
layout_br_report layout_br_report ir.ui.view qweb New
layout_br_report_body layout_br_report_body ir.ui.view qweb New
layout_br_report_header layout_br_report_header ir.ui.view qweb New
portal_br_error Business requirement error/warning display ir.ui.view qweb New
portal_br_page Business Requirement ir.ui.view qweb New
portal_br_success Business requirement success display ir.ui.view qweb New
portal_my_br My Business Requirements ir.ui.view qweb New
portal_my_home_br Portal My Home : business requirements entries ir.ui.view qweb Inherits portal.portal_my_home
portal_my_home_menu_br Portal layout : business requirement menu entries ir.ui.view qweb Inherits portal.portal_breadcrumbs
view_business_requirement_category_form business.requirement.category.form business.requirement.category form New
view_business_requirement_category_tree business.requirement.category.form business.requirement.category tree New
view_business_requirement_form business.requirement.form business.requirement form New
view_business_requirement_graph Business requirement business.requirement graph New
view_business_requirement_kanban_project business.requirement.kanban business.requirement kanban New
view_business_requirement_pivot Business requirement business.requirement pivot New
view_business_requirement_search business.requirement.search business.requirement search New
view_business_requirement_tree business.requirement.tree business.requirement tree New
Models touched (2)

New fields (27)
  • approval_date Datetime
    copy=False readonly=True string='Approval Date'
  • approved_id Many2one → res.users
    comodel_name='res.users' copy=False readonly=True string='Approved by'
  • business_requirement Html
    readonly=True states={'draft': [('readonly', False)]} string='Customer Story'
  • category_ids Many2many → business.requirement.category
    comodel_name='business.requirement.category' readonly=True relation='business_requirement_category_rel' states={'draft': [('readonly', False)]} string='Categories'
  • change_request Boolean
    readonly=True states={'draft': [('readonly', False)]} string='Change Request?'
  • company_id Many2one → res.company
    comodel_name='res.company' default=<expr> readonly=True required=True states={'draft': [('readonly', False)]} string='Company'
  • confirmation_date Datetime
    copy=False readonly=True string='Confirmation Date'
  • confirmed_user_id Many2one → res.users
    comodel_name='res.users' copy=False readonly=True string='Confirmed by'
  • date Date
    default=<expr> required=True string='Date'
  • description Char
    readonly=True required=True states={'draft': [('readonly', False)]} string='Description'
  • gap Html
    readonly=True states={'draft': [('readonly', False)], 'confirmed': [('readonly', False)]} string='Gap'
  • kanban_state Selection
    default='normal' selection=[('normal', 'In Progress'), ('on_hold', 'On Hold'), ('done', 'Ready for next stage')] string='Kanban State' tracking=True
  • name Char
    copy=False readonly=True states={'draft': [('readonly', False)]} string='Name'
  • origin Char
    readonly=True states={'draft': [('readonly', False)], 'confirmed': [('readonly', True)]} string='Source'
  • partner_id Many2one → res.partner
    comodel_name='res.partner' copy=False readonly=True states={'draft': [('readonly', False)]} string='Stakeholder'
  • portal_published Boolean
    default=False args: 'In Portal'
  • priority Selection
    default='1' required=True selection=[('0', 'Low'), ('1', 'Normal'), ('2', 'High')] string='Priority'
  • requested_user_id Many2one → res.users
    comodel_name='res.users' default=<expr> readonly=True required=True states={'draft': [('readonly', False)], 'confirmed': [('readonly', False)]} string='Requested by'
  • responsible_user_id Many2one → res.users
    comodel_name='res.users' copy=False default=<expr> readonly=True states={'draft': [('readonly', False)], 'confirmed': [('readonly', False)]} string='Responsible'
  • reviewer_ids Many2many → res.users
    comodel_name='res.users' copy=False readonly=True states={'draft': [('readonly', False)], 'confirmed': [('readonly', False)]} string='Reviewers'
  • scenario Html
    readonly=True states={'draft': [('readonly', False)], 'confirmed': [('readonly', False)]} string='Scenario'
  • sequence Char
    copy=False index=True readonly=True string='Sequence'
  • state Selection
    copy=False default='draft' readonly=False selection=[('draft', 'Draft'), ('confirmed', 'Confirmed'), ('approved', 'Approved'), ('in_progress', 'In progress'), ('done', 'Done'), ('cancel', 'Cancel'), ('drop', 'Drop')] states={'draft': [('readonly', False)]} string='State' tracking=True
  • terms_and_conditions Html
    readonly=True states={'draft': [('readonly', False)], 'confirmed': [('readonly', False)]} string='Terms and Conditions'
  • test_case Html
    readonly=True states={'draft': [('readonly', False)], 'confirmed': [('readonly', False)]} string='Test Case'
  • to_be_reviewed Boolean
    string='To be Reviewed'
  • user_id Many2one → res.users
    comodel_name='res.users' default=<expr> required=True string='Owner' tracking=True
Public methods (8)
  • create(self, vals_list)
    @api.model_create_multi
  • get_portal_confirmation_action(self)
  • message_post(self, body='', subject=None, message_type='notification', email_from=None, author_id=None, parent_id=False, subtype_xmlid=None, subtype_id=None, partner_ids=None, channel_ids=None, attachments=None, attachment_ids=None, add_sign=True, record_name=False, **kwargs)
    @api.returns('mail.message', <expr>)
  • name_get(self)
    Display display [Name] Description
  • name_search(self, name, args=None, operator='ilike', limit=100)
    @api.model
    Search BR based on Name or Description
  • portal_publish_button(self)
  • read_group(self, domain, fields, groupby, offset=0, limit=None, orderby=False, lazy=True)
    @api.model
    Read group customization in order to display all the stages in the kanban view. if the stages values are there it will group by state.
  • write(self, vals)

New fields (2)
  • name Char
    required=True string='Name'
  • parent_id Many2one → business.requirement.category
    comodel_name='business.requirement.category' ondelete='restrict' string='Parent Category'
Public methods (0)

No public methods.

REPOSITORY
REPOSITORYOCA/business-requirement
GIT
GIThttps://github.com/OCA/business-requirement.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/business-requirement/tree/13.0/business_requirement
VERSION
VERSION 1.2.1
CATEGORY
CATEGORYBusiness Requirements Management
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONYes
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSTecnativa, Odoo Community Association (OCA), Elico Corp
MAINTAINERS
MAINTAINERSTecnativa, Odoo Community Association (OCA), Elico Corp
COMMITTERS
COMMITTERSAlexandre Díaz, OCA Transbot, sergio-teruel, Víctor Martínez, oca-travis, Weblate, OCA-git-bot, CarlosRoca13
WEBSITE
WEBSITEhttps://github.com/OCA/business-requirement
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:34:21
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - product
    - base
    - mail
    - base_setup
    - web
    - bus
    - web_tour
    - uom
    - portal
    - web_editor
    - http_routing
    - auth_signup
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (18)
XML IDNameModelTypeStatus
br_report br_report ir.ui.view qweb New
layout_br_report layout_br_report ir.ui.view qweb New
layout_br_report_body layout_br_report_body ir.ui.view qweb New
layout_br_report_header layout_br_report_header ir.ui.view qweb New
portal_br_error Business requirement error/warning display ir.ui.view qweb New
portal_br_page Business Requirement ir.ui.view qweb New
portal_br_success Business requirement success display ir.ui.view qweb New
portal_my_br My Business Requirements ir.ui.view qweb New
portal_my_home_br Portal My Home : business requirements entries ir.ui.view qweb Inherits portal.portal_my_home
portal_my_home_menu_br Portal layout : business requirement menu entries ir.ui.view qweb Inherits portal.portal_breadcrumbs
view_business_requirement_category_form business.requirement.category.form business.requirement.category form New
view_business_requirement_category_tree business.requirement.category.form business.requirement.category tree New
view_business_requirement_form business.requirement.form business.requirement form New
view_business_requirement_graph Business requirement business.requirement graph New
view_business_requirement_kanban_project business.requirement.kanban business.requirement kanban New
view_business_requirement_pivot Business requirement business.requirement pivot New
view_business_requirement_search business.requirement.search business.requirement search New
view_business_requirement_tree business.requirement.tree business.requirement tree New
Models touched (2)

New fields (27)
  • approval_date Datetime
    copy=False readonly=True string='Approval Date'
  • approved_id Many2one → res.users
    copy=False readonly=True string='Approved by' args: 'res.users'
  • business_requirement Html
    readonly=True states={'draft': [('readonly', False)]} args: 'Customer Story'
  • category_ids Many2many → business.requirement.category
    readonly=True relation='business_requirement_category_rel' states={'draft': [('readonly', False)]} string='Categories' args: 'business.requirement.category'
  • change_request Boolean
    readonly=True states={'draft': [('readonly', False)]} string='Change Request?'
  • company_id Many2one → res.company
    default=_get_default_company readonly=True required=True states={'draft': [('readonly', False)]} string='Company' args: 'res.company'
  • confirmation_date Datetime
    copy=False readonly=True string='Confirmation Date'
  • confirmed_user_id Many2one → res.users
    copy=False readonly=True string='Confirmed by' args: 'res.users'
  • date Date
    default=<expr> required=True args: 'Date'
  • description Char
    readonly=True required=True states={'draft': [('readonly', False)]} args: 'Description'
  • gap Html
    readonly=True states={'draft': [('readonly', False)], 'confirmed': [('readonly', False)]} args: 'Gap'
  • kanban_state Selection
    default='normal' tracking=True args: [('normal', 'In Progress'), ('on_hold', 'On Hold'), ('done', 'Ready for next stage')], 'Kanban State'
  • name Char
    copy=False readonly=True states={'draft': [('readonly', False)]} args: 'Name'
  • origin Char
    readonly=True states={'draft': [('readonly', False)], 'confirmed': [('readonly', True)]} string='Source'
  • partner_id Many2one → res.partner
    comodel_name='res.partner' copy=False readonly=True states={'draft': [('readonly', False)]} string='Stakeholder'
  • portal_published Boolean
    default=False args: 'In Portal'
  • priority Selection
    default='1' required=True args: [('0', 'Low'), ('1', 'Normal'), ('2', 'High')], 'Priority'
  • requested_user_id Many2one → res.users
    default=<expr> readonly=True required=True states={'draft': [('readonly', False)], 'confirmed': [('readonly', False)]} string='Requested by' args: 'res.users'
  • responsible_user_id Many2one → res.users
    copy=False default=<expr> readonly=True states={'draft': [('readonly', False)], 'confirmed': [('readonly', False)]} string='Responsible' args: 'res.users'
  • reviewer_ids Many2many → res.users
    copy=False readonly=True states={'draft': [('readonly', False)], 'confirmed': [('readonly', False)]} string='Reviewers' args: 'res.users'
  • scenario Html
    readonly=True states={'draft': [('readonly', False)], 'confirmed': [('readonly', False)]} args: 'Scenario'
  • sequence Char
    copy=False index=True readonly=True args: 'Sequence'
  • state Selection
    copy=False default='draft' readonly=False selection=[('draft', 'Draft'), ('confirmed', 'Confirmed'), ('approved', 'Approved'), ('in_progress', 'In progress'), ('done', 'Done'), ('cancel', 'Cancel'), ('drop', 'Drop')] states={'draft': [('readonly', False)]} string='State' tracking=True
  • terms_and_conditions Html
    readonly=True states={'draft': [('readonly', False)], 'confirmed': [('readonly', False)]} args: 'Terms and Conditions'
  • test_case Html
    readonly=True states={'draft': [('readonly', False)], 'confirmed': [('readonly', False)]} args: 'Test Case'
  • to_be_reviewed Boolean
    string='To be Reviewed'
  • user_id Many2one → res.users
    default=<expr> required=True string='Owner' tracking=True args: 'res.users'
Public methods (8)
  • create(self, vals)
    @api.model
  • get_portal_confirmation_action(self)
  • message_post(self, body='', subject=None, message_type='notification', subtype=None, parent_id=False, attachments=None, notif_layout=False, add_sign=True, model_description=False, mail_auto_delete=True, **kwargs)
    @api.returns('mail.message', <expr>)
  • name_get(self)
    Display display [Name] Description
  • name_search(self, name, args=None, operator='ilike', limit=100)
    @api.model
    Search BR based on Name or Description
  • portal_publish_button(self)
  • read_group(self, domain, fields, groupby, offset=0, limit=None, orderby=False, lazy=True)
    @api.model
    Read group customization in order to display all the stages in the kanban view. if the stages values are there it will group by state.
  • write(self, vals)

New fields (2)
  • name Char
    required=True string='Name'
  • parent_id Many2one → business.requirement.category
    comodel_name='business.requirement.category' ondelete='restrict' string='Parent Category'
Public methods (0)

No public methods.

REPOSITORY
REPOSITORYOCA/business-requirement
GIT
GIThttps://github.com/OCA/business-requirement.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/business-requirement/tree/12.0/business_requirement
VERSION
VERSION 1.2.0
CATEGORY
CATEGORYBusiness Requirements Management
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONYes
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSTecnativa, Odoo Community Association (OCA), Elico Corp
MAINTAINERS
MAINTAINERSTecnativa, Odoo Community Association (OCA), Elico Corp
COMMITTERS
COMMITTERSPedro M. Baeza, Alexandre Díaz, OCA Transbot, Donatas, oca-travis, Weblate, OCA-git-bot, Victor Martin, Victor M.M. Torres
WEBSITE
WEBSITEhttps://github.com/OCA/business-requirement
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:29:26
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - product
    - base
    - decimal_precision
    - mail
    - base_setup
    - web
    - bus
    - web_tour
    - uom
    - portal
    - http_routing
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (18)
XML IDNameModelTypeStatus
br_report br_report ir.ui.view qweb New
layout_br_report layout_br_report ir.ui.view qweb New
layout_br_report_body layout_br_report_body ir.ui.view qweb New
layout_br_report_header layout_br_report_header ir.ui.view qweb New
portal_br_error Business requirement error/warning display ir.ui.view qweb New
portal_br_page Business Requirement ir.ui.view qweb New
portal_br_success Business requirement success display ir.ui.view qweb New
portal_my_br My Business Requirements ir.ui.view qweb New
portal_my_home_br Portal My Home : business requirements entries ir.ui.view qweb Inherits portal.portal_my_home
portal_my_home_menu_br Portal layout : business requirement menu entries ir.ui.view qweb Inherits portal.portal_breadcrumbs
view_business_requirement_category_form business.requirement.category.form business.requirement.category form New
view_business_requirement_category_tree business.requirement.category.form business.requirement.category tree New
view_business_requirement_form business.requirement.form business.requirement form New
view_business_requirement_graph Business requirement business.requirement graph New
view_business_requirement_kanban_project business.requirement.kanban business.requirement kanban New
view_business_requirement_pivot Business requirement business.requirement pivot New
view_business_requirement_search business.requirement.search business.requirement search New
view_business_requirement_tree business.requirement.tree business.requirement tree New
Models touched (2)

New fields (27)
  • approval_date Datetime
    copy=False readonly=True string='Approval Date'
  • approved_id Many2one → res.users
    copy=False readonly=True string='Approved by' args: 'res.users'
  • business_requirement Html
    readonly=True states={'draft': [('readonly', False)]} args: 'Customer Story'
  • category_ids Many2many → business.requirement.category
    readonly=True relation='business_requirement_category_rel' states={'draft': [('readonly', False)]} string='Categories' args: 'business.requirement.category'
  • change_request Boolean
    readonly=True states={'draft': [('readonly', False)]} string='Change Request?'
  • company_id Many2one → res.company
    default=_get_default_company readonly=True required=True states={'draft': [('readonly', False)]} string='Company' args: 'res.company'
  • confirmation_date Datetime
    copy=False readonly=True string='Confirmation Date'
  • confirmed_user_id Many2one → res.users
    copy=False readonly=True string='Confirmed by' args: 'res.users'
  • date Date
    default=<expr> required=True args: 'Date'
  • description Char
    readonly=True required=True states={'draft': [('readonly', False)]} args: 'Description'
  • gap Html
    readonly=True states={'draft': [('readonly', False)], 'confirmed': [('readonly', False)]} args: 'Gap'
  • kanban_state Selection
    default='normal' track_visibility='onchange' args: [('normal', 'In Progress'), ('on_hold', 'On Hold'), ('done', 'Ready for next stage')], 'Kanban State'
  • name Char
    copy=False readonly=True states={'draft': [('readonly', False)]} args: 'Name'
  • origin Char
    readonly=True states={'draft': [('readonly', False)], 'confirmed': [('readonly', True)]} string='Source'
  • partner_id Many2one → res.partner
    comodel_name='res.partner' copy=False readonly=True states={'draft': [('readonly', False)]} string='Stakeholder'
  • portal_published Boolean
    default=False args: 'In Portal'
  • priority Selection
    default='1' required=True args: [('0', 'Low'), ('1', 'Normal'), ('2', 'High')], 'Priority'
  • requested_user_id Many2one → res.users
    default=<expr> readonly=True required=True states={'draft': [('readonly', False)], 'confirmed': [('readonly', False)]} string='Requested by' args: 'res.users'
  • responsible_user_id Many2one → res.users
    copy=False default=<expr> readonly=True states={'draft': [('readonly', False)], 'confirmed': [('readonly', False)]} string='Responsible' args: 'res.users'
  • reviewer_ids Many2many → res.users
    copy=False readonly=True states={'draft': [('readonly', False)], 'confirmed': [('readonly', False)]} string='Reviewers' args: 'res.users'
  • scenario Html
    readonly=True states={'draft': [('readonly', False)], 'confirmed': [('readonly', False)]} args: 'Scenario'
  • sequence Char
    copy=False index=True readonly=True args: 'Sequence'
  • state Selection
    copy=False default='draft' readonly=False selection=[('draft', 'Draft'), ('confirmed', 'Confirmed'), ('approved', 'Approved'), ('in_progress', 'In progress'), ('done', 'Done'), ('cancel', 'Cancel'), ('drop', 'Drop')] states={'draft': [('readonly', False)]} string='State' track_visibility='onchange'
  • terms_and_conditions Html
    readonly=True states={'draft': [('readonly', False)], 'confirmed': [('readonly', False)]} args: 'Terms and Conditions'
  • test_case Html
    readonly=True states={'draft': [('readonly', False)], 'confirmed': [('readonly', False)]} args: 'Test Case'
  • to_be_reviewed Boolean
    string='To be Reviewed'
  • user_id Many2one → res.users
    default=<expr> required=True string='Owner' track_visibility='always' args: 'res.users'
Public methods (8)
  • create(self, vals)
    @api.model
  • get_portal_confirmation_action(self)
  • message_post(self, body='', subject=None, message_type='notification', subtype=None, parent_id=False, attachments=None, notif_layout=False, add_sign=True, model_description=False, mail_auto_delete=True, **kwargs)
    @api.multi@api.returns('mail.message', <expr>)
  • name_get(self)
    @api.multi
    Display display [Name] Description
  • name_search(self, name, args=None, operator='ilike', limit=100)
    @api.model
    Search BR based on Name or Description
  • portal_publish_button(self)
    @api.multi
  • read_group(self, domain, fields, groupby, offset=0, limit=None, orderby=False, lazy=True)
    @api.model
    Read group customization in order to display all the stages in the kanban view. if the stages values are there it will group by state.
  • write(self, vals)
    @api.multi

New fields (2)
  • name Char
    required=True string='Name'
  • parent_id Many2one → business.requirement.category
    comodel_name='business.requirement.category' ondelete='restrict' string='Parent Category'
Public methods (0)

No public methods.

REPOSITORY
REPOSITORYOCA/business-requirement
GIT
GIThttps://github.com/OCA/business-requirement.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/business-requirement/tree/11.0/business_requirement
VERSION
VERSION 1.2.0
CATEGORY
CATEGORYBusiness Requirements Management
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONYes
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), Elico Corp
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), Elico Corp
COMMITTERS
COMMITTERSPedro M. Baeza, OCA Transbot, oca-travis, Weblate, OCA-git-bot, Victor Martin
WEBSITE
WEBSITEhttps://github.com/OCA/business-requirement
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:24:03
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - product
    - base
    - decimal_precision
    - mail
    - base_setup
    - web
    - bus
    - web_tour
    - portal
    - http_routing
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (18)
XML IDNameModelTypeStatus
br_report br_report ir.ui.view qweb New
layout_br_report layout_br_report ir.ui.view qweb New
layout_br_report_body layout_br_report_body ir.ui.view qweb New
layout_br_report_header layout_br_report_header ir.ui.view qweb New
portal_br_error Business requirement error/warning display ir.ui.view qweb New
portal_br_page Business Requirement ir.ui.view qweb New
portal_br_success Business requirement success display ir.ui.view qweb New
portal_my_br My Business Requirements ir.ui.view qweb New
portal_my_home_br Portal My Home : business requirement entries ir.ui.view qweb Inherits portal.portal_my_home
portal_my_home_menu_br Portal layout : business requirement menu entries ir.ui.view qweb Inherits portal.portal_layout
view_business_requirement_category_form business.requirement.category.form business.requirement.category form New
view_business_requirement_category_tree business.requirement.category.form business.requirement.category tree New
view_business_requirement_form business.requirement.form business.requirement form New
view_business_requirement_graph Business requirement business.requirement graph New
view_business_requirement_kanban_project business.requirement.kanban business.requirement kanban New
view_business_requirement_pivot Business requirement business.requirement pivot New
view_business_requirement_search business.requirement.search business.requirement search New
view_business_requirement_tree business.requirement.tree business.requirement tree New
Models touched (2)

New fields (28)
  • approval_date Datetime
    copy=False readonly=True string='Approval Date'
  • approved_id Many2one → res.users
    copy=False readonly=True string='Approved by' args: 'res.users'
  • business_requirement Html
    readonly=True states={'draft': [('readonly', False)]} args: 'Customer Story'
  • category_ids Many2many → business.requirement.category
    readonly=True relation='business_requirement_category_rel' states={'draft': [('readonly', False)]} string='Categories' args: 'business.requirement.category'
  • change_request Boolean
    readonly=True states={'draft': [('readonly', False)]} string='Change Request?'
  • company_id Many2one → res.company
    default=_get_default_company readonly=True required=True states={'draft': [('readonly', False)]} string='Company' args: 'res.company'
  • confirmation_date Datetime
    copy=False readonly=True string='Confirmation Date'
  • confirmed_user_id Many2one → res.users
    copy=False readonly=True string='Confirmed by' args: 'res.users'
  • date Date
    default=<expr> required=True args: 'Date'
  • description Char
    readonly=True required=True states={'draft': [('readonly', False)]} args: 'Description'
  • gap Html
    readonly=True states={'draft': [('readonly', False)], 'confirmed': [('readonly', False)]} args: 'Gap'
  • internal_comment Html
    args: 'Internal Comment'
  • kanban_state Selection
    default='normal' track_visibility='onchange' args: [('normal', 'In Progress'), ('on_hold', 'On Hold'), ('done', 'Ready for next stage')], 'Kanban State'
  • name Char
    copy=False readonly=True states={'draft': [('readonly', False)]} args: 'Name'
  • origin Char
    readonly=True states={'draft': [('readonly', False)], 'confirmed': [('readonly', True)]} string='Source'
  • partner_id Many2one → res.partner
    comodel_name='res.partner' copy=False readonly=True states={'draft': [('readonly', False)]} string='Stakeholder'
  • portal_published Boolean
    default=False args: 'In Portal'
  • priority Selection
    default='1' required=True args: [('0', 'Low'), ('1', 'Normal'), ('2', 'High')], 'Priority'
  • requested_user_id Many2one → res.users
    default=<expr> readonly=True required=True states={'draft': [('readonly', False)], 'confirmed': [('readonly', False)]} string='Requested by' args: 'res.users'
  • responsible_user_id Many2one → res.users
    copy=False default=<expr> readonly=True states={'draft': [('readonly', False)], 'confirmed': [('readonly', False)]} string='Responsible' args: 'res.users'
  • reviewer_ids Many2many → res.users
    copy=False readonly=True states={'draft': [('readonly', False)], 'confirmed': [('readonly', False)]} string='Reviewers' args: 'res.users'
  • scenario Html
    readonly=True states={'draft': [('readonly', False)], 'confirmed': [('readonly', False)]} args: 'Scenario'
  • sequence Char
    copy=False index=True readonly=True args: 'Sequence'
  • state Selection
    copy=False default='draft' readonly=False selection=<expr> states={'draft': [('readonly', False)]} string='State' track_visibility='onchange'
  • terms_and_conditions Html
    readonly=True states={'draft': [('readonly', False)], 'confirmed': [('readonly', False)]} args: 'Terms and Conditions'
  • test_case Html
    readonly=True states={'draft': [('readonly', False)], 'confirmed': [('readonly', False)]} args: 'Test Case'
  • to_be_reviewed Boolean
    string='To be Reviewed'
  • user_id Many2one → res.users
    default=<expr> required=True string='Owner' args: 'res.users'
Public methods (8)
  • create(self, vals)
    @api.model
  • get_portal_confirmation_action(self)
  • message_post(self, body='', subject=None, message_type='notification', subtype=None, parent_id=False, attachments=None, content_subtype='html', **kwargs)
    @api.multi@api.returns('self', <expr>)
  • name_get(self)
    @api.multi
    Display display [Name] Description
  • name_search(self, name, args=None, operator='ilike', limit=100)
    @api.model
    Search BR based on Name or Description
  • portal_publish_button(self)
    @api.multi
  • read_group(self, domain, fields, groupby, offset=0, limit=None, orderby=False, lazy=True)
    @api.model
    Read group customization in order to display all the stages in the kanban view. if the stages values are there it will group by state.
  • write(self, vals)
    @api.multi

New fields (2)
  • name Char
    required=True string='Name'
  • parent_id Many2one → business.requirement.category
    comodel_name='business.requirement.category' ondelete='restrict' string='Parent Category'
Public methods (0)

No public methods.

REPOSITORY
REPOSITORYOCA/business-requirement
GIT
GIThttps://github.com/OCA/business-requirement.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/business-requirement/tree/10.0/business_requirement
VERSION
VERSION 1.2.0
CATEGORY
CATEGORYBusiness Requirements Management
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONYes
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), Elico Corp
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), Elico Corp
COMMITTERS
COMMITTERSGitHub, OCA Transbot, oca-travis, Weblate, Eric @ Elico Corp, elicoidal
WEBSITE
WEBSITEhttps://www.elico-corp.com/
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:20:04
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - product
    - base
    - decimal_precision
    - mail
    - base_setup
    - web_kanban
    - web
    - bus
    - web_tour
    - report
    - project
    - analytic
    - resource
    - web_planner
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (11)
XML IDNameModelTypeStatus
br_report br_report ir.ui.view qweb New
internal_layout_br_header internal_layout_br_header ir.ui.view qweb New
layout_br_base layout_br_base ir.ui.view qweb New
view_business_requirement_category_form business.requirement.category.form business.requirement.category form New
view_business_requirement_category_tree business.requirement.category.form business.requirement.category tree New
view_business_requirement_form business.requirement.form business.requirement form New
view_business_requirement_graph Business requirement business.requirement graph New
view_business_requirement_kanban_project business.requirement.kanban business.requirement kanban New
view_business_requirement_pivot Business requirement business.requirement pivot New
view_business_requirement_search business.requirement.search business.requirement search New
view_business_requirement_tree business.requirement.tree business.requirement tree New
Models touched (3)

New fields (30)
  • approval_date Datetime
    copy=False readonly=True string='Approval Date'
  • approved_id Many2one → res.users
    copy=False readonly=True string='Approved by' args: 'res.users'
  • business_requirement Html
    readonly=True states={'draft': [('readonly', False)]} args: 'Customer Story'
  • business_requirement_ids One2many → business.requirement
    comodel_name='business.requirement' copy=False inverse_name='parent_id' readonly=True states={'draft': [('readonly', False)]} string='Sub Business Requirement'
  • category_ids Many2many → business.requirement.category
    readonly=True relation='business_requirement_category_rel' states={'draft': [('readonly', False)]} string='Categories' args: 'business.requirement.category'
  • change_request Boolean
    default=False readonly=True states={'draft': [('readonly', False)]} string='Change Request?'
  • company_id Many2one → res.company
    default=_get_default_company readonly=True required=True states={'draft': [('readonly', False)]} string='Company' args: 'res.company'
  • confirmation_date Datetime
    copy=False readonly=True string='Confirmation Date'
  • confirmed_id Many2one → res.users
    copy=False readonly=True string='Confirmed by' args: 'res.users'
  • description Char
    readonly=True required=True states={'draft': [('readonly', False)]} args: 'Description'
  • gap Html
    readonly=True states={'draft': [('readonly', False)], 'confirmed': [('readonly', False)]} args: 'Gap'
  • kanban_state Selection
    default='normal' required=False track_visibility='onchange' args: [('normal', 'In Progress'), ('on_hold', 'On Hold'), ('done', 'Ready for next stage')], 'Kanban State'
  • level Integer
    compute='_compute_get_level' store=True string='Level'
  • name Char
    copy=False readonly=True required=False states={'draft': [('readonly', False)]} args: 'Name'
  • origin Char
    readonly=True states={'draft': [('readonly', False)], 'confirmed': [('readonly', True)]} string='Source'
  • parent_id Many2one → business.requirement
    comodel_name='business.requirement' domain="[('id', '!=', id)]" ondelete='set null' readonly=True states={'draft': [('readonly', False)], 'confirmed': [('readonly', False)]} string='Parent'
  • partner_id Many2one → res.partner
    comodel_name='res.partner' copy=False readonly=True states={'draft': [('readonly', False)]} store=True string='Stakeholder'
  • priority Selection
    default='1' required=True args: [('0', 'Low'), ('1', 'Normal'), ('2', 'High')], 'Priority'
  • project_id Many2one → project.project
    comodel_name='project.project' copy=False ondelete='set null' readonly=True states={'draft': [('readonly', False)]} string='Master Project'
  • ref Char
    copy=False readonly=True required=False states={'draft': [('readonly', False)]} args: 'WBS'
  • requested_id Many2one → res.users
    default=<expr> readonly=True required=True states={'draft': [('readonly', False)], 'confirmed': [('readonly', False)]} string='Requested by' args: 'res.users'
  • responsible_id Many2one → res.users
    copy=False default=<expr> readonly=True states={'draft': [('readonly', False)], 'confirmed': [('readonly', False)]} string='Responsible' args: 'res.users'
  • reviewer_ids Many2many → res.users
    copy=False readonly=True states={'draft': [('readonly', False)], 'confirmed': [('readonly', False)]} string='Reviewers' args: 'res.users'
  • scenario Html
    readonly=True states={'draft': [('readonly', False)], 'confirmed': [('readonly', False)]} args: 'Scenario'
  • sequence Char
    copy=False index=True readonly=True args: 'Sequence'
  • state Selection
    copy=False default='draft' readonly=False selection='_get_states' states={'draft': [('readonly', False)]} string='State' track_visibility='onchange'
  • sub_br_count Integer
    compute='_compute_sub_br_count' string='Count'
  • terms_and_conditions Html
    readonly=True states={'draft': [('readonly', False)], 'confirmed': [('readonly', False)]} args: 'Terms and Conditions'
  • test_case Html
    readonly=True states={'draft': [('readonly', False)], 'confirmed': [('readonly', False)]} args: 'Test Case'
  • to_be_reviewed Boolean
    string='To be Reviewed'
Public methods (7)
  • create(self, vals)
    @api.model
  • message_post(self, body='', subject=None, message_type='notification', subtype=None, parent_id=False, attachments=None, content_subtype='html', **kwargs)
    @api.multi@api.returns('self', <expr>)
  • name_get(self)
    @api.multi
    Display [Reference] Description if reference is defined otherwise display [Name] Description
  • name_search(self, name, args=None, operator='ilike', limit=100)
    @api.model
    Search BR based on Name or Description
  • project_id_change(self)
    @api.multi@api.onchange('project_id')
  • read_group(self, domain, fields, groupby, offset=0, limit=None, orderby=False, lazy=True)
    @api.model
    Read group customization in order to display all the stages in the kanban view. if the stages values are there it will group by state.
  • write(self, vals)
    @api.multi

New fields (2)
  • name Char
    required=True string='Name'
  • parent_id Many2one → business.requirement.category
    comodel_name='business.requirement.category' ondelete='restrict' string='Parent Category'
Public methods (0)

No public methods.

New fields (1)
  • br_ids One2many → business.requirement
    comodel_name='business.requirement' copy=False inverse_name='project_id' string='Business Requirements'
Public methods (0)

No public methods.

REPOSITORY
REPOSITORYOCA/business-requirement
GIT
GIThttps://github.com/OCA/business-requirement.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/business-requirement/tree/9.0/business_requirement
VERSION
VERSION 5.1.3
CATEGORY
CATEGORYBusiness Requirements Management
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), Elico Corp
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), Elico Corp
COMMITTERS
COMMITTERSelicoidal
WEBSITE
WEBSITEhttps://www.elico-corp.com/
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:15:25
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - product
    - base
    - decimal_precision
    - mail
    - base_setup
    - web_kanban
    - web
    - bus
    - report
    - project
    - analytic
    - portal
    - auth_signup
    - resource
    - web_tip
    - web_planner
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (6)
XML IDNameModelTypeStatus
view_business_requirement_category_form business.requirement.category.form business.requirement.category form New
view_business_requirement_category_tree business.requirement.category.form business.requirement.category tree New
view_business_requirement_form business.requirement.form business.requirement form New
view_business_requirement_graph Business requirement business.requirement graph New
view_business_requirement_search business.requirement.search business.requirement search New
view_business_requirement_tree business.requirement.tree business.requirement tree New
Models touched (3)

New fields (29)
  • approval_date Datetime
    copy=False readonly=True string='Approval Date'
  • approved_id Many2one → res.users
    copy=False readonly=True string='Approved by' args: 'res.users'
  • business_requirement Html
    readonly=True states={'draft': [('readonly', False)]} args: 'Customer Story'
  • business_requirement_ids One2many → business.requirement
    comodel_name='business.requirement' copy=False inverse_name='parent_id' readonly=True states={'draft': [('readonly', False)]} string='Sub Business Requirement'
  • category_ids Many2many → business.requirement.category
    readonly=True relation='business_requirement_category_rel' states={'draft': [('readonly', False)]} string='Categories' args: 'business.requirement.category'
  • change_request Boolean
    default=False readonly=True states={'draft': [('readonly', False)]} string='Change Request?'
  • company_id Many2one → res.company
    default=_get_default_company readonly=True required=True states={'draft': [('readonly', False)]} string='Company' args: 'res.company'
  • confirmation_date Datetime
    copy=False readonly=True string='Confirmation Date'
  • confirmed_id Many2one → res.users
    copy=False readonly=True string='Confirmed by' args: 'res.users'
  • description Char
    readonly=True required=True states={'draft': [('readonly', False)]} args: 'Description'
  • gap Html
    readonly=True states={'draft': [('readonly', False)], 'confirmed': [('readonly', False)]} args: 'Gap'
  • kanban_state Selection
    copy=False default='normal' required=False track_visibility='onchange' args: [('normal', 'In Progress'), ('on_hold', 'On Hold'), ('done', 'Ready for next stage')], 'Kanban State'
  • level Integer
    compute='_get_level' store=True string='Level'
  • name Char
    copy=False readonly=True required=False states={'draft': [('readonly', False)]} args: 'Name'
  • origin Text
    string='Source'
  • parent_id Many2one → business.requirement
    comodel_name='business.requirement' domain="[('id', '!=', id)]" ondelete='set null' readonly=True states={'draft': [('readonly', False)], 'confirmed': [('readonly', False)]} string='Parent'
  • partner_id Many2one → res.partner
    comodel_name='res.partner' copy=False readonly=True states={'draft': [('readonly', False)]} store=True string='Stakeholder'
  • priority Selection
    default='1' required=True args: [('0', 'Low'), ('1', 'Normal'), ('2', 'High')], 'Priority'
  • project_id Many2one → project.project
    comodel_name='project.project' copy=False ondelete='set null' readonly=True states={'draft': [('readonly', False)]} string='Master Project'
  • ref Char
    copy=False readonly=True required=False states={'draft': [('readonly', False)]} args: 'WBS'
  • requested_id Many2one → res.users
    default=<expr> readonly=True required=True states={'draft': [('readonly', False)], 'confirmed': [('readonly', False)]} string='Requested by' args: 'res.users'
  • responsible_id Many2one → res.users
    copy=False default=<expr> readonly=True states={'draft': [('readonly', False)], 'confirmed': [('readonly', False)]} string='Responsible' args: 'res.users'
  • reviewer_ids Many2many → res.users
    copy=False readonly=True states={'draft': [('readonly', False)], 'confirmed': [('readonly', False)]} string='Reviewers' args: 'res.users'
  • scenario Html
    readonly=True states={'draft': [('readonly', False)], 'confirmed': [('readonly', False)]} args: 'Scenario'
  • sequence Char
    copy=False index=True readonly=True args: 'Sequence'
  • state Selection
    copy=False default='draft' readonly=True selection='_get_states' states={'draft': [('readonly', False)]} string='State' track_visibility='onchange'
  • sub_br_count Integer
    compute='_compute_sub_br_count' string='Count'
  • test_case Html
    readonly=True states={'draft': [('readonly', False)], 'confirmed': [('readonly', False)]} args: 'Test Case'
  • to_be_reviewed Boolean
    string='To be Reviewed'
Public methods (14)
  • action_button_approve(self)
    @api.multi
  • action_button_back_draft(self)
    @api.multi
  • action_button_cancel(self)
    @api.multi
  • action_button_confirm(self)
    @api.multi
  • action_button_done(self)
    @api.multi
  • action_button_drop(self)
    @api.multi
  • action_button_in_progress(self)
    @api.multi
  • action_button_stakeholder_approval(self)
    @api.multi
  • create(self, vals)
    @api.model
  • message_post(self, cr, uid, thread_id, body='', subject=None, type='notification', subtype=None, parent_id=False, attachments=None, context=None, content_subtype='html', **kwargs)
    @api.cr_uid_ids_context
  • name_get(self)
    @api.multi
    Display [Reference] Description if reference is defined otherwise display [Name] Description
  • name_search(self, name, args=None, operator='ilike', limit=100)
    @api.model
    Search BR based on Name or Description
  • project_id_change(self)
    @api.multi@api.onchange('project_id')
  • write(self, vals)
    @api.multi

New fields (2)
  • name Char
    required=True string='Name'
  • parent_id Many2one → business.requirement.category
    comodel_name='business.requirement.category' ondelete='restrict' string='Parent Category'
Public methods (0)

No public methods.

New fields (1)
  • br_ids One2many → business.requirement
    comodel_name='business.requirement' copy=False inverse_name='project_id' string='Business Requirements'
Public methods (0)

No public methods.

REPOSITORY
REPOSITORYOCA/business-requirement
GIT
GIThttps://github.com/OCA/business-requirement.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/business-requirement/tree/8.0/business_requirement
VERSION
VERSION 5.1.3
CATEGORY
CATEGORYBusiness Requirements Management
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), Elico Corp
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), Elico Corp
COMMITTERS
COMMITTERSPedro M. Baeza, GitHub, Andrea, Stéphane Bidoul (ACSONE), OCA Transbot, darshan-serpent, Moises Lopez - https://www.vauxoo.com/, oca-travis, Weblate, Victor Martin, noah, Eric @ Elico Corp, victor, eric, YogeshMahera-SerpentCS
WEBSITE
WEBSITEhttps://www.elico-corp.com/
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:11:28
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - product
    - base
    - decimal_precision
    - mail
    - base_setup
    - web_kanban
    - web
    - report
    - project
    - analytic
    - board
    - resource
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (6)
XML IDNameModelTypeStatus
view_business_requirement_category_form business.requirement.category.form business.requirement.category form New
view_business_requirement_category_tree business.requirement.category.form business.requirement.category tree New
view_business_requirement_form business.requirement.form business.requirement form New
view_business_requirement_graph Business requirement business.requirement graph New
view_business_requirement_search business.requirement.search business.requirement search New
view_business_requirement_tree business.requirement.tree business.requirement tree New
Models touched (3)

New fields (29)
  • approval_date Datetime
    copy=False readonly=True string='Approval Date'
  • approved_id Many2one → res.users
    copy=False readonly=True string='Approved by' args: 'res.users'
  • business_requirement Html
    readonly=True states={'draft': [('readonly', False)]} args: 'Customer Story'
  • business_requirement_ids One2many → business.requirement
    comodel_name='business.requirement' copy=False inverse_name='parent_id' readonly=True states={'draft': [('readonly', False)]} string='Sub Business Requirement'
  • category_ids Many2many → business.requirement.category
    readonly=True relation='business_requirement_category_rel' states={'draft': [('readonly', False)]} string='Categories' args: 'business.requirement.category'
  • change_request Boolean
    default=False readonly=True states={'draft': [('readonly', False)]} string='Change Request?'
  • company_id Many2one → res.company
    default=_get_default_company readonly=True required=True states={'draft': [('readonly', False)]} string='Company' args: 'res.company'
  • confirmation_date Datetime
    copy=False readonly=True string='Confirmation Date'
  • confirmed_id Many2one → res.users
    copy=False readonly=True string='Confirmed by' args: 'res.users'
  • description Char
    readonly=True required=True states={'draft': [('readonly', False)]} args: 'Description'
  • gap Html
    readonly=True states={'draft': [('readonly', False)], 'confirmed': [('readonly', False)]} args: 'Gap'
  • kanban_state Selection
    copy=False default='normal' required=False track_visibility='onchange' args: [('normal', 'In Progress'), ('on_hold', 'On Hold'), ('done', 'Ready for next stage')], 'Kanban State'
  • level Integer
    compute='_get_level' store=True string='Level'
  • name Char
    copy=False readonly=True required=False states={'draft': [('readonly', False)]} args: 'Name'
  • origin Char
    readonly=True states={'draft': [('readonly', False)]} string='Source'
  • parent_id Many2one → business.requirement
    comodel_name='business.requirement' domain="[('id', '!=', id)]" ondelete='set null' readonly=True states={'draft': [('readonly', False)], 'confirmed': [('readonly', False)]} string='Parent'
  • partner_id Many2one → res.partner
    comodel_name='res.partner' copy=False readonly=True states={'draft': [('readonly', False)]} store=True string='Stakeholder'
  • priority Selection
    default='1' required=True args: [('0', 'Low'), ('1', 'Normal'), ('2', 'High')], 'Priority'
  • project_id Many2one → project.project
    comodel_name='project.project' copy=False ondelete='set null' readonly=True states={'draft': [('readonly', False)]} string='Master Project'
  • ref Char
    copy=False readonly=True required=False states={'draft': [('readonly', False)]} args: 'WBS'
  • requested_id Many2one → res.users
    default=<expr> readonly=True required=True states={'draft': [('readonly', False)], 'confirmed': [('readonly', False)]} string='Requested by' args: 'res.users'
  • responsible_id Many2one → res.users
    copy=False default=<expr> readonly=True states={'draft': [('readonly', False)], 'confirmed': [('readonly', False)]} string='Responsible' args: 'res.users'
  • reviewer_ids Many2many → res.users
    copy=False readonly=True states={'draft': [('readonly', False)], 'confirmed': [('readonly', False)]} string='Reviewers' args: 'res.users'
  • scenario Html
    readonly=True states={'draft': [('readonly', False)], 'confirmed': [('readonly', False)]} args: 'Scenario'
  • sequence Char
    copy=False index=True readonly=True args: 'Sequence'
  • state Selection
    copy=False default='draft' readonly=True selection='_get_states' states={'draft': [('readonly', False)]} string='State' track_visibility='onchange'
  • sub_br_count Integer
    compute='_compute_sub_br_count' string='Count'
  • test_case Html
    readonly=True states={'draft': [('readonly', False)], 'confirmed': [('readonly', False)]} args: 'Test Case'
  • to_be_reviewed Boolean
    string='To be Reviewed'
Public methods (8)
  • create(self, vals)
    @api.model
  • message_post(self, cr, uid, thread_id, body='', subject=None, type='notification', subtype=None, parent_id=False, attachments=None, context=None, content_subtype='html', **kwargs)
    @api.cr_uid_ids_context
  • name_get(self)
    @api.multi
    Display [Reference] Description if reference is defined otherwise display [Name] Description
  • name_search(self, name, args=None, operator='ilike', limit=100)
    @api.model
    Search BR based on Name or Description
  • project_id_change(self)
    @api.multi@api.onchange('project_id')
  • read_group(self, domain, fields, groupby, offset=0, limit=None, orderby=False, lazy=True)
    @api.model
    Read group customization in order to display all the stages in the kanban view. if the stages values are there it will group by state.
  • write(self, vals)
    @api.multi
  • write(self, vals)
    @api.multi

New fields (2)
  • name Char
    required=True string='Name'
  • parent_id Many2one → business.requirement.category
    comodel_name='business.requirement.category' ondelete='restrict' string='Parent Category'
Public methods (0)

No public methods.

New fields (1)
  • br_ids One2many → business.requirement
    comodel_name='business.requirement' copy=False inverse_name='project_id' string='Business Requirements'
Public methods (0)

No public methods.