---
id: CAP-CRM-ACT-002
title: Create a follow-up while recording an interaction
feature: FEAT-CRM-ACT-01
product_area: crm
module: activities-tasks
revision: 2
status: draft
product_intent: proposed
implementation_evidence: inconsistent
supersedes: []
source_sha:
  services-crm: a8d1364f1dd44b723bb5f9acba12f983e9ec8d69
  react-console: baf6dae382d6f41dce976c7f848667ccc37e076f
intent_sources: []
purpose: Staff turn an interaction into a follow-up without opening a second form.
outcomes:
  - Immediate follow-up work linked to the relevant records
  - One transaction for the interaction and follow-up
concepts:
  - CON-CRM-ACT-001
  - CON-CRM-ACT-003
actors:
  - ACT-CRM-001
surfaces:
  - console
  - api
preconditions:
  - >-
    The selected follow-up task type exists, including the default Follow-up
    when used.
postconditions:
  - A successful save commits both the activity and its follow-up.
permissions:
  - key: crm.activities.create
    where_checked: api
    scope: tenant
  - key: crm.tasks.create
    where_checked: api
    scope: tenant
  - key: crm.tasks.create
    where_checked: console
    scope: tenant
rules:
  - id: BR-CAP-CRM-ACT-002-01
    proved_by: [ATS-CRM-ACT-002-01, TST-CRM-ACT-002]
    statement: >-
      Creating a follow-up while logging an activity requires both activity
      creation and task creation permission.
    kind: permission
    enforced_at:
      - api
      - console
    must_prove: true
    provenance: test
    source: >-
      services-crm:modules/activities/tests/e2e/activities.e2e.spec.js#refuses a
      follow-up task to a caller without crm.tasks.create: 403
    origin: none
  - id: BR-CAP-CRM-ACT-002-02
    proved_by: []
    statement: >-
      A follow-up can accompany the initial activity save but cannot be
      requested through a later activity edit.
    kind: policy
    enforced_at:
      - api
      - console
    must_prove: false
    provenance: observed
    source: >-
      services-crm:modules/activities/aws/api/activities.schemas.ts:activityCreateRequestSchema
    origin: none
  - id: BR-CAP-CRM-ACT-002-03
    proved_by: [ATS-CRM-ACT-002-02]
    statement: >-
      The API requires a nonblank follow-up title and limits it to 500
      characters.
    kind: validation
    enforced_at:
      - api
    must_prove: true
    provenance: observed
    source: >-
      services-crm:modules/activities/aws/api/activities.schemas.ts:followUpTaskSchema
    origin: none
  - id: BR-CAP-CRM-ACT-002-04
    proved_by: [ATS-CRM-ACT-002-03, TST-CRM-ACT-007, TST-CRM-ACT-034, TST-CRM-ACT-050]
    statement: >-
      The follow-up refers to the primary contact and primary organization where
      available, otherwise the first link of each kind.
    kind: calculation
    enforced_at:
      - service
    must_prove: true
    provenance: test
    source: >-
      services-crm:modules/activities/tests/integration/services/persistence/activities.integration.spec.js#creates
      the follow-up task it is asked for, about the primary contact and the
      organization, due the type’s follow-up days after the activity
    origin: none
  - id: BR-CAP-CRM-ACT-002-05
    proved_by: [ATS-CRM-ACT-002-03, ATS-CRM-ACT-002-07, TST-CRM-ACT-007, TST-CRM-ACT-034, TST-CRM-ACT-050]
    statement: >-
      Without an explicit due day, Rhythm adds the activity type’s suggested
      days to the activity’s workspace date, or leaves the task undated for due
      purposes when no suggestion exists.
    kind: calculation
    enforced_at:
      - service
    must_prove: true
    provenance: test
    source: >-
      services-crm:modules/activities/tests/integration/services/persistence/activities.integration.spec.js#creates
      the follow-up task it is asked for, about the primary contact and the
      organization, due the type’s follow-up days after the activity
    origin: none
  - id: BR-CAP-CRM-ACT-002-06
    proved_by: [ATS-CRM-ACT-002-04, TST-CRM-ACT-049]
    statement: >-
      The console calculates an explicit due day from the browser’s current
      local date and the selected interval, which can differ from Rhythm’s
      default calculation.
    kind: calculation
    enforced_at:
      - console
    must_prove: true
    provenance: observed
    source: 'react-console:components/activities/log-activity-sheet.tsx:followUp'
    origin: none
    note: The finding retains the differing browser and service date calculations.
  - id: BR-CAP-CRM-ACT-002-07
    proved_by: []
    statement: >-
      The created task uses today as its task date, defaults to the Follow-up
      type, and includes the activity subject in its description when present.
    kind: calculation
    enforced_at:
      - service
    must_prove: true
    provenance: observed
    source: >-
      services-crm:modules/activities/services/persistence/activities.ts:createFollowUpTask
    origin: none
  - id: BR-CAP-CRM-ACT-002-08
    proved_by: [ATS-CRM-ACT-002-07]
    statement: >-
      The console offers the follow-up control only when the activity type
      suggests a follow-up and the user can create tasks.
    kind: permission
    enforced_at:
      - console
    must_prove: true
    provenance: observed
    source: 'react-console:components/activities/log-activity-sheet.tsx:offersFollowUp'
    origin: none
  - id: BR-CAP-CRM-ACT-002-09
    proved_by: [ATS-CRM-ACT-001-14, ATS-CRM-ACT-001-16, ATS-CRM-ACT-002-05, TST-CRM-ACT-007]
    statement: Rejecting a follow-up rolls back the activity and task together.
    kind: invariant
    enforced_at:
      - service
    must_prove: true
    provenance: test
    source: >-
      services-crm:modules/activities/tests/integration/services/persistence/activities.integration.spec.js#writes
      nothing when the follow-up task is refused
    origin: none
  - id: BR-CAP-CRM-ACT-002-10
    proved_by: [ATS-CRM-ACT-002-06, TST-CRM-ACT-006]
    statement: >-
      Replaying the activity create returns the original activity without
      creating another follow-up task.
    kind: invariant
    enforced_at:
      - service
    must_prove: true
    provenance: test
    source: >-
      services-crm:modules/activities/tests/integration/services/persistence/activities.create-retries.integration.spec.js#makes
      one follow-up task
    origin: 'services-crm:docs/milestones/CRM-M8-activities-and-tasks.md#D-43'
scenarios:
  - id: SC-CAP-CRM-ACT-002-01
    given: Meeting suggests a seven-day follow-up.
    when: Log the meeting and select follow-up creation.
    then: >-
      My Open Tasks includes the follow-up for the primary contact with the
      supplied due day.
    provenance: test
    source: >-
      react-console:acceptance/crm/playwright/journeys/cross-application/CRM-ACC-0690.spec.ts#CRM-ACC-0690
edge_cases:
  - id: SC-CAP-CRM-ACT-002-02
    given: >-
      The browser date differs from the workspace date during a late-evening
      meeting.
    when: Request a follow-up seven days later.
    then: >-
      The console’s supplied day can differ by one day from the service’s
      omitted-date calculation.
    provenance: test
    source: >-
      react-console:acceptance/crm/playwright/journeys/cross-application/CRM-ACC-0705.spec.ts#CRM-ACC-0705
  - id: SC-CAP-CRM-ACT-002-03
    given: A meeting links an organization as primary and includes a contact.
    when: Request a follow-up during creation.
    then: The task references that organization and the first linked contact.
    provenance: test
    source: >-
      react-console:acceptance/crm/playwright/journeys/cross-application/CRM-ACC-0706.spec.ts#CRM-ACC-0706
constraints: []
depends_on:
  - CAP-CRM-ACT-001
  - CAP-CRM-ACT-010
related:
  - CAP-CRM-ACT-008
journeys:
  - JNY-CRM-ACT-001
open_questions:
  - OQ-CRM-ACT-004
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-006, TC-DAT-001, TC-DAT-002, TC-DAT-003, TC-LOG-004, TC-LOG-005, TC-PI-001, TC-PI-002, TC-PI-003, TC-PRV-001, TC-PRV-002, TC-TEN-001, TC-TEN-002, TC-TEN-003]
exercised_by: [FAS-CRM-ACT-01-02, FAS-CRM-ACT-01-05]
suites: [TST-CRM-ACT-002, TST-CRM-ACT-006, TST-CRM-ACT-007, TST-CRM-ACT-034, TST-CRM-ACT-049, TST-CRM-ACT-050]
---

# Create a follow-up while recording an interaction

## Purpose

Staff turn an interaction into a follow-up without opening a second form.

## How It Works

The coordinator chooses the follow-up option while entering an activity. That option appears only when the type suggests follow-up work and the coordinator has task creation permission. They provide a title and adjust the suggested interval if needed. Rhythm creates an ordinary task alongside the activity. A problem with the task prevents both records from being saved. The task takes its related people and organization from the activity links. The console supplies a due day calculated from the browser’s local today. If a client omits the due day, Rhythm instead uses the activity’s workspace day and the type’s suggestion. The product should choose one date calculation so staff receive consistent results.

## Relationships

- Activity logging supplies the interaction and its linked records.
- Task recording owns the resulting follow-up.
- Activity configuration supplies the suggested interval.
