From 64893a9dd76845b9269ee69db5346ff3009e83fe Mon Sep 17 00:00:00 2001 From: "Trevor L. Davis" Date: Sat, 18 May 2024 23:46:55 -0700 Subject: [PATCH] fix: Tweaks to various columns * ``register_hledger()`` now imports a transaction `id` column. * ``register_beancount()`` now coerces the `date` column to a "Date" object. ``register_ledger()`` and ``register_hledger()`` already did so. * ``register_ledger()`` now trims the `comment` column with `stringr::str_trim()`. --- DESCRIPTION | 4 +- NEWS.md | 5 +- R/register.r | 46 ++-- README.rst | 270 +++++++++++------------ inst/extdata/example.ledger | 2 +- man/figures/README-income_chart-1.png | Bin 22706 -> 22353 bytes man/figures/README-net_worth_chart-1.png | Bin 11340 -> 11896 bytes 7 files changed, 168 insertions(+), 159 deletions(-) diff --git a/DESCRIPTION b/DESCRIPTION index e05f274..bf0844e 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,7 +1,7 @@ Package: ledger Type: Package Title: Utilities for Importing Data from Plain Text Accounting Files -Version: 2.0.10-0 +Version: 2.0.10-2 Authors@R: c(person("Trevor L.", "Davis", role=c("aut", "cre"), email="trevor.l.davis@gmail.com", comment = c(ORCID = "0000-0001-6341-4639")), @@ -16,7 +16,7 @@ Imports: stringr, tidyr (>= 0.7.0), tibble, - tidyselect, + tidyselect (>= 1.2.0), tools Suggests: rio, diff --git a/NEWS.md b/NEWS.md index 35fb02e..9cdbeb9 100644 --- a/NEWS.md +++ b/NEWS.md @@ -1,8 +1,11 @@ ledger 2.0.10 (development) =========================== -* ``register_beancount()`` now imports a transaction `id` column (#21). +* ``register_beancount()`` and ``register_hledger()`` now import a transaction `id` column (#21). Thanks @vikasrawal for suggestion. +* ``register_beancount()`` now coerces the `date` column to a "Date" object. + ``register_ledger()`` and ``register_hledger()`` already did so. +* ``register_ledger()`` now trims the `comment` column with `stringr::str_trim()`. ledger 2.0.9 ============ diff --git a/R/register.r b/R/register.r index 2dc5380..bcfd824 100644 --- a/R/register.r +++ b/R/register.r @@ -155,7 +155,7 @@ register_beancount <- function(file, date = NULL) { .system("bean-query", args) } df <- .read_csv(cfile) - if (nrow(df) == 0) { + if (nrow(df) == 0L) { df <- tibble(date = as.Date(character()), mark = character(), account = character(), @@ -169,18 +169,20 @@ register_beancount <- function(file, date = NULL) { mv_commodity = character(), tags = character(), id = character()) + } else { + df <- mutate(df, + date = as.Date(str_trim(.data$date)), + mark = str_trim(.data$mark), + account = str_trim(.data$account), + payee = str_trim(.data$payee), + description = str_trim(.data$description), + commodity = str_trim(.data$commodity), + hc_commodity = str_trim(.data$hc_commodity), + mv_commodity = str_trim(.data$mv_commodity), + tags = str_squish(.data$tags), + id = str_trim(.data$id)) + .select_columns(df) } - df <- mutate(df, - mark = str_trim(.data$mark), - account = str_trim(.data$account), - payee = str_trim(.data$payee), - description = str_trim(.data$description), - commodity = str_trim(.data$commodity), - hc_commodity = str_trim(.data$hc_commodity), - mv_commodity = str_trim(.data$mv_commodity), - tags = str_squish(.data$tags), - id = str_trim(.data$id)) - .select_columns(df) } #' @rdname register @@ -235,7 +237,7 @@ register_hledger <- function(file, flags = "", date = NULL, add_mark = TRUE, add } .clean_hledger <- function(df) { - if (nrow(df)) { + if (nrow(df) > 0L) { df <- mutate(df, date = as.Date(date, tryFormats = c("%Y-%m-%d", "%Y/%m/%d"))) df <- mutate(df, description = ifelse(grepl("\\|$", .data$description), paste0(.data$description, " "), @@ -250,16 +252,23 @@ register_hledger <- function(file, flags = "", date = NULL, add_mark = TRUE, add df <- mutate(df, amount = gsub(" @.*$", "", .data$amount)) df <- mutate(df, amount = to_numeric(.data$amount)) + df <- mutate(df, id = as.character(.data$txnidx)) - df <- select(df, .data$date, .data$description, .data$payee, .data$amount, - .data$commodity, .data$account, mark = .data$status) + df <- select(df, "date", "description", "payee", "amount", + "commodity", "account", mark = "status", "id") } else { - df <- mutate(df, payee = .data$description, commodity = .data$amount) + df <- tibble(date = as.Date(character()), + description = character(), + payee = character(), + amount = numeric(), + commodity = character(), + account = character(), + mark = character(), + id = character()) } df } - .left_of_split <- function(strings, split) { sapply(strsplit(strings, split), function(x) x[1]) } @@ -298,7 +307,6 @@ register_ledger <- function(file, flags = "", date = NULL) { .clean_ledger <- function(df) { names(df) <- c("date", "V2", "description", "account", "commodity", "amount", "mark", "comment") - df <- mutate(df, date = as.Date(date, "%Y/%m/%d"), description = ifelse(grepl("\\|$", .data$description), paste0(.data$description, " "), @@ -310,7 +318,7 @@ register_ledger <- function(file, flags = "", date = NULL) { payee = ifelse(.data$payee == "", NA, .data$payee), description = ifelse(.data$description == "", NA, .data$description), payee = as.character(.data$payee), - comment = as.character(.data$comment) + comment = str_trim(as.character(.data$comment)) ) df } diff --git a/README.rst b/README.rst index 1f92101..9ab31c8 100644 --- a/README.rst +++ b/README.rst @@ -81,7 +81,7 @@ The main function of this package is ``register`` which reads in the register of Here are some examples of very basic files stored within the package: -.. code:: r +.. sourcecode:: r library("ledger") @@ -94,20 +94,20 @@ Here are some examples of very basic files stored within the package: ## # A tibble: 42 × 8 ## date mark payee description account amount commodity comment ## - ## 1 2015-12-31 * Opening Balanc… Assets… 5000 USD - ## 2 2015-12-31 * Opening Balanc… Equity… -5000 USD - ## 3 2016-01-01 * Landlord Rent Assets… -1500 USD - ## 4 2016-01-01 * Landlord Rent Expens… 1500 USD - ## 5 2016-01-01 * Brokerage Buy Stock Assets… -1000 USD - ## 6 2016-01-01 * Brokerage Buy Stock Equity… 1000 USD - ## 7 2016-01-01 * Brokerage Buy Stock Assets… 4 SP - ## 8 2016-01-01 * Brokerage Buy Stock Equity… -1000 USD - ## 9 2016-01-01 * Supermarket Grocery store … Expens… 501. USD - ## 10 2016-01-01 * Supermarket Grocery store … Liabil… -501. USD + ## 1 2015-12-31 * Opening Balanc… Assets… 5000 USD "" + ## 2 2015-12-31 * Opening Balanc… Equity… -5000 USD "" + ## 3 2016-01-01 * Landlord Rent Assets… -1500 USD "" + ## 4 2016-01-01 * Landlord Rent Expens… 1500 USD "" + ## 5 2016-01-01 * Brokerage Buy Stock Assets… -1000 USD "" + ## 6 2016-01-01 * Brokerage Buy Stock Equity… 1000 USD "" + ## 7 2016-01-01 * Brokerage Buy Stock Assets… 4 SP "" + ## 8 2016-01-01 * Brokerage Buy Stock Equity… -1000 USD "" + ## 9 2016-01-01 * Supermarket Grocery store Expens… 501. USD "Link:… + ## 10 2016-01-01 * Supermarket Grocery store Liabil… -501. USD "Link:… ## # ℹ 32 more rows -.. code:: r +.. sourcecode:: r hledger_file <- system.file("extdata", "example.hledger", package = "ledger") @@ -116,7 +116,7 @@ Here are some examples of very basic files stored within the package: :: - ## # A tibble: 42 × 11 + ## # A tibble: 42 × 12 ## date mark payee description account amount commodity historical_cost ## ## 1 2015-12-31 * Opening Ba… Assets… 5000 USD 5000 @@ -130,11 +130,11 @@ Here are some examples of very basic files stored within the package: ## 9 2016-01-01 * Superm… Grocery st… Expens… 501. USD 501. ## 10 2016-01-01 * Superm… Grocery st… Liabil… -501. USD -501. ## # ℹ 32 more rows - ## # ℹ 3 more variables: hc_commodity , market_value , - ## # mv_commodity + ## # ℹ 4 more variables: hc_commodity , market_value , + ## # mv_commodity , id -.. code:: r +.. sourcecode:: r beancount_file <- system.file("extdata", "example.beancount", package = "ledger") @@ -145,7 +145,7 @@ Here are some examples of very basic files stored within the package: ## # A tibble: 42 × 13 ## date mark payee description account amount commodity historical_cost - ## + ## ## 1 2015-12-31 * "" Opening Ba… Assets… 5000 USD 5000 ## 2 2015-12-31 * "" Opening Ba… Equity… -5000 USD -5000 ## 3 2016-01-01 * "Landl… Rent Assets… -1500 USD -1500 @@ -165,7 +165,7 @@ Here are some examples of very basic files stored within the package: Here is an example reading in a beancount file generated by ``bean-example``: -.. code:: r +.. sourcecode:: r bean_example_file <- tempfile(fileext = ".beancount") @@ -176,25 +176,25 @@ Here is an example reading in a beancount file generated by ``bean-example``: :: - ## # A tibble: 2,869 × 13 + ## # A tibble: 2,907 × 13 ## date mark payee description account amount commodity historical_cost - ## - ## 1 2022-01-01 * "" Opening Ba… Assets… 3.82e3 USD 3825. - ## 2 2022-01-01 * "" Opening Ba… Equity… -3.82e3 USD -3825. + ## + ## 1 2022-01-01 * "" Opening Ba… Assets… 3.78e3 USD 3783. + ## 2 2022-01-01 * "" Opening Ba… Equity… -3.78e3 USD -3783. ## 3 2022-01-01 * "" Allowed co… Income… -1.85e4 IRAUSD -18500 ## 4 2022-01-01 * "" Allowed co… Assets… 1.85e4 IRAUSD 18500 ## 5 2022-01-04 * "BANK… Monthly ba… Assets… -4 e0 USD -4 ## 6 2022-01-04 * "BANK… Monthly ba… Expens… 4 e0 USD 4 - ## 7 2022-01-04 * "Cafe… Eating out… Liabil… -3.97e1 USD -39.7 - ## 8 2022-01-04 * "Cafe… Eating out… Expens… 3.97e1 USD 39.7 - ## 9 2022-01-05 * "Rive… Paying the… Assets… -2.4 e3 USD -2400 - ## 10 2022-01-05 * "Rive… Paying the… Expens… 2.4 e3 USD 2400 - ## # ℹ 2,859 more rows + ## 7 2022-01-05 * "Rive… Paying the… Assets… -2.4 e3 USD -2400 + ## 8 2022-01-05 * "Rive… Paying the… Expens… 2.4 e3 USD 2400 + ## 9 2022-01-05 * "Jewe… Eating out Liabil… -3.74e1 USD -37.4 + ## 10 2022-01-05 * "Jewe… Eating out Expens… 3.74e1 USD 37.4 + ## # ℹ 2,897 more rows ## # ℹ 5 more variables: hc_commodity , market_value , ## # mv_commodity , tags , id -.. code:: r +.. sourcecode:: r suppressPackageStartupMessages(library("dplyr")) @@ -205,16 +205,15 @@ Here is an example reading in a beancount file generated by ``bean-example``: :: - ## # A tibble: 7 × 3 - ## trip account trip_total - ## - ## 1 trip-boston-2023 Expenses:Food:Coffee 30.2 - ## 2 trip-boston-2023 Expenses:Food:Restaurant 477. - ## 3 trip-chicago-2022 Expenses:Food:Alcohol 39.4 - ## 4 trip-chicago-2022 Expenses:Food:Coffee 42.5 - ## 5 trip-chicago-2022 Expenses:Food:Restaurant 425 - ## 6 trip-new-york-2023 Expenses:Food:Coffee 61.3 - ## 7 trip-new-york-2023 Expenses:Food:Restaurant 713. + ## # A tibble: 6 × 3 + ## trip account trip_total + ## + ## 1 trip-los-angeles-2022 Expenses:Food:Alcohol 23.4 + ## 2 trip-los-angeles-2022 Expenses:Food:Coffee 41.9 + ## 3 trip-los-angeles-2022 Expenses:Food:Restaurant 613. + ## 4 trip-los-angeles-2023 Expenses:Food:Alcohol 14.8 + ## 5 trip-los-angeles-2023 Expenses:Food:Coffee 12.8 + ## 6 trip-los-angeles-2023 Expenses:Food:Restaurant 739. @@ -224,7 +223,7 @@ Using ``rio::import()`` and ``rio::convert()`` If one has loaded in the ``ledger`` package one can also use ``rio::import`` to read in the register: -.. code:: r +.. sourcecode:: r df2 <- rio::import(bean_example_file) @@ -250,7 +249,7 @@ The main advantage of this is that it allows one to use ``rio::convert`` to easi Some examples of using the ``net_worth`` function using the example files from the ``register`` examples: -.. code:: r +.. sourcecode:: r dates <- seq(as.Date("2016-01-01"), as.Date("2018-01-01"), by="years") @@ -267,7 +266,7 @@ Some examples of using the ``net_worth`` function using the example files from t ## 3 2018-01-01 USD 6743. 6264 -521. 1000 -.. code:: r +.. sourcecode:: r net_worth(hledger_file, dates) @@ -283,7 +282,7 @@ Some examples of using the ``net_worth`` function using the example files from t ## 3 2018-01-01 USD 6743. 7264 -521. -.. code:: r +.. sourcecode:: r net_worth(beancount_file, dates) @@ -299,7 +298,7 @@ Some examples of using the ``net_worth`` function using the example files from t ## 3 2018-01-01 USD 6743. 7264 -521. -.. code:: r +.. sourcecode:: r dates <- seq(min(as.Date(df$date)), max(as.Date(df$date)), by="years") @@ -312,11 +311,11 @@ Some examples of using the ``net_worth`` function using the example files from t ## date commodity net_worth assets liabilities ## ## 1 2023-01-01 IRAUSD 0 0 0 - ## 2 2023-01-01 USD 41148. 42147. -999. - ## 3 2023-01-01 VACHR 18 18 0 + ## 2 2023-01-01 USD 38821. 40256 -1435. + ## 3 2023-01-01 VACHR 26 26 0 ## 4 2024-01-01 IRAUSD 0 0 0 - ## 5 2024-01-01 USD 80604. 82975. -2371. - ## 6 2024-01-01 VACHR -100 -100 0 + ## 5 2024-01-01 USD 83645. 85451. -1806. + ## 6 2024-01-01 VACHR 52 52 0 @@ -326,7 +325,7 @@ Some examples of using the ``net_worth`` function using the example files from t Some examples using the ``prune_coa`` function to simplify the "Chart of Account" names to a given maximum depth: -.. code:: r +.. sourcecode:: r suppressPackageStartupMessages(library("dplyr")) @@ -342,19 +341,19 @@ Some examples using the ``prune_coa`` function to simplify the "Chart of Account ## account mv_commodity market_value ## ## 1 Assets IRAUSD 6500 - ## 2 Assets USD 99779. - ## 3 Assets VACHR -50 - ## 4 Equity USD -3825. + ## 2 Assets USD 99028. + ## 3 Assets VACHR 102 + ## 4 Equity USD -3783. ## 5 Expenses IRAUSD 49000 - ## 6 Expenses USD 223473. - ## 7 Expenses VACHR 360 + ## 6 Expenses USD 224444. + ## 7 Expenses VACHR 208 ## 8 Income IRAUSD -55500 - ## 9 Income USD -312354. + ## 9 Income USD -313541. ## 10 Income VACHR -310 - ## 11 Liabilities USD -2466. + ## 11 Liabilities USD -2382. -.. code:: r +.. sourcecode:: r df %>% prune_coa(2) %>% @@ -367,23 +366,23 @@ Some examples using the ``prune_coa`` function to simplify the "Chart of Account ## # A tibble: 17 × 3 ## account mv_commodity market_value ## - ## 1 Assets:US IRAUSD 6.5 e+ 3 - ## 2 Assets:US USD 9.98e+ 4 - ## 3 Assets:US VACHR -5 e+ 1 - ## 4 Equity:Opening-Balances USD -3.82e+ 3 - ## 5 Expenses:Financial USD 4.29e+ 2 - ## 6 Expenses:Food USD 1.62e+ 4 - ## 7 Expenses:Health USD 6.01e+ 3 - ## 8 Expenses:Home USD 7.30e+ 4 - ## 9 Expenses:Taxes IRAUSD 4.9 e+ 4 - ## 10 Expenses:Taxes USD 1.25e+ 5 - ## 11 Expenses:Transport USD 3.12e+ 3 - ## 12 Expenses:Vacation VACHR 3.6 e+ 2 - ## 13 Income:US IRAUSD -5.55e+ 4 - ## 14 Income:US USD -3.12e+ 5 - ## 15 Income:US VACHR -3.1 e+ 2 - ## 16 Liabilities:AccountsPayable USD -8.53e-14 - ## 17 Liabilities:US USD -2.47e+ 3 + ## 1 Assets:US IRAUSD 6500 + ## 2 Assets:US USD 99028. + ## 3 Assets:US VACHR 102 + ## 4 Equity:Opening-Balances USD -3783. + ## 5 Expenses:Financial USD 438. + ## 6 Expenses:Food USD 17109. + ## 7 Expenses:Health USD 6008. + ## 8 Expenses:Home USD 72865. + ## 9 Expenses:Taxes IRAUSD 49000 + ## 10 Expenses:Taxes USD 124784. + ## 11 Expenses:Transport USD 3240 + ## 12 Expenses:Vacation VACHR 208 + ## 13 Income:US IRAUSD -55500 + ## 14 Income:US USD -313541. + ## 15 Income:US VACHR -310 + ## 16 Liabilities:AccountsPayable USD 0 + ## 17 Liabilities:US USD -2382. @@ -397,7 +396,7 @@ beancount example generated by ``bean-example``. First we load the (mainly tidyverse) libraries we'll be using and adjusting terminal output: -.. code:: r +.. sourcecode:: r library("ledger") @@ -417,7 +416,7 @@ First we load the (mainly tidyverse) libraries we'll be using and adjusting term Then we'll write some convenience functions we'll use over and over again: -.. code:: r +.. sourcecode:: r print_tibble_rows <- function(df) { @@ -443,7 +442,7 @@ Basic balance sheets Here is some basic balance sheets (using the market value of our assets): -.. code:: r +.. sourcecode:: r print_balance_sheet <- function(df) { @@ -460,14 +459,14 @@ Here is some basic balance sheets (using the market value of our assets): :: ## # A tibble: 3 × 5 - ## date commodity net_worth assets liabilities - ## - ## 1 2024-05-18 IRAUSD 6500 6500 0 - ## 2 2024-05-18 USD 95249. 98220. -2971. - ## 3 2024-05-18 VACHR -66 -66 0 + ## date commodity net_worth assets liabilities + ## + ## 1 2024-05-19 IRAUSD 6500 6500 0 + ## 2 2024-05-19 USD 100688. 102388. -1701. + ## 3 2024-05-19 VACHR 110 110 0 -.. code:: r +.. sourcecode:: r print_balance_sheet(prune_coa(df, 2)) @@ -478,14 +477,14 @@ Here is some basic balance sheets (using the market value of our assets): ## # A tibble: 1 × 3 ## account mv_commodity market_value ## - ## 1 Assets:US USD 963. + ## 1 Assets:US USD 2273. ## # A tibble: 1 × 3 ## account mv_commodity market_value ## - ## 1 Liabilities:US USD -2971. + ## 1 Liabilities:US USD -1701. -.. code:: r +.. sourcecode:: r print_balance_sheet(df) @@ -496,13 +495,13 @@ Here is some basic balance sheets (using the market value of our assets): ## # A tibble: 3 × 3 ## account mv_commodity market_value ## - ## 1 Assets:US:ETrade:Cash USD 698. - ## 2 Assets:US:BofA:Checking USD 265. - ## 3 Assets:US:Vanguard:Cash USD 0.0200 + ## 1 Assets:US:BofA:Checking USD 1857. + ## 2 Assets:US:ETrade:Cash USD 417. + ## 3 Assets:US:Vanguard:Cash USD -0.180 ## # A tibble: 1 × 3 ## account mv_commodity market_value ## - ## 1 Liabilities:US:Chase:Slate USD -2971. + ## 1 Liabilities:US:Chase:Slate USD -1701. @@ -512,7 +511,7 @@ Basic net worth chart Here is a basic chart of one's net worth from the beginning of the plaintext accounting file to today by month: -.. code:: r +.. sourcecode:: r next_month <- function(date) { @@ -532,7 +531,7 @@ Basic income sheets ~~~~~~~~~~~~~~~~~~~ -.. code:: r +.. sourcecode:: r month_cutoff <- zoo::as.yearmon(Sys.Date()) - 2/12 @@ -581,12 +580,12 @@ Basic income sheets ## # A tibble: 3 × 5 ## commodity type `Mar 2024` `Apr 2024` `May 2024` ## - ## 1 USD expenses 8617. 7503. 2539. - ## 2 USD income 11189. 10479. 5240. - ## 3 USD net 2571. 2977. 2701. + ## 1 USD expenses 8706. 7496. 2248. + ## 2 USD income 11115. 10479. 5240. + ## 3 USD net 2410. 2984. 2992. -.. code:: r +.. sourcecode:: r print_income(prune_coa(df, 2)) @@ -597,10 +596,10 @@ Basic income sheets ## # A tibble: 1 × 5 ## account commodity `Mar 2024` `Apr 2024` `May 2024` ## - ## 1 Income:US USD 11189. 10479. 5240. + ## 1 Income:US USD 11115. 10479. 5240. -.. code:: r +.. sourcecode:: r print_expenses(prune_coa(df, 2)) @@ -611,15 +610,15 @@ Basic income sheets ## # A tibble: 6 × 5 ## account commodity `Mar 2024` `Apr 2024` `May 2024` ## - ## 1 Expenses:Financial USD 4 4 39.8 - ## 2 Expenses:Food USD 847. 590. 290. - ## 3 Expenses:Health USD 194. 194. 96.9 - ## 4 Expenses:Home USD 2616. 2610. 0 - ## 5 Expenses:Taxes USD 4837. 3984. 1992. - ## 6 Expenses:Transport USD 120 120 120 + ## 1 Expenses:Financial USD 39.8 4 13.0 + ## 2 Expenses:Food USD 649. 592. 146. + ## 3 Expenses:Health USD 194. 194. 96.9 + ## 4 Expenses:Home USD 2612. 2602. 0 + ## 5 Expenses:Taxes USD 5092. 3984. 1992. + ## 6 Expenses:Transport USD 120 120 0 -.. code:: r +.. sourcecode:: r print_income(df) @@ -627,16 +626,17 @@ Basic income sheets :: - ## # A tibble: 4 × 5 - ## account commodity `Mar 2024` `Apr 2024` `May 2024` - ## - ## 1 Income:US:ETrade:VHT:Dividend USD 109. 0 0 - ## 2 Income:US:Hooli:GroupTermLife USD 48.6 48.6 24.3 - ## 3 Income:US:Hooli:Match401k USD 1800 1200 600 - ## 4 Income:US:Hooli:Salary USD 9231. 9231. 4615. + ## # A tibble: 5 × 5 + ## account commodity `Mar 2024` `Apr 2024` `May 2024` + ## + ## 1 Income:US:BayBook:GroupTermLife USD 48.6 48.6 24.3 + ## 2 Income:US:BayBook:Match401k USD 1800 1200 600 + ## 3 Income:US:BayBook:Salary USD 9231. 9231. 4615. + ## 4 Income:US:ETrade:GLD:Dividend USD 95.9 0 0 + ## 5 Income:US:ETrade:PnL USD -59.8 0 0 -.. code:: r +.. sourcecode:: r print_expenses(df) @@ -644,39 +644,37 @@ Basic income sheets :: - ## # A tibble: 23 × 5 + ## # A tibble: 21 × 5 ## account commodity `Mar 2024` `Apr 2024` `May 2024` ## - ## 1 Expenses:Financial:Commissions USD 0 0 35.8 + ## 1 Expenses:Financial:Commissions USD 35.8 0 8.95 ## 2 Expenses:Financial:Fees USD 4 4 4 - ## 3 Expenses:Food:Alcohol USD 18.5 0 0 - ## 4 Expenses:Food:Coffee USD 28.1 0 0 - ## 5 Expenses:Food:Groceries USD 182. 264. 73.3 - ## 6 Expenses:Food:Restaurant USD 619. 326. 216. - ## 7 Expenses:Health:Dental:Insurance USD 5.8 5.8 2.9 - ## 8 Expenses:Health:Life:GroupTermLife USD 48.6 48.6 24.3 - ## 9 Expenses:Health:Medical:Insurance USD 54.8 54.8 27.4 - ## 10 Expenses:Health:Vision:Insurance USD 84.6 84.6 42.3 - ## 11 Expenses:Home:Electricity USD 65 65 0 - ## 12 Expenses:Home:Internet USD 80.0 80.1 0 - ## 13 Expenses:Home:Phone USD 70.6 64.9 0 - ## 14 Expenses:Home:Rent USD 2400 2400 0 - ## 15 Expenses:Taxes:Y2023:US:Federal USD 499. 0 0 - ## 16 Expenses:Taxes:Y2023:US:State USD 353. 0 0 - ## 17 Expenses:Taxes:Y2024:US:CityNYC USD 350. 350. 175. - ## 18 Expenses:Taxes:Y2024:US:Federal USD 2126. 2126. 1063. - ## 19 Expenses:Taxes:Y2024:US:Medicare USD 213. 213. 107. - ## 20 Expenses:Taxes:Y2024:US:SDI USD 2.24 2.24 1.12 - ## 21 Expenses:Taxes:Y2024:US:SocSec USD 563. 563. 282. - ## 22 Expenses:Taxes:Y2024:US:State USD 730. 730. 365. - ## 23 Expenses:Transport:Tram USD 120 120 120 + ## 3 Expenses:Food:Groceries USD 282. 270. 66.2 + ## 4 Expenses:Food:Restaurant USD 367. 321. 79.4 + ## 5 Expenses:Health:Dental:Insurance USD 5.8 5.8 2.9 + ## 6 Expenses:Health:Life:GroupTermLife USD 48.6 48.6 24.3 + ## 7 Expenses:Health:Medical:Insurance USD 54.8 54.8 27.4 + ## 8 Expenses:Health:Vision:Insurance USD 84.6 84.6 42.3 + ## 9 Expenses:Home:Electricity USD 65 65 0 + ## 10 Expenses:Home:Internet USD 80.1 80.0 0 + ## 11 Expenses:Home:Phone USD 66.4 57.1 0 + ## 12 Expenses:Home:Rent USD 2400 2400 0 + ## 13 Expenses:Taxes:Y2023:US:Federal USD 632. 0 0 + ## 14 Expenses:Taxes:Y2023:US:State USD 476. 0 0 + ## 15 Expenses:Taxes:Y2024:US:CityNYC USD 350. 350. 175. + ## 16 Expenses:Taxes:Y2024:US:Federal USD 2126. 2126. 1063. + ## 17 Expenses:Taxes:Y2024:US:Medicare USD 213. 213. 107. + ## 18 Expenses:Taxes:Y2024:US:SDI USD 2.24 2.24 1.12 + ## 19 Expenses:Taxes:Y2024:US:SocSec USD 563. 563. 282. + ## 20 Expenses:Taxes:Y2024:US:State USD 730. 730. 365. + ## 21 Expenses:Transport:Tram USD 120 120 0 And here is a plot of income, expenses, and net income over time: -.. code:: r +.. sourcecode:: r ggplot(compute_total(df), aes(x=yearmon, y=amount, group=commodity, colour=commodity)) + diff --git a/inst/extdata/example.ledger b/inst/extdata/example.ledger index 71df913..6165859 100644 --- a/inst/extdata/example.ledger +++ b/inst/extdata/example.ledger @@ -54,7 +54,7 @@ P 2016/01/01 00:00:00 SP 250 USD Assets:JT-Brokerage 4 SP {250 USD} Equity:Transfer -1000 USD -2016/01/01 * Supermarket | Grocery store ;; Link: ^grocery +2016/01/01 * Supermarket | Grocery store ; Link: grocery Expenses:Food:Grocery 500.54 USD Liabilities:JT-Credit-Card -500.54 USD diff --git a/man/figures/README-income_chart-1.png b/man/figures/README-income_chart-1.png index bc8de041c6f10cd5810219d28ea675ece0ac940f..0a49378eada298565780c5053000d16d27dd40a9 100644 GIT binary patch literal 22353 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 literal 22706 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 FzW~C69T5Nk diff --git a/man/figures/README-net_worth_chart-1.png b/man/figures/README-net_worth_chart-1.png index b9a39ca7b38dbf5fd259fd6fa4f4c41b79fce28b..3c44efaa886e3bcc6af81445d050ea4e48c3c556 100644 GIT binary patch literal 11896 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 literal 11340 zcma)icQ~A1xAy20oe;rjiReN?7`+A2Thxf&qfPWK2r_~MA&3$+8AOZTBSS=)=)H~T zJ-R4o`<-*X^S*z4-}&a^a?SQUyRN;~z3zLx($-WaBW56mKpg>W5*=dI zd395yCY$Tkvxl$Lu&(zRG)bd%#AL##8NJIr42CJ!$!yjwt z*IA|U&^S0+gZoj36A77vCSPrs(DvDI)?X^ieGVcGB}YQV;m6c8MEJrcE(w~j%D6zB zsDL_r@Q#MhF{834Xx9S}~q*l36KdM0C!NJ;~1U4GA5ZSf$(TkR)AI z?mg0;7N{Jhu!e`F^w{Rqh-ZnSnhVx5H$8zQtaY!kz)`r>>4!bC-KmNPDbKA>gSILc zRJRglC@LzVC!B+877mv8%5o2{A2_!}&&^rr>-XAugfo|Lfx~u)Fw!+2nxdPu5d2Y5 zj6zAb5?-{Si18u%!`m~Oo8H}OdJkZ1Yvf$yJ0VtWwim&vw%>#`c2X6c1){K!OU|Xt z`d}U4UY&^aL9_M$ee3f!{>@Rx-IW|fgHdph#u~OBSGoSyqM=^oml0ra_8YX6nLZD_ZJEBye1x~kyb>F)4pxB^RHtUcTPb$)Wjv0$ zVOpK##A2w1P|@kN^FpIR@h=LhIIJ?O*_Sm~*h1fMl0my5e}dK8#tO+SjKJ+Ajp zWqZ;O*WyZiO3;y@QzdV-SeN~0p6Nez6ZNtDeq8HZI7DciX5`jo+Jy5T z5&5TO{7e0|)HL%FCJYJ*NC~w@M)(k$N9{Ywr6W8ML zB*Z z@kGta`X>o2z-HuiKAt{|D4B)a5hs)|Z_-$3iN|8Gz3HOe6=(4wXV(2WiisQ=X~K@w zY&HjL!?{Ya^#Mn&PEKn>pY>RRRlU8vZESw$sU#YFG4ILumb4d7XO$|{HH7gy@ z*9UKFYLwP=ay+JB$)^uD<_xQU&O3Zx*hNE4Ef3}9;~QE(n4g~~ zARwr5oi?eo({Og)c*CafL5rJ*XKl7chK*fBr25mRPqnqRnJV@O8+&^?8X8J@rC0`9 z7>o~!+j(y$n-?0^W?^wN6gUFgOgZ->T}YFA^5kWexOc*cP$XwW$kc*g<}y5PGmuj8 ztuD%uVJ|B`>cK^Wmb&`cN^ZQT_)}e7-N%oU_Bt{oeEL#_qA00pXlPhivfjLTlbn15 zeCX(uq4!eN<>cfdD8t(9KYDz`!-hl>o|CcZiz z@63l2lA%zj1Y0p-;Uvn0_s3bhSW-rj;_U2JW0+EIzq817c@Ts99g0H+PWE-c!7w~P zQtFzSx!z9=3lFDNEH~oQIQ^wz{XecPAur9F!y**hRcUl)5am@b6 zU=Bkd5bGl)ynKA>T3RfUzJhG*oScP*rDlBrQ4}oAUh5-AGXbR)70>5dU%Y(z($Uco zkC2p$o7=eVxox_Li@490>1AGkG>h*&ry7FIv7XeT-a-3$-O}clBDM$WI!Rj6CpKGC zb=ZZwFLJq5?d+DKsctizn=LLbB6BSCUs8TUm^wJDGzA>pv~xH`5toS2-xqNzkuR|} zbDH8Zo2f=o!(g(1L({%mepo&kH4E4*FOh@3wG|T+tK;4#xQO5(Zy)hodn%p;cOUYu4LqwkAA@L;TLflIys`)$U4;i`09lWjDXq$gW+Wx*d zBG>Ao4g1yjDQAUztLim_7AYM1DEy+>UGvRJ21fAp?S(u)32RJc1-wF6lk1Y#UCws z)#Q2;UKan|(D>$=+Df-LfiMXTkub@HE4N{=`K#bGFG`0Spo1IOI-$ccd=1~TvV^%9 zu-@PyyX#-fsyi(!Kh1)u^7mSbz^6?Kl*>c~Ic_fj8fS}hDWme}o1IQbBo-pN;5PkR zUEiCOd}S28Yd3IW`Xtcp+iBX^uVV0BbI56tWRGb#$cX60(n~DFhgu-RFf&?P!K55? z1_JCByP2eYXMYY3WI-c5z}?oz(_T|Iy|@1X5*&y(m>z@1b!1D*^NPABGUE&W#)VBt z5(z?Fu#n_-Hq-j-ZZQ>`@tLBmpdNe;H;asGk^mINvYEnpVKVYhUQQ5_SNm+g$bT&x zj)kNEq*&i`{mD;{?XDlJshv zuHx{}8d*f^!q7(8Fu};7%qJow9i#$(g*|wQ9K6&q+k7Xpt0FEdZ&%vG_nt2) zXp^-q3O0h*KOQFbe0!!T?FopcYo8yr zzJKo%*K&}1GAskEZl-7p`(DIl0z|{Vhvx^l^jvX}ws*6mOcFMkf@Dzva#Cw|<6`Ip zmX?d37rx@%_c!&aEpBhg=MLYE zL&wlz(nZ}a&Q5@rE~+cnFEYr~AYjh#mYnky*K{1s1Z$wL5)G%1?MUW-!ok52DHXBo z$1&fEcbtC5s*7SoF5H+1hvH;e<}x)oxjN+Xf?mk(v7w=Wd2=I`fNtlZhYn3;MMd!O zd{hA;{&pd%ULl|aLw-AwbwsB%Hz6_6u-M45%4BeGka2gv-lwt3p+CoMwi(2@w6mCk zm-qsAG9(n>Gt5yQx?{da(>}R5S0AT~qpKdL8+_uC$kWN$3ni!+0{i{fM}>uj1%OG; z`XsjbOlx;O7iOxesJykU%WPl{Vv1@nw`dFd@#DwE`QPQmMJoA<%F4?>DJ?x&GA(&| zzk5YzKM2|Pb;L4WV?*Y6t`012O*b5Hmj3AQ))73kEoIAfuWl5Y#OI}`wK>O z=h^1-mHylmuv!3>T7u6xG(WsgO|7%;Bwr5Mz`-Nj-=39$!;d${D?!Mk#s8>RsQGN9 zSVc`uO+!PdjX53zJ5J}ex&3{N=ix%IO}jC z3J{JD7gNloJy*16n}a5+U7my-*N5B#|EV_O`+K-KS!o|X?#wKCleabakFV57#?=@G4o%|@99yO|1sAV-rn90dYxeB<=}8s3qv8Y>{NwFy7BV5{u`;kJ(!M)$F#^r+A3PheZXbOL zV*$rve({GcLz4~$I~#4e7_R$@cM;JNq{hYbCX2B{{L$QVI4pr(?DDCB!ICNZQyn2c zW)FoDztq`FO6wezTsqo99f-p^hfP;%`f_=FGg*Y}dccureSqKd-(TsBENy^GU!Lu4 zY-~`-ob8++&0_lcT&I?<@0g_(NPNYJxC_Qzw{=+g_3=rKs}~$r<2JiBTABs+<-W}$ zC8fw=rw8f1^z`%!QRFUDyfUZa3X!BIXM31U?*Ko)lfDcImf*4+uD%fUbdk-{kn?r0 zI4&gCdKT-W{IbZgShj)Ghm}&mJlp#}Q)c|HV5_oZLZmr3l#&-OPqHqrk&s-SZP2Nw zygV-3?{|h~^iux&udZ`4?EZ{zj%%NX14!fP=?QkaP(4+5?}tH&NtN^X^TUnt_0du- zP0c0v*07Epb+dFUdv!^HVJYsa}#I=0M``&@w&P?GC%ieHCT5t|N3l8 zi^pWopT%xHJ-umq%J(@GJaq$;sx^hc*$Y(Ib|(X448Ay7CJPLlM&GmUc-^0?+_Kjv z5kJj~C#}p^i(Q#`I=FiE@O|5#Nl}KD%tc$Vxwn;G!vl|ZvgN{o{mzD5o);JMiK6ii zBZ^YqWtJD~g}N0rz|DdVh5>{Y=H-0`tcp>@`H^Oa?ay<3L*uq-0T0hu5FP@bfI&kp z&OicS*&aztLsM*0h5Gt+sJ%QpHTon4HXY!A`=uOTL)QmkTI=5CRK>x`$$96_9S#mF zwW!&-Jpr*CYokI)mf?|k=5SR5~6LF*#fmvqqOTdqGQ~=xKokb&9L36d=Heq<8P?PLo7j z8W+F$d(kPox^9(Qcg8VG`2&9nu2Df=p5*C!FxtN*Sw7n{8X6iUb!R_;RouFL8{E#X z&li6JFYLWFl}eeAk#W8gi$c8-4K)2*_fq#L*JK7=Z*pqwc)ZrM+VW?k}ZqUFIwOnh{-5y+O- zhKod9CWL`)rCI*U_-plADR!S3X2xmNP)jKNBAK>}S^KH@>auJ^_<`r<*xd-3Y2>GnE7s-Oh_I=)6a9aTLED(`b zSQt+)Q~(?V$VA-9AKYYNVWFclG&P0M(keo`FqrtbxIPS~RO}W%NLJ?=@2H^c2TqdA zn*7D+JixsyF(_h%B6EPrafIx2fE?5X61M>M$h6m@F~OecfdNAA`EnhP^Kv*V6osk) z3{;7j;Y*d!_9zMfPXdNf`Vnt{ClGjA?+LPO@Z<4iL+ibuWm^~l@Zf21gcS%yw#IR< zUV$)DSfcPKL``sxcf$ZTfOZbv!2Yk}&jUZN90xo3(=CuO z`W)~J8z7RjoF7i^?Cb!?Xs!{G(jkEO-r3pt{d?e_E>2*XUYV_zJH9fKn9CDP$d}X& zFavdU^{X-PMX5>dP6kNEvf(z7>BII@di@Rt*)!|}g@3;VGr5YcAs2zAW=-VGlEB{r zhvl>twAU*NR$T8s|4oVGLNQUqbyxCo;#uhfn=uOGWWk`b zAY&BiNf+JjR~A1Cmo&g*A?$r|xvDH5O+E9fF~K8rI6HW^dDzt3h$OU%?GCg z7Nw~}lev7fF}^pXr%% zqp3%nNH_+-7H++Q{mscy3qjA7U%)GpiD$UZe|rgTcJR)eoVt2X#I@_-?t(xfNyCpv-MuSg? z#>Pf+_xp9gln{}_j9P-5qO4y$(bjvX?Mu55^kQ=ODXfBT6xPMteZMFdo2~MAc;`SQ zz&UIH5ZqjIZlDhWk{fw>c~byEhg=?oBqk=#`mgg-bcPiS1_iuFA;iDJ{_q>ZZ{3@;>pk0qt;w&IC6)$8A33i&M*wH`7#!0B4vwWR z&MZD2o>O4VQZSOVFav{?qs_0c{ZvTWf;}B>cnKiXv!t88e*Fr3>w}sh(oF)hIFS1H zl^jaHA}6JS_AdEEk@NBK*+`g@3CC^ylFk|J#>=#2!ap;f9{vTKenJ8@h4PDn>w5yk zqF;bbet%W=t9Z=}3%z!272Ik-HT52*gG=NqNGnX}a}>8VC*A#hH4UebMt%>~08hRP zuKTL)RTtSJ>6Xg|li6*mg`7tAIG2V#h#^u|;%0dt_jrbpjuFncUX)O%(e*>3f$_n! zlC0v-3kXeOUqWR2@~+G!dr*oalc>(%d=F%Yk|xS6*C6I%-Q~}lx2k{LM~qoRv*CfM z1*=D!y5io|okziE;W$%7==pZfLQQwt#pgebM&wxMz%#U$*5y~3f_KhHsLm1&AgbpR zh4tQ99(k|t=s2ZU7gx%%TKV-`IIt_~+#g`l>5qHwJEFrX`w<=(o3qk9qx87yManXc z1G$m@E;rI@>|L8N|F_~g2Bj4oZ*7=#I1du6(W%Oavqj!hd<4OoZK;nI)sC7jvnKiY z{r(BX<0PZb7qU@z$XR5WyxR|Z8SW&f6gc75Gmo{G{+a|wUlx?e0Ue<$bdYQo*dab< z^MAneB)r;1_keKyxND4ocm@wW-}LG8&oY-p>WPWdZ)&waaeQfMqEfIwxA0viZMJ6= zn3KbFL|P}a;f+-0f$ck9kuGxBGl;iqmH_AJH`Vfd&Nm)rvnS%D{l8F z2Kh>h9Cb%(2I>ZvR7yW(+z#HB`mo*S&EeZcCuf8q`qN!(k>0iko@Q4W5RL@|;b$|< z^VgDclxcTDQGWt_5*SC{jV`H`w6FPP@1^|o=FnD6euDslZoFIoie z3P^)^0_ZDaAgY}&`bq1-f?u~Frpu0al|5fe{`P|v<4EJ6+mcYKobhV*T3whHi}*Op z48rV>+OVEqD5A*e$yd{^nY)n_JV{T+U?OzCv#^G^zpM*=&clZlakzjj zi(C5WczXNqODrRh^Nf{o++|3A50X9}F1vi@UpOQglxzpJ${=h#*M@BsaDm-k4Oi_> zqEEvidLJGlkEp%wHFh9Tt&O%!71v8-A3;FUNRaI=pQc^M%8eKNy46Y@aP9bxh0dC% z!%a#+yhF(;t=Fp5GB6%X(L^zV_r^|NP85{fvE{o~7DJ(6@vU@<%#-MdN+oI}wDkpx zzuq+&YEg!mE+EAY-|AI6roTi6*ejj-kVT1K(lO( zmEUFqVlrSO^bHM_A3p5Klxnz8ISQ1n(W7x)r>o8^KV;UbjKgguZE+s2=#Z+ctvw#p zlHup&l?Xob1vm<@J=Dz17afdlAgJUP7r$OU0sO^Xvqs`qxv1-&h{yV+NnJkUsFR~ZzJYVZFZKkYEkweT&R*kdh*G=3sGiGh?5 zaBDoFLIA>%wm{{h_c{UQq_?9~)X|~Q7{r%*gX`E-wcBz5k`55o9x5p{U!1N3-9}v8 zAMo4}Z-CmULjy>F{{iPClKG!Lafyf|Q&KZl?M6QZMFD@VY5^FZJbwK6(&oC1k;mNj z%-iRhs0EJs=X;cM3@xaH_wSGUm04Cj>%k!4?d4cNTZ2^vZZ{o)l>*@Uzi1hA09E^J zPAEc8HYzb7{>XC=3-_J~YU%0!?KqfWcy}>;Ix> z7z6nyQ!=};6Y6Q*>C{#z92|ERSyuhZg(OY%HCl+dEhQDy^Zp)_xaUnl3t0n$8*CBFCyFsQ zhNl?+8_AniN>bC(zRSvDVPeY2%964DNu!dmmg*^;4-5{Z8?(xkH40L+-LjlAZ%c07$Ds0hJevAF!*oJNJY|f9!yn+?#~MX40Oxk#4|GEs>J_NM9{=OmzhaHrp!|0 z0lE+;VK4kLLRUlkhLfgUVU5e)yMKl7-gz?_DdX(ig8y!m*4^T^O0+d?r%1p-tS?DR} z_4n6|RB%24cPz42w(bL@5T=4^yO8_PP#<~3P=UmAS(ovjnZHs%T-bhzJtmv)@B$k4 zvo&9N?sY!M3<-Ld*XiE+(PmPX*6?c_&kaG@+hB?LK$z)2=l-iF1qjR?Z?3pYN`c?c zZGC>T-M(r7RTlEld7htMv&_}6Q$xF%Aj0^_aLRww;`KrE&9PK38VD$|V6~btwyGQ_ zJpOHb2~o!nL>TqdFDMtcE6=m)ghrC=V}G$om8h@u(Qo4->Qm6+G1IL zQL+jWxFbHHTrXYyeo?}<2HcpgbzwOJ72JDuzx!OzQECN5Yv)6PB`NDVXzONm() zuUCF1r!*o5Ig_)Xi9)H;VI~5sE4e}g@E;dFZX1GlmOfm2=6XOC0>msbCQhMvB@PEw?dj$~qqB-1t}KK5tjnif_UQsZ%W$2@6%z73wpE}&XPI@giGde((pPFJwosl z_?Vsh1+8Ve9F1aB`$rUt^|&YGPR-6<8qF6oU4`}}VEN#Td4tVh*g6>F;WymcbQwCL zkYy1=<1hQZKn{b1EMU-Vpjsn-J$Ls-)t_r~IKfX~Lr%0`%*s0#e$zmX_9n5w40$rL zv=yFQ9aPj=CEUUGrRQnH=C~!e7RQ{IeB|fzZX3Hnf)80`g?8JqlwVALZzTgE>I%fT zojgHk$0%m`wTeG~eN`F+Ipz=HB|q=S``T*UKW~!m5rBE?z)+~a zb}9U;##Q>D00V;4CZGvffP=&(?$L${&JJY@xIwU|xkkzmC~I&z3Kx z1tm=GKzxLl0)g-U-IR*?@Vf&6W4rSF3-GrGvfm{!LV-RSgRV1;^e|YDAYOiw?oV&& z#|8$}^6V;B?_U7T_k)LPS?s*!<3ZsOdefbwmdhr!l)E4p+b~7sS5#Dh?A_MZww(Oi z7?PIPq{dYWaDyXqxKsxEU~1BpDC|(7R@Ofu@8;n8!9r)eeMVSQLiDhdyoP_=n_VyUKBSdHJQ@bWZ3ulztJasOa{sTXvYtr|V{lI?S0vtDeOR z4N+=BZO$U4CRM65XmTcTK&W?SRqr$ivp6-M1O5L7ze$Dsx zg;>D(0;2I`Kj)J-;@qIJ)5Tp z0X(cbKsI1`z2eQ2wZbePW`hBZpD7gp>M@M$kL+h^zf&BKt}|hFJBHTV>|Em63IVubX)~_uSvCYmq_*O zUWW?|(A-cmvfi#PF~2`HR#rJ(HpIllw<2zm5+-&%UY{{ZEUs*bRTE+p76vKKJ6=Ow z)eMR~M$nhO{#9{^bqDFl=kqMly9i48i}US}boBzC*&x7n+>BMK99M^eB8R?dH;UQ6 zD|xdH$Ld_Xyd)$fPnrWyz^-d$h#yROV9NWpG|93ko>V*2i#=zrcJ&Pfy?uZq!u|mO zVwcqq6%`kkm#@qJ+1mr`h|~0wX9I4v!q7bB5_dEK;LL?n90q47& zEard@26D^m+`kXpB;yv$FHa3YNZ%_I1Zo6;UH=-pD@U4A?mqSRy)Pz~itrajIC6M` z_{`6*L4yWo+X$#LXDv2_Kng$&lP!QQqcacOJ)CqCirX4(EC;uu+iw9>Kl+M+TE2fP zfy9~5x;(QtF`3A%G5kkao7(eh9sLN$O&fO7(9*Kczy+0f?QUYQD;foW%|jqM2?)ef z<~UB|D8^(0at=^-G8en?X$8IiN9tma2;A>ie%jz28y9ym7fxYhPvjPb-FcD~bU6N> zIut;LUVvDVe`IDh1HcNCmhIF zOPH)}N%cu*kp*9?Pb>!dXCt7N2#7=;4bx_3X3ZYUn({w@dI5wEaGS`&+uSeC{L*`s z03v!xdEe@L^uhY5p@D%($p|Q|5z}JFJC=eQqOZ2|B?;XY&`De-s{w(!0aAqH-G$5j zLYe92APF8G9!beFK%^?iGjD d#ob-9oYOj(IclcPfbw97ilXMjFY*>){{g4q{8j(}