---
id: TST-PFM-ELG-474
title: Eligibility crm explanations checks
kind: unit
product_area: platform
module: eligibility
revision: 1
status: draft
source_sha:
  services-platform: ad3f6a6582843008ed0f5a17b131878d15829af1
repository: services-platform
files:
  - modules/eligibility/tests/unit/crm-explanations.spec.js
implements: []
environment: mock
implementation_state: implemented
latest_result: not-run
conformance: not-verified
estimated_minutes: 1
isolation: One process with suite-local inputs.
evidence:
  - provenance: test
    source: 'services-platform:modules/eligibility/tests/unit/crm-explanations.spec.js'
    cases:
      - 'reads a status that is any of the required ones, met and not met'
      - 'reads a status that is none of the excluded ones, met and not met'
      - reads a negated condition as the opposite requirement
      - names the reason when the status could not be read
      - gives the portal the same sentence for the person asking
      - 'names the contact types, met and not met'
      - 'reads an empty contact type and a filled one, met and not met'
      - keeps the id of a contact type whose name could not be read
      - names the reason when the contact type could not be read
      - names the organization type and reads its status
      - reads an organization type that is empty or not
      - names the reason when the organization could not be read
      - 'says each comparison once, with the date of birth'
      - reads a negated age as must not
      - says the birth date is unknown when none is recorded
      - 'gives the portal a generic line, not the birth date'
      - names the reason when the age could not be read
      - reads the country for every operator it allows
      - 'reads the state and the postal code, including a prefix'
      - says which address was read when the rule names one
      - names the reason when the address could not be read
      - 'names the roles, met and not met'
      - reads a negated role as must not
      - keeps the id of a role whose name could not be read
      - names the reason when the roles could not be read
      - >-
        says the contact must have an affiliation in force, and must not when
        negated
      - names the affiliation types the rule asks for
      - keeps the id of an affiliation type whose name could not be read
      - names the reason when the affiliations could not be read
      - names the organization for is and the organizations for is any of
      - names another subject of the rule by its slot
      - keeps the id of an organization whose name could not be read
      - does not name the organization to the portal
      - names the reason when the organization could not be read
      - names the field by its label for every operator it allows
      - names the field by its key when its label could not be read
      - names the reason when the field could not be read
      - 'says must have for yes and must not have for no, negation flipping each'
      - names the reason when the portal user could not be read
  - provenance: documented
    source: >-
      services-platform:modules/eligibility/tests/unit/crm-explanations.spec.js:suite
      header
    note: >-
      The source header describes the verification boundary and declared
      substitutions.
proof_limit: >-
  No complete capability or feature scenario is mapped to this file; case-level
  ownership remains a coverage finding.
---

# Eligibility crm explanations checks

## Verification Boundary

This suite checks isolated decisions and validation using the imported inputs. It cannot establish a complete service or browser lifecycle.

## What This Suite Proves

The file contains executable checks, but no complete scenario mapping is established here. Its source test titles identify the remaining mapping work.

## What It Does Not Prove

Registration supplies no execution result or conformance decision. Passing isolated checks does not establish deployed dependencies or cross-application delivery.

## Real Dependencies and Test Doubles

The suite runs isolated checks; its imported fixtures and injected collaborators define the substitutions. The source imports and suite header identify the exact dependencies.

## Must Not Be Doubled

The decision or validator being asserted remains real; returning the expected answer from a substitute defeats the check.
