prior-approval-extraction-udm¶
prior-approval-extraction-udm0.1.0noneTags: prior-approval post-award modifications federal-awards rtc 2-cfr-200 compliance udm structured-extraction json
Audience: sponsored-programs-staff, post-award-teams, ingest-pipelines
Manifestations in repo: prompt.md
Extracts all prior-approval requirements from a federal award document into a structured JSON object suitable for driving a tracking system of activities that need federal-agency authorization before they can be executed. Produces three logical buckets (budget-related, scope/timeline, approval procedures table) plus a list of Research Terms and Conditions (RTC) waivers and expanded-authority delegations.
Output contract: schema.json
Contract scope: repo-local, UDM-aligned
Inputs¶
Full text of a federal award notice / agreement / terms-and-conditions document — pasted text, attached PDF/DOCX, or URL. Optional knowledge-base context from 2 CFR 200 (Uniform Guidance) or the Research Terms and Conditions is injected by the runtime workflow but not required by the prompt itself.
Outputs¶
A single JSON object with:
- Scalar award metadata —
award_number - Three logical buckets:
budget_approvals—{rebudgeting_thresholds, equipment_approvals, subaward_approvals}scope_timeline_approvals—{pi_change_requirements, nce_requirements, foreign_travel_approvals}approval_procedures— array of{approval_type, threshold, documentation, authority, timeline, consequences}rtc_waivers— flat list of waived approvals
See schema.json for the authoritative definition and prompt.md for the encoding rules (verbatim threshold quotation, one-row-per-approval-type rule for the procedures table, and the placement contract that keeps procedure mechanics on the row rather than in the narrative bucket).
Contract scope¶
Repo-local, UDM-aligned. Per-row entries in approval_procedures resolve downstream to UDM Modification.Requires_Prior_Approval; budget_approvals.subaward_approvals resolves to Subaward. The three logical buckets do not duplicate any shared UDM schema — they are repo-local to this component and mirror the deliverable produced by the prior-approval-extraction Vandalizer workflow in the ui-insight/ProcessMapping process-mapping corpus.
Triad integration¶
- Evaluation datasets: none yet — planned: an authorized, de-identified federal award notice with explicit equipment, foreign-travel, and PI-substitution approval thresholds; a separate case for an RTC-eligible award with documented waivers.
- Harness notes: canonical manifestation is
prompt.md. Validation surface isschema.json. The companion top-levelworkflows/prior-approval-extractionVandalizer workflow at v0.1.0 implements the contract as a single Extraction task plus a Consolidation Prompt; record both single-call and post-consolidation signals when both are available. - Shared UDM relationship: aligned, not owning. Per-row entries match the
Modification.Requires_Prior_ApprovalandSubawardUDM conventions but this component does not redefine UDM tables.
Runtime topology — the Vandalizer workflow¶
The canonical runtime for this component is the prior-approval-extraction workflow shipped at the top level of this repo. The single source of truth is workflows/prior-approval-extraction/manifest.yaml; the companion .vandalizer.json envelope is generated by scripts/build_vandalizer_workflows.py and committed alongside. The runtime mirrors the source ui-insight/ProcessMapping/workflows/prior-approval-extraction/ workflow:
- Step 1 (Extraction) — one Extraction task with an embedded SearchSet whose item titles mirror this component's schema field names.
- Step 2 (Consolidation Prompt) — assembles the extraction fragment into the schema-conformant object, normalizes the
approval_procedurestable into per-row objects, and ensuresrtc_waiverscovers only waived approvals (not kept approvals).
Regenerate the workflow JSON whenever this component bumps MINOR or MAJOR (or whenever the workflow manifest changes); CI fails if the committed .vandalizer.json drifts from a fresh build.
Manifestations¶
prompt.md— canonical, LLM-agnostic prompt
Evals¶
See evals/ for reference inputs and known-good outputs. Initial cases pending: a federal award notice with explicit equipment, foreign-travel, and PI-substitution approval thresholds; a separate case for an RTC-eligible award with documented waivers.
Provenance¶
Authored 2026-04-30 against the prior-approval-extraction (Workflow_ID: WF-PRIOR-APPROVAL-EXTRACTION) process-mapping workflow in ui-insight/ProcessMapping at commit b7176b0c913833a205efdb5e4ba00c17ff88af0f, which was built from walkthrough transcripts of post-award sponsored-programs staff working through prior-approval procedures.
Contract scope¶
-
Output format:
json_object -
Contract scope:
shared_udm_semantics_repo_local_schema -
Validation surfaces:
json_schema -
Schema entrypoints:
# -
Notes: Repo-local prior-approval-tracking contract. Three logical buckets (budget_approvals, scope_timeline_approvals, approval_procedures table) plus an rtc_waivers list. Per-row entries resolve to UDM Modification.Requires_Prior_Approval; subaward approvals resolve to Subaward.
-
Machine-readable catalog entry:
component_catalog.json
Triad integration¶
-
UDM alignment:
shared_udm_semantics_repo_local_schema— approval_procedures rows resolve to UDM Modification.Requires_Prior_Approval; budget_approvals.subaward_approvals resolves to Subaward. The three-bucket shape itself is repo-local. -
Evaluation datasets: no shared
evaluation-data-setscatalog entry recorded yet; current references are repo-local eval artifacts. -
Harness notes: Validate JSON outputs against schema.json. Canonical single-call invocation surface is prompt.md. The companion top-level workflows/prior-approval-extraction Vandalizer workflow at v0.1.0 implements the same contract as a single Extraction task plus a Consolidation Prompt that normalizes the approval_procedures table into per-row objects; campaign authors should record both single- call and post-consolidation signals when both are available.
-
Related component:
award-compliance-extraction-udm(drilldown_of) — award-compliance-extraction-udm.compliance_framework.prior_approval_requirements is a categorized list only; this component drills into the procedural mechanics (threshold / documentation / authority / timeline / consequences) of each approval type.
Prompt body¶
Source: prompt.md.
Show prompt
Prior Approval Extraction — UDM JSON¶
Purpose: Extract all prior-approval requirements from a federal award document into a structured JSON object suitable for driving a tracking system of activities that need federal-agency authorization before they can be executed.
Expected input: Full text of a federal award notice / agreement / terms-and-conditions document, optionally with Research Terms and Conditions (RTC) or 2 CFR 200 as knowledge-base context.
Expected output: A single JSON object that validates against
schema.json. No prose, no markdown outside the JSON.
When to use this contract¶
This is the prior-approval cut of a federal award. It produces three logical buckets — budget-related, scope and timeline, and administrative approvals — plus a normalized approval procedures table (threshold / documentation / authority / timeline / consequences) and a list of RTC waivers delegated to the recipient. UDM-aligned: requires_prior_approval flags resolve to UDM Modification.Requires_Prior_Approval; subaward approval requirements resolve to Subaward.
This component does not cover the broader compliance framework (financial reporting, high-risk conditions, audit thresholds) — that lives in award-compliance-extraction-udm. It does not cover the FFR submission cadence — that lives in ffr-management-extraction-udm.
Prompt¶
You are extracting prior-approval requirements from a federal award document. Federal awards typically distinguish three families of activities that require sponsor authorization before they can occur: budget changes, scope/timeline changes, and administrative changes (PI substitutions, foreign travel, subawards, etc.). Capture every approval the document calls out, plus the procedures the recipient must follow.
Be 100% accurate. Quote thresholds ("$25,000", "25%", "three months") verbatim; never paraphrase a numeric threshold. When a category is not addressed, set the field to null. When the document explicitly waives an approval (typically via Research Terms and Conditions or expanded authorities), capture the waiver in rtc_waivers.
Search the entire document for content in or near sections titled Prior Approval, Pre-approval, Written Approval, Agency Approval, 2 CFR 200, or Research Terms and Conditions. Keywords to follow: prior approval, pre-approval, written approval, agency approval, permission, authorize, CFR 200, RTC, waive, delegate, threshold.
Return a single JSON object that validates against schema.json with these top-level keys:
-
award_number— federal award identification number (FAIN). String ornull. -
budget_approvals— object covering money-driven approvals: -
rebudgeting_thresholds— string ornull. -
equipment_approvals— string ornull. -
subaward_approvals— string ornull. -
scope_timeline_approvals— object covering scope and time-driven approvals: -
pi_change_requirements— string ornull. -
nce_requirements— string ornull. -
foreign_travel_approvals— string ornull. -
approval_procedures— array of{approval_type, threshold, documentation, authority, timeline, consequences}objects. Each row in the source approval-procedures table becomes one entry. Empty array when the document has no procedures table. -
rtc_waivers— array of strings naming each Research Terms and Conditions waiver or expanded-authority delegation the document calls out. Empty array when none are stated.
Encoding rules¶
-
One row per approval type in
approval_procedures. A single row that says "Equipment > $5,000 requires written approval from PO within 30 days" becomes one entry withapproval_type: "Equipment over $5,000",threshold: "$5,000",authority: "Program Officer",timeline: "30 days". Quote dollar thresholds and day-counts verbatim. -
Per-row text goes on the row, not in the top-level bucket. If the procedures table covers an approval type, the corresponding
budget_approvals.*orscope_timeline_approvals.*field should be a narrative description; the procedure mechanics belong in the table row. -
rtc_waiversis for waived approvals only — items that the RTC or agency expanded authority lets the recipient handle without sponsor sign-off. Do not duplicate the kept approvals here. -
Boolean flags must be derivable. Downstream UDM ingest expects to be able to compute
Modification.Requires_Prior_Approvalfrom the presence of an entry; only state an approval requirement when the document actually requires one. -
Do not output any text outside the single JSON object.
Output¶
A single JSON object. No surrounding markdown.
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/prior-approval-extraction-udm/schema.json",
"title": "Prior Approval Extraction \u2014 UDM Output",
"description": "JSON contract for prior-approval requirements extracted from a federal award document. Produces three logical buckets (budget approvals, scope/timeline approvals, approval procedures table) plus an RTC-waiver list. UDM-aligned: per-row entries resolve to UDM Modification.Requires_Prior_Approval; subaward approvals resolve to Subaward.",
"version": "0.1.0",
"type": "object",
"additionalProperties": false,
"required": [
"budget_approvals",
"scope_timeline_approvals",
"approval_procedures",
"rtc_waivers"
],
"properties": {
"award_number": {
"type": [
"string",
"null"
],
"description": "Federal Award Identification Number (FAIN) as printed on the award. Resolves downstream to UDM Award.Federal_Award_ID."
},
"budget_approvals": {
"type": "object",
"additionalProperties": false,
"properties": {
"rebudgeting_thresholds": {
"type": [
"string",
"null"
],
"description": "Re-budgeting thresholds and restrictions requiring prior approval. Quote dollar/percent thresholds verbatim."
},
"equipment_approvals": {
"type": [
"string",
"null"
],
"description": "Equipment-purchase approval requirements (typically tied to a $ threshold)."
},
"subaward_approvals": {
"type": [
"string",
"null"
],
"description": "Subcontracting / subaward approval requirements. Resolves downstream to UDM Subaward."
}
}
},
"scope_timeline_approvals": {
"type": "object",
"additionalProperties": false,
"properties": {
"pi_change_requirements": {
"type": [
"string",
"null"
],
"description": "Requirements for PI or key-personnel changes (substitution, reduction in effort, etc.)."
},
"nce_requirements": {
"type": [
"string",
"null"
],
"description": "No-cost extension request requirements (notice period, supporting documentation, sponsor route)."
},
"foreign_travel_approvals": {
"type": [
"string",
"null"
],
"description": "Foreign travel approval requirements when the award imposes them."
}
}
},
"approval_procedures": {
"type": "array",
"description": "Per-row procedure mechanics from the source approval-procedures table. Each entry covers one approval type. Empty array when the document has no procedures table.",
"items": {
"type": "object",
"additionalProperties": false,
"required": [
"approval_type"
],
"properties": {
"approval_type": {
"type": "string",
"minLength": 1,
"description": "Short label for the approval type (e.g., 'Equipment over $5,000', 'Foreign travel', 'PI substitution')."
},
"threshold": {
"type": [
"string",
"null"
],
"description": "Dollar or percent threshold that triggers the approval. Quote verbatim. Null when threshold-less."
},
"documentation": {
"type": [
"string",
"null"
],
"description": "Required supporting documentation."
},
"authority": {
"type": [
"string",
"null"
],
"description": "Approving authority (e.g., 'Program Officer', 'Grants Management Specialist')."
},
"timeline": {
"type": [
"string",
"null"
],
"description": "Time window for review or required notice period. Quote verbatim."
},
"consequences": {
"type": [
"string",
"null"
],
"description": "Consequences of proceeding without approval."
}
}
}
},
"rtc_waivers": {
"type": "array",
"description": "Research Terms and Conditions waivers and expanded-authority delegations \u2014 approvals the recipient can handle without sponsor sign-off. Empty array when none are stated.",
"items": {
"type": "string",
"minLength": 1
}
}
}
}
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-04-30¶
- Initial experimental release.
- Schema derived from the
prior-approval-extractionv2 Vandalizer workflow inui-insight/ProcessMapping(single Extraction task + Formatting task; 8 source fields). - Three logical buckets (
budget_approvals,scope_timeline_approvals,approval_procedures) plusrtc_waiversmatch the deliverable produced by the canonical extraction prompt. - Scalar
award_numberfield added on top of the source workflow's eight Extraction fields so a single extraction resolves cleanly to UDMAward. approval_proceduresrealized as an array of{approval_type, threshold, documentation, authority, timeline, consequences}objects (rather than the sourceTablefield) so per-row procedure mechanics are attached to the correct approval type.- UDM column bindings preserved: per-row entries resolve to
Modification.Requires_Prior_Approval;budget_approvals.subaward_approvalsresolves toSubaward. - No eval cases yet — status
experimentaluntil at least one golden extraction is added underevals/cases/.