regulated-activity-classifier¶
regulated-activity-classifier0.1.0noneTags: cost-allowability compliance irb iacuc biosafety classification research-administration
Audience: post-award-staff, sponsored-programs-staff, research-compliance-staff
Manifestations in repo: prompt.md
Flags whether an expense implicates an activity that requires institutional compliance oversight — human subjects (IRB), animals (IACUC), or biosafety (IBC) — based on expense-level signals such as the description, vendor, and account coding. It is the detection layer of the federal cost-allowability analysis workflow.
Output contract: schema.json
Contract scope: repo-local
Inputs¶
A normalized expense record (see expense-transaction-extraction), optionally with award context. The component works from expense-level signals, not from the general nature of the project.
Outputs¶
A single JSON object — see schema.json — with a per-regime decision (triggered, rationale, trigger_signals) for human subjects, animals, and biosafety, plus an any_regime_triggered roll-up and a one-sentence summary.
The classifier is deliberately inclusive: a plausible signal is enough to flag a regime. Its purpose is to surface expenses for a reviewer to verify against the protocol-approval system, not to make a final determination.
Contract scope¶
Repo-local. The classification record is a prompt-library detection contract that routes the downstream protocol-approval-allowability-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 isschema.json. Invoked as a Step 1 task of thecost-allowability-analysisworkflow; its output routes the protocol-approval check in Step 2. - Shared UDM relationship: aligned to research-compliance semantics; does not define or depend on a shared UDM schema.
Manifestations¶
prompt.md— canonical, LLM-agnostic prompt
Related components¶
protocol-approval-allowability-check— consumes the regime flags and verifies that a current, in-scope protocol approval covers the expense.
Evals¶
See evals/.
Provenance¶
Created 2026-05-21 as the detection layer of the federal cost-allowability analysis component set, to catch expenses tied to IRB-, IACUC-, and IBC-regulated activities.
Contract scope¶
-
Output format:
json_object -
Contract scope:
repo_local_detection_contract -
Validation surfaces:
json_schema -
Schema entrypoints:
# -
Notes: Repo-local classification record flagging whether an expense implicates an activity requiring institutional compliance oversight — human subjects (IRB), animals (IACUC), or biosafety (IBC). Detection-layer contract for the cost-allowability analysis workflow; not a shared AI4RA-UDM schema.
-
Machine-readable catalog entry:
component_catalog.json
Triad integration¶
-
UDM alignment:
repo_local_detection_contract— Aligns to research-compliance semantics; the per-regime classification shape is a prompt-library contract and is not a shared UDM schema. -
Evaluation datasets: no shared
evaluation-data-setscatalog 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 1 task of the workflows/cost-allowability-analysis Vandalizer workflow; its output routes the protocol-approval check in Step 2.
-
Related component:
protocol-approval-allowability-check(gates) — The regime flags determine whether the protocol-approval check applies.
Prompt body¶
Source: prompt.md.
Show prompt
Regulated Activity Classifier¶
Purpose: Flag whether an expense implicates an activity that requires institutional compliance oversight — human subjects (IRB), animals (IACUC), or biosafety (IBC).
Expected input: A normalized expense record, optionally with award context.
Expected output: One JSON object conforming to
schema.json.
This component is the detection layer of the federal cost-allowability analysis workflow. It does not verify protocol approval — it routes the expense by flagging which oversight regimes apply. The downstream protocol-approval-allowability-check does the verification.
Prompt¶
You are a research-compliance triage assistant. Given an expense, determine whether it implicates an activity that requires institutional compliance oversight, and emit one structured classification record.
Return only a single JSON object. No prose, Markdown, comments, or code fences.
The three regimes¶
Evaluate each regime independently:
-
human_subjects — research involving human participants, their data, or their identifiable specimens. Common expense signals: participant incentives or compensation (gift cards, ClinCards, cash, "subject payment"), survey or panel platforms (Prolific, MTurk, paid Qualtrics panels, Centiment), interview transcription, recruitment advertising, consent-form translation or interpretation, specimen-collection kits tied to human data.
-
animal — research involving live vertebrate animals. Common expense signals: animal purchases (Jackson Laboratory, Charles River, Envigo), vivarium / per-diem / cage / ULAR / DLAR housing charges, veterinary services, lab-animal feed, bedding, or enrichment, anesthetic or euthanasia agents tied to animal use.
-
biosafety — research involving recombinant or synthetic nucleic acids, viral vectors, select agents or toxins, human or non-human-primate cells, blood, or tissue, or other biohazards. Common expense signals: viral vectors (lentivirus, AAV), plasmids and recombinant reagents, select agents or toxins, biosafety cabinets, BSL-2/3 supplies, biohazard or sharps disposal, autoclave service tied to biohazard handling.
Method¶
-
Read the expense description, vendor, account coding, and any award context.
-
For each regime, decide whether the expense plausibly implicates that regulated activity. Be inclusive at the flagging stage — the purpose is to surface expenses for a reviewer to verify, not to make a final call. A plausible signal is enough to set
triggered: true. -
When you flag a regime, record the concrete signals you relied on in
trigger_signalsand explain the inference inrationale. -
When a regime is not implicated, set
triggered: false, give a short reason inrationale, and leavetrigger_signalsan empty array. -
Do not infer a regime from the mere existence of a research award. Flag on expense-level signals, not on the general nature of the project.
Output fields¶
-
expense_id— carried from the input when present. -
human_subjects,animal,biosafety— each an object withtriggered(boolean),rationale(string), andtrigger_signals(array of strings). -
any_regime_triggered— true when at least one regime is triggered. -
summary— one sentence stating which regimes were flagged and what a reviewer should verify next.
Produce the JSON object 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/regulated-activity-classifier/schema.json",
"title": "Regulated Activity Classifier \u2014 Output",
"description": "Classification record flagging whether an expense implicates an activity that requires institutional compliance oversight \u2014 human subjects (IRB), animals (IACUC), or biosafety (IBC). Detection-layer contract for the federal cost-allowability analysis workflow.",
"version": "0.1.0",
"type": "object",
"additionalProperties": false,
"$defs": {
"regime": {
"type": "object",
"additionalProperties": false,
"required": [
"triggered",
"rationale",
"trigger_signals"
],
"properties": {
"triggered": {
"type": "boolean",
"description": "True when the expense plausibly implicates this regulated activity."
},
"rationale": {
"type": "string",
"minLength": 1,
"description": "Explanation of the flag decision."
},
"trigger_signals": {
"type": "array",
"description": "Concrete expense signals relied on. Empty array when not triggered.",
"items": {
"type": "string",
"minLength": 1
}
}
}
}
},
"required": [
"human_subjects",
"animal",
"biosafety",
"any_regime_triggered",
"summary"
],
"properties": {
"expense_id": {
"type": [
"string",
"null"
],
"description": "Expense reference carried from the input."
},
"human_subjects": {
"$ref": "#/$defs/regime",
"description": "Human-subjects (IRB) oversight regime."
},
"animal": {
"$ref": "#/$defs/regime",
"description": "Animal-care (IACUC) oversight regime."
},
"biosafety": {
"$ref": "#/$defs/regime",
"description": "Biosafety (IBC) oversight regime."
},
"any_regime_triggered": {
"type": "boolean",
"description": "True when at least one regime is triggered."
},
"summary": {
"type": "string",
"minLength": 1,
"description": "One-sentence statement of flagged regimes and what to verify next."
}
}
}
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.
- Per-regime classification (human subjects / animal / biosafety), each with
triggered,rationale, andtrigger_signals, plus anany_regime_triggeredroll-up. - Inclusive flagging posture: a plausible expense-level signal sets
triggered: trueso the expense is surfaced for reviewer verification. - No eval cases yet — status
experimentaluntil at least one golden classification is added underevals/cases/.