---
id: CAP-MBR-MEM-011
title: Define what applications are for and read the applications
feature: FEAT-MBR-MEM-04
product_area: membership
module: memberships
revision: 1
status: draft
product_intent: confirmed
implementation_evidence: partially-observed
supersedes:
  - 'inventory:CAP-MBR-COM-010'
  - 'inventory:CAP-MBR-COM-011'
  - 'inventory:CAP-MBR-CFG-010'
source_sha:
  services-membership: 5994c270e8a37a30f848e99ba5b5ee6b87c08893
  react-console: baf6dae382d6f41dce976c7f848667ccc37e076f
intent_sources:
  - 'services-membership:README.md#2026-10-18 — Final acceptance'
  - 'services-membership:docs/migrations/membership-core/README.md#Tables and migrations'
purpose: >-
  Administrators say what each application process decides (which operation, program and packages), and staff
  can read the applications Membership holds for its members.
outcomes:
  - Each reviewed path to membership is tied to the operation and packages it governs.
  - Applications are visible to the staff and officers who may see the membership they concern.
concepts:
  - CON-MBR-MEM-004
actors:
  - ACT-MBR-006
  - ACT-MBR-007
  - ACT-MBR-009
surfaces:
  - console
  - api
permissions:
  - key: membership.configuration.read
    where_checked: api
    scope: tenant
  - key: membership.configuration.manage
    where_checked: api
    scope: tenant
  - key: membership.members.read
    where_checked: api
    scope: record
rules:
  - id: BR-CAP-MBR-MEM-011-01
    statement: >-
      An application process names its kind (enrol, renew, reinstate, rejoin or change of chapter), its
      program, the packages of that program it offers, the membership outcome it drives, the Submissions
      definition it runs on, and whether its applications are reviewed, which is the default.
    kind: validation
    enforced_at:
      - api
      - service
    must_prove: true
    provenance: test
    source: 'services-membership:tests/acceptance/commerce/MBR-ACC-0346.acceptance.ts#MBR-ACC-0346'
    origin: none
  - id: BR-CAP-MBR-MEM-011-02
    statement: >-
      A process's window cannot close before it opens, and each offered package must be a package of the
      workspace and of the process's program; each refusal names its field.
    kind: validation
    enforced_at:
      - service
      - database
    must_prove: true
    provenance: test
    source: >-
      services-membership:tests/e2e/database-refusals.e2e.spec.ts#refuses a package of another program 400
      naming package_ids[0] and the program
    origin: none
  - id: BR-CAP-MBR-MEM-011-03
    statement: >-
      A process's outcome parameters hold only the outcome's effective timing and a package override, at most
      2 KB.
    kind: validation
    enforced_at:
      - service
      - database
    must_prove: true
    provenance: test
    source: 'services-membership:tests/acceptance/commerce/MBR-ACC-0347.acceptance.ts#MBR-ACC-0347'
    origin: none
  - id: BR-CAP-MBR-MEM-011-04
    statement: >-
      The list of processes answers each with its offered packages in order, exactly as reading the one
      process does.
    kind: policy
    enforced_at:
      - service
    must_prove: true
    provenance: test
    source: >-
      services-membership:tests/e2e/application-processes-api.e2e.spec.ts#answers each listed process with the
      packages it offers, in their order, as the read of the process does
    origin: none
  - id: BR-CAP-MBR-MEM-011-05
    statement: >-
      An application is Membership's record of a Submissions engine submission; Membership itself never
      creates one, so applications come from the engine's intake or from an import.
    kind: lifecycle
    enforced_at:
      - service
    must_prove: true
    provenance: unknown
    source: FND-MBR-MEM-041
    origin: none
  - id: BR-CAP-MBR-MEM-011-06
    statement: >-
      An application is read in the scope of the membership it names; one that names no membership yet is
      visible only to workspace-wide readers, and a refusal reveals nothing of the linked membership.
    kind: permission
    enforced_at:
      - api
      - service
    must_prove: true
    provenance: unknown
    source: FND-MBR-MEM-042
    origin: none
  - id: BR-CAP-MBR-MEM-011-07
    statement: >-
      The product should keep a process that has closed or not yet opened, or whose eligibility binding
      refuses the applicant, from taking an application.
    kind: policy
    enforced_at:
      - service
    must_prove: true
    provenance: unknown
    source: FND-MBR-MEM-040
    origin: none
  - id: BR-CAP-MBR-MEM-011-08
    statement: 'An application records the units its applicant chose, in order.'
    kind: policy
    enforced_at:
      - database
    must_prove: false
    provenance: documented
    source: 'services-membership:docs/migrations/membership-core/README.md#What was built'
    origin: none
scenarios:
  - id: SC-CAP-MBR-MEM-011-01
    given: An administrator records a join process for the national program offering Regular and Student.
    when: The process is listed and read.
    then: Both answers carry the two packages in order and the process is reviewed by default.
    provenance: test
    source: >-
      services-membership:tests/e2e/application-processes-api.e2e.spec.ts#answers each listed process with the
      packages it offers, in their order, as the read of the process does
edge_cases: []
constraints:
  - A process name is at most 200 characters and offers at most 50 packages.
depends_on: []
related:
  - CAP-MBR-MEM-012
  - CAP-MBR-MEM-009
  - CAP-MBR-MEM-015
journeys:
  - JNY-MBR-MEM-003
open_questions: []
evidence:
  - repository: services-membership
    source_sha: 5994c270e8a37a30f848e99ba5b5ee6b87c08893
    paths:
      - modules/applications/aws/api/applications.routes.ts
      - modules/applications/services/configuration/application-process-records.ts
      - modules/applications/services/reads/application-reads.ts
      - modules/applications/db/application-processes.table.ts
      - modules/applications/db/application-process-packages.table.ts
      - modules/applications/db/applications.table.ts
      - modules/applications/db/application-affiliations.table.ts
      - modules/applications/db/application-assigned-contacts.table.ts
      - aws/api/configuration-routes.ts
      - tests/e2e/application-processes-api.e2e.spec.ts
      - tests/e2e/database-refusals.e2e.spec.ts
      - tests/acceptance/commerce
  - repository: react-console
    source_sha: baf6dae382d6f41dce976c7f848667ccc37e076f
    paths:
      - acceptance/membership/inventory/business-rules.json
      - acceptance/membership/reports/defects/commerce.md
controls: [TC-AVL-002, TC-AVL-003, 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-CRY-001, TC-CRY-002, TC-CRY-003, TC-DAT-001, TC-DAT-002, TC-DAT-003, TC-DAT-007, TC-IAM-001, TC-IAM-002, TC-IAM-004, TC-IAM-005, TC-LOG-002, TC-LOG-003, TC-LOG-004, TC-LOG-005, TC-PI-001, TC-PI-003, TC-PRV-001, TC-PRV-002, TC-SEC-001, TC-SEC-004, TC-TEN-001, TC-TEN-002, TC-TEN-003, TC-TEN-004]
---

# Define what applications are for and read the applications

## Purpose

Some associations review people before they may join, renew or change chapters. The review itself happens in the Submissions engine. Membership must know what each application process decides, and must let staff see the applications behind their members.

## How It Works

An administrator records an application process for a program. It names the operation the process decides, the packages it offers, the membership outcome an approval drives, the engine's definition, and whether applications are reviewed. A window, an eligibility binding and outcome parameters may be stored. A version-checked process update retains omitted fields and retains offered packages when their list is omitted. Staff read applications page by page, and officers see only those whose membership is in their units. An application of a person who is not yet a member is visible only to workspace-wide staff. Membership creates no application itself: the engine's intake is not connected yet, so today applications exist only through an import. The product should make a closed process refuse applications and should apply its eligibility binding; today nothing reads either.

## Relationships

- Related to `CAP-MBR-MEM-012` because the process decides what a delivered decision does.
- Related to `CAP-MBR-MEM-009` because a reviewed process makes a purchase wait for approval.
- Depends on the Submissions engine (`MOD-SUB-SUB`) for intake, review and decisions.
