---
id: CAP-ACC-PRD-013
title: Record the follow-up work a purchase needs
feature: FEAT-ACC-PRD-03
product_area: accounting
module: products
revision: 5
status: draft
product_intent: proposed
implementation_evidence: partially-observed
supersedes:
  - react-console acceptance inventory CAP-ACC-PRD-011
  - react-console acceptance inventory RUL-ACC-PRD-028
source_sha:
  services-accounting: f47cb263875bbc0c5640fba7dae6785ec32695f8
  react-console: baf6dae382d6f41dce976c7f848667ccc37e076f
intent_sources:
  - 'services-accounting:docs/milestones/ACCT-M1-books-and-invoices.md#R22'
purpose: Staff describe the work that should follow a purchase in task instructions.
outcomes:
  - Follow-up instructions remain attached to the purchased product.
concepts:
  - CON-ACC-PRD-001
actors:
  - ACT-ACC-006
  - ACT-ACC-011
surfaces:
  - console
  - api
permissions:
  - key: accounting.products.update
    where_checked: api
    scope: tenant
rules:
  - id: BR-CAP-ACC-PRD-013-01
    proved_by: [ATS-ACC-PRD-013-04, TST-ACC-PRD-039]
    statement: >-
      A task instruction requires a name and CRM task type and may include description, queue, assignee and a
      nonnegative delay in days, weeks or months.
    kind: validation
    enforced_at:
      - api
      - database
    must_prove: false
    provenance: test
    source: >-
      services-accounting:modules/products/tests/integration/services/persistence/products.features.integration.spec.js#answers
      every feature as written, the lists in the order sent
    origin: none
  - id: BR-CAP-ACC-PRD-013-02
    proved_by: [ATS-ACC-PRD-013-01, TST-ACC-PRD-039]
    statement: >-
      Task types and queues must exist in the workspace and be active when newly assigned, while previously
      held inactive choices remain acceptable.
    kind: validation
    enforced_at:
      - service
    must_prove: true
    provenance: test
    source: >-
      services-accounting:modules/products/tests/integration/services/persistence/products.features.integration.spec.js#keeps
      a task type and a queue that became inactive while the product held them
    origin: none
  - id: BR-CAP-ACC-PRD-013-03
    proved_by: [ATS-ACC-PRD-013-02, TST-ACC-PRD-027, TST-ACC-PRD-039]
    statement: 'Assignee values must match the Rhythm user identity format, with no check that a user exists.'
    kind: validation
    enforced_at:
      - api
      - database
    must_prove: true
    provenance: test
    source: >-
      services-accounting:modules/products/tests/e2e/product-features.e2e.spec.js#refuses an assignee that is
      not a Platform user id
    origin: none
  - id: BR-CAP-ACC-PRD-013-04
    proved_by: [ATS-ACC-PRD-013-03, ATS-ACC-PRD-013-05, TST-ACC-PRD-006, TST-ACC-PRD-039]
    statement: A product stores at most twenty task instructions and replaces or clears the whole collection on save.
    kind: validation
    enforced_at:
      - api
      - service
    must_prove: true
    provenance: test
    source: >-
      services-accounting:modules/products/tests/integration/services/persistence/products.features.integration.spec.js#refuses
      more than 20 tasks to generate
    origin: 'services-accounting:docs/milestones/ACCT-M1-books-and-invoices.md#D12'
  - id: BR-CAP-ACC-PRD-013-05
    proved_by: []
    statement: >-
      Documented responsibility assigns task creation at purchase to Orders and excludes staff task
      instructions from the portal projection.
    kind: policy
    enforced_at: []
    must_prove: false
    provenance: documented
    source: 'services-accounting:docs/accounting/products.md#Features (2026-10-16)'
    origin: none
  - id: BR-CAP-ACC-PRD-013-06
    proved_by: []
    statement: The console edits task instructions in a dialog and selects assignees from a user chooser.
    kind: policy
    enforced_at:
      - console
    must_prove: false
    provenance: documented
    source: 'services-accounting:docs/milestones/ACCT-M1-books-and-invoices.md#R22'
    origin: 'services-accounting:docs/milestones/ACCT-M1-books-and-invoices.md#R22'
scenarios:
  - id: SC-CAP-ACC-PRD-013-01
    given: A certification product needs fulfillment follow-up.
    when: Staff store a certificate-mailing instruction due seven days after purchase.
    then: >-
      The product returns those instructions, while purchase-time task creation remains an Orders
      responsibility.
    provenance: observed
    source: 'services-accounting:modules/products/services/persistence/products.ts:normalizedFeatures'
edge_cases:
  - id: SC-CAP-ACC-PRD-013-02
    given: CRM deactivates a type already used by a product’s task instructions.
    when: Staff correct only the product description.
    then: 'The held type remains, while a new assignment of that inactive type fails.'
    provenance: test
    source: >-
      services-accounting:modules/products/tests/integration/services/persistence/products.features.integration.spec.js#keeps
      a task type and a queue that became inactive while the product held them
constraints: []
depends_on:
  - CAP-ACC-PRD-002
related:
  - CAP-ACC-PRD-004
journeys:
  - JNY-ACC-PRD-004
open_questions: []
evidence:
  - 'react-console:components/accounting-config/products/product-task-generation-section.tsx'
  - 'services-accounting:docs/accounting/products.md'
  - 'services-accounting:docs/milestones/ACCT-M1-books-and-invoices.md'
  - 'services-accounting:modules/products/aws/api/products.schemas.ts'
  - 'services-accounting:modules/products/db/product-task-templates.table.ts'
  - 'services-accounting:modules/products/services/persistence/products.ts'
  - 'services-accounting:modules/products/services/persistence/task-configurations.ts'
  - 'services-accounting:modules/products/services/rules/product-rules.ts'
  - 'services-accounting:modules/products/tests/e2e/product-features.e2e.spec.js'
  - >-
    services-accounting:modules/products/tests/integration/services/persistence/products.features.integration.spec.js
  - >-
    services-accounting:modules/products/tests/integration/services/persistence/task-configurations.queries.integration.spec.js
controls: [TC-IAM-001, TC-IAM-002, TC-IAM-004, TC-IAM-005, TC-IAM-006, TC-AZ-001, TC-AZ-002, TC-AZ-003, TC-AZ-004, TC-AZ-005, TC-AZ-006, TC-TEN-001, TC-TEN-002, TC-TEN-003, TC-TEN-004, TC-DAT-001, TC-LOG-001, TC-LOG-002, TC-LOG-003, TC-LOG-004, TC-LOG-005, TC-PI-001, TC-PI-002, TC-PI-003, TC-PI-005]
exercised_by: [FAS-ACC-PRD-03-01, FAS-ACC-PRD-03-02, FAS-ACC-PRD-03-03, FAS-ACC-PRD-03-04, FAS-ACC-PRD-03-05]
suites: [TST-ACC-PRD-006, TST-ACC-PRD-027, TST-ACC-PRD-039]
---

# Record the follow-up work a purchase needs

## Purpose

Staff describe the work that should follow a purchase in task instructions.

## How It Works

Staff describe the work that should follow a purchase in task instructions. Each instruction identifies a CRM task type and may select a queue or assignee. A due interval makes the intended timing explicit. The console uses a dialog and a user chooser to capture those choices. Accounting checks task types and queues against the workspace’s CRM configuration. It preserves inactive references already held by the product. Assignee existence remains unchecked beyond identity format. Saving replaces the instructions together. Actual CRM task creation belongs to Orders and is still a separate proof obligation.

## Relationships

This outcome uses create a product with a permanent identity.
