% Generated by roxygen2: do not edit by hand % Please edit documentation in R/spending.R \name{cog_spending} \alias{cog_spending} \title{Summarized spending by category} \usage{ cog_spending( govid, years, category = NULL, per_capita = FALSE, adjust_to_year = NULL, basis = c("harmonized", "raw"), recipe = NULL, expenditure_concept = c("direct", "total") ) } \arguments{ \item{govid}{Character vector of `canonical_govid` values.} \item{years}{Integer vector of years.} \item{category}{Character vector of category names (from `summary_categories.category`), or `NULL` for all categories.} \item{per_capita}{If `TRUE`, adds `amt_per_capita_nominal` (and `amt_per_capita_real` when `adjust_to_year` is set) using the per-year Census F-33 population from `gov_population_yearly`. Result also gains a `pop_source` column with values `"census_f33"` or `"unavailable"` (the latter for gov types 4/5 and any row whose population is missing in that year).} \item{adjust_to_year}{Integer base year for CPI-U real-dollar conversion, or `NULL` for nominal only.} \item{basis}{`"harmonized"` (default) sums item codes through the cross-vintage harmonization mapping (folding series-break-affected codes onto a comparable target and excluding aggregate / discontinued rows -- see the `harmonization` block in `cog_explain()`); `"raw"` reproduces the pre-Phase-R2 behavior (published item codes, no folding). On a corpus with `schema_version < 5` (no harmonization tables), `basis` silently resolves to `"raw"` when left at its default and the resolution is recorded in the provenance; explicitly passing `basis = "harmonized"` on such a corpus aborts. Ignored when `recipe` is set (see below).} \item{recipe}{Optional harmonization recipe id (see [cog_recipes()]) for multi-code cross-vintage series that a 1:1 harmonized_code mapping can't express (e.g. a wide-era aggregate that only splits into leaf codes in the modern era). Mutually exclusive with `category`. The result's subtype column reads `"recipe"` and `category` reads the recipe's label. Requires `schema_version >= 5`. A recipe query bypasses `basis` entirely (it joins `long` directly rather than going through the `*_annotated`/`*_annotated_harmonized` views), so the `basis` argument is ignored and the result's provenance reports `basis = "recipe"` with an inert `harmonization` block (`applied = FALSE`, pointing at the `recipe` block instead) rather than a possibly-misleading `"harmonized"`/`"raw"` value.} \item{expenditure_concept}{`"direct"` (default) returns only the government's own direct spending (item codes `E`/`F`/`G`), unchanged from prior releases. `"total"` additionally UNIONs in the intergovernmental leg -- payments to local governments (`M` codes) and to the state government (`L` codes, excluding the `L--` family-total rollup) -- so results gain rows with `spend_subtype == "intergovernmental"`. Mutually exclusive with `recipe` (a recipe already defines its own component codes). **Do not sum `"total"` results across levels of government** (e.g. state + county + city): a state's `M12` payment to a school district is the same dollar the district reports as its own direct `E12`, so summing both double-counts it. This matters in particular with [cog_geographic_rollup()], which sums across exactly that kind of multi-layer government set.} } \value{ Tibble with columns `year`, `canonical_govid`, `gov_name`, `spend_subtype`, `category`, `amt_nominal`, optional `amt_real`, optional `amt_per_capita_nominal`, optional `amt_per_capita_real`, optional `pop_source`, `codes_included`, `aggregate_fallback`, `notes`. Carries a `provenance` attribute matching `inst/schemas/provenance-v1.json`. } \description{ One row per `(year, canonical_govid, spend_subtype, category)`. Amounts are returned in **full U.S. dollars** (the raw corpus stores them in $1,000s; this verb multiplies by 1000 so downstream code can freely rescale to millions/billions). The conversion is recorded in the provenance attribute under `transformations$units_conversion`. }