Skip to content

cost-consistent-treatment-check

Slugcost-consistent-treatment-check
Version0.1.0
Statusexperimental
Last fully evaluatednone
Eval stateno validated eval cases
Categoryreview
Domainresearch-administration
Manifestationsprompt
Created2026-05-21
Updated2026-05-21

Tags: cost-allowability post-award consistent-treatment indirect-cost review research-administration

Audience: post-award-staff, sponsored-programs-staff, grant-accountants

Manifestations in repo: prompt.md

Checks whether a single expense is accorded consistent treatment under 2 CFR 200.403(d) and 200.405(c) — that it is not direct-charged to the award when costs incurred for the same purpose in like circumstances are recovered as indirect (F&A) costs. It is one of the single-requirement checks in the federal cost-allowability analysis workflow and emits a structured finding consumed by the final determination step.

Output contract: schema.json Contract scope: repo-local

Inputs

A normalized expense record, extracted award terms, and a regulated-activity classification from the Stage 1 components of the cost-allowability-analysis workflow. Any may be partial.

Outputs

A single structured finding — see schema.json — carrying a status of pass, issue, not_allowable, needs_info, or not_applicable, with rationale, cited evidence, follow-up actions, and a confidence level.

The check

Identifies cost types normally recovered through the indirect rate — administrative and clerical effort, office supplies, postage, local telephone, memberships — and tests whether direct-charging them here is consistent and free of double recovery, applying the 2 CFR 200.413(c) conditions for direct-charged administrative or clerical salaries. Unambiguous direct project costs return not_applicable.

Contract scope

Repo-local. The finding object is the shared single-requirement finding contract used across the cost-allowability check components; check_id, check_name, and regulation_anchor are fixed for this check. It is not a shared AI4RA-UDM schema.

Triad integration

  • Evaluation datasets: none yet — repo-local synthetic coverage planned.
  • Harness notes: canonical manifestation is prompt.md; validation surface is schema.json. Invoked as a Step 2 task of the cost-allowability-analysis workflow.
  • Shared UDM relationship: aligned to sponsored-project cost-allowability semantics; does not define or depend on a shared UDM schema.

Manifestations

  • prompt.md — canonical, LLM-agnostic prompt

Evals

See evals/.

Provenance

Created 2026-05-21 as a single-requirement check in the federal cost-allowability analysis component set, anchored to 2 CFR 200.403(d) and 200.405(c).

Contract scope

  • Output format: json_object

  • Contract scope: repo_local_single_requirement_finding_contract

  • Validation surfaces: json_schema

  • Schema entrypoints: #

  • Notes: Repo-local single-requirement allowability finding for the consistent cost treatment check (2 CFR 200.403(d), 200.405(c)). Emits the shared cost-allowability finding object.

  • Machine-readable catalog entry: component_catalog.json

Triad integration

  • UDM alignment: repo_local_single_requirement_finding_contract — Aligns to sponsored-project cost-allowability semantics; the finding object is a prompt-library contract shared across the cost-allowability check components, not a shared UDM schema.

  • Evaluation datasets: no shared evaluation-data-sets catalog entry recorded yet; current references are repo-local eval artifacts.

  • Harness notes: Validate JSON output against schema.json. Canonical invocation surface is prompt.md. Invoked as a Step 2 task of the workflows/cost-allowability-analysis Vandalizer workflow.

Prompt body

Source: prompt.md.

Show prompt

Consistent Cost Treatment Check

Purpose: Decide whether a single expense is accorded consistent treatment — not direct-charged when the same purpose is recovered as an indirect cost.

Expected input: A normalized expense record, extracted award terms, and a regulated-activity classification.

Expected output: One structured finding conforming to schema.json.

This component is a single-requirement check in the federal cost-allowability analysis workflow. It evaluates consistent direct/indirect treatment only.

Prompt

You are a federal cost-allowability reviewer performing one specific check: Consistent Cost Treatment under 2 CFR 200.403(d) and 200.405(c). Review one expense and return a single structured finding for this check only — do not evaluate any other allowability requirement.

Return only a single JSON object conforming to the finding contract. No prose, Markdown, comments, or code fences.

Input

You receive a normalized expense record, extracted award terms, and a regulated-activity classification, produced by the upstream steps of the cost-allowability analysis workflow. Any of these may be partial or missing.

What this check evaluates

Whether the cost is accorded consistent treatment under 2 CFR 200.403(d) and 200.405(c). A cost may not be assigned to a Federal award as a direct cost if any other cost incurred for the same purpose in like circumstances has been allocated to a Federal award as an indirect (facilities and administrative, F&A) cost.

Costs of administrative and clerical salaries, office supplies, postage, local telephone service, and memberships are normally treated as indirect (F&A) costs. Under 2 CFR 200.413(c), administrative or clerical salaries may be charged directly only when those services are integral to the project, the individuals are specifically identified with the project, the costs are explicitly included in the budget or have prior written approval, and the costs are not also recovered as indirect costs.

Determine whether the cost type is one normally recovered through the indirect rate, and if so whether direct-charging here is consistent and free of double recovery.

Decision rule

Set status to exactly one of:

  • pass — the cost type is treated consistently; charging it direct (or indirect) here matches institutional practice, and it is not also recovered through the indirect cost rate.

  • issue — the cost type is one often treated as indirect (administrative or clerical effort, office supplies, postage, local telephone, memberships) and direct-charging needs an explicit unlike-circumstances justification to avoid inconsistent treatment or double recovery.

  • not_allowable — the evidence shows the same purpose is charged directly to this award and also recovered through the indirect cost pool.

  • needs_info — there is not enough evidence about how the institution normally treats this cost type.

  • not_applicable — the cost type is unambiguously a direct project cost (for example project-specific scientific supplies or project equipment) with no consistent-treatment concern.

Use the most conservative status the evidence supports. Never record pass when the evidence needed to satisfy the requirement is absent — that is needs_info.

Evidence and non-fabrication

  • Ground every finding in the supplied evidence. Populate evidence with short source_label / detail pairs (e.g., expense:description, expense:gl_account, award_terms:indirect_cost).

  • Do not invent institutional accounting practice or budget approvals. A missing rule input is needs_info, never pass.

Output

Emit the finding object:

  • check_id — "cost-consistent-treatment"

  • check_name — "Consistent Cost Treatment"

  • regulation_anchor — "2 CFR 200.403(d), 200.405(c)"

  • expense_id — the expense reference from the input, or null

  • status — one of the values above

  • summary — one sentence stating the outcome

  • rationale — the evidence-grounded reasoning

  • evidence — array of {source_label, detail}

  • follow_up_actions — concrete actions needed before the cost is approved or charged; empty array when none

  • confidence — "high", "medium", or "low", reflecting evidence completeness

Produce the finding now.

Output schema

Source: schema.json.

Show schema.json
{

  "$schema": "https://json-schema.org/draft/2020-12/schema",

  "$id": "https://github.com/AI4RA/prompt-library/components/cost-consistent-treatment-check/schema.json",

  "title": "Consistent Cost Treatment Check \u2014 Finding",

  "description": "Structured single-requirement allowability finding for the consistent cost treatment check (2 CFR 200.403(d), 200.405(c)). Part of the federal cost-allowability analysis workflow.",

  "version": "0.1.0",

  "type": "object",

  "additionalProperties": false,

  "required": [

    "check_id",

    "check_name",

    "regulation_anchor",

    "status",

    "summary",

    "rationale",

    "evidence",

    "follow_up_actions",

    "confidence"

  ],

  "properties": {

    "check_id": {

      "const": "cost-consistent-treatment",

      "description": "Stable identifier for this check."

    },

    "check_name": {

      "const": "Consistent Cost Treatment",

      "description": "Human-readable check name."

    },

    "regulation_anchor": {

      "const": "2 CFR 200.403(d), 200.405(c)",

      "description": "Primary regulatory anchor for this check."

    },

    "expense_id": {

      "type": [

        "string",

        "null"

      ],

      "description": "Expense reference carried from the input."

    },

    "status": {

      "type": "string",

      "enum": [

        "pass",

        "issue",

        "not_allowable",

        "needs_info",

        "not_applicable"

      ],

      "description": "Outcome of this check."

    },

    "summary": {

      "type": "string",

      "minLength": 1,

      "description": "One-sentence statement of the outcome."

    },

    "rationale": {

      "type": "string",

      "minLength": 1,

      "description": "Evidence-grounded reasoning behind the status."

    },

    "evidence": {

      "type": "array",

      "description": "Evidence relied on. May be empty only when status is not_applicable.",

      "items": {

        "type": "object",

        "additionalProperties": false,

        "required": [

          "source_label",

          "detail"

        ],

        "properties": {

          "source_label": {

            "type": "string",

            "minLength": 1,

            "description": "Short source label, e.g. award_terms:indirect_cost."

          },

          "detail": {

            "type": "string",

            "minLength": 1,

            "description": "Concise summary of what the source shows."

          }

        }

      }

    },

    "follow_up_actions": {

      "type": "array",

      "description": "Concrete actions needed before the cost is approved or charged. Empty array when none.",

      "items": {

        "type": "string",

        "minLength": 1

      }

    },

    "confidence": {

      "type": "string",

      "enum": [

        "high",

        "medium",

        "low"

      ],

      "description": "Reviewer confidence in this finding."

    }

  }

}

Changelog

Source: CHANGELOG.md.

All notable changes to this component. Versions follow semver: MAJOR for output-contract breaks, MINOR for backward-compatible additions, PATCH for wording or clarity.

[0.1.0] — 2026-05-21

  • Initial experimental release.
  • Single-requirement allowability check anchored to 2 CFR 200.403(d) and 200.405(c).
  • Emits the shared cost-allowability finding object (status, summary, rationale, evidence, follow_up_actions, confidence) with check_id "cost-consistent-treatment".
  • No eval cases yet — status experimental until at least one golden finding is added under evals/cases/.