Skip to content

CAP-PFM-ELG-007Connect a rule to an application decision

Markdown

CAP-PFM-ELG-007

Connect a rule to an application decision

Markdown
  • DocumentDraft
  • Product intentConfirmed
  • ImplementationObserved

KindCapabilityProduct areaPlatformModuleEligibility, Responsibilities and AttentionRevision1

Read atservices-platform ad3f6a65react-console baf6dae3

The Formal Contract

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

Outcomes
Consumer records retain their selected expression, inputs and uncertainty policy.Compatibility checks prevent creating a use that cannot evaluate.
Surfaces
consoleapi
Intent sources
services-platform:docs/milestones/plans/PLAT-M11-plan.md#1. Objectiveservices-platform:docs/milestones/plans/PLAT-M11-plan.md#D4services-platform:docs/milestones/plans/PLAT-M11-plan.md#D6services-platform:docs/milestones/plans/PLAT-M11-plan.md#D7services-platform:docs/proposals/eligibility/17-decision-register.md#D-08

Controls

23 controls apply, from the corpus control catalogue.

TC-AVL-004 TC-AZ-001 TC-AZ-002 TC-AZ-003 TC-AZ-004 TC-DAT-004 TC-LOG-001 TC-LOG-002 TC-LOG-003 TC-LOG-004 TC-LOG-005 TC-PI-001 TC-PI-002 TC-PI-003 TC-PI-004 TC-PI-005 TC-TEN-001 TC-TEN-002 TC-TEN-003 TC-TEN-004 TC-VEN-001 TC-VEN-002 TC-VEN-003

Permissions

KeyChecked atScope
platform.eligibility-bindings.manageapitenant
platform.eligibility.readapitenant

Business Rules

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

IdRuleKindEnforced atProvenance
01must prove
Confirmed
Platform’s console binding routes require binding-management authority and do not separately verify permission to edit the referenced consumer record.
permissionapiobserved
02must prove
Confirmed
A binding requires an application-owned registered purpose, compatible required subjects and facts, batch-capable conditions for populations and no provider conditions for SQL-only purposes, including referenced expressions.
validationservicetest
03must prove
Confirmed
Binding parameters must be declared, satisfy their types, collection forms, choices and bounds, and supply every required value without a default.
validationservicetest
services-platform:modules/eligibility/tests/unit/binding-fit.spec.js#refuses a value for a parameter the rule does not declare
04must prove
Confirmed
Bindings follow the published expression or pin a published or superseded version of that rule; absent, draft, foreign or newly retired pins fail, while existing retired pins remain stored.
validationservice, databasetest
05must prove
Confirmed
A binding inherits its purpose’s failure policy unless it explicitly selects closed, open with review or defer.
policyservicetest
services-platform:modules/eligibility/tests/integration/services/bindings/consumer-bindings.integration.spec.js#takes the consumer kind’s default fail policy when the request names none
06must prove
Confirmed
Each consumer can bind a rule once, and deprecated or archived rules reject new bindings.
invariantservice, databasetest
07must prove
Confirmed
Binding updates recheck compatibility and require the version read, rejecting stale updates without changing the binding.
validationservicetest
08must prove
Confirmed
Suspended bindings reject evaluation rather than returning an ineligible result, and bindings of archived rules cannot be resumed.
lifecycleservicetest
09must prove
Confirmed
Deleting a binding removes its plans while preserving recorded decisions.
lifecycleservice, databasetest
10must prove
Confirmed
Binding lists require a rule or consumer application, support consumer filtering and cursors and accept no more than 100 consumer references in one request.
validationapi, servicetest
services-platform:modules/eligibility/tests/e2e/eligibility-governance-repairs.e2e.spec.js#answers 400 naming the limit for more than 100 values, on both routes
11must prove
Confirmed
Consumer applications manage bindings through service-only dispatch under their own principal, with that service recorded as the actor.
permissionapitest
services-platform:modules/eligibility/tests/e2e/eligibility-evaluate.e2e.spec.js#registers the binding, recorded as made by the service principal
12must prove
Confirmed
Plan responses carry a version tag affected by rule versions, failure policy, portal wording and referenced expressions, with a matching tag returning not modified.
calculationapi, servicetest
services-platform:modules/eligibility/tests/e2e/eligibility-governance-repairs.e2e.spec.js#answers a new tag, 200, when the binding’s fail policy changes
13must prove
Confirmed
Console plan responses omit internal queries, provider details and explanation templates, while consumer services receive the complete plan.
permissionservicetest
services-platform:modules/eligibility/tests/e2e/eligibility-evaluate.e2e.spec.js#redacts the sql, function, cache, batch and explain internals of the plan for a console caller (DEF-ELIG-0005)
14must prove
Confirmed
The product editor’s eligibility card maintains a Platform binding to a shared or product-private rule without storing the rule on the product; private rules stay outside the shared catalogue until promoted.
policyconsoleobserved

Scenarios

IdGivenWhenThenProvenance
01A price manager has binding authority without rule-writing authority.They connect an existing expression to several supported consumer purposes.Each accepted use inherits its default policy and appears in usage.test
02An auditor pins the initial early-bird expression while a desk follows it.A second release becomes effective.The desk changes expression and the audit use remains pinned.test

Edge Cases

IdGivenWhenThenProvenance
03An expression depends on a provider.It is bound directly or by reference to a SQL-only checkout purpose.The incompatible checkout use fails; compatible price, population and page purposes can accept it.test

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.