Saltar al contenido principal

What makes a meal reimbursable

The question. A club serves lunch to forty children. Which of those forty lunches can be claimed?

The federal answer is that a reimbursable meal must contain every required component at the minimum quantity for the child's age band. PTRS holds a model of that rule, and this page describes what the model actually checks, because what it checks and what it stores are two different things.

Two facts govern everything below
  1. The check that validates a meal does not read the meal pattern rules table at all. It has the required components for each meal type fixed inside itself. It reads the serving-size table and the food catalogue, and never touches the meal pattern rules or their sets.

  2. Nothing gives PTRS a starting food catalogue. PTRS fills in rule sets, rules, serving requirements and age-group mappings when it starts up in its development setting, and no food items. The only way to add one has no screen.

Together those mean that in an installed copy of PTRS, the check resolves no menu item to a food item, finds no component present, and returns not valid for every meal it is asked about, with a warning per item saying the item was not found in the catalogue.

The check, end to end

The meal pattern check takes an organisation, a meal type, an optional federal age group and a list of menu items typed as text. It runs five steps.

1. Resolve each menu item to a catalogue entry

It loads every food item for the organisation that is active and creditable, then for each typed menu item tries an exact match on name, then a partial match in either direction.

An item that matches nothing is dropped from the check and produces a warning: "Menu item 'X' was not found in the food catalog and could not be validated."

The catalogue is empty everywhere

Adding a food item is the only way anything is ever put in the catalogue, and it has no screen anywhere in PTRS. Nothing gives PTRS a starting set of food items either.

PTRS's own design describes the catalogue as meant to hold USDA-provided items, and marks every item added through the one path that exists as "not one of those" regardless.

So every menu item is unresolved, every meal fails, and the reason given is that the food was not recognised.

2. Load serving requirements

Filtered on the organisation, the meal type and whichever age group was given, if one was. If no age group is given, serving sizes are not checked at all, that part of the check is simply skipped.

3. Check the required components

For a full meal, PTRS checks a fixed list per meal type, written into the check itself rather than read from any table:

Meal typeComponents required
BreakfastMilk, Fruit, Grain
LunchMilk, Vegetable, Fruit, Grain, Meat/Meat Alternate
SupperMilk, Vegetable, Fruit, Grain, Meat/Meat Alternate
AM Snack, PM SnackNone, snacks take a different path

Two special cases are built in:

  • At breakfast, fruit and vegetable count as one component. The fruit check also accepts a vegetable, and the two are added together against the fruit requirement.
  • At breakfast, meat or a meat alternate can stand in for the whole grain component. If no grain is present but a meat alternate is, the grain check passes and its serving size is not checked.

A component counts as present if the matched food item's main or secondary component matches it. The quantity is the sum of the standard serving size across every matching item, compared against the minimum required.

4. Snacks need two of four

For a snack, the required-component list above is set aside entirely. Instead PTRS counts how many of four groups are present, Milk, Meat/Meat Alternate, Grain, and Fruit-or-Vegetable together, and passes when two or more are present.

The failure message reads "Snacks must include at least two of the four meal components: grain, protein, fruit/vegetable, or milk." Note that this check only looks at a food item's main component, where the full-meal check above also accepts its secondary one, so an item that counts twice at a meal may not count at all at a snack.

5. Cross-component and milk rules

Two further checks run over the resolved items and add their own results.

The ten cross-component rules that exist

PTRS's design describes thirteen numbered cross-component rules. Ten are actually built; three are not implemented anywhere.

RuleWhat it checksOutcome
Juice limitMore than one juice item in one mealFails on two or more; passes with a warning on exactly one, telling you to check the day's other meals
Whole grain-richWhether any grain in the meal is whole grain-richAlways passes; adds a warning when none is
Grain-based dessertsAny item flagged as a grain-based dessertFails, naming the items
Yogurt sugarSugar per 6 ounces above 23 gramsFails
Cereal sugarSugar per dry ounce above 6 gramsFails
Milk fat by ageAges 3 and up: fat above 1%. Ages 1 to 2: fat strictly between 1% and 3.25%Fails
Flavoured milkFlavoured milk at breakfast or snack; flavoured milk for ages 1 to 5; flavoured milk above 0% fat for ages 6 and upFails
Beans and peas dual creditAn item whose main and secondary components are vegetable and meat alternate, in either orderPasses with a warning, stating it was credited toward the main component
Breakfast substitutionBreakfast with a meat alternate and no grainPasses, informationally
Separate fruit and vegetableLunch or supper with one of fruit or vegetable but not the otherFails

From the regulation Each of these carries a federal citation inside PTRS's own source, and the thresholds above, 23 grams, 6 grams, 1%, 3.25%, are written into the code as fixed numbers. They are shown here as what PTRS contains, not as the published federal rule. Check the regulation before relying on either.

Four of the ten rules read fields nothing in PTRS ever sets

The yogurt sugar, cereal sugar, milk fat and flavoured milk rules all depend on figures a food item is meant to carry: two sugar figures, a milk fat percentage, and whether it is flavoured.

The only way to add a food item does not set any of those four. Updating one cannot set them either. What a food item looks like on screen does not show them, so no screen could display them even if they were set. Nothing gives PTRS a starting set of values for them either.

So all four rules are permanently silent, including both milk rules, which is the whole of the milk fat and flavoured milk checks.

The same is true of a food item's serving sugar figure, its default country of origin, its seasonal availability and its USDA food code: all columns PTRS has and no way to fill in.

The seventy stored rules, and where they live

PTRS stores meal pattern rules in three tables. All three have exactly one way of being filled in: the routine that runs when PTRS starts up in its development setting.

What it writes, the first time PTRS starts up in that setting:

TableRowsNote
Meal pattern rule sets5One per meal type, sourced as Federal, effective 1 October 2017
Meal pattern rules70See below
Serving requirements84The serving-size table
Age-group mappings6PTRS's own age band mapped to the federal age band

It only runs once: if any rule set already exists, it does nothing further.

The 70 rules contain 62 duplicates

The way a rule is built takes a rule set, a meal type, a component, whether it is required, a minimum count, and an optional substitute. It does not take an age group. The startup routine calls it four times in a row with the exact same values, once per age band in intent, producing four rows that differ only in which row they are.

The seventy break down as Breakfast 12, Lunch 20, Supper 20, AM Snack 17, PM Snack 1. PTRS's own comment says the PM Snack set should share the same structure as AM Snack, and only one rule is actually added for it, not seventeen, so the PM Snack rule set has a single rule where AM Snack has seventeen, though the two are meant to be identical.

The last rule in each snack set is meant to encode "any two of four components," and the figure that would carry that meaning is never read by anything, so the encoding has no effect. A reviewer reading the rule table would still see what looks like a rule requiring two grains at snack.

None of this affects a verdict

The meal pattern check never reads the meal pattern rules or their sets. The only things that read them are the two lookups behind Meal Pattern Rules, which display them. The rules are a catalogue, not something the check actually consults.

The serving-size table

These are the 84 rows PTRS fills in for serving requirements, and they are the figures the meal pattern check compares a menu against when an age group is given.

From the regulation PTRS's own design names its basis as the federal meal pattern rule effective 1 October 2017, and cites a data file that is not included anywhere in PTRS, so the figures below cannot be traced past what PTRS itself contains. Check the published meal pattern before relying on any cell.

Breakfast

ComponentAges 1 to 2Ages 3 to 5Ages 6 to 12Ages 13 to 18
Milk0.5 cups0.75 cups1.0 cups1.0 cups
Fruit (fruit or vegetable)0.25 cups0.5 cups0.5 cups0.5 cups
Grain0.5 oz eq0.5 oz eq1.0 oz eq2.0 oz eq

Lunch and Supper

PTRS holds these figures twice, once per meal type, and they are identical for both, matching the federal rule.

ComponentAges 1 to 2Ages 3 to 5Ages 6 to 12Ages 13 to 18
Milk0.5 cups0.75 cups1.0 cups1.0 cups
Vegetable0.125 cups0.25 cups0.5 cups0.5 cups
Fruit0.125 cups0.25 cups0.25 cups0.5 cups
Grain0.5 oz eq0.5 oz eq1.0 oz eq2.0 oz eq
Meat/Meat Alternate1.0 oz eq1.5 oz eq2.0 oz eq3.0 oz eq

AM Snack and PM Snack

Also held twice, identically.

ComponentAges 1 to 2Ages 3 to 5Ages 6 to 12Ages 13 to 18
Milk0.5 cups0.5 cups1.0 cups1.0 cups
Meat/Meat Alternate0.5 oz eq0.5 oz eq1.0 oz eq1.0 oz eq
Grain0.5 oz eq0.5 oz eq1.0 oz eq1.0 oz eq
Fruit (fruit or vegetable)0.5 cups0.5 cups0.75 cups1.0 cups

PTRS recognises seven serving units in total; the table above only ever uses two of them.

Age bands

PTRS's federal age groups are Ages 1 to 2, Ages 3 to 5, Ages 6 to 12 and Ages 13 to 18. PTRS's own everyday age bands do not line up with these, and it holds six mappings meant to bridge the two:

PTRS bandFederal bandNeeds a date of birth?Cut-off age
5-7Ages 3 to 5Yes6
5-7Ages 6 to 12Yes6
8-10Ages 6 to 12No
11-13Ages 6 to 12Yes13
11-13Ages 13 to 18Yes13
14-18Ages 13 to 18No

Two of the four PTRS bands straddle a federal boundary and would need a child's date of birth to resolve correctly. Nothing in the CACFP module actually uses these mappings to work out an age group. Their only reader is the lookup behind the age-group table on Meal Pattern Rules, which simply displays them. The age group reaching the meal pattern check is whatever was typed in.

This is the same gap recorded on the meal record itself: four incompatible sets of age bands sharing one field, none of them the federal bands the serving sizes are keyed on.

What a person actually sees

The check has exactly one path to a person, and it is not on any of the menu screens.

ScreenReaches the check?
The Meal Composer and Meal Log sheet, through their Validate buttonYes. The verdict is shown and never stored, see Read the CACFP meal service screens
The same check through a second route meant for Meal Pattern RulesNo. No screen reaches it
Menu Template Library's tick or crossNo. That value is typed by whoever created the template
Cycle Menu PlanningNo. A cycle menu holds no menu items at all
Meal Pattern RulesNo. It lists rule sets; it checks nothing

And no meal record is ever marked valid by any of its four writers, so no verdict this check has ever produced has been attached to a meal record. That is the reason none of this reaches the money: see The reimbursement arithmetic.

Recipe crediting

PTRS has a table meant to hold how much of a component a composite dish (a recipe made of several ingredients) credits toward the meal pattern.

Nothing outside its own record and its own setup refers to it. It has no reader, no writer, and nothing on any screen. A recipe's crediting contribution is therefore something PTRS has a table for and no way to record or use.

Where to go next

Checked against PTRS on 7 September 2026.