Dual-gate governance for back-office spend — spend admission (completeness, valid amount, verified vendor, expense/refund/credit limits) and disbursement authority (authorized role, segregation of duties, dual authorization, duplicate-payment detection) before money moves.
Highest priority first. The first rule whose conditions all hold decides; with none, the decision is a REVIEW.
disb-duplicate-payment · *
AUTO_REJECT → REJECT · urgent
A prior payment with the same vendor + invoice/amount fingerprint was found.
spend-required-fields · *
AUTO_REJECT → REJECT · urgent
Spend request is incomplete; required fields must be present before admission.
disb-authorized-role · *
AUTO_REJECT → REJECT · urgent
Actor role is not authorized to release a disbursement.
spend-amount-valid · *
AUTO_REJECT → REJECT · urgent
Spend amount must be a positive numeric value.
disb-segregation-of-duties · *
AUTO_REJECT → REJECT · urgent
Segregation-of-duties check failed because requester and approver match.
spend-vendor-verified · *
AUTO_REJECT → REJECT · urgent
Vendor is not verified for governed disbursement.
spend-refund-over-limit · *
ESCALATE → ESCALATE · urgent · SLA 30 min
Refund amount exceeds the configured refund approval limit.
spend-credit-over-limit · *
ESCALATE → ESCALATE · urgent · SLA 30 min
Credit amount exceeds the configured credit approval limit.
disb-dual-auth-missing · *
ESCALATE → ESCALATE · urgent · SLA 10 min
Disbursement exceeds the dual-authorization threshold and a second approver is missing.
spend-over-threshold-needs-dual-auth · *
REQUIRE_REVIEW → REVIEW · elevated · SLA 60 min
Spend exceeds the approval threshold and lacks a second authorizer.
spend-admit-default · *
AUTO_APPROVE → APPROVE
Spend request is complete, within limits, and eligible for disbursement review.
disb-authorize-default · *
AUTO_APPROVE → APPROVE
Disbursement authority is present and no duplicate was detected.
Locally, with @decionis/mcp: the payload becomes the request's context, and its action the decision type. On the hosted protocol, once the bundle is stored for your organization, name vertical_pack, policy_version and require_exact_policy_version: true.
decionis_evaluate arguments
{ "policy_pack": "ops", "payload": { "action": "<decision type>" } }In a hosted evaluate-decision request
"vertical_pack": "ops",
"policy_version": "ops-spend-v1",
"require_exact_policy_version": trueWorkflow keys that resolve to this pack: expense_approval, vendor_payment, refund_approval, ap_disbursement.
Every fact below comes from the request's context.