Skip to content

CAP-COM-ORD-005Create one order at the reviewed price

Markdown

CAP-COM-ORD-005

Create one order at the reviewed price

Markdown
  • DocumentDraft
  • Product intentConfirmed
  • ImplementationObserved

KindCapabilityProduct areaCommerceModuleCustomer purchases, purchased benefits and vendor stockRevision1

Read atservices-commerce c8b66a98react-console baf6dae3

The Formal Contract

The narrative above explains; the sections below are authoritative — the rules, scenarios and tests this document binds.

Outcomes
Repeated placement requests create a single order.A changed reviewed price requires renewed confirmation before placement.
Surfaces
consoleapi
Intent sources
services-commerce:docs/milestones/plans/COMM-M2-plan.md#A4services-commerce:docs/milestones/plans/COMM-M2-plan.md#A17services-commerce:docs/milestones/plans/COMM-M2-plan.md#9. Acceptance scenariosservices-commerce:docs/milestones/plans/COMM-M1-plan.md#A3services-commerce:docs/milestones/COMM-M2-take-a-staff-order.md#Product purchase eligibility enforced (Platform PLAT-M11 D6; Andrew approved 2026-10-21)

Controls

27 controls apply, from the corpus control catalogue.

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

Permissions

KeyChecked atScope
commerce.orders.createapitenant

Business Rules

13 rules, 13 to be proved before approval. A rule's product intent is derived from its origin: 13 confirmed by a product decision, the rest inheriting this capability's confirmed.

IdRuleKindEnforced atProvenance
01must prove
Confirmed
A placement needs a request key, returns the existing order on a same-key retry and refuses a different key for an already placed cart.
no proof recorded yet
invariantapi, servicetest
services-commerce:modules/checkout/tests/e2e/placement.e2e.spec.js#answers the same order to a retry under the same key, replayed from the idempotency ledger, writing nothing (08 row 9; D11)
02must prove
Confirmed
Concurrent placement requests for one cart create one order, with competing calls receiving that order or an in-progress response.
no proof recorded yet
invariantservice, databasetest
services-commerce:modules/checkout/tests/e2e/placement.e2e.spec.js#one places the order; the other is told the request is in progress (409) or answered the one order; exactly one order row exists
03must prove
Confirmed
Placement recalculates the price and refuses differences from the saved preview in item price, quantity, total or audiences and order discount or fee; an unpreviewed cart uses the current price.
✓ A price change from twenty-five to twenty-seven dollars requires a new preview before placement.✗ An unchanged reviewed price proceeds without another confirmation.
no proof recorded yet
calculationservicetest
services-commerce:modules/checkout/tests/e2e/placement.e2e.spec.js#refuses PRICE_CHANGED with both prices when the price rose since a preview of a moment ago, the checkout left open
04must prove
Confirmed
Losing membership qualification after preview prevents silent placement at a changed audience price and leaves previously placed orders intact.
no proof recorded yet
policyservicetest
services-commerce:modules/checkout/tests/e2e/member-pricing-placement.e2e.spec.js#refuses the placement 409 placement_refused with audience_lapsed and the decision’s sentence, never repricing silently
05must prove
Confirmed
An application preparation refusal or unavailable item stops placement before any order is created, preserving an open cart with unfrozen items and a recorded explanation.
no proof recorded yet
policyservicetest
services-commerce:modules/checkout/tests/e2e/placement.e2e.spec.js#answers 409 placement_refused with the participant’s problem naming the item
06must prove
Confirmed
Placement commits resource claims together, converts holds and rolls back competing claims on conflict, so only one buyer obtains the final available unit.
no proof recorded yet
invariantservice, databasetest
services-commerce:modules/checkout/tests/e2e/holds-and-claims.e2e.spec.js#lets exactly one placement win and refuses the other 409 claim_conflict naming the item and the resource
07must prove
Confirmed
Within placement, products with purchasing rules are evaluated again and any result other than eligible prevents the order, identifying the products and reasons.
origin: services-commerce:docs/milestones/COMM-M2-take-a-staff-order.md#Product purchase eligibility enforced (Platform PLAT-M11 D6; Andrew approved 2026-10-21)
no proof recorded yet
policyservicetest
services-commerce:modules/checkout/tests/e2e/product-purchase-eligibility.e2e.spec.js#refuses the placement 409 product_not_eligible naming the product (id and name) and the reason
08must prove
Confirmed
Placement rechecks applied promotions before redemption and rolls back the sale on refusal, returning the recalculated figures without the refused promotion.
no proof recorded yet
policyservicetest
services-commerce:modules/checkout/tests/e2e/promotion-eligibility.e2e.spec.js#refuses the placement 409 promotion_refused, purchaser_not_eligible
09must prove
Confirmed
The new order receives a workspace number, starts placed with billing pending and a default thirty-minute pay-now window, uses one pricing instant and preserves the bill-to address available at sale.
no proof recorded yet
lifecycleservice, databasetest
services-commerce:modules/checkout/tests/e2e/placement.e2e.spec.js#answers 200 with the order: numbered 10000, placed, pending billing, pay now with a thirty-minute tender window, created
10must prove
Confirmed
Cart items become order lines with attested purchase details, plans and claims; bundle relationships carry across and delivery units receive pending obligations with frozen conditions.
no proof recorded yet
invariantservice, databasetest
services-commerce:modules/checkout/tests/e2e/placement.e2e.spec.js#writes one line per item with its frozen purchase: the canonical payload, the stub’s attestation, the plan, no claim
11must prove
Confirmed
A shipping charge without a configured shipping product prevents placement, although the preview currently omits that configuration problem.
no proof recorded yet
validationservicetest
services-commerce:modules/shipping/tests/e2e/shipping.e2e.spec.js#refuses the placement 409 placement_refused with the problem shipping_product_required, naming the profile
12must prove
Confirmed
Authority to edit a cart does not grant authority to place it; placement separately requires the order-placing permission.
no proof recorded yet
permissionapitest
services-commerce:modules/checkout/tests/e2e/checkout-security.e2e.spec.js#a clerk without commerce.orders.create changes a checkout but is refused the placement
13must prove
Confirmed
The minute sweep retries a lease confirmation left unfinished at placement and records the completed confirmation on the order.
no proof recorded yet
lifecycleservicetest
services-commerce:modules/checkout/tests/e2e/holds-and-claims.e2e.spec.js#confirms it on the sweep: the ledger committed, the participant’s claim committed, claim_confirmed on the order

Scenarios

IdGivenWhenThenProvenance
01The shirt price increases after the clerk reads a preview.The clerk attempts placement and reviews the replacement summary.Placement first requests confirmation of the changed price, then succeeds after review.unknown

Edge Cases

IdGivenWhenThenProvenance
02The placement tax quote is refused by Accounting.Submit the cart for placement.No order is created and the response uses a 400 placement refusal, unlike the other 409 placement cases.test
services-commerce:modules/checkout/tests/e2e/accounting-tax.e2e.spec.js#is a tax_quote_refused problem on the preview and refuses the placement, placing nothing

The Markdown files under specs/ in rhythmsoftware/rhythm-v2-docs are the canonical source of truth. This reader is a generated, read-only projection of them.