Who can do what with menus and inventory
Sixty-four things PTRS can do around menus, the food catalogue, meal pattern rules, inventory, vendors, procurement, Buy American compliance and special dietary accommodation. PTRS can do 251 things in CACFP in total; the other groups are on Who can do what with meals and claims (54, the money path), Who can do what with enrolment and records (41), and Procurement analytics (3, the only three in the whole module with a narrower rule).
Who can do this
Staff members, site directors, regional directors, organisation administrators and super admins, for every one of the sixty-four things on this page. Nothing here narrows that further.
On this subset that means creating a vendor, creating a purchase order, approving one and receiving one are all allowed for the most junior working role in PTRS.
A narrower rule for financial actions exists in PTRS and is applied only to the Funders module, not here. This is recorded for the PTRS team and is not changed by this guide.
The one exception is the three procurement reports, which ask for a different, narrower rule that excludes staff members. See Procurement analytics.
How many of these are reachable
| Count | |
|---|---|
| Things PTRS can do on this page | 64 |
| Reached by something in PTRS | 22 |
| , of those, requests that succeed | 14 |
| , of those, requests that always fail | 8 |
| No screen reaches it, though the plumbing exists | 19 |
| No screen was ever built for it at all | 23 |
Every write action on this subset that a screen can reach fails. Seven create forms and one dashboard lookup, listed in Requests that always fail.
Cycle menus and menu templates
| Action | What it does | Reachable |
|---|---|---|
| Create a cycle menu | Creates the menu and an empty day for every day of the cycle | New Cycle Menu on Cycle Menu Planning, always fails |
| List cycle menus | Filterable by status and season | The list on Cycle Menu Planning |
| Look up one cycle menu | With its days and their planned meals | No screen reaches it |
| Change a cycle menu's status | No rule about which status can follow which, any to any | No screen reaches it |
| Create a menu template | New Template on Menu Template Library, always fails | |
| List menu templates | Filterable by meal type and whether active | The grid on Menu Template Library |
| Look up one menu template | No screen reaches it | |
| Clone a menu template | No screen reaches it |
What PTRS needs
| Action | PTRS needs |
|---|---|
| Create a cycle menu | Menu name, programme, season, start date, who created it, and a site scope, all filled in; cycle length greater than 0 |
| Change a cycle menu's status | The menu and a new status, both filled in |
| Create a menu template | Template name, meal type, the items list, a pre-check status, and prep complexity, all filled in |
| Clone a menu template | The template being copied and a new name, both filled in |
The two bolded fields above are the ones the screens never send. Nothing on this page checks how long any of these values are, so an overly long piece of text reaches PTRS and comes back as a raw failure rather than a clear message.
The meal record that would hold a day's actual food, once a cycle menu exists, is read by looking up a cycle menu and has no writer anywhere in PTRS.
Meal pattern rules
| Action | What it does | Reachable |
|---|---|---|
| List meal pattern rule sets | Leaves the individual rules out of each set | Meal Pattern Rules, succeeds, and shows nothing, because the page expects a different shape of answer |
| Look up one rule set | With its rules | No screen reaches it |
| List serving requirements | For a meal type and, optionally, an age group | No screen reaches it |
| List age-group mappings | The lower table on Meal Pattern Rules, works | |
| Check a menu against the meal pattern | The same check used by the meal-count composer forms | No screen reaches it through this particular route, the composer forms reach the same check by a different route, see Who can do what with meals and claims |
All four reads are backed by tables that PTRS only ever fills in when it starts up in its development setting, for one fixed organisation. See What makes a meal reimbursable.
Food catalogue
| Action | What it does | Reachable |
|---|---|---|
| List food items | Filterable by component, whether active, and a search term | The table on Food Item Catalog |
| Look up one food item | No screen reaches it | |
| Create a food item | The only way anything is ever added to the catalogue | No screen was ever built for it |
| Update a food item | Changes five classification fields only | No screen was ever built for it |
| Deactivate a food item | No screen was ever built for it | |
| List the food review queue | Unclassified items only | No screen was ever built for it |
| Classify a review-queue item | No screen was ever built for it, and nothing ever adds an item to the queue in the first place |
What PTRS needs
| Action | PTRS needs |
|---|---|
| Create a food item | Name, primary component and standard serving unit filled in; standard serving size greater than 0. Does not accept milk fat percentage, whether it is flavoured, three different sugar figures, a USDA food code or a country of origin default, all are columns with no way to fill them in |
| Update a food item | The item and its primary component filled in. Cannot change whether it is juice, yogurt or cereal, or its serving size or unit, only creating a new item sets those, and nothing can amend them |
| Deactivate a food item | The item, filled in |
| Classify a review-queue item | The queue entry, the food item and who is classifying it, all filled in, and checks the food item exists in your organisation |
Inventory
| Action | What it does | Reachable |
|---|---|---|
| Create an inventory lot | Assigns its place in the first-in-first-out order as the next available slot at that site | No screen reaches it |
| List inventory items | Filterable by site, food item and low-stock only. Ordered for first-in-first-out use | The table, low-stock strip and first-in-first-out panel on Inventory Management |
| Look up one inventory item | No screen reaches it | |
| Update an inventory item | Storage area, expiry, reorder threshold and notes only | No screen reaches it |
| Record an inventory transaction | An Issue runs a real oldest-first deduction across lots and records one transaction per lot touched | Record Transaction on Inventory Management, always fails |
| List inventory transactions | Filterable by item and site | No screen reaches it |
| Look up the inventory dashboard | Totals, a low-stock list and a list expiring within 7 days | Inventory Management, always fails, because the page asks for "every site" |
What PTRS needs
| Action | PTRS needs |
|---|---|
| Create an inventory lot | Site, food item, lot number and received date filled in; quantity greater than 0; unit filled in. Does not check that the food item actually exists |
| Update an inventory lot | The lot, filled in. Every other value keeps what was already stored if left out |
| Record a transaction | Site, item, transaction type and who transacted it, all filled in; quantity greater than 0. Transfer and Waste refuse a balance below zero; Adjustment may be negative; Issue refuses when the total in stock is not enough |
Unit is free text on both the lot and the transaction, with nothing constraining it to a fixed list of words. Multi-Site Inventory's total value adds together quantities that may be in different units.
Vendors
| Action | What it does | Reachable |
|---|---|---|
| Create a vendor | Vendor on Procurement & Vendors, always fails | |
| List vendors | Filterable by site, whether active, and a search term | The vendor picker on Procurement & Vendors |
| Look up one vendor | No screen reaches it | |
| Update a vendor | No screen reaches it | |
| Remove a vendor | Marks it inactive rather than truly removing it | No screen reaches it |
Creating a vendor needs only a site and a business name. A tax id is optional; when given, PTRS checks it is not already used by another vendor in your organisation and refuses, naming it, if it is. The contact email has no length or format check at all on this action.
Because removing a vendor only marks it inactive, a removed vendor stays in every list that does not specifically ask for active-only. The vendor picker on Procurement & Vendors asks for every vendor, so it would show removed ones alongside active ones.
Procurement
| Action | What it does | Reachable |
|---|---|---|
| Create a purchase order | Starts as a Draft. Checks the vendor exists in your organisation | New Order on Procurement & Vendors, always fails |
| List purchase orders | Filterable by site, vendor and status | The order list on Procurement & Vendors |
| Look up one purchase order | With the vendor's name | No screen reaches it |
| Approve a purchase order | Requires Draft or Submitted | No screen reaches it |
| Receive a purchase order | Requires Approved; stamps the delivery date as today | No screen reaches it |
| Look up budget tracking | Spent, approved, pending, three counts and a breakdown by method | The two budget tiles on Procurement & Vendors |
Creating an order needs a site, a vendor, a procurement method, an order date, and a total amount greater than zero, the page always sends zero. The procurement method must be one of five named values; the form offers two of those five and two values that do not exist at all.
PTRS defines five order statuses. Draft, Approved and Received can be written; Submitted and Cancelled cannot, so the pending-budget figure, which is meant to total drafts and submitted orders together, can only ever reflect drafts, and no order can ever be cancelled.
Buy American
| Action | What it does | Reachable |
|---|---|---|
| Create a Buy American record | New Record on Buy American Compliance, always fails | |
| List Buy American records | Filterable by site, fiscal year and compliant-only | The table on Buy American Compliance |
| Look up the compliance summary | Totals and a percentage, for a fiscal year | The four tiles on Buy American Compliance |
| Request a Buy American exception | Starts as Pending | No screen reaches it |
| List Buy American exceptions | Filterable by record and status | No screen reaches it |
Creating a record needs a site, a food item, a vendor name, a purchase date and a country of origin, plus a fiscal year greater than zero. Whether it counts as compliant is taken exactly as sent rather than worked out from the domestic tick, the country of origin or the USDA-commodity flag, and the screen never sends it, so it is false on every record and the compliance percentage is structurally 0.00%.
PTRS recognises three kinds of exception: Limited Supply, Cost Differential and Product Unavailable. It defines four exception statuses; only Pending can ever be written, there is no way to approve one, and who approved it, when, and when it expires have no writer anywhere.
Site transfers and multi-site inventory
| Action | What it does | Reachable |
|---|---|---|
| Create a site transfer | Starts as Planned. Creates no inventory transaction at either site | No screen reaches it |
| List site transfers | Matches a site whether it is sending or receiving | No screen reaches it |
| Change a transfer's status | Marking one received records who received it and moves no stock | No screen reaches it |
| Look up the multi-site inventory summary | One row per site in the organisation, with stock filled in | Multi-Site Inventory, works |
Creating a transfer needs both site ids, the food item, a quantity greater than 0, a unit and a transfer date. It does not check that the two sites differ, that either belongs to your organisation, or that the sending site actually holds any stock. PTRS defines five transfer statuses, and the status action accepts any of them from any other with no rule about which change makes sense.
Special dietary
Seventeen things PTRS can do here. Three have a screen; the other fourteen have no screen at all, or the plumbing for one and nothing using it.
Meal substitutions
| Action | What it does | Reachable |
|---|---|---|
| Record a meal substitution | Checks the child and the meal record both exist in your organisation | The form on Special Dietary Accommodations, always fails |
| List meal substitutions | Filterable by child, meal record and site | Substitution History on Special Dietary Accommodations |
| Look up one substitution | No screen reaches it | |
| Update a substitution | Loses its own audit trail entry | No screen was ever built for it |
| Remove a substitution | A gentle removal that hides rather than erases | No screen was ever built for it |
| Look up the allergen cross-reference | Active CACFP participants with a recorded allergy | Allergen Cross-Reference on Special Dietary Accommodations, works |
| List approved substitution items | Creditable food items | No screen reaches it. This lookup is missing PTRS's usual organisation check, see below |
Recording a substitution needs a site, a meal record, a child, the standard menu item, the substituted item and a basis, all filled in. The basis must be one of three values PTRS recognises; the form offers four choices and none of them matches. Whether it meets the meal pattern is stored exactly as ticked, with no check behind it.
This lookup asks for creditable food items and leaves out the check that keeps it to your own organisation, a food item does not carry PTRS's usual automatic organisation boundary the way most records do, and this is the one place in the module that forgets to add the check by hand.
So this action would return the food catalogue of every organisation in PTRS to anyone who could reach it, and it is governed by the same rule as the rest of the module.
Nothing calls it today, and the catalogue is empty in every copy of PTRS, so the exposure today is nil. Both of those are accidents of other defects rather than real safeguards. Six other records sit in the same unguarded position and are safe only because every actual use of them adds the organisation check by hand: the food review queue, meal pattern rules and their sets, serving requirements, age-group mappings, and recipe crediting profiles.
Medical dietary statements
Four things, none with a screen: creating, listing, looking up and updating a medical dietary statement. Creating one is described in PTRS's own design as following the federal rule for a physician's order.
PTRS defines Active, Expired, Superseded and Revoked statuses for a statement. Only updating one can change its status, and nothing calls that action.
Allergy emergency protocols
Six things, none with a screen: creating, listing, looking up and updating a protocol, a staff-review step, and a lookup PTRS's own design describes as a meal-service banner for a site.
PTRS defines four severities for an allergy: Mild, Moderate, Severe and Life-Threatening. No screen renders any of it.
Requests that always fail
Eight of the twenty-two reachable actions fail on every call. Seven send a blank value where PTRS needs a real record; one sends "every site" where PTRS needs one.
| Screen and control | Why it fails |
|---|---|
| Cycle Menu Planning, New Cycle Menu | Who created it is never sent, and PTRS requires it. The programme and site scope sent are also not values PTRS recognises |
| Menu Template Library, New Template | The pre-check status is never sent, and PTRS requires it. Prep complexity is Low, Medium or High, none of which PTRS recognises |
| Inventory Management, Record Transaction | Who transacted it is sent blank |
| Inventory Management, summary tiles | Asks for "every site" where PTRS needs one |
| Procurement & Vendors, Vendor | The site is sent blank |
| Procurement & Vendors, New Order | The site is sent blank, and the amount is sent as zero against a rule requiring more than zero |
| Buy American Compliance, New Record | The site and the food item are sent blank |
| Special Dietary Accommodations, Record Meal Substitution | The site and the meal record are sent blank, plus a basis value PTRS does not define |
Messages PTRS can give
| What you did | What PTRS says |
|---|---|
| Your account has no organisation | "Organization context is required." Every action on this page checks this first |
| Sent a programme, season or site scope PTRS does not know, on a cycle menu | A message naming the value as invalid |
| Tried to update or look up a cycle menu or template that does not exist | "Not found," naming which one |
| Sent a meal type, prep complexity or pre-check status PTRS does not know | A message naming the value as invalid |
| Sent a food component or serving unit PTRS does not know | A message naming the value as invalid. These two messages are built differently from the rest of this module's messages, so they carry no fixed category of their own |
| Asked for a food item, rule set or review-queue item that does not exist | "Not found," naming which one |
| Sent an inventory transaction type PTRS does not know | A message naming the value as invalid |
| Asked for an inventory item that does not exist | "Not found" |
| Tried to move more stock than is on hand | "Insufficient inventory," naming what was asked for and what is available |
| Tried to create a vendor with a tax id already in use | "A vendor with Tax ID '…' already exists." |
| Asked for a vendor that does not exist | "Not found" |
| Sent a procurement method PTRS does not know | A message naming the value as invalid |
| Asked for a purchase order that does not exist, or tried an action its status does not allow | A message naming the problem |
| Sent a date PTRS cannot read | A message naming the value as invalid |
| Asked for a Buy American record that does not exist, or sent an exception type or status PTRS does not know | A message naming the problem |
| Asked for a site transfer that does not exist, or sent a status PTRS does not know | A message naming the problem |
| Sent a substitution basis PTRS does not know, or asked for a substitution, child or meal record that does not exist | A message naming the problem |
Where to go next
- Work the menu and food screens
- Work the inventory and procurement screens
- Work the special dietary screen
- Procurement analytics, the three reports with a narrower rule
- What makes a meal reimbursable
Checked against PTRS on 7 September 2026.