section2-personnel-eligibility-udm¶
section2-personnel-eligibility-udm0.1.0noneTags: section2 veras pre-award personnel-eligibility apm-45-22 dga-mapping pi-eligibility banner udm structured-extraction json
Audience: sponsored-programs-staff, pre-award-teams
Manifestations in repo: prompt.md
Automates the VERAS Section 2 review at the University of Idaho — the most-requested SPA automation in the source process map. Extracts every PI / Co-PI / Senior Key Person from VERAS Section 2, verifies employment via Banner NBAJOBS, cross-references each PI / Co-PI job title against APM Section 45.22 eligibility criteria, compiles timesheet org codes, maps org codes to Departmental Grant Administrators (DGAs) using the institutional Department List, and cross-references required DGAs against Section 2 participants. Covers the source PROC-SPA-SECTION2-REVIEW process (13 steps, 77% automatable per the source process map).
Output contract: schema.json
Contract scope: repo-local, UDM-aligned
Inputs¶
Three workflow documents must be uploaded together in Vandalizer:
- VERAS proposal package — at minimum Sections 2.1 (PI + Co-PIs) and 2.2A (Senior / Key Personnel).
- Banner NBAJOBS extract — current employment records for every person on the proposal (export, CSV, or PDF).
- Institutional Department List — the org-code → department → DGA mapping table.
The APM 45.22 eligible-titles list is referenced from the knowledge base / search corpus. The source workflow notes that an APM 45.22 custom knowledge base must be built and loaded before the workflow runs in production.
When any of the three workflow documents is missing, the contract requires the workflow to emit non-compliant defaults (found_in_banner: false, eligibility_status: "Review Required", empty dga_names) and capture the gap in verification_summary.notes. The contract never silently assumes employment, eligibility, or DGA mapping.
Outputs¶
A single JSON object with seven structured blocks:
personnel_extraction— Section 2.1 personnel (PI + Co-PIs, required minItems 1), Section 2.2A personnel (Senior / Key), total count, and the two derived sub-lists (pi_copis_requiring_eligibility,personnel_requiring_org_code_only)personnel_verification— per-person{name, found_in_banner, current_employee, job_title, timesheet_org_code, notes}recordseligibility_check— per-PI / Co-PI{name, role, job_title, eligibility_status, evidence}records with three-value status enum (Eligible,Not Eligible,Review Required)org_code_compilation— per-org-code{org_code, personnel_names, count}recordsdga_mapping— per-org-code{org_code, department_name, dga_names}records (supports multiple DGAs per code)dga_cross_reference— per-DGA{dga_name, org_codes, listed_in_section_2, action_needed}records with two-value action enumverification_summary— aggregate counts, lists of flagged personnel / DGAs / unmapped codes, and source-document gap notes
See schema.json for the authoritative definition and prompt.md for encoding rules (ambiguous-title flagging, no-assumption rules, dual-DGA handling).
Contract scope¶
Repo-local, UDM-aligned. The proposal record resolves to UDM Proposal; personnel resolve to UDM Personnel.First_Name / Personnel.Last_Name. The org-code → DGA mapping, the APM 45.22 eligibility surface, and the verification matrices are repo-local extensions that do not (yet) correspond to shared UDM tables.
Relationship to other components¶
| Concern | Source of truth |
|---|---|
| Section 2 PI / Co-PI eligibility (APM 45.22) + DGA mapping | section2-personnel-eligibility-udm (this component) |
| SFI disclosure + RST completion compliance | compliance-personnel-verification-udm |
| Proposal-document completeness gap analysis | proposal-document-completeness-udm |
The three pre-award compliance components are versioned independently and intended to run together on a single proposal upload to produce a comprehensive readiness review.
Triad integration¶
- Evaluation datasets: none yet — planned: a synthetic UI proposal exercise with three PI / Co-PI personnel (one eligible Professor, one ineligible Lecturer, one ambiguous Clinical Assistant Professor) and at least one missing DGA, validated by a Sponsored Programs Administrator.
- Harness notes: canonical manifestation is
prompt.md. Validation surface isschema.json. The three-document input model is identical tocompliance-personnel-verification-udm— the harness needs a workflow runner that can pass multiple workflow documents simultaneously. - Shared UDM relationship: aligned, not owning. Personnel resolve to UDM Personnel; the org-code → DGA mapping, APM 45.22 eligibility, and verification matrices are repo-local.
Runtime topology — the Vandalizer workflow¶
The canonical runtime for this component is the section2-personnel-eligibility workflow shipped at the top level of this repo. The single source of truth is workflows/section2-personnel-eligibility/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/section2-personnel-eligibility/ workflow:
- Step 1 (parallel Extraction) — two Extraction tasks mirror the source workflow one-for-one: personnel-extraction (Sections 2.1 + 2.2A with derived sub-lists) and eligibility-and-DGA-verification (Banner NBAJOBS lookups + APM 45.22 cross-references + Department List org-code → DGA mapping + Section 2 DGA cross-reference).
- Step 2 (Consolidation Prompt) — assembles the two JSON fragments into the schema-conformant seven-block object, derives the
verification_summarycounts and flag arrays, and enforces the three cross-field rules (every PI / Co-PI has an eligibility determination; every unique org code has adga_mappingrow; every DGA pulled fromdga_mappingis cross-referenced indga_cross_reference).
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 case pending: a synthetic UI proposal exercise with mixed-eligibility personnel and at least one missing DGA, validated by an SPA.
Provenance¶
Authored 2026-05-20 against the section2-personnel-eligibility (Workflow_ID: WF-SECTION2-PERSONNEL-ELIGIBILITY) process-mapping workflow in ui-insight/ProcessMapping at commit 2c1f47f46474130743af5aee44d074bcd21787e9, which was built from the PROC-SPA-SECTION2-REVIEW process map (13 steps, 77% automatable). Built explicitly in response to Michele Mattoon's request for an APM 45.22 auto-check; created to make the SPA's Section 2 review a harness-evaluatable, versioned artifact.
Contract scope¶
-
Output format:
json_object -
Contract scope:
shared_udm_semantics_repo_local_schema -
Validation surfaces:
json_schema -
Schema entrypoints:
# -
Notes: Repo-local VERAS Section 2 review contract for the University of Idaho. Seven structured blocks (personnel_extraction, personnel_verification, eligibility_check, org_code_compilation, dga_mapping, dga_cross_reference, verification_summary) covering APM 45.22 PI / Co-PI eligibility cross-checks, Banner NBAJOBS verification, timesheet org-code compilation, Department List org-code-to-DGA mapping, and per-DGA cross-reference against Section 2 participants. The workflow requires three workflow documents to be uploaded together (VERAS proposal, Banner NBAJOBS extract, Department List); the APM 45.22 eligible-titles list is consumed from the knowledge base / search corpus.
-
Machine-readable catalog entry:
component_catalog.json
Triad integration¶
-
UDM alignment:
shared_udm_semantics_repo_local_schema— section_21_personnel[].name and section_22_personnel[].name resolve to UDM Personnel.First_Name / Personnel.Last_Name; the proposal record itself resolves to UDM Proposal. The APM 45.22 eligibility surface, org-code -> DGA mapping, and per-DGA cross-reference matrices are repo-local — no shared UDM table exists for them yet. -
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/section2-personnel-eligibility Vandalizer workflow at v0.1.0 implements the contract as two parallel Extraction tasks (personnel extraction + eligibility / DGA verification) plus a Consolidation Prompt that derives the seven verification_summary counts and four flag arrays from the per-person / per-org-code / per-DGA records. Campaign authors should record both single-call and post-consolidation signals when both are available.
-
Related component:
compliance-personnel-verification-udm(sibling_pre_award_personnel_check) — Both components run against the same VERAS Section 2 personnel. section2-personnel-eligibility-udm checks APM 45.22 PI / Co-PI eligibility (role state) and DGA mapping; compliance-personnel-verification-udm checks SFI disclosure + RST completion (compliance state). -
Related component:
proposal-document-completeness-udm(sibling_pre_award_review) — Both components run on a VERAS upload during pre-award review. proposal-document-completeness-udm checks document-level inventory and gap analysis; section2-personnel-eligibility-udm checks per-person Section 2 eligibility and DGA coverage.
Prompt body¶
Source: prompt.md.
Show prompt
Section 2 Personnel Eligibility Verification — UDM JSON¶
Purpose: Automate the most-requested SPA automation at the University of Idaho: the VERAS Section 2 review. Extract every PI / Co-PI / Senior Key Person, verify each PI / Co-PI job title against APM Section 45.22 eligibility criteria, record timesheet org codes, map org codes to Departmental Grant Administrators (DGAs) using the Department List, and cross-reference DGAs against Section 2 participants — producing a verification matrix the SPA reviews in seconds.
Expected input: The VERAS proposal package (Sections 2.1 and 2.2A) PLUS a Banner NBAJOBS extract for each person and the institutional Department List, all uploaded into Vandalizer as workflow documents. The APM 45.22 eligible-titles list is consumed from the knowledge base / search corpus.
Expected output: A single JSON object that validates against
schema.json. No prose, no markdown outside the JSON.
When to use this contract¶
This component automates the SPA's most repetitive pre-award task on every proposal at the University of Idaho. The SPA must:
-
pull every PI, Co-PI, and Senior / Key Person from VERAS Sections 2.1 and 2.2A,
-
look each person up in Banner NBAJOBS to confirm current employment and capture the job title and timesheet org code,
-
cross-reference each PI / Co-PI job title against APM Section 45.22's eligible-titles list,
-
map every unique timesheet org code to its Departmental Grant Administrator (DGA) using the Department List, and
-
check that every required DGA is already listed in VERAS Section 2 (so the proposal can be approved without re-routing).
Michele Mattoon (UI SPA) explicitly requested an automation for the APM 45.22 cross-check. The source process-mapping workflow (PROC-SPA-SECTION2-REVIEW) is 77% automatable; this component covers the automatable portion and flags the ambiguous cases (clinical faculty, lecturer / adjunct, dual-DGA org codes) for manual SPA review rather than guessing.
Senior / Key Personnel in Section 2.2A do NOT require APM 45.22 eligibility checks — they require only org-code collection. The contract captures this distinction explicitly.
This component does not cover SFI / RST compliance checks — that lives in compliance-personnel-verification-udm. It does not cover the broader proposal-document gap analysis — that lives in proposal-document-completeness-udm.
Prompt¶
You are performing the SPA's Section 2 review for a federal research proposal at the University of Idaho. You will receive THREE document sources as workflow input:
-
The VERAS proposal package (Sections 2.1 = PI + Co-PIs; 2.2A = Senior / Key Personnel),
-
A Banner NBAJOBS extract for each person on the proposal, and
-
The institutional Department List mapping org codes to DGAs.
The APM 45.22 eligible-titles list is referenced from the knowledge base or search corpus — it is the authoritative list of job titles that qualify a person for PI / Co-PI status at the University of Idaho.
If any of the three workflow documents is missing, emit null in the affected fields and flag the gap in verification_summary.notes. Do not assume eligibility, employment, or DGA mapping without positive evidence.
Be 100% accurate. Quote job titles, org codes, and DGA names verbatim. When a job title is ambiguous (e.g., "Clinical Assistant Professor" — eligible only under specific conditions in APM 45.22), emit eligibility_status: "Review Required" rather than "Eligible" or "Not Eligible".
Return a single JSON object that validates against schema.json with these top-level keys:
-
personnel_extraction— object describing personnel pulled from VERAS Sections 2.1 and 2.2A. -
personnel_verification— array of per-person Banner NBAJOBS verification records. -
eligibility_check— array of per-person APM 45.22 eligibility records (PI / Co-PI only). -
org_code_compilation— array of unique org codes with the personnel using each code. -
dga_mapping— array of per-org-code DGA mappings. -
dga_cross_reference— array of per-DGA records cross-referencing required DGAs against Section 2 participants. -
verification_summary— object summarizing the verification with derived flag arrays.
personnel_extraction¶
-
section_21_personnel— array of{name, role, institution}objects from VERAS Section 2.1 (PI and Co-PIs).roleis one of"PI","Co-PI". Required and must contain at least one entry (every proposal has a PI). -
section_22_personnel— array of{name, role, institution}objects from VERAS Section 2.2A.roleis"Senior/Key Personnel". Empty array when Section 2.2A is not populated. -
total_personnel_count— integer. -
pi_copis_requiring_eligibility— array of strings (names fromsection_21_personnel). -
personnel_requiring_org_code_only— array of strings (names fromsection_22_personnel). Empty when Section 2.2A is empty.
personnel_verification¶
Array of per-person {name, found_in_banner, current_employee, job_title, timesheet_org_code, notes} objects. One entry per person from section_21_personnel and section_22_personnel combined.
-
found_in_banner— boolean. -
current_employee— boolean whenfound_in_banneristrue;nullotherwise. -
job_title— string whenfound_in_banneristrue;nullotherwise. -
timesheet_org_code— string whenfound_in_banneristrue;nullotherwise. -
notes— string ornull. Used for duplicate-name disambiguation, terminated-employee flags, external-collaborator flags.
eligibility_check¶
Array of per-person {name, role, job_title, eligibility_status, evidence} objects. One entry per PI / Co-PI (do not emit entries for Senior / Key Personnel).
-
eligibility_status— one of"Eligible"(job title explicitly listed in APM 45.22),"Not Eligible"(job title not in APM 45.22),"Review Required"(job title ambiguous or has conditional eligibility — clinical faculty, dual appointments). -
evidence— string. The APM 45.22 citation that supports the determination, or a short rationale for"Review Required".
org_code_compilation¶
Array of {org_code, personnel_names, count} objects, one entry per unique timesheet org code across all personnel.
-
org_code— string. -
personnel_names— array of strings (names that use this code). -
count— integer.
dga_mapping¶
Array of {org_code, department_name, dga_names} objects, one entry per unique org code. Multiple DGAs per org code are supported (some org codes have dual coverage).
-
org_code— string. -
department_name— string when the Department List has a match;nullwhen the org code is not in the Department List. -
dga_names— array of strings. Empty array only when the org code is not in the Department List (which must be flagged inverification_summary).
dga_cross_reference¶
Array of {dga_name, org_codes, listed_in_section_2, action_needed} objects, one entry per unique DGA pulled from the dga_mapping.
-
org_codes— array of strings (one DGA may cover multiple org codes). -
listed_in_section_2— boolean.truewhen the DGA name appears insection_21_personnelorsection_22_personnel. -
action_needed— one of"No action needed"(DGA already in Section 2),"FLAG — Must be added to Section 2"(DGA required by org-code mapping but missing from Section 2).
verification_summary¶
-
total_personnel_verified— integer. -
pi_copis_eligible_count— integer. -
pi_copis_not_eligible— array of strings (PI / Co-PI names witheligibility_status: "Not Eligible"). -
pi_copis_review_required— array of strings (PI / Co-PI names witheligibility_status: "Review Required"). -
unique_org_codes_count— integer. -
dgas_required_count— integer. -
dgas_in_section_2_count— integer. -
missing_dgas— array of strings (DGA names withaction_needed: "FLAG — Must be added to Section 2"). -
unmapped_org_codes— array of strings (org codes not in the Department List). -
notes— string ornull. Source-document warnings, ambiguous matches, dual-DGA flags.
Cross-field rules¶
Mirror the source workflow's cross-field rules:
-
Every entry in
eligibility_checkmust haveeligibility_statuspopulated — nevernull. If a job title cannot be evaluated (no Banner record), seteligibility_status: "Review Required"withevidence: "Banner record not found — cannot evaluate job title.". -
Every unique org code in
org_code_compilationmust appear indga_mapping. If the Department List has no entry for an org code, thedga_mappingrow hasdepartment_name: nullanddga_names: [], and the org code is added toverification_summary.unmapped_org_codes. -
Every DGA pulled from
dga_mapping.dga_namesis cross-referenced indga_cross_referenceagainstsection_21_personnel+section_22_personnel.
Encoding rules¶
-
Names, job titles, org codes, DGA names are quoted verbatim — preserve the source-document spelling exactly.
-
Booleans are JSON booleans, not the strings
"Yes"/"No". -
Counts are JSON integers, not quoted strings.
-
Ambiguous job titles are flagged, not guessed. Clinical faculty, lecturer, adjunct, and dual-appointment titles default to
"Review Required"unless APM 45.22 is unambiguous. -
Do NOT assume employment, eligibility, or DGA mapping. Missing Banner records produce
found_in_banner: false+eligibility_status: "Review Required". Missing Department List entries produce emptydga_namesand an entry inunmapped_org_codes. Missing entire workflow documents produce non-compliant defaults and averification_summary.notesgap-flag.
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/section2-personnel-eligibility-udm/schema.json",
"title": "Section 2 Personnel Eligibility Verification \u2014 UDM Output",
"description": "JSON contract for the VERAS Section 2 review at the University of Idaho: extract every PI / Co-PI / Senior Key Person, verify employment via Banner NBAJOBS, cross-reference PI / Co-PI job titles against APM Section 45.22 eligibility criteria, compile timesheet org codes, map org codes to Departmental Grant Administrators (DGAs), and cross-reference required DGAs against Section 2 participants. Mirrors the source ui-insight/ProcessMapping section2-personnel-eligibility workflow.",
"version": "0.1.0",
"type": "object",
"additionalProperties": false,
"required": [
"personnel_extraction",
"personnel_verification",
"eligibility_check",
"org_code_compilation",
"dga_mapping",
"dga_cross_reference",
"verification_summary"
],
"properties": {
"personnel_extraction": {
"type": "object",
"additionalProperties": false,
"required": [
"section_21_personnel",
"section_22_personnel",
"total_personnel_count",
"pi_copis_requiring_eligibility",
"personnel_requiring_org_code_only"
],
"properties": {
"section_21_personnel": {
"type": "array",
"minItems": 1,
"description": "PI and Co-PI personnel from VERAS Section 2.1. Required by source workflow. Must contain at least one entry (every proposal has a PI). Resolves to UDM Personnel.First_Name / Personnel.Last_Name.",
"items": {
"type": "object",
"additionalProperties": false,
"required": [
"name",
"role"
],
"properties": {
"name": {
"type": "string",
"minLength": 1
},
"role": {
"type": "string",
"enum": [
"PI",
"Co-PI"
]
},
"institution": {
"type": [
"string",
"null"
]
}
}
}
},
"section_22_personnel": {
"type": "array",
"description": "Senior / Key Personnel from VERAS Section 2.2A. Empty array when Section 2.2A is not populated.",
"items": {
"type": "object",
"additionalProperties": false,
"required": [
"name",
"role"
],
"properties": {
"name": {
"type": "string",
"minLength": 1
},
"role": {
"type": "string",
"enum": [
"Senior/Key Personnel"
]
},
"institution": {
"type": [
"string",
"null"
]
}
}
}
},
"total_personnel_count": {
"type": "integer",
"minimum": 1
},
"pi_copis_requiring_eligibility": {
"type": "array",
"items": {
"type": "string",
"minLength": 1
},
"description": "Names from section_21_personnel that require APM 45.22 eligibility verification."
},
"personnel_requiring_org_code_only": {
"type": "array",
"items": {
"type": "string",
"minLength": 1
},
"description": "Names from section_22_personnel that need org-code collection but NOT eligibility checks."
}
}
},
"personnel_verification": {
"type": "array",
"description": "Per-person Banner NBAJOBS verification records, one entry per person on the combined personnel list.",
"items": {
"type": "object",
"additionalProperties": false,
"required": [
"name",
"found_in_banner"
],
"properties": {
"name": {
"type": "string",
"minLength": 1
},
"found_in_banner": {
"type": "boolean"
},
"current_employee": {
"type": [
"boolean",
"null"
],
"description": "True when the Banner record shows active employment; null when found_in_banner is false."
},
"job_title": {
"type": [
"string",
"null"
],
"description": "Banner job title verbatim; null when found_in_banner is false."
},
"timesheet_org_code": {
"type": [
"string",
"null"
],
"description": "Banner timesheet organization code verbatim; null when found_in_banner is false."
},
"notes": {
"type": [
"string",
"null"
],
"description": "Disambiguation notes, terminated-employee flags, external-collaborator flags."
}
}
}
},
"eligibility_check": {
"type": "array",
"description": "Per-person APM 45.22 eligibility records for PI / Co-PI only. Senior / Key Personnel are NOT emitted here.",
"items": {
"type": "object",
"additionalProperties": false,
"required": [
"name",
"role",
"eligibility_status",
"evidence"
],
"properties": {
"name": {
"type": "string",
"minLength": 1
},
"role": {
"type": "string",
"enum": [
"PI",
"Co-PI"
]
},
"job_title": {
"type": [
"string",
"null"
],
"description": "Banner job title verbatim; null when no Banner record exists."
},
"eligibility_status": {
"type": "string",
"enum": [
"Eligible",
"Not Eligible",
"Review Required"
],
"description": "Eligible = job title explicitly listed in APM 45.22; Not Eligible = job title not in APM 45.22; Review Required = ambiguous or conditional eligibility."
},
"evidence": {
"type": "string",
"minLength": 1,
"description": "Short citation or rationale supporting the determination."
}
}
}
},
"org_code_compilation": {
"type": "array",
"description": "Unique timesheet org codes across all personnel. One entry per unique code.",
"items": {
"type": "object",
"additionalProperties": false,
"required": [
"org_code",
"personnel_names",
"count"
],
"properties": {
"org_code": {
"type": "string",
"minLength": 1
},
"personnel_names": {
"type": "array",
"minItems": 1,
"items": {
"type": "string",
"minLength": 1
}
},
"count": {
"type": "integer",
"minimum": 1
}
}
}
},
"dga_mapping": {
"type": "array",
"description": "Org-code-to-DGA mapping, one entry per unique org code. Multiple DGAs per org code are supported.",
"items": {
"type": "object",
"additionalProperties": false,
"required": [
"org_code",
"department_name",
"dga_names"
],
"properties": {
"org_code": {
"type": "string",
"minLength": 1
},
"department_name": {
"type": [
"string",
"null"
],
"description": "Department name from the Department List; null when the org code has no Department List entry."
},
"dga_names": {
"type": "array",
"items": {
"type": "string",
"minLength": 1
},
"description": "DGA names from the Department List. Empty array only when the org code is not in the Department List."
}
}
}
},
"dga_cross_reference": {
"type": "array",
"description": "Per-DGA cross-reference against VERAS Section 2 participants. One entry per unique DGA pulled from dga_mapping.",
"items": {
"type": "object",
"additionalProperties": false,
"required": [
"dga_name",
"org_codes",
"listed_in_section_2",
"action_needed"
],
"properties": {
"dga_name": {
"type": "string",
"minLength": 1
},
"org_codes": {
"type": "array",
"minItems": 1,
"items": {
"type": "string",
"minLength": 1
}
},
"listed_in_section_2": {
"type": "boolean"
},
"action_needed": {
"type": "string",
"enum": [
"No action needed",
"FLAG \u2014 Must be added to Section 2"
],
"description": "No action needed = DGA already in Section 2; FLAG = DGA required by org-code mapping but missing from Section 2."
}
}
}
},
"verification_summary": {
"type": "object",
"additionalProperties": false,
"required": [
"total_personnel_verified",
"pi_copis_eligible_count",
"pi_copis_not_eligible",
"pi_copis_review_required",
"unique_org_codes_count",
"dgas_required_count",
"dgas_in_section_2_count",
"missing_dgas",
"unmapped_org_codes"
],
"properties": {
"total_personnel_verified": {
"type": "integer",
"minimum": 0
},
"pi_copis_eligible_count": {
"type": "integer",
"minimum": 0
},
"pi_copis_not_eligible": {
"type": "array",
"items": {
"type": "string",
"minLength": 1
}
},
"pi_copis_review_required": {
"type": "array",
"items": {
"type": "string",
"minLength": 1
}
},
"unique_org_codes_count": {
"type": "integer",
"minimum": 0
},
"dgas_required_count": {
"type": "integer",
"minimum": 0
},
"dgas_in_section_2_count": {
"type": "integer",
"minimum": 0
},
"missing_dgas": {
"type": "array",
"items": {
"type": "string",
"minLength": 1
},
"description": "DGA names with action_needed FLAG."
},
"unmapped_org_codes": {
"type": "array",
"items": {
"type": "string",
"minLength": 1
},
"description": "Org codes that did not appear in the Department List."
},
"notes": {
"type": [
"string",
"null"
],
"description": "Source-document warnings (missing Banner extract, missing Department List, ambiguous matches)."
}
}
}
}
}
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-20¶
- Initial experimental release.
- Schema derived from the
section2-personnel-eligibilityv1 Vandalizer workflow inui-insight/ProcessMapping(two parallel extraction tasks, 11 source fields, three cross-field rules, four validation-plan checks). - Seven-block shape (
personnel_extraction+personnel_verification+eligibility_check+org_code_compilation+dga_mapping+dga_cross_reference+verification_summary) preserves the source workflow's per-step table structure and adds explicit derivations for the summary counts and flag arrays. eligibility_check[].eligibility_statusexposed as the three-value enum (Eligible,Not Eligible,Review Required) from the source workflow's task language.dga_cross_reference[].action_neededexposed as the two-value enum (No action needed,FLAG — Must be added to Section 2).section_21_personneltyped withminItems: 1(every proposal has a PI).section_22_personneltyped as a possibly-empty array (Senior / Key Personnel section often blank).- Senior / Key Personnel are explicitly excluded from
eligibility_checkper the source workflow's task instructions — only PI / Co-PI need APM 45.22 verification. - Source
Is_Required: truefields mirrored intorequiredlists at the block level (section_21_personnel,total_personnel_count,pi_copis_requiring_eligibility, every block's identifying fields). - Counts (
total_personnel_count,total_personnel_verified,pi_copis_eligible_count,unique_org_codes_count,dgas_required_count,dgas_in_section_2_count) typed as JSON integers, not quoted strings. - UDM column bindings preserved at the leaf level:
section_21_personnel[].nameandsection_22_personnel[].name→Personnel.First_Name/Personnel.Last_Name. The org-code → DGA mapping, APM 45.22 eligibility, and verification matrices are repo-local — no shared UDM table exists for them yet. - Multi-source input model documented explicitly: the contract requires the VERAS proposal, Banner NBAJOBS extract, and Department List uploaded as workflow documents (APM 45.22 list is consumed from the knowledge base / search corpus). When any source is missing, the contract requires non-compliant defaults and a
verification_summary.notesgap-flag. - No eval cases yet — status
experimentaluntil at least one golden extraction is added underevals/cases/.