feat: basis= harmonized/raw with v4/v5 dual-accept
Adds schema_version 5 support alongside the existing v4 corpus:
.validate_schema() now accepts a supported set (4, 5) instead of a single
expected version, and cog_spending()/cog_revenue() gain basis =
c("harmonized", "raw"). Harmonized basis routes to new
spending_annotated_harmonized / revenue_annotated_harmonized views built on
spending_long_harmonized / revenue_long_harmonized (REPLACE(harmonized_code
AS item_code), excluding aggregate and NA-harmonized rows); raw basis is
byte-identical to the pre-Phase-R2 behavior. On a v4 corpus, an unspecified
basis silently resolves to "raw" with a provenance note; an explicit
basis = "harmonized" aborts with an actionable message.
Provenance gains basis, basis_note, and a harmonization block
(applied/na_rows_excluded/na_amount_excluded). The five new schema-v5-only
SQL views (harmonized long/annotated views, harmonization_map,
harmonization_recipes, series_breaks_pq) are registered conditionally on
manifest$schema_version >= 5, since DuckDB's read_parquet() errors eagerly
at CREATE VIEW time when the backing file doesn't exist on a v4 corpus.
Fixture corpus regenerated to schema_version 5 / years 2011, 2012, 2019,
2020 (2011->2012 spans the wide-aggregate -> modern-leaf format boundary
needed for the harmonization/recipe work), with the harmonization_map /
harmonization_recipes / series_breaks parquet tables bundled alongside the
existing metadata registries.
This commit is contained in:
+12
-1
@@ -9,7 +9,8 @@ cog_spending(
|
||||
years,
|
||||
category = NULL,
|
||||
per_capita = FALSE,
|
||||
adjust_to_year = NULL
|
||||
adjust_to_year = NULL,
|
||||
basis = c("harmonized", "raw")
|
||||
)
|
||||
}
|
||||
\arguments{
|
||||
@@ -29,6 +30,16 @@ 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.}
|
||||
}
|
||||
\value{
|
||||
Tibble with columns `year`, `canonical_govid`, `gov_name`,
|
||||
|
||||
Reference in New Issue
Block a user