ynab-splitwise-connect / together.ipynb
together.ipynb
Raw
{
 "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
}