Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 24 additions & 0 deletions spp_studio/README.rst
Original file line number Diff line number Diff line change
Expand Up @@ -149,6 +149,30 @@ Dependencies
Changelog
=========

19.0.2.0.2
~~~~~~~~~~

- fix(data): repair the 24 shipped logic-pack filter items whose CEL
expressions referenced registrant fields or studio variables that
exist in no module, so they could never translate or evaluate (#431).
1 item is fixed properly: Institutional Residence Exclusion keeps its
expression, backed by a new ``in_institutional_care`` standard
variable over the existing ``spp_registry`` field of the same name. 4
items are rewritten to the working part of their expression (OVC Child
Age Eligibility, OVC Vulnerable Household Check, GMI Residency
Requirement, Public Works Poverty Status Check). The other 19 are
removed because no near-equivalent field or variable exists anywhere
in the platform (Disability Status Verification, OVC Orphan Status
Check, OVC School Enrollment Requirement, Social Pension No Formal
Pension Check, GMI Employment Barriers Check, Public Works Physical
Work Capability and Seasonal Availability, CCT Health Conditionality
Compliance, Geographic Limited Service Access, and 10 Exclusion
Criteria items: Government Employee, Formal Sector, Vehicle Ownership,
Business Ownership, Housing Quality, Pension Receipt, Duplicate
Program, Income Tax Payer, Bank Balance, Livestock Ownership). Pack
data is ``noupdate``, so a migration applies the same
removals/rewrites to existing databases.

19.0.2.0.1
~~~~~~~~~~

Expand Down
2 changes: 1 addition & 1 deletion spp_studio/__manifest__.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "OpenSPP Studio",
"version": "19.0.2.0.1",
"version": "19.0.2.0.2",
"category": "OpenSPP/Configuration",
"summary": "No-code customization interface for OpenSPP",
"author": "OpenSPP.org",
Expand Down
15 changes: 0 additions & 15 deletions spp_studio/data/packs/cct_program.xml
Original file line number Diff line number Diff line change
Expand Up @@ -58,21 +58,6 @@
<field name="sequence">30</field>
</record>

<!-- Eligibility: Health Conditionality -->
<record id="pack_cct_item_health_compliance" model="spp.studio.pack.item">
<field name="pack_id" ref="pack_cct_program" />
<field name="name">Health Conditionality Compliance</field>
<field name="context_type">group</field>
<field
name="description"
>Children under 5 meeting health checkup and vaccination requirements.</field>
<field name="expression_type">filter</field>
<field
name="logic_data"
>{"cel_expression": "children_0_5 == 0 || (health_checkups_completed &amp;&amp; vaccinations_current)"}</field>
<field name="sequence">40</field>
</record>

<!-- Scoring: Poverty Depth Score -->
<record id="pack_cct_item_poverty_depth" model="spp.studio.pack.item">
<field name="pack_id" ref="pack_cct_program" />
Expand Down
15 changes: 0 additions & 15 deletions spp_studio/data/packs/disability_assistance.xml
Original file line number Diff line number Diff line change
Expand Up @@ -13,21 +13,6 @@
<field name="state">available</field>
</record>

<!-- Eligibility: Disability Status -->
<record id="pack_disability_item_status_check" model="spp.studio.pack.item">
<field name="pack_id" ref="pack_disability_assistance" />
<field name="name">Disability Status Verification</field>
<field name="context_type">individual</field>
<field
name="description"
>Verifies certified disability status from medical assessment.</field>
<field name="expression_type">filter</field>
<field
name="logic_data"
>{"cel_expression": "has_disability &amp;&amp; disability_certified"}</field>
<field name="sequence">10</field>
</record>

<!-- Eligibility: Severity Threshold -->
<record id="pack_disability_item_severity" model="spp.studio.pack.item">
<field name="pack_id" ref="pack_disability_assistance" />
Expand Down
144 changes: 0 additions & 144 deletions spp_studio/data/packs/exclusion_criteria.xml
Original file line number Diff line number Diff line change
Expand Up @@ -13,49 +13,6 @@
<field name="state">available</field>
</record>

<!-- Exclusion: Government Employment -->
<record id="pack_excl_item_govt_employee" model="spp.studio.pack.item">
<field name="pack_id" ref="pack_exclusion_criteria" />
<field name="name">Government Employee Exclusion</field>
<field name="context_type">group</field>
<field
name="description"
>Exclude households with government/public sector employees.</field>
<field name="expression_type">filter</field>
<field name="logic_data">{"cel_expression": "!has_government_employee"}</field>
<field name="sequence">10</field>
</record>

<!-- Exclusion: Formal Sector Employment -->
<record id="pack_excl_item_formal_sector" model="spp.studio.pack.item">
<field name="pack_id" ref="pack_exclusion_criteria" />
<field name="name">Formal Sector Exclusion</field>
<field name="context_type">group</field>
<field
name="description"
>Exclude households with formal sector employment (for informal sector targeting).</field>
<field name="expression_type">filter</field>
<field
name="logic_data"
>{"cel_expression": "!has_formal_employment || formal_income &lt; 5000"}</field>
<field name="sequence">20</field>
</record>

<!-- Exclusion: Vehicle Ownership -->
<record id="pack_excl_item_vehicle" model="spp.studio.pack.item">
<field name="pack_id" ref="pack_exclusion_criteria" />
<field name="name">Vehicle Ownership Exclusion</field>
<field name="context_type">group</field>
<field
name="description"
>Exclude households owning motorized vehicles (cars, motorcycles above threshold).</field>
<field name="expression_type">filter</field>
<field
name="logic_data"
>{"cel_expression": "!owns_car &amp;&amp; motorcycle_count &lt;= 1"}</field>
<field name="sequence">30</field>
</record>

<!-- Exclusion: Land Ownership -->
<record id="pack_excl_item_land" model="spp.studio.pack.item">
<field name="pack_id" ref="pack_exclusion_criteria" />
Expand All @@ -69,107 +26,6 @@
<field name="sequence">40</field>
</record>

<!-- Exclusion: Business Ownership -->
<record id="pack_excl_item_business" model="spp.studio.pack.item">
<field name="pack_id" ref="pack_exclusion_criteria" />
<field name="name">Business Ownership Exclusion</field>
<field name="context_type">both</field>
<field
name="description"
>Exclude households owning registered businesses above threshold.</field>
<field name="expression_type">filter</field>
<field
name="logic_data"
>{"cel_expression": "!owns_registered_business || business_revenue &lt; 50000"}</field>
<field name="sequence">50</field>
</record>

<!-- Exclusion: Housing Quality -->
<record id="pack_excl_item_housing" model="spp.studio.pack.item">
<field name="pack_id" ref="pack_exclusion_criteria" />
<field name="name">Housing Quality Exclusion</field>
<field name="context_type">both</field>
<field
name="description"
>Exclude households with high-quality/permanent housing (proxy for wealth).</field>
<field name="expression_type">filter</field>
<field
name="logic_data"
>{"cel_expression": "housing_quality_score &lt;= 3 || !has_permanent_structure"}</field>
<field name="sequence">60</field>
</record>

<!-- Exclusion: Pension Receipt -->
<record id="pack_excl_item_pension" model="spp.studio.pack.item">
<field name="pack_id" ref="pack_exclusion_criteria" />
<field name="name">Pension Receipt Exclusion</field>
<field name="context_type">both</field>
<field
name="description"
>Exclude individuals already receiving contributory pension.</field>
<field name="expression_type">filter</field>
<field
name="logic_data"
>{"cel_expression": "!receives_contributory_pension || pension_amount &lt; 1000"}</field>
<field name="sequence">70</field>
</record>

<!-- Exclusion: Other Program Participation -->
<record id="pack_excl_item_other_programs" model="spp.studio.pack.item">
<field name="pack_id" ref="pack_exclusion_criteria" />
<field name="name">Duplicate Program Exclusion</field>
<field name="context_type">both</field>
<field
name="description"
>Exclude beneficiaries already enrolled in similar programs.</field>
<field name="expression_type">filter</field>
<field
name="logic_data"
>{"cel_expression": "!enrolled_in_similar_program"}</field>
<field name="sequence">80</field>
</record>

<!-- Exclusion: Tax Payment -->
<record id="pack_excl_item_tax" model="spp.studio.pack.item">
<field name="pack_id" ref="pack_exclusion_criteria" />
<field name="name">Income Tax Payer Exclusion</field>
<field name="context_type">both</field>
<field
name="description"
>Exclude households paying income tax (above tax threshold).</field>
<field name="expression_type">filter</field>
<field name="logic_data">{"cel_expression": "!pays_income_tax"}</field>
<field name="sequence">90</field>
</record>

<!-- Exclusion: Bank Account Balance -->
<record id="pack_excl_item_bank_balance" model="spp.studio.pack.item">
<field name="pack_id" ref="pack_exclusion_criteria" />
<field name="name">Bank Balance Exclusion</field>
<field name="context_type">both</field>
<field
name="description"
>Exclude households with bank balances above threshold.</field>
<field name="expression_type">filter</field>
<field
name="logic_data"
>{"cel_expression": "total_bank_balance &lt;= 50000"}</field>
<field name="sequence">100</field>
</record>

<!-- Exclusion: Livestock Ownership -->
<record id="pack_excl_item_livestock" model="spp.studio.pack.item">
<field name="pack_id" ref="pack_exclusion_criteria" />
<field name="name">Livestock Ownership Exclusion</field>
<field name="context_type">both</field>
<field
name="description"
>Exclude households with livestock above threshold (in Tropical Livestock Units).</field>
<field name="expression_type">filter</field>
<field name="logic_data">{"cel_expression": "livestock_tlu &lt;= 5"}</field>
<field name="sequence">110</field>
</record>

<!-- Exclusion: Institutional Residence -->
<record id="pack_excl_item_institutional" model="spp.studio.pack.item">
<field name="pack_id" ref="pack_exclusion_criteria" />
Expand Down
15 changes: 0 additions & 15 deletions spp_studio/data/packs/geographic_targeting.xml
Original file line number Diff line number Diff line change
Expand Up @@ -79,21 +79,6 @@
<field name="sequence">40</field>
</record>

<!-- Eligibility: Service Access Constraint -->
<record id="pack_geo_item_service_access" model="spp.studio.pack.item">
<field name="pack_id" ref="pack_geographic_targeting" />
<field name="name">Limited Service Access</field>
<field name="context_type">both</field>
<field
name="description"
>Location has limited access to basic services (health, education, markets).</field>
<field name="expression_type">filter</field>
<field
name="logic_data"
>{"cel_expression": "distance_to_health_facility > 10 || distance_to_school > 5"}</field>
<field name="sequence">50</field>
</record>

<!-- Scoring: Area Poverty Score -->
<record id="pack_geo_item_area_poverty_score" model="spp.studio.pack.item">
<field name="pack_id" ref="pack_geographic_targeting" />
Expand Down
21 changes: 2 additions & 19 deletions spp_studio/data/packs/guaranteed_minimum_income.xml
Original file line number Diff line number Diff line change
Expand Up @@ -28,21 +28,6 @@
<field name="sequence">10</field>
</record>

<!-- Eligibility: Working Age with Barriers -->
<record id="pack_gmi_item_work_barriers" model="spp.studio.pack.item">
<field name="pack_id" ref="pack_guaranteed_minimum" />
<field name="name">Employment Barriers Check</field>
<field name="context_type">group</field>
<field
name="description"
>Working-age members have legitimate barriers to employment.</field>
<field name="expression_type">filter</field>
<field
name="logic_data"
>{"cel_expression": "has_disabled_member || has_caregiver_responsibilities || is_single_parent || no_working_age_members"}</field>
<field name="sequence">20</field>
</record>

<!-- Eligibility: Asset Test -->
<record id="pack_gmi_item_asset_test" model="spp.studio.pack.item">
<field name="pack_id" ref="pack_guaranteed_minimum" />
Expand All @@ -65,11 +50,9 @@
<field name="context_type">individual</field>
<field
name="description"
>Legal residency and minimum duration requirement.</field>
>Minimum residency duration requirement (12 months).</field>
<field name="expression_type">filter</field>
<field
name="logic_data"
>{"cel_expression": "is_legal_resident &amp;&amp; residency_months >= 12"}</field>
<field name="logic_data">{"cel_expression": "residency_months >= 12"}</field>
<field name="sequence">40</field>
</record>

Expand Down
42 changes: 4 additions & 38 deletions spp_studio/data/packs/ovc_support.xml
Original file line number Diff line number Diff line change
Expand Up @@ -13,33 +13,14 @@
<field name="state">available</field>
</record>

<!-- Eligibility: Orphan Status -->
<record id="pack_ovc_item_orphan_status" model="spp.studio.pack.item">
<field name="pack_id" ref="pack_ovc_support" />
<field name="name">Orphan Status Check</field>
<field name="context_type">individual</field>
<field
name="description"
>Child has lost one or both parents (single or double orphan).</field>
<field name="expression_type">filter</field>
<field
name="logic_data"
>{"cel_expression": "is_orphan || (!has_mother &amp;&amp; !has_father)"}</field>
<field name="sequence">10</field>
</record>

<!-- Eligibility: Child Age Range -->
<record id="pack_ovc_item_child_age" model="spp.studio.pack.item">
<field name="pack_id" ref="pack_ovc_support" />
<field name="name">Child Age Eligibility</field>
<field name="context_type">individual</field>
<field
name="description"
>Child must be under child_age_limit, or under 25 if in full-time education.</field>
<field name="description">Child must be under child_age_limit.</field>
<field name="expression_type">filter</field>
<field
name="logic_data"
>{"cel_expression": "age &lt; child_age_limit || (age &lt; 25 &amp;&amp; is_in_education)"}</field>
<field name="logic_data">{"cel_expression": "age &lt; child_age_limit"}</field>
<field name="sequence">20</field>
</record>

Expand All @@ -50,29 +31,14 @@
<field name="context_type">group</field>
<field
name="description"
>Household meets vulnerability criteria (elderly-headed, child-headed, or skipped-generation).</field>
>Household meets vulnerability criteria (elderly-headed or child-headed).</field>
<field name="expression_type">filter</field>
<field
name="logic_data"
>{"cel_expression": "is_elderly_headed || is_child_headed || is_skipped_generation || has_chronically_ill_head"}</field>
>{"cel_expression": "is_elderly_headed || is_child_headed"}</field>
<field name="sequence">30</field>
</record>

<!-- Eligibility: School Enrollment -->
<record id="pack_ovc_item_school_enrollment" model="spp.studio.pack.item">
<field name="pack_id" ref="pack_ovc_support" />
<field name="name">School Enrollment Requirement</field>
<field name="context_type">individual</field>
<field
name="description"
>School-age children must be enrolled in education (soft conditionality).</field>
<field name="expression_type">filter</field>
<field
name="logic_data"
>{"cel_expression": "age &lt; 6 || is_enrolled_in_school || has_enrollment_exemption"}</field>
<field name="sequence">40</field>
</record>

<!-- Scoring: OVC Vulnerability Score -->
<record id="pack_ovc_item_vulnerability_score" model="spp.studio.pack.item">
<field name="pack_id" ref="pack_ovc_support" />
Expand Down
Loading
Loading