GoRules Version 2 is here - redesigned, now with managed cloud.GoRules Version 2 is here!
Watch the launch videoWatchImmigration Eligibility Evaluator
Rules-based system automating visa application processing by evaluating documentation completeness, background checks and qualification scoring.
Solution
This automated immigration evaluation system streamlines visa application processing by methodically assessing applicant eligibility through multiple criteria. The system first verifies all required documentation including passport validity, completed application forms, proof of funds, and medical examination results. For security purposes, it performs thorough background checks examining criminal history, previous immigration violations, security flags, and visa rejection history.
The qualification assessment component evaluates education levels from primary to doctorate, work experience duration, language proficiency, in-demand skills, and family connections. Each criterion receives a numerical score with appropriate weighting. Applications automatically route to approval, rejection, or manual review based on combined scores and rule-based conditions. This system dramatically reduces processing times while ensuring consistent application of immigration criteria and providing clear justification for all decisions.
How it works
The decision graph processes applications through sequential evaluation stages:
- Documentation Verification: Checks passport validity, application completeness, proof of funds, and medical examination status.
- Background Screening: Evaluates criminal history, immigration violations, security concerns, and previous visa rejections.
- Education Assessment: Scores education levels from primary through doctorate with appropriate point values.
- Work Experience Evaluation: Assigns scores based on years of relevant professional experience.
- Language Proficiency Rating: Measures language skills from basic to native speaker levels.
- Additional Factors Analysis: Considers in-demand skills and family connections that may enhance eligibility.
- Final Decision Logic: Calculates overall scores, applies decision rules, and determines if the application should be approved, rejected, or flagged for manual review.
Where teams use it
- Government immigration departments
- Visa processing centers
- Consular services
- Immigration law firms
- Border control agencies
- Refugee status determination
- Work permit processing
- Student visa evaluation
- Permanent residency applications
- Citizenship pathway assessment
Inside the decision model
Immigration Eligibility Evaluator ships as a JDM decision graph with 8 nodes, 7 decision tables and 39 rules. Download it, load it into GoRules, and run it as-is on Zen Engine.
Immigration Application
inputFour objects carry the application: documentation holds the boolean completeness checks, background the security-relevant history, qualifications the scoreable attributes, and applicant the identity details that the rules never test but the case file needs.
Sample requestJSON
{
"applicant": {
"fullName": "Jane Smith",
"dateOfBirth": "1985-05-15",
"nationality": "United Kingdom",
"currentResidence": "France"
},
"documentation": {
"passportValid": true,
"visaApplicationComplete": true,
"proofOfFundsProvided": true,
"medicalCheckComplete": true,
"supportingDocuments": [
"Reference Letter",
"Property Deed",
"Bank Statements"
]
},
"background": {
"criminalHistory": false,
"immigrationViolations": false,
"securityConcerns": false,
"previousVisaRejections": 0
},
"qualifications": {
"educationLevel": "master",
"workExperienceYears": 8,
"languageProficiency": "advanced",
"skillsInDemand": true,
"familyConnections": false
}
}Verify Documentation
tableCompleteness is screened first, with a first hit policy that surfaces the most serious gap. A false documentation.passportValid rejects immediately with a documentationScore of 0, while a missing visaApplicationComplete, proofOfFundsProvided, or medicalCheckComplete marks the file "incomplete" with partial scores of 40, 50, and 60 that record how far along it is. Only when all four flags are true does the row set "pending" with a full 100, letting the file continue toward substantive assessment.
Checking formal completeness before merits is how visa processing actually works: consulates return incomplete files without adjudicating them, and an invalid passport is a hard stop rather than a curable defect. Distinguishing "rejected" from "incomplete" matters downstream, since an incomplete applicant can resubmit while a rejection ends the case.
| Passport Validdocumentation.passportValid | Application Completedocumentation.visaApplicationComplete | Proof of Fundsdocumentation.proofOfFundsProvided | Medical Checkdocumentation.medicalCheckComplete | Statusassessment.documentationStatus | Reasonassessment.documentationReason | Scoreassessment.documentationScore |
|---|---|---|---|---|---|---|
| false | - | - | - | "rejected" | "Missing valid passport" | 0 |
| - | false | - | - | "incomplete" | "Incomplete visa application" | 40 |
| - | - | false | - | "incomplete" | "Missing proof of funds" | 50 |
| - | - | - | false | "incomplete" | "Medical check not completed" | 60 |
| true | true | true | true | "pending" | "Documentation complete" | 100 |
Evaluate Background
tableSecurity screening ranks the flags by severity under a first hit policy. background.criminalHistory being true is terminal, "rejected" with a score of 0, while immigrationViolations and securityConcerns send the file to "review" with scores of 30 and 20. Rejection history is graded on previousVisaRejections: >= 3 forces "review" at 40, a value of 1, 2 passes as "pending" at 70 with the note "Previous rejections noted", and a clean 0 earns the full 100.
The ordering mirrors grounds of inadmissibility in real immigration law, where criminal history is typically a bar and prior violations trigger heightened scrutiny rather than automatic refusal. Treating one or two past rejections as a score haircut instead of a blocker is a sensible policy choice, since reapplication after refusal is common and not itself disqualifying.
| Criminal Historybackground.criminalHistory | Immigration Violationsbackground.immigrationViolations | Security Concernsbackground.securityConcerns | Previous Rejectionsbackground.previousVisaRejections | Statusassessment.backgroundStatus | Reasonassessment.backgroundReason | Scoreassessment.backgroundScore |
|---|---|---|---|---|---|---|
| true | - | - | - | "rejected" | "Criminal history detected" | 0 |
| false | true | - | - | "review" | "Immigration violations" | 30 |
| false | false | true | - | "review" | "Security concerns" | 20 |
| false | false | false | >= 3 | "review" | "Multiple previous rejections" | 40 |
| false | false | false | 1, 2 | "pending" | "Previous rejections noted" | 70 |
| false | false | false | 0 | "pending" | "Background check clear" | 100 |
Assess Education
tableEducational attainment converts to points on a simple ladder: qualifications.educationLevel of "doctorate" scores 100, "master" 80, "bachelor" 60, "secondary" 40, "primary" 20, and "none" 0, each row also emitting a human-readable educationReason. The first hit policy is safe here because the enum values are mutually exclusive, so exactly one row fires.
Awarding graduated points for credentials is the standard mechanic of points-based immigration systems such as Canada's Express Entry or Australia's skilled migration stream. The even 20-point steps are a modeling simplification, but the shape, with a meaningful premium for postgraduate degrees, matches how those systems weight education.
| Education Levelqualifications.educationLevel | Scoreassessment.educationScore | Reasonassessment.educationReason |
|---|---|---|
| "doctorate" | 100 | "Highest education level" |
| "master" | 80 | "Advanced education" |
| "bachelor" | 60 | "University education" |
| "secondary" | 40 | "Secondary education" |
| "primary" | 20 | "Primary education only" |
| "none" | 0 | "No formal education" |
Assess Work Experience
tableYears of professional history map to points through descending threshold rows: qualifications.workExperienceYears >= 10 scores 100, >= 7 scores 80, >= 4 scores 60, >= 2 scores 40, >= 1 scores 20, and exactly 0 scores 0. Under the first hit policy the highest band an applicant clears is the one that counts, so the rows must stay sorted from most to least experience.
Banding experience rather than scoring it linearly follows real skilled-migration practice, where points accrue in steps and plateau once experience stops adding predictive value, here at ten years. The bands themselves are sensible design choices rather than a transcription of any one country's schedule.
| Work Experience Yearsqualifications.workExperienceYears | Scoreassessment.experienceScore | Reasonassessment.experienceReason |
|---|---|---|
| >= 10 | 100 | "Extensive work experience" |
| >= 7 | 80 | "Significant work experience" |
| >= 4 | 60 | "Moderate work experience" |
| >= 2 | 40 | "Limited work experience" |
| >= 1 | 20 | "Minimal work experience" |
| 0 | 0 | "No work experience" |
Assess Language
tableSelf-assessed language ability becomes a score through five enum rows: "native" gives 100, "advanced" 75, "intermediate" 50, "basic" 25, and "none" 0, written to assessment.languageScore alongside a matching languageReason. One row per value of qualifications.languageProficiency means the first hit policy resolves deterministically.
Language proficiency is a pillar of every major points-based system because it predicts labor-market integration, and real programs anchor these levels to test frameworks like CEFR or CLB bands. The even 25-point spacing is a clean modeling choice standing in for those graded test scores.
| Language Proficiencyqualifications.languageProficiency | Scoreassessment.languageScore | Reasonassessment.languageReason |
|---|---|---|
| "native" | 100 | "Native language proficiency" |
| "advanced" | 75 | "Advanced language proficiency" |
| "intermediate" | 50 | "Intermediate language proficiency" |
| "basic" | 25 | "Basic language proficiency" |
| "none" | 0 | "No language proficiency" |
Assess Additional Factors
tableTwo booleans combine into a bonus score covering all four cases: skillsInDemand and familyConnections together give 100, skills alone 80, family alone 70, and neither 0. Enumerating every combination explicitly, rather than adding two independent bonuses, lets the table cap the combined value at 100 so this factor cannot outweigh the core assessments.
Both factors have real analogues: occupation-in-demand lists and family sponsorship provisions appear across immigration systems, and giving in-demand skills the slight edge (80 versus 70) reflects the economic-migration emphasis of points-based selection. The exact spread is a policy choice, not a statutory value.
| Skills In Demandqualifications.skillsInDemand | Family Connectionsqualifications.familyConnections | Scoreassessment.additionalFactorsScore | Reasonassessment.additionalFactorsReason |
|---|---|---|---|
| true | true | 100 | "In-demand skills and family connections" |
| true | false | 80 | "In-demand skills" |
| false | true | 70 | "Family connections" |
| false | false | 0 | "No additional qualifying factors" |
Final Assessment
tableHard gates come before arithmetic in the final table. The first rows check assessment.documentationStatus and backgroundStatus: any "rejected" status propagates as a rejection carrying the original reason, "incomplete" documentation keeps the file incomplete, and a background "review" forces manual review regardless of merit. Only clean files reach the scoring rows, where the average of all six component scores divided by 6 decides the outcome: >= 70 is "approved", >= 50 is "review", and anything lower falls to the default "rejected" row, with the computed average always written to assessment.overallScore.
Separating eligibility gates from the points computation reflects how real systems combine mandatory requirements with competitive scoring: no amount of education offsets a criminal bar or a missing passport. The 70 and 50 cut lines create a deliberate middle band where a human officer, not the ruleset, makes the call, which is standard practice for borderline visa files.
| Documentation Statusassessment.documentationStatus | Background Statusassessment.backgroundStatus | Average Score(assessment.documentationScore + assessment.backgroundScore + assessment.educationScore + assessment.experienceScore + assessment.languageScore + assessment.additionalFactorsScore) / 6 | Final Statusassessment.finalStatus | Final Reasonassessment.finalReason | Overall Scoreassessment.overallScore |
|---|---|---|---|---|---|
| "rejected" | - | - | "rejected" | assessment.documentationReason | assessment.documentationScore |
| - | "rejected" | - | "rejected" | assessment.backgroundReason | assessment.backgroundScore |
| "incomplete" | - | - | "incomplete" | assessment.documentationReason | assessment.documentationScore |
| - | "review" | - | "review" | assessment.backgroundReason | (assessment.documentationScore + assessment.backgroundScore + assessment.educationScore + assessment.experienceScore + assessment.languageScore + assessment.additionalFactorsScore) / 6 |
| - | - | >= 70 | "approved" | "Application meets criteria" | (assessment.documentationScore + assessment.backgroundScore + assessment.educationScore + assessment.experienceScore + assessment.languageScore + assessment.additionalFactorsScore) / 6 |
| - | - | >= 50 | "review" | "Application requires further review" | (assessment.documentationScore + assessment.backgroundScore + assessment.educationScore + assessment.experienceScore + assessment.languageScore + assessment.additionalFactorsScore) / 6 |
+1 more row in the downloadable template
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 Immigration Eligibility Evaluator into GoRules, adjust the rules to your policy, and ship it behind your own API.