commerce: deterministic subtotal + jurisdiction-relational tax (20 tests)
Some checks failed
Test, Build, and Deploy / test-build-deploy (push) Failing after 56s
Some checks failed
Test, Build, and Deploy / test-build-deploy (push) Failing after 56s
price.sx — cart-subtotal (unit price = base + variant delta, default 0),
taxo facts indexed by (jurisdiction, product-class, customer-class) -> bps
queried both directions, apply-bps half-up integer rounding, cart-total
returning {:subtotal :discounts :tax :total} reproducible from
(context, cart). Total 54/54.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -21,7 +21,7 @@ reconciliation — all auditable via the event log.
|
||||
|
||||
## Status (rolling)
|
||||
|
||||
`bash lib/commerce/conformance.sh` → **34/34** (2 suites: catalog, cart)
|
||||
`bash lib/commerce/conformance.sh` → **54/54** (3 suites: catalog, cart, price)
|
||||
|
||||
## Ground rules
|
||||
|
||||
@@ -57,7 +57,7 @@ lib/commerce/api.sx ── (commerce/add) (commerce/total) (commerce/checkout)
|
||||
## Phase 1 — Catalog + cart + deterministic totals
|
||||
- [x] `catalog.sx` — product/variant/stock as facts
|
||||
- [x] `cart.sx` — line items, add/remove/qty
|
||||
- [ ] `price.sx` — base pricing relation, subtotal; tax
|
||||
- [x] `price.sx` — base pricing relation, subtotal; tax
|
||||
- [ ] `api.sx` + tests + scoreboard + conformance.sh
|
||||
|
||||
## Phase 2 — Promotions (relational)
|
||||
@@ -76,6 +76,13 @@ lib/commerce/api.sx ── (commerce/add) (commerce/total) (commerce/checkout)
|
||||
- [ ] tests: webhook replay, partial refund, double-charge guard
|
||||
|
||||
## Progress log
|
||||
- 2026-06-06 — `price.sx`: deterministic `cart-subtotal` (Σ unit×qty, variant
|
||||
delta defaults 0) + jurisdiction-relational tax. `taxo` facts indexed by
|
||||
(jurisdiction, product-class, customer-class)→bps, queried multidirectionally;
|
||||
`apply-bps` rounds half-up with integer arithmetic only. `cart-total` returns
|
||||
`{:subtotal :discounts :tax :total}` (discounts 0 until Phase 2), reproducible
|
||||
from (context, cart). `=` does structural dict equality (order-independent), so
|
||||
total dicts compare directly. price suite 20/20; total 54/54.
|
||||
- 2026-06-06 — `cart.sx`: cart as an ordered list of (sku variant qty) lines.
|
||||
Pure ops `cart-add` (merges same line / appends), `cart-set-qty` (0 removes),
|
||||
`cart-remove`, plus `cart-qty`/`cart-count`/`cart-skus`/`cart-empty?`.
|
||||
|
||||
Reference in New Issue
Block a user