# BSA Extraction QA Report

Three independent passes: **numeric** (deterministic), **attribution** (deterministic), **narrative** (LLM review). Generated by `scripts/report-bsa-qa.py`.

## Pass summaries

- Numeric: 87 checked — warn 2 | info 65 | clean 20
- Attribution: 87 checked — warn 26 | info 30 | clean 31
- Narrative: 87 checked — warn 10 | info 13 | clean 64

**Total subtitles with errors**: 0
**Total subtitles with warnings**: 38

## Errors (require review)

_No errors._

## Warnings

### I-B — narrative
> Background and financialPlanImpact are faithful to the PDF; the fiscal table matches exactly; however, agenciesAffected lists OAG with confidence 'high' though the agency is not named anywhere in the I-B section.
- **[warn] wrong_attribution** `agenciesAffected` — Office of the Attorney General (CB0) is listed with confidence 'high', but OAG is not mentioned by name anywhere in the I-B PDF text — the attribution is implied from the subject matter (settlements and judgments), not literal.
  - PDF: `'amounts budgeted for settlements and judgments have been reduced by $22.5 million in savings over the four-year financial plan period starting in fiscal year 2028.'`
  - JSON: `'{"code": "CB0", "name": "Office of the Attorney General for the District of Columbia", "confidence": "high"}'`

### II-C — narrative
> Background and financialPlanImpact are verbatim-faithful; one agency attribution uses confidence 'high' for OCFO when the PDF only literally names its sub-office, Office of Tax and Revenue.
- **[warn] wrong_attribution** `agenciesAffected` — The PDF literally names 'Office of Tax and Revenue' (OTR) but agenciesAffected maps this to AT0 ('Office of the Chief Financial Officer') with confidence 'high'. OTR is a sub-office of OCFO, but OCFO is not itself named in the PDF — confidence should be 'medium'.
  - PDF: `'certify abatements for the Office of Tax and Revenue'`
  - JSON: `'{"code": "AT0", "name": "Office of the Chief Financial Officer", "confidence": "high"}'`

### II-E — narrative
> Background and financialPlanImpact are faithful to the PDF; the fiscal table matches exactly; one agency attribution maps 'Office of Tax and Revenue' (PDF's literal name) to AT0 'Office of the Chief Financial Officer' with confidence high, which overstates precision.
- **[warn] wrong_attribution** `agenciesAffected` — PDF explicitly names 'Office of Tax and Revenue' but JSON maps this to AT0 'Office of the Chief Financial Officer' with confidence 'high'. OTR is a sub-agency of OCFO; the literal agency named in the PDF is OTR, not OCFO.
  - PDF: `'…the Office of Tax and Revenue can administer the program within their budgeted resources.'`
  - JSON: `'{"code": "AT0", "name": "Office of the Chief Financial Officer", "confidence": "high"}'`

### II-F — narrative
> Narrative text and tables are faithfully extracted; two agencies are marked high-confidence but are not literally named in the II-F text.
- **[warn] wrong_attribution** `agenciesAffected` — EB0 (Office of the Deputy Mayor for Planning and Economic Development) is listed with confidence 'high' but is not literally named anywhere in the Subtitle (II)(F) text; it is implied by the Fund's infrastructure and redevelopment purposes.
  - PDF: `'[No literal mention of DMPED in Subtitle (II)(F) text on page 14]'`
  - JSON: `'{"code": "EB0", "name": "Office of the Deputy Mayor for Planning and Economic Development", "confidence": "high"}'`
- **[warn] wrong_attribution** `agenciesAffected` — AT0 (Office of the Chief Financial Officer) is listed with confidence 'high' but is not literally named anywhere in the Subtitle (II)(F) text; it is implied by the revenue and debt-cap analysis in the Financial Plan Impact.
  - PDF: `'[No literal mention of OCFO in Subtitle (II)(F) text on page 14]'`
  - JSON: `'{"code": "AT0", "name": "Office of the Chief Financial Officer", "confidence": "high"}'`

### IV-F — narrative
> Extraction is faithful to the PDF text and table values, but the FY2029 TOTAL row (44,845) does not equal the sum of its component rows (42,845 + 0 = 42,845) — a $2,000 thousand arithmetic inconsistency that originates in the source PDF and is faithfully preserved in the JSON.
- **[warn] numeric_mismatch** `fiscalTables` — FY2029 TOTAL row (44,845) does not equal sum of component rows (42,845 + 0 = 42,845); $2,000 thousand discrepancy. Inconsistency is in the source PDF — JSON correctly captures the PDF values. Reviewer should verify whether the TOTAL or a component row contains a typo.
  - PDF: `'Row1 FY2029: $42,845 | Row2 FY2029: $0 | TOTAL FY2029: $44,845'`
  - JSON: `'rows[0].values[2]: 42845, rows[1].values[2]: 0, rows[2].values[2]: 44845'`

### V-E — narrative
> Narrative text is a faithful verbatim match; one warning — Department of Health is listed with confidence 'high' but is not literally named in the subtitle's PDF text.
- **[warn] wrong_attribution** `agenciesAffected` — HC0 (Department of Health) is marked confidence 'high' but DOH is not literally named in the subtitle text; only the Tobacco Use Cessation Fund and anti-smoking programs are mentioned.
  - PDF: `'Revenue from tobacco sales permits must be deposited into the non-lapsing Tobacco Use Cessation Fund.'`
  - JSON: `'{"code": "HC0", "name": "Department of Health", "confidence": "high"}'`

### VI-C — narrative
> Background and financialPlanImpact are faithful; the fiscal table caption omits the subtitle-name prefix present in the PDF.
- **[warn] paraphrased_sentence** `fiscalTables` — The JSON table caption drops the subtitle-name prefix. PDF caption reads 'Subtitle (VI)(C) - Electric Vehicle Publicly Accessible Charging Stations Personal Property Tax Exemption Act of 2026 Personal Property Tax Reduction ($ thousands)'; JSON records only 'Personal Property Tax Reduction'.
  - PDF: `'Subtitle (VI)(C) - Electric Vehicle Publicly Accessible Charging Stations Personal Property Tax Exemption Act of 2026 Personal Property Tax Reduction ($ thousands)'`
  - JSON: `'Personal Property Tax Reduction'`

### VI-D — narrative
> Background is otherwise faithful, but the final sentence of the first paragraph adds the word 'costs' which does not appear in the PDF source text.
- **[warn] paraphrased_sentence** `background` — The last sentence of the background's first paragraph ends with 'the District's energy costs.' in the JSON, but the PDF text ends with 'the District's energy' followed immediately by footnote marker ⁹⁶, with no 'costs' present. The word 'costs' appears to be an inference added during extraction.
  - PDF: `"...into which DOEE deposits the surcharge proceeds intended to pay for the District's energy ⁹⁶"`
  - JSON: `"...into which DOEE deposits the surcharge proceeds intended to pay for the District's energy costs."`

### VI-R — narrative
> Background and financialPlanImpact are faithful to the PDF; one warn: KT0/DPW is listed with confidence 'high' but the Department of Public Works is never literally named in the subtitle text.
- **[warn] wrong_attribution** `agenciesAffected` — KT0 (Department of Public Works) is listed with confidence 'high', but DPW is not literally named anywhere in the PDF text for this subtitle. The text refers only to 'the government', 'a given agency', and 'the District' generically.
  - PDF: `'...the type of vehicle needed (i.e. car, truck or special needs vehicle) for a given agency, and whether the procurement is a purchase or a lease.'`
  - JSON: `'{"code": "KT0", "name": "Department of Public Works", "confidence": "high"}'`

### VII-K — narrative
> Narrative and table are faithful to the PDF; one warn for AT0/OCFO listed with confidence 'high' but not literally named in the subtitle text.
- **[warn] wrong_attribution** `agenciesAffected` — AT0 (Office of the Chief Financial Officer) is listed with confidence 'high', but no agency is literally named anywhere in the subtitle text. OCFO is implied by the revenue/tax subject matter, which warrants at most confidence 'medium'.
  - PDF: `'(no agency name appears in the subtitle text)'`
  - JSON: `'{"code": "AT0", "name": "Office of the Chief Financial Officer", "confidence": "high"}'`

### IV-B — numeric
- **[warn] fabrication** `fiscalTables[0].rows[0].values[4]` — Table value 600 (= $600,000) not found on PDF pages

### VII-A — numeric
- **[warn] fabrication** `fiscalTables[0].rows[0].values[1]` — Table value 4,400 (= $4,400,000) not found on PDF pages
- **[warn] fabrication** `fiscalTables[0].rows[0].values[2]` — Table value 4,500 (= $4,500,000) not found on PDF pages
- **[warn] fabrication** `fiscalTables[0].rows[0].values[3]` — Table value 4,500 (= $4,500,000) not found on PDF pages
- **[warn] fabrication** `fiscalTables[0].rows[0].values[4]` — Table value -133,100 (= $-133,100,000) not found on PDF pages
- **[warn] fabrication** `fiscalTables[0].rows[1].values[1]` — Table value -4,400 (= $-4,400,000) not found on PDF pages
- **[warn] fabrication** `fiscalTables[0].rows[1].values[2]` — Table value -4,500 (= $-4,500,000) not found on PDF pages
- **[warn] fabrication** `fiscalTables[0].rows[1].values[3]` — Table value -4,500 (= $-4,500,000) not found on PDF pages

### I-B — attribution
- **[warn] unfounded_attribution** `` — CB0 (Office of the Attorney General for the District of Columbia) is listed but not named in PDF pages — may be an inference

### I-C — attribution
- **[warn] unfounded_attribution** `` — FB0 (Fire and Emergency Medical Services Department) is listed but not named in PDF pages — may be an inference

### II-C — attribution
- **[warn] unfounded_attribution** `` — EB0 (Office of the Deputy Mayor for Planning and Economic Development) is listed but not named in PDF pages — may be an inference
- **[warn] unfounded_attribution** `` — AT0 (Office of the Chief Financial Officer) is listed but not named in PDF pages — may be an inference

### II-E — attribution
- **[warn] unfounded_attribution** `` — AT0 (Office of the Chief Financial Officer) is listed but not named in PDF pages — may be an inference

### II-F — attribution
- **[warn] unfounded_attribution** `` — AT0 (Office of the Chief Financial Officer) is listed but not named in PDF pages — may be an inference

### II-G — attribution
- **[warn] unfounded_attribution** `` — AT0 (Office of the Chief Financial Officer) is listed but not named in PDF pages — may be an inference

### II-M — attribution
- **[warn] unfounded_attribution** `` — BX0 (Commission on the Arts and Humanities) is listed but not named in PDF pages — may be an inference

### II-U — attribution
- **[warn] unfounded_attribution** `` — ID0 (Business Improvement Districts Transfer) is listed but not named in PDF pages — may be an inference

### III-A — attribution
- **[warn] unfounded_attribution** `` — UC0 (Office of Unified Communications) is listed but not named in PDF pages — may be an inference

### III-C — attribution
- **[warn] unfounded_attribution** `` — GD0 (Office of the State Superintendent of Education) is listed but not named in PDF pages — may be an inference

### IV-D — attribution
- **[warn] unfounded_attribution** `` — GC0 (District of Columbia Public Charter Schools) is listed but not named in PDF pages — may be an inference

### IV-G — attribution
- **[warn] unfounded_attribution** `` — GC0 (District of Columbia Public Charter Schools) is listed but not named in PDF pages — may be an inference

### IV-I — attribution
- **[warn] unfounded_attribution** `` — GW0 (Office of the Deputy Mayor for Education) is listed but not named in PDF pages — may be an inference

### V-D — attribution
- **[warn] unfounded_attribution** `` — HC0 (Department of Health) is listed but not named in PDF pages — may be an inference
- **[warn] unfounded_attribution** `` — GC0 (District of Columbia Public Charter Schools) is listed but not named in PDF pages — may be an inference

### V-E — attribution
- **[warn] unfounded_attribution** `` — HC0 (Department of Health) is listed but not named in PDF pages — may be an inference

### VI-C — attribution
- **[warn] unfounded_attribution** `` — AT0 (Office of the Chief Financial Officer) is listed but not named in PDF pages — may be an inference

### VI-F — attribution
- **[warn] unfounded_attribution** `` — KE0 (Washington Metropolitan Area Transit Authority) is listed but not named in PDF pages — may be an inference

### VI-Q — attribution
- **[warn] unfounded_attribution** `` — KT0 (Department of Public Works) is listed but not named in PDF pages — may be an inference

### VI-R — attribution
- **[warn] unfounded_attribution** `` — KT0 (Department of Public Works) is listed but not named in PDF pages — may be an inference

### VII-A — attribution
- **[warn] unfounded_attribution** `` — AT0 (Office of the Chief Financial Officer) is listed but not named in PDF pages — may be an inference
- **[warn] unfounded_attribution** `` — BX0 (Commission on the Arts and Humanities) is listed but not named in PDF pages — may be an inference

### VII-B — attribution
- **[warn] unfounded_attribution** `` — ES0 (Washington Convention and Sports Authority) is listed but not named in PDF pages — may be an inference

### VII-C — attribution
- **[warn] unfounded_attribution** `` — RH0 (District Retiree Health Contribution) is listed but not named in PDF pages — may be an inference
- **[warn] unfounded_attribution** `` — FD0 (Police Officers' and Fire Fighters' Retirement System) is listed but not named in PDF pages — may be an inference
- **[warn] unfounded_attribution** `` — GX0 (Teachers' Retirement System) is listed but not named in PDF pages — may be an inference

### VII-D — attribution
- **[warn] unfounded_attribution** `` — AT0 (Office of the Chief Financial Officer) is listed but not named in PDF pages — may be an inference

### VII-F — attribution
- **[warn] unfounded_attribution** `` — EB0 (Office of the Deputy Mayor for Planning and Economic Development) is listed but not named in PDF pages — may be an inference

### VII-K — attribution
- **[warn] unfounded_attribution** `` — AT0 (Office of the Chief Financial Officer) is listed but not named in PDF pages — may be an inference

### VII-M — attribution
- **[warn] unfounded_attribution** `` — AG0 (Board of Ethics and Government Accountability) is listed but not named in PDF pages — may be an inference
- **[warn] unfounded_attribution** `` — AM0 (Department of General Services) is listed but not named in PDF pages — may be an inference
- **[warn] unfounded_attribution** `` — BA0 (Office of the Secretary) is listed but not named in PDF pages — may be an inference
- **[warn] unfounded_attribution** `` — BE0 (Department of Human Resources) is listed but not named in PDF pages — may be an inference
- **[warn] unfounded_attribution** `` — CB0 (Office of the Attorney General for the District of Columbia) is listed but not named in PDF pages — may be an inference
- **[warn] unfounded_attribution** `` — CQ0 (Office of the Tenant Advocate) is listed but not named in PDF pages — may be an inference
- **[warn] unfounded_attribution** `` — CR0 (Department of Licensing and Consumer Protection) is listed but not named in PDF pages — may be an inference
- **[warn] unfounded_attribution** `` — EB0 (Office of the Deputy Mayor for Planning and Economic Development) is listed but not named in PDF pages — may be an inference
- **[warn] unfounded_attribution** `` — HT0 (Department of Health Care Finance) is listed but not named in PDF pages — may be an inference
- **[warn] unfounded_attribution** `` — KG0 (Department of Energy and Environment) is listed but not named in PDF pages — may be an inference
- **[warn] unfounded_attribution** `` — LQ0 (Alcoholic Beverage and Cannabis Administration) is listed but not named in PDF pages — may be an inference
- **[warn] unfounded_attribution** `` — RJ0 (Captive Insurance Agency) is listed but not named in PDF pages — may be an inference
- **[warn] unfounded_attribution** `` — TO0 (Office of the Chief Technology Officer) is listed but not named in PDF pages — may be an inference

