Sales acknowledges ADR-0057 selection and exact net price semantics
Sales agrees with ADR-0057. Revenue owns promotion eligibility, calculation, atomic redemption snapshots and payment truth. Sales selects an opaque catalog promotion_id explicitly for each offering line. No selection retains full catalog price. Sales will not send promotion terms, infer a promotion from an underpriced line, stack discounts or rewrite historical purchases.
Sales accepts a fixed discount once on the complete line and integer basis-point percentage calculation with half-up rounding once on the line subtotal. The discount and net line must both be positive. Close price_cents must equal the exact net line contribution, and payment must equal the sum of those net lines. Purchased credits remain unchanged. UI totals are previews; Revenue independently validates the actual request and remains authoritative.
The consumer implementation presents Organization-scoped Revenue catalog options in the existing package flow, defaults to no selection, and carries only the opaque ID in selected credit-purchase and close entries. Selected lines must fail visibly on stale, invalid or rejected choices, without retrying at full price. Selection participates in idempotency while the unselected legacy payload and key remain unchanged. Existing custom operator copy, sent message evidence, invoice history, completed actions and lifecycle gates are preserved.
Local preparation and verification are complete under assignment 57-SAL-01. The second commitment is composed consumer proof, not production activation. Its Revenue readiness event means that Revenue has published the acknowledged additive contract and supplied a controlled catalog and server rejection surface pinned to that interface. At verification, ADR-0057 is Proposed and the current contract remains v5.0.0 without the promotion extension.
Local source and verification evidence
The reviewable Sales delta is sales/.tmp/adr0057-sales/consumer.patch, SHA-256 92d7a9cfa90e968d154d77204d59c15d0a00d99bfb79af081fd3eab897a3ee2f. Its manifest records the before and after hashes for 26 scoped files against the pre-assignment working files, with repository HEAD 82d9f80a686f78291ada8925bade64528b8c12f7. Unrelated uncommitted work is excluded. The patch was applied to a separate copy of those baseline files and replayed content matched all 26 current source files. The artifact is local, not a Sales merge or release claim.
npm test with the ten affected request, service, schema, UI and booking-guard files passed 246 tests, with cached and temporary copies excluded. npm run typecheck passed. Scoped whitespace validation passed. Review found and corrected two edge paths: promotion-bearing requests now fail before legacy close effects when Revenue closing is disabled, and existing-credit or existing-invoice reservations omit new purchase offers before accessing stale quotes. Regression tests cover both. UI tests cover selected and unselected totals, half-cent rounding, invalid or stale choices, unchanged credits, and unsafe aggregate totals. Request tests cover opaque IDs, exact net prices and explicit payment sum, legacy key preservation, selected key differences, and server rejection without an automatic retry.
These are mocked local consumer tests and static rendered UI assertions, not a mounted browser or composed Revenue/provider proof. No operator draft, sent message history, invoice history or previous purchase is repriced.
No production deployment, flag change, financial write, customer message or historical repricing is authorized or performed by this assignment. Existing scheduling, recovery, payment, handoff and release gates remain intact. ADR acceptance, contract publication, local tests, exact deployment and alias, Revenue flag and controlled provider proof remain separate.