diff --git a/ee/app/assets/javascripts/security_orchestration/components/branch_exception_selector.vue b/ee/app/assets/javascripts/security_orchestration/components/branch_exception_selector.vue
new file mode 100644
index 0000000000000000000000000000000000000000..27a5347413f4d1aa20c5081756cd0f8b6992703c
--- /dev/null
+++ b/ee/app/assets/javascripts/security_orchestration/components/branch_exception_selector.vue
@@ -0,0 +1,75 @@
+
+
+
+
+
diff --git a/ee/app/assets/javascripts/security_orchestration/components/constants.js b/ee/app/assets/javascripts/security_orchestration/components/constants.js
index 86d42ac3c055e670b975d274a7b8d610e89fbeec..48d7a58bfa77b33113a1773146e12920df2655ac 100644
--- a/ee/app/assets/javascripts/security_orchestration/components/constants.js
+++ b/ee/app/assets/javascripts/security_orchestration/components/constants.js
@@ -20,3 +20,16 @@ export const POLICY_TYPE_COMPONENT_OPTIONS = {
};
export const POLICIES_LIST_CONTAINER_CLASS = '.js-security-policies-container-wrapper';
+
+export const EXCEPTION_KEY = 'exception';
+export const NO_EXCEPTION_KEY = 'no_exception';
+export const EXCEPTION_TYPE_ITEMS = [
+ {
+ value: EXCEPTION_KEY,
+ text: s__('SecurityOrchestration|Exceptions'),
+ },
+ {
+ value: NO_EXCEPTION_KEY,
+ text: s__('SecurityOrchestration|No exceptions'),
+ },
+];
diff --git a/ee/app/assets/javascripts/security_orchestration/components/policy_editor/constants.js b/ee/app/assets/javascripts/security_orchestration/components/policy_editor/constants.js
index 64b3aac3218013d6aa892bfc809472f33ef39254..c30f731832c318a8960b310c85bf6027a4b0fb01 100644
--- a/ee/app/assets/javascripts/security_orchestration/components/policy_editor/constants.js
+++ b/ee/app/assets/javascripts/security_orchestration/components/policy_editor/constants.js
@@ -157,6 +157,7 @@ export const VALID_SCAN_RESULT_BRANCH_TYPE_OPTIONS = [
export const BRANCHES_KEY = 'branches';
export const BRANCH_TYPE_KEY = 'branch_type';
+export const BRANCH_EXCEPTIONS_KEY = 'branch_exceptions';
export const HUMANIZED_BRANCH_TYPE_TEXT_DICT = {
[ALL_BRANCHES.value]: s__('SecurityOrchestration|any branch'),
diff --git a/ee/app/assets/javascripts/security_orchestration/components/policy_editor/scan_result_policy/lib/from_yaml.js b/ee/app/assets/javascripts/security_orchestration/components/policy_editor/scan_result_policy/lib/from_yaml.js
index 7baf940d379cbd7847b984c7fd6545fafbe51a9e..57fffb4bc59d43f2876b28b8a6aec0a6510fa962 100644
--- a/ee/app/assets/javascripts/security_orchestration/components/policy_editor/scan_result_policy/lib/from_yaml.js
+++ b/ee/app/assets/javascripts/security_orchestration/components/policy_editor/scan_result_policy/lib/from_yaml.js
@@ -19,6 +19,7 @@ export const fromYaml = ({ manifest, validateRuleMode = false }) => {
'type',
'branches',
'branch_type',
+ 'branch_exceptions',
'license_states',
'license_types',
'match_on_inclusion',
diff --git a/ee/app/assets/javascripts/security_orchestration/components/policy_editor/scan_result_policy/license_scan_rule_builder.vue b/ee/app/assets/javascripts/security_orchestration/components/policy_editor/scan_result_policy/license_scan_rule_builder.vue
index ccafe61cc4c1d0689b75986f34e21c84e6d72998..766b1b7817d3265782804de7ce3c17876286b617 100644
--- a/ee/app/assets/javascripts/security_orchestration/components/policy_editor/scan_result_policy/license_scan_rule_builder.vue
+++ b/ee/app/assets/javascripts/security_orchestration/components/policy_editor/scan_result_policy/license_scan_rule_builder.vue
@@ -1,8 +1,11 @@