Eligibility rules#

This guide is for implementers configuring eligibility rules to determine which registrants qualify for programs and benefits.

What is eligibility?#

Eligibility rules define who qualifies for a program. They translate policy decisions (e.g., "elderly citizens over 65" or "households with children under 5") into criteria that OpenSPP evaluates automatically against registry data.

        graph LR
    R[Registry] --> E[Eligibility Manager]
    E --> |Evaluate| M{Matches?}
    M --> |Yes| Q[Eligible]
    M --> |No| N[Not Eligible]
    Q --> P[Program Enrollment]
    

How eligibility works in OpenSPP#

Each program has an Eligibility Manager that controls how eligibility is determined. The manager uses CEL expressions (Common Expression Language) to define criteria.

Component

Purpose

Eligibility Manager

Container for eligibility configuration

CEL Expression

The rule that determines eligibility

Geographic Targeting

Optional area-based restrictions

Templates

Pre-built expressions for common criteria

Quick start#

To configure eligibility for a program:

  1. Go to Programs → Programs and open your program

  2. Click the Configuration tab

  3. Find the Eligibility Manager section

  4. Write a CEL expression or select a template

  5. Review the match count and save

Eligibility Manager section in program configuration

The Eligibility Manager section in the program's Configuration tab.#

What you'll find here#

Guide

Description

CEL expressions for eligibility

Write CEL expressions for eligibility criteria

Geographic targeting

Target registrants by administrative area

Expression templates

Use and create expression templates

Testing eligibility rules

Validate and test eligibility rules

Advanced eligibility configuration

Multiple managers, legacy options, performance

Common eligibility patterns#

Program type

Example expression

Senior citizens (65+)

age_years(r.birthdate) >= 65

Households with young children

members.count(m, age_years(m.birthdate) < 5) >= 1

Female-headed households

members.exists(m, head(m) and is_female(m.gender_id))

Large households

hh_size >= 4

Adult women

is_female(r.gender_id) and age_years(r.birthdate) >= 18

See CEL expressions for eligibility for the full syntax reference.

Are you stuck?#

No registrants match my criteria? Check that your expression uses the correct context (r for registrant, m for member iteration). Use the Preview Beneficiaries button to debug.

Expression shows an error? CEL uses and/or (not AND/OR). Check parentheses and field names.

Need help with complex rules? See the Expression templates page for pre-built patterns, or CEL expressions for eligibility for the full syntax reference.