Skip to main content
Eligibility, as code

Not a listing.
A verdict.

Give Verdix an opportunity's rules and a person's details and it tells you whether they qualify. It shows its work too, including the clause behind every call, any exception that applied, and how sure it is.

npm install verdix
The one idea

Extraction is messy. Evaluation shouldn't be.

Pulling requirements out of a scanned advert is guesswork that models misread, and adverts contradict each other. But once you have the rules, deciding who meets them shouldn't involve any guessing at all. Verdix owns that second half, and it won't paper over the mess of the first with a tidy yes-or-no.

Extraction · probabilistic

Kept off the critical path

A model reads the source and drafts the rules, tagging each with the clause it came from, the exact wording, and how confident it is. It won't invent a requirement that isn't there, and when it's unsure it says so instead of picking an answer. You don't have to use it at all, and you can write packs by hand.

Evaluation · deterministic

Pure, auditable, testable

Hand the engine a person and a rule pack; it hands back a verdict. The same inputs always give the same answer, and any verdict can be rebuilt from the person's details plus the exact rules it cited. No dependencies, no network.

Four states, never one

A verdict is never just "eligible".

Every answer is one of four states, and each carries its reasons. The one that earns trust is the state most tools skip: an honest "I'm not sure."

✓ Pass

Everything checks out, and we're sure enough to say so.

✗ Fail

A hard requirement isn't met and you're told which one.

! Review

Something a rule can't settle, or a rule we're not sure we read right. It goes to a person, not a guess.

? Unknown

We're missing something we'd need to decide. So we ask, instead of assuming.

In your codebase

One call. Full evidence back.

One function call. You give it a person and a pack, and you get back a status, a confidence, and a line-by-line breakdown you can show a user, log, or come back to later. Nothing phones home.

import { evaluate, governmentJobPack } from "verdix";

const verdict = evaluate(
  { age: 33, degreeClass: "2nd",
    discipline: "economics", quota: "balochistan" },
  governmentJobPack
);

verdict.status;   // "review"
verdict.summary;  // "Needs review: Discipline."
verdict.results;  // per-rule evidence + clause + confidence
Three rule kinds

Declarative and diffable.

Rules are just data, so a whole pack lives in your repo and gets reviewed in a pull request, not buried in a service where nobody notices it change.

numeric

A threshold with optional guarded relaxations age <= 30,+5 if quota in {balochistan, sindh-rural}, each carrying its own clause and confidence.

set

Membership degreeClass in {1st, 2nd}.

manual

A requirement that can't be reduced to a predicate. Always routes to review instead of being faked into a pass.

Same engine, any domain

The core has no domain vocabulary.

Change the pack, keep the engine. The thing Verdix is good at strict, clause-by-clause eligibility is exactly what all of these have in common.

Government jobsScholarshipsFellowshipsVisa & work authorizationGrants & benefitsProfessional licensing

See a real verdict change as you edit the applicant.