---
id: WF-PFM-ELG-014
title: Synchronise record-derived responsibilities
trigger: >-
  An application synchronizes the complete holders derived from one record
  within that record’s transaction.
product_area: platform
module: eligibility
revision: 1
status: draft
design_intent: confirmed
origin: >-
  Responsibilities and attention architecture D-13 (functions and roles are
  Platform's, conditions are the applications'), approved by Andrew 2026-10-18
  (PLAT-M15 "Decisions")
implementation_evidence: observed
inference: []
source_sha:
  services-platform: ad3f6a6582843008ed0f5a17b131878d15829af1
implements:
  - CAP-PFM-ELG-015
moves:
  - STATE-PFM-ELG-005
crosses:
  - SVC-PFM-ELG-responsibilities
idempotency: >-
  An unchanged desired set returns unchanged rows rather than inserting
  duplicates.
concurrency: An advisory transaction lock serializes updates for the same derivation key.
hops:
  - 'n': 1
    actor_or_service: Owning application
    action: >-
      Call the derived synchronization function with application, derivation key
      and complete desired holder set in the business transaction.
    anchor: >-
      services-platform:db/migrations/20261019011302_responsibilities.sql:platform.sync_derived_responsibilities
    seam: sync
    on_failure: The database raises on refusal and the application transaction rolls back.
    left_inconsistent: A refused synchronization commits no business change.
    observer: The owning application receives the error.
    provenance: observed
    source: >-
      services-platform:modules/responsibilities/services/persistence/assignments.ts:syncDerivedResponsibilities
  - 'n': 2
    actor_or_service: Synchronization function
    action: >-
      Validate actor, ownership, derivable areas, holder, scope, dates and
      unique area-scope entries, then insert new rows, refresh windows and end
      omitted rows with audit.
    anchor: >-
      services-platform:db/migrations/20261019011302_responsibilities.sql:platform.sync_derived_responsibilities
    seam: sync
    on_failure: Validation precedes mutation and failure aborts the transaction.
    left_inconsistent: >-
      No partial desired set commits; ended cover is not separately cleaned
      here.
    observer: Application output and audit show the changes.
    provenance: observed
    source: >-
      services-platform:db/migrations/20261019011302_responsibilities.sql:platform.sync_derived_responsibilities
  - 'n': 3
    actor_or_service: Nightly reconcile
    action: Rebuild the uncovered-area report through later reconciliation.
    anchor: >-
      services-platform:modules/responsibilities/services/reconcile/reconcile-tenant.ts:reconcileTenant
    seam: schedule
    on_failure: A failed reconcile waits for another scheduled opportunity.
    left_inconsistent: Derived gap reporting and its attention can lag the business change.
    observer: Gap gauges reveal unresolved coverage.
    provenance: documented
    source: 'services-platform:docs/responsibilities.md#6. The nightly reconcile'
branches:
  - >-
    Effective holder reads exclude ended derived holdings even when attached
    cover rows remain active.
waits: []
evidence:
  - >-
    services-platform at ad3f6a6:
    db/migrations/20261019011302_responsibilities.sql;
    modules/responsibilities/services/persistence/assignments.ts;
    docs/responsibilities.md §3, §6.
controls: [TC-AVL-005, TC-AZ-001, TC-AZ-002, TC-AZ-003, TC-AZ-004, TC-CHG-001, TC-CHG-002, TC-CHG-003, TC-CHG-004, TC-CHG-005, TC-CHG-006, 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-004, TC-IAM-005, TC-IAM-006, 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-005, TC-TEN-001, TC-TEN-002, TC-TEN-003, TC-VEN-001, TC-VEN-002, TC-VEN-003]
---
# Synchronise record-derived responsibilities

## What It Does

An application synchronizes the complete holders derived from one record within that record’s transaction.

## The Flow

```mermaid
flowchart TD
  H1["Owning application" ]
  H2["Synchronization function" ]
  H1 --> H2
  H3["Nightly reconcile" ]
  H2 --> H3
```

Call the derived synchronization function with application, derivation key and complete desired holder set in the business transaction. Validate actor, ownership, derivable areas, holder, scope, dates and unique area-scope entries, then insert new rows, refresh windows and end omitted rows with audit. Rebuild the uncovered-area report through later reconciliation.

## When Something Fails

The database raises on refusal and the application transaction rolls back. A refused synchronization commits no business change. Validation precedes mutation and failure aborts the transaction. No partial desired set commits; ended cover is not separately cleaned here. A failed reconcile waits for another scheduled opportunity. Derived gap reporting and its attention can lag the business change.

## Open Design Questions

Effective holder reads exclude ended derived holdings even when attached cover rows remain active.
