---
id: JNY-MBR-MEM-003
title: "An approved application becomes a dues order and a membership"
feature: FEAT-MBR-MEM-04
product_area: membership
module: memberships
revision: 1
status: draft
product_intent: confirmed
implementation_evidence: partially-observed
supersedes:
  - "inventory:MBR-ACC-0341"
  - "inventory:MBR-ACC-0342"
  - "inventory:MBR-ACC-0343"
  - "inventory:MBR-ACC-0367"
source_sha:
  services-membership: 5994c270e8a37a30f848e99ba5b5ee6b87c08893
  react-console: baf6dae382d6f41dce976c7f848667ccc37e076f
actor: ACT-MBR-011
goal: "Turn the Submissions engine's approval of a join application into exactly one dues order and, once paid, a membership."
capabilities:
  - CAP-MBR-MEM-011
  - CAP-MBR-MEM-012
  - CAP-MBR-MEM-009
screens: []
steps:
  - 'n': 1
    surface: "createApplicationProcess"
    action: "An administrator records a reviewed join process for the national program offering Regular."
    capability: CAP-MBR-MEM-011
    expected: "The process reads back as recorded."
    provenance: test
    source: "services-membership:tests/acceptance/commerce/MBR-ACC-0346.acceptance.ts#MBR-ACC-0346"
  - 'n': 2
    surface: "prepare_purchase"
    action: "An applicant tries to buy Regular without an approved application."
    capability: CAP-MBR-MEM-009
    expected: "The line needs approval."
    provenance: test
    source: "services-membership:modules/applications/tests/integration/decision-handler.integration.spec.ts#answers requires_approval for the package the process reviews when no decided application is named"
  - 'n': 3
    surface: "submission.decided"
    action: "The engine delivers Nia's approval."
    capability: CAP-MBR-MEM-012
    expected: "The decision is recorded, the dues order for Regular and Atlanta is placed and recorded, and the decision is acknowledged."
    provenance: test
    source: "services-membership:modules/applications/tests/integration/decision-handler.integration.spec.ts#records an approval, places the dues order through the port (package and chapter dues), and acknowledges it"
  - 'n': 4
    surface: "fulfill"
    action: "Commerce fulfils the paid order."
    capability: CAP-MBR-MEM-009
    expected: "The pending membership is committed."
    provenance: test
    source: "services-membership:modules/applications/tests/integration/decision-handler.integration.spec.ts#leaves the approved purchase pending in Membership until Commerce fulfils it"
  - 'n': 5
    surface: "getApplication"
    action: "Staff read Nia's application."
    capability: CAP-MBR-MEM-011
    expected: "It is decided and names its order."
    provenance: documented
    source: "react-console:acceptance/membership/journeys/commerce/MBR-ACC-0342.json"
alternates:
  - from_step: 3
    condition: "The engine delivers the same approval again."
    path: "The decision is answered as recorded."
    outcome: "No second order is placed."
    provenance: test
    source: "services-membership:modules/applications/tests/integration/decision-handler.integration.spec.ts#answers a redelivered decision as recorded and calls neither port again"
  - from_step: 3
    condition: "The engine rejects the application instead."
    path: "The reserved term and its reservation are released."
    outcome: "The membership remains with no status."
    provenance: test
    source: "services-membership:modules/applications/tests/integration/decision-handler.integration.spec.ts#cancels the pending term of a rejected application whose purchase was placed"
failures:
  - from_step: 3
    condition: "The decision concerns a submission Membership holds no application for."
    path: "The decision is answered as unknown."
    outcome: "It is not acknowledged and the engine will retry."
    provenance: test
    source: "services-membership:modules/applications/tests/integration/decision-handler.integration.spec.ts#does not acknowledge a decision for a submission it holds no application of"
  - from_step: 3
    condition: "Commerce refuses the dues order."
    path: "The decision is left unacknowledged."
    outcome: "The engine redelivers it later."
    provenance: unknown
    source: "FND-MBR-MEM-044"
rules_in_play:
  - BR-CAP-MBR-MEM-011-01
  - BR-CAP-MBR-MEM-009-11
  - BR-CAP-MBR-MEM-012-03
  - BR-CAP-MBR-MEM-012-05
  - BR-CAP-MBR-MEM-012-07
  - BR-CAP-MBR-MEM-012-09
assertions:
  - id: AS-JNY-MBR-MEM-003-01
    statement: "One approval yields exactly one dues order, however often it is delivered."
    provenance: test
    source: "services-membership:modules/applications/tests/integration/decision-handler.integration.spec.ts#answers a redelivered decision as recorded and calls neither port again"
  - id: AS-JNY-MBR-MEM-003-02
    statement: "A rejected applicant holds no pending term."
    provenance: test
    source: "services-membership:modules/applications/tests/integration/decision-handler.integration.spec.ts#cancels the pending term of a rejected application whose purchase was placed"
  - id: AS-JNY-MBR-MEM-003-03
    statement: "The approved application names the order placed for it."
    provenance: documented
    source: "react-console:acceptance/membership/journeys/commerce/MBR-ACC-0342.json"
e2e_policy: none
e2e_reason: "Every step is a service exchange between the Submissions engine, Membership and Commerce; there is no Membership screen in it."
evidence:
  - "services-membership at 5994c270e8a37a30f848e99ba5b5ee6b87c08893: the cited end-to-end, integration and acceptance specs and the capabilities they exercise."
  - "react-console at baf6dae382d6f41dce976c7f848667ccc37e076f: acceptance/membership/journeys (the absorbed journeys and their recorded execution)."
---

# An approved application becomes a dues order and a membership

## Story

An association reviews join applications. An administrator records the process, so a buyer who has not been approved is told the purchase needs approval. When the Submissions engine approves Nia, Membership records the decision once, places her dues order for the package and Atlanta's dues, and tells the engine it has acted. Once Commerce has her payment, the membership becomes hers.
