Skip to content

export-to-banner-extraction-udm

Slugexport-to-banner-extraction-udm
Version0.1.0
Statusexperimental
Last fully evaluatednone
Eval stateno validated eval cases
Categoryextraction
Domainresearch-administration
Manifestationsprompt
Created2026-05-20
Updated2026-05-20

Tags: export-to-banner post-award banner-erp award-notice financial billing sponsor-classification udm structured-extraction json

Audience: sponsored-programs-staff, post-award-teams, ingest-pipelines

Manifestations in repo: prompt.md

Extracts operational setup data from a fully-executed federal award document into the specific fields needed to populate the VERAS Export to Banner form. Focuses on Banner ERP-specific data points: award identification, dates and performance period, sponsor entity classification, budget structure and indirect-cost terms, billing and payment terms, and reporting / special-conditions text. Complements award-compliance-extraction-udm (broader compliance monitoring) by targeting only the operational fields Banner needs.

Output contract: schema.json Contract scope: repo-local, UDM-aligned

Inputs

A fully-executed federal award document — federal notice of award, cooperative agreement, contract, or an award modification that updates Banner-relevant fields. Typically 5–50+ pages, including budget attachments and terms-and-conditions. Accepted file types in the source workflow: .pdf, .docx.

Outputs

A single JSON object with six structured blocks:

  • award_identificationaward_number (FAIN), project_title, pi_name, award_type (four-value enum), is_pass_through (boolean), prime_sponsor_name, cfda_number, naics_code, federal_agency_name
  • dates_and_performanceaward_start_date, award_end_date, performance_period_start, performance_period_end, budget_periods[] (array of {period_number, start_date, end_date, amount}), is_multi_year
  • sponsor_entitysponsor_name, sponsor_entity_type (seven-value enum), federal_agency_hierarchy, sponsor_address, sponsor_uei, awardee_organization, awardee_uei
  • budget_financialtotal_award_amount (number), total_anticipated_amount (number), budget_categories[] (array of {category, approved_amount}), total_direct_costs, total_indirect_costs (numbers), fa_rate (string with base annotation), fa_rate_base (four-value enum), is_fa_waived, cost_share_amount (number), cost_share_type, program_income
  • billing_paymentbilling_type (four-value enum), billing_frequency, billing_address, invoice_email, pms_loc_code, payment_terms, invoice_requirements[], final_invoice_deadline, billing_contact
  • reporting_specialreporting_requirements[] (array of {report_type, frequency, due_date_or_timing, submission_method}), record_retention_period, carry_forward_policy, prior_approval_requirements[], special_terms[], closeout_requirements, governing_regulations[]

See schema.json for the authoritative definition and prompt.md for encoding rules (monetary fields as JSON numbers, ISO date handling, enum policies, UEI / CFDA formatting).

Contract scope

Repo-local, UDM-aligned. Broad UDM bindings via leaf-field column references: Award, Personnel, Organization, AwardBudget, AwardBudgetPeriod, IndirectRate, CostShare, ContactDetails, Terms. The six-block Banner-setup shape itself is repo-local and mirrors the source ui-insight/ProcessMapping workflow.

Relationship to other components

Concern Source of truth
Operational Banner ERP setup from a fully-executed award export-to-banner-extraction-udm (this component)
Broader compliance monitoring (high-risk conditions, audit thresholds, deliverable schedules, FFR / prior-approval categories) award-compliance-extraction-udm
FFR / SF-425 submission cadence ffr-management-extraction-udm
Prior-approval procedural mechanics per approval type prior-approval-extraction-udm
Modification intake on an amendment (vs. the original award) award-modification-intake-udm

The five post-award components are versioned independently. A single award document may be extracted through more than one when downstream consumers need overlapping concerns.

Triad integration

  • Evaluation datasets: none yet — planned: an authorized, de-identified federal cooperative agreement with multi-year incremental funding, an explicit F&A rate cap, and a structured reporting table.
  • Harness notes: canonical manifestation is prompt.md. Validation surface is schema.json. Vendored into runners via harness prompts vendor --source-ref=<sha>.
  • Shared UDM relationship: aligned, not owning. Leaf-field bindings track shared UDM award concepts but the six-block Banner-setup surface is repo-local.

Runtime topology — the Vandalizer workflow

The canonical runtime for this component is the export-to-banner-extraction workflow shipped at the top level of this repo. The single source of truth is workflows/export-to-banner-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/export-to-banner-extraction/ workflow:

  • Step 1 (parallel Extraction) — six Extraction tasks mirror the source workflow one-for-one (award-identification, dates-and-performance, sponsor-and-entity, budget-and-financial, billing-and-payment, reporting-and-special). Each task carries an embedded SearchSet whose item titles match the schema's block field names.
  • Step 2 (Consolidation Prompt) — assembles the six JSON fragments into the schema-conformant six-block object, converts quoted dollar strings to JSON numbers, normalizes the four enums (award_type, sponsor_entity_type, fa_rate_base, billing_type), enforces the two source cross-field rules (CFR-01 award_start < award_end; CFR-02 performance_period_start <= award_start_date — flag in special_terms when violated rather than altering the dates).

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: an authorized, de-identified federal cooperative agreement with multi-year incremental funding and a structured reporting table, validated by a Post-Award Specialist.

Provenance

Authored 2026-05-20 against the export-to-banner-extraction (Workflow_ID: WF-EXPORT-BANNER-EXTRACTION) process-mapping workflow in ui-insight/ProcessMapping at commit 2c1f47f46474130743af5aee44d074bcd21787e9, which was built from the PROC-EXPORT-TO-BANNER-REVIEW process map. Created to make the Banner-setup data-entry step 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 Banner ERP-setup contract. Six structured blocks (award_identification, dates_and_performance, sponsor_entity, budget_financial, billing_payment, reporting_special) covering the specific data points needed to populate the VERAS Export to Banner form on its way into Banner ERP. Targets only the operational fields Banner needs — complements award-compliance-extraction-udm (broader compliance monitoring) rather than duplicating it. All monetary fields are JSON numbers per the boss's PR #33 review feedback.

  • Machine-readable catalog entry: component_catalog.json

Triad integration

  • UDM alignment: shared_udm_semantics_repo_local_schema — Broad UDM alignment via leaf-field column bindings: Award (Award_Number, Award_Title, Original_Start_Date, Original_End_Date, Flow_Through_Indicator, CFDA_Number, Current_Total_Funded, Total_Anticipated_Funding); Personnel (First_Name, Last_Name); Organization (Organization_Name, Organization_Type, UEI); AwardBudget; AwardBudgetPeriod; IndirectRate (Rate_Percentage, Base_Type); CostShare (Committed_Amount); ContactDetails (ContactDetails_Value); Terms (Payment_Method, Invoicing_Frequency). The six-block Banner-setup shape itself is repo-local.

  • Evaluation datasets: no shared evaluation-data-sets catalog 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/export-to-banner-extraction Vandalizer workflow at v0.1.0 implements the contract as six parallel Extraction tasks plus a Consolidation Prompt that converts quoted-dollar strings to JSON numbers, normalizes four enums (award_type, sponsor_entity_type, fa_rate_base, billing_type), and enforces the two source cross-field rules (CFR-01 award_start < award_end; CFR-02 performance_period_start <= award_start_date) as flag emissions on reporting_special.special_terms. Campaign authors should record both single-call and post-consolidation signals when both are available.

  • Related component: award-compliance-extraction-udm (complementary_focus) — export-to-banner-extraction-udm captures operational Banner-setup fields from a fully-executed award document; award-compliance-extraction-udm captures the broader compliance framework (high-risk conditions, audit thresholds, deliverable schedules) on the same award.

  • Related component: ffr-management-extraction-udm (complementary_focus) — ffr-management-extraction-udm covers FFR / SF-425 submission cadence; export-to-banner-extraction-udm covers operational billing and payment terms (billing_type / billing_frequency / PMS LOC code).

  • Related component: award-modification-intake-udm (complementary_focus) — award-modification-intake-udm covers modification intake on an amendment; export-to-banner-extraction-udm covers operational Banner-setup fields on the original (fully- executed) award. The two can be combined to refresh Banner when a modification updates Banner-relevant fields.

Prompt body

Source: prompt.md.

Show prompt

Export to Banner Award Extraction — UDM JSON

Purpose: Extract operational setup data from a fully-executed federal award document into the specific fields needed to populate the VERAS Export to Banner form. Focuses on Banner ERP-specific data: award identification, dates and performance period, sponsor entity classification, budget structure and indirect-cost terms, billing and payment terms, and reporting / special-conditions text. Complements award-compliance-extraction-udm (broader compliance monitoring) by targeting only the operational fields Banner needs.

Expected input: A fully-executed federal award notice / agreement / cooperative agreement / contract (or an award modification that updates Banner-relevant fields) — typically 5–50+ pages with budget attachments and terms-and-conditions.

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 Banner-setup cut of an award document. It produces the six structured blocks a Post-Award Specialist uses to fill in the VERAS Export to Banner form on its way into Banner ERP: award identification (FAIN / title / PI / type / pass-through / CFDA / NAICS / agency), dates and performance period (current and overall), sponsor entity classification (entity type / agency hierarchy / address / UEI), budget structure (line-item categories + F&A + cost share + program income), billing and payment terms (billing type / frequency / address / PMS LOC code), and reporting / special requirements (reports table + record retention + carry forward + prior-approval matrix + special terms + closeout).

This component does not cover the broader post-award compliance framework (high-risk conditions, audit thresholds, deliverable schedules) — that lives in award-compliance-extraction-udm. It does not cover FFR / SF-425 submission cadence — that lives in ffr-management-extraction-udm. It does not cover modification intake (which is its own cut of an amendment document) — that lives in award-modification-intake-udm.


Prompt

You are extracting the contents of a fully-executed federal award document into the operational fields needed to populate VERAS's Export to Banner form. The downstream consumer enters these values into Banner ERP.

Be 100% accurate. Quote the document for every identifier, date, amount, rate, and contact field; never paraphrase a numeric value or deadline. When the document does not specify a value, set the field to null (or, for required string fields where the source workflow specified "Not specified in the document", emit null — the schema accepts null for these).

Search the entire document with attention to sections titled Award Notice, Cover Page, Award Information, Federal Award Information, Period of Performance, Budget, Funding Information, Sponsor Information, Federal Agency, Recipient Information, Payment Information, Billing, Invoice, Reporting Requirements, Terms and Conditions, Special Terms, Record Retention, Carry Forward, Prior Approval, Closeout. Keywords to follow: award number, FAIN, grant number, contract number, principal investigator, pass-through, subaward, CFDA, NAICS, period of performance, effective date, total awarded, budget, indirect, F&A, MTDC, TDC, cost share, cost reimbursable, fixed price, letter of credit, PMS, drawdown, invoice, Net 30, final invoice, closeout, 2 CFR 200, prior approval, carry forward, unobligated.

Return a single JSON object that validates against schema.json with these top-level keys:

  • award_identification — object covering core identifiers, project title, PI, award type, pass-through, CFDA, NAICS, agency.

  • dates_and_performance — object covering award and performance dates plus the optional multi-year budget-period table.

  • sponsor_entity — object covering sponsor name + entity type + agency hierarchy + address + sponsor and awardee UEIs.

  • budget_financial — object covering total amounts, line-item budget breakdown, F&A rate / base, cost share, program income.

  • billing_payment — object covering billing type / frequency / address / email / PMS LOC code / payment terms / invoice requirements / final invoice deadline / billing contact.

  • reporting_special — object covering reporting requirements table + record retention + carry-forward policy + prior-approval list + special terms + closeout + governing regulations.

Critical: monetary fields are JSON numbers, not strings

This is the contract requirement that the boss flagged on the previous batch. Convert any quoted dollar amount to a JSON number:

  • "$1,234,567.89"1234567.89

  • "$500,000"500000

Apply this rule to every numeric field below:

  • budget_financial.total_award_amount

  • budget_financial.total_anticipated_amount

  • budget_financial.total_direct_costs

  • budget_financial.total_indirect_costs

  • budget_financial.cost_share_amount

  • budget_financial.budget_categories[].approved_amount

fa_rate is a string (preserve the document's percentage notation, e.g., "56.5%", "30% MTDC"). fa_rate_base is a string enum.

Dates use ISO YYYY-MM-DD

When the document is unambiguous (e.g., "July 1, 2026"), emit "2026-07-01". When the document gives a qualitative period (e.g., "period of performance: 5 years from award acceptance"), preserve the document's stated form as a string. Apply this rule to:

  • dates_and_performance.award_start_date, award_end_date

  • dates_and_performance.performance_period_start, performance_period_end

  • dates_and_performance.budget_periods[].start_date, end_date

Enums — match exactly

  • award_identification.award_type: "Grant", "Cooperative Agreement", "Contract", "Subcontract"

  • sponsor_entity.sponsor_entity_type: "Federal", "State Government", "Non-Profit", "Private Industry", "Foundation", "University", "Other"

  • budget_financial.fa_rate_base: "MTDC", "TDC", "Salary & Wages", "Other", or null

  • billing_payment.billing_type: "Cost Reimbursement", "Fixed Price", "Letter of Credit", "Milestone"

Required-field policy

Mirror the source workflow's Is_Required: true fields into the schema's required lists at the block level:

  • award_identification: award_number, project_title, pi_name, award_type, is_pass_through, federal_agency_name

  • dates_and_performance: award_start_date, award_end_date, performance_period_start, performance_period_end

  • sponsor_entity: sponsor_name, sponsor_entity_type, awardee_organization

  • budget_financial: total_award_amount, budget_categories

  • billing_payment: billing_type

  • reporting_special: reporting_requirements

reporting_special.reporting_requirements is a required array of {report_type, frequency, due_date_or_timing, submission_method} objects.

budget_categories shape

budget_categories is a required array of {category, approved_amount} objects. category is the sponsor's exact category label (e.g., "Salary", "Fringe", "Equipment", "Travel", "Operating/Supplies", "Subcontracts", "Other"). approved_amount is a JSON number.

Cross-field rules (from source workflow)

  1. award_start_date < award_end_date (when both are populated).

  2. performance_period_start <= award_start_date (when both are populated). When this does not hold, the consolidator should flag it in reporting_special.special_terms rather than altering the dates.

Encoding rules

  1. Monetary values are JSON numbers. No quoted dollar amounts.

  2. Dates use ISO YYYY-MM-DD when unambiguous, otherwise preserve the document's stated form as a string.

  3. Booleans are JSON booleans.

  4. UEIs, when present, are 12-character alphanumeric strings. Preserve case.

  5. CFDA numbers are stored as strings (preserves leading zeros and XX.XXX format).

  6. Empty optional fields use null (scalars) or [] (arrays). Do not invent values.

  7. Reporting requirements table is a flat array of typed rows; do not nest sub-tables.

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/export-to-banner-extraction-udm/schema.json",

  "title": "Export to Banner Award Extraction \u2014 UDM Output",

  "description": "JSON contract for operational setup data extracted from a fully-executed federal award document to populate VERAS's Export to Banner form. Six structured blocks (award_identification, dates_and_performance, sponsor_entity, budget_financial, billing_payment, reporting_special) covering Banner ERP-specific fields. Mirrors the source ui-insight/ProcessMapping export-to-banner-extraction workflow's six parallel extraction tasks plus a Consolidation Prompt.",

  "version": "0.1.0",

  "type": "object",

  "additionalProperties": false,

  "required": [

    "award_identification",

    "dates_and_performance",

    "sponsor_entity",

    "budget_financial",

    "billing_payment",

    "reporting_special"

  ],

  "properties": {

    "award_identification": {

      "type": "object",

      "additionalProperties": false,

      "required": [

        "award_number",

        "project_title",

        "pi_name",

        "award_type",

        "is_pass_through",

        "federal_agency_name"

      ],

      "properties": {

        "award_number": {

          "type": "string",

          "minLength": 1,

          "description": "Federal Award Identification Number (FAIN) or sponsor award number. Required by source workflow. Resolves to UDM Award.Award_Number."

        },

        "project_title": {

          "type": "string",

          "minLength": 1,

          "description": "Full project title as stated in the award document. Required by source workflow. Resolves to UDM Award.Award_Title."

        },

        "pi_name": {

          "type": "string",

          "minLength": 1,

          "description": "Principal Investigator name as listed on the award. Required by source workflow. Resolves to UDM Personnel.First_Name / Personnel.Last_Name."

        },

        "award_type": {

          "type": "string",

          "enum": [

            "Grant",

            "Cooperative Agreement",

            "Contract",

            "Subcontract"

          ],

          "description": "Award type classification. Required by source workflow."

        },

        "is_pass_through": {

          "type": "boolean",

          "description": "Whether this is a pass-through (subaward) or direct federal award. Required by source workflow. Resolves to UDM Award.Flow_Through_Indicator."

        },

        "prime_sponsor_name": {

          "type": [

            "string",

            "null"

          ],

          "description": "Name of the prime sponsor when is_pass_through is true. Null for direct federal awards. Resolves to UDM Organization.Organization_Name."

        },

        "cfda_number": {

          "type": [

            "string",

            "null"

          ],

          "description": "Catalog of Federal Domestic Assistance / Assistance Listing number (XX.XXX format). Comma-separated when multiple. Resolves to UDM Award.CFDA_Number."

        },

        "naics_code": {

          "type": [

            "string",

            "null"

          ],

          "description": "North American Industry Classification System code from the award header."

        },

        "federal_agency_name": {

          "type": "string",

          "minLength": 1,

          "description": "Name of the federal awarding agency. Required by source workflow. Resolves to UDM Organization.Organization_Name."

        }

      }

    },

    "dates_and_performance": {

      "type": "object",

      "additionalProperties": false,

      "required": [

        "award_start_date",

        "award_end_date",

        "performance_period_start",

        "performance_period_end"

      ],

      "properties": {

        "award_start_date": {

          "type": "string",

          "minLength": 1,

          "description": "Start date of the current award / budget period (ISO YYYY-MM-DD when unambiguous). Required by source workflow. Resolves to UDM Award.Original_Start_Date."

        },

        "award_end_date": {

          "type": "string",

          "minLength": 1,

          "description": "End date of the current award / budget period (ISO YYYY-MM-DD when unambiguous). Required by source workflow. Resolves to UDM Award.Original_End_Date."

        },

        "performance_period_start": {

          "type": "string",

          "minLength": 1,

          "description": "Start date of the overall project performance period (ISO YYYY-MM-DD when unambiguous). Required by source workflow. Resolves to UDM AwardBudgetPeriod.Start_Date."

        },

        "performance_period_end": {

          "type": "string",

          "minLength": 1,

          "description": "End date of the overall project performance period (ISO YYYY-MM-DD when unambiguous, may extend beyond current funding period for multi-year incremental awards). Required by source workflow. Resolves to UDM AwardBudgetPeriod.End_Date."

        },

        "budget_periods": {

          "type": "array",

          "description": "Multi-year budget period rows when the award is incrementally funded. Empty array for single-period awards. Resolves to UDM AwardBudgetPeriod.",

          "items": {

            "type": "object",

            "additionalProperties": false,

            "required": [

              "period_number",

              "start_date",

              "end_date"

            ],

            "properties": {

              "period_number": {

                "type": "integer",

                "minimum": 1

              },

              "start_date": {

                "type": "string",

                "minLength": 1

              },

              "end_date": {

                "type": "string",

                "minLength": 1

              },

              "amount": {

                "type": [

                  "number",

                  "null"

                ]

              }

            }

          }

        },

        "is_multi_year": {

          "type": [

            "boolean",

            "null"

          ],

          "description": "Whether the award spans multiple budget periods with incremental funding. Null when not determinable from the document."

        }

      }

    },

    "sponsor_entity": {

      "type": "object",

      "additionalProperties": false,

      "required": [

        "sponsor_name",

        "sponsor_entity_type",

        "awardee_organization"

      ],

      "properties": {

        "sponsor_name": {

          "type": "string",

          "minLength": 1,

          "description": "Full legal name of the sponsoring organization. Required by source workflow. Resolves to UDM Organization.Organization_Name."

        },

        "sponsor_entity_type": {

          "type": "string",

          "enum": [

            "Federal",

            "State Government",

            "Non-Profit",

            "Private Industry",

            "Foundation",

            "University",

            "Other"

          ],

          "description": "Entity classification. Required by source workflow. Resolves to UDM Organization.Organization_Type."

        },

        "federal_agency_hierarchy": {

          "type": [

            "string",

            "null"

          ],

          "description": "Full agency hierarchy (e.g., 'USDA > NIFA > Agriculture and Food Research Initiative')."

        },

        "sponsor_address": {

          "type": [

            "string",

            "null"

          ],

          "description": "Sponsor mailing / billing address as stated. Resolves to UDM ContactDetails.ContactDetails_Value."

        },

        "sponsor_uei": {

          "type": [

            "string",

            "null"

          ],

          "description": "Sponsor Unique Entity Identifier (12-character alphanumeric, when stated). Resolves to UDM Organization.UEI."

        },

        "awardee_organization": {

          "type": "string",

          "minLength": 1,

          "description": "Name of the recipient institution as stated in the award. Required by source workflow."

        },

        "awardee_uei": {

          "type": [

            "string",

            "null"

          ],

          "description": "Awardee Unique Entity Identifier (12-character alphanumeric, when stated)."

        }

      }

    },

    "budget_financial": {

      "type": "object",

      "additionalProperties": false,

      "required": [

        "total_award_amount",

        "budget_categories"

      ],

      "properties": {

        "total_award_amount": {

          "type": "number",

          "description": "Total amount of the current award action. JSON number, not a quoted string. Required by source workflow. Resolves to UDM Award.Current_Total_Funded."

        },

        "total_anticipated_amount": {

          "type": [

            "number",

            "null"

          ],

          "description": "Total anticipated funding across all periods (may differ from current award amount for incremental awards). JSON number. Resolves to UDM Award.Total_Anticipated_Funding."

        },

        "budget_categories": {

          "type": "array",

          "description": "Budget breakdown by sponsor category. Required by source workflow. Resolves to UDM AwardBudget.",

          "items": {

            "type": "object",

            "additionalProperties": false,

            "required": [

              "category",

              "approved_amount"

            ],

            "properties": {

              "category": {

                "type": "string",

                "minLength": 1

              },

              "approved_amount": {

                "type": "number"

              }

            }

          }

        },

        "total_direct_costs": {

          "type": [

            "number",

            "null"

          ],

          "description": "Total direct costs. JSON number."

        },

        "total_indirect_costs": {

          "type": [

            "number",

            "null"

          ],

          "description": "Total indirect (F&A) costs. JSON number. Resolves to UDM AwardBudget.Approved_Indirect_Cost."

        },

        "fa_rate": {

          "type": [

            "string",

            "null"

          ],

          "description": "Facilities & Administrative (indirect cost) rate as a percentage string (e.g., '56.5%', '30% MTDC'). String because the rate often carries a base annotation. Resolves to UDM IndirectRate.Rate_Percentage."

        },

        "fa_rate_base": {

          "type": [

            "string",

            "null"

          ],

          "enum": [

            "MTDC",

            "TDC",

            "Salary & Wages",

            "Other",

            null

          ],

          "description": "Base for F&A rate calculation. Null when not specified. Resolves to UDM IndirectRate.Base_Type."

        },

        "is_fa_waived": {

          "type": [

            "boolean",

            "null"

          ],

          "description": "Whether indirect costs are waived or limited by the sponsor."

        },

        "cost_share_amount": {

          "type": [

            "number",

            "null"

          ],

          "description": "Required cost-sharing or matching amount. JSON number. Resolves to UDM CostShare.Committed_Amount."

        },

        "cost_share_type": {

          "type": [

            "string",

            "null"

          ],

          "description": "Type of cost sharing (mandatory, voluntary committed, in-kind). String."

        },

        "program_income": {

          "type": [

            "string",

            "null"

          ],

          "description": "Program income provisions and handling requirements."

        }

      }

    },

    "billing_payment": {

      "type": "object",

      "additionalProperties": false,

      "required": [

        "billing_type"

      ],

      "properties": {

        "billing_type": {

          "type": "string",

          "enum": [

            "Cost Reimbursement",

            "Fixed Price",

            "Letter of Credit",

            "Milestone"

          ],

          "description": "Type of billing arrangement. Required by source workflow. Resolves to UDM Terms.Payment_Method."

        },

        "billing_frequency": {

          "type": [

            "string",

            "null"

          ],

          "description": "How often invoices should be submitted (monthly, quarterly, upon milestone completion). Resolves to UDM Terms.Invoicing_Frequency."

        },

        "billing_address": {

          "type": [

            "string",

            "null"

          ],

          "description": "Physical or electronic address for invoice submission."

        },

        "invoice_email": {

          "type": [

            "string",

            "null"

          ],

          "description": "Email address for electronic invoice submission when specified.",

          "format": "email"

        },

        "pms_loc_code": {

          "type": [

            "string",

            "null"

          ],

          "description": "Payment Management System or Letter of Credit code for federal drawdowns."

        },

        "payment_terms": {

          "type": [

            "string",

            "null"

          ],

          "description": "Payment terms (e.g., 'Net 30', 'advance payment', 'reimbursement')."

        },

        "invoice_requirements": {

          "type": "array",

          "items": {

            "type": "string",

            "minLength": 1

          },

          "description": "Items required on invoices (budget categories, effort certification, progress summary, etc.). Empty array when none specified."

        },

        "final_invoice_deadline": {

          "type": [

            "string",

            "null"

          ],

          "description": "Deadline for submitting the final invoice after project end (e.g., '60 days', '90 days')."

        },

        "billing_contact": {

          "type": [

            "string",

            "null"

          ],

          "description": "Name and contact information for the sponsor's billing / payment office."

        }

      }

    },

    "reporting_special": {

      "type": "object",

      "additionalProperties": false,

      "required": [

        "reporting_requirements"

      ],

      "properties": {

        "reporting_requirements": {

          "type": "array",

          "description": "Required reports. Required by source workflow. Resolves to UDM Terms.",

          "items": {

            "type": "object",

            "additionalProperties": false,

            "required": [

              "report_type",

              "frequency",

              "due_date_or_timing",

              "submission_method"

            ],

            "properties": {

              "report_type": {

                "type": "string",

                "minLength": 1

              },

              "frequency": {

                "type": "string",

                "minLength": 1

              },

              "due_date_or_timing": {

                "type": "string",

                "minLength": 1

              },

              "submission_method": {

                "type": "string",

                "minLength": 1

              }

            }

          }

        },

        "record_retention_period": {

          "type": [

            "string",

            "null"

          ],

          "description": "Required record retention period (e.g., '3 years after final FFR')."

        },

        "carry_forward_policy": {

          "type": [

            "string",

            "null"

          ],

          "description": "Whether unspent funds can be carried forward to subsequent budget periods and under what conditions."

        },

        "prior_approval_requirements": {

          "type": "array",

          "items": {

            "type": "string",

            "minLength": 1

          },

          "description": "Actions requiring prior written agency approval (budget changes, PI changes, NCE, foreign travel, equipment). Empty array when none specified."

        },

        "special_terms": {

          "type": "array",

          "items": {

            "type": "string",

            "minLength": 1

          },

          "description": "Special terms and conditions beyond standard federal requirements. Empty array when none specified. Also used by the consolidator to surface CFR-02 date-consistency flags when performance_period_start > award_start_date."

        },

        "closeout_requirements": {

          "type": [

            "string",

            "null"

          ],

          "description": "Specific closeout requirements and timeline."

        },

        "governing_regulations": {

          "type": "array",

          "items": {

            "type": "string",

            "minLength": 1

          },

          "description": "Governing regulations and terms referenced (2 CFR 200, RTCs, agency-specific). Empty array when none specified."

        }

      }

    }

  }

}

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 export-to-banner-extraction v2 Vandalizer workflow in ui-insight/ProcessMapping (six parallel extraction tasks, 52 source fields, two cross-field rules, four validation-plan checks).
  • Six-block shape (award_identification + dates_and_performance + sponsor_entity + budget_financial + billing_payment + reporting_special) preserves the source workflow's per-extraction-task separation.
  • Monetary fields typed as JSON numbers, not quoted strings: total_award_amount, total_anticipated_amount, total_direct_costs, total_indirect_costs, cost_share_amount, budget_categories[].approved_amount, budget_periods[].amount. Mirrors source Decimal field types. fa_rate typed as a string because the rate often carries a base annotation (e.g., "30% MTDC").
  • Enums match the source workflow exactly: award_type (4 values: Grant, Cooperative Agreement, Contract, Subcontract), sponsor_entity_type (7 values: Federal, State Government, Non-Profit, Private Industry, Foundation, University, Other), fa_rate_base (4 values + null: MTDC, TDC, Salary & Wages, Other), billing_type (4 values: Cost Reimbursement, Fixed Price, Letter of Credit, Milestone).
  • Source Is_Required: true fields mirrored into required lists at the block level: award_number, project_title, pi_name, award_type, is_pass_through, federal_agency_name, award_start_date, award_end_date, performance_period_start, performance_period_end, sponsor_name, sponsor_entity_type, awardee_organization, total_award_amount, budget_categories, billing_type, reporting_requirements.
  • reporting_requirements typed as an array of {report_type, frequency, due_date_or_timing, submission_method} objects per the source Table field type.
  • Broad UDM column bindings preserved at leaf level: Award.Award_Number, Award.Award_Title, Personnel.First_Name / Personnel.Last_Name, Award.Flow_Through_Indicator, Award.CFDA_Number, Organization.Organization_Name, Award.Original_Start_Date / Original_End_Date, AwardBudgetPeriod.Start_Date / End_Date, Organization.Organization_Type, Organization.UEI, Award.Current_Total_Funded, Award.Total_Anticipated_Funding, AwardBudget, AwardBudget.Approved_Indirect_Cost, IndirectRate.Rate_Percentage / Base_Type, CostShare.Committed_Amount, ContactDetails.ContactDetails_Value, Terms.Payment_Method / Invoicing_Frequency, Terms. The six-block Banner-setup shape itself is repo-local.
  • No eval cases yet — status experimental until at least one golden extraction is added under evals/cases/.