Add history window controls and expand taxonomy pack support

- add 3Y/5Y/10Y financial history filtering and reorganize normalization details UI
- add new fiscal taxonomy surface/income bridge/KPI packs and update Rust taxonomy loading
- auto-detect Homebrew SQLite for native `sqlite-vec` in local dev/e2e with docs and env guidance
This commit is contained in:
2026-03-18 23:40:28 -04:00
parent f8426c4dde
commit 17de3dd72d
102 changed files with 14978 additions and 1316 deletions

View File

@@ -440,4 +440,58 @@ mod tests {
let core_bridge = load_income_bridge(FiscalPack::Core).expect("core bridge should load");
assert_eq!(core_bridge.pack, "core");
}
#[test]
fn loads_all_non_core_pack_assets() {
let packs = [
FiscalPack::BankLender,
FiscalPack::Insurance,
FiscalPack::ReitRealEstate,
FiscalPack::BrokerAssetManager,
FiscalPack::Agriculture,
FiscalPack::ContractorsConstruction,
FiscalPack::ContractorsFederalGovernment,
FiscalPack::DevelopmentStage,
FiscalPack::EntertainmentBroadcasters,
FiscalPack::EntertainmentCableTelevision,
FiscalPack::EntertainmentCasinos,
FiscalPack::EntertainmentFilms,
FiscalPack::EntertainmentMusic,
FiscalPack::ExtractiveMining,
FiscalPack::MortgageBanking,
FiscalPack::TitlePlant,
FiscalPack::Franchisors,
FiscalPack::NotForProfit,
FiscalPack::PlanDefinedBenefit,
FiscalPack::PlanDefinedContribution,
FiscalPack::PlanHealthWelfare,
FiscalPack::RealEstateGeneral,
FiscalPack::RealEstateCommonInterest,
FiscalPack::RealEstateRetailLand,
FiscalPack::RealEstateTimeSharing,
FiscalPack::Software,
FiscalPack::Steamship,
];
for pack in packs {
let surface_pack = load_surface_pack(pack)
.unwrap_or_else(|error| panic!("surface pack {} failed: {error}", pack.as_str()));
assert_eq!(surface_pack.pack, pack.as_str());
assert!(
!surface_pack.surfaces.is_empty(),
"{} should define surfaces",
pack.as_str()
);
let bridge = load_income_bridge(pack)
.unwrap_or_else(|error| panic!("income bridge {} failed: {error}", pack.as_str()));
assert_eq!(bridge.pack, pack.as_str());
assert!(bridge.rows.contains_key("revenue"));
assert!(bridge.rows.contains_key("net_income"));
let kpi_pack = load_kpi_pack(pack)
.unwrap_or_else(|error| panic!("kpi pack {} failed: {error}", pack.as_str()));
assert_eq!(kpi_pack.pack, pack.as_str());
}
}
}