# Stage A extraction schema — full-text pass over headline reports (v1.4 work)

Purpose: pull **facts and verbatim evidence** from each report so that coded dimensions can be chosen and applied afterward as published rules. You are not coding; you are extracting. When a field is not evidenced in the document, write `"not_evidenced"` (or `[]`), never a guess. Every substantive field carries `quote` (verbatim, ≤ 60 words) and `page` (printed page number if the document has them, else PDF page index, else `"html"`).

Read the whole document. Long reports: read the executive summary, charge, membership, every recommendations section, and skim the rest; do not stop at the summary.

## Output: one JSON object per document → `extraction/<doc_id>.json`

```
{
 "doc_id": "", "institution": "", "url": "", "text_source": "fulltext/<doc_id>.txt | browser",
 "read_coverage": "full | partial (say what was skipped)",
 "pages": int or null, "word_count_estimate": int,

 "printed_date": {"value": "YYYY-MM-DD | YYYY-MM | YYYY | not_evidenced", "quote": "", "page": ""},
 "charge": {"convener_as_printed": "", "convener_role": "provost | president | chancellor | faculty_senate | joint | research_office | cio_it | dean | other | not_evidenced",
            "charge_date": "", "charge_questions": ["verbatim or close paraphrase, one per item"], "quote": "", "page": ""},
 "membership": {"total": int|null, "faculty": int|null, "staff": int|null, "administrators": int|null, "students": int|null,
                "students_role": "voting_member | advisory | consulted_only | absent | not_evidenced",
                "chairs": ["name (title)"], "roster_present": true|false, "quote": "", "page": "",
                "roster": [{"name": "as printed", "title": "as printed", "unit": "department/office as printed", "category": "faculty | staff | administrator | student | external | unknown", "role": "chair | co-chair | member | ex_officio | staff_support"}]},
 "leadership": {"reports_to": "office or person the body reports to, as printed", "in_charge_of_implementation": "unit or role named as responsible for carrying out the recommendations, or not_evidenced",
                "successor_body": "name of any standing council/committee the report creates or hands off to, and who chairs it if stated", "quote": "", "page": ""},
 "framing": {"opening_problem_statement": "verbatim first substantive framing sentence(s), ≤ 80 words", "page": "",
             "problems_named": ["integrity", "equity_access", "workforce_labor", "research_integrity", "privacy_data", "cost", "pedagogy_opportunity", "institutional_competitiveness", "other: ..."],
             "tone_self_description": "how the report describes its own stance, verbatim if available"},
 "recommendations": [
   {"n": 1, "text": "one-line paraphrase or short verbatim", "owner_named": "unit or role named, or none", "deadline": "date or none", "resource": "money/FTE named or none", "page": ""}
 ],
 "recommendation_count": int,
 "standing_body": {"proposed": "yes_new_body | yes_new_office | yes_expand_existing | no | not_evidenced", "name": "", "quote": "", "page": ""},
 "resources": {"dollar_amounts": ["$..."], "fte_asks": [""], "quote": "", "page": ""},
 "tools": [{"tool": "ChatGPT | Copilot | Gemini | Claude | custom (name) | ...", "stance": "recommend_license | pilot | mention_only | caution_against | prohibit", "quote": "", "page": ""}],
 "procurement_stance": {"value": "license_enterprise_tool | agnostic_multiple | build_own | defer | against | not_evidenced", "quote": "", "page": ""},
 "detectors": {"position": "recommend_against | caution | one_input_among_several | recommend_use | not_mentioned", "quote": "", "page": ""},
 "syllabus": {"requirement": "every_syllabus_must_state | recommended_not_required | tiered_menu_offered | instructor_discretion_only | not_mentioned", "quote": "", "page": ""},
 "default_posture": {"value": "prohibit_unless_permitted | permit_unless_prohibited | instructor_sets | not_stated", "quote": "", "page": ""},
 "policies_to_amend": [{"policy": "name as printed", "quote": "", "page": ""}],
 "training": {"faculty_training": "mandatory | recommended | not_mentioned", "student_literacy": "curricular_requirement | recommended | not_mentioned", "quote": "", "page": ""},
 "assessment_redesign": {"recommended": "yes | no | not_mentioned", "quote": "", "page": ""},
 "external_citations": [{"cited": "institution or organization or report name", "context": "≤ 20 words", "page": ""}],
 "data_sources": ["survey of faculty (n=...)", "listening sessions", "student survey", "benchmarking of peers", "none stated"],
 "ai_disclosure": {"report_used_ai": "yes | no | not_stated", "quote": "", "page": ""},
 "positions_not_captured": ["anything the report takes a clear position on that no field above asks about, one line each, with page"],
 "extractor_notes": "problems reading, ambiguities, anything the coder should know"
}
```

## Rules
- Verbatim means verbatim. Do not clean up grammar inside quotes.
- `recommendations`: list every distinct recommendation, numbered as the document numbers them if it does; if the document has 40, list 40. If recommendations are organized under themes, keep the theme as a prefix in `text`.
- `owner_named`: only if the report assigns the item to a named unit or role ("the Provost's Office will", "CTL should"). "The university should" is `none`.
- `membership.roster`: list every named member with title and unit exactly as printed; required wherever the document prints a roster; where it prints none, set `roster_present: false` and leave the array empty. Counts are derived from it; classify by title as printed. A dean is an administrator. A graduate student is a student. If titles are absent, give `total` and set the rest null.
- `external_citations`: other universities, consortia (Ithaka, EDUCAUSE, AAC&U, MLA-CCCC), government documents, vendors' documents. Scholarly books and articles were meant to be out of scope; some were recorded anyway and remain in the data, so filter on the node name if you want institutions and organizations only.
- `convener_role`: from the document or its transmittal page. Reports that describe themselves as "charged by the Provost" → provost; "convened by the Faculty Senate" → faculty_senate; joint if both are named as co-conveners.
- Interim, summary or abstract-only documents: extract what is there and say so in `read_coverage`.
- Never write to any file other than your own `extraction/<doc_id>.json` files.
