Skip to content

feat(awards): obligations_by_fiscal_year and attachments(extraction_status) (API 5.11.0) - #92

Merged
vdavez merged 2 commits into
mainfrom
feat/obligations-by-fiscal-year
Oct 19, 2026
Merged

vdavez merged 2 commits into
mainfrom
feat/obligations-by-fiscal-year

Conversation

@makegov-mark

@makegov-mark makegov-mark Bot commented Oct 19, 2026

Copy link
Copy Markdown
Contributor

What

  • obligations_by_fiscal_year(fiscal_year, obligated) shape expand on list_contracts(), list_idvs(), list_otas(), list_otidvs() and their get_* counterparts (Tango API 5.11.0). Each entry parses as fiscal_year: int, obligated: Decimal. It is always None on IDVs and OTIDVs, whose transactions report a running lifetime total.
  • attachments(extraction_status) shape field on opportunities and notices (Tango API 5.11.0).
  • Re-vendored contracts/filter_shape_contract.json at 5.11.0 and regenerated tango/shapes/generated_overlay.py.

Notes

  • The typed schema lives in explicit_schemas.py as FiscalYearObligation. The overlay generator also emits an unreferenced ObligationsByFiscalYear nested schema with placeholder str types for resources the SDK has no method for. Naming the explicit schema differently keeps the overlay from merging over it.
  • contracts/observed_shape_types.json is unchanged; the field is not live yet, so it cannot be probed.

Testing

  • uv run pytest tests/ -m "not integration": 516 passed, 30 skipped.
  • New tests/test_obligations_by_fiscal_year.py (20 tests): shapes validate on all four award models, an unknown sub-field is rejected, list responses parse obligated as Decimal (changing the schema type to str fails them), IDV/OTIDV null passes through, and attachments(extraction_status) validates on opportunities and notices.
  • uv run mypy tango/: clean. uv run ruff check: clean on every changed file (the remaining findings predate this branch).
  • scripts/check_shape_coverage.py: no new drift. scripts/check_filter_shape_conformance.py: passes.

🤖 Generated with Claude Code

…tatus) (API 5.11.0)

Contracts, IDVs, OTAs and OTIDVs accept the `obligations_by_fiscal_year(fiscal_year, obligated)` shape expand, parsed as a list of `{fiscal_year: int, obligated: Decimal}`.
It is always `None` on IDVs and OTIDVs, whose transactions report a running lifetime total.
Opportunities and notices accept `attachments(extraction_status)`.
Re-vendors the API contract at 5.11.0 and regenerates the shape overlay.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@vdavez
vdavez marked this pull request as ready for review October 19, 2026 17:20
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@vdavez
vdavez merged commit 0b764b6 into main Oct 19, 2026
11 checks passed
@vdavez
vdavez deleted the feat/obligations-by-fiscal-year branch October 19, 2026 17:46
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant