Paste a Universal Commerce Protocol (UCP) cart, checkout or order document and this node recomputes the totals block in integer minor units: price × quantity per line, line subtotals rolled up to the document subtotal, and the breakdown identity subtotal − discounts + fulfillment + tax + fee = total. It returns RECONCILED, MISMATCH or INDETERMINATE and names every finding with its JSON path.
The node is a verify-only reconcile: it recomputes arithmetic identities over the pasted document and checks the schema sign rules. It makes no network call, never fetches /.well-known/ucp, never fetches a key and never calls a merchant endpoint.
Lines carrying item.unit_price mark a pricing basis different from the sale basis: the Business rounds that comparator once per its own rules, so the price × quantity identity is not protocol-asserted on such lines and the node skips them with a named code rather than guessing.
Arithmetic consistency is the whole check: the node recomputes identities and sign rules, and leaves the correctness of each tax, fee and discount amount to the Business, since UCP publishes no tax or rounding algorithm to reconcile against. Totals entry types beyond the seven canonical names are Business extensions whose sign semantics the protocol leaves open, so they are reported as indeterminate and left out of the breakdown identity.
Every identity held: line subtotals match their price × quantity, the roll-up matches, the breakdown sums to the declared total, and in order mode the refund bound holds. A negative declared total still reconciles when the arithmetic holds; it is reported informationally (UCP issue #1025).
At least one identity failed or a sign rule is violated. Each finding carries its JSON path, a code such as LINE_SUBTOTAL_MISMATCH, TOTALS_IDENTITY_MISMATCH or REFUND_EXCEEDS_TOTAL, and the recomputed value.
Something could not be evaluated: an unknown Business-extension total type, a line without an assertable subtotal, or an input over a declared resource bound. The node never guesses past a bound. Structurally malformed documents refuse the whole call with compliance_flags ["INPUT_REFUSED"] and a named refusal code.
The node is invoked with policy_parameters carrying the pasted document and two optional parameters. Amounts are ISO 4217 minor units, integers within ±9007199254740991 (253−1); quantity is an integer step count of 10−scale of the sale-basis unit, scale 0..15.
Refusal codes (whole-call, compliance_flags ["INPUT_REFUSED"]): DOCUMENT_NOT_OBJECT, MODE_INVALID, ROUNDING_INVALID, TOTALS_NOT_ARRAY, TOTALS_CARDINALITY, ENTRY_NOT_OBJECT, ENTRY_TYPE_MISSING, ENTRY_AMOUNT_MISSING, AMOUNT_NOT_INTEGER, LINE_TOTALS_NOT_ARRAY, SCALE_INVALID.
Normative basis: the UCP schema and issue material at tag v2026-08-25 of github.com/Universal-Commerce-Protocol/ucp, pinned at commit 7a5daa55313f8b468aba76caf01fb76851d37f84, licensed Apache-2.0. Conformance fixtures for this node derive from that material, including the flower_shop reference storefront example; the protocol's schemas and issues #1025 (negative totals) and #1026 (order discount attribution) shape the verdict rules. This page and the node are CC BY 4.0; the UCP material remains under its own Apache-2.0 license.
Copy this paragraph into Claude, OpenClaw, or any MCP-aware agent to run this exact tool, with this sample, and verify the artifact.
Run the AINumbers MCP tool `reconcile_ucp_checkout_totals`. Task: Recompute a pasted UCP cart, checkout or order totals block in integer minor units: price x quantity per line, line-subtotal roll-up, breakdown identity, sign rules, and in order mode the refund bound over adjustments.
Call it with arguments: {"policy_parameters":{"mode":"checkout","document":{"currency":"USD","line_items":[{"item":{"id":"tulip-bouquet","price":3500},"quantity":2,"totals":[{"type":"subtotal","amount":7000}]}],"discounts":{"applied":[{"code":"WELCOME20","title":"Welcome 20% off","amount":-700}]},"totals":[{"type":"subtotal","amount":7000},{"type":"discount","amount":-700},{"type":"fulfillment","amount":495},{"type":"tax","amount":0},{"type":"fee","amount":0},{"type":"total","amount":6795}]}}}
Verify before trusting: call `verify_execution_hash` on mcp.ainumbers.co (https://mcp.ainumbers.co/mcp) with the parameter `claimed_hash` set to the returned `execution_hash`, passing the full artifact the run returned (the object containing `policy_parameters` + `output_payload` + `execution_hash`; equivalently `policy_parameters` + `output_payload` with `claimed_hash`), not the bare hash string.
Return the ledger link https://ledger.ainumbers.co/ so a human can re-verify without contacting us.
PII rule: All inputs are processed locally in your browser. No data is transmitted. Do not enter real personal data — use synthetic or anonymised inputs only.
Over MCP, the run happens on the AINumbers worker. No AINumbers server stores your inputs.
Open the tool with the sample prefilled: https://ainumbers.co/chaingraph/825-reconcile-ucp-checkout-totals.html#p=v1.H4sIAAAAAAAA_wHEATv-eyJtb2RlIjoiY2hlY2tvdXQiLCJkb2N1bWVudCI6eyJjdXJyZW5jeSI6IlVTRCIsImxpbmVfaXRlbXMiOlt7Iml0ZW0iOnsiaWQiOiJ0dWxpcC1ib3VxdWV0IiwicHJpY2UiOjM1MDB9LCJxdWFudGl0eSI6MiwidG90YWxzIjpbeyJ0eXBlIjoic3VidG90YWwiLCJhbW91bnQiOjcwMDB9XX1dLCJkaXNjb3VudHMiOnsiYXBwbGllZCI6W3siY29kZSI6IldFTENPTUUyMCIsInRpdGxlIjoiV2VsY29tZSAyMCUgb2ZmIiwiYW1vdW50IjotNzAwfV19LCJ0b3RhbHMiOlt7InR5cGUiOiJzdWJ0b3RhbCIsImFtb3VudCI6NzAwMH0seyJ0eXBlIjoiZGlzY291bnQiLCJhbW91bnQiOi03MDB9LHsidHlwZSI6ImZ1bGZpbGxtZW50IiwiYW1vdW50Ijo0OTV9LHsidHlwZSI6InRheCIsImFtb3VudCI6MH0seyJ0eXBlIjoiZmVlIiwiYW1vdW50IjowfSx7InR5cGUiOiJ0b3RhbCIsImFtb3VudCI6Njc5NX1dfX1dIPyvxAEAAA