SNACC PARI
Protein / Nutrition
Access Risk Index
1 in 5

students we screened is underweight. PARI identifies which ones, and why.

PARI is a free and anonymous screening tool that takes about five minutes to complete. It returns a nutrition risk score for each student, a clinical BMI-for-age z-score, and an assessment of which of four barriers is driving that student's risk. The last of these is what no existing tool provides.

1,007
students screened
23
questions, ~5 min
20.0%
below BAZ −2
0.72
AUC vs. thinness
4
languages, live
₹0
to run, forever
The problem

India has the numbers.
No headmaster has theirs.

The national surveys are methodologically sound. They are also of very little use to the person who actually has to act on them.

The Comprehensive National Nutrition Survey tells us that 24% of Indian adolescents are thin and 27% are stunted, and that children in the poorest households carry roughly 3.2× the odds of stunting. That is a national average.

If you run a school, that figure gives you nothing to work with. It does not tell you which of your students are struggling, and it certainly does not tell you what is causing it.

Four quite different problems can produce the same underweight child. The family may not be able to afford protein. Protein may not be sold anywhere nearby. Nobody may have taught the child what a balanced meal looks like. Or the child may simply not be eating enough meals in a day. Each of these calls for a different response, and buying more dal achieves nothing if the nearest shop selling it is six kilometres away.

No existing tool tells a school which of the four it is dealing with, and that is the gap PARI was built to fill.

Diet
35
points

What students actually eat, measured across ten food groups.

Economic
30
points

Whether food runs short, how many meals are eaten, and whether cost is what prevents buying protein.

Awareness
20
points

Whether students know what protein does, and whether they consider balance when they eat.

Structural
15
points

Whether protein-rich food is sold nearby at all, and whether the school provides a meal.


The instrument

Two independent tracks, deliberately kept apart

A student answers 23 questions on a phone, and those answers produce a risk score. Their height and weight produce a clinical z-score through an entirely separate calculation. The two results never share an input, and that independence is what makes the comparison between them worth anything.

TRACK A — SELF-REPORT 18 survey items 10 food groups 3 economic items 3 awareness items 2 structural items ~5 minutes Diet · 35 Economic · 30 Aware · 20 Struct · 15 bar width ∝ domain weight Risk score 0 – 100 Low ≤33 · Mod 34–66 · High ≥67 TRACK B — ANTHROPOMETRIC 4 measurements height · weight age · sex WHO 2007 LMS reference tables BMI-for-age z BAZ Compared only here ρ = −0.42 · AUC = 0.72 thinness 7% → 16% → 30% Because the tracks share no inputs, their agreement is evidence, not arithmetic.

Every weight traces to a source

Most online health questionnaires assign their points arbitrarily. Every weight in PARI is drawn from published research: the wealth gradient comes from CNNS, the dietary diversity threshold from a multi-country adolescent study, and the protein requirements from ICMR-NIN 2020.

The clinical measure is real

Height, weight, age and sex are run through the WHO 2007 LMS reference tables to produce a BMI-for-age z-score. This is the same statistic a paediatrician would use, rather than a BMI category invented for the application.

Independence is the design

Because no measurement of the body feeds into the risk score, the correlation between the two is a genuine external check. Had the tool been built the other way round, any agreement between them would be circular and would prove nothing.

Try it

The actual instrument, running here

This is not a simplified version. It runs PARI's actual scoring code against the real WHO 2007 growth reference, entirely within your browser. Nothing is transmitted and nothing is stored.

Screen a student in about five minutes

Answer as yourself, or invent a student and watch the four domain meters respond to each answer. You receive the same 0–100 score, risk band, domain breakdown, z-score and guidance that the live tool returns.

18survey items across diet, cost, awareness and access
5measurements — height, weight, age, sex, class
0data stored, transmitted or logged
Nutrition access risk
—
Dietary intake/ 35
Economic access/ 30
Awareness & behaviour/ 20
Structural barriers/ 15
Findings · n = 1,007

What the screened cohort looks like

Filtering the cohort recalculates everything below it, including the summary statistics, the distributions and the screening performance.

The response set behind these charts has been anonymised and minimised. It carries no identification code, no school, no class and no height or weight, only the answers themselves, the age band, the sex and the derived scores, held in shuffled order.


Does it work?

It works reasonably well, and in the right direction

The survey never asks how much a student weighs. When its results line up with who is actually underweight, that agreement tells us something.

The test is a simple one. Among the students PARI rated low risk, 7 in 100 turned out to be underweight. Among those rated moderate, the figure was 16 in 100. Among those rated high, it was 30 in 100, which is more than four times the low-risk group. The rate climbs at every step, and it does so on the basis of information the survey was never given.

This makes the tool particularly good at clearing students rather than at flagging them. When PARI rates a student as low risk it is correct roughly nine times out of ten. A school with 600 students and a single afternoon to work with can use that result to set most of them aside and concentrate its attention on the remainder.

It performs less well in the opposite direction. Most of the students it flags as high risk are not currently underweight, which looks at first like a straightforward error but is not one. The survey measures whether adequate food is within reach, and being underweight is one of the later consequences of it not being. Identifying students before the shortfall registers in their body is precisely what a screening tool exists to do.

One finding deserves stating plainly, since it is not a convenient one. Of the four things PARI measures, three independently predict a student's actual weight: what they eat, what they can afford, and what they can physically obtain. The fourth, awareness, does not. Knowing what protein does clearly shapes how a student eats, but in this data it does not register on the scale on its own. This is the main issue the next version of the instrument will need to address, and it is recorded here rather than left out.

How well the score spots underweight students
Each point on the curve represents a different cut-off for who gets flagged. The further the curve bends towards the top-left corner, the better the tool is performing.
A perfect test would follow the top-left corner and score 1.00, while a coin toss would follow the diagonal and score 0.50. PARI scores 0.72, which is clearly better than guessing but is not a substitute for weighing a student.

Four things this cannot tell you

Nobody was actually weighed

Students entered their own height and weight rather than being measured. People tend to round their height upwards, which makes them appear less underweight than they are, so the true figures are probably somewhat worse than those shown here. Measuring students directly would be the single largest improvement available.

It is one snapshot, not a before and after

All of this data comes from a single sitting. Students who receive a daily school meal are less underweight, but they may also attend better-resourced schools. That is an association rather than proof that the meal is responsible, and screening the same students again at a later date is what would settle the question.

The four categories overlap heavily

In practice the students who eat badly are usually the same students who cannot afford food. The four scores are tidier on paper than they are in reality, and a considerable amount of what PARI detects reduces to a single underlying factor, which is poverty.

One benchmark is being stretched

The "four food groups a day" standard was established for 15 to 19 year olds. A substantial part of this cohort is younger than that, so for those students it functions as a borrowed rule rather than a validated one.

Method

Where every number comes from

Phase 1 uses transparent, hand-assigned weights, each traceable to a published source. Phase 2 re-derives them empirically once the response set is large enough to support factor analysis.

CNNS 2016–18 — Comprehensive National Nutrition Survey. Source of the adolescent thinness and stunting baselines and the wealth-gradient effect size (poorest-quintile stunting OR 3.20) that sets the economic domain's weight.
MDD-Adolescents, multi-country LMIC study — the minimum dietary diversity threshold used as the dietary adequacy cut point.
ICMR-NIN 2020 — Indian Recommended Dietary Allowances, 0.83–1.0 g/kg/day, underlying the protein-frequency weighting.
WHO AnthroPlus 2007 — the LMS parameters for BMI-for-age, 5–19 years, and the <−2 SD thinness cut-off.

How a score is built

1

Diet is scored twice over

The first score counts how many of the ten food groups are eaten at least three days a week and is worth 20 points. The second takes the highest weekly frequency among the four protein-dense groups and is worth 15.

2

The other items map to fixed points

Every option carries a published point value. There are no free parameters, no hidden multipliers and nothing fitted after the fact to make the numbers look better.

3

Each domain has a hard ceiling

The ceilings are 35, 30, 20 and 15 points, so no single domain can push a student into the high-risk band on its own.

4

The four domain scores sum to 0–100

The bands sit at 33 and 67. The breakdown is returned alongside the total, since the breakdown is the part a school can actually act on.


Source

All of it is open

The instrument, the scoring engine, the growth-reference tables, the anonymised storage layer and the codebook are all public. Read it, fork it, or tell me where it is wrong.

github.com/RayhanKhimji/snacc-pari-v2 →
The live instrument. Streamlit front end, four-language deployment, WHO LMS z-score module, anonymised storage with no personal identifiers, and the full v2 codebook documenting every weight and its source.
Python · Streamlit · open source
score.py — the dietary domain view on GitHub
def _dietary(resp):
    ranks = {g: _FREQ_RANK.get(resp.get(g, "Never"), 0)
             for g, _ in FOOD_GROUPS}

    # Diversity: groups eaten >=3 days/week (rank >= 2)
    diversity = sum(1 for g, _ in FOOD_GROUPS if ranks[g] >= 2)
    if   diversity >= 6: div_pts = 0
    elif diversity >= 4: div_pts = 7
    elif diversity >= 2: div_pts = 14
    else:                div_pts = 20

    # Protein: best weekly frequency among protein-dense groups
    pmax = max(ranks[g] for g in PROTEIN_GROUPS)
    prot_pts = {3: 0, 2: 5, 1: 10, 0: 15}[pmax]

    return div_pts + prot_pts, {...}

This is the exact function the demo above runs. It reproduces all 1,007 stored scores without a single disagreement between them.

anthro.py — BMI-for-age z-score view on GitHub
def baz(weight_kg, height_cm, age_years, sex):
    """Return (baz, bmi, category)."""
    b   = bmi(weight_kg, height_cm)
    row = _nearest_row(sex, age_years)
    if b is None or row is None:
        return None, None, None
    _, L, M, S = row
    if L == 0:
        z = math.log(b / M) / S
    else:
        z = (((b / M) ** L) - 1) / (L * S)
    return round(z, 2), round(b, 1), _category(z)
store.py — anonymised storage view on GitHub
"""Anonymized response storage.

NO personal identifiers are ever written — only the
SGIC code and survey data.
"""

FIELDS = [
    "timestamp", "sgic", "school", "grade", "age", "sex",
    "height_cm", "weight_kg", "measured_flag",
    # ... the 18 survey items ...
    "risk_score", "band", "baz", "bmi", "baz_category",
]
Ethics & anonymity

Screening children without collecting children

01

No personally identifying data

No name, roll number, date of birth or contact detail is collected at any point in the pipeline.

02

Self-generated codes

A self-generated code allows the same cohort to be screened again later without the instrument ever learning who anyone is.

03

Written school approval

Deployment requires the head teacher's written agreement before a single link is shared.

04

Parental opt-out

Families are informed before deployment and may withdraw their child without giving a reason.

Results are returned to schools only in aggregate. No individual student's score is ever disclosed to staff, because a screening score in the wrong hands ceases to be a health tool and becomes a label.


Why it exists

A feeding programme that can prove it worked

PARI is the measurement layer for work that was already running without one.

A free lunch programme at KDO Jain School in Hubli feeds more than 300 students every day. Nutrition screenings with the Welfare Society for Destitute Children in Mumbai covered 150+ children and surfaced 60+ malnutrition cases.

Both programmes serve food and hope for the best, which is the normal condition of charitable feeding. There is no baseline, no targeting and no way of telling whether the meal being served is the meal that was needed. A programme can run for years without ever discovering that its students' real constraint was availability rather than cost.

A screening layer turns the operation into a loop. The cohort is measured, the dominant barrier is identified, the food and the teaching are directed at that specific gap, and the cohort is screened again to establish whether the figure has moved. That is the difference between charity and a programme that can be improved.

1

Screen the cohort

Five minutes per student, on any phone, in their own language.

2

Read the breakdown

Not simply how many students are at risk, but which barrier dominates at this particular school.

3

Target the intervention

A cost problem calls for subsidised protein, an availability problem for a supply route, and an awareness problem for teaching.

4

Re-screen

The same codes and the same instrument, at a later date. The change between the two is the evidence.

About

Rayhan Khimji

Founder of SNACC and the developer of PARI.

Rayhan Khimji

He came to nutrition through sport. A decade of competitive taekwondo, ending with representing India at the ISF World Games, taught him that what an athlete eats determines what an athlete can do — and that in India, the food required to train seriously was either imported, expensive, or full of things that undermined the point. He began formulating an alternative in his kitchen, then took it through food safety licensing and into retail.

Working on the product raised a question the product could not answer. A protein bar serves people who can afford a protein bar. It does nothing for the far larger group who cannot, or who have never been told what protein does in the first place.

PARI is his attempt at that problem. It is a free, open-source tool that screens young people across four dimensions — diet quality, affordability, nutritional awareness and physical access — and returns personalised guidance in plain language. Anyone can use it. Schools can run it across an entire cohort and see, for the first time, where their students actually stand.

What the data has shown so far reshaped how he thinks about the problem. The constraint is not only money. Most students screened could not explain what protein does or how much they needed.

Knowledge is the cheaper input, and the one almost nobody is distributing.

His vision is to take PARI from a screening tool to national nutritional infrastructure — a free layer that any school, clinic or programme in India can run to identify risk early and act on it, building a picture of youth nutrition that does not currently exist. Not a product with a social arm attached, but public health utility that happens to have been built by someone who needed it first.

The position underneath all of it is straightforward. Nutritious food is not a privilege earned by income or geography. It is a right, and the distance between that principle and the situation on the ground is a problem worth building against.

Take the survey → See the code