Manager Expense [(1, '=', 1)] Team Approver Expense ['|', '|', '|', '|', ('employee_id.user_id', '=', user.id), ('employee_id.department_id.manager_id.user_id', '=', user.id), ('employee_id', 'child_of', user.employee_ids.ids), ('employee_id.expense_manager_id', '=', user.id), ('manager_id', '=', user.id)] Employee Expense [ '|', '&', ('employee_id.expense_manager_id', '=', user.id), ('state', 'in', ['draft', 'submitted', 'approved', 'refused']), '&', ('employee_id.user_id', '=', user.id), ('state', '=', 'draft') ] Employees can't modify an expense that is not in draft state [ '|', '&', ('employee_id.user_id', '=', user.id), ('state', '!=', 'draft'), '&', ('employee_id.expense_manager_id', '=', user.id), ('state', 'in', ['submitted', 'approved', 'refused']) ] Expense multi company rule [('company_id', 'in', company_ids)] Expense Team Approver Account Move [('expense_ids', '!=', False)] Expense Team Approver Account Move Line [('expense_id', '!=', False)] Employee Expense Split [ ('expense_id.state', '=', 'draft'), '|', ('expense_id.employee_id.user_id', '=', user.id), ('expense_id.manager_id', '=', user.id), ] Approver Expense Split [ ('expense_id.state', 'in', ['draft', 'submitted']), ('expense_id.manager_id', 'in', [user.id, False]) ] All approver Expense Split [ ('expense_id.state', 'in', ['draft', 'submitted']), '|', ('expense_id.employee_id.user_id', '!=', user.id), ('expense_id.manager_id', 'in', [user.id, False]) ] Manager Expense Split [('expense_id.state', 'in', ['draft', 'submitted'])] Accountant Expense Split [('expense_id.state', 'in', ('draft', 'submitted', 'approved'))]