---
id: CAP-COM-ORD-009
title: Purchase with a deposit and scheduled payments
feature: FEAT-COM-ORD-02
product_area: commerce
module: orders
revision: 1
status: draft
product_intent: proposed
implementation_evidence: observed
supersedes:
  - CAP-COM-BIL-012
  - CAP-COM-BIL-013
  - CAP-COM-BIL-014
  - CAP-COM-BIL-015
  - CAP-COM-BIL-016
  - CAP-COM-BIL-017
  - CAP-COM-CHK-009
source_sha:
  services-commerce: c8b66a98e2490617aec38ba5c8165dd9bd0a8f9b
  react-console: baf6dae382d6f41dce976c7f848667ccc37e076f
intent_sources: []
purpose: A deposit purchase connects the up-front payment with the quoted future collection arrangement.
outcomes:
  - Payment of the required deposit accepts a plan order.
  - Cancellation reduces the remaining collection arrangement.
concepts:
  - CON-COM-ORD-001
  - CON-COM-ORD-002
actors:
  - ACT-COM-014
  - ACT-COM-017
surfaces:
  - api
preconditions: []
postconditions: []
permissions:
  - key: commerce.checkouts.update
    where_checked: api
    scope: tenant
  - key: commerce.orders.read
    where_checked: api
    scope: tenant
  - key: commerce.orders.tender
    where_checked: api
    scope: tenant
rules:
  - id: BR-CAP-COM-ORD-009-01
    proved_by: [ATS-COM-ORD-001-19, ATS-COM-ORD-001-20, ATS-COM-ORD-007-19, ATS-COM-ORD-009-01, ATS-COM-ORD-009-09, ATS-COM-ORD-014-19, TST-COM-ORD-079]
    statement: >-
      A deposit policy permits selection only from its offered installment plans, refuses plan selection under
      pay-now policies and clears the quote when the selection is cleared.
    kind: validation
    enforced_at:
      - service
    must_prove: true
    provenance: test
    source: >-
      services-commerce:modules/orders/tests/e2e/installments.e2e.spec.js#refuses a plan the order type does
      not offer, 400 installment_plan_not_offered naming what is offered
    origin: none
  - id: BR-CAP-COM-ORD-009-02
    proved_by: [ATS-COM-ORD-009-02, TST-COM-ORD-079]
    statement: 'The preview presents Accounting’s quoted deposit, installments and allocation across order lines.'
    kind: calculation
    enforced_at:
      - service
    must_prove: true
    provenance: test
    source: >-
      services-commerce:modules/orders/tests/e2e/installments.e2e.spec.js#answers the preview with the
      schedule Accounting quotes: 1550 up front of 6200, three installments of 1550, each line split
    origin: none
  - id: BR-CAP-COM-ORD-009-03
    proved_by: [ATS-COM-ORD-009-03, TST-COM-ORD-079]
    statement: >-
      A plan placement preserves its quote, invoices the lines’ deposit portions and accepts the order on
      payment of that deposit with the payment method vaulted for later installments.
    kind: lifecycle
    enforced_at:
      - service
    must_prove: true
    provenance: test
    source: >-
      services-commerce:modules/orders/tests/e2e/installments.e2e.spec.js#accepted the order on the deposit of
      1550 (what it owes now, not its total), the card sent with vault: true
    origin: none
  - id: BR-CAP-COM-ORD-009-04
    proved_by: [ATS-COM-ORD-009-04, TST-COM-ORD-079]
    statement: >-
      Schedule creation follows acceptance under the order key and updates the money summary without making
      acceptance depend on successful creation.
    kind: lifecycle
    enforced_at:
      - service
    must_prove: true
    provenance: test
    source: >-
      services-commerce:modules/orders/tests/e2e/installments.e2e.spec.js#created the schedule under the
      order’s key after the acceptance, wrote it on the order and reflected it on the mirror
    origin: none
  - id: BR-CAP-COM-ORD-009-05
    proved_by: [ATS-COM-ORD-009-05, TST-COM-ORD-079]
    statement: >-
      Installment payment requires a schedule and an invoiced unpaid installment, uses the retained payment
      method and refuses early or repeated payment.
    kind: validation
    enforced_at:
      - service
    must_prove: true
    provenance: test
    source: >-
      services-commerce:modules/orders/tests/e2e/installments.e2e.spec.js#refuses an installment before
      Accounting invoices it, 409 installment_not_due, charging nothing
    origin: none
  - id: BR-CAP-COM-ORD-009-06
    proved_by: [ATS-COM-ORD-009-06, ATS-COM-ORD-009-08, ATS-COM-ORD-014-16, TST-COM-ORD-079]
    statement: >-
      Cancelling a plan line credits its deposit portion and reduces future installments; cancellation of all
      item lines ends the schedule and returns the deposit.
    kind: calculation
    enforced_at:
      - service
    must_prove: true
    provenance: test
    source: >-
      services-commerce:modules/orders/tests/e2e/installments.e2e.spec.js#reduced the remaining installments:
      the mug’s part gone from the two scheduled ones, the paid one untouched, on the history
    origin: none
  - id: BR-CAP-COM-ORD-009-07
    proved_by: []
    statement: >-
      The product should pass installment terms to Billing, display Billing’s quote and report cancellations
      there, with Billing owning scheduling, invoicing and collection.
    kind: policy
    enforced_at:
      - service
    must_prove: true
    provenance: documented
    source: 'services-commerce:docs/milestones/plans/COMM-realignment-2026-10-22.md#5. The milestones, revised'
    origin: none
    note: >-
      The ownership change comes from a proposed realignment whose full approval remains outstanding; finding
      004 and question 001 retain the decision.
  - id: BR-CAP-COM-ORD-009-08
    proved_by: [ATS-COM-ORD-009-07]
    statement: >-
      A schedule read can retry deferred creation for an accepted order and reconcile its linked invoices and
      installment money with Accounting.
    kind: lifecycle
    enforced_at:
      - service
    must_prove: true
    provenance: observed
    source: >-
      services-commerce:modules/orders/services/installments/installment-schedule.ts:readOrderInstallmentSchedule
    origin: none
scenarios:
  - id: SC-CAP-COM-ORD-009-01
    given: A sixty-two-dollar purchase has a deposit and three later installments.
    when: The buyer pays the fifteen-dollar-fifty-cent deposit.
    then: The order is accepted and its arrangement calls for three further payments of the same amount.
    provenance: test
    source: >-
      services-commerce:modules/orders/tests/e2e/installments.e2e.spec.js#accepted the order on the deposit of
      1550 (what it owes now, not its total), the card sent with vault: true
edge_cases: []
constraints: []
depends_on:
  - CAP-COM-ORD-002
  - CAP-COM-ORD-006
  - CAP-COM-ORD-007
related:
  - CAP-COM-ORD-014
journeys: []
open_questions:
  - OQ-COM-ORD-001
evidence:
  - >-
    Examined reference: services-commerce:docs/milestones/plans/COMM-realignment-2026-10-22.md#5. The
    milestones, revised
  - >-
    Examined reference:
    services-commerce:modules/orders/services/installments/installment-schedule.ts:readOrderInstallmentSchedule
  - >-
    Examined reference: services-commerce:modules/orders/tests/e2e/installments.e2e.spec.js#accepted the order
    on the deposit of 1550 (what it owes now, not its total), the card sent with vault: true
  - >-
    Examined reference: services-commerce:modules/orders/tests/e2e/installments.e2e.spec.js#answers the
    preview with the schedule Accounting quotes: 1550 up front of 6200, three installments of 1550, each line
    split
  - >-
    Examined reference: services-commerce:modules/orders/tests/e2e/installments.e2e.spec.js#created the
    schedule under the order’s key after the acceptance, wrote it on the order and reflected it on the mirror
  - >-
    Examined reference: services-commerce:modules/orders/tests/e2e/installments.e2e.spec.js#reduced the
    remaining installments: the mug’s part gone from the two scheduled ones, the paid one untouched, on the
    history
  - >-
    Examined reference: services-commerce:modules/orders/tests/e2e/installments.e2e.spec.js#refuses a plan the
    order type does not offer, 400 installment_plan_not_offered naming what is offered
  - >-
    Examined reference: services-commerce:modules/orders/tests/e2e/installments.e2e.spec.js#refuses an
    installment before Accounting invoices it, 409 installment_not_due, charging nothing
controls: [TC-IAM-006, TC-AZ-001, TC-AZ-002, TC-AZ-003, TC-AZ-004, TC-AZ-006, TC-TEN-001, TC-TEN-002, TC-TEN-003, TC-TEN-004, TC-CRY-001, TC-DAT-001, TC-DAT-002, TC-DAT-003, TC-LOG-004, TC-LOG-005, TC-AVL-004, TC-MON-001, TC-MON-002, TC-MON-004, TC-PI-001, TC-PI-002, TC-PI-003, TC-PI-004, TC-PI-005, TC-PRV-001, TC-PRV-002]
exercised_by: [FAS-COM-ORD-02-05]
suites: [TST-COM-ORD-079]
---

# Purchase with a deposit and scheduled payments

## Purpose

A deposit purchase connects the up-front payment with the quoted future collection arrangement. Staff can trace the arrangement through the order and its cancellations.

## How It Works

A buyer selects a plan offered by the deposit policy and reviews the quoted collection arrangement. Placement preserves the quote and prepares the deposit invoice. Once the deposit requirement is satisfied, Commerce accepts the order and requests its schedule. A deferred schedule can be recovered by later reconciliation, including a schedule read. Installment payment and cancellation refer back to the arrangement already established. The product should transfer this responsibility to Billing under the proposed application boundary.

## Relationships

Policy selection permits plan choices, preview obtains the arrangement, payment meets the deposit and cancellation reduces the remaining schedule.
