v2.0

GoRules Version 2 is here - redesigned, now with managed cloud.GoRules Version 2 is here!

Watch the launch videoWatch

Disaster Relief Fund Allocation

Automated system that calculates disaster relief payments based on damage severity, household factors, income level, and insurance coverage status.

Solution

This disaster relief system determines appropriate financial assistance for affected individuals following natural disasters or emergencies. It starts with a damage assessment that categorizes property damage from minor to severe, establishing a baseline payment amount. The system then adjusts this base amount according to household characteristics, including family size and number of dependents.

Income level modifiers ensure fair distribution of resources, providing greater support to low-income households while appropriately scaling assistance for those with more financial resources. The final payment calculation applies insurance status adjustments, recognizing that those with partial or full coverage require different levels of government assistance. Each determination includes clear reasoning for the payment amount, enabling transparent communication with recipients and ensuring equitable distribution of relief funds.

How it works

The decision graph processes applications through four sequential evaluation stages:

  1. Base Fund Allocation: Assigns initial payment amounts (ranging from $1,000 to $10,000) based on damage severity levels (minor, moderate, major, or severe).
  2. Income Adjustment: Modifies the base amount according to household income level, increasing payments for low-income families by 20% and reducing them by 20% for high-income households.
  3. Household Size Calculation: Applies a multiplier based on family size, increasing support proportionally for larger households up to a maximum of 75% additional funding.
  4. Insurance Status Evaluation: Makes final adjustments based on insurance coverage, providing full calculated amounts to uninsured applicants, 70% to partially insured individuals, and 30% to fully insured households.

Where teams use it

  • Federal emergency management agencies
  • State disaster response programs
  • Local government relief operations
  • Humanitarian aid organizations
  • Disaster recovery centers
  • Flood and hurricane relief programs

Inside the decision model

Disaster Relief Fund Allocation ships as a JDM decision graph with 5 nodes, 3 decision tables and 13 rules. Download it, load it into GoRules, and run it as-is on Zen Engine.

Decision graph5 nodes · read-only
input requesttable baseFundAllocationtable incomeAdjustmentexpression householdSizeAdjustmenttable insuranceAdjustment
01

Request

input

Four request objects mirror the stages of the graph: assessment supplies the damageLevel that sets the base amount, income and household drive the two adjustment steps, and insurance determines the final reduction. Descriptive fields like damageDescription and provider are context only.

Sample requestJSON
{
  "assessment": {
    "damageLevel": "major",
    "propertyType": "residential",
    "damageDescription": "Roof collapsed in multiple areas, extensive water damage"
  },
  "household": {
    "size": 4,
    "dependents": 2,
    "specialNeeds": false
  },
  "income": {
    "level": "low",
    "annualAmount": 32000,
    "primarySource": "employment"
  },
  "insurance": {
    "status": "partial",
    "deductible": 5000,
    "provider": "StateInsurance"
  }
}
02

Base Fund Allocation

table

Payment starts from damage severity alone: assessment.damageLevel maps to a relief.baseAmount of 10000 for 'severe', 7500 for 'major', 5000 for 'moderate', and 2500 for 'minor', with the empty fallback row granting 1000 when the level is missing or unrecognized. First hit is effectively exact-match here since the categories are mutually exclusive.

Anchoring relief to an inspected damage category rather than to claimed losses is how disaster assistance programs keep payouts fast and auditable, and the amounts sit in the realistic range of individual disaster grants, which are capped supplements rather than full compensation. A nonzero fallback reflects the humanitarian default that a verified applicant should not receive nothing because of a data gap.

Decision tablefirst hit policy
Damage Levelassessment.damageLevelBase Amountrelief.baseAmount
'severe'10000
'major'7500
'moderate'5000
'minor'2500
-1000
03

Income Adjustment

table

Ability to recover matters next: income.level scales the base through output expressions, 'low' earns relief.baseAmount * 1.2, 'medium' passes it unchanged, 'high' takes * 0.8, and the blank fallback row also keeps the base amount. Writing the result to relief.incomeAdjustedAmount keeps the original baseAmount intact for audit.

A plus-or-minus 20 percent band is a mild form of means-testing: low-income households have the least private capacity to absorb disaster losses, so tilting funds toward them is standard equity practice in relief programs, while treating an unknown income level as neutral avoids penalizing applicants for missing data.

Decision tablefirst hit policy
Income Levelincome.levelIncome Adjusted Amountrelief.incomeAdjustedAmount
'low'relief.baseAmount * 1.2
'medium'relief.baseAmount
'high'relief.baseAmount * 0.8
-relief.baseAmount
04

Household Size Adjustment

expression

Family size enters through the formula min([household.size * 0.15 + 1, 1.75]), so each member adds 15 percent up to a hard ceiling of 1.75, reached at five members. initialAllocation multiplies relief.incomeAdjustedAmount by that householdMultiplier and becomes the figure the insurance table reduces. The cap keeps very large households from scaling a fixed relief pool without bound, the same reason benefit scales in public programs flatten after a certain household size.

Expressions2 fields
householdMultipliermin([household.size * 0.15 + 1, 1.75])
initialAllocationrelief.incomeAdjustedAmount * $.householdMultiplier
05

Insurance Adjustment

table

Coverage status makes the last cut, with insurance.status selecting the payout formula. Uninsured applicants ('none') receive the full initialAllocation, 'partial' coverage pays max([initialAllocation * 0.7, 1000]), 'full' coverage drops to max([initialAllocation * 0.3, 500]), and an unknown status takes a standard 0.5 reduction. Each row also writes a plain-language relief.paymentReason such as 'Fully insured - minimal supplemental payment' so the recipient sees why the amount changed.

Reducing government relief for insured households reflects the real duplication-of-benefits principle in disaster assistance: public funds supplement, and must not double-pay, losses an insurer covers. Keeping a nonzero floor via the max() guards acknowledges deductibles and uncovered losses that even fully insured households bear, and the explanation string is the kind of transparency an appeals process depends on.

Decision tablefirst hit policy
Insurance Statusinsurance.statusFinal Paymentrelief.paymentAmountReasonrelief.paymentReason
'none'initialAllocation'Not insured - full payment'
'partial'max([initialAllocation * 0.7, 1000])'Partially insured - reduced payment'
'full'max([initialAllocation * 0.3, 500])'Fully insured - minimal supplemental payment'
-initialAllocation * 0.5'Unknown insurance status - standard reduction'

Make this template
your own.

Load Disaster Relief Fund Allocation into GoRules, adjust the rules to your policy, and ship it behind your own API.