{ "cells": [ { "cell_type": "code", "execution_count": 35, "metadata": {}, "outputs": [], "source": [ "import json\n", "import datetime\n", "from splitwise import Splitwise\n", "from ynab_sdk import YNAB\n", "from ynab_sdk.api.models.requests.transaction import TransactionRequest" ] }, { "cell_type": "code", "execution_count": 36, "metadata": {}, "outputs": [], "source": [ "# Open JSON files\n", "\n", "config_path = \"config.json\"\n", "transactions_path = \"data/transactions.json\"\n", "\n", "with open(config_path, 'r') as j:\n", " config = json.loads(j.read())\n", "with open(transactions_path, 'r') as j:\n", " transactions = json.loads(j.read())" ] }, { "cell_type": "code", "execution_count": 37, "metadata": {}, "outputs": [], "source": [ "# Get Splitwise transaction IDs\n", "\n", "transaction_sw_ids = []\n", "\n", "for x in transactions:\n", " transaction_sw_ids.append(x['splitwise_id'])" ] }, { "cell_type": "code", "execution_count": 38, "metadata": {}, "outputs": [], "source": [ "# Read config\n", "\n", "ynab_key = config['ynab']['api_key']\n", "ynab_budget = config['ynab']['budget_name']\n", "ynab_account = config['ynab']['account_name']\n", "sw_consumer_key = config['splitwise']['consumer_key']\n", "sw_consumer_secret = config['splitwise']['consumer_secret']\n", "sw_api_key = config['splitwise']['api_key']\n", "sw_friend_name = config['splitwise']['friend_name']\n", "sw_user_name = config['splitwise']['user_name']\n", "days_included = config['general']['days_included']" ] }, { "cell_type": "code", "execution_count": 39, "metadata": {}, "outputs": [], "source": [ "# Setup Splitwise and YNAB APIs\n", "\n", "sw = Splitwise(sw_consumer_key, sw_consumer_secret, api_key=sw_api_key)\n", "ynab = YNAB(ynab_key)" ] }, { "cell_type": "code", "execution_count": 40, "metadata": {}, "outputs": [], "source": [ "# Get Splitwise user info\n", "\n", "sw_user = sw.getCurrentUser()\n", "sw_user_id = sw_user.getId()" ] }, { "cell_type": "code", "execution_count": 41, "metadata": {}, "outputs": [], "source": [ "# Get Budget ID and Account ID of YNAB\n", "\n", "ynab_budgets = ynab.budgets.get_budgets().data.budgets\n", "ynab_budget_ids = {}\n", "for i, x in enumerate(ynab_budgets):\n", " ynab_budget_ids[ynab_budgets[i].name] = ynab_budgets[i].id\n", "\n", "ynab_budget_id = ynab_budget_ids[ynab_budget]\n", "\n", "ynab_accounts = ynab.accounts.get_accounts(budget_id=ynab_budget_id).data.accounts\n", "ynab_account_ids = {}\n", "for i, x in enumerate(ynab_accounts):\n", " ynab_account_ids[ynab_accounts[i].name] = ynab_accounts[i].id\n", "\n", "ynab_account_id = ynab_account_ids[ynab_account]" ] }, { "cell_type": "code", "execution_count": 42, "metadata": {}, "outputs": [], "source": [ "# Get YNAB Payees and Categories\n", "\n", "ynab_payees = ynab.payees.get_payees(budget_id=ynab_budget_id).data.payees\n", "ynab_payee_ids = {}\n", "for i, x in enumerate(ynab_payees):\n", " ynab_payee_ids[ynab_payees[i].name] = ynab_payees[i].id\n", "\n", "ynab_category_groups = ynab.categories.get_categories(budget_id=ynab_budget_id).data.category_groups\n", "ynab_categories = []\n", "for x in ynab_category_groups:\n", " ynab_categories.extend(x.categories)\n", "ynab_category_ids = {}\n", "for i, x in enumerate(ynab_categories):\n", " ynab_category_ids[ynab_categories[i].name] = ynab_categories[i].id" ] }, { "cell_type": "code", "execution_count": 43, "metadata": {}, "outputs": [], "source": [ "# Get ID of Splitwise friend and Friend object\n", "\n", "sw_friend_ids = {}\n", "sw_friends = sw.getFriends()\n", "for i, x in enumerate(sw_friends):\n", " first_name = sw_friends[i].getFirstName()\n", " last_name = sw_friends[i].getLastName()\n", " id = sw_friends[i].getId()\n", " sw_friend_ids[f\"{first_name} {last_name}\"] = id\n", "\n", "sw_friend_id = sw_friend_ids[sw_friend_name]\n", "sw_friend = sw.getUser(sw_friend_id)" ] }, { "cell_type": "code", "execution_count": 44, "metadata": {}, "outputs": [], "source": [ "def splitwise_id_to_name(debtor_id, creditor_id):\n", " if (debtor_id == sw_user_id) and (creditor_id == sw_friend_ids[sw_friend_name]):\n", " debtor = sw_user_name\n", " creditor = sw_friend_name\n", " elif (debtor_id == sw_friend_ids[sw_friend_name]) and (creditor_id == sw_user_id):\n", " debtor = sw_friend_name\n", " creditor = sw_user_name\n", " else:\n", " debtor = \"error\"\n", " creditor = \"error\"\n", " return debtor, creditor" ] }, { "cell_type": "code", "execution_count": 45, "metadata": {}, "outputs": [], "source": [ "date_today = datetime.datetime.now()\n", "datetime_after = date_today - datetime.timedelta(days=days_included)\n", "date_after = datetime_after.isoformat()" ] }, { "cell_type": "code", "execution_count": 46, "metadata": {}, "outputs": [], "source": [ "sw_new_expenses = [exp for exp in sw.getExpenses(limit=0, dated_after=date_after) if exp.repayments[0].getToUser() == sw_friend_ids[sw_friend_name]]" ] }, { "cell_type": "code", "execution_count": 47, "metadata": {}, "outputs": [], "source": [ "sw_expense_data = []\n", "for exp in sw_new_expenses:\n", " exp_amount = exp.getCost()\n", " exp_description = exp.getDescription()\n", " exp_date = exp.getDate()[:10] \n", " exp_id = exp.getId()\n", " exp_creditor_id = exp.getRepayments()[0].getToUser()\n", " exp_debtor_id = exp.getRepayments()[0].getFromUser()\n", " exp_debt = \"-\" + exp.getRepayments()[0].getAmount()\n", " exp_credit = str(round(float(exp_amount) + float(exp_debt),2))\n", " exp_deleted = 'true' if exp.getDeletedBy() else 'false'\n", "\n", " exp_debtor, exp_creditor = splitwise_id_to_name(debtor_id=exp_debtor_id, creditor_id=exp_creditor_id)\n", "\n", " exp_dict = {}\n", "\n", " exp_dict[\"origin\"] = \"Splitwise\"\n", " exp_dict[\"description\"] = exp_description\n", " exp_dict[\"amount\"] = exp_amount\n", " exp_dict[\"date\"] = exp_date\n", " exp_dict[\"creditor\"] = exp_creditor\n", " exp_dict[\"creditor_id\"] = exp_creditor_id\n", " exp_dict[\"debtor\"] = exp_debtor\n", " exp_dict[\"debtor_id\"] = exp_debtor_id\n", " exp_dict[\"debt\"] = exp_debt\n", " exp_dict[\"credit\"] = exp_credit\n", " exp_dict[\"deleted\"] = exp_deleted\n", " exp_dict[\"splitwise_id\"] = exp_id\n", " sw_expense_data.append(exp_dict)" ] }, { "cell_type": "code", "execution_count": 48, "metadata": {}, "outputs": [], "source": [ "ynab_new_transactions = []\n", "ynab_new_transaction_sw_ids = []\n", "ynab_transactions_to_delete = transaction_sw_ids.copy()\n", "sw_new_expense_data = sw_expense_data.copy()\n", "sw_update_expense_data = []" ] }, { "cell_type": "code", "execution_count": 49, "metadata": {}, "outputs": [], "source": [ "for x in sw_expense_data:\n", " ynab_transaction_sw_id = x['splitwise_id']\n", " # if expense on SW already exists in transaction file\n", " if ynab_transaction_sw_id in ynab_transactions_to_delete:\n", " # remove transaction from transactions to be deleted and continue to next\n", " ynab_transactions_to_delete.remove(ynab_transaction_sw_id)\n", " # remove expense from the expense data, the final list will be used to copy to transactions\n", " sw_new_expense_data.remove(x)\n", " # add to potential update list\n", " sw_update_expense_data.append(x)\n", " continue\n", "\n", " if x['deleted'] == 'true':\n", " ynab_transaction_amount = 0\n", " ynab_transaction_memo = f\"REMOVED FROM SPLITWISE - {x['description']}\"\n", " elif x['deleted'] == 'false':\n", " ynab_transaction_amount = int(float(x['debt']) * 1000)\n", " ynab_transaction_memo = x['description']\n", " \n", " ynab_transaction_date = x['date']\n", " ynab_transaction_payee_name = x['creditor']\n", " ynab_transaction_payee_id = ynab_payee_ids[ynab_transaction_payee_name]\n", " ynab_new_transaction = TransactionRequest(account_id=ynab_account_id, date=ynab_transaction_date, amount=ynab_transaction_amount, payee_name=ynab_transaction_payee_name, payee_id=ynab_transaction_payee_id, memo=ynab_transaction_memo)\n", " ynab_new_transactions.append(ynab_new_transaction)\n", " ynab_new_transaction_sw_ids.append(x['splitwise_id'])" ] }, { "cell_type": "code", "execution_count": 50, "metadata": {}, "outputs": [], "source": [ "# Determine which transactions should be updated\n", "\n", "remove_from_update_list = []\n", "for i, x in enumerate(sw_update_expense_data):\n", " remove_from_update = True\n", " for y in transactions:\n", " if x['splitwise_id'] == y['splitwise_id']:\n", " sw_update_expense_data[i]['ynab_id'] = y['ynab_id']\n", " for z in list(x.keys()):\n", " if x[z] != y[z]:\n", " remove_from_update = False\n", " if remove_from_update:\n", " remove_from_update_list.append(x)\n", "for x in remove_from_update_list:\n", " sw_update_expense_data.remove(x)" ] }, { "cell_type": "code", "execution_count": 51, "metadata": {}, "outputs": [], "source": [ "def check_valid_date(str_date):\n", " date_to_check = datetime.datetime.strptime(str_date, '%Y-%m-%d')\n", " difference = (date_to_check - datetime_after).days\n", " if difference >= -1:\n", " return True\n", " else:\n", " return False" ] }, { "cell_type": "code", "execution_count": 52, "metadata": {}, "outputs": [], "source": [ "# Get transactions from YNAB to see the category IDs for the updated transactions\n", "\n", "transactions_from_ynab = ynab.transactions.get_transactions_from_account(budget_id=ynab_budget_id, account_id=ynab_account_id).data.transactions\n", "\n", "transactions_from_ynab = [x for x in transactions_from_ynab if (check_valid_date(x.date)) and (x.payee_name==sw_friend_name)]\n", "category_ids_from_ynab_transactions = {}\n", "\n", "for x in transactions_from_ynab:\n", " category_ids_from_ynab_transactions[x.id] = ynab_category_ids[x.category_name]" ] }, { "cell_type": "code", "execution_count": 53, "metadata": {}, "outputs": [], "source": [ "# Update the transactions on YNAB that need to be updated or deleted\n", "\n", "if sw_update_expense_data:\n", " for x in sw_update_expense_data: \n", "\n", " ynab_transaction_date = x['date']\n", " \n", " ynab_transaction_payee_name = x['creditor']\n", " ynab_transaction_payee_id = ynab_payee_ids[ynab_transaction_payee_name]\n", " \n", " ynab_transaction_id = x['ynab_id']\n", " ynab_transaction_category_id = category_ids_from_ynab_transactions[ynab_transaction_id]\n", "\n", " if x['deleted'] == 'false':\n", " ynab_transaction_amount = int(float(x['debt']) * 1000)\n", " ynab_transaction_memo = x['description']\n", " elif x['deleted'] == 'true':\n", " ynab_transaction_amount = 0\n", " ynab_transaction_memo = f\"REMOVED FROM SPLITWISE - {x['description']}\"\n", "\n", " ynab_updated_transaction = TransactionRequest(account_id=ynab_account_id, date=ynab_transaction_date, amount=ynab_transaction_amount, payee_name=ynab_transaction_payee_name, payee_id=ynab_transaction_payee_id, memo=ynab_transaction_memo, category_id=ynab_transaction_category_id)\n", "\n", " ynab.transactions.update_transaction(budget_id=ynab_budget_id, transaction_id=ynab_transaction_id, transaction=ynab_updated_transaction)\n", " print(f\"{ynab_transaction_memo} updated\")" ] }, { "cell_type": "code", "execution_count": 54, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "creation_output {'data': {'transaction_ids': ['9a75f64e-39ab-453d-bd1f-950329449cb3', 'c56a0322-4527-4eab-8b41-4ab9e3fec2af', '74bb1859-1c24-4495-b8e4-2de9bafd27fb', '584232cd-24ef-44e3-ae0a-dfdc99bc36f0', '41447d4c-8fc5-4533-9ab1-aa78fdb05eca', '62a5438d-9b26-41a6-822d-09eaf765f01b', 'a32b1c81-b500-4842-8e2c-13c1e5d28535', '52e2fdf7-6596-43ed-b71c-be55ae5c91a2', '5688e973-c351-4a6d-ac24-04f23e8eca5e', 'b5cc3e8f-0c01-4b6e-9a23-845ae61f6833', 'c4ec30f4-f61e-49ab-b4be-4e1a9a20d198', '0aab9089-ba41-4a44-a44b-1c3b441c4983', 'd5555df9-09b8-45d4-8438-71051990778f', '0b6132d2-7f30-4cbd-b28d-1180fe0b6dcc', '6395a47e-a54a-440b-b28e-9a5d67172fed', '71ffe39e-e513-48c8-a6ca-f30d5fd8f1da', 'b28472b5-9126-4928-9ca5-27824807621c', '3a8fe1c9-cedd-47ec-9506-7b00b96f1110', '0d0d362b-b71f-42d1-a48a-0dcd8a01d13a', '5e365bff-cac4-4e4a-9592-2f9564ae6a11', '606546b6-4d10-4883-bfa3-cb0e3d6ff4c8', '22c85a01-d2f2-41ec-80fc-8f2e824c1d7a', '1bc5b106-63ab-4f8e-9b16-78cc37485ccc', '9425234f-b0b6-49ef-8d57-0ec12ce2e584', '6d869f88-6fa5-46fc-8177-c7d2d63bbaca'], 'duplicate_import_ids': [], 'transactions': [{'id': '3a8fe1c9-cedd-47ec-9506-7b00b96f1110', 'date': '2023-03-26', 'amount': -15960, 'memo': 'Mercadona', 'cleared': 'uncleared', 'approved': False, 'flag_color': None, 'account_id': 'beee97b1-8f50-49e7-84d3-c173215e8879', 'account_name': 'Splitwise', 'payee_id': '45909ecf-68dd-4257-a988-028c05da1d42', 'payee_name': 'Ralitsa Tsvetkova', 'category_id': '9089489b-c1aa-41fb-bb62-56a01856b431', 'category_name': 'Spotify', 'transfer_account_id': None, 'transfer_transaction_id': None, 'matched_transaction_id': None, 'import_id': None, 'import_payee_name': None, 'import_payee_name_original': None, 'debt_transaction_type': None, 'deleted': False, 'subtransactions': []}, {'id': '0d0d362b-b71f-42d1-a48a-0dcd8a01d13a', 'date': '2023-03-26', 'amount': -12190, 'memo': 'Consum', 'cleared': 'uncleared', 'approved': False, 'flag_color': None, 'account_id': 'beee97b1-8f50-49e7-84d3-c173215e8879', 'account_name': 'Splitwise', 'payee_id': '45909ecf-68dd-4257-a988-028c05da1d42', 'payee_name': 'Ralitsa Tsvetkova', 'category_id': '9089489b-c1aa-41fb-bb62-56a01856b431', 'category_name': 'Spotify', 'transfer_account_id': None, 'transfer_transaction_id': None, 'matched_transaction_id': None, 'import_id': None, 'import_payee_name': None, 'import_payee_name_original': None, 'debt_transaction_type': None, 'deleted': False, 'subtransactions': []}, {'id': '22c85a01-d2f2-41ec-80fc-8f2e824c1d7a', 'date': '2023-03-26', 'amount': -10920, 'memo': 'Consum ', 'cleared': 'uncleared', 'approved': False, 'flag_color': None, 'account_id': 'beee97b1-8f50-49e7-84d3-c173215e8879', 'account_name': 'Splitwise', 'payee_id': '45909ecf-68dd-4257-a988-028c05da1d42', 'payee_name': 'Ralitsa Tsvetkova', 'category_id': '9089489b-c1aa-41fb-bb62-56a01856b431', 'category_name': 'Spotify', 'transfer_account_id': None, 'transfer_transaction_id': None, 'matched_transaction_id': None, 'import_id': None, 'import_payee_name': None, 'import_payee_name_original': None, 'debt_transaction_type': None, 'deleted': False, 'subtransactions': []}, {'id': '606546b6-4d10-4883-bfa3-cb0e3d6ff4c8', 'date': '2023-03-26', 'amount': -9370, 'memo': 'Mercadona', 'cleared': 'uncleared', 'approved': False, 'flag_color': None, 'account_id': 'beee97b1-8f50-49e7-84d3-c173215e8879', 'account_name': 'Splitwise', 'payee_id': '45909ecf-68dd-4257-a988-028c05da1d42', 'payee_name': 'Ralitsa Tsvetkova', 'category_id': '9089489b-c1aa-41fb-bb62-56a01856b431', 'category_name': 'Spotify', 'transfer_account_id': None, 'transfer_transaction_id': None, 'matched_transaction_id': None, 'import_id': None, 'import_payee_name': None, 'import_payee_name_original': None, 'debt_transaction_type': None, 'deleted': False, 'subtransactions': []}, {'id': '5e365bff-cac4-4e4a-9592-2f9564ae6a11', 'date': '2023-03-26', 'amount': -7350, 'memo': 'Mercadona', 'cleared': 'uncleared', 'approved': False, 'flag_color': None, 'account_id': 'beee97b1-8f50-49e7-84d3-c173215e8879', 'account_name': 'Splitwise', 'payee_id': '45909ecf-68dd-4257-a988-028c05da1d42', 'payee_name': 'Ralitsa Tsvetkova', 'category_id': '9089489b-c1aa-41fb-bb62-56a01856b431', 'category_name': 'Spotify', 'transfer_account_id': None, 'transfer_transaction_id': None, 'matched_transaction_id': None, 'import_id': None, 'import_payee_name': None, 'import_payee_name_original': None, 'debt_transaction_type': None, 'deleted': False, 'subtransactions': []}, {'id': '9425234f-b0b6-49ef-8d57-0ec12ce2e584', 'date': '2023-03-26', 'amount': -5750, 'memo': 'Mercadona ', 'cleared': 'uncleared', 'approved': False, 'flag_color': None, 'account_id': 'beee97b1-8f50-49e7-84d3-c173215e8879', 'account_name': 'Splitwise', 'payee_id': '45909ecf-68dd-4257-a988-028c05da1d42', 'payee_name': 'Ralitsa Tsvetkova', 'category_id': '9089489b-c1aa-41fb-bb62-56a01856b431', 'category_name': 'Spotify', 'transfer_account_id': None, 'transfer_transaction_id': None, 'matched_transaction_id': None, 'import_id': None, 'import_payee_name': None, 'import_payee_name_original': None, 'debt_transaction_type': None, 'deleted': False, 'subtransactions': []}, {'id': '6d869f88-6fa5-46fc-8177-c7d2d63bbaca', 'date': '2023-03-26', 'amount': -2280, 'memo': 'Carrefour ', 'cleared': 'uncleared', 'approved': False, 'flag_color': None, 'account_id': 'beee97b1-8f50-49e7-84d3-c173215e8879', 'account_name': 'Splitwise', 'payee_id': '45909ecf-68dd-4257-a988-028c05da1d42', 'payee_name': 'Ralitsa Tsvetkova', 'category_id': '9089489b-c1aa-41fb-bb62-56a01856b431', 'category_name': 'Spotify', 'transfer_account_id': None, 'transfer_transaction_id': None, 'matched_transaction_id': None, 'import_id': None, 'import_payee_name': None, 'import_payee_name_original': None, 'debt_transaction_type': None, 'deleted': False, 'subtransactions': []}, {'id': '1bc5b106-63ab-4f8e-9b16-78cc37485ccc', 'date': '2023-03-26', 'amount': -1900, 'memo': 'Alma de cafe', 'cleared': 'uncleared', 'approved': False, 'flag_color': None, 'account_id': 'beee97b1-8f50-49e7-84d3-c173215e8879', 'account_name': 'Splitwise', 'payee_id': '45909ecf-68dd-4257-a988-028c05da1d42', 'payee_name': 'Ralitsa Tsvetkova', 'category_id': '9089489b-c1aa-41fb-bb62-56a01856b431', 'category_name': 'Spotify', 'transfer_account_id': None, 'transfer_transaction_id': None, 'matched_transaction_id': None, 'import_id': None, 'import_payee_name': None, 'import_payee_name_original': None, 'debt_transaction_type': None, 'deleted': False, 'subtransactions': []}, {'id': 'b28472b5-9126-4928-9ca5-27824807621c', 'date': '2023-04-06', 'amount': -7380, 'memo': 'Mercadona 5.4', 'cleared': 'uncleared', 'approved': False, 'flag_color': None, 'account_id': 'beee97b1-8f50-49e7-84d3-c173215e8879', 'account_name': 'Splitwise', 'payee_id': '45909ecf-68dd-4257-a988-028c05da1d42', 'payee_name': 'Ralitsa Tsvetkova', 'category_id': '9089489b-c1aa-41fb-bb62-56a01856b431', 'category_name': 'Spotify', 'transfer_account_id': None, 'transfer_transaction_id': None, 'matched_transaction_id': None, 'import_id': None, 'import_payee_name': None, 'import_payee_name_original': None, 'debt_transaction_type': None, 'deleted': False, 'subtransactions': []}, {'id': '71ffe39e-e513-48c8-a6ca-f30d5fd8f1da', 'date': '2023-04-06', 'amount': -5190, 'memo': 'Mercadona 6.4', 'cleared': 'uncleared', 'approved': False, 'flag_color': None, 'account_id': 'beee97b1-8f50-49e7-84d3-c173215e8879', 'account_name': 'Splitwise', 'payee_id': '45909ecf-68dd-4257-a988-028c05da1d42', 'payee_name': 'Ralitsa Tsvetkova', 'category_id': '9089489b-c1aa-41fb-bb62-56a01856b431', 'category_name': 'Spotify', 'transfer_account_id': None, 'transfer_transaction_id': None, 'matched_transaction_id': None, 'import_id': None, 'import_payee_name': None, 'import_payee_name_original': None, 'debt_transaction_type': None, 'deleted': False, 'subtransactions': []}, {'id': '6395a47e-a54a-440b-b28e-9a5d67172fed', 'date': '2023-04-06', 'amount': -1300, 'memo': 'Coffee', 'cleared': 'uncleared', 'approved': False, 'flag_color': None, 'account_id': 'beee97b1-8f50-49e7-84d3-c173215e8879', 'account_name': 'Splitwise', 'payee_id': '45909ecf-68dd-4257-a988-028c05da1d42', 'payee_name': 'Ralitsa Tsvetkova', 'category_id': '9089489b-c1aa-41fb-bb62-56a01856b431', 'category_name': 'Spotify', 'transfer_account_id': None, 'transfer_transaction_id': None, 'matched_transaction_id': None, 'import_id': None, 'import_payee_name': None, 'import_payee_name_original': None, 'debt_transaction_type': None, 'deleted': False, 'subtransactions': []}, {'id': '5688e973-c351-4a6d-ac24-04f23e8eca5e', 'date': '2023-04-13', 'amount': -33030, 'memo': 'Consum', 'cleared': 'uncleared', 'approved': False, 'flag_color': None, 'account_id': 'beee97b1-8f50-49e7-84d3-c173215e8879', 'account_name': 'Splitwise', 'payee_id': '45909ecf-68dd-4257-a988-028c05da1d42', 'payee_name': 'Ralitsa Tsvetkova', 'category_id': '9089489b-c1aa-41fb-bb62-56a01856b431', 'category_name': 'Spotify', 'transfer_account_id': None, 'transfer_transaction_id': None, 'matched_transaction_id': None, 'import_id': None, 'import_payee_name': None, 'import_payee_name_original': None, 'debt_transaction_type': None, 'deleted': False, 'subtransactions': []}, {'id': '52e2fdf7-6596-43ed-b71c-be55ae5c91a2', 'date': '2023-04-13', 'amount': -12370, 'memo': 'Mercadona', 'cleared': 'uncleared', 'approved': False, 'flag_color': None, 'account_id': 'beee97b1-8f50-49e7-84d3-c173215e8879', 'account_name': 'Splitwise', 'payee_id': '45909ecf-68dd-4257-a988-028c05da1d42', 'payee_name': 'Ralitsa Tsvetkova', 'category_id': '9089489b-c1aa-41fb-bb62-56a01856b431', 'category_name': 'Spotify', 'transfer_account_id': None, 'transfer_transaction_id': None, 'matched_transaction_id': None, 'import_id': None, 'import_payee_name': None, 'import_payee_name_original': None, 'debt_transaction_type': None, 'deleted': False, 'subtransactions': []}, {'id': 'c4ec30f4-f61e-49ab-b4be-4e1a9a20d198', 'date': '2023-04-13', 'amount': -8500, 'memo': 'Pigbao', 'cleared': 'uncleared', 'approved': False, 'flag_color': None, 'account_id': 'beee97b1-8f50-49e7-84d3-c173215e8879', 'account_name': 'Splitwise', 'payee_id': '45909ecf-68dd-4257-a988-028c05da1d42', 'payee_name': 'Ralitsa Tsvetkova', 'category_id': '9089489b-c1aa-41fb-bb62-56a01856b431', 'category_name': 'Spotify', 'transfer_account_id': None, 'transfer_transaction_id': None, 'matched_transaction_id': None, 'import_id': None, 'import_payee_name': None, 'import_payee_name_original': None, 'debt_transaction_type': None, 'deleted': False, 'subtransactions': []}, {'id': '0b6132d2-7f30-4cbd-b28d-1180fe0b6dcc', 'date': '2023-04-13', 'amount': -4970, 'memo': 'Supermercado', 'cleared': 'uncleared', 'approved': False, 'flag_color': None, 'account_id': 'beee97b1-8f50-49e7-84d3-c173215e8879', 'account_name': 'Splitwise', 'payee_id': '45909ecf-68dd-4257-a988-028c05da1d42', 'payee_name': 'Ralitsa Tsvetkova', 'category_id': '9089489b-c1aa-41fb-bb62-56a01856b431', 'category_name': 'Spotify', 'transfer_account_id': None, 'transfer_transaction_id': None, 'matched_transaction_id': None, 'import_id': None, 'import_payee_name': None, 'import_payee_name_original': None, 'debt_transaction_type': None, 'deleted': False, 'subtransactions': []}, {'id': 'b5cc3e8f-0c01-4b6e-9a23-845ae61f6833', 'date': '2023-04-13', 'amount': -3950, 'memo': 'Bar and kitchen ', 'cleared': 'uncleared', 'approved': False, 'flag_color': None, 'account_id': 'beee97b1-8f50-49e7-84d3-c173215e8879', 'account_name': 'Splitwise', 'payee_id': '45909ecf-68dd-4257-a988-028c05da1d42', 'payee_name': 'Ralitsa Tsvetkova', 'category_id': '9089489b-c1aa-41fb-bb62-56a01856b431', 'category_name': 'Spotify', 'transfer_account_id': None, 'transfer_transaction_id': None, 'matched_transaction_id': None, 'import_id': None, 'import_payee_name': None, 'import_payee_name_original': None, 'debt_transaction_type': None, 'deleted': False, 'subtransactions': []}, {'id': '0aab9089-ba41-4a44-a44b-1c3b441c4983', 'date': '2023-04-13', 'amount': -1200, 'memo': 'Glasol ', 'cleared': 'uncleared', 'approved': False, 'flag_color': None, 'account_id': 'beee97b1-8f50-49e7-84d3-c173215e8879', 'account_name': 'Splitwise', 'payee_id': '45909ecf-68dd-4257-a988-028c05da1d42', 'payee_name': 'Ralitsa Tsvetkova', 'category_id': '9089489b-c1aa-41fb-bb62-56a01856b431', 'category_name': 'Spotify', 'transfer_account_id': None, 'transfer_transaction_id': None, 'matched_transaction_id': None, 'import_id': None, 'import_payee_name': None, 'import_payee_name_original': None, 'debt_transaction_type': None, 'deleted': False, 'subtransactions': []}, {'id': 'd5555df9-09b8-45d4-8438-71051990778f', 'date': '2023-04-13', 'amount': -750, 'memo': 'Horno goya', 'cleared': 'uncleared', 'approved': False, 'flag_color': None, 'account_id': 'beee97b1-8f50-49e7-84d3-c173215e8879', 'account_name': 'Splitwise', 'payee_id': '45909ecf-68dd-4257-a988-028c05da1d42', 'payee_name': 'Ralitsa Tsvetkova', 'category_id': '9089489b-c1aa-41fb-bb62-56a01856b431', 'category_name': 'Spotify', 'transfer_account_id': None, 'transfer_transaction_id': None, 'matched_transaction_id': None, 'import_id': None, 'import_payee_name': None, 'import_payee_name_original': None, 'debt_transaction_type': None, 'deleted': False, 'subtransactions': []}, {'id': 'a32b1c81-b500-4842-8e2c-13c1e5d28535', 'date': '2023-04-14', 'amount': -15000, 'memo': 'Wardrobe', 'cleared': 'uncleared', 'approved': False, 'flag_color': None, 'account_id': 'beee97b1-8f50-49e7-84d3-c173215e8879', 'account_name': 'Splitwise', 'payee_id': '45909ecf-68dd-4257-a988-028c05da1d42', 'payee_name': 'Ralitsa Tsvetkova', 'category_id': '9089489b-c1aa-41fb-bb62-56a01856b431', 'category_name': 'Spotify', 'transfer_account_id': None, 'transfer_transaction_id': None, 'matched_transaction_id': None, 'import_id': None, 'import_payee_name': None, 'import_payee_name_original': None, 'debt_transaction_type': None, 'deleted': False, 'subtransactions': []}, {'id': '74bb1859-1c24-4495-b8e4-2de9bafd27fb', 'date': '2023-04-17', 'amount': -12100, 'memo': 'Renfe', 'cleared': 'uncleared', 'approved': False, 'flag_color': None, 'account_id': 'beee97b1-8f50-49e7-84d3-c173215e8879', 'account_name': 'Splitwise', 'payee_id': '45909ecf-68dd-4257-a988-028c05da1d42', 'payee_name': 'Ralitsa Tsvetkova', 'category_id': '9089489b-c1aa-41fb-bb62-56a01856b431', 'category_name': 'Spotify', 'transfer_account_id': None, 'transfer_transaction_id': None, 'matched_transaction_id': None, 'import_id': None, 'import_payee_name': None, 'import_payee_name_original': None, 'debt_transaction_type': None, 'deleted': False, 'subtransactions': []}, {'id': '62a5438d-9b26-41a6-822d-09eaf765f01b', 'date': '2023-04-17', 'amount': -8950, 'memo': 'BG store', 'cleared': 'uncleared', 'approved': False, 'flag_color': None, 'account_id': 'beee97b1-8f50-49e7-84d3-c173215e8879', 'account_name': 'Splitwise', 'payee_id': '45909ecf-68dd-4257-a988-028c05da1d42', 'payee_name': 'Ralitsa Tsvetkova', 'category_id': '9089489b-c1aa-41fb-bb62-56a01856b431', 'category_name': 'Spotify', 'transfer_account_id': None, 'transfer_transaction_id': None, 'matched_transaction_id': None, 'import_id': None, 'import_payee_name': None, 'import_payee_name_original': None, 'debt_transaction_type': None, 'deleted': False, 'subtransactions': []}, {'id': '41447d4c-8fc5-4533-9ab1-aa78fdb05eca', 'date': '2023-04-17', 'amount': -7750, 'memo': 'Lidl', 'cleared': 'uncleared', 'approved': False, 'flag_color': None, 'account_id': 'beee97b1-8f50-49e7-84d3-c173215e8879', 'account_name': 'Splitwise', 'payee_id': '45909ecf-68dd-4257-a988-028c05da1d42', 'payee_name': 'Ralitsa Tsvetkova', 'category_id': '9089489b-c1aa-41fb-bb62-56a01856b431', 'category_name': 'Spotify', 'transfer_account_id': None, 'transfer_transaction_id': None, 'matched_transaction_id': None, 'import_id': None, 'import_payee_name': None, 'import_payee_name_original': None, 'debt_transaction_type': None, 'deleted': False, 'subtransactions': []}, {'id': '9a75f64e-39ab-453d-bd1f-950329449cb3', 'date': '2023-04-17', 'amount': -7600, 'memo': 'Mercadona', 'cleared': 'uncleared', 'approved': False, 'flag_color': None, 'account_id': 'beee97b1-8f50-49e7-84d3-c173215e8879', 'account_name': 'Splitwise', 'payee_id': '45909ecf-68dd-4257-a988-028c05da1d42', 'payee_name': 'Ralitsa Tsvetkova', 'category_id': '9089489b-c1aa-41fb-bb62-56a01856b431', 'category_name': 'Spotify', 'transfer_account_id': None, 'transfer_transaction_id': None, 'matched_transaction_id': None, 'import_id': None, 'import_payee_name': None, 'import_payee_name_original': None, 'debt_transaction_type': None, 'deleted': False, 'subtransactions': []}, {'id': '584232cd-24ef-44e3-ae0a-dfdc99bc36f0', 'date': '2023-04-17', 'amount': -6000, 'memo': 'Drinks with Maria', 'cleared': 'uncleared', 'approved': False, 'flag_color': None, 'account_id': 'beee97b1-8f50-49e7-84d3-c173215e8879', 'account_name': 'Splitwise', 'payee_id': '45909ecf-68dd-4257-a988-028c05da1d42', 'payee_name': 'Ralitsa Tsvetkova', 'category_id': '9089489b-c1aa-41fb-bb62-56a01856b431', 'category_name': 'Spotify', 'transfer_account_id': None, 'transfer_transaction_id': None, 'matched_transaction_id': None, 'import_id': None, 'import_payee_name': None, 'import_payee_name_original': None, 'debt_transaction_type': None, 'deleted': False, 'subtransactions': []}, {'id': 'c56a0322-4527-4eab-8b41-4ab9e3fec2af', 'date': '2023-04-17', 'amount': -2500, 'memo': 'Beach bar', 'cleared': 'uncleared', 'approved': False, 'flag_color': None, 'account_id': 'beee97b1-8f50-49e7-84d3-c173215e8879', 'account_name': 'Splitwise', 'payee_id': '45909ecf-68dd-4257-a988-028c05da1d42', 'payee_name': 'Ralitsa Tsvetkova', 'category_id': '9089489b-c1aa-41fb-bb62-56a01856b431', 'category_name': 'Spotify', 'transfer_account_id': None, 'transfer_transaction_id': None, 'matched_transaction_id': None, 'import_id': None, 'import_payee_name': None, 'import_payee_name_original': None, 'debt_transaction_type': None, 'deleted': False, 'subtransactions': []}], 'server_knowledge': 793}}\n", "ynab_new_transactions_ynab [{'id': '3a8fe1c9-cedd-47ec-9506-7b00b96f1110', 'date': '2023-03-26', 'amount': -15960, 'memo': 'Mercadona', 'cleared': 'uncleared', 'approved': False, 'flag_color': None, 'account_id': 'beee97b1-8f50-49e7-84d3-c173215e8879', 'account_name': 'Splitwise', 'payee_id': '45909ecf-68dd-4257-a988-028c05da1d42', 'payee_name': 'Ralitsa Tsvetkova', 'category_id': '9089489b-c1aa-41fb-bb62-56a01856b431', 'category_name': 'Spotify', 'transfer_account_id': None, 'transfer_transaction_id': None, 'matched_transaction_id': None, 'import_id': None, 'import_payee_name': None, 'import_payee_name_original': None, 'debt_transaction_type': None, 'deleted': False, 'subtransactions': []}, {'id': '0d0d362b-b71f-42d1-a48a-0dcd8a01d13a', 'date': '2023-03-26', 'amount': -12190, 'memo': 'Consum', 'cleared': 'uncleared', 'approved': False, 'flag_color': None, 'account_id': 'beee97b1-8f50-49e7-84d3-c173215e8879', 'account_name': 'Splitwise', 'payee_id': '45909ecf-68dd-4257-a988-028c05da1d42', 'payee_name': 'Ralitsa Tsvetkova', 'category_id': '9089489b-c1aa-41fb-bb62-56a01856b431', 'category_name': 'Spotify', 'transfer_account_id': None, 'transfer_transaction_id': None, 'matched_transaction_id': None, 'import_id': None, 'import_payee_name': None, 'import_payee_name_original': None, 'debt_transaction_type': None, 'deleted': False, 'subtransactions': []}, {'id': '22c85a01-d2f2-41ec-80fc-8f2e824c1d7a', 'date': '2023-03-26', 'amount': -10920, 'memo': 'Consum ', 'cleared': 'uncleared', 'approved': False, 'flag_color': None, 'account_id': 'beee97b1-8f50-49e7-84d3-c173215e8879', 'account_name': 'Splitwise', 'payee_id': '45909ecf-68dd-4257-a988-028c05da1d42', 'payee_name': 'Ralitsa Tsvetkova', 'category_id': '9089489b-c1aa-41fb-bb62-56a01856b431', 'category_name': 'Spotify', 'transfer_account_id': None, 'transfer_transaction_id': None, 'matched_transaction_id': None, 'import_id': None, 'import_payee_name': None, 'import_payee_name_original': None, 'debt_transaction_type': None, 'deleted': False, 'subtransactions': []}, {'id': '606546b6-4d10-4883-bfa3-cb0e3d6ff4c8', 'date': '2023-03-26', 'amount': -9370, 'memo': 'Mercadona', 'cleared': 'uncleared', 'approved': False, 'flag_color': None, 'account_id': 'beee97b1-8f50-49e7-84d3-c173215e8879', 'account_name': 'Splitwise', 'payee_id': '45909ecf-68dd-4257-a988-028c05da1d42', 'payee_name': 'Ralitsa Tsvetkova', 'category_id': '9089489b-c1aa-41fb-bb62-56a01856b431', 'category_name': 'Spotify', 'transfer_account_id': None, 'transfer_transaction_id': None, 'matched_transaction_id': None, 'import_id': None, 'import_payee_name': None, 'import_payee_name_original': None, 'debt_transaction_type': None, 'deleted': False, 'subtransactions': []}, {'id': '5e365bff-cac4-4e4a-9592-2f9564ae6a11', 'date': '2023-03-26', 'amount': -7350, 'memo': 'Mercadona', 'cleared': 'uncleared', 'approved': False, 'flag_color': None, 'account_id': 'beee97b1-8f50-49e7-84d3-c173215e8879', 'account_name': 'Splitwise', 'payee_id': '45909ecf-68dd-4257-a988-028c05da1d42', 'payee_name': 'Ralitsa Tsvetkova', 'category_id': '9089489b-c1aa-41fb-bb62-56a01856b431', 'category_name': 'Spotify', 'transfer_account_id': None, 'transfer_transaction_id': None, 'matched_transaction_id': None, 'import_id': None, 'import_payee_name': None, 'import_payee_name_original': None, 'debt_transaction_type': None, 'deleted': False, 'subtransactions': []}, {'id': '9425234f-b0b6-49ef-8d57-0ec12ce2e584', 'date': '2023-03-26', 'amount': -5750, 'memo': 'Mercadona ', 'cleared': 'uncleared', 'approved': False, 'flag_color': None, 'account_id': 'beee97b1-8f50-49e7-84d3-c173215e8879', 'account_name': 'Splitwise', 'payee_id': '45909ecf-68dd-4257-a988-028c05da1d42', 'payee_name': 'Ralitsa Tsvetkova', 'category_id': '9089489b-c1aa-41fb-bb62-56a01856b431', 'category_name': 'Spotify', 'transfer_account_id': None, 'transfer_transaction_id': None, 'matched_transaction_id': None, 'import_id': None, 'import_payee_name': None, 'import_payee_name_original': None, 'debt_transaction_type': None, 'deleted': False, 'subtransactions': []}, {'id': '6d869f88-6fa5-46fc-8177-c7d2d63bbaca', 'date': '2023-03-26', 'amount': -2280, 'memo': 'Carrefour ', 'cleared': 'uncleared', 'approved': False, 'flag_color': None, 'account_id': 'beee97b1-8f50-49e7-84d3-c173215e8879', 'account_name': 'Splitwise', 'payee_id': '45909ecf-68dd-4257-a988-028c05da1d42', 'payee_name': 'Ralitsa Tsvetkova', 'category_id': '9089489b-c1aa-41fb-bb62-56a01856b431', 'category_name': 'Spotify', 'transfer_account_id': None, 'transfer_transaction_id': None, 'matched_transaction_id': None, 'import_id': None, 'import_payee_name': None, 'import_payee_name_original': None, 'debt_transaction_type': None, 'deleted': False, 'subtransactions': []}, {'id': '1bc5b106-63ab-4f8e-9b16-78cc37485ccc', 'date': '2023-03-26', 'amount': -1900, 'memo': 'Alma de cafe', 'cleared': 'uncleared', 'approved': False, 'flag_color': None, 'account_id': 'beee97b1-8f50-49e7-84d3-c173215e8879', 'account_name': 'Splitwise', 'payee_id': '45909ecf-68dd-4257-a988-028c05da1d42', 'payee_name': 'Ralitsa Tsvetkova', 'category_id': '9089489b-c1aa-41fb-bb62-56a01856b431', 'category_name': 'Spotify', 'transfer_account_id': None, 'transfer_transaction_id': None, 'matched_transaction_id': None, 'import_id': None, 'import_payee_name': None, 'import_payee_name_original': None, 'debt_transaction_type': None, 'deleted': False, 'subtransactions': []}, {'id': 'b28472b5-9126-4928-9ca5-27824807621c', 'date': '2023-04-06', 'amount': -7380, 'memo': 'Mercadona 5.4', 'cleared': 'uncleared', 'approved': False, 'flag_color': None, 'account_id': 'beee97b1-8f50-49e7-84d3-c173215e8879', 'account_name': 'Splitwise', 'payee_id': '45909ecf-68dd-4257-a988-028c05da1d42', 'payee_name': 'Ralitsa Tsvetkova', 'category_id': '9089489b-c1aa-41fb-bb62-56a01856b431', 'category_name': 'Spotify', 'transfer_account_id': None, 'transfer_transaction_id': None, 'matched_transaction_id': None, 'import_id': None, 'import_payee_name': None, 'import_payee_name_original': None, 'debt_transaction_type': None, 'deleted': False, 'subtransactions': []}, {'id': '71ffe39e-e513-48c8-a6ca-f30d5fd8f1da', 'date': '2023-04-06', 'amount': -5190, 'memo': 'Mercadona 6.4', 'cleared': 'uncleared', 'approved': False, 'flag_color': None, 'account_id': 'beee97b1-8f50-49e7-84d3-c173215e8879', 'account_name': 'Splitwise', 'payee_id': '45909ecf-68dd-4257-a988-028c05da1d42', 'payee_name': 'Ralitsa Tsvetkova', 'category_id': '9089489b-c1aa-41fb-bb62-56a01856b431', 'category_name': 'Spotify', 'transfer_account_id': None, 'transfer_transaction_id': None, 'matched_transaction_id': None, 'import_id': None, 'import_payee_name': None, 'import_payee_name_original': None, 'debt_transaction_type': None, 'deleted': False, 'subtransactions': []}, {'id': '6395a47e-a54a-440b-b28e-9a5d67172fed', 'date': '2023-04-06', 'amount': -1300, 'memo': 'Coffee', 'cleared': 'uncleared', 'approved': False, 'flag_color': None, 'account_id': 'beee97b1-8f50-49e7-84d3-c173215e8879', 'account_name': 'Splitwise', 'payee_id': '45909ecf-68dd-4257-a988-028c05da1d42', 'payee_name': 'Ralitsa Tsvetkova', 'category_id': '9089489b-c1aa-41fb-bb62-56a01856b431', 'category_name': 'Spotify', 'transfer_account_id': None, 'transfer_transaction_id': None, 'matched_transaction_id': None, 'import_id': None, 'import_payee_name': None, 'import_payee_name_original': None, 'debt_transaction_type': None, 'deleted': False, 'subtransactions': []}, {'id': '5688e973-c351-4a6d-ac24-04f23e8eca5e', 'date': '2023-04-13', 'amount': -33030, 'memo': 'Consum', 'cleared': 'uncleared', 'approved': False, 'flag_color': None, 'account_id': 'beee97b1-8f50-49e7-84d3-c173215e8879', 'account_name': 'Splitwise', 'payee_id': '45909ecf-68dd-4257-a988-028c05da1d42', 'payee_name': 'Ralitsa Tsvetkova', 'category_id': '9089489b-c1aa-41fb-bb62-56a01856b431', 'category_name': 'Spotify', 'transfer_account_id': None, 'transfer_transaction_id': None, 'matched_transaction_id': None, 'import_id': None, 'import_payee_name': None, 'import_payee_name_original': None, 'debt_transaction_type': None, 'deleted': False, 'subtransactions': []}, {'id': '52e2fdf7-6596-43ed-b71c-be55ae5c91a2', 'date': '2023-04-13', 'amount': -12370, 'memo': 'Mercadona', 'cleared': 'uncleared', 'approved': False, 'flag_color': None, 'account_id': 'beee97b1-8f50-49e7-84d3-c173215e8879', 'account_name': 'Splitwise', 'payee_id': '45909ecf-68dd-4257-a988-028c05da1d42', 'payee_name': 'Ralitsa Tsvetkova', 'category_id': '9089489b-c1aa-41fb-bb62-56a01856b431', 'category_name': 'Spotify', 'transfer_account_id': None, 'transfer_transaction_id': None, 'matched_transaction_id': None, 'import_id': None, 'import_payee_name': None, 'import_payee_name_original': None, 'debt_transaction_type': None, 'deleted': False, 'subtransactions': []}, {'id': 'c4ec30f4-f61e-49ab-b4be-4e1a9a20d198', 'date': '2023-04-13', 'amount': -8500, 'memo': 'Pigbao', 'cleared': 'uncleared', 'approved': False, 'flag_color': None, 'account_id': 'beee97b1-8f50-49e7-84d3-c173215e8879', 'account_name': 'Splitwise', 'payee_id': '45909ecf-68dd-4257-a988-028c05da1d42', 'payee_name': 'Ralitsa Tsvetkova', 'category_id': '9089489b-c1aa-41fb-bb62-56a01856b431', 'category_name': 'Spotify', 'transfer_account_id': None, 'transfer_transaction_id': None, 'matched_transaction_id': None, 'import_id': None, 'import_payee_name': None, 'import_payee_name_original': None, 'debt_transaction_type': None, 'deleted': False, 'subtransactions': []}, {'id': '0b6132d2-7f30-4cbd-b28d-1180fe0b6dcc', 'date': '2023-04-13', 'amount': -4970, 'memo': 'Supermercado', 'cleared': 'uncleared', 'approved': False, 'flag_color': None, 'account_id': 'beee97b1-8f50-49e7-84d3-c173215e8879', 'account_name': 'Splitwise', 'payee_id': '45909ecf-68dd-4257-a988-028c05da1d42', 'payee_name': 'Ralitsa Tsvetkova', 'category_id': '9089489b-c1aa-41fb-bb62-56a01856b431', 'category_name': 'Spotify', 'transfer_account_id': None, 'transfer_transaction_id': None, 'matched_transaction_id': None, 'import_id': None, 'import_payee_name': None, 'import_payee_name_original': None, 'debt_transaction_type': None, 'deleted': False, 'subtransactions': []}, {'id': 'b5cc3e8f-0c01-4b6e-9a23-845ae61f6833', 'date': '2023-04-13', 'amount': -3950, 'memo': 'Bar and kitchen ', 'cleared': 'uncleared', 'approved': False, 'flag_color': None, 'account_id': 'beee97b1-8f50-49e7-84d3-c173215e8879', 'account_name': 'Splitwise', 'payee_id': '45909ecf-68dd-4257-a988-028c05da1d42', 'payee_name': 'Ralitsa Tsvetkova', 'category_id': '9089489b-c1aa-41fb-bb62-56a01856b431', 'category_name': 'Spotify', 'transfer_account_id': None, 'transfer_transaction_id': None, 'matched_transaction_id': None, 'import_id': None, 'import_payee_name': None, 'import_payee_name_original': None, 'debt_transaction_type': None, 'deleted': False, 'subtransactions': []}, {'id': '0aab9089-ba41-4a44-a44b-1c3b441c4983', 'date': '2023-04-13', 'amount': -1200, 'memo': 'Glasol ', 'cleared': 'uncleared', 'approved': False, 'flag_color': None, 'account_id': 'beee97b1-8f50-49e7-84d3-c173215e8879', 'account_name': 'Splitwise', 'payee_id': '45909ecf-68dd-4257-a988-028c05da1d42', 'payee_name': 'Ralitsa Tsvetkova', 'category_id': '9089489b-c1aa-41fb-bb62-56a01856b431', 'category_name': 'Spotify', 'transfer_account_id': None, 'transfer_transaction_id': None, 'matched_transaction_id': None, 'import_id': None, 'import_payee_name': None, 'import_payee_name_original': None, 'debt_transaction_type': None, 'deleted': False, 'subtransactions': []}, {'id': 'd5555df9-09b8-45d4-8438-71051990778f', 'date': '2023-04-13', 'amount': -750, 'memo': 'Horno goya', 'cleared': 'uncleared', 'approved': False, 'flag_color': None, 'account_id': 'beee97b1-8f50-49e7-84d3-c173215e8879', 'account_name': 'Splitwise', 'payee_id': '45909ecf-68dd-4257-a988-028c05da1d42', 'payee_name': 'Ralitsa Tsvetkova', 'category_id': '9089489b-c1aa-41fb-bb62-56a01856b431', 'category_name': 'Spotify', 'transfer_account_id': None, 'transfer_transaction_id': None, 'matched_transaction_id': None, 'import_id': None, 'import_payee_name': None, 'import_payee_name_original': None, 'debt_transaction_type': None, 'deleted': False, 'subtransactions': []}, {'id': 'a32b1c81-b500-4842-8e2c-13c1e5d28535', 'date': '2023-04-14', 'amount': -15000, 'memo': 'Wardrobe', 'cleared': 'uncleared', 'approved': False, 'flag_color': None, 'account_id': 'beee97b1-8f50-49e7-84d3-c173215e8879', 'account_name': 'Splitwise', 'payee_id': '45909ecf-68dd-4257-a988-028c05da1d42', 'payee_name': 'Ralitsa Tsvetkova', 'category_id': '9089489b-c1aa-41fb-bb62-56a01856b431', 'category_name': 'Spotify', 'transfer_account_id': None, 'transfer_transaction_id': None, 'matched_transaction_id': None, 'import_id': None, 'import_payee_name': None, 'import_payee_name_original': None, 'debt_transaction_type': None, 'deleted': False, 'subtransactions': []}, {'id': '74bb1859-1c24-4495-b8e4-2de9bafd27fb', 'date': '2023-04-17', 'amount': -12100, 'memo': 'Renfe', 'cleared': 'uncleared', 'approved': False, 'flag_color': None, 'account_id': 'beee97b1-8f50-49e7-84d3-c173215e8879', 'account_name': 'Splitwise', 'payee_id': '45909ecf-68dd-4257-a988-028c05da1d42', 'payee_name': 'Ralitsa Tsvetkova', 'category_id': '9089489b-c1aa-41fb-bb62-56a01856b431', 'category_name': 'Spotify', 'transfer_account_id': None, 'transfer_transaction_id': None, 'matched_transaction_id': None, 'import_id': None, 'import_payee_name': None, 'import_payee_name_original': None, 'debt_transaction_type': None, 'deleted': False, 'subtransactions': []}, {'id': '62a5438d-9b26-41a6-822d-09eaf765f01b', 'date': '2023-04-17', 'amount': -8950, 'memo': 'BG store', 'cleared': 'uncleared', 'approved': False, 'flag_color': None, 'account_id': 'beee97b1-8f50-49e7-84d3-c173215e8879', 'account_name': 'Splitwise', 'payee_id': '45909ecf-68dd-4257-a988-028c05da1d42', 'payee_name': 'Ralitsa Tsvetkova', 'category_id': '9089489b-c1aa-41fb-bb62-56a01856b431', 'category_name': 'Spotify', 'transfer_account_id': None, 'transfer_transaction_id': None, 'matched_transaction_id': None, 'import_id': None, 'import_payee_name': None, 'import_payee_name_original': None, 'debt_transaction_type': None, 'deleted': False, 'subtransactions': []}, {'id': '41447d4c-8fc5-4533-9ab1-aa78fdb05eca', 'date': '2023-04-17', 'amount': -7750, 'memo': 'Lidl', 'cleared': 'uncleared', 'approved': False, 'flag_color': None, 'account_id': 'beee97b1-8f50-49e7-84d3-c173215e8879', 'account_name': 'Splitwise', 'payee_id': '45909ecf-68dd-4257-a988-028c05da1d42', 'payee_name': 'Ralitsa Tsvetkova', 'category_id': '9089489b-c1aa-41fb-bb62-56a01856b431', 'category_name': 'Spotify', 'transfer_account_id': None, 'transfer_transaction_id': None, 'matched_transaction_id': None, 'import_id': None, 'import_payee_name': None, 'import_payee_name_original': None, 'debt_transaction_type': None, 'deleted': False, 'subtransactions': []}, {'id': '9a75f64e-39ab-453d-bd1f-950329449cb3', 'date': '2023-04-17', 'amount': -7600, 'memo': 'Mercadona', 'cleared': 'uncleared', 'approved': False, 'flag_color': None, 'account_id': 'beee97b1-8f50-49e7-84d3-c173215e8879', 'account_name': 'Splitwise', 'payee_id': '45909ecf-68dd-4257-a988-028c05da1d42', 'payee_name': 'Ralitsa Tsvetkova', 'category_id': '9089489b-c1aa-41fb-bb62-56a01856b431', 'category_name': 'Spotify', 'transfer_account_id': None, 'transfer_transaction_id': None, 'matched_transaction_id': None, 'import_id': None, 'import_payee_name': None, 'import_payee_name_original': None, 'debt_transaction_type': None, 'deleted': False, 'subtransactions': []}, {'id': '584232cd-24ef-44e3-ae0a-dfdc99bc36f0', 'date': '2023-04-17', 'amount': -6000, 'memo': 'Drinks with Maria', 'cleared': 'uncleared', 'approved': False, 'flag_color': None, 'account_id': 'beee97b1-8f50-49e7-84d3-c173215e8879', 'account_name': 'Splitwise', 'payee_id': '45909ecf-68dd-4257-a988-028c05da1d42', 'payee_name': 'Ralitsa Tsvetkova', 'category_id': '9089489b-c1aa-41fb-bb62-56a01856b431', 'category_name': 'Spotify', 'transfer_account_id': None, 'transfer_transaction_id': None, 'matched_transaction_id': None, 'import_id': None, 'import_payee_name': None, 'import_payee_name_original': None, 'debt_transaction_type': None, 'deleted': False, 'subtransactions': []}, {'id': 'c56a0322-4527-4eab-8b41-4ab9e3fec2af', 'date': '2023-04-17', 'amount': -2500, 'memo': 'Beach bar', 'cleared': 'uncleared', 'approved': False, 'flag_color': None, 'account_id': 'beee97b1-8f50-49e7-84d3-c173215e8879', 'account_name': 'Splitwise', 'payee_id': '45909ecf-68dd-4257-a988-028c05da1d42', 'payee_name': 'Ralitsa Tsvetkova', 'category_id': '9089489b-c1aa-41fb-bb62-56a01856b431', 'category_name': 'Spotify', 'transfer_account_id': None, 'transfer_transaction_id': None, 'matched_transaction_id': None, 'import_id': None, 'import_payee_name': None, 'import_payee_name_original': None, 'debt_transaction_type': None, 'deleted': False, 'subtransactions': []}]\n" ] } ], "source": [ "# Create new transactions in YNAB and save new JSON transactions file\n", "\n", "if ynab_new_transactions:\n", " creation_output = ynab.transactions.create_transactions(budget_id=ynab_budget_id, transactions=ynab_new_transactions)\n", "\n", " ynab_new_transactions_ynab = creation_output['data']['transactions']\n", " ynab_new_transaction_ynab_ids = [d['id'] for d in creation_output['data']['transactions']]\n", "\n", " print(\"creation_output\", creation_output)\n", " print(\"ynab_new_transactions_ynab\", ynab_new_transactions_ynab)\n", "\n", " # new_transaction_dict = {}\n", "\n", " # for i, x in enumerate(ynab_new_transaction_sw_ids):\n", " # new_transaction_dict[ynab_new_transaction_sw_ids[i]] = ynab_new_transaction_ynab_ids[-1 - i]\n", "\n", " # for x in sw_new_expense_data:\n", " # x['ynab_id'] = new_transaction_dict[x['splitwise_id']]\n", "\n", "\n", "# sw_new_expense_data.extend(sw_update_expense_data)\n", "# sw_new_expense_data.extend(remove_from_update_list)\n", "\n", "# with open(transactions_path, \"w\") as outfile:\n", "# json.dump(sw_new_expense_data, outfile, indent=2)\n" ] }, { "cell_type": "code", "execution_count": 62, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "'c56a0322-4527-4eab-8b41-4ab9e3fec2af'" ] }, "execution_count": 62, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ynab.transactions.get_transactions_from_account(budget_id=ynab_budget_id, account_id=ynab_account_id).data.transactions[-1].id" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "What should be done next:\n", "* See if you can make it so that 'deleted' YNAB transactions that are actually manually deleted, don't show up\n", " * so: if something is ['deleted'] == 'true', don't send it to YNAB\n", "* and then the other side: from YNAB to Splitwise" ] }, { "cell_type": "markdown", "metadata": {}, "source": [] } ], "metadata": { "kernelspec": { "display_name": "ynab", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.9.16" }, "orig_nbformat": 4 }, "nbformat": 4, "nbformat_minor": 2 }