add new structured error/state-checking framework; improve error messages, standardize classes
add session management to all functions requiring state via session parameter (not specifying it uses a default session fo backwards compatibility / simple use cases)
Importing
validate imported time series have unique dates (also check for this during tracking difference calculations)
add a provider wrapper for BNP Paribas ETFs
support/fix numeric sheet selection for Excel 2003 XML files
Examples
add cash funds
fix Japan gross index import
fundsr 0.4.0
Breaking changes
reorder arguments in msci() to match package convention
refactor roll_diffs() for speed / better interface
Survival plots
add survival curve plots using Human Mortality Database (HMD) empirical data and EUROPOP2023 projections
Fixes
skip unavailable funds, indices when calculating differences
ensure y-limits in rolling-difference plots include the last 30 days (even if outside quantiles)
make roll_diffs() skip benchmarks (in addition to funds) that are not found in supplied df
more robust gg_params list flattening
date breaks on fixed months, quarter or biannual (once plot >3 yrs)
Tests
add rolling test
Vignettes, examples, translations
add life vignette
add more example scripts; translate more index names in common_spec
fix glob_funds example to include EUR indices
fix Bulgarian translation: wrong y-axis label on log-return charts
translate all examples to Bulgarian
fundsr 0.1.0
Configuration
fundsr_options() provides a validated wrapper around options() for setting common fundsr.* options (data directories, export settings, URL registry, and more).
add_fund_urls() adds/updates the fund download registry (option fundsr.fund_urls).
Import and storage
Internal caching/storage for imported time series via a storage environment (get_storage(), clear_storage(), store_timeseries()), with optional forced refresh via options(fundsr.reload = TRUE).
join_env() combines multiple tables stored in an environment, with optional “late” left-joins and optional coalescing of .x/.y join columns.
Rolling differences
roll_diffs() computes rolling, annualized tracking differences for fund–index pairs with either log-return or CAGR-style variants, producing <fund>_rd columns.
Plotting and export
plot_roll_diffs() visualizes rolling tracking-difference series with quantile-based y-limits and bps axis labeling.
run_plots() generates plot sets from a specification, producing both CAGR and log-return variants.
Optional direct PNG export via ggplot2::ggsave() without Inkscape (lower quality; controlled by fundsr.internal_png).
Xetra Liquidity Measure (XLM) support: read and plot XLM time series (read_xlm_directory(), plot_xlms()), with optional back-translation of displayed tickers using options(fundsr.xetra_map).
Internationalization
Chart elements are available in two languages (English and Bulgarian), with language selection based on LANGUAGE / LC_MESSAGES.
Language-aware user-supplied strings are supported via named vectors keyed by language code.
Utilities
reset_state() clears cached storage, loader registry, queued exports, and XLM bookkeeping for the current session.