Issue:
Bug: [CHORE] remove redundant variants from PermissionGroup



### Feature Description

Few variants in `PermissionGroup` enum were kept in the application code for backwards compatibility. These variants are directly stored as TEXT in DB which forces the application to ensure backwards compatibility during staggered releases. Since new variants were added and deployed, old variants can be removed post running the DB migrations.

### Possible Implementation

1. Add DB migration for updating any existing values from older variants to new variants
2. Remove variants from application code
3. Deploy

This still leaves a small time window where users can make use of older variants during staggered deployment once the migrations have run, that can be manually avoided by running migrations several times during staggered release, if required.

### Have you spent some time checking if this feature request has been raised before?

- [X] I checked and didn't find a similar issue

### Have you read the Contributing Guidelines?

- [X] I have read the [Contributing Guidelines](https://github.com/juspay/hyperswitch/blob/main/docs/CONTRIBUTING.md)

### Are you willing to submit a PR?

Yes, I am willing to submit a PR!

Pull request description:
## Type of Change
<!-- Put an `x` in the boxes that apply -->

- [ ] Bugfix
- [ ] New feature
- [ ] Enhancement
- [x] Refactoring
- [ ] Dependency updates
- [ ] Documentation
- [ ] CI/CD

## Description
This removes the redundant `ReconOps` variant from `PermissionGroup` enum which is stored in DB. This was kept back in application for backwards compatibility. Migrations are added for this and this will not be needed anymore.

### Additional Changes

- [ ] This PR modifies the API contract
- [ ] This PR modifies the database schema
- [ ] This PR modifies application configuration/environment variables

<!--
Provide links to the files with corresponding changes.

Following are the paths where you can find config files:
1. `config`
2. `crates/router/src/configs`
3. `loadtest/config`
-->


## Motivation and Context
Helps in keeping a clean permission view on HS dashboard.

## How did you test it?
Locally by running migrations and viewing permission view in dashboard.

## Checklist
<!-- Put an `x` in the boxes that apply -->

- [ ] I formatted the code `cargo +nightly fmt --all`
- [ ] I addressed lints thrown by `cargo clippy`
- [ ] I reviewed the submitted code
- [ ] I added unit tests for my changes where possible


Testing:
Locally by running migrations and viewing permission view in dashboard.

Patch:
diff --git a/crates/common_enums/src/enums.rs b/crates/common_enums/src/enums.rs
index 0234fbea6d5..1faa3b90aa8 100644
--- a/crates/common_enums/src/enums.rs
+++ b/crates/common_enums/src/enums.rs
@@ -2936,8 +2936,6 @@ pub enum PermissionGroup {
     ReconReportsManage,
     ReconOpsView,
     ReconOpsManage,
-    // TODO: To be deprecated, make sure DB is migrated before removing
-    ReconOps,
 }
 
 #[derive(Clone, Debug, serde::Serialize, PartialEq, Eq, Hash, strum::EnumIter)]
diff --git a/crates/router/src/services/authorization/info.rs b/crates/router/src/services/authorization/info.rs
index e02838b3e00..b4413dfa3b3 100644
--- a/crates/router/src/services/authorization/info.rs
+++ b/crates/router/src/services/authorization/info.rs
@@ -40,10 +40,10 @@ fn get_group_description(group: PermissionGroup) -> &'static str {
         PermissionGroup::MerchantDetailsView | PermissionGroup::AccountView => "View Merchant Details",
         PermissionGroup::MerchantDetailsManage | PermissionGroup::AccountManage => "Create, modify and delete Merchant Details like api keys, webhooks, etc",
         PermissionGroup::OrganizationManage => "Manage organization level tasks like create new Merchant accounts, Organization level roles, etc",
-        PermissionGroup::ReconReportsView => "View and access reconciliation reports and analytics",
+        PermissionGroup::ReconReportsView => "View reconciliation reports and analytics",
         PermissionGroup::ReconReportsManage => "Manage reconciliation reports",
-        PermissionGroup::ReconOpsView => "View and access reconciliation operations",
-        PermissionGroup::ReconOpsManage | PermissionGroup::ReconOps => "Manage reconciliation operations",
+        PermissionGroup::ReconOpsView => "View and access all reconciliation operations including reports and analytics",
+        PermissionGroup::ReconOpsManage => "Manage all reconciliation operations including reports and analytics",
     }
 }
 
diff --git a/crates/router/src/services/authorization/permission_groups.rs b/crates/router/src/services/authorization/permission_groups.rs
index ceb943950d5..0cdb68ec8d7 100644
--- a/crates/router/src/services/authorization/permission_groups.rs
+++ b/crates/router/src/services/authorization/permission_groups.rs
@@ -33,7 +33,6 @@ impl PermissionGroupExt for PermissionGroup {
             | Self::OrganizationManage
             | Self::AccountManage
             | Self::ReconOpsManage
-            | Self::ReconOps
             | Self::ReconReportsManage => PermissionScope::Write,
         }
     }
@@ -50,7 +49,7 @@ impl PermissionGroupExt for PermissionGroup {
             | Self::MerchantDetailsManage
             | Self::AccountView
             | Self::AccountManage => ParentGroup::Account,
-            Self::ReconOpsView | Self::ReconOpsManage | Self::ReconOps => ParentGroup::ReconOps,
+            Self::ReconOpsView | Self::ReconOpsManage => ParentGroup::ReconOps,
             Self::ReconReportsView | Self::ReconReportsManage => ParentGroup::ReconReports,
         }
     }
@@ -86,7 +85,7 @@ impl PermissionGroupExt for PermissionGroup {
             }
 
             Self::ReconOpsView => vec![Self::ReconOpsView],
-            Self::ReconOpsManage | Self::ReconOps => vec![Self::ReconOpsView, Self::ReconOpsManage],
+            Self::ReconOpsManage => vec![Self::ReconOpsView, Self::ReconOpsManage],
 
             Self::ReconReportsView => vec![Self::ReconReportsView],
             Self::ReconReportsManage => vec![Self::ReconReportsView, Self::ReconReportsManage],
diff --git a/migrations/2025-01-03-104019_migrate_permission_group_for_recon/down.sql b/migrations/2025-01-03-104019_migrate_permission_group_for_recon/down.sql
new file mode 100644
index 00000000000..e0ac49d1ecf
--- /dev/null
+++ b/migrations/2025-01-03-104019_migrate_permission_group_for_recon/down.sql
@@ -0,0 +1 @@
+SELECT 1;
diff --git a/migrations/2025-01-03-104019_migrate_permission_group_for_recon/up.sql b/migrations/2025-01-03-104019_migrate_permission_group_for_recon/up.sql
new file mode 100644
index 00000000000..0fa04632dce
--- /dev/null
+++ b/migrations/2025-01-03-104019_migrate_permission_group_for_recon/up.sql
@@ -0,0 +1,3 @@
+UPDATE roles
+SET groups = array_replace(groups, 'recon_ops', 'recon_ops_manage')
+WHERE 'recon_ops' = ANY(groups);