GoRules Version 2 is here - redesigned, now with managed cloud.GoRules Version 2 is here!
Watch the launch videoWatchDisaster 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:
- Base Fund Allocation: Assigns initial payment amounts (ranging from $1,000 to $10,000) based on damage severity levels (minor, moderate, major, or severe).
- 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.
- Household Size Calculation: Applies a multiplier based on family size, increasing support proportionally for larger households up to a maximum of 75% additional funding.
- 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.
Request
inputFour 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"
}
}Base Fund Allocation
tablePayment 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.
| Damage Levelassessment.damageLevel | Base Amountrelief.baseAmount |
|---|---|
| 'severe' | 10000 |
| 'major' | 7500 |
| 'moderate' | 5000 |
| 'minor' | 2500 |
| - | 1000 |
Income Adjustment
tableAbility 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.
| Income Levelincome.level | Income Adjusted Amountrelief.incomeAdjustedAmount |
|---|---|
| 'low' | relief.baseAmount * 1.2 |
| 'medium' | relief.baseAmount |
| 'high' | relief.baseAmount * 0.8 |
| - | relief.baseAmount |
Household Size Adjustment
expressionFamily 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.
min([household.size * 0.15 + 1, 1.75])relief.incomeAdjustedAmount * $.householdMultiplierInsurance Adjustment
tableCoverage 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.
| Insurance Statusinsurance.status | Final Paymentrelief.paymentAmount | Reasonrelief.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' |
Other Public Sector templates
View all templatesGovernment Assistance
Streamlined decision system that determines program eligibility based on income thresholds, household size, age factors, and special circumstances.
Public SectorTax Exemption
Automated system that assesses organizations for 501(c)(3) tax-exempt status based on structure, activities, and financial metrics.
Public SectorMunicipal Permit Evaluation System
Automated system that evaluates building and event permits based on zoning regulations, safety requirements, and environmental impact factors.
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.