---
id: CAP-CRM-ACT-008
title: Configure activity types and the details they collect
feature: FEAT-CRM-ACT-02
product_area: crm
module: activities-tasks
revision: 2
status: draft
product_intent: proposed
implementation_evidence: observed
supersedes:
  - react-console acceptance inventory CAP-CRM-ACT-004
source_sha:
  services-crm: a8d1364f1dd44b723bb5f9acba12f983e9ec8d69
  react-console: baf6dae382d6f41dce976c7f848667ccc37e076f
intent_sources:
  - >-
    Andrew 2026-10-10 (configuration ids), recorded at
    services-crm:modules/tasks/db/task-configurations.ts
purpose: Administrators tailor interaction entry to the customer’s working practices.
outcomes:
  - Useful choices for activity entry
  - Retirement that preserves historical selections
  - Ordered types and outcomes
concepts:
  - CON-CRM-ACT-001
actors:
  - ACT-CRM-002
  - ACT-CRM-003
  - ACT-CRM-004
surfaces:
  - console
  - api
  - job
preconditions: []
postconditions: []
permissions:
  - key: crm.activity-types.read
    where_checked: api
    scope: tenant
  - key: crm.activity-types.create
    where_checked: api
    scope: tenant
  - key: crm.activity-types.update
    where_checked: api
    scope: tenant
  - key: crm.activity-types.delete
    where_checked: api
    scope: tenant
  - key: crm.activity-types.bulk
    where_checked: api
    scope: tenant
rules:
  - id: BR-CAP-CRM-ACT-008-01
    proved_by: [ATS-CRM-ACT-008-01, TST-CRM-ACT-002]
    statement: >-
      Activity types are readable with reader permissions, while their creation,
      changes, reordering and deletion require administrator permissions.
    kind: permission
    enforced_at:
      - api
    must_prove: true
    provenance: test
    source: >-
      services-crm:modules/activities/tests/e2e/activities.e2e.spec.js#refuses a
      type’s create to a caller who may only read types: 403
    origin: none
  - id: BR-CAP-CRM-ACT-008-02
    proved_by: [ATS-CRM-ACT-008-02, TST-CRM-ACT-002, TST-CRM-ACT-009]
    statement: >-
      An activity type has an immutable configuration identifier derived from
      its name when omitted, using lowercase letters, digits and single
      underscores with a leading letter and excluding the reserved reorder
      address.
    kind: validation
    enforced_at:
      - service
      - database
    must_prove: true
    provenance: test
    source: >-
      services-crm:modules/activities/tests/integration/services/persistence/activity-types.integration.spec.js#refuses
      the id order, the path of the reorder
    origin: >-
      Andrew 2026-10-10 (configuration ids), recorded at
      services-crm:modules/tasks/db/task-configurations.ts
  - id: BR-CAP-CRM-ACT-008-03
    proved_by: [ATS-CRM-ACT-008-03, TST-CRM-ACT-009]
    statement: >-
      An activity type requires a workspace-unique name of at most 100
      characters and permits a description of at most 1,000 characters.
    kind: validation
    enforced_at:
      - service
      - database
    must_prove: true
    provenance: test
    source: >-
      services-crm:modules/activities/tests/integration/services/persistence/activity-types.integration.spec.js#refuses
      a name another type of the tenant has
    origin: none
  - id: BR-CAP-CRM-ACT-008-04
    proved_by: [ATS-CRM-ACT-008-04, TST-CRM-ACT-003, TST-CRM-ACT-009]
    statement: >-
      Subject, direction, duration, outcome, end time and attendees each have a
      hidden, optional or required field mode.
    kind: validation
    enforced_at:
      - database
    must_prove: true
    provenance: test
    source: >-
      services-crm:modules/activities/tests/integration/db/activities.table.integration.spec.js#refuses
      a field mode other than hidden, optional or required
    origin: none
    note: >-
      This source is an implementation decision record, so it does not confirm
      Product authority for the rule.
  - id: BR-CAP-CRM-ACT-008-05
    proved_by: [ATS-CRM-ACT-008-04, TST-CRM-ACT-003, TST-CRM-ACT-009]
    statement: >-
      Activity types choose Completed or Scheduled as the initial status, fixed
      icon and colour choices, an optional default duration of one to 1,440
      minutes, and an optional follow-up interval of one to 365 days.
    kind: validation
    enforced_at:
      - service
      - database
    must_prove: true
    provenance: test
    source: >-
      services-crm:modules/activities/tests/integration/services/persistence/activity-types.integration.spec.js#refuses
      a follow-up of 366 days, naming the field
    origin: none
  - id: BR-CAP-CRM-ACT-008-06
    proved_by: [ATS-CRM-ACT-008-05, TST-CRM-ACT-009]
    statement: >-
      An activity type owns an ordered list of up to 50 uniquely named outcomes;
      supplying a list replaces it, while omitting the list preserves it.
    kind: policy
    enforced_at:
      - service
      - database
    must_prove: true
    provenance: test
    source: >-
      services-crm:modules/activities/tests/integration/services/persistence/activity-types.integration.spec.js#replaces
      the outcomes as a list: kept by id, created by name, removed when missing
    origin: none
  - id: BR-CAP-CRM-ACT-008-07
    proved_by: [ATS-CRM-ACT-002-07, ATS-CRM-ACT-008-06, TST-CRM-ACT-003, TST-CRM-ACT-009, TST-CRM-ACT-010]
    statement: >-
      An outcome referenced by an activity and an activity type in use cannot be
      deleted; the refusal directs staff to deactivate instead.
    kind: invariant
    enforced_at:
      - service
      - database
    must_prove: true
    provenance: test
    source: >-
      services-crm:modules/activities/tests/integration/services/persistence/activity-types.integration.spec.js#refuses
      to remove an outcome an activity has, saying to deactivate it instead
    origin: none
  - id: BR-CAP-CRM-ACT-008-08
    proved_by: [ATS-CRM-ACT-008-07, ATS-CRM-ACT-008-10, TST-CRM-ACT-007, TST-CRM-ACT-042, TST-CRM-ACT-044]
    statement: >-
      Deactivation removes a type or outcome from new selections while retaining
      it on existing activities.
    kind: lifecycle
    enforced_at:
      - service
    must_prove: true
    provenance: test
    source: >-
      services-crm:modules/activities/tests/integration/services/persistence/activities.integration.spec.js#keeps
      an inactive type on an activity that already has it
    origin: none
  - id: BR-CAP-CRM-ACT-008-09
    proved_by: [ATS-CRM-ACT-008-08, TST-CRM-ACT-002, TST-CRM-ACT-042]
    statement: >-
      Reordering requires a complete list without duplicate or foreign-workspace
      entries and either moves all types or moves none.
    kind: validation
    enforced_at:
      - service
    must_prove: true
    provenance: test
    source: >-
      services-crm:modules/activities/tests/e2e/activities.e2e.spec.js#creates a
      type with its outcomes, lists it and puts the list in a new order
    origin: none
  - id: BR-CAP-CRM-ACT-008-10
    proved_by: []
    statement: A new activity type without an explicit position is appended to the list.
    kind: calculation
    enforced_at:
      - service
    must_prove: true
    provenance: test
    source: >-
      services-crm:modules/activities/tests/integration/services/persistence/activity-types.integration.spec.js#puts
      a create that states no display order at the end of the tenant’s list
    origin: none
  - id: BR-CAP-CRM-ACT-008-11
    proved_by: [ATS-CRM-ACT-008-09, TST-CRM-ACT-009]
    statement: >-
      An activity type edit uses the version read and is refused when stale or
      locked against updates.
    kind: validation
    enforced_at:
      - api
      - service
    must_prove: true
    provenance: test
    source: >-
      services-crm:modules/activities/tests/integration/services/persistence/activity-types.integration.spec.js#refuses
      a version the type has moved on from
    origin: 'services-crm:docs/milestones/CRM-M1-contacts-and-organizations.md#D-05'
  - id: BR-CAP-CRM-ACT-008-12
    proved_by: []
    statement: >-
      The configuration screen accepts default durations from five to 480
      minutes and follow-up intervals from one to 90 days, narrower than service
      limits.
    kind: validation
    enforced_at:
      - console
    must_prove: true
    provenance: observed
    source: >-
      react-console:components/configuration/resources/activity-types.tsx:MIN_DURATION
    origin: none
scenarios:
  - id: SC-CAP-CRM-ACT-008-01
    given: Site visit has three outcomes and an activity using it.
    when: 'Move the type upward, deactivate an outcome and attempt type deletion.'
    then: >-
      The list order changes, earlier outcome use remains, and deleting the used
      type is rejected.
    provenance: test
    source: >-
      react-console:acceptance/crm/playwright/journeys/cross-application/CRM-ACC-0698.spec.ts#CRM-ACC-0698
edge_cases:
  - id: SC-CAP-CRM-ACT-008-02
    given: >-
      Type input includes names at and beyond the length limit and a 366-day
      follow-up.
    when: Save each configuration variant.
    then: Boundary values succeed and out-of-range inputs identify their fields.
    provenance: test
    source: >-
      react-console:acceptance/crm/playwright/journeys/cross-application/CRM-ACC-0699.spec.ts#CRM-ACC-0699
constraints: []
depends_on: []
related:
  - CAP-CRM-ACT-001
  - CAP-CRM-ACT-009
journeys:
  - JNY-CRM-ACT-004
open_questions: []
evidence:
  - >-
    services-crm at a8d1364f1dd44b723bb5f9acba12f983e9ec8d69: Independently
    reviewed declarations, behavior and assertions identified in this
    capability’s row citations.
  - >-
    react-console at baf6dae382d6f41dce976c7f848667ccc37e076f: Independently
    reviewed declarations, behavior and assertions identified in this
    capability’s row citations.
controls: [TC-AZ-001, TC-AZ-002, TC-AZ-003, TC-AZ-004, TC-AZ-005, TC-AZ-006, TC-DAT-001, TC-DAT-003, TC-LOG-004, TC-LOG-005, TC-PI-001, TC-PI-003, TC-PI-005, TC-TEN-001, TC-TEN-002, TC-TEN-003]
exercised_by: [FAS-CRM-ACT-02-01, FAS-CRM-ACT-02-02, FAS-CRM-ACT-02-03, FAS-CRM-ACT-02-04, FAS-CRM-ACT-02-05, FAS-CRM-ACT-02-06]
suites: [TST-CRM-ACT-002, TST-CRM-ACT-003, TST-CRM-ACT-007, TST-CRM-ACT-009, TST-CRM-ACT-010, TST-CRM-ACT-042, TST-CRM-ACT-044]
---

# Configure activity types and the details they collect

## Purpose

Administrators tailor interaction entry to the customer’s working practices.

## How It Works

An administrator opens activity type configuration. They name the type and choose its icon, colour and starting behavior. Field modes shape the form for that type. Outcomes stay within the type’s own list. Saving the configuration uses the version the administrator read. Reordering changes the complete type list together. When a type or outcome has been used, deactivation provides the retirement path. Existing activities retain their earlier selections. The console’s duration and follow-up controls accept narrower ranges than the service, which remains a product consistency question.

## Relationships

- Activity logging uses the selected type and outcomes.
- Baseline types provide the starting catalog.
- Access controls reserve maintenance for administrators.
