🔍 Organization Allocation Lookup Process
Organization Table (Set During Onboarding)
Organization ID: 123 - "Literacy Foundation"
Functional Split (Organization-wide)
{
"functionalSplit": {
"Program": 0.80,
"Admin": 0.15,
"Fundraising": 0.05
}
}
Program Split (Within Program %)
{
"programSplit": [
{
"name": "Youth Reading Initiative",
"percent": 0.50,
"metaTag": "Reading promotion"
},
{
"name": "STEM Summer Program",
"percent": 0.30,
"metaTag": "STEM education"
},
{
"name": "Adult Literacy",
"percent": 0.20,
"metaTag": "Adult education"
}
]
}
⬇️ UPLOAD PROCESSING ⬇️
🔒 RESTRICTED GRANT ($5,000)
CSV Input: Program = "Youth Reading Initiative"
🔍 LOOKUP & VALIDATE
Check "Youth Reading Initiative" exists in
Organization.programSplit[].name
Check "Youth Reading Initiative" exists in
Organization.programSplit[].name
✅ Validation Result: Found! Valid program name
💾 Record.defaultAllocations
[
{
"program": "Youth Reading Initiative",
"percent": 1.00,
"amount": 5000,
"metaTag": "Reading promotion"
}
]
🔓 UNRESTRICTED DONATION ($5,000)
CSV Input: Program = "Unrestricted"
🧮 CALCULATE ALLOCATION
Use Organization.functionalSplit
+ Organization.programSplit
Use Organization.functionalSplit
+ Organization.programSplit
📐 Calculation:
- Program portion: $5,000 × 0.80 = $4,000
- Youth Reading: $4,000 × 0.50 = $2,000
- STEM Summer: $4,000 × 0.30 = $1,200
- Adult Literacy: $4,000 × 0.20 = $800
- Admin: $5,000 × 0.15 = $750
- Fundraising: $5,000 × 0.05 = $250
💾 Record.defaultAllocations
[
{
"program": "Youth Reading Initiative",
"percent": 0.40,
"amount": 2000,
"metaTag": "Reading promotion"
},
{
"program": "STEM Summer Program",
"percent": 0.24,
"amount": 1200,
"metaTag": "STEM education"
},
{
"program": "Adult Literacy",
"percent": 0.16,
"amount": 800,
"metaTag": "Adult education"
},
{
"program": "Admin",
"percent": 0.15,
"amount": 750
},
{
"program": "Fundraising",
"percent": 0.05,
"amount": 250
}
]
🔑 Key Points for Implementation:
- Organization table = "Recipe" - stores how to split money for this org
- Restricted grants: Lookup program name, use 100% allocation
- Unrestricted donations: Calculate allocation using org's recipe
- Record table: Stores the final calculated allocation for each donation
- Single source of truth: All allocation logic references the Organization's JSON config