---
id: CAP-PFM-ELG-002
title: Locate rules and understand their dependencies
feature: FEAT-PFM-ELG-01
product_area: platform
module: eligibility
revision: 1
status: draft
product_intent: confirmed
implementation_evidence: observed
supersedes:
  - CAP-ELIG-DEF-002
  - CAP-ELIG-DEF-003
  - CAP-ELIG-DEF-012
  - CAP-ELIG-DEF-016
  - CAP-ELIG-GOV-004
  - CAP-ELIG-SEC-001
  - CAP-ELIG-SEC-002
  - CAP-ELIG-SEC-003
source_sha:
  services-platform: ad3f6a6582843008ed0f5a17b131878d15829af1
  react-console: baf6dae382d6f41dce976c7f848667ccc37e076f
intent_sources:
  - >-
    services-platform:docs/milestones/plans/PLAT-M11-plan.md#3. How it works for
    the user
  - 'services-platform:docs/milestones/PLAT-M11-eligibility-rules.md#Decisions'
purpose: >-
  Staff need to understand a rule’s reach before changing it. Discovery and
  usage views bring that reach together.
outcomes:
  - >-
    Search locates definitions by their name, lifecycle, owner or included
    condition.
  - >-
    Dependency review identifies consumers and included-rule references before a
    change.
concepts:
  - CON-PFM-ELG-001
  - CON-PFM-ELG-002
actors:
  - ACT-PFM-023
  - ACT-PFM-013
surfaces:
  - console
  - api
preconditions: []
postconditions: []
permissions:
  - key: platform.eligibility.read
    where_checked: api
    scope: tenant
rules:
  - id: BR-CAP-PFM-ELG-002-01
    proved_by: [ATS-PFM-ELG-002-01, ATS-PFM-ELG-002-12, ATS-PFM-ELG-009-08, TST-PFM-ELG-103, TST-PFM-ELG-411]
    statement: >-
      Rule, version, usage and decision reads require eligibility read
      authority, rejecting callers without it, without a role or outside the
      authorized customer.
    kind: permission
    enforced_at:
      - api
    must_prove: true
    provenance: test
    source: >-
      services-platform:modules/eligibility/tests/e2e/eligibility-definitions.e2e.spec.js#refuses
      a caller without platform.eligibility.read, 403
    origin: none
  - id: BR-CAP-PFM-ELG-002-02
    proved_by: [ATS-PFM-ELG-002-02, TST-PFM-ELG-411]
    statement: Portal callers cannot enter the rule administration routes.
    kind: permission
    enforced_at:
      - api
    must_prove: true
    provenance: test
    source: >-
      services-platform:modules/eligibility/tests/e2e/eligibility-definitions.e2e.spec.js#refuses
      a portal caller every definitions route, as a context mismatch
    origin: none
  - id: BR-CAP-PFM-ELG-002-03
    proved_by: [ATS-PFM-ELG-002-03, TST-PFM-ELG-098, TST-PFM-ELG-439]
    statement: >-
      The explorer returns only workspace rules in key order and supports
      status, ownership, reuse, subject kind, used condition and literal
      case-insensitive name or key filters.
    kind: policy
    enforced_at:
      - service
    must_prove: true
    provenance: test
    source: >-
      services-platform:modules/eligibility/tests/integration/services/model/explorer.integration.spec.js#takes
      a percent sign in the text literally rather than as a wildcard
    origin: none
  - id: BR-CAP-PFM-ELG-002-04
    proved_by: [ATS-PFM-ELG-002-04, TST-PFM-ELG-099, TST-PFM-ELG-411]
    statement: >-
      Searches exceeding 200 characters and unsupported filter choices fail with
      the offending parameter named.
    kind: validation
    enforced_at:
      - api
    must_prove: true
    provenance: test
    source: >-
      services-platform:modules/eligibility/tests/e2e/eligibility-definitions.e2e.spec.js#refuses
      an explorer filter outside the closed list, 400
    origin: none
  - id: BR-CAP-PFM-ELG-002-05
    proved_by: [ATS-PFM-ELG-002-13]
    statement: >-
      Rule pages resume after the preceding page’s last key, return 50 entries
      by default and allow no more than 200.
    kind: policy
    enforced_at:
      - api
      - service
    must_prove: true
    provenance: test
    source: >-
      services-platform:modules/eligibility/tests/integration/services/model/explorer.integration.spec.js#pages
      by the key, the cursor resuming after the last record
    origin: none
  - id: BR-CAP-PFM-ELG-002-06
    proved_by: [ATS-PFM-ELG-001-16, ATS-PFM-ELG-002-09]
    statement: >-
      A rule overview returns its latest publication, current draft and
      dependency counts.
    kind: policy
    enforced_at:
      - service
    must_prove: false
    provenance: test
    source: >-
      services-platform:modules/eligibility/tests/integration/services/model/explorer.integration.spec.js#answers
      the version it last published and its draft
    origin: none
  - id: BR-CAP-PFM-ELG-002-07
    proved_by: [ATS-PFM-ELG-002-05, ATS-PFM-ELG-002-11, ATS-PFM-ELG-007-16, TST-PFM-ELG-171, TST-PFM-ELG-436]
    statement: >-
      Usage organizes bindings by purpose, presents their consumer and version
      choices, flags outdated pins and lists live referencing rules with their
      own usage.
    kind: calculation
    enforced_at:
      - service
    must_prove: true
    provenance: test
    source: >-
      services-platform:modules/eligibility/tests/integration/services/governance/usage.integration.spec.js#groups
      the bindings by consumer kind in kind order, each labelled from the
      registry and counted
    origin: none
  - id: BR-CAP-PFM-ELG-002-08
    proved_by: [ATS-PFM-ELG-002-06, ATS-PFM-ELG-002-10, ATS-PFM-ELG-005-09, TST-PFM-ELG-439]
    statement: >-
      Reference counts include current drafts, published versions of live or
      deprecated rules and versions pinned by active uses, consistently across
      discovery, detail, usage and archive refusals.
    kind: calculation
    enforced_at:
      - service
    must_prove: true
    provenance: test
    source: >-
      services-platform:modules/eligibility/tests/integration/services/model/explorer.integration.spec.js#is
      the number the archive refusal names
    origin: none
  - id: BR-CAP-PFM-ELG-002-09
    proved_by: [ATS-PFM-ELG-002-07, ATS-PFM-ELG-002-13, TST-PFM-ELG-432, TST-PFM-ELG-436, TST-PFM-ELG-439]
    statement: A rule outside the current workspace is reported as absent.
    kind: invariant
    enforced_at:
      - service
      - database
    must_prove: true
    provenance: test
    source: >-
      services-platform:modules/eligibility/tests/integration/services/model/explorer.integration.spec.js#refuses
      a key the tenant does not have, 404
    origin: none
  - id: BR-CAP-PFM-ELG-002-10
    proved_by: [ATS-PFM-ELG-002-08, TST-PFM-ELG-124]
    statement: >-
      The console configuration list reveals archived rules through Show
      Inactive and product-specific rules through Show Private Rules,
      identifying the owning product.
    kind: policy
    enforced_at:
      - console
    must_prove: false
    provenance: observed
    source: >-
      react-console:components/configuration/resources/eligibility-rules.tsx:eligibilityRuleResources
    origin: 'services-platform:docs/milestones/plans/PLAT-M11-plan.md#D2'
  - id: BR-CAP-PFM-ELG-002-11
    proved_by: []
    statement: >-
      The product should make eligibility rules available to reporting; the
      proposed dataset is absent and the explorer currently reads the rule store
      directly.
    kind: policy
    enforced_at:
      - service
    must_prove: false
    provenance: documented
    source: 'services-platform:docs/eligibility.md#19. Open items'
    origin: none
scenarios:
  - id: SC-CAP-PFM-ELG-002-01
    given: The organization has 60 qualification definitions.
    when: A librarian traverses default and maximum pages and searches a subset.
    then: Each matching rule appears once during traversal.
    provenance: test
    source: >-
      react-console:acceptance/eligibility/playwright/journeys/definitions/ELIG-ACC-0075.spec.ts#ELIG-ACC-0075
  - id: SC-CAP-PFM-ELG-002-02
    given: >-
      A shared expression has a price use, an outdated auditor pin and two
      references.
    when: The administrator inspects dependencies before editing.
    then: >-
      Purpose groups show the uses, flag the lagging pin and include each
      referencing rule’s usage.
    provenance: test
    source: >-
      react-console:acceptance/eligibility/playwright/journeys/governance/ELIG-ACC-0139.spec.ts#ELIG-ACC-0139
edge_cases: []
constraints: []
depends_on: []
related:
  - CAP-PFM-ELG-001
  - CAP-PFM-ELG-005
  - CAP-PFM-ELG-007
journeys:
  - JNY-PFM-ELG-001
open_questions: []
evidence:
  - >-
    services-platform: docs/eligibility.md;
    docs/milestones/PLAT-M11-eligibility-rules.md and plans/PLAT-M11-plan.md;
    docs/proposals/eligibility/17-decision-register.md; aws/platform.service.ts
    (ELIGIBILITY_PERMISSIONS); modules/eligibility/aws/api/definitions.routes.ts
    (list, get, usage), eligibility-api-mapper.ts, services/model/explorer.ts,
    services/governance/usage.ts, services/persistence/dependencies.ts
    (liveReferencesOf), paging.ts, db/eligibility-dependencies.table.ts,
    db/row-level-security.ts; rule-level source and test references
  - >-
    react-console: components/configuration/resources/eligibility-rules.tsx,
    components/eligibility/list/**,
    components/eligibility/governance/usage-panel.tsx,
    lib/configuration/eligibility-rules.ts, lib/configuration/areas.ts
    (eligibility-rules);
    acceptance/eligibility/journeys/{definitions,governance,security}/*.json.
controls: [TC-AVL-004, TC-AVL-005, TC-AZ-001, TC-AZ-002, TC-AZ-003, TC-AZ-004, TC-DAT-001, TC-DAT-003, TC-DAT-004, 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]
exercised_by: [FAS-PFM-ELG-01-01, FAS-PFM-ELG-01-02, FAS-PFM-ELG-01-04]
suites: [TST-PFM-ELG-098, TST-PFM-ELG-099, TST-PFM-ELG-103, TST-PFM-ELG-124, TST-PFM-ELG-171, TST-PFM-ELG-411, TST-PFM-ELG-432, TST-PFM-ELG-436, TST-PFM-ELG-439]
---
# Locate rules and understand their dependencies

## Purpose

Staff need to understand a rule’s reach before changing it. Discovery and usage views bring that reach together.

## How It Works

A reader searches the configuration catalogue and narrows its results. Visibility controls expose inactive and private entries when needed. The reader opens a rule to inspect its draft and released expression. Usage shows the application decisions connected to it. Version choices reveal which consumers move with publication and which remain pinned. Referencing rules extend the dependency picture. Consistent counts help the reader understand an archive refusal. Permission and workspace boundaries still govern these views. The product should add reporting access to the catalogue.

## Relationships

Dependency discovery connects consumer bindings to replacement and retirement review.
