---
id: TST-MBR-MEM-031
title: 'Officer reach, delegated work and roster export'
kind: integration
product_area: membership
module: memberships
revision: 1
status: draft
source_sha:
  services-membership: 5994c270e8a37a30f848e99ba5b5ee6b87c08893
repository: services-membership
files:
  - >-
    modules/memberships/tests/integration/services/unit-scope.integration.spec.ts
implements:
  - ATS-MBR-MEM-015-02
  - ATS-MBR-MEM-015-03
  - ATS-MBR-MEM-015-04
  - ATS-MBR-MEM-015-05
  - ATS-MBR-MEM-015-06
  - ATS-MBR-MEM-016-01
  - ATS-MBR-MEM-016-03
  - ATS-MBR-MEM-016-04
  - ATS-MBR-MEM-016-05
  - ATS-MBR-MEM-016-07
  - ATS-MBR-MEM-017-01
  - ATS-MBR-MEM-017-02
  - ATS-MBR-MEM-017-03
  - ATS-MBR-MEM-017-04
environment: local
implementation_state: implemented
latest_result: not-run
latest_run_at: null
latest_run_ref: null
conformance: not-verified
estimated_minutes: 3
isolation: >-
  A suite-owned workspace and test identifiers; suites that use shared seed data
  require the source’s serial execution and cleanup policy.
verification_notes: >-
  Bindings describe the assertions reviewed at the pinned commit; the suite is
  not executed by this documentation job.
coverage_gap: null
evidence:
  - >-
    services-membership:modules/memberships/tests/integration/services/unit-scope.integration.spec.ts
assertion_anchors:
  - scenario: ATS-MBR-MEM-015-02
    source: >-
      services-membership:modules/memberships/tests/integration/services/unit-scope.integration.spec.ts#agrees
      with the in-memory rule for every membership, on three dates, with grace
      on and off
  - scenario: ATS-MBR-MEM-015-03
    source: >-
      services-membership:modules/memberships/tests/integration/services/unit-scope.integration.spec.ts#lists
      exactly the memberships IN{eastern} reaches, the same in one page and a
      page at a time
  - scenario: ATS-MBR-MEM-015-03
    source: >-
      services-membership:modules/memberships/tests/integration/services/unit-scope.integration.spec.ts#lists
      exactly the memberships IN{atl} reaches, the same in one page and a page
      at a time
  - scenario: ATS-MBR-MEM-015-03
    source: >-
      services-membership:modules/memberships/tests/integration/services/unit-scope.integration.spec.ts#fills
      every page from the memberships in scope (the predicate is in the WHERE,
      not after the LIMIT)
  - scenario: ATS-MBR-MEM-015-04
    source: >-
      services-membership:modules/memberships/tests/integration/services/unit-scope.integration.spec.ts#reads
      Jo for the Atlanta officer, the Savannah affiliation marked out of scope
  - scenario: ATS-MBR-MEM-015-04
    source: >-
      services-membership:modules/memberships/tests/integration/services/unit-scope.integration.spec.ts#marks
      both of Jo’s affiliations in scope for the Eastern officer
  - scenario: ATS-MBR-MEM-015-04
    source: >-
      services-membership:modules/memberships/tests/integration/services/unit-scope.integration.spec.ts#refuses
      the Atlanta officer Sam as not found
  - scenario: ATS-MBR-MEM-015-05
    source: >-
      services-membership:modules/memberships/tests/integration/services/unit-scope.integration.spec.ts#adds
      Gil to the Atlanta officer’s list when the roster rule includes grace
  - scenario: ATS-MBR-MEM-015-06
    source: >-
      services-membership:modules/memberships/tests/integration/services/unit-scope.integration.spec.ts#refuses
      the Atlanta officer ending Jo’s Savannah row, out_of_scope naming Savannah
  - scenario: ATS-MBR-MEM-015-06
    source: >-
      services-membership:modules/memberships/tests/integration/services/unit-scope.integration.spec.ts#refuses
      the Atlanta officer a transfer of the Atlanta row to San Francisco, naming
      San Francisco
  - scenario: ATS-MBR-MEM-015-06
    source: >-
      services-membership:modules/memberships/tests/integration/services/unit-scope.integration.spec.ts#refuses
      set_primary of the Atlanta row while the Savannah row would lose the flag
  - scenario: ATS-MBR-MEM-015-06
    source: >-
      services-membership:modules/memberships/tests/integration/services/unit-scope.integration.spec.ts#refuses
      the Atlanta officer ending the Atlanta row as not found, and leaves the
      row
  - scenario: ATS-MBR-MEM-016-01
    source: >-
      services-membership:modules/memberships/tests/integration/services/unit-scope.integration.spec.ts#refuses
      a field outside the list, field_not_allowed naming it, and sends nothing
  - scenario: ATS-MBR-MEM-016-01
    source: >-
      services-membership:modules/memberships/tests/integration/services/unit-scope.integration.spec.ts#refuses
      a member outside the officer’s units as not found
  - scenario: ATS-MBR-MEM-016-03
    source: >-
      services-membership:modules/memberships/tests/integration/services/unit-scope.integration.spec.ts#passes
      an allowed field to CRM’s contact update as the officer
  - scenario: ATS-MBR-MEM-016-04
    source: >-
      services-membership:modules/memberships/tests/integration/services/unit-scope.integration.spec.ts#places
      the Atlanta officer’s renewal of Gil, in grace, with the officer as acting
      user
  - scenario: ATS-MBR-MEM-016-04
    source: >-
      services-membership:modules/memberships/tests/integration/services/unit-scope.integration.spec.ts#refuses
      the Atlanta officer a renewal of Sam as not found
  - scenario: ATS-MBR-MEM-016-05
    source: >-
      services-membership:modules/memberships/tests/integration/services/unit-scope.integration.spec.ts#places
      an enrolment in the officer’s own chapter
  - scenario: ATS-MBR-MEM-016-05
    source: >-
      services-membership:modules/memberships/tests/integration/services/unit-scope.integration.spec.ts#refuses
      an enrolment in a unit outside the officer’s scope, out_of_scope
  - scenario: ATS-MBR-MEM-016-05
    source: >-
      services-membership:modules/memberships/tests/integration/services/unit-scope.integration.spec.ts#refuses
      an officer an enrolment of no unit (National’s), out_of_scope
  - scenario: ATS-MBR-MEM-016-07
    source: >-
      services-membership:modules/memberships/tests/integration/services/unit-scope.integration.spec.ts#shows
      the Atlanta officer only the Atlanta dues line
  - scenario: ATS-MBR-MEM-016-07
    source: >-
      services-membership:modules/memberships/tests/integration/services/unit-scope.integration.spec.ts#shows
      a National-scoped officer both dues lines and never the national package
      line
  - scenario: ATS-MBR-MEM-016-07
    source: >-
      services-membership:modules/memberships/tests/integration/services/unit-scope.integration.spec.ts#shows
      staff every line
  - scenario: ATS-MBR-MEM-016-07
    source: >-
      services-membership:modules/memberships/tests/integration/services/unit-scope.integration.spec.ts#shows
      the package line of an identity-bound membership by its identity unit
  - scenario: ATS-MBR-MEM-017-01
    source: >-
      services-membership:modules/memberships/tests/integration/services/unit-scope.integration.spec.ts#captures
      the ids the requester’s set reaches at request time
  - scenario: ATS-MBR-MEM-017-02
    source: >-
      services-membership:modules/memberships/tests/integration/services/unit-scope.integration.spec.ts#writes
      rows for the captured memberships only, with their units on the date
  - scenario: ATS-MBR-MEM-017-03
    source: >-
      services-membership:modules/memberships/tests/integration/services/unit-scope.integration.spec.ts#answers
      the export to the person who asked for it and to staff, and not to another
      officer
  - scenario: ATS-MBR-MEM-017-04
    source: >-
      services-membership:modules/memberships/tests/integration/services/unit-scope.integration.spec.ts#captures
      nothing for a caller with NONE
---

# Officer reach, delegated work and roster export

## Verification Boundary

Membership writes, dated reads, affiliations, standing and officer scope run against the prepared database.

## What This Suite Proves

The structured bindings identify the capability and feature cases whose reviewed assertions this suite executes. Source anchors preserve the evidence for each binding.

## What It Does Not Prove

A local pass does not qualify deployed scheduling, browser administration or successful production partner calls. Registration records existing code and leaves execution and conformance unverified.

## Real Dependencies and Test Doubles

The database constraints and workspace-scoped persistence exercised by this suite remain real; manual clocks, supplied callers and neighbor fixtures define the local boundary.

## Must Not Be Doubled

Keep the prepared database, workspace boundary, exercised owner constraints and the business operation under test real. A partner double cannot substitute for the Membership write this suite claims to exercise.
