---
id: SVC-PFM-ELG-attention
title: Attention Service Module
product_area: platform
module: eligibility
repository: services-platform
source_module: modules/attention
revision: 1
status: draft
design_intent: confirmed
origin: >-
  Responsibilities and attention architecture D-01 to D-13 approved by Andrew
  2026-10-18 as recommended (PLAT-M15 "Decisions"); PLAT-M15 D1 and D2; PLAT-M16
  change (reminders through Notifications) and D1 to D3, 2026-10-21. Reminder
  delivery and personal timing settings are inconsistent with the PLAT-M16
  decisions.
implementation_evidence: observed
inference: []
source_sha:
  services-platform: ad3f6a6582843008ed0f5a17b131878d15829af1
  react-console: baf6dae382d6f41dce976c7f848667ccc37e076f
owns:
  - DOM-PFM-ELG-005
does_not_own:
  - >-
    Providers define conditions, own about records and actions, and maintain
    source sweeps.
  - Security owns record and action permissions and role membership.
  - 'Responsibilities owns areas, holdings and temporary cover used by audiences.'
  - >-
    Current communications delivery and the approved Notifications target own
    sending, suppression and message history.
  - Portal attention remains held without a served member read.
operations:
  - operation_id: getAttentionHealth
    intent: Expose the deployed attention build.
    access: public
    permission: >-
      none: public health route (the operation name follows the
      get<Module>Health pattern of the shared health route)
    realises:
      - CAP-PFM-ELG-016
    published_to_submissions: 'not published: build diagnostics capture no domain request'
    provenance: documented
    source: >-
      services-platform:modules/attention/aws/api/attention.routes.ts:healthRoute
  - operation_id: getMyAttentionSummary
    intent: >-
      Group personal attention by kind with counts, urgency, up to three leading
      occurrences and an empty-state explanation.
    access: console
    permission: platform.attention.use
    realises:
      - CAP-PFM-ELG-017
    published_to_submissions: 'not published: retrieving existing information creates no domain intake'
    provenance: observed
    source: >-
      services-platform:modules/attention/aws/api/attention.routes.ts:getMyAttentionSummary
  - operation_id: listMyAttentionItems
    intent: >-
      Page personal attention with filters and rank, due or opening order,
      defaulting to twenty-five and capped at one hundred.
    access: console
    permission: platform.attention.use
    realises:
      - CAP-PFM-ELG-017
    published_to_submissions: 'not published: retrieving existing information creates no domain intake'
    provenance: observed
    source: >-
      services-platform:modules/attention/aws/api/attention.routes.ts:listMyAttentionItems
  - operation_id: getMyAttentionItem
    intent: Retrieve an addressed occurrence and its rendered explanation.
    access: console
    permission: platform.attention.use
    realises:
      - CAP-PFM-ELG-017
    published_to_submissions: 'not published: retrieving existing information creates no domain intake'
    provenance: observed
    source: >-
      services-platform:modules/attention/aws/api/attention.routes.ts:getMyAttentionItem
  - operation_id: acknowledgeMyAttentionItem
    intent: >-
      Set the personal acknowledgement timestamp without clearing other response
      facets.
    access: console
    permission: platform.attention.use
    realises:
      - CAP-PFM-ELG-018
    published_to_submissions: 'not published: personal attention state is outside domain intake'
    provenance: observed
    source: >-
      services-platform:modules/attention/aws/api/attention.routes.ts:acknowledgeMyAttentionItem
  - operation_id: snoozeMyAttentionItem
    intent: Set a future personal snooze within class and kind limits.
    access: console
    permission: platform.attention.use
    realises:
      - CAP-PFM-ELG-018
    published_to_submissions: 'not published: personal attention state is outside domain intake'
    provenance: observed
    source: >-
      services-platform:modules/attention/aws/api/attention.routes.ts:snoozeMyAttentionItem
  - operation_id: unsnoozeMyAttentionItem
    intent: Clear the snooze timestamp while retaining acknowledgement and dismissal.
    access: console
    permission: platform.attention.use
    realises:
      - CAP-PFM-ELG-018
    published_to_submissions: 'not published: personal attention state is outside domain intake'
    provenance: observed
    source: >-
      services-platform:modules/attention/aws/api/attention.routes.ts:unsnoozeMyAttentionItem
  - operation_id: dismissMyAttentionItem
    intent: >-
      Hide a nonrequired occurrence for this person without resolving its
      condition.
    access: console
    permission: platform.attention.use
    realises:
      - CAP-PFM-ELG-018
    published_to_submissions: 'not published: personal attention state is outside domain intake'
    provenance: observed
    source: >-
      services-platform:modules/attention/aws/api/attention.routes.ts:dismissMyAttentionItem
  - operation_id: getMyAttentionPreferences
    intent: Retrieve private hidden-kind and current timing settings.
    access: console
    permission: platform.attention.use
    realises:
      - CAP-PFM-ELG-020
    published_to_submissions: 'not published: retrieving existing information creates no domain intake'
    provenance: observed
    source: >-
      services-platform:modules/attention/aws/api/attention.routes.ts:getMyAttentionPreferences
  - operation_id: putMyAttentionPreferences
    intent: Update personal preferences with the version read.
    access: console
    permission: platform.attention.use
    realises:
      - CAP-PFM-ELG-020
    published_to_submissions: 'not published: personal attention state is outside domain intake'
    provenance: observed
    source: >-
      services-platform:modules/attention/aws/api/attention.routes.ts:putMyAttentionPreferences
  - operation_id: listAttentionItemsAboutRecord
    intent: >-
      Retrieve open attention for an accessible record and mark which
      occurrences address the viewer.
    access: console
    permission: platform.attention.use (evaluates the about objects' read keys)
    realises:
      - CAP-PFM-ELG-017
    published_to_submissions: 'not published: retrieving existing information creates no domain intake'
    provenance: observed
    source: >-
      services-platform:modules/attention/aws/api/attention.routes.ts:listAttentionItemsAboutRecord
  - operation_id: listUserAttentionItems
    intent: Retrieve another staff member’s attention and record the privileged read.
    access: console
    permission: platform.attention.read-others
    realises:
      - CAP-PFM-ELG-017
    published_to_submissions: 'not published: retrieving existing information creates no domain intake'
    provenance: observed
    source: >-
      services-platform:modules/attention/aws/api/attention.routes.ts:listUserAttentionItems
  - operation_id: listAttentionDefinitions
    intent: >-
      Retrieve kind declarations, effective workspace settings and sweep
      freshness.
    access: console
    permission: platform.attention.read
    realises:
      - CAP-PFM-ELG-020
    published_to_submissions: 'not published: retrieving existing information creates no domain intake'
    provenance: observed
    source: >-
      services-platform:modules/attention/aws/api/attention.routes.ts:listAttentionDefinitions
  - operation_id: getAttentionDefinitionSettings
    intent: Retrieve effective configuration for a particular attention kind.
    access: console
    permission: platform.attention.manage
    realises:
      - CAP-PFM-ELG-020
    published_to_submissions: 'not published: retrieving existing information creates no domain intake'
    provenance: observed
    source: >-
      services-platform:modules/attention/aws/api/attention.routes.ts:getAttentionDefinitionSettings
  - operation_id: putAttentionDefinitionSettings
    intent: Update kind configuration with its expected version and audit the change.
    access: console
    permission: platform.attention.manage
    realises:
      - CAP-PFM-ELG-020
      - CAP-PFM-ELG-019
    published_to_submissions: 'not published: this infrastructure operation has no domain intake contract'
    provenance: observed
    source: >-
      services-platform:modules/attention/aws/api/attention.routes.ts:putAttentionDefinitionSettings
  - operation_id: resolveAttentionItem
    intent: Close an open occurrence manually with an audited explanation.
    access: console
    permission: platform.attention.resolve-manually
    realises:
      - CAP-PFM-ELG-016
    published_to_submissions: 'not published: this infrastructure operation has no domain intake contract'
    provenance: observed
    source: >-
      services-platform:modules/attention/aws/api/attention.routes.ts:resolveAttentionItem
events:
  - name: 'Attention state audit events (acknowledged, snoozed, dismissed, escalated)'
    direction: produced
    when: Personal response changes and escalation append transactional audit.
    payload_summary: >-
      Identifies actor, kind, occurrence, class and generation with snooze or
      escalation details.
  - name: >-
      Security audit events (read others, settings changed, item resolved
      manually)
    direction: produced
    when: >-
      Privileged colleague reads, setting changes and manual resolution append
      security audit.
    payload_summary: >-
      Identifies actor and entity, with earlier and replacement configuration
      where applicable.
  - name: platform.attention.reminder communication requests
    direction: produced
    when: >-
      The sender submits one communication request for each recipient’s
      deliverable cohort.
    payload_summary: >-
      Includes recipient, count, rendered content and cohort-derived request
      key.
  - name: 'Business events for opening, resolving and escalating items'
    direction: produced
    when: >-
      Opening, resolving and escalating have no published business-event
      delivery.
    payload_summary: The reserved lifecycle names describe no emitted bus payload.
jobs:
  - >-
    Application deployment invokes platform_attention_registration; internal
    kinds can register in process.
  - platform_attention_sweep runs every fifteen minutes.
  - platform_attention_reminders runs every fifteen minutes.
  - >-
    platform_attention_evaluation_scheduler runs hourly at minute twenty and
    submits kind-slot jobs to platform-attention-evaluation.
  - >-
    Workspace lifecycle purges attention storage and the merge participant
    redirects supported references.
integrations:
  - system: Provider write functions
    direction: inbound
    contract: >-
      The writer role exposes publish_attention_item, resolve_attention_item,
      resolve_unconfirmed_attention_items and attention_sweep_completed with
      workspace, service and ownership validation inside the provider
      transaction.
  - system: Responsibilities and Security reads
    direction: outbound
    contract: >-
      Current responsibility and role holder functions resolve audience
      references during reads.
  - system: Reporting layer
    direction: outbound
    contract: >-
      Computed evaluations enumerate and project reporting datasets using the
      eligibility reader.
  - system: Communications
    direction: outbound
    contract: >-
      The current reminder path uses Communications; the approved product record
      requires Notifications instead.
consistency:
  - rule: >-
      Provider item mutations share the business transaction and a rejected item
      can abort it.
    kind: transactional
    compensation: Rollback preserves transaction atomicity.
  - rule: >-
      Current audience resolution reflects effective holding and cover changes
      on a subsequent read.
    kind: transactional
    compensation: No stored audience rewrite is needed.
  - rule: >-
      Unwritten condition endings depend on a successful provider sweep or
      computed evaluation.
    kind: eventual
    compensation: Failed and over-capacity evaluations do not clear unconfirmed items.
  - rule: >-
      Personal actions atomically audit and advance stored versions; settings
      use expected versions, but actions neither require one nor lock the
      occurrence.
    kind: transactional
    compensation: First response insertion and closure races remain implementation gaps.
  - rule: >-
      Reminder planning deduplicates its occurrence keys and unchanged
      communication cohorts deduplicate submissions.
    kind: eventual
    compensation: >-
      Accepted delivery and stamps can diverge; changed cohorts can repeat
      delivery.
evidence:
  - >-
    services-platform at ad3f6a6: modules/attention/aws/api/attention.routes.ts,
    attention.schemas.ts; aws/lambda/*; aws/logic/*; services/**; rules.ts;
    reminders.ts; db/migrations/20261019130938_attention.sql,
    20261021142357_attention_lifecycle.sql; aws/platform.service.ts (ATTENTION
    permission group); docs/attention.md.
  - >-
    react-console at baf6dae: lib/attention/; lib/api/attention.ts;
    components/attention/.
controls: [TC-AVL-001, TC-AVL-004, TC-AVL-005, TC-AZ-001, TC-AZ-002, TC-AZ-003, TC-AZ-004, TC-AZ-005, TC-AZ-006, TC-CHG-001, TC-CHG-002, TC-CHG-003, TC-CHG-004, TC-CHG-005, TC-CHG-006, TC-CHG-007, TC-CRY-001, TC-CRY-002, TC-CRY-003, TC-CRY-004, TC-DAT-001, TC-DAT-002, TC-DAT-003, TC-DAT-004, TC-IAM-001, TC-IAM-002, TC-IAM-003, TC-IAM-004, TC-IAM-005, TC-IAM-006, TC-LOG-001, TC-LOG-002, TC-LOG-003, TC-LOG-004, TC-LOG-005, TC-MON-001, TC-PI-001, TC-PI-002, TC-PI-003, TC-PI-004, TC-PI-005, TC-PRV-001, TC-PRV-002, TC-PRV-004, TC-TEN-001, TC-TEN-002, TC-TEN-003, TC-TEN-004, TC-VEN-001, TC-VEN-002, TC-VEN-003]
---
# Attention Service Module

## What This Service Is For

Attention presents stored application conditions to the people currently responsible for them and preserves personal responses separately.

## Boundary

It owns kinds, occurrences, audiences, responses, settings, preferences and follow-up records. Visibility gives no record or action access, and the portal is held.

## Operations in Words

People read summaries, pages and explanations and respond personally; administrators inspect colleagues, configure kinds or resolve conditions under distinct permissions. Build health is public.

## Events and Jobs

Audits and communication requests are implemented; lifecycle bus events are absent. Sweeps, reminder sends and computed jobs maintain stored conditions. No model inference occurs.

## Consistency Guarantees

Provider writes are transactional, but closure, personal response and delivery have distinct race and recovery limits. Current reminders disagree with the approved Notifications boundary.
