---
id: ATS-CRM-ACT-009
scope: CAP-CRM-ACT-009
product_area: crm
module: activities-tasks
revision: 3
status: proposed
approved_by: null
approved_at: null
source_sha:
  services-crm: a8d1364f1dd44b723bb5f9acba12f983e9ec8d69
  react-console: baf6dae382d6f41dce976c7f848667ccc37e076f
  rhythm-v2-docs: 18a49edf30ee6bda18b159b65a2b91e093ea713d
scenarios:
- id: ATS-CRM-ACT-009-01
  title: Inspect the expected baseline catalog
  level: browser
  proves:
  - BR-CAP-CRM-ACT-009-01
  preconditions: An acceptance workspace is available for baseline inspection.
  steps: List activity types after setup.
  expected: The test expects seven built-in categories; installation across workspaces remains a Platform
    dependency.
  negative: false
  data_needs: Each run creates and isolates the records it needs.
  bound_to:
  - react-console:acceptance/crm/playwright/journeys/cross-application/CRM-ACC-0728.spec.ts#CRM-ACC-0728
  - TST-CRM-ACT-068
  provenance: test
  source: react-console:acceptance/crm/playwright/journeys/cross-application/CRM-ACC-0728.spec.ts#CRM-ACC-0728
  category: rule
  binding_scope: Each registered suite contributes the assertions named by the retained file bindings;
    a compound scenario can require several suites. Conformance remains unverified.
- id: ATS-CRM-ACT-009-02
  title: Adopt a customized baseline type
  level: api
  proves:
  - BR-CAP-CRM-ACT-009-02
  preconditions: The workspace has renamed its Call type.
  steps: Apply the corresponding seed again.
  expected: The existing customized record remains unchanged.
  negative: false
  data_needs: Each run creates and isolates the records it needs.
  bound_to:
  - services-crm:modules/activities/tests/integration/services/persistence/activity-types.integration.spec.js#adopts
    a type the tenant already has under that id, leaving it as the tenant made it
  - TST-CRM-ACT-009
  provenance: test
  source: services-crm:modules/activities/tests/integration/services/persistence/activity-types.integration.spec.js#adopts
    a type the tenant already has under that id, leaving it as the tenant made it
  category: invariant
  binding_scope: Each registered suite contributes the assertions named by the retained file bindings;
    a compound scenario can require several suites. Conformance remains unverified.
- id: ATS-CRM-ACT-009-03
  title: Prevent baseline type deletion
  level: api
  proves:
  - BR-CAP-CRM-ACT-009-03
  preconditions: Call is a built-in activity type.
  steps: Request its deletion.
  expected: The service conflicts and directs deactivation.
  negative: true
  data_needs: Each run creates and isolates the records it needs.
  bound_to:
  - services-crm:modules/activities/tests/integration/services/persistence/activity-types.integration.spec.js#refuses
    a system type, saying to deactivate it instead
  - 'services-crm:modules/activities/tests/e2e/activities.e2e.spec.js#refuses the delete of a system type:
    409'
  - TST-CRM-ACT-009
  - TST-CRM-ACT-002
  provenance: test
  source: services-crm:modules/activities/tests/integration/services/persistence/activity-types.integration.spec.js#refuses
    a system type, saying to deactivate it instead
  category: validation
  binding_scope: Each registered suite contributes the assertions named by the retained file bindings;
    a compound scenario can require several suites. Conformance remains unverified.
- id: ATS-CRM-ACT-009-04
  title: Preserve and uniquely reserve baseline codes
  level: api
  proves:
  - BR-CAP-CRM-ACT-009-04
  - BR-CAP-CRM-ACT-009-05
  preconditions: The workspace has built-in Call.
  steps: Try another code on its replacement and insert another type with the Call code.
  expected: Replacement preserves the code and the duplicate reservation fails.
  negative: true
  data_needs: Each run creates and isolates the records it needs.
  bound_to:
  - services-crm:modules/activities/tests/integration/services/persistence/activity-types.integration.spec.js#keeps
    a system type’s system code whatever the replacement says
  - services-crm:modules/activities/tests/integration/services/persistence/activity-types.integration.spec.js#refuses
    a change of system code in the database too, whatever writes the row
  - services-crm:modules/activities/tests/integration/db/activities.table.integration.spec.js#refuses
    a second type of the tenant with the same system code
  - react-console:acceptance/crm/playwright/journeys/cross-application/CRM-ACC-0701.spec.ts#CRM-ACC-0701
  - TST-CRM-ACT-009
  - TST-CRM-ACT-003
  - TST-CRM-ACT-045
  provenance: test
  source: services-crm:modules/activities/tests/integration/services/persistence/activity-types.integration.spec.js#keeps
    a system type’s system code whatever the replacement says
  category: invariant
  binding_scope: Each registered suite contributes the assertions named by the retained file bindings;
    a compound scenario can require several suites. Conformance remains unverified.
- id: ATS-CRM-ACT-009-05
  title: Keep Call direction mandatory
  level: api
  proves:
  - BR-CAP-CRM-ACT-009-06
  preconditions: The workspace has built-in Call.
  steps: Make direction optional.
  expected: The refusal explains the required direction setting.
  negative: true
  data_needs: Each run creates and isolates the records it needs.
  bound_to:
  - services-crm:modules/activities/tests/integration/services/persistence/activity-types.integration.spec.js#refuses
    to make the Call type’s direction anything but required, saying why
  - 'services-crm:modules/activities/tests/e2e/activities.e2e.spec.js#refuses to make the Call type’s
    direction optional: 400'
  - services-crm:modules/activities/tests/integration/db/activities.table.integration.spec.js#refuses
    a system call type whose direction is not required
  - TST-CRM-ACT-009
  - TST-CRM-ACT-002
  - TST-CRM-ACT-003
  provenance: test
  source: services-crm:modules/activities/tests/integration/services/persistence/activity-types.integration.spec.js#refuses
    to make the Call type’s direction anything but required, saying why
  category: validation
  binding_scope: Each registered suite contributes the assertions named by the retained file bindings;
    a compound scenario can require several suites. Conformance remains unverified.
- id: ATS-CRM-ACT-009-06
  title: Both baseline catalogs adopt customer choices
  category: interaction
  level: api
  proves:
  - BR-CAP-CRM-ACT-009-02
  - BR-CAP-CRM-ACT-016-09
  preconditions: Customer-edited baseline activity and task classifications exist.
  steps: Apply the two baseline participants repeatedly and read both catalogs and the queue list.
  expected: Customer values remain, missing baseline entries appear, and baseline application creates
    no queue.
  negative: false
  data_needs: Run-owned records in an isolated workspace; fixed clock for calendar checks.
  bound_to: []
  provenance: proposed
  source: services-crm:modules/activities/tests/integration/services/persistence/activity-types.integration.spec.js#adopts
    a type the tenant already has under that id, leaving it as the tenant made it; services-crm:modules/tasks/tests/integration/services/persistence/task-types.integration.spec.js#adopts
    a record the tenant edited, which is what makes a seed a starting point
  exercises:
  - CAP-CRM-ACT-009
  - CAP-CRM-ACT-016
  related:
  - CAP-CRM-ACT-016
evidence:
- 'services-crm at a8d1364f1dd44b723bb5f9acba12f983e9ec8d69: scenario sources, executable assertions and
  local dependency boundaries are inspected.'
- 'react-console at baf6dae382d6f41dce976c7f848667ccc37e076f: scoped component tests and browser journey
  assertions are inspected.'
coverage:
  rule: covered
  transition: 'gap: FND-CRM-ACT-055'
  validation: covered
  permission: 'gap: FND-CRM-ACT-055'
  edge: 'gap: FND-CRM-ACT-055'
  failure: 'gap: FND-CRM-ACT-055'
  boundary: 'gap: FND-CRM-ACT-055'
  concurrency: 'gap: FND-CRM-ACT-055'
  invariant: covered
  interaction: covered
coverage_obligations:
  finding: FND-CRM-ACT-055
  unproved_rules: []
  permission_matrix:
    keys:
    - crm.activity-types.update
    - crm.activity-types.delete
    remaining: Complete allow/refuse combinations, including each console guard and each API operation.
  execution_note: Covered means a scenario is specified; it does not mean that scenario has executed or
    every variant has an executable binding.
related_coverage:
- capability: CAP-CRM-ACT-016
  scenarios:
  - ATS-CRM-ACT-009-06
  finding: FND-CRM-ACT-055
permission_coverage:
- key: crm.activity-types.update
  finding: FND-CRM-ACT-055
  note: The finding covers unproved operation and surface combinations; a permission-category scenario
    is not a complete permission matrix.
- key: crm.activity-types.delete
  finding: FND-CRM-ACT-055
  note: The finding covers unproved operation and surface combinations; a permission-category scenario
    is not a complete permission matrix.
---

# Preserve the baseline activity catalog without replacing customer choices: Capability Test Specification

## Coverage

Category coverage counts specified proof. Unbound cases remain proposed; registered assertions do not establish a passing run.

| Rule | Proof Scenario Or Finding |
|---|---|
| `BR-CAP-CRM-ACT-009-01` | `ATS-CRM-ACT-009-01` |
| `BR-CAP-CRM-ACT-009-02` | `ATS-CRM-ACT-009-02`, `ATS-CRM-ACT-009-06` |
| `BR-CAP-CRM-ACT-009-03` | `ATS-CRM-ACT-009-03` |
| `BR-CAP-CRM-ACT-009-04` | `ATS-CRM-ACT-009-04` |
| `BR-CAP-CRM-ACT-009-05` | `ATS-CRM-ACT-009-04` |
| `BR-CAP-CRM-ACT-009-06` | `ATS-CRM-ACT-009-05` |

## Interactions With Related Capabilities

Customer-edited baseline activity and task classifications exist. Apply the two baseline participants repeatedly and read both catalogs and the queue list.

The interaction scenario names the capabilities and rules it exercises. The coverage finding retains incomplete permission combinations and failure variants.
