---
id: ATS-PFM-ELG-019
scope: CAP-PFM-ELG-019
product_area: platform
module: eligibility
revision: 3
status: proposed
approved_by: null
approved_at: null
source_sha:
  services-platform: ad3f6a6582843008ed0f5a17b131878d15829af1
  react-console: baf6dae382d6f41dce976c7f848667ccc37e076f
scenarios:
  - id: ATS-PFM-ELG-019-01
    title: Add an escalation audience
    level: api
    proves:
      - BR-CAP-PFM-ELG-019-01
    preconditions: An occurrence is overdue beyond its role-target delay.
    steps: Run the sweep.
    expected: 'Escalation time, target audience and an attributable escalation event are recorded.'
    negative: false
    data_needs: No fixtures beyond the described setup.
    bound_to:
      - >-
        services-platform:modules/attention/tests/integration/services/sweep/sweep-tenant.integration.spec.js#escalates
        an item overdue past its escalation: stamped, and its role added as an escalation audience
      - TST-PFM-ELG-402
      - >-
        services-platform:modules/attention/tests/integration/services/sweep/sweep-tenant.integration.spec.js#records
        attention.escalated for the item, naming its target
    provenance: test
    source: >-
      services-platform:modules/attention/tests/integration/services/sweep/sweep-tenant.integration.spec.js#escalates
      an item overdue past its escalation: stamped, and its role added as an escalation audience
    category: transition
    action_evidence:
      provenance: test
      source: >-
        services-platform:modules/attention/tests/integration/services/sweep/sweep-tenant.integration.spec.js#escalates
        an item overdue past its escalation: stamped, and its role added as an escalation audience
    assertion_evidence:
      provenance: test
      source: >-
        services-platform:modules/attention/tests/integration/services/sweep/sweep-tenant.integration.spec.js#escalates
        an item overdue past its escalation: stamped, and its role added as an escalation audience
    binding_scope: >-
      The cited tests contribute their reachable assertions; the binding does not establish
      execution or every step of this scenario.
    binding_limitations:
      - FND-PFM-ELG-074
  - id: ATS-PFM-ELG-019-02
    title: Keep escalation stable
    level: api
    proves:
      - BR-CAP-PFM-ELG-019-02
      - INV-DOM-PFM-ELG-005-07
    preconditions: One item is escalated and another is not yet eligible.
    steps: Sweep and refresh the escalated provider occurrence.
    expected: 'No second escalation occurs, the target remains and the earlier item is unchanged.'
    negative: false
    data_needs: No fixtures beyond the described setup.
    bound_to:
      - >-
        services-platform:modules/attention/tests/integration/services/sweep/sweep-tenant.integration.spec.js#escalates
        an item once: a second sweep stamps, adds and records nothing
      - TST-PFM-ELG-402
      - >-
        services-platform:modules/attention/tests/integration/services/sweep/sweep-tenant.integration.spec.js#keeps
        the escalation audience when the provider publishes the condition again
      - >-
        services-platform:modules/attention/tests/integration/services/sweep/sweep-tenant.integration.spec.js#leaves
        an item not yet overdue past its escalation alone
    provenance: test
    source: >-
      services-platform:modules/attention/tests/integration/services/sweep/sweep-tenant.integration.spec.js#escalates
      an item once: a second sweep stamps, adds and records nothing
    category: invariant
    action_evidence:
      provenance: test
      source: >-
        services-platform:modules/attention/tests/integration/services/sweep/sweep-tenant.integration.spec.js#escalates
        an item once: a second sweep stamps, adds and records nothing
    assertion_evidence:
      provenance: test
      source: >-
        services-platform:modules/attention/tests/integration/services/sweep/sweep-tenant.integration.spec.js#escalates
        an item once: a second sweep stamps, adds and records nothing
    binding_scope: >-
      The cited tests contribute their reachable assertions; the binding does not establish
      execution or every step of this scenario.
    binding_limitations:
      - FND-PFM-ELG-074
  - id: ATS-PFM-ELG-019-03
    title: Combine follow-up settings
    level: unit
    proves:
      - BR-CAP-PFM-ELG-019-03
    preconditions: Declarations vary in reminder support and a workspace overrides one.
    steps: Resolve policies.
    expected: >-
      Absent support yields none, defaults fill omissions, overrides apply field by field and
      disabled policy stops reminders.
    negative: false
    data_needs: No fixtures beyond the described setup.
    bound_to:
      - >-
        services-platform:modules/attention/tests/unit/reminders.spec.js#is none when neither the
        definition nor the tenant declares one
      - TST-PFM-ELG-405
      - >-
        services-platform:modules/attention/tests/unit/reminders.spec.js#defaults a declared block
        to due soon and overdue, daily, three times, and escalated when the definition escalates
      - >-
        services-platform:modules/attention/tests/unit/reminders.spec.js#takes the tenant’s override
        part by part over the declaration
      - >-
        services-platform:modules/attention/tests/unit/reminders.spec.js#is none when the tenant
        turns it off
    provenance: test
    source: >-
      services-platform:modules/attention/tests/unit/reminders.spec.js#is none when neither the
      definition nor the tenant declares one
    category: rule
    action_evidence:
      provenance: test
      source: >-
        services-platform:modules/attention/tests/unit/reminders.spec.js#is none when neither the
        definition nor the tenant declares one
    assertion_evidence:
      provenance: test
      source: >-
        services-platform:modules/attention/tests/unit/reminders.spec.js#is none when neither the
        definition nor the tenant declares one
    binding_scope: >-
      The cited tests contribute their reachable assertions; the binding does not establish
      execution or every step of this scenario.
    binding_limitations:
      - FND-PFM-ELG-074
  - id: ATS-PFM-ELG-019-04
    title: Plan each recipient once
    level: api
    proves:
      - BR-CAP-PFM-ELG-019-04
    preconditions: 'User and holder audiences include snoozed, hidden and distant-due cases.'
    steps: Sweep twice.
    expected: Eligible recipients gain one planned reminder each; exclusions and the second pass add none.
    negative: false
    data_needs: No fixtures beyond the described setup.
    bound_to:
      - >-
        services-platform:modules/attention/tests/integration/services/reminders/reminders.integration.spec.js#plans
        one reminder per person an item reaches: a user audience, and a responsibility’s holder
      - TST-PFM-ELG-401
      - >-
        services-platform:modules/attention/tests/integration/services/reminders/reminders.integration.spec.js#plans
        nothing for a person who snoozed the item
      - >-
        services-platform:modules/attention/tests/integration/services/reminders/reminders.integration.spec.js#plans
        nothing of an advisory definition the person hid
      - >-
        services-platform:modules/attention/tests/integration/services/reminders/reminders.integration.spec.js#plans
        nothing more on a second sweep
      - >-
        services-platform:modules/attention/tests/unit/reminders.spec.js#never goes past the
        policy’s max overdue reminders
      - TST-PFM-ELG-405
    provenance: test
    source: >-
      services-platform:modules/attention/tests/integration/services/reminders/reminders.integration.spec.js#plans
      one reminder per person an item reaches: a user audience, and a responsibility’s holder
    category: interaction
    action_evidence:
      provenance: test
      source: >-
        services-platform:modules/attention/tests/integration/services/reminders/reminders.integration.spec.js#plans
        one reminder per person an item reaches: a user audience, and a responsibility’s holder
    assertion_evidence:
      provenance: test
      source: >-
        services-platform:modules/attention/tests/integration/services/reminders/reminders.integration.spec.js#plans
        one reminder per person an item reaches: a user audience, and a responsibility’s holder
    binding_scope: >-
      The cited tests contribute their reachable assertions; the binding does not establish
      execution or every step of this scenario.
    binding_limitations:
      - FND-PFM-ELG-074
  - id: ATS-PFM-ELG-019-05
    title: Recheck before delivery
    level: api
    proves:
      - BR-CAP-PFM-ELG-019-05
    preconditions: A planned occurrence resolves before sending.
    steps: Run the sender.
    expected: The reminder records a skip reason and no message is sent.
    negative: true
    data_needs: No fixtures beyond the described setup.
    bound_to:
      - >-
        services-platform:modules/attention/tests/integration/services/reminders/reminders.integration.spec.js#skips
        a due reminder whose item was resolved before it went
      - TST-PFM-ELG-401
    provenance: test
    source: >-
      services-platform:modules/attention/tests/integration/services/reminders/reminders.integration.spec.js#skips
      a due reminder whose item was resolved before it went
    category: failure
    action_evidence:
      provenance: test
      source: >-
        services-platform:modules/attention/tests/integration/services/reminders/reminders.integration.spec.js#skips
        a due reminder whose item was resolved before it went
    assertion_evidence:
      provenance: test
      source: >-
        services-platform:modules/attention/tests/integration/services/reminders/reminders.integration.spec.js#skips
        a due reminder whose item was resolved before it went
    binding_scope: >-
      The cited tests contribute their reachable assertions; the binding does not establish
      execution or every step of this scenario.
    binding_limitations:
      - FND-PFM-ELG-074
  - id: ATS-PFM-ELG-019-06
    title: Collect a recipient’s work
    level: api
    proves:
      - BR-CAP-PFM-ELG-019-06
    preconditions: An administrator has two due occurrences.
    steps: Send twice.
    expected: >-
      One addressed communications message includes both links and marks reminders sent; the retry
      adds nothing.
    negative: false
    data_needs: No fixtures beyond the described setup.
    bound_to:
      - >-
        services-platform:modules/attention/tests/integration/services/reminders/reminders.integration.spec.js#sends
        one message per person, the admin’s listing both of their items
      - TST-PFM-ELG-401
      - >-
        services-platform:modules/attention/tests/integration/services/reminders/reminders.integration.spec.js#asks
        communications for the caller-rendered reminder purpose, to the user’s address, with console
        links
      - >-
        services-platform:modules/attention/tests/integration/services/reminders/reminders.integration.spec.js#stamps
        every reminder it carried with the request that carried it
      - >-
        services-platform:modules/attention/tests/integration/services/reminders/reminders.integration.spec.js#sends
        nothing on a second run
    provenance: test
    source: >-
      services-platform:modules/attention/tests/integration/services/reminders/reminders.integration.spec.js#sends
      one message per person, the admin’s listing both of their items
    category: rule
    action_evidence:
      provenance: test
      source: >-
        services-platform:modules/attention/tests/integration/services/reminders/reminders.integration.spec.js#sends
        one message per person, the admin’s listing both of their items
    assertion_evidence:
      provenance: test
      source: >-
        services-platform:modules/attention/tests/integration/services/reminders/reminders.integration.spec.js#sends
        one message per person, the admin’s listing both of their items
    binding_scope: >-
      The cited tests contribute their reachable assertions; the binding does not establish
      execution or every step of this scenario.
    binding_limitations:
      - FND-PFM-ELG-074
  - id: ATS-PFM-ELG-019-07
    title: Keep escalation through provider refresh
    category: interaction
    level: api
    proves:
      - BR-CAP-PFM-ELG-016-05
      - BR-CAP-PFM-ELG-019-02
    exercises:
      - CAP-PFM-ELG-019
      - CAP-PFM-ELG-016
    preconditions: An overdue occurrence has a configured escalation target.
    steps: >-
      Sweep to escalate, repeat the sweep, refresh the same provider key, then inspect audiences and
      audit.
    expected: The target remains present and there is only one escalation change.
    negative: false
    data_needs: Run-owned records and a controlled clock where timing changes the result.
    bound_to:
      - >-
        services-platform:modules/attention/tests/integration/services/sweep/sweep-tenant.integration.spec.js
      - TST-PFM-ELG-402
    provenance: test
    source: >-
      services-platform:modules/attention/tests/integration/services/persistence/items.integration.spec.js#opens
      the next generation, a new item, when a resolved condition recurs;
      services-platform:modules/attention/tests/integration/services/sweep/sweep-tenant.integration.spec.js#escalates
      an item once: a second sweep stamps, adds and records nothing
    action_evidence:
      provenance: test
      source: >-
        services-platform:modules/attention/tests/integration/services/persistence/items.integration.spec.js#opens
        the next generation, a new item, when a resolved condition recurs;
        services-platform:modules/attention/tests/integration/services/sweep/sweep-tenant.integration.spec.js#escalates
        an item once: a second sweep stamps, adds and records nothing
    assertion_evidence:
      provenance: test
      source: >-
        services-platform:modules/attention/tests/integration/services/persistence/items.integration.spec.js#opens
        the next generation, a new item, when a resolved condition recurs;
        services-platform:modules/attention/tests/integration/services/sweep/sweep-tenant.integration.spec.js#escalates
        an item once: a second sweep stamps, adds and records nothing
    binding_scope: >-
      The cited tests contribute their reachable assertions; the binding does not establish
      execution or every step of this scenario.
    binding_limitations:
      - FND-PFM-ELG-074
  - id: ATS-PFM-ELG-019-08
    title: Suppress queued reminders after a response
    category: interaction
    level: api
    proves:
      - BR-CAP-PFM-ELG-018-04
      - BR-CAP-PFM-ELG-019-05
    exercises:
      - CAP-PFM-ELG-019
      - CAP-PFM-ELG-018
    preconditions: A reminder is planned for an open occurrence.
    steps: >-
      Snooze the occurrence before sending, invoke delivery, then inspect its skip record and
      outgoing requests.
    expected: The queued reminder records a snoozed skip and creates no message.
    negative: true
    data_needs: Run-owned records and a controlled clock where timing changes the result.
    bound_to: []
    provenance: proposed
    source: 'services-platform:modules/attention/services/reminders/send-reminders.ts:sendTenantReminders'
    action_evidence:
      provenance: proposed
      source: 'services-platform:modules/attention/services/reminders/send-reminders.ts:sendTenantReminders'
    assertion_evidence:
      provenance: proposed
      source: 'services-platform:modules/attention/services/reminders/send-reminders.ts:sendTenantReminders'
    binding_scope: This sequence is proposed and has no executable proof binding.
  - id: ATS-PFM-ELG-019-09
    title: Recheck settings before reminder delivery
    category: interaction
    level: api
    proves:
      - BR-CAP-PFM-ELG-019-05
      - BR-CAP-PFM-ELG-020-05
    exercises:
      - CAP-PFM-ELG-019
      - CAP-PFM-ELG-020
    preconditions: A reminder is planned under an enabled kind policy.
    steps: Disable its reminder policy at the current settings version and invoke delivery.
    expected: The sender records a disabled-policy skip and sends no message.
    negative: false
    data_needs: Run-owned records and a controlled clock where timing changes the result.
    bound_to: []
    provenance: proposed
    source: >-
      services-platform:modules/attention/tests/integration/services/reminders/reminders.integration.spec.js#skips
      a due reminder whose item was resolved before it went;
      services-platform:modules/attention/tests/integration/services/persistence/settings.integration.spec.js#refuses
      an escalation on a definition that does not let the tenant change it
    action_evidence:
      provenance: proposed
      source: >-
        services-platform:modules/attention/tests/integration/services/reminders/reminders.integration.spec.js#skips
        a due reminder whose item was resolved before it went;
        services-platform:modules/attention/tests/integration/services/persistence/settings.integration.spec.js#refuses
        an escalation on a definition that does not let the tenant change it
    assertion_evidence:
      provenance: proposed
      source: >-
        services-platform:modules/attention/tests/integration/services/reminders/reminders.integration.spec.js#skips
        a due reminder whose item was resolved before it went;
        services-platform:modules/attention/tests/integration/services/persistence/settings.integration.spec.js#refuses
        an escalation on a definition that does not let the tenant change it
    binding_scope: This sequence is proposed and has no executable proof binding.
  - title: Expose delivery retry with a changed cohort
    category: concurrency
    level: api
    proves:
      - BR-CAP-PFM-ELG-019-06
    preconditions: >-
      A person has two due reminders and communications accepts the first message before sent
      stamping fails.
    steps: 'Change the due cohort, retry delivery and compare communications keys and accepted messages.'
    expected: >-
      A changed cohort can produce a different delivery key and repeat previously accepted content,
      exposing the unresolved retry boundary.
    negative: true
    data_needs: 'Run-owned fixtures, separate caller contexts and a controlled clock where required.'
    bound_to: []
    provenance: proposed
    source: 'services-platform:modules/attention/services/reminders/send-reminders.ts'
    id: ATS-PFM-ELG-019-10
    limitations:
      - FND-PFM-ELG-046
    action_evidence:
      provenance: proposed
      source: 'services-platform:modules/attention/services/reminders/send-reminders.ts'
    assertion_evidence:
      provenance: proposed
      source: 'services-platform:modules/attention/services/reminders/send-reminders.ts'
    binding_scope: This sequence is proposed and has no executable proof binding.
evidence:
  - >-
    services-platform: docs/attention.md;
    docs/milestones/PLAT-M15-home-attention-and-responsibilities.md,
    PLAT-M16-attention-follow-up-and-tuning.md, PLAT-M17-attention-on-records-and-events.md,
    PLAT-M18-workspace-defined-attention.md, plans/PLAT-M15-plan.md, plans/PLAT-M16-plan.md;
    docs/proposals/responsibilities-and-attention/16-decisions.md; aws/platform.service.ts
    (ATTENTION_PERMISSIONS); modules/attention/services/persistence/items.ts (escalateOverdueItems),
    reminders.ts, services/reminders/** (plan-reminders.ts, run-reminders.ts, send-reminders.ts,
    reminder-message.ts, reminder-purpose.ts), services/sweep/**, aws/lambda/SWEEP.handler.ts,
    REMINDERS.handler.ts, db/attention-reminders.table.ts; rule-level source and test references
  - 'react-console: the reminder milestone has no implemented console surface'
related_coverage:
  - capability: CAP-PFM-ELG-016
    scenario: ATS-PFM-ELG-019-07
  - capability: CAP-PFM-ELG-018
    scenario: ATS-PFM-ELG-019-08
  - capability: CAP-PFM-ELG-020
    scenario: ATS-PFM-ELG-019-09
coverage:
  rule: 'gap: FND-PFM-ELG-071'
  transition: 'gap: FND-PFM-ELG-071'
  validation: 'gap: FND-PFM-ELG-071'
  permission: 'gap: FND-PFM-ELG-071'
  edge: 'gap: FND-PFM-ELG-071'
  failure: covered
  boundary: 'gap: FND-PFM-ELG-071'
  concurrency: 'gap: FND-PFM-ELG-071'
  invariant: 'gap: FND-PFM-ELG-071'
  interaction: covered
invariant_gaps:
  - invariant: INV-DOM-PFM-ELG-005-01
    finding: FND-PFM-ELG-071
    source: >-
      services-platform:modules/attention/db/attention-item-keys.table.ts;
      services-platform:modules/attention/services/persistence/items.ts:deleteOrphans
transition_coverage:
  - model: STATE-PFM-ELG-007
    from: open
    to: open
    trigger: publish_attention_item with an already-open key
    source: 'services-platform:docs/attention.md#2. The write functions'
    scenario: ATS-PFM-ELG-016-05
  - model: STATE-PFM-ELG-007
    from: open
    to: escalated
    trigger: Scheduled attention escalation phase
    source: 'services-platform:modules/attention/services/persistence/items.ts:escalateOverdueItems'
    scenario: ATS-PFM-ELG-019-01
  - model: STATE-PFM-ELG-007
    from: open
    to: resolved
    trigger: resolve_attention_item or scoped resolve_unconfirmed_attention_items
    source: 'services-platform:modules/attention/services/persistence/items.ts:resolveItem'
    scenario: ATS-PFM-ELG-016-07
  - model: STATE-PFM-ELG-007
    from: escalated
    to: resolved
    trigger: 'Provider resolution, scoped unconfirmed resolution or resolveAttentionItem'
    finding: FND-PFM-ELG-071
    source: 'services-platform:modules/attention/rules.ts:ITEM_TRANSITIONS'
  - model: STATE-PFM-ELG-007
    from: open
    to: resolved
    trigger: resolveAttentionItem
    source: 'services-platform:modules/attention/aws/api/attention.routes.ts:resolveAttentionItem'
    scenario: ATS-PFM-ELG-016-10
  - model: STATE-PFM-ELG-007
    from: open
    to: resolved
    trigger: Registration retirement and its bounded sweep repair
    source: >-
      services-platform:modules/attention/services/persistence/items.ts:resolveRetiredDefinitionItems
    scenario: ATS-PFM-ELG-016-02
  - model: STATE-PFM-ELG-007
    from: open
    to: expired
    trigger: Scheduled attention expiry phase
    source: 'services-platform:modules/attention/services/persistence/items.ts:expireItems'
    scenario: ATS-PFM-ELG-016-08
  - model: STATE-PFM-ELG-007
    from: escalated
    to: expired
    trigger: Scheduled attention expiry phase
    finding: FND-PFM-ELG-071
    source: 'services-platform:modules/attention/services/persistence/items.ts:expireItems'
  - model: STATE-PFM-ELG-007
    from: open
    to: dropped
    trigger: Scheduled monthly partition removal
    finding: FND-PFM-ELG-071
    source: 'services-platform:docs/attention.md#1. The tables'
permission_coverage:
  - key: platform.attention.use
    finding: FND-PFM-ELG-071
    reason: A capability-level authority scenario does not prove every operation protected by this key.
coverage_notes:
  meaning: >-
    Covered means a detailed scenario exists; it does not mean the scenario ran or every executable
    assertion conforms.
  gaps: >-
    Default-off intent and the Notifications handoff lack conforming executable proof. Lost audience
    membership before sending, failed sent stamping and concurrent delivery cohorts need cases.
---

# Escalate overdue attention and plan reminders: Capability Test Specification

## Coverage

The scenarios check observable outcomes against the cited contracts. The coverage map retains partial proof and unresolved design boundaries as findings.

| Required Rule | Scenarios |
|---|---|
| `BR-CAP-PFM-ELG-019-01` | `ATS-PFM-ELG-019-01` |
| `BR-CAP-PFM-ELG-019-02` | `ATS-PFM-ELG-019-02`, `ATS-PFM-ELG-019-07` |
| `BR-CAP-PFM-ELG-019-03` | `ATS-PFM-ELG-019-03` |
| `BR-CAP-PFM-ELG-019-04` | `ATS-PFM-ELG-019-04` |
| `BR-CAP-PFM-ELG-019-05` | `ATS-PFM-ELG-019-05`, `ATS-PFM-ELG-019-08`, `ATS-PFM-ELG-019-09` |
| `BR-CAP-PFM-ELG-019-06` | `ATS-PFM-ELG-019-06`, `ATS-PFM-ELG-019-10` |
| `BR-CAP-PFM-ELG-019-07` | Gap: `FND-PFM-ELG-071` |

## Interactions With Related Capabilities

Keep escalation through provider refresh. Sweep to escalate, repeat the sweep, refresh the same provider key, then inspect audiences and audit.

Suppress queued reminders after a response. Snooze the occurrence before sending, invoke delivery, then inspect its skip record and outgoing requests.

Recheck settings before reminder delivery. Disable its reminder policy at the current settings version and invoke delivery.
