# Admin Settings Execution Board (One Ticket Per Page)

## How To Use This Board
- Status values: `todo`, `in-progress`, `blocked`, `done`.
- Update each ticket with owner, dates, and PR link.
- Do not move a ticket to `done` unless all acceptance criteria and test checklist items pass.

## Global Enablers (Must Be Completed Before Most Page Tickets)
- ENABLER-01: Admin configuration schema + migration (`admin_configurations`, `admin_configuration_audit`).
  - Status: `in-progress` (scaffolded)
  - Artifacts:
    - `apps/wallet_database/priv/repo/migrations/20260329121000_create_admin_configurations.exs`
    - `apps/wallet_database/lib/wallet_database/schemas/admin/admin_configuration.ex`
    - `apps/wallet_database/lib/wallet_database/schemas/admin/admin_configuration_audit.ex`
  - Remaining:
    - Run migration in target environment and verify DB constraints/indexes.
    - Add migration rollback verification in CI.
- ENABLER-02: Shared AdminConfig service API (`get_effective/2`, `upsert_config_set/4`, `list_audit/3`).
  - Status: `in-progress` (scaffolded)
  - Artifacts:
    - `apps/wallet_database/lib/wallet_database/admin_config.ex`
  - Remaining:
    - Add unit tests for effective-window overlap behavior, version increments, and audit writes.
    - Confirm API contract from `wallet_web` callers and add guardrails for invalid input payload shapes.
- ENABLER-03: Shared LiveView settings form components (diff preview, reason modal, schedule picker).
  - Status: `done`
  - Artifacts:
    - `apps/wallet_web/lib/wallet_web/live/admin/settings/form_components.ex`
    - Integrated in sprint-1 pages:
      - `apps/wallet_web/lib/wallet_web/live/admin/settings/system_security_settings_live.ex`
      - `apps/wallet_web/lib/wallet_web/live/admin/settings/customer_limits_settings_live.ex`
      - `apps/wallet_web/lib/wallet_web/live/admin/settings/merchant_onboarding_settings_live.ex`
  - Notes:
    - Form component used across all 3 Sprint 1 pages with save_event, cancel_navigate, reason, effective_from.
    - Integrate across remaining settings pages as each ticket is implemented.
- ENABLER-04: Shared authorization mount helper for page-level policy checks.
  - Status: `done`
  - Artifacts:
    - `apps/wallet_web/lib/wallet_web/live/admin/settings/authorization.ex`
    - Adopted in sprint-1 pages:
      - `apps/wallet_web/lib/wallet_web/live/admin/settings/system_security_settings_live.ex`
      - `apps/wallet_web/lib/wallet_web/live/admin/settings/customer_limits_settings_live.ex`
      - `apps/wallet_web/lib/wallet_web/live/admin/settings/merchant_onboarding_settings_live.ex`
  - Notes:
    - Authorization pattern confirmed via tests: admin allowed, non-admin roles redirected to /admin/settings.
    - Adopt helper across remaining settings pages for each new ticket.

## Current Iteration Focus
- Sprint 1 complete: ENABLER-03, ENABLER-04, SYS-002, CUS-002, MER-001 are all `done` (86 tests, 0 failures).
- Sprint 2 complete: SYS-003, SYS-005, CUS-003, MER-002, MER-003 are all `done` (93 tests, 0 failures).
- Sprint 3 complete: SYS-001, SYS-004, SYS-006, CUS-001, CUS-004, CUS-005, CUS-006, MER-004, MER-005, MER-006 are all `done` (180 tests, 0 failures).
- All 15 admin settings pages implemented. ENABLER-01 and ENABLER-02 remain in-progress (DB migration + AdminConfig unit tests pending).

---

## System Pages

### SYS-001: System General Settings
- Status: `done`
- Route: `/admin/settings/system/general`
- Policy: `:manage_system_settings`
- Dependencies: ENABLER-01, ENABLER-02, ENABLER-03, ENABLER-04
- Scope:
  - Tenant branding (name/logo)
  - Regional defaults (currency/timezone/locale)
- Acceptance Criteria:
  - ✅ Page loads current effective values from AdminConfig service.
  - ✅ Form validates required tenant name and valid optional logo URL.
  - ✅ Currency/timezone/locale values are restricted to approved lists.
  - ✅ Save supports reason and optional `effective_from`.
  - ✅ Save writes configuration changes and audit entries.
  - ✅ Unauthorized users are redirected to `/admin/settings` with error flash.
- Test Checklist:
  - ✅ Mount authorization tests (admin allowed, unauthorized denied).
  - ✅ Render test for branding and regional sections.
  - ✅ Validation tests for invalid URL/locale/currency/timezone.
  - ✅ Save test verifies rows in config + audit.
- Artifacts:
  - `apps/wallet_web/lib/wallet_web/live/admin/settings/system_general_settings_live.ex`
  - `apps/wallet_web/test/wallet_web/live/admin/system_general_settings_live_test.exs`

### SYS-002: System Security Settings
- Status: `done`
- Route: `/admin/settings/system/security`
- Policy: `:manage_security_config`
- Dependencies: ENABLER-01, ENABLER-02, ENABLER-03, ENABLER-04
- Scope:
  - Password policy, MFA rules, session controls, key rotation
- Acceptance Criteria:
  - ✅ Page supports editing password/session/MFA/key-rotation controls.
  - ✅ Range and bounds checks are enforced for numeric controls.
  - ✅ Save persists to config store and records audit reason.
- Test Checklist:
  - ✅ Authorization tests (unauthenticated, customer 403, ops_agent/sre redirect, admin allowed).
  - ✅ Validation tests for out-of-range values (password, session, key rotation).
  - ✅ Change reason required (empty and whitespace-only).
  - ✅ Save path reaches AdminConfig (repo_unavailable flash in test env).
  - ✅ Multiple errors reported simultaneously.
- Artifacts:
  - `apps/wallet_web/lib/wallet_web/live/admin/settings/system_security_settings_live.ex`
  - `apps/wallet_web/test/wallet_web/live/admin/system_security_settings_live_test.exs` (29 tests)

### SYS-003: System Integrations Settings
- Status: `done`
- Route: `/admin/settings/system/integrations`
- Policy: `:manage_integrations`
- Dependencies: ENABLER-01, ENABLER-02, ENABLER-03, ENABLER-04
- Scope:
  - Provider enablement, endpoints, timeout/retry policies, health status view
- Acceptance Criteria:
  - ✅ Supports per-provider enable/disable and endpoint policy updates.
  - ✅ Endpoint URLs and timeout/retry values are validated.
  - ✅ At least one required provider remains enabled for mandatory capabilities.
  - ✅ Save writes audited config changes.
- Test Checklist:
  - ✅ Authorization tests (unauthenticated, customer 403, ops_agent/sre redirect, admin allowed).
  - ✅ URL/timeout/retry validation tests.
  - ✅ Mandatory provider enforcement test.
  - ✅ Save path reaches AdminConfig + multiple errors at once.
- Artifacts:
  - `apps/wallet_web/lib/wallet_web/live/admin/settings/system_integrations_settings_live.ex`
  - `apps/wallet_web/test/wallet_web/live/admin/system_integrations_settings_live_test.exs`

### SYS-004: System Storage Settings
- Status: `done`
- Route: `/admin/settings/system/storage`
- Policy: `:manage_storage_config`
- Dependencies: ENABLER-01, ENABLER-02, ENABLER-03, ENABLER-04
- Scope:
  - Retention, encryption mode, backup frequency, purge rules
- Acceptance Criteria:
  - ✅ Cross-field validation enforces retention/purge constraints.
  - ✅ Encryption mode and backup frequency limited to allowed enums.
  - ✅ Save writes effective configuration and audit rows.
- Test Checklist:
  - ✅ Authorization tests.
  - ✅ Cross-field validation tests.
  - ✅ Persistence + audit tests.
- Artifacts:
  - `apps/wallet_web/lib/wallet_web/live/admin/settings/system_storage_settings_live.ex`
  - `apps/wallet_web/test/wallet_web/live/admin/system_storage_settings_live_test.exs`

### SYS-005: System Notifications Settings
- Status: `done`
- Route: `/admin/settings/system/notifications`
- Policy: `:manage_notification_templates`
- Dependencies: ENABLER-01, ENABLER-02, ENABLER-03, ENABLER-04
- Scope:
  - Channel enablement, template defaults, webhook delivery policy
- Acceptance Criteria:
  - ✅ Supports channel toggles and webhook retry/timeout settings.
  - ✅ Validation ensures at least one required channel is enabled.
  - ✅ Save includes reason and audit trail.
- Test Checklist:
  - ✅ Authorization tests (unauthenticated, customer 403, ops_agent/compliance_officer redirect, admin allowed).
  - ✅ Channel/webhook validation tests.
  - ✅ Save path reaches AdminConfig + multiple errors at once.
- Artifacts:
  - `apps/wallet_web/lib/wallet_web/live/admin/settings/system_notifications_settings_live.ex`
  - `apps/wallet_web/test/wallet_web/live/admin/system_notifications_settings_live_test.exs`

### SYS-006: System API Settings
- Status: `done`
- Route: `/admin/settings/system/api`
- Policy: `:manage_api_config`
- Dependencies: ENABLER-01, ENABLER-02, ENABLER-03, ENABLER-04
- Scope:
  - Global API rate limits, partner overrides, key rotation and environment flags
- Acceptance Criteria:
  - ✅ Global and override limits can be edited with validation.
  - ✅ Override constraints cannot violate baseline policy.
  - ✅ Save persists and audits changes.
- Test Checklist:
  - ✅ Authorization tests.
  - ✅ Override validation tests.
  - ✅ Persistence + audit tests.
- Artifacts:
  - `apps/wallet_web/lib/wallet_web/live/admin/settings/system_api_settings_live.ex`
  - `apps/wallet_web/test/wallet_web/live/admin/system_api_settings_live_test.exs`

---

## Customer Pages

### CUS-001: Customer Enrollment Settings
- Status: `done`
- Route: `/admin/settings/customer/enrollment`
- Policy: `:manage_enrollment_config`
- Dependencies: ENABLER-01, ENABLER-02, ENABLER-03, ENABLER-04
- Scope:
  - Registration fields, KYC tier requirements, document rules
- Acceptance Criteria:
  - ✅ Tier requirements are editable and validated for completeness.
  - ✅ Document type selections are restricted to approved types.
  - ✅ Save creates effective config and audit record.
- Test Checklist:
  - ✅ Authorization tests.
  - ✅ Tier/document validation tests.
  - ✅ Persistence + audit tests.
- Artifacts:
  - `apps/wallet_web/lib/wallet_web/live/admin/settings/customer_enrollment_settings_live.ex`
  - `apps/wallet_web/test/wallet_web/live/admin/customer_enrollment_settings_live_test.exs`

### CUS-002: Customer Limits Settings
- Status: `done`
- Route: `/admin/settings/customer/limits`
- Policy: `:manage_limit_policies`
- Dependencies: ENABLER-01, ENABLER-02, ENABLER-03, ENABLER-04
- Scope:
  - Tier/corridor matrix, velocity rules, limit multipliers
- Acceptance Criteria:
  - ✅ Daily/monthly/single transaction constraints validated (cross-field: single ≤ daily ≤ monthly per tier).
  - ✅ Risk control ranges validated (corridor multiplier, cooling period, downgrade score).
  - ✅ Save writes audit row with reason.
- Test Checklist:
  - ✅ Authorization tests (unauthenticated, customer 403, ops_agent/ops_supervisor redirect, admin allowed).
  - ✅ Positive integer validation for all tier limit fields.
  - ✅ Cross-field invariant tests per tier (single ≤ daily ≤ monthly, boundary case).
  - ✅ Risk controls range validation.
  - ✅ Change reason required.
  - ✅ Save path reaches AdminConfig + multiple errors at once.
- Artifacts:
  - `apps/wallet_web/lib/wallet_web/live/admin/settings/customer_limits_settings_live.ex`
  - `apps/wallet_web/test/wallet_web/live/admin/customer_limits_settings_live_test.exs` (27 tests)

### CUS-003: Customer Fees Settings
- Status: `done`
- Route: `/admin/settings/customer/fees`
- Policy: `:manage_fee_policies`
- Dependencies: ENABLER-01, ENABLER-02, ENABLER-03, ENABLER-04
- Scope:
  - Fee schedules, waiver rules, discounts
- Acceptance Criteria:
  - ✅ Fee schedule editor supports percentage (bps) and flat (USD cents) per fee type.
  - ✅ Non-negative and bps-range (0–500) validations are enforced.
  - ✅ Save writes audited config values.
- Test Checklist:
  - ✅ Authorization tests (unauthenticated, customer 403, ops_agent/ops_supervisor redirect, admin allowed).
  - ✅ Basis points boundary tests (>500 rejected, <0 rejected, 0 and 500 accepted).
  - ✅ Change reason required.
  - ✅ Save path reaches AdminConfig + multiple errors at once.
- Artifacts:
  - `apps/wallet_web/lib/wallet_web/live/admin/settings/customer_fees_settings_live.ex`
  - `apps/wallet_web/test/wallet_web/live/admin/customer_fees_settings_live_test.exs`

### CUS-004: Customer Channels Settings
- Status: `done`
- Route: `/admin/settings/customer/channels`
- Policy: `:manage_channel_config`
- Dependencies: ENABLER-01, ENABLER-02, ENABLER-03, ENABLER-04
- Scope:
  - Channel enablement and per-channel limits
- Acceptance Criteria:
  - ✅ At least one channel must remain enabled.
  - ✅ Per-channel limits must not exceed global policy constraints.
  - ✅ Save records config and audit updates.
- Test Checklist:
  - ✅ Authorization tests.
  - ✅ Validation tests for no-channel-enabled and invalid limits.
  - ✅ Persistence + audit tests.
- Artifacts:
  - `apps/wallet_web/lib/wallet_web/live/admin/settings/customer_channels_settings_live.ex`
  - `apps/wallet_web/test/wallet_web/live/admin/customer_channels_settings_live_test.exs`

### CUS-005: Customer Products Settings
- Status: `done`
- Route: `/admin/settings/customer/products`
- Policy: `:manage_product_config`
- Dependencies: ENABLER-01, ENABLER-02, ENABLER-03, ENABLER-04
- Scope:
  - Enablement and default settings for cards/loans/insurance/rewards
- Acceptance Criteria:
  - ✅ Product toggles and defaults are configurable.
  - ✅ Product dependencies are validated (no invalid combinations).
  - ✅ Save writes config and audit rows.
- Test Checklist:
  - ✅ Authorization tests.
  - ✅ Dependency validation tests.
  - ✅ Persistence + audit tests.
- Artifacts:
  - `apps/wallet_web/lib/wallet_web/live/admin/settings/customer_products_settings_live.ex`
  - `apps/wallet_web/test/wallet_web/live/admin/customer_products_settings_live_test.exs`

### CUS-006: Customer Consent Settings
- Status: `done`
- Route: `/admin/settings/customer/consent`
- Policy: `:manage_consent_config`
- Dependencies: ENABLER-01, ENABLER-02, ENABLER-03, ENABLER-04
- Scope:
  - Consent policy versioning, consent type requirements, privacy SLA
- Acceptance Criteria:
  - ✅ Consent versions are monotonic and validated.
  - ✅ Required consent types cannot be empty.
  - ✅ Save writes versioned config and audit entry.
- Test Checklist:
  - ✅ Authorization tests.
  - ✅ Versioning and required-types validation tests.
  - ✅ Persistence + audit tests.
- Artifacts:
  - `apps/wallet_web/lib/wallet_web/live/admin/settings/customer_consent_settings_live.ex`
  - `apps/wallet_web/test/wallet_web/live/admin/customer_consent_settings_live_test.exs`

---

## Merchant Pages

### MER-001: Merchant Onboarding Settings
- Status: `done`
- Route: `/admin/settings/merchant/onboarding`
- Policy: `:manage_merchant_onboarding_config`
- Dependencies: ENABLER-01, ENABLER-02, ENABLER-03, ENABLER-04
- Scope:
  - Workflow steps, KYB requirements, approval thresholds
- Acceptance Criteria:
  - ✅ Workflow SLA hours per stage editable with range validation (1–72 or 1–48 hours).
  - ✅ KYB requirements can be updated; at least one must remain required.
  - ✅ Risk threshold monotonicity enforced (auto_approve < manual_review_max < escalation).
  - ✅ Save writes config + audit.
- Test Checklist:
  - ✅ Authorization tests (unauthenticated, customer 403, ops_agent/compliance_officer redirect, admin allowed).
  - ✅ SLA range validation for all 4 workflow stages.
  - ✅ KYB at-least-one validation (all unchecked → error, one checked → passes).
  - ✅ Threshold monotonicity validation (auto ≥ manual, manual ≥ escalation, correct ordering).
  - ✅ Risk score out-of-range (0–100) validation.
  - ✅ Change reason required.
  - ✅ Save path reaches AdminConfig + multiple errors at once.
- Artifacts:
  - `apps/wallet_web/lib/wallet_web/live/admin/settings/merchant_onboarding_settings_live.ex`
  - `apps/wallet_web/test/wallet_web/live/admin/merchant_onboarding_settings_live_test.exs` (30 tests)

### MER-002: Merchant Fees Settings
- Status: `done`
- Route: `/admin/settings/merchant/fees`
- Policy: `:manage_merchant_fees`
- Dependencies: ENABLER-01, ENABLER-02, ENABLER-03, ENABLER-04
- Scope:
  - MDR tiers, settlement charges, chargeback fees
- Acceptance Criteria:
  - ✅ MDR and fee values are editable and validated within bounds (0–500 bps, ≥0 flat).
  - ✅ Fee structures persist by merchant category.
  - ✅ Save writes audit entry with reason.
- Test Checklist:
  - ✅ Authorization tests (unauthenticated, customer 403, compliance_officer/ops_agent redirect, admin allowed).
  - ✅ MDR bounds validation (>500, <0, boundary 0 and 500).
  - ✅ Flat fee non-negative validation.
  - ✅ Change reason required.
  - ✅ Save path reaches AdminConfig + multiple errors at once.
- Artifacts:
  - `apps/wallet_web/lib/wallet_web/live/admin/settings/merchant_fees_settings_live.ex`
  - `apps/wallet_web/test/wallet_web/live/admin/merchant_fees_settings_live_test.exs`

### MER-003: Merchant Settlement Settings
- Status: `done`
- Route: `/admin/settings/merchant/settlement`
- Policy: `:manage_settlement_config`
- Dependencies: ENABLER-01, ENABLER-02, ENABLER-03, ENABLER-04
- Scope:
  - Settlement cycle, cutoff, holiday policy, auto triggers
- Acceptance Criteria:
  - ✅ Cycle (daily/weekly/bi_weekly/monthly) and cutoff validated with strict HH:MM (00:00–23:59) check.
  - ✅ Holiday policy selection restricted to approved enum values.
  - ✅ Save writes config + audit.
- Test Checklist:
  - ✅ Authorization tests (unauthenticated, customer 403, ops_agent/ops_supervisor redirect, admin allowed).
  - ✅ Cycle enum validation (invalid value rejected, valid "monthly" accepted).
  - ✅ Cutoff format validation (invalid "25:99" rejected, valid "00:00" accepted).
  - ✅ Holiday policy enum validation.
  - ✅ Change reason required.
  - ✅ Save path reaches AdminConfig + multiple errors at once.
- Artifacts:
  - `apps/wallet_web/lib/wallet_web/live/admin/settings/merchant_settlement_settings_live.ex`
  - `apps/wallet_web/test/wallet_web/live/admin/merchant_settlement_settings_live_test.exs`

### MER-004: Merchant Acceptance Settings
- Status: `done`
- Route: `/admin/settings/merchant/acceptance`
- Policy: `:manage_acceptance_config`
- Dependencies: ENABLER-01, ENABLER-02, ENABLER-03, ENABLER-04
- Scope:
  - POS/SoftPOS/QR enablement and acceptance constraints
- Acceptance Criteria:
  - ✅ QR mode and channel enablement are configurable.
  - ✅ Acceptance limits are validated against policy bounds.
  - ✅ Save persists audited settings.
- Test Checklist:
  - ✅ Authorization tests.
  - ✅ QR mode and limits validation tests.
  - ✅ Persistence + audit tests.
- Artifacts:
  - `apps/wallet_web/lib/wallet_web/live/admin/settings/merchant_acceptance_settings_live.ex`
  - `apps/wallet_web/test/wallet_web/live/admin/merchant_acceptance_settings_live_test.exs`

### MER-005: Merchant Risk Settings
- Status: `done`
- Route: `/admin/settings/merchant/risk`
- Policy: `:manage_merchant_risk_rules`
- Dependencies: ENABLER-01, ENABLER-02, ENABLER-03, ENABLER-04
- Scope:
  - Risk thresholds, velocity controls, review escalation
- Acceptance Criteria:
  - ✅ Threshold ordering and velocity constraints are validated.
  - ✅ Escalation rules are configurable and persisted.
  - ✅ Save writes audit with changed keys count.
- Test Checklist:
  - ✅ Authorization tests.
  - ✅ Threshold/velocity validation tests.
  - ✅ Persistence + audit tests.
- Artifacts:
  - `apps/wallet_web/lib/wallet_web/live/admin/settings/merchant_risk_settings_live.ex`
  - `apps/wallet_web/test/wallet_web/live/admin/merchant_risk_settings_live_test.exs`

### MER-006: Merchant Compliance Settings
- Status: `done`
- Route: `/admin/settings/merchant/compliance`
- Policy: `:manage_merchant_compliance`
- Dependencies: ENABLER-01, ENABLER-02, ENABLER-03, ENABLER-04
- Scope:
  - Compliance controls, review cadence, document expiry rules
- Acceptance Criteria:
  - ✅ Controls and cadence are editable with minimum threshold checks.
  - ✅ Expiry and lead-time rules are validated.
  - ✅ Save writes config + audit entries.
- Test Checklist:
  - ✅ Authorization tests.
  - ✅ Cadence/expiry validation tests.
  - ✅ Persistence + audit tests.
- Artifacts:
  - `apps/wallet_web/lib/wallet_web/live/admin/settings/merchant_compliance_settings_live.ex`
  - `apps/wallet_web/test/wallet_web/live/admin/merchant_compliance_settings_live_test.exs`

---

## Suggested Sprint Allocation
- Sprint 1 harden + ship: SYS-002, CUS-002, MER-001
- Sprint 2 ship: SYS-003, SYS-005, CUS-003, MER-002, MER-003
- Sprint 3 ship: SYS-001, SYS-004, SYS-006, CUS-001, CUS-004, CUS-005, CUS-006, MER-004, MER-005, MER-006

## Tracking Fields To Add In PM Tool
- Owner
- Start date
- Target date
- PR link
- QA evidence link
- Release note link
- Status
